/* Simple OpenMP test program that calls printf() from a parallel section. */ #include <assert.h> // assert() #include <omp.h> #include <stdio.h> #include <stdlib.h> // atoi() #include <unistd.h> // getopt() static void usage(const char* const exe) { fprintf(stderr, "Usage: %s [-h] [-i <n>] [-q] [-t<n>]\n" "-h: display this information.\n" "-i <n>: number of loop iterations.\n" "-q: quiet mode -- do not print computed error.\n" "-t <n>: number of OMP threads.\n", exe); } int main(int argc, char** argv) { int i; int optchar; int silent = 0; int tid; int num_iterations = 2; int num_threads = 2; while ((optchar = getopt(argc, argv, "hi:qt:")) != EOF) { switch (optchar) { case 'h': usage(argv[0]); return 1; case 'i': num_iterations = atoi(optarg); break; case 'q': silent = 1; break; case 't': num_threads = atoi(optarg); break; default: return 1; } } /* * Not the most user-friendly way of error checking, but still better than * no error checking. */ assert(num_iterations > 0); assert(num_threads > 0); omp_set_num_threads(num_threads); omp_set_dynamic(0); #pragma omp parallel for private(tid) for (i = 0; i < num_iterations; i++) { tid = omp_get_thread_num(); if (! silent) { fprintf(stderr, "iteration %d; thread number = %d; number of threads = %d\n", i, tid, omp_get_num_threads()); } else { fprintf(stderr, "%s", ""); } } fprintf(stderr, "Finished.\n"); return 0; }