xref: /openbsd-src/gnu/gcc/libgomp/testsuite/libgomp.c/omp-loop01.c (revision 404b540a9034ac75a6199ad1a32d1bbc7a0d4210)
1*404b540aSrobert #include <stdlib.h>
2*404b540aSrobert #include <stdio.h>
3*404b540aSrobert #include <string.h>
4*404b540aSrobert #include <omp.h>
5*404b540aSrobert 
6*404b540aSrobert #define MAX	1000
7*404b540aSrobert 
main1()8*404b540aSrobert void main1()
9*404b540aSrobert {
10*404b540aSrobert   int i, N1, N2, step;
11*404b540aSrobert   int a[MAX], b[MAX];
12*404b540aSrobert 
13*404b540aSrobert   N1 = rand () % 13;
14*404b540aSrobert   N2 = rand () % (MAX - 51) + 50;
15*404b540aSrobert   step = rand () % 7 + 1;
16*404b540aSrobert 
17*404b540aSrobert   printf ("N1 = %d\nN2 = %d\nstep = %d\n", N1, N2, step);
18*404b540aSrobert 
19*404b540aSrobert   for (i = N1; i <= N2; i += step)
20*404b540aSrobert     a[i] = 42+ i;
21*404b540aSrobert 
22*404b540aSrobert   /* COUNTING UP (<).  Fill in array 'b' in parallel.  */
23*404b540aSrobert   memset (b, 0, sizeof b);
24*404b540aSrobert #pragma omp parallel shared(a,b,N1,N2,step) private(i)
25*404b540aSrobert   {
26*404b540aSrobert #pragma omp for
27*404b540aSrobert     for (i = N1; i < N2; i += step)
28*404b540aSrobert       b[i] = a[i];
29*404b540aSrobert   }
30*404b540aSrobert 
31*404b540aSrobert   /* COUNTING UP (<).  Check that all the cells were filled in properly.  */
32*404b540aSrobert   for (i = N1; i < N2; i += step)
33*404b540aSrobert     if (a[i] != b[i])
34*404b540aSrobert       abort ();
35*404b540aSrobert 
36*404b540aSrobert   printf ("for (i = %d; i < %d; i += %d) [OK]\n", N1, N2, step);
37*404b540aSrobert 
38*404b540aSrobert   /* COUNTING UP (<=).  Fill in array 'b' in parallel.  */
39*404b540aSrobert   memset (b, 0, sizeof b);
40*404b540aSrobert #pragma omp parallel shared(a,b,N1,N2,step) private(i)
41*404b540aSrobert   {
42*404b540aSrobert #pragma omp for
43*404b540aSrobert     for (i = N1; i <= N2; i += step)
44*404b540aSrobert       b[i] = a[i];
45*404b540aSrobert   }
46*404b540aSrobert 
47*404b540aSrobert   /* COUNTING UP (<=).  Check that all the cells were filled in properly.  */
48*404b540aSrobert   for (i = N1; i <= N2; i += step)
49*404b540aSrobert     if (a[i] != b[i])
50*404b540aSrobert       abort ();
51*404b540aSrobert 
52*404b540aSrobert   printf ("for (i = %d; i <= %d; i += %d) [OK]\n", N1, N2, step);
53*404b540aSrobert 
54*404b540aSrobert   /* COUNTING DOWN (>).  Fill in array 'b' in parallel.  */
55*404b540aSrobert   memset (b, 0, sizeof b);
56*404b540aSrobert #pragma omp parallel shared(a,b,N1,N2,step) private(i)
57*404b540aSrobert   {
58*404b540aSrobert #pragma omp for
59*404b540aSrobert     for (i = N2; i > N1; i -= step)
60*404b540aSrobert       b[i] = a[i];
61*404b540aSrobert   }
62*404b540aSrobert 
63*404b540aSrobert   /* COUNTING DOWN (>).  Check that all the cells were filled in properly.  */
64*404b540aSrobert   for (i = N2; i > N1; i -= step)
65*404b540aSrobert     if (a[i] != b[i])
66*404b540aSrobert       abort ();
67*404b540aSrobert 
68*404b540aSrobert   printf ("for (i = %d; i > %d; i -= %d) [OK]\n", N2, N1, step);
69*404b540aSrobert 
70*404b540aSrobert   /* COUNTING DOWN (>=).  Fill in array 'b' in parallel.  */
71*404b540aSrobert   memset (b, 0, sizeof b);
72*404b540aSrobert #pragma omp parallel shared(a,b,N1,N2,step) private(i)
73*404b540aSrobert   {
74*404b540aSrobert #pragma omp for
75*404b540aSrobert     for (i = N2; i >= N1; i -= step)
76*404b540aSrobert       b[i] = a[i];
77*404b540aSrobert   }
78*404b540aSrobert 
79*404b540aSrobert   /* COUNTING DOWN (>=).  Check that all the cells were filled in properly.  */
80*404b540aSrobert   for (i = N2; i >= N1; i -= step)
81*404b540aSrobert     if (a[i] != b[i])
82*404b540aSrobert       abort ();
83*404b540aSrobert 
84*404b540aSrobert   printf ("for (i = %d; i >= %d; i -= %d) [OK]\n", N2, N1, step);
85*404b540aSrobert }
86*404b540aSrobert 
87*404b540aSrobert int
main()88*404b540aSrobert main ()
89*404b540aSrobert {
90*404b540aSrobert   int i;
91*404b540aSrobert 
92*404b540aSrobert   srand (0);
93*404b540aSrobert   for (i = 0; i < 10; ++i)
94*404b540aSrobert     main1();
95*404b540aSrobert   return 0;
96*404b540aSrobert }
97