target-25.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include <stdlib.h>
  2. #include <unistd.h>
  3. int
  4. main ()
  5. {
  6. int x = 0, y = 0, z = 0, s = 11, t = 12, u = 13, w = 7, err;
  7. #pragma omp parallel
  8. #pragma omp single
  9. {
  10. #pragma omp task depend(in: x)
  11. {
  12. usleep (5000);
  13. x = 1;
  14. }
  15. #pragma omp task depend(in: x)
  16. {
  17. usleep (6000);
  18. y = 2;
  19. }
  20. #pragma omp task depend(out: z)
  21. {
  22. usleep (7000);
  23. z = 3;
  24. }
  25. #pragma omp target map(tofrom: x) map(from: err) map (to: y, z) depend(inout: x, z)
  26. err = (x != 1 || y != 2 || z != 3);
  27. if (err)
  28. abort ();
  29. #pragma omp task depend(in: x)
  30. {
  31. usleep (5000);
  32. x = 4;
  33. }
  34. #pragma omp task depend(in: x)
  35. {
  36. usleep (4000);
  37. y = 5;
  38. }
  39. #pragma omp task depend(in: z)
  40. {
  41. usleep (3000);
  42. z = 6;
  43. }
  44. #pragma omp target enter data nowait map (to: w)
  45. #pragma omp target enter data depend (inout: x, z) map (to: x, y, z)
  46. #pragma omp target map (alloc: x, y, z) map(from: err)
  47. {
  48. err = (x != 4 || y != 5 || z != 6);
  49. x = 7;
  50. y = 8;
  51. z = 9;
  52. }
  53. if (err)
  54. abort ();
  55. #pragma omp taskwait
  56. #pragma omp target map (alloc: w) map(from: err)
  57. {
  58. err = w != 7;
  59. w = 17;
  60. }
  61. if (err)
  62. abort ();
  63. #pragma omp task depend(in: x)
  64. {
  65. usleep (2000);
  66. s = 14;
  67. }
  68. #pragma omp task depend(in: x)
  69. {
  70. usleep (3000);
  71. t = 15;
  72. }
  73. #pragma omp task depend(in: z)
  74. {
  75. usleep (4000);
  76. u = 16;
  77. }
  78. #pragma omp target exit data depend (inout: x, z) map (from: x, y, z, w)
  79. if (x != 7 || y != 8 || z != 9 || s != 14 || t != 15 || u != 16 || w != 17)
  80. abort ();
  81. }
  82. return 0;
  83. }