target-15.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. extern void abort (void);
  2. void
  3. foo (int *x)
  4. {
  5. int a[10], b[15], err, i;
  6. for (i = 0; i < 10; i++)
  7. a[i] = 7 * i;
  8. for (i = 0; i < 15; i++)
  9. b[i] = 8 * i;
  10. #pragma omp target map(to:x[5:10], a[0:10], b[5:10]) map(from:err)
  11. {
  12. err = 0;
  13. for (i = 0; i < 10; i++)
  14. if (x[5 + i] != 20 + 4 * i
  15. || a[i] != 7 * i
  16. || b[5 + i] != 40 + 8 * i)
  17. err = 1;
  18. }
  19. if (err)
  20. abort ();
  21. }
  22. void
  23. bar (int n, int v)
  24. {
  25. int a[n], b[n], c[n], d[n], e[n], err, i;
  26. int (*x)[n] = &c;
  27. for (i = 0; i < n; i++)
  28. {
  29. (*x)[i] = 4 * i;
  30. a[i] = 7 * i;
  31. b[i] = 8 * i;
  32. }
  33. #pragma omp target map(to:x[0][5:10], a[0:10], b[5:10]) map(from:err)
  34. {
  35. err = 0;
  36. for (i = 0; i < 10; i++)
  37. if ((*x)[5 + i] != 20 + 4 * i
  38. || a[i] != 7 * i
  39. || b[5 + i] != 40 + 8 * i)
  40. err = 1;
  41. }
  42. if (err)
  43. abort ();
  44. for (i = 0; i < n; i++)
  45. {
  46. (*x)[i] = 9 * i;
  47. a[i] = 12 * i;
  48. b[i] = 13 * i;
  49. }
  50. #pragma omp target map(to:x[0][v:v+5], a[v-5:v+5], b[v:v+5]) map(from:err)
  51. {
  52. err = 0;
  53. for (i = 0; i < 10; i++)
  54. if ((*x)[5 + i] != 45 + 9 * i
  55. || a[i] != 12 * i
  56. || b[5 + i] != 65 + 13 * i)
  57. err = 1;
  58. }
  59. if (err)
  60. abort ();
  61. }
  62. int
  63. main ()
  64. {
  65. int x[15], i;
  66. for (i = 0; i < 15; i++)
  67. x[i] = 4 * i;
  68. foo (x);
  69. bar (15, 5);
  70. return 0;
  71. }