File: a.40.1.f90

package info (click to toggle)
gcc-avr 1%3A5.4.0%2BAtmel3.6.1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 589,832 kB
  • sloc: ansic: 2,775,567; ada: 756,757; cpp: 723,977; f90: 117,673; asm: 66,896; makefile: 62,755; xml: 44,466; sh: 29,549; exp: 23,315; objc: 15,216; fortran: 10,901; pascal: 4,185; python: 4,093; perl: 2,969; awk: 2,811; ml: 2,385; cs: 879; yacc: 316; lex: 198; haskell: 112; lisp: 8
file content (54 lines) | stat: -rw-r--r-- 1,674 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
! { dg-do compile }
! { dg-options "-ffixed-form" }
        MODULE DATA
        USE OMP_LIB, ONLY: OMP_NEST_LOCK_KIND
        TYPE LOCKED_PAIR
        INTEGER A
        INTEGER B
        INTEGER (OMP_NEST_LOCK_KIND) LCK
        END TYPE
            END MODULE DATA
        SUBROUTINE INCR_A(P, A)
            ! called only from INCR_PAIR, no need to lock
            USE DATA
            TYPE(LOCKED_PAIR) :: P
            INTEGER A
            P%A = P%A + A
        END SUBROUTINE INCR_A
        SUBROUTINE INCR_B(P, B)
            ! called from both INCR_PAIR and elsewhere,
            ! so we need a nestable lock
            USE OMP_LIB       ! or INCLUDE "omp_lib.h"
            USE DATA
            TYPE(LOCKED_PAIR) :: P
            INTEGER B
            CALL OMP_SET_NEST_LOCK(P%LCK)
            P%B = P%B + B
            CALL OMP_UNSET_NEST_LOCK(P%LCK)
        END SUBROUTINE INCR_B
        SUBROUTINE INCR_PAIR(P, A, B)
            USE OMP_LIB         ! or INCLUDE "omp_lib.h"
            USE DATA
            TYPE(LOCKED_PAIR) :: P
            INTEGER A
            INTEGER B
        CALL OMP_SET_NEST_LOCK(P%LCK)
        CALL INCR_A(P, A)
        CALL INCR_B(P, B)
        CALL OMP_UNSET_NEST_LOCK(P%LCK)
      END SUBROUTINE INCR_PAIR
      SUBROUTINE A40(P)
        USE OMP_LIB        ! or INCLUDE "omp_lib.h"
        USE DATA
        TYPE(LOCKED_PAIR) :: P
        INTEGER WORK1, WORK2, WORK3
        EXTERNAL WORK1, WORK2, WORK3
!$OMP PARALLEL SECTIONS
!$OMP SECTION
          CALL INCR_PAIR(P, WORK1(), WORK2())
!$OMP SECTION
          CALL INCR_B(P, WORK3())
!$OMP END PARALLEL SECTIONS
      END SUBROUTINE A40

! { dg-final { cleanup-modules "data" } }