target-1.c 771 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /* { dg-do run } */
  2. #include <stdlib.h>
  3. #define N 100000
  4. void init (int *a1, int *a2)
  5. {
  6. int i, s = -1;
  7. for (i = 0; i < N; i++)
  8. {
  9. a1[i] = s;
  10. a2[i] = i;
  11. s = -s;
  12. }
  13. }
  14. void check (int *a, int *b)
  15. {
  16. int i;
  17. for (i = 0; i < N; i++)
  18. if (a[i] != b[i])
  19. abort ();
  20. }
  21. void vec_mult_ref (int *p)
  22. {
  23. int i;
  24. int v1[N], v2[N];
  25. init (v1, v2);
  26. for (i = 0; i < N; i++)
  27. p[i] = v1[i] * v2[i];
  28. }
  29. void vec_mult (int *p)
  30. {
  31. int i;
  32. int v1[N], v2[N];
  33. init (v1, v2);
  34. #pragma omp target map(p[0:N])
  35. #pragma omp parallel for
  36. for (i = 0; i < N; i++)
  37. p[i] = v1[i] * v2[i];
  38. }
  39. int main ()
  40. {
  41. int p1[N], p2[N];
  42. int v1[N], v2[N];
  43. init (v1, v2);
  44. vec_mult_ref (p1);
  45. vec_mult (p2);
  46. check (p1, p2);
  47. return 0;
  48. }