0
|
1 program lastprivate
|
|
2 integer :: i
|
|
3 common /c/ i
|
|
4 !$omp parallel num_threads (4)
|
|
5 call test1
|
|
6 !$omp end parallel
|
|
7 if (i .ne. 21) call abort
|
|
8 !$omp parallel num_threads (4)
|
|
9 call test2
|
|
10 !$omp end parallel
|
|
11 if (i .ne. 64) call abort
|
|
12 !$omp parallel num_threads (4)
|
|
13 call test3
|
|
14 !$omp end parallel
|
|
15 if (i .ne. 14) call abort
|
|
16 call test4
|
|
17 call test5
|
|
18 call test6
|
|
19 call test7
|
|
20 call test8
|
|
21 call test9
|
|
22 call test10
|
|
23 call test11
|
|
24 call test12
|
|
25 contains
|
|
26 subroutine test1
|
|
27 integer :: i
|
|
28 common /c/ i
|
|
29 !$omp do lastprivate (i)
|
|
30 do i = 1, 20
|
|
31 end do
|
|
32 end subroutine test1
|
|
33 subroutine test2
|
|
34 integer :: i
|
|
35 common /c/ i
|
|
36 !$omp do lastprivate (i)
|
|
37 do i = 7, 61, 3
|
|
38 end do
|
|
39 end subroutine test2
|
|
40 function ret3 ()
|
|
41 integer :: ret3
|
|
42 ret3 = 3
|
|
43 end function ret3
|
|
44 subroutine test3
|
|
45 integer :: i
|
|
46 common /c/ i
|
|
47 !$omp do lastprivate (i)
|
|
48 do i = -10, 11, ret3 ()
|
|
49 end do
|
|
50 end subroutine test3
|
|
51 subroutine test4
|
|
52 integer :: j
|
|
53 !$omp parallel do lastprivate (j) num_threads (4) default (none)
|
|
54 do j = 1, 20
|
|
55 end do
|
|
56 if (j .ne. 21) call abort
|
|
57 end subroutine test4
|
|
58 subroutine test5
|
|
59 integer :: j
|
|
60 !$omp parallel do lastprivate (j) num_threads (4) default (none)
|
|
61 do j = 7, 61, 3
|
|
62 end do
|
|
63 if (j .ne. 64) call abort
|
|
64 end subroutine test5
|
|
65 subroutine test6
|
|
66 integer :: j
|
|
67 !$omp parallel do lastprivate (j) num_threads (4) default (none)
|
|
68 do j = -10, 11, ret3 ()
|
|
69 end do
|
|
70 if (j .ne. 14) call abort
|
|
71 end subroutine test6
|
|
72 subroutine test7
|
|
73 integer :: i
|
|
74 common /c/ i
|
|
75 !$omp parallel do lastprivate (i) num_threads (4) default (none)
|
|
76 do i = 1, 20
|
|
77 end do
|
|
78 if (i .ne. 21) call abort
|
|
79 end subroutine test7
|
|
80 subroutine test8
|
|
81 integer :: i
|
|
82 common /c/ i
|
|
83 !$omp parallel do lastprivate (i) num_threads (4) default (none)
|
|
84 do i = 7, 61, 3
|
|
85 end do
|
|
86 if (i .ne. 64) call abort
|
|
87 end subroutine test8
|
|
88 subroutine test9
|
|
89 integer :: i
|
|
90 common /c/ i
|
|
91 !$omp parallel do lastprivate (i) num_threads (4) default (none)
|
|
92 do i = -10, 11, ret3 ()
|
|
93 end do
|
|
94 if (i .ne. 14) call abort
|
|
95 end subroutine test9
|
|
96 subroutine test10
|
|
97 integer :: i
|
|
98 common /c/ i
|
|
99 !$omp parallel num_threads (4) default (none) shared (i)
|
|
100 !$omp do lastprivate (i)
|
|
101 do i = 1, 20
|
|
102 end do
|
|
103 !$omp end parallel
|
|
104 if (i .ne. 21) call abort
|
|
105 end subroutine test10
|
|
106 subroutine test11
|
|
107 integer :: i
|
|
108 common /c/ i
|
|
109 !$omp parallel num_threads (4) default (none) shared (i)
|
|
110 !$omp do lastprivate (i)
|
|
111 do i = 7, 61, 3
|
|
112 end do
|
|
113 !$omp end parallel
|
|
114 if (i .ne. 64) call abort
|
|
115 end subroutine test11
|
|
116 subroutine test12
|
|
117 integer :: i
|
|
118 common /c/ i
|
|
119 !$omp parallel num_threads (4) default (none) shared (i)
|
|
120 !$omp do lastprivate (i)
|
|
121 do i = -10, 11, ret3 ()
|
|
122 end do
|
|
123 !$omp end parallel
|
|
124 if (i .ne. 14) call abort
|
|
125 end subroutine test12
|
|
126 end program lastprivate
|