16 integer,
parameter :: repetitions = 10
20 call test_disp_num_buffers()
26 call test_num_threads_and_team()
28 call test_max_active_levels()
30 call test_default_device()
32 call test_affinity_mask()
35 call test_pause_resource()
38 print *, fails,
' check(s) failed'
46 logical,
intent(in) :: cond
47 character(len=*),
intent(in) :: msg
49 print *,
'FAIL: ', trim(msg)
54 subroutine test_disp_num_buffers()
56 end subroutine test_disp_num_buffers
58 subroutine test_stacksize()
60 integer(kmp_size_t_kind) :: got_s
61 want = 8_8 * 1024_8 * 1024_8
63 call check(kmp_get_stacksize() == int(want, kind=omp_integer_kind), &
64 'kmp_set_stacksize(integer(8)) vs kmp_get_stacksize')
65 got_s = kmp_get_stacksize_s()
66 call check(got_s == int(want, kind=kmp_size_t_kind), &
67 'kmp_set_stacksize(integer(8)) vs kmp_get_stacksize_s')
68 end subroutine test_stacksize
70 subroutine test_blocktime()
72 call check(kmp_get_blocktime() == 200,
'kmp_set_blocktime(integer(8))')
73 end subroutine test_blocktime
75 subroutine test_library()
78 call check(kmp_get_library() == 3,
'kmp_set_library(integer(8)) throughput')
80 call check(kmp_get_library() == 2,
'kmp_set_library(integer(8)) turnaround')
81 end subroutine test_library
83 subroutine test_num_threads_and_team()
84 integer :: nthreads, nthreads_lib, team_err
85 integer(8) :: level0, level1
96 'omp_set_num_threads(integer(8)) max_threads')
99 'omp_get_ancestor_thread_num(0_8) serial')
101 'omp_get_team_size(0_8) serial')
109 team_err = team_err + 1
112 nthreads = nthreads + 1
118 call check(team_err == 0, &
119 'omp_get_ancestor_thread_num / omp_get_team_size with integer(8)')
120 call check(nthreads == 2 .and. nthreads_lib == 2,
'parallel team size')
124 'omp_set_num_threads(integer(8)) clamp to INT_MAX')
126 end subroutine test_num_threads_and_team
128 subroutine test_schedule()
129 integer(omp_sched_kind) :: kind
135 call omp_get_schedule(kind, chunk)
137 'omp_set/get_schedule with integer(8) chunk, dynamic')
140 call omp_get_schedule(kind, chunk)
142 'omp_set/get_schedule with integer(8) chunk, guided')
143 end subroutine test_schedule
145 subroutine test_max_active_levels()
147 call check(omp_get_max_active_levels() == 1, &
148 'omp_set_max_active_levels(1_8)')
150 call check(omp_get_max_active_levels() >= 1, &
151 'omp_set_max_active_levels(2_8)')
152 end subroutine test_max_active_levels
154 subroutine test_teams()
155 call omp_set_num_teams(5_8)
156 call check(omp_get_max_teams() == 5,
'omp_set_num_teams(5_8)')
157 call omp_set_teams_thread_limit(7_8)
158 call check(omp_get_teams_thread_limit() == 7, &
159 'omp_set_teams_thread_limit(7_8)')
160 end subroutine test_teams
162 subroutine test_default_device()
163 integer :: orig, after8, after32
164 orig = omp_get_default_device()
165 call omp_set_default_device(0_8)
166 after8 = omp_get_default_device()
167 call omp_set_default_device(0)
168 after32 = omp_get_default_device()
169 call check(after8 == after32, &
170 'omp_set_default_device: integer(8) vs default integer')
171 call omp_set_default_device(orig)
172 end subroutine test_default_device
174 subroutine test_places()
175 integer :: nplaces, n32, n8, npart, i
176 integer(omp_integer_kind),
allocatable :: ids32(:), p32(:)
177 integer(8),
allocatable :: ids8(:), p8(:)
178 integer(8) :: dummy(1)
180 nplaces = omp_get_num_places()
181 if (nplaces > 0)
then
182 n32 = omp_get_place_num_procs(0)
183 n8 = omp_get_place_num_procs(0_8)
184 call check(n32 == n8,
'omp_get_place_num_procs(0_8)')
186 allocate(ids32(n32), ids8(n32))
187 call omp_get_place_proc_ids(0, ids32)
188 call omp_get_place_proc_ids(0_8, ids8)
190 call check(ids32(i) == int(ids8(i), kind=omp_integer_kind), &
191 'omp_get_place_proc_ids with integer(8) element')
193 deallocate(ids32, ids8)
196 call check(omp_get_place_num_procs(0_8) == omp_get_place_num_procs(0), &
197 'omp_get_place_num_procs(0_8) with no places')
200 npart = omp_get_partition_num_places()
202 allocate(p32(npart), p8(npart))
203 call omp_get_partition_place_nums(p32)
204 call omp_get_partition_place_nums(p8)
206 call check(p32(i) == int(p8(i), kind=omp_integer_kind), &
207 'omp_get_partition_place_nums with integer(8) element')
212 call omp_get_partition_place_nums(dummy)
214 end subroutine test_places
216 subroutine test_affinity_mask()
217 integer(kmp_affinity_mask_kind) :: mask
218 integer :: max_proc, rc_set, rc_set32
222 call kmp_create_affinity_mask(mask)
223 max_proc = kmp_get_affinity_max_proc()
224 rc_set = kmp_set_affinity_mask_proc(proc0, mask)
225 rc_set32 = kmp_set_affinity_mask_proc(0, mask)
226 call check(rc_set == rc_set32, &
227 'kmp_set_affinity_mask_proc: integer(8) vs default integer')
228 if (rc_set == 0 .and. max_proc > 0)
then
229 call check(kmp_get_affinity_mask_proc(proc0, mask) == 1, &
230 'kmp_get_affinity_mask_proc(integer(8)) after set')
231 call check(kmp_unset_affinity_mask_proc(proc0, mask) == 0, &
232 'kmp_unset_affinity_mask_proc(integer(8))')
233 call check(kmp_get_affinity_mask_proc(proc0, mask) == 0, &
234 'kmp_get_affinity_mask_proc(integer(8)) after unset')
236 rc_set = kmp_get_affinity_mask_proc(proc0, mask)
237 rc_set = kmp_unset_affinity_mask_proc(proc0, mask)
239 call kmp_destroy_affinity_mask(mask)
240 end subroutine test_affinity_mask
242 subroutine test_pause_resource()
243 integer :: my_dev, nthreads
244 integer(8) :: device8
246 my_dev = omp_get_initial_device()
247 device8 = int(my_dev, kind=8)
254 call check(nthreads > 0,
'threads before pause')
256 call check(omp_pause_resource(omp_pause_soft, device8) == 0, &
257 'omp_pause_resource(integer(8) device) soft')
264 call check(nthreads > 0,
'threads after pause soft')
266 call check(omp_pause_resource(omp_pause_hard, device8) == 0, &
267 'omp_pause_resource(integer(8) device) hard')
274 call check(nthreads > 0,
'threads after pause hard')
275 end subroutine test_pause_resource
program kmp_integer_8_apis
#define kmp_set_disp_num_buffers
#define omp_set_max_active_levels
#define omp_set_num_threads
#define omp_get_team_size
#define omp_get_ancestor_thread_num
#define kmp_set_blocktime
#define kmp_set_stacksize
int omp_get_max_threads()
int omp_get_num_threads()