omp_printf.c revision bbd3dcf169ce6f368dd83586b867e804d4cb84f1
1bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart/* Simple OpenMP test program that calls printf() from a parallel section. */
2bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart
3bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart#include <omp.h>
4bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart#include <stdio.h>
5bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart#include <unistd.h>  // getopt()
6bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart
7bbd3dcf169ce6f368dd83586b867e804d4cb84f1bartstatic void usage(const char* const exe)
8bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart{
9bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  printf("Usage: %s [-h] [-q] [-r] [-t<n>] <m>\n"
10bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart         "-h: display this information.\n"
11bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart         "-q: quiet mode -- do not print computed error.\n",
12bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart         exe);
13bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart}
14bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart
15bbd3dcf169ce6f368dd83586b867e804d4cb84f1bartint main(int argc, char** argv)
16bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart{
17bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  int i;
18bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  int optchar;
19bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  int silent = 0;
20bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  int tid;
21bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart
22bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  while ((optchar = getopt(argc, argv, "hq")) != EOF)
23bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  {
24bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    switch (optchar)
25bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    {
26bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    case 'h': usage(argv[0]); return 1;
27bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    case 'q': silent = 1; break;
28bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    default:
29bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart      return 1;
30bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    }
31bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  }
32bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart
33bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart#pragma omp parallel private(tid)
34bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  for (i = 0; i < 2; i++)
35bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  {
36bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    tid = omp_get_thread_num();
37bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    if (! silent)
38bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    {
39bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart      printf("omp_get_thread_num() = %d/%d\n", tid, omp_get_num_threads());
40bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    }
41bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    else
42bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    {
43bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart      printf("%s", "");
44bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart    }
45bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  }
46bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart
47bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  fprintf(stderr, "Finished.\n");
48bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart
49bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart  return 0;
50bbd3dcf169ce6f368dd83586b867e804d4cb84f1bart}
51