testsuite/libgomp.c++/shared-1.C

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

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