a.4.1.c 807 B

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