lib-32-2.f 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. ! ACC_PRESENT_OR_CREATE, ACC_PRESENT_OR_COPYIN, etc.
  2. ! Variant of "../libgomp.oacc-c-c++-common/lib-32.c".
  3. ! Variant using the "openacc" module.
  4. ! { dg-do run }
  5. PROGRAM MAIN
  6. USE OPENACC
  7. IMPLICIT NONE
  8. INTEGER, PARAMETER :: N = 10000
  9. INTEGER, ALLOCATABLE :: H(:)
  10. INTEGER :: I
  11. LOGICAL :: SHARED_MEM
  12. ALLOCATE (H(N))
  13. DO I = 1, N
  14. H(I) = I + 0
  15. END DO
  16. SHARED_MEM = ACC_IS_PRESENT (H)
  17. CALL ACC_PRESENT_OR_CREATE (H, INT (SIZEOF (H), 4))
  18. IF (.NOT. ACC_IS_PRESENT (H, INT (SIZEOF (H), 8))) STOP 1
  19. !$ACC PARALLEL LOOP DEFAULT (PRESENT)
  20. DO I = 1, N
  21. H(I) = I + 1
  22. END DO
  23. !$ACC END PARALLEL LOOP
  24. DO I = 1, N
  25. IF (H(I) .NE. I + MERGE (1, 0, SHARED_MEM)) STOP 2
  26. H(I) = I + 2
  27. END DO
  28. CALL ACC_PRESENT_OR_CREATE (H)
  29. !$ACC PARALLEL LOOP DEFAULT (PRESENT)
  30. DO I = 1, N
  31. IF (H(I) .NE. I + MERGE (2, 1, SHARED_MEM)) STOP 3
  32. H(I) = I + 3
  33. END DO
  34. !$ACC END PARALLEL LOOP
  35. DO I = 1, N
  36. IF (H(I) .NE. I + MERGE (3, 2, SHARED_MEM)) STOP 4
  37. H(I) = I + 4
  38. END DO
  39. CALL ACC_PCREATE (H, INT (SIZEOF (H), 4))
  40. !$ACC PARALLEL LOOP DEFAULT (PRESENT)
  41. DO I = 1, N
  42. IF (H(I) .NE. I + MERGE (4, 3, SHARED_MEM)) STOP 5
  43. H(I) = I + 5
  44. END DO
  45. !$ACC END PARALLEL LOOP
  46. DO I = 1, N
  47. IF (H(I) .NE. I + MERGE (5, 4, SHARED_MEM)) STOP 6
  48. H(I) = I + 6
  49. END DO
  50. CALL ACC_PRESENT_OR_COPYIN (H, INT (SIZEOF (H), 8))
  51. !$ACC PARALLEL LOOP DEFAULT (PRESENT)
  52. DO I = 1, N
  53. IF (H(I) .NE. I + MERGE (6, 5, SHARED_MEM)) STOP 7
  54. H(I) = I + 7
  55. END DO
  56. !$ACC END PARALLEL LOOP
  57. DO I = 1, N
  58. IF (H(I) .NE. I + MERGE (7, 6, SHARED_MEM)) STOP 8
  59. H(I) = I + 8
  60. END DO
  61. CALL ACC_PCOPYIN (H, INT (SIZEOF (H), 4))
  62. !$ACC PARALLEL LOOP DEFAULT (PRESENT)
  63. DO I = 1, N
  64. IF (H(I) .NE. I + MERGE (8, 7, SHARED_MEM)) STOP 9
  65. H(I) = I + 9
  66. END DO
  67. !$ACC END PARALLEL LOOP
  68. DO I = 1, N
  69. IF (H(I) .NE. I + MERGE (9, 8, SHARED_MEM)) STOP 10
  70. H(I) = I + 10
  71. END DO
  72. CALL ACC_COPYOUT_FINALIZE (H, INT (SIZEOF (H), 4))
  73. IF (.NOT. SHARED_MEM) THEN
  74. IF (ACC_IS_PRESENT (H, INT (SIZEOF (H), 8))) STOP 11
  75. ENDIF
  76. DO I = 1, N
  77. IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) STOP 12
  78. END DO
  79. CALL ACC_PCOPYIN (H)
  80. IF (.NOT. ACC_IS_PRESENT (H, INT (SIZEOF (H), 4))) STOP 13
  81. !$ACC PARALLEL LOOP DEFAULT (PRESENT)
  82. DO I = 1, N
  83. IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) STOP 14
  84. H(I) = I + 11
  85. END DO
  86. !$ACC END PARALLEL LOOP
  87. DO I = 1, N
  88. IF (H(I) .NE. I + MERGE (11, 9, SHARED_MEM)) STOP 15
  89. H(I) = I + 12
  90. END DO
  91. CALL ACC_PCOPYIN (H, INT (SIZEOF (H), 8))
  92. !$ACC PARALLEL LOOP DEFAULT (PRESENT)
  93. DO I = 1, N
  94. IF (H(I) .NE. I + MERGE (12, 11, SHARED_MEM)) STOP 16
  95. H(I) = I + 13
  96. END DO
  97. !$ACC END PARALLEL LOOP
  98. DO I = 1, N
  99. IF (H(I) .NE. I + MERGE (13, 12, SHARED_MEM)) STOP 17
  100. H(I) = I + 14
  101. END DO
  102. CALL ACC_PCREATE (H)
  103. !$ACC PARALLEL LOOP DEFAULT (PRESENT)
  104. DO I = 1, N
  105. IF (H(I) .NE. I + MERGE (14, 13, SHARED_MEM)) STOP 18
  106. H(I) = I + 15
  107. END DO
  108. !$ACC END PARALLEL LOOP
  109. DO I = 1, N
  110. IF (H(I) .NE. I + MERGE (15, 14, SHARED_MEM)) STOP 19
  111. H(I) = I + 16
  112. END DO
  113. CALL ACC_PCREATE (H, INT (SIZEOF (H), 8))
  114. !$ACC PARALLEL LOOP DEFAULT (PRESENT)
  115. DO I = 1, N
  116. IF (H(I) .NE. I + MERGE (16, 15, SHARED_MEM)) STOP 20
  117. H(I) = I + 17
  118. END DO
  119. !$ACC END PARALLEL LOOP
  120. DO I = 1, N
  121. IF (H(I) .NE. I + MERGE (17, 16, SHARED_MEM)) STOP 21
  122. H(I) = I + 18
  123. END DO
  124. CALL ACC_UPDATE_SELF (H, INT (SIZEOF (H), 4))
  125. IF (.NOT. ACC_IS_PRESENT (H, INT (SIZEOF (H), 8))) STOP 22
  126. DO I = 1, N
  127. IF (H(I) .NE. I + MERGE (18, 17, SHARED_MEM)) STOP 23
  128. END DO
  129. CALL ACC_DELETE_FINALIZE (H)
  130. IF (.NOT. SHARED_MEM) THEN
  131. IF (ACC_IS_PRESENT (H, INT (SIZEOF (H), 4))) STOP 24
  132. ENDIF
  133. DEALLOCATE (H)
  134. END PROGRAM MAIN