target-16.c 658 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. extern void abort (void);
  2. void
  3. foo (int n)
  4. {
  5. int a[n], i, err;
  6. for (i = 0; i < n; i++)
  7. a[i] = 7 * i;
  8. #pragma omp target firstprivate (a) map(from:err) private (i)
  9. {
  10. err = 0;
  11. for (i = 0; i < n; i++)
  12. if (a[i] != 7 * i)
  13. err = 1;
  14. }
  15. if (err)
  16. abort ();
  17. }
  18. void
  19. bar (int n)
  20. {
  21. int a[n], i, err;
  22. #pragma omp target private (a) map(from:err)
  23. {
  24. #pragma omp parallel for
  25. for (i = 0; i < n; i++)
  26. a[i] = 7 * i;
  27. err = 0;
  28. #pragma omp parallel for reduction(|:err)
  29. for (i = 0; i < n; i++)
  30. if (a[i] != 7 * i)
  31. err |= 1;
  32. }
  33. if (err)
  34. abort ();
  35. }
  36. int
  37. main ()
  38. {
  39. foo (7);
  40. bar (7);
  41. return 0;
  42. }