target-7.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include <omp.h>
  2. #include <stdlib.h>
  3. volatile int v;
  4. void
  5. foo (int f)
  6. {
  7. int d = f ? omp_get_num_devices () : omp_get_default_device ();
  8. int h = 5;
  9. #pragma omp target device (d)
  10. if (omp_get_level () != 0)
  11. abort ();
  12. #pragma omp target if (v > 1)
  13. if (omp_get_level () != 0 || !omp_is_initial_device ())
  14. abort ();
  15. #pragma omp target device (d) if (v > 1)
  16. if (omp_get_level () != 0 || !omp_is_initial_device ())
  17. abort ();
  18. #pragma omp target if (v <= 1)
  19. if (omp_get_level () != 0)
  20. abort ();
  21. #pragma omp target device (d) if (v <= 1)
  22. if (omp_get_level () != 0 || (f && !omp_is_initial_device ()))
  23. abort ();
  24. #pragma omp target if (0)
  25. if (omp_get_level () != 0 || !omp_is_initial_device ())
  26. abort ();
  27. #pragma omp target device (d) if (0)
  28. if (omp_get_level () != 0 || !omp_is_initial_device ())
  29. abort ();
  30. #pragma omp target if (1)
  31. if (omp_get_level () != 0)
  32. abort ();
  33. #pragma omp target device (d) if (1)
  34. if (omp_get_level () != 0 || (f && !omp_is_initial_device ()))
  35. abort ();
  36. #pragma omp target data device (d) map (to: h)
  37. {
  38. #pragma omp target device (d)
  39. if (omp_get_level () != 0 || (f && !omp_is_initial_device ()) || h++ != 5)
  40. abort ();
  41. #pragma omp target update device (d) from (h)
  42. }
  43. #pragma omp target data if (v > 1) map (to: h)
  44. {
  45. #pragma omp target if (v > 1)
  46. if (omp_get_level () != 0 || !omp_is_initial_device () || h++ != 6)
  47. abort ();
  48. #pragma omp target update if (v > 1) from (h)
  49. }
  50. #pragma omp target data device (d) if (v > 1) map (to: h)
  51. {
  52. #pragma omp target device (d) if (v > 1)
  53. if (omp_get_level () != 0 || !omp_is_initial_device () || h++ != 7)
  54. abort ();
  55. #pragma omp target update device (d) if (v > 1) from (h)
  56. }
  57. #pragma omp target data if (v <= 1) map (to: h)
  58. {
  59. #pragma omp target if (v <= 1)
  60. if (omp_get_level () != 0 || h++ != 8)
  61. abort ();
  62. #pragma omp target update if (v <= 1) from (h)
  63. }
  64. #pragma omp target data device (d) if (v <= 1) map (to: h)
  65. {
  66. #pragma omp target device (d) if (v <= 1)
  67. if (omp_get_level () != 0 || (f && !omp_is_initial_device ()) || h++ != 9)
  68. abort ();
  69. #pragma omp target update device (d) if (v <= 1) from (h)
  70. }
  71. #pragma omp target data if (0) map (to: h)
  72. {
  73. #pragma omp target if (0)
  74. if (omp_get_level () != 0 || !omp_is_initial_device () || h++ != 10)
  75. abort ();
  76. #pragma omp target update if (0) from (h)
  77. }
  78. #pragma omp target data device (d) if (0) map (to: h)
  79. {
  80. #pragma omp target device (d) if (0)
  81. if (omp_get_level () != 0 || !omp_is_initial_device () || h++ != 11)
  82. abort ();
  83. #pragma omp target update device (d) if (0) from (h)
  84. }
  85. #pragma omp target data if (1) map (to: h)
  86. {
  87. #pragma omp target if (1)
  88. if (omp_get_level () != 0 || h++ != 12)
  89. abort ();
  90. #pragma omp target update if (1) from (h)
  91. }
  92. #pragma omp target data device (d) if (1) map (to: h)
  93. {
  94. #pragma omp target device (d) if (1)
  95. if (omp_get_level () != 0 || (f && !omp_is_initial_device ()) || h++ != 13)
  96. abort ();
  97. #pragma omp target update device (d) if (1) from (h)
  98. }
  99. if (h != 14)
  100. abort ();
  101. }
  102. int
  103. main ()
  104. {
  105. foo (0);
  106. foo (1);
  107. return 0;
  108. }