for-16.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. extern
  2. #ifdef __cplusplus
  3. "C"
  4. #endif
  5. void abort (void);
  6. unsigned long long int k = 16;
  7. #pragma omp declare target to (k)
  8. int
  9. main ()
  10. {
  11. unsigned char a[144], b[144], c[144];
  12. int l;
  13. #pragma omp target map(from:a, b, c)
  14. {
  15. int i;
  16. unsigned long long int j;
  17. #pragma omp parallel for schedule (runtime)
  18. for (i = 0; i < 16; i++)
  19. a[i] = i;
  20. #pragma omp parallel for schedule (monotonic: runtime)
  21. for (i = 0; i < 16; i++)
  22. a[i + 16] = i + 16;
  23. #pragma omp parallel for schedule (nonmonotonic: runtime)
  24. for (i = 0; i < 16; i++)
  25. a[i + 32] = i + 32;
  26. #pragma omp parallel
  27. {
  28. #pragma omp for schedule (runtime)
  29. for (i = 0; i < 16; i++)
  30. a[i + 48] = i + 48;
  31. #pragma omp for schedule (monotonic: runtime)
  32. for (i = 0; i < 16; i++)
  33. a[i + 64] = i + 64;
  34. #pragma omp for schedule (nonmonotonic: runtime)
  35. for (i = 0; i < 16; i++)
  36. a[i + 80] = i + 80;
  37. #pragma omp for schedule (runtime)
  38. for (j = 0; j < k; j++)
  39. a[j + 96] = j + 96;
  40. #pragma omp for schedule (monotonic: runtime)
  41. for (j = 0; j < k; j++)
  42. a[j + 112] = j + 112;
  43. #pragma omp for schedule (nonmonotonic: runtime)
  44. for (j = 0; j < k; j++)
  45. a[j + 128] = j + 128;
  46. }
  47. #pragma omp parallel for schedule (dynamic)
  48. for (i = 0; i < 16; i++)
  49. b[i] = i;
  50. #pragma omp parallel for schedule (monotonic: dynamic)
  51. for (i = 0; i < 16; i++)
  52. b[i + 16] = i + 16;
  53. #pragma omp parallel for schedule (nonmonotonic: dynamic)
  54. for (i = 0; i < 16; i++)
  55. b[i + 32] = i + 32;
  56. #pragma omp parallel
  57. {
  58. #pragma omp for schedule (dynamic)
  59. for (i = 0; i < 16; i++)
  60. b[i + 48] = i + 48;
  61. #pragma omp for schedule (monotonic: dynamic)
  62. for (i = 0; i < 16; i++)
  63. b[i + 64] = i + 64;
  64. #pragma omp for schedule (nonmonotonic: dynamic)
  65. for (i = 0; i < 16; i++)
  66. b[i + 80] = i + 80;
  67. #pragma omp for schedule (dynamic)
  68. for (j = 0; j < k; j++)
  69. b[j + 96] = j + 96;
  70. #pragma omp for schedule (monotonic: dynamic)
  71. for (j = 0; j < k; j++)
  72. b[j + 112] = j + 112;
  73. #pragma omp for schedule (nonmonotonic: dynamic)
  74. for (j = 0; j < k; j++)
  75. b[j + 128] = j + 128;
  76. }
  77. #pragma omp parallel for schedule (guided)
  78. for (i = 0; i < 16; i++)
  79. c[i] = i;
  80. #pragma omp parallel for schedule (monotonic: guided)
  81. for (i = 0; i < 16; i++)
  82. c[i + 16] = i + 16;
  83. #pragma omp parallel for schedule (nonmonotonic: guided)
  84. for (i = 0; i < 16; i++)
  85. c[i + 32] = i + 32;
  86. #pragma omp parallel
  87. {
  88. #pragma omp for schedule (guided)
  89. for (i = 0; i < 16; i++)
  90. c[i + 48] = i + 48;
  91. #pragma omp for schedule (monotonic: guided)
  92. for (i = 0; i < 16; i++)
  93. c[i + 64] = i + 64;
  94. #pragma omp for schedule (nonmonotonic: guided)
  95. for (i = 0; i < 16; i++)
  96. c[i + 80] = i + 80;
  97. #pragma omp for schedule (guided)
  98. for (j = 0; j < k; j++)
  99. c[j + 96] = j + 96;
  100. #pragma omp for schedule (monotonic: guided)
  101. for (j = 0; j < k; j++)
  102. c[j + 112] = j + 112;
  103. #pragma omp for schedule (nonmonotonic: guided)
  104. for (j = 0; j < k; j++)
  105. c[j + 128] = j + 128;
  106. }
  107. }
  108. for (l = 0; l < 144; ++l)
  109. if (a[l] != l || b[l] != l || c[l] != l)
  110. abort ();
  111. return 0;
  112. }