Line data Source code
1 : module gbarrier_mod
2 : use gbarriertype_mod, only: gbarrier_t
3 : implicit none
4 :
5 : integer, parameter :: LOG2MAX = 6
6 : integer, parameter :: MAXTHREADS = 64
7 :
8 : public :: gbarrier_init
9 : public :: gbarrier_info
10 : public :: gbarrier
11 :
12 : contains
13 :
14 29952 : subroutine gbarrier_init(barrier, nthreads)
15 : type (gbarrier_t), intent(out) :: barrier
16 : integer, intent(in) :: nthreads
17 :
18 : interface
19 : subroutine gbarrier_initialize(c_barrier, nthreads) bind(C)
20 : use, intrinsic :: ISO_C_Binding, only: C_ptr, C_int
21 : implicit none
22 :
23 : type (C_ptr), intent(out) :: c_barrier
24 : integer (C_int), intent(in), value :: nthreads
25 : end subroutine gbarrier_initialize
26 : end interface
27 :
28 29952 : call gbarrier_initialize(barrier%c_barrier, nthreads)
29 29952 : end subroutine gbarrier_init
30 :
31 8448 : subroutine gbarrier_delete(barrier)
32 : type (gbarrier_t), intent(in) :: barrier
33 :
34 : interface
35 : subroutine gbarrier_free(c_barrier) bind(C)
36 : use, intrinsic :: ISO_C_Binding, only: C_ptr
37 : implicit none
38 :
39 : type (C_ptr), intent(in) :: c_barrier
40 : end subroutine gbarrier_free
41 : end interface
42 :
43 8448 : call gbarrier_free(barrier%c_barrier)
44 8448 : end subroutine gbarrier_delete
45 :
46 0 : subroutine gbarrier_info(barrier)
47 : type (gbarrier_t), intent(in) :: barrier
48 :
49 : interface
50 : subroutine gbarrier_print(c_barrier) bind(C)
51 : use, intrinsic :: ISO_C_Binding, only: C_ptr
52 : implicit none
53 : type (C_ptr), value :: c_barrier
54 : end subroutine gbarrier_print
55 : end interface
56 :
57 0 : call gbarrier_print(barrier%c_barrier)
58 0 : end subroutine gbarrier_info
59 :
60 :
61 65046528 : subroutine gbarrier(barrier, threadID)
62 : type (gbarrier_t), intent(in) :: barrier
63 : integer, intent(in) :: threadID
64 :
65 : interface
66 : subroutine gbarrier_synchronize(c_barrier, thread) bind(C)
67 : use, intrinsic :: ISO_C_Binding, only: C_ptr, C_int
68 : implicit none
69 :
70 : type (C_ptr), intent(in), value :: c_barrier
71 : integer (C_int), intent(in), value :: thread
72 : end subroutine gbarrier_synchronize
73 : end interface
74 :
75 65046528 : call gbarrier_synchronize(barrier%c_barrier, threadID)
76 65046528 : end subroutine gbarrier
77 :
78 : end module gbarrier_mod
79 :
|