diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..5c98b42
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,2 @@
+# Default ignored files
+/workspace.xml
\ No newline at end of file
diff --git a/.idea/benchmark-openMP.iml b/.idea/benchmark-openMP.iml
new file mode 100644
index 0000000..bc2cd87
--- /dev/null
+++ b/.idea/benchmark-openMP.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..b60fbef
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,4 @@
+all: main
+
+main:
+ gcc -std=c11 -Wall -o run main.c
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..5e5de95
--- /dev/null
+++ b/main.c
@@ -0,0 +1,122 @@
+#define _POSIX_C_SOURCE 199309L
+#include
+#include
+#include
+#include
+#include
+#include
+
+const char *argp_program_version =
+ "benchmark 0.1";
+/* Program documentation. */
+static char doc[] =
+ "I wonder for what this is";
+
+static struct argp_option options[] = {
+ {"verbose", 'v', 0, 0, "Produce verbose output" },
+ {"quiet", 'q', 0, 0, "Don't produce any output" },
+ {"iterations", 'i', "NUMBER", 0, "Number of iterations" },
+ {"output", 'o', "file", 0, "output to file instead of stdout" },
+ {"reps", 'r', "NUMBER", 0, "number of repetions in each iteration" },
+ {"operation", 'O', "name", 0, "operation e.g. mul, add. ..." },
+ {"numThreads", 'n', "NUMBER", 0, "specifies number of threads to be used. Default is num of logical cpus" },
+ { 0 }
+};
+struct arguments
+{
+ int silent, verbose, numThreads;
+ int use_output_file;
+ char *output_file;
+ char *operation;
+ size_t iterations, reps_per_iteration;
+};
+/* parse a single option. */
+static error_t
+parse_opt (int key, char *arg, struct argp_state *state)
+{
+ /* get the input argument from argp_parse, which we
+ know is a pointer to our arguments structure. */
+ struct arguments *arguments = state->input;
+
+ switch (key)
+ {
+ case 'q': case 's':
+ arguments->silent = 1;
+ break;
+ case 'v':
+ arguments->verbose = 1;
+ break;
+ case 'o':
+ arguments->output_file = arg;
+ arguments->use_output_file = 1;
+ break;
+ case 'O':
+ arguments->operation = arg;
+ break;
+ case 'n':
+ arguments->numThreads = strtol(arg,NULL,10);
+ break;
+ case 'i':
+ arguments->iterations = strtol(arg,NULL,10);//todo error handling
+ break;
+ case 'r':
+ arguments->reps_per_iteration = strtol(arg,NULL,10);//todo error handling
+ break;
+ case ARGP_KEY_ARG:
+ argp_usage (state);
+ break;
+ default:
+ return ARGP_ERR_UNKNOWN;
+ }
+ return 0;
+}
+
+/* our argp parser. */
+static struct argp argp = { options, parse_opt, 0 , doc };
+//parsing args set up end---------------------------------------------------------------
+
+clock_t ticks, new_ticks;
+struct timespec t1, t2;
+int main(int argc, char **argv) {
+ //parsing args----------------------------------------------------------------
+ struct arguments arguments;
+
+ /* default values. */
+ arguments.silent = 0;
+ arguments.verbose = 0;
+ arguments.reps_per_iteration = 100;
+ arguments.iterations = 100;
+ arguments.output_file = "-";
+ arguments.operation = "mul";
+ arguments.numThreads = 1;
+
+ argp_parse (&argp, argc, argv, 0, 0, &arguments);
+ //parsing args end---------------------------------------------------------------
+ long * n_times = malloc(arguments.iterations * sizeof(long));
+
+ float f2 = (float) arguments.iterations + 1.1; //avoid compiler optimization, because iterations is unknown for compiler
+ float f1 = 1.1f;
+ //iterate
+ for (size_t j = 0; j < arguments.iterations ; j++){
+ f2 = (float) arguments.iterations + 0.1 + j;
+ clock_gettime(CLOCK_MONOTONIC, &t1);
+ printf("time: %i\t", t1.tv_nsec);
+ for (size_t i = 0 ; i < arguments.reps_per_iteration; i++){
+ f1 = f2 * 1.1f;
+ }
+ clock_gettime(CLOCK_MONOTONIC, &t2);
+ n_times[j] = t2.tv_nsec - t1.tv_nsec;
+
+
+ }
+ //printf("Number = %f\n", f1);
+
+ for ( size_t i = 0 ; i < arguments.iterations; i++){
+ printf("%d\t", n_times[i]);
+ }
+ printf("\n");
+
+
+
+}
+