1 /* Simple OpenMP test program that calls printf() from a parallel section. */ 2 3 #include <assert.h> // assert() 4 #include <omp.h> 5 #include <stdio.h> 6 #include <stdlib.h> // atoi() 7 #include <unistd.h> // getopt() 8 9 static void usage(const char* const exe) 10 { 11 fprintf(stderr, 12 "Usage: %s [-h] [-i <n>] [-q] [-t<n>]\n" 13 "-h: display this information.\n" 14 "-i <n>: number of loop iterations.\n" 15 "-q: quiet mode -- do not print computed error.\n" 16 "-t <n>: number of OMP threads.\n", 17 exe); 18 } 19 20 int main(int argc, char** argv) 21 { 22 int i; 23 int optchar; 24 int silent = 0; 25 int tid; 26 int num_iterations = 2; 27 int num_threads = 2; 28 29 while ((optchar = getopt(argc, argv, "hi:qt:")) != EOF) 30 { 31 switch (optchar) 32 { 33 case 'h': usage(argv[0]); return 1; 34 case 'i': num_iterations = atoi(optarg); break; 35 case 'q': silent = 1; break; 36 case 't': num_threads = atoi(optarg); break; 37 default: 38 return 1; 39 } 40 } 41 42 /* 43 * Not the most user-friendly way of error checking, but still better than 44 * no error checking. 45 */ 46 assert(num_iterations > 0); 47 assert(num_threads > 0); 48 49 omp_set_num_threads(num_threads); 50 omp_set_dynamic(0); 51 52 #pragma omp parallel for private(tid) 53 for (i = 0; i < num_iterations; i++) 54 { 55 tid = omp_get_thread_num(); 56 if (! silent) 57 { 58 fprintf(stderr, 59 "iteration %d; thread number = %d; number of threads = %d\n", 60 i, tid, omp_get_num_threads()); 61 } 62 else 63 { 64 fprintf(stderr, "%s", ""); 65 } 66 } 67 68 fprintf(stderr, "Finished.\n"); 69 70 return 0; 71 } 72