File: omp-declarative-directive.f90

package info (click to toggle)
llvm-toolchain-11 1%3A11.0.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 995,808 kB
  • sloc: cpp: 4,767,656; ansic: 760,916; asm: 477,436; python: 170,940; objc: 69,804; lisp: 29,914; sh: 23,855; f90: 18,173; pascal: 7,551; perl: 7,471; ml: 5,603; awk: 3,489; makefile: 2,573; xml: 915; cs: 573; fortran: 503; javascript: 452
file content (74 lines) | stat: -rw-r--r-- 1,943 bytes parent folder | download | duplicates (2)
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
! RUN: %S/test_errors.sh %s %t %f18 -fopenmp

! Check OpenMP declarative directives

!TODO: all internal errors
!      enable declare-reduction example after name resolution

! 2.8.2 declare-simd

subroutine declare_simd_1(a, b)
  real(8), intent(inout) :: a, b
  !ERROR: Internal: no symbol found for 'declare_simd_1'
  !ERROR: Internal: no symbol found for 'a'
  !$omp declare simd(declare_simd_1) aligned(a)
  a = 3.14 + b
end subroutine declare_simd_1

module m1
  abstract interface
     subroutine sub(x,y)
       integer, intent(in)::x
       integer, intent(in)::y
     end subroutine sub
  end interface
end module m1

subroutine declare_simd_2
  use m1
  procedure (sub) sub1
  !ERROR: Internal: no symbol found for 'sub1'
  !ERROR: NOTINBRANCH and INBRANCH are mutually exclusive and may not appear on the same DECLARE SIMD directive
  !$omp declare simd(sub1) inbranch notinbranch
  procedure (sub), pointer::p
  p=>sub1
  call p(5,10)
end subroutine declare_simd_2

subroutine sub1 (x,y)
  integer, intent(in)::x, y
  print *, x+y
end subroutine sub1

! 2.10.6 declare-target
! 2.15.2 threadprivate

module m2
contains
  subroutine foo
    !$omp declare target
    !$omp declare target (foo, N, M)
    !$omp declare target to(Q, S) link(R)
    !ERROR: MAP clause is not allowed on the DECLARE TARGET directive
    !$omp declare target map(from:Q)
    integer, parameter :: N=10000, M=1024
    integer :: i
    real :: Q(N, N), R(N,M), S(M,M)
    !$omp threadprivate(i)
  end subroutine foo
end module m2

! 2.16 declare-reduction

! subroutine declare_red_1()
!   use omp_lib
!   integer :: my_var
!   !$omp declare reduction (my_add_red : integer : omp_out = omp_out + omp_in) initializer (omp_priv=0)
!   my_var = 0
!   !$omp parallel reduction (my_add_red : my_var) num_threads(4)
!   my_var = omp_get_thread_num() + 1
!   !$omp end parallel
!   print *, "sum of thread numbers is ", my_var
! end subroutine declare_red_1

end