0
|
1 /* { dg-do run } */
|
|
2
|
|
3 #include <omp.h>
|
|
4 extern void abort (void);
|
|
5 void
|
|
6 subdomain (float *x, int istart, int ipoints)
|
|
7 {
|
|
8 int i;
|
|
9 for (i = 0; i < ipoints; i++)
|
|
10 x[istart + i] = 123.456;
|
|
11 }
|
|
12
|
|
13 void
|
|
14 sub (float *x, int npoints)
|
|
15 {
|
|
16 int iam, nt, ipoints, istart;
|
|
17 #pragma omp parallel default(shared) private(iam,nt,ipoints,istart)
|
|
18 {
|
|
19 iam = omp_get_thread_num ();
|
|
20 nt = omp_get_num_threads ();
|
|
21 ipoints = npoints / nt; /* size of partition */
|
|
22 istart = iam * ipoints; /* starting array index */
|
|
23 if (iam == nt - 1) /* last thread may do more */
|
|
24 ipoints = npoints - istart;
|
|
25 subdomain (x, istart, ipoints);
|
|
26 }
|
|
27 }
|
|
28 int
|
|
29 main ()
|
|
30 {
|
|
31 int i;
|
|
32 float array[10000];
|
|
33 sub (array, 10000);
|
|
34 for (i = 0; i < 10000; i++)
|
|
35 if (array[i] < 123.45 || array[i] > 123.46)
|
|
36 abort ();
|
|
37 return 0;
|
|
38 }
|