/* Simple OpenMP test program that calls printf() from a parallel section. */ #include // assert() #include #include #include // atoi() #include // getopt() static void usage(const char* const exe) { fprintf(stderr, "Usage: %s [-h] [-i ] [-q] [-t]\n" "-h: display this information.\n" "-i : number of loop iterations.\n" "-q: quiet mode -- do not print computed error.\n" "-t : 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; }