blob: e14a9ba3861b3cc1f2481130a3558e52a0bce982 [file] [log] [blame]
Jim Cownie18d84732014-05-10 17:02:09 +00001<ompts:test>
2<ompts:testdescription>Test which checks the omp barrier directive. The test creates several threads and sends one of them sleeping before setting a flag. After the barrier the other ones do some littel work depending on the flag.</ ompts:testdescription>
3<ompts:ompversion>2.0</ompts:ompversion>
4<ompts:directive>omp barrier</ompts:directive>
5<ompts:testcode>
6
7 SUBROUTINE do_some_work3()
8 REAL i
9 INTRINSIC sqrt
10 DOUBLE PRECISION sum
11 INCLUDE "omp_testsuite.f"
12 sum = 0.0
13 DO WHILE (i < LOOPCOUNT-1)
14 sum = sum + sqrt(i)
15 i = i + 1
16 END DO
17 END
18
19 INTEGER FUNCTION <ompts:testcode:functionname>omp_barrier</ompts:testcode:functionname>()
20 IMPLICIT NONE
21 INTEGER sleeptime
22 INTEGER omp_get_thread_num
23 INTEGER result1, result2, rank
24 result1 = 0
25 result2 = 0
26 sleeptime = 1
27!$omp parallel private(rank)
28 rank = omp_get_thread_num()
29! PRINT *, "rank", rank
30 IF ( rank .EQ. 1 ) THEN
31 CALL sleep(sleeptime)
32 result2 = 3
33 END IF
34 <ompts:orphan>
35 <ompts:check>
36!$omp barrier
37 </ompts:check>
38 </ompts:orphan>
39 IF ( rank .EQ. 0 ) THEN
40 result1 = result2
41 END IF
42!$omp end parallel
43 IF ( result1 .EQ. 3 ) THEN
44 <testfunctionname></testfunctionname> = 1
45 ELSE
46 <testfunctionname></testfunctionname> = 0
47 END IF
48 END
49</ompts:testcode>
50</ompts:test>