testsuite/libgomp.c/shared-1.c

Go to the documentation of this file.
00001 extern void abort (void);
00002 
00003 struct Y
00004 {
00005   int l[5][10];
00006 };
00007 
00008 struct X
00009 {
00010   struct Y y;
00011   float b[10];
00012 };
00013 
00014 void
00015 parallel (int a, int b)
00016 {
00017   int i, j;
00018   struct X A[10][5];
00019   a = b = 3;
00020 
00021   for (i = 0; i < 10; i++)
00022     for (j = 0; j < 5; j++)
00023       A[i][j].y.l[3][3] = -10;
00024 
00025   #pragma omp parallel shared (a, b, A) num_threads (5)
00026     {
00027       int i, j;
00028 
00029       #pragma omp atomic
00030       a += omp_get_num_threads ();
00031 
00032       #pragma omp atomic
00033       b += omp_get_num_threads ();
00034 
00035       #pragma omp for private (j)
00036       for (i = 0; i < 10; i++)
00037     for (j = 0; j < 5; j++)
00038       A[i][j].y.l[3][3] += 20;
00039 
00040     }
00041 
00042   for (i = 0; i < 10; i++)
00043     for (j = 0; j < 5; j++)
00044       if (A[i][j].y.l[3][3] != 10)
00045     abort ();
00046 
00047   if (a != 28)
00048     abort ();
00049 
00050   if (b != 28)
00051     abort ();
00052 }
00053 
00054 main()
00055 {
00056   parallel (1, 2);
00057   return 0;
00058 }

Generated on Fri Apr 5 05:38:10 2013 for Libgomp by  doxygen 1.4.7