Skip to content

Commit 04c3e75

Browse files
committed
Add GET_DATA, SYNCHOST and NULLIFY
1 parent 348e1bb commit 04c3e75

File tree

2 files changed

+288
-24
lines changed

2 files changed

+288
-24
lines changed

transformations/tests/test_parallel_routine_dispatch.py

+204-13
Original file line numberDiff line numberDiff line change
@@ -138,19 +138,6 @@ def test_parallel_routine_dispatch_derived_var(here, frontend):
138138
transformation.apply(source['dispatch_routine'])
139139

140140

141-
## test_dcls=["REAL(KIND=JPRB), POINTER :: Z_YDVARS_U_T0(:, :, :)",
142-
##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_Q_DM(:, :, :)",
143-
##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_GEOMETRY_GELAM_T0(:, :)",
144-
##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_CVGQ_T0(:, :, :)",
145-
##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_Q_DL(:, :, :)",
146-
##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_V_T0(:, :, :)",
147-
##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_GEOMETRY_GEMU_T0(:, :)",
148-
##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_Q_T0(:, :, :)",
149-
##"REAL(KIND=JPRB), POINTER :: Z_YDCPG_PHY0_XYB_RDELP(:, :, :)",
150-
##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_CVGQ_DM(:, :, :)",
151-
##"REAL(KIND=JPRB), POINTER :: Z_YDCPG_DYN0_CTY_EVEL(:, :, :)",
152-
##"REAL(KIND=JPRB), POINTER :: Z_YDMF_PHYS_SURF_GSD_VF_PZ0F(:, :)",
153-
##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_CVGQ_DL(:, :, :)"]
154141
test_map = {
155142
"YDVARS%GEOMETRY%GEMU%T0" : ["YDVARS%GEOMETRY%GEMU%FT0", "Z_YDVARS_GEOMETRY_GEMU_T0"],
156143
"YDVARS%GEOMETRY%GELAM%T0" : ["YDVARS%GEOMETRY%GELAM%FT0", "Z_YDVARS_GEOMETRY_GELAM_T0"],
@@ -173,3 +160,207 @@ def test_parallel_routine_dispatch_derived_var(here, frontend):
173160

174161
assert test_map[var_name][0] == field_ptr.name
175162
assert test_map[var_name][1] == ptr.name
163+
164+
@pytest.mark.parametrize('frontend', available_frontends(skip=[OMNI]))
165+
def test_parallel_routine_dispatch_get_data(here, frontend):
166+
167+
source = Sourcefile.from_file(here/'sources/projParallelRoutineDispatch/dispatch_routine.F90', frontend=frontend)
168+
routine = source['dispatch_routine']
169+
170+
transformation = ParallelRoutineDispatchTransformation()
171+
transformation.apply(source['dispatch_routine'])
172+
173+
get_data = transformation.get_data
174+
175+
test_get_data = {}
176+
# test_get_data["OpenMP"] = """
177+
#IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 0, ZHOOK_HANDLE_FIELD_API)
178+
#ZRDG_CVGQ => GET_HOST_DATA_RDWR(YL_ZRDG_CVGQ)
179+
#ZRDG_MU0 => GET_HOST_DATA_RDWR(YL_ZRDG_MU0)
180+
#ZRDG_MU0LU => GET_HOST_DATA_RDWR(YL_ZRDG_MU0LU)
181+
#ZRDG_MU0M => GET_HOST_DATA_RDWR(YL_ZRDG_MU0M)
182+
#ZRDG_MU0N => GET_HOST_DATA_RDWR(YL_ZRDG_MU0N)
183+
#Z_YDCPG_DYN0_CTY_EVEL => GET_HOST_DATA_RDONLY(YDCPG_DYN0%CTY%F_EVEL)
184+
#Z_YDCPG_PHY0_XYB_RDELP => GET_HOST_DATA_RDONLY(YDCPG_PHY0%XYB%F_RDELP)
185+
#Z_YDVARS_CVGQ_DL => GET_HOST_DATA_RDONLY(YDVARS%CVGQ%FDL)
186+
#Z_YDVARS_CVGQ_DM => GET_HOST_DATA_RDONLY(YDVARS%CVGQ%FDM)
187+
#Z_YDVARS_CVGQ_T0 => GET_HOST_DATA_RDONLY(YDVARS%CVGQ%FT0)
188+
#Z_YDVARS_GEOMETRY_GELAM_T0 => GET_HOST_DATA_RDONLY(YDVARS%GEOMETRY%GELAM%FT0)
189+
#Z_YDVARS_GEOMETRY_GEMU_T0 => GET_HOST_DATA_RDONLY(YDVARS%GEOMETRY%GEMU%FT0)
190+
#Z_YDVARS_Q_DL => GET_HOST_DATA_RDONLY(YDVARS%Q%FDL)
191+
#Z_YDVARS_Q_DM => GET_HOST_DATA_RDONLY(YDVARS%Q%FDM)
192+
#Z_YDVARS_Q_T0 => GET_HOST_DATA_RDONLY(YDVARS%Q%FT0)
193+
#Z_YDVARS_U_T0 => GET_HOST_DATA_RDONLY(YDVARS%U%FT0)
194+
#Z_YDVARS_V_T0 => GET_HOST_DATA_RDONLY(YDVARS%V%FT0)
195+
#Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => GET_HOST_DATA_RDONLY(YDMF_PHYS_SURF%GSD_VF%F_Z0F)
196+
#IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 1, ZHOOK_HANDLE_FIELD_API)
197+
#"""
198+
test_get_data["OpenMP"] = """
199+
IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 0, ZHOOK_HANDLE_FIELD_API)
200+
ZRDG_CVGQ => GET_HOST_DATA_RDWR(YL_ZRDG_CVGQ)
201+
ZRDG_MU0 => GET_HOST_DATA_RDWR(YL_ZRDG_MU0)
202+
ZRDG_MU0LU => GET_HOST_DATA_RDWR(YL_ZRDG_MU0LU)
203+
ZRDG_MU0M => GET_HOST_DATA_RDWR(YL_ZRDG_MU0M)
204+
ZRDG_MU0N => GET_HOST_DATA_RDWR(YL_ZRDG_MU0N)
205+
Z_YDCPG_DYN0_CTY_EVEL => GET_HOST_DATA_RDWR(YDCPG_DYN0%CTY%F_EVEL)
206+
Z_YDCPG_PHY0_XYB_RDELP => GET_HOST_DATA_RDWR(YDCPG_PHY0%XYB%F_RDELP)
207+
Z_YDVARS_CVGQ_DL => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FDL)
208+
Z_YDVARS_CVGQ_DM => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FDM)
209+
Z_YDVARS_CVGQ_T0 => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FT0)
210+
Z_YDVARS_GEOMETRY_GELAM_T0 => GET_HOST_DATA_RDWR(YDVARS%GEOMETRY%GELAM%FT0)
211+
Z_YDVARS_GEOMETRY_GEMU_T0 => GET_HOST_DATA_RDWR(YDVARS%GEOMETRY%GEMU%FT0)
212+
Z_YDVARS_Q_DL => GET_HOST_DATA_RDWR(YDVARS%Q%FDL)
213+
Z_YDVARS_Q_DM => GET_HOST_DATA_RDWR(YDVARS%Q%FDM)
214+
Z_YDVARS_Q_T0 => GET_HOST_DATA_RDWR(YDVARS%Q%FT0)
215+
Z_YDVARS_U_T0 => GET_HOST_DATA_RDWR(YDVARS%U%FT0)
216+
Z_YDVARS_V_T0 => GET_HOST_DATA_RDWR(YDVARS%V%FT0)
217+
Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => GET_HOST_DATA_RDWR(YDMF_PHYS_SURF%GSD_VF%F_Z0F)
218+
IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 1, ZHOOK_HANDLE_FIELD_API)
219+
"""
220+
test_get_data["OpenMPSingleColumn"] = test_get_data["OpenMP"]
221+
222+
# test_get_data["OpenACCSingleColumn"] = """
223+
#IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 0, ZHOOK_HANDLE_FIELD_API)
224+
#ZRDG_CVGQ => GET_DEVICE_DATA_RDWR(YL_ZRDG_CVGQ)
225+
#ZRDG_MU0 => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0)
226+
#ZRDG_MU0LU => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0LU)
227+
#ZRDG_MU0M => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0M)
228+
#ZRDG_MU0N => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0N)
229+
#Z_YDCPG_DYN0_CTY_EVEL => GET_DEVICE_DATA_RDONLY(YDCPG_DYN0%CTY%F_EVEL)
230+
#Z_YDCPG_PHY0_XYB_RDELP => GET_DEVICE_DATA_RDONLY(YDCPG_PHY0%XYB%F_RDELP)
231+
#Z_YDVARS_CVGQ_DL => GET_DEVICE_DATA_RDONLY(YDVARS%CVGQ%FDL)
232+
#Z_YDVARS_CVGQ_DM => GET_DEVICE_DATA_RDONLY(YDVARS%CVGQ%FDM)
233+
#Z_YDVARS_CVGQ_T0 => GET_DEVICE_DATA_RDONLY(YDVARS%CVGQ%FT0)
234+
#Z_YDVARS_GEOMETRY_GELAM_T0 => GET_DEVICE_DATA_RDONLY(YDVARS%GEOMETRY%GELAM%FT0)
235+
#Z_YDVARS_GEOMETRY_GEMU_T0 => GET_DEVICE_DATA_RDONLY(YDVARS%GEOMETRY%GEMU%FT0)
236+
#Z_YDVARS_Q_DL => GET_DEVICE_DATA_RDONLY(YDVARS%Q%FDL)
237+
#Z_YDVARS_Q_DM => GET_DEVICE_DATA_RDONLY(YDVARS%Q%FDM)
238+
#Z_YDVARS_Q_T0 => GET_DEVICE_DATA_RDONLY(YDVARS%Q%FT0)
239+
#Z_YDVARS_U_T0 => GET_DEVICE_DATA_RDONLY(YDVARS%U%FT0)
240+
#Z_YDVARS_V_T0 => GET_DEVICE_DATA_RDONLY (YDVARS%V%FT0)
241+
#Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => GET_DEVICE_DATA_RDONLY(YDMF_PHYS_SURF%GSD_VF%F_Z0F) |276 REAL(KIND=JPRB) :: ZPFL_FPLSH (YDCPG_OPTS%KLON, 0:YDCPG_OPTS%KFLEVG)
242+
#IF(LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 1, ZHOOK_HANDLE_FIELD_API)
243+
#"""
244+
245+
test_get_data["OpenACCSingleColumn"] = """
246+
IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 0, ZHOOK_HANDLE_FIELD_API)
247+
ZRDG_CVGQ => GET_DEVICE_DATA_RDWR(YL_ZRDG_CVGQ)
248+
ZRDG_MU0 => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0)
249+
ZRDG_MU0LU => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0LU)
250+
ZRDG_MU0M => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0M)
251+
ZRDG_MU0N => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0N)
252+
Z_YDCPG_DYN0_CTY_EVEL => GET_DEVICE_DATA_RDWR(YDCPG_DYN0%CTY%F_EVEL)
253+
Z_YDCPG_PHY0_XYB_RDELP => GET_DEVICE_DATA_RDWR(YDCPG_PHY0%XYB%F_RDELP)
254+
Z_YDVARS_CVGQ_DL => GET_DEVICE_DATA_RDWR(YDVARS%CVGQ%FDL)
255+
Z_YDVARS_CVGQ_DM => GET_DEVICE_DATA_RDWR(YDVARS%CVGQ%FDM)
256+
Z_YDVARS_CVGQ_T0 => GET_DEVICE_DATA_RDWR(YDVARS%CVGQ%FT0)
257+
Z_YDVARS_GEOMETRY_GELAM_T0 => GET_DEVICE_DATA_RDWR(YDVARS%GEOMETRY%GELAM%FT0)
258+
Z_YDVARS_GEOMETRY_GEMU_T0 => GET_DEVICE_DATA_RDWR(YDVARS%GEOMETRY%GEMU%FT0)
259+
Z_YDVARS_Q_DL => GET_DEVICE_DATA_RDWR(YDVARS%Q%FDL)
260+
Z_YDVARS_Q_DM => GET_DEVICE_DATA_RDWR(YDVARS%Q%FDM)
261+
Z_YDVARS_Q_T0 => GET_DEVICE_DATA_RDWR(YDVARS%Q%FT0)
262+
Z_YDVARS_U_T0 => GET_DEVICE_DATA_RDWR(YDVARS%U%FT0)
263+
Z_YDVARS_V_T0 => GET_DEVICE_DATA_RDWR(YDVARS%V%FT0)
264+
Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => GET_DEVICE_DATA_RDWR(YDMF_PHYS_SURF%GSD_VF%F_Z0F) |276 REAL(KIND=JPRB) :: ZPFL_FPLSH (YDCPG_OPTS%KLON, 0:YDCPG_OPTS%KFLEVG)
265+
IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 1, ZHOOK_HANDLE_FIELD_API)
266+
"""
267+
268+
for target in get_data:
269+
for node in get_data[target]:
270+
assert fgen(node) in test_get_data[target]
271+
272+
###@pytest.mark.parametrize('frontend', available_frontends(skip=[OMNI]))
273+
###def test_parallel_routine_dispatch_synchost(here, frontend):
274+
###
275+
### source = Sourcefile.from_file(here/'sources/projParallelRoutineDispatch/dispatch_routine.F90', frontend=frontend)
276+
### routine = source['dispatch_routine']
277+
###
278+
### transformation = ParallelRoutineDispatchTransformation()
279+
### transformation.apply(source['dispatch_routine'])
280+
###
281+
### get_data = transformation.get_data
282+
###
283+
### test_get_data = """
284+
###IF (LHOOK) CALL DR_HOOK ('DISPATCH_ROUTINE:CPPHINP:GET_DATA',0,ZHOOK_HANDLE_FIELD_API)
285+
###Z_YDMF_PHYS_SURF_GSD_VV_PZ0H => GET_HOST_DATA_RDWR (YDMF_PHYS_SURF%GSD_VV%F_Z0H)
286+
###IF (LHOOK) CALL DR_HOOK ('DISPATCH_ROUTINE:CPPHINP:GET_DATA',1,ZHOOK_HANDLE_FIELD_API)
287+
###"""
288+
###
289+
### for node in get_data:
290+
### assert fgen(node) in test_get_data
291+
###
292+
293+
@pytest.mark.parametrize('frontend', available_frontends(skip=[OMNI]))
294+
def test_parallel_routine_dispatch_synchost(here, frontend):
295+
296+
source = Sourcefile.from_file(here/'sources/projParallelRoutineDispatch/dispatch_routine.F90', frontend=frontend)
297+
routine = source['dispatch_routine']
298+
299+
transformation = ParallelRoutineDispatchTransformation()
300+
transformation.apply(source['dispatch_routine'])
301+
302+
synchost = transformation.synchost[0]
303+
304+
test_synchost = """IF (LSYNCHOST('DISPATCH_ROUTINE:CPPHINP')) THEN
305+
IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:SYNCHOST', 0, ZHOOK_HANDLE_FIELD_API)
306+
ZRDG_CVGQ => GET_HOST_DATA_RDWR(YL_ZRDG_CVGQ)
307+
ZRDG_MU0 => GET_HOST_DATA_RDWR(YL_ZRDG_MU0)
308+
ZRDG_MU0LU => GET_HOST_DATA_RDWR(YL_ZRDG_MU0LU)
309+
ZRDG_MU0M => GET_HOST_DATA_RDWR(YL_ZRDG_MU0M)
310+
ZRDG_MU0N => GET_HOST_DATA_RDWR(YL_ZRDG_MU0N)
311+
Z_YDCPG_DYN0_CTY_EVEL => GET_HOST_DATA_RDWR(YDCPG_DYN0%CTY%F_EVEL)
312+
Z_YDCPG_PHY0_XYB_RDELP => GET_HOST_DATA_RDWR(YDCPG_PHY0%XYB%F_RDELP)
313+
Z_YDVARS_CVGQ_DL => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FDL)
314+
Z_YDVARS_CVGQ_DM => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FDM)
315+
Z_YDVARS_CVGQ_T0 => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FT0)
316+
Z_YDVARS_GEOMETRY_GELAM_T0 => GET_HOST_DATA_RDWR(YDVARS%GEOMETRY%GELAM%FT0)
317+
Z_YDVARS_GEOMETRY_GEMU_T0 => GET_HOST_DATA_RDWR(YDVARS%GEOMETRY%GEMU%FT0)
318+
Z_YDVARS_Q_DL => GET_HOST_DATA_RDWR(YDVARS%Q%FDL)
319+
Z_YDVARS_Q_DM => GET_HOST_DATA_RDWR(YDVARS%Q%FDM)
320+
Z_YDVARS_Q_T0 => GET_HOST_DATA_RDWR(YDVARS%Q%FT0)
321+
Z_YDVARS_U_T0 => GET_HOST_DATA_RDWR(YDVARS%U%FT0)
322+
Z_YDVARS_V_T0 => GET_HOST_DATA_RDWR(YDVARS%V%FT0)
323+
Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => GET_HOST_DATA_RDWR(YDMF_PHYS_SURF%GSD_VF%F_Z0F)
324+
IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:SYNCHOST', 1, ZHOOK_HANDLE_FIELD_API)
325+
ENDIF
326+
"""
327+
assert fgen(synchost.condition) in test_synchost
328+
for node in synchost.body:
329+
assert fgen(node) in test_synchost
330+
331+
@pytest.mark.parametrize('frontend', available_frontends(skip=[OMNI]))
332+
def test_parallel_routine_dispatch_nullify(here, frontend):
333+
334+
source = Sourcefile.from_file(here/'sources/projParallelRoutineDispatch/dispatch_routine.F90', frontend=frontend)
335+
routine = source['dispatch_routine']
336+
337+
transformation = ParallelRoutineDispatchTransformation()
338+
transformation.apply(source['dispatch_routine'])
339+
340+
nullify = transformation.nullify
341+
342+
test_nullify = """
343+
IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:NULLIFY', 0, ZHOOK_HANDLE_FIELD_API)
344+
ZRDG_CVGQ => NULL()
345+
ZRDG_MU0 => NULL()
346+
ZRDG_MU0LU => NULL()
347+
ZRDG_MU0M => NULL()
348+
ZRDG_MU0N => NULL()
349+
Z_YDCPG_DYN0_CTY_EVEL => NULL()
350+
Z_YDCPG_PHY0_XYB_RDELP => NULL()
351+
Z_YDVARS_CVGQ_DL => NULL()
352+
Z_YDVARS_CVGQ_DM => NULL()
353+
Z_YDVARS_CVGQ_T0 => NULL()
354+
Z_YDVARS_GEOMETRY_GELAM_T0 => NULL()
355+
Z_YDVARS_GEOMETRY_GEMU_T0 => NULL()
356+
Z_YDVARS_Q_DL => NULL()
357+
Z_YDVARS_Q_DM => NULL()
358+
Z_YDVARS_Q_T0 => NULL()
359+
Z_YDVARS_U_T0 => NULL()
360+
Z_YDVARS_V_T0 => NULL()
361+
Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => NULL()
362+
IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:NULLIFY', 1, ZHOOK_HANDLE_FIELD_API)
363+
"""
364+
365+
for node in nullify:
366+
assert fgen(node) in test_nullify

0 commit comments

Comments
 (0)