Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ParallelRoutineDispatchTransformation #299

Open
wants to merge 90 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
8e85867
Transformation skeleton for ParallelRoutineDispatchTransformation
reuterbal Apr 23, 2024
f7b87ff
Add dr_hook wrapping of pragma region
reuterbal Apr 23, 2024
e0b3996
adding subroutine name to dr_hook name
ecossevin Apr 23, 2024
08c5d29
Add temporary arrays transformation into pointers, and field_new/fiel…
ecossevin Apr 24, 2024
f7997bd
Add derived_types handling : generating the pt on the data, and the p…
ecossevin Apr 25, 2024
4f69e67
Add GET_DATA, SYNCHOST and NULLIFY
ecossevin Apr 26, 2024
180695a
Add compute OpenMP region (+ add a shape for ptr_var in decl_derived_…
ecossevin Apr 29, 2024
74fed5d
Add compute OpenMPSCC and OpenACCSCC region; Add some imports and var…
ecossevin May 1, 2024
e77e88d
Add item to transformation, create map_routine and map_region
ecossevin May 2, 2024
8d3cf81
Puting together the diff targets and inserting the new acdc parallel …
ecossevin May 3, 2024
3840978
Having is_index, horizontal and path_map_index as args of the tranfor…
ecossevin May 13, 2024
5bd7f4c
Fixing bug occuring when hashing field_new
ecossevin May 15, 2024
c9333ec
Adding default targets
ecossevin May 16, 2024
0c4d9bc
Checking call args of callee aren't logicals
ecossevin May 16, 2024
08be676
Fixing bug whith ydcpg
ecossevin May 16, 2024
9c66e68
Adding default region name
ecossevin May 16, 2024
ba8f018
Add test and fixing bug with if lparallelmethod statement
ecossevin May 16, 2024
ced0650
Fixing bug with nullify and changing map_temp and map_derived names
ecossevin May 17, 2024
f159cd4
Adding processing of calls that aren't in loki pragma regions
ecossevin May 22, 2024
cb6a605
removing dimensions from field_ptr_var
ecossevin Jun 13, 2024
9b1eb6a
Changing the compute regions: use the whole region instead of only th…
ecossevin Jun 13, 2024
502b88c
Adding a 'preprocessing' of loops before the scc transform is called …
ecossevin Jun 15, 2024
3cbbfa4
Removing intent of ylcpg
Jun 19, 2024
4669655
Fixing bug with openacc present (removing end coma)
Jun 19, 2024
17073f6
Fixing bug with statusomp parallel private (add parenthesis)
Jun 19, 2024
66f58fd
Add routine _PARALLEL rename
Jun 19, 2024
0fac82a
Adding stack4/8
Jun 19, 2024
9ed9000
Add lbounds for all field_new, add jblkmax and jblkmin
Jun 19, 2024
e3e618c
Fixing bug : missing temp init when multiple call to _parallel
ecossevin Jun 20, 2024
db463be
Add IM type
Jun 20, 2024
5e0af1d
Changing new_region_body generation
Jun 26, 2024
17ed8a8
Fixing wrong present/private in acc/omp pragmas
Jun 28, 2024
68f8d26
Fixing bug with field_new/field_delete missing for some fields
ecossevin Sep 9, 2024
6962ca4
Change where routine name is changed in the transformation
ecossevin Sep 9, 2024
dff3423
Fixing bug in update_vars and update_args
ecossevin Sep 11, 2024
d3639a2
Ordering calls to data_sync
ecossevin Sep 11, 2024
a905b7a
Fixing bug with jlon : JLON=YDCPG_BNDS%KIDIA... instead of ...YLCPG_B…
ecossevin Sep 11, 2024
47478f7
Fixing bug with jlev loops and jlon loops nested inside.
ecossevin Sep 12, 2024
0f391a4
Change get_scalar into get_private
ecossevin Sep 24, 2024
ef34b08
Update get_private: returns only scalars that are on the lhs of an as…
ecossevin Sep 24, 2024
55da327
repairing tests
ecossevin Sep 30, 2024
fcd187b
Adding loop variable to private variables
ecossevin Sep 30, 2024
5679030
Sorting all the variables
ecossevin Sep 30, 2024
318f4f7
Fixing bug
ecossevin Oct 1, 2024
880c199
Adding the case when routine arguments are in region_map_temp
ecossevin Oct 1, 2024
cb6c884
Fixing bug when spaces in ACDC pragma
ecossevin Oct 2, 2024
48958e6
Adding JLON to routine vars if not present
ecossevin Oct 3, 2024
61435ee
Change region_map_temp map into regionmap_arrays. In fact, this map d…
ecossevin Oct 3, 2024
2cbe38c
Updating routine arguments when an array becomes a pt on a field object
ecossevin Oct 3, 2024
5f69c43
Arrays are generated for all the routine instead of region by region
ecossevin Oct 8, 2024
78a7c79
Sorting derived types
ecossevin Oct 9, 2024
542482c
Rm field_new/delete for routine args arrays
ecossevin Oct 11, 2024
6f5862e
Removing scalar from acc present.
ecossevin Oct 21, 2024
89b8b01
removing TYP_DDH from acc present clause, YDDDH isn't on the accelerator
ecossevin Oct 22, 2024
82fa799
Add field name for LOGICAL
ecossevin Oct 23, 2024
c880346
Fixing bug in derived type name
ecossevin Oct 23, 2024
e1f0497
Sorting present and private clauses
ecossevin Oct 23, 2024
cf18f6c
Add product to arg type in process call and and add kwargs to process…
ecossevin Oct 24, 2024
c1027f5
Ruff formating
ecossevin Oct 24, 2024
262a403
Cleaning
ecossevin Oct 24, 2024
4b6fa10
Cleaning
ecossevin Oct 24, 2024
031fdcb
Fix cleaning bug
ecossevin Oct 24, 2024
a831859
Fix cleaning bug
ecossevin Oct 24, 2024
d602c65
Cleaning
ecossevin Oct 24, 2024
7511686
Cleaning
ecossevin Oct 24, 2024
d49939c
Cleaning
ecossevin Oct 30, 2024
d726eb2
Cleaning
ecossevin Oct 30, 2024
7555815
Clean create_imports
ecossevin Oct 30, 2024
a9289f8
Cleaning create_imports
ecossevin Oct 30, 2024
13013eb
Cleaning
ecossevin Oct 30, 2024
bdec6ca
Cleaning
ecossevin Oct 30, 2024
8eb3cad
Cleaning
ecossevin Oct 30, 2024
87574b2
Cleaning
ecossevin Nov 4, 2024
6e2eb7a
Cleaning
ecossevin Nov 4, 2024
d279b36
fixing bug
ecossevin Nov 6, 2024
4357141
Add jpim kind when not present
ecossevin Nov 8, 2024
fa146b7
Add ACDC ABORT and ACDC SERIAL
ecossevin Nov 12, 2024
90cdeae
Add GETENV to the routines to ignore
ecossevin Nov 14, 2024
c5a3a4c
Changes in process_arrays_routine
ecossevin Dec 12, 2024
835e627
Starting to add dataflow analysis to know if vars are rdw or rdonly
ecossevin Dec 30, 2024
67666a3
Continue dataflow analysis and fix tests
ecossevin Dec 30, 2024
a67c43c
Fixing bug in dataflow analysis
ecossevin Jan 3, 2025
5643f47
Passing dictionnaries to the transformation. Instead of passing the p…
ecossevin Jan 3, 2025
4122db2
Creating new function + dbg
ecossevin Jan 7, 2025
ee3d5e0
Change map_openacc to map_intfb
ecossevin Jan 10, 2025
3264d40
Adding optional args in intent analysis
ecossevin Jan 14, 2025
041d6c8
fixing bug
ecossevin Jan 14, 2025
95b39bd
fixing bug in rdwr definition
ecossevin Jan 15, 2025
3f1f267
add comments
ecossevin Jan 24, 2025
f544743
cleaning for merge with new loki directories
ecossevin Jan 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,594 changes: 1,594 additions & 0 deletions loki/transformations/parallel_routine_dispatch.py

Large diffs are not rendered by default.

Binary file added loki/transformations/path_to_openacc.pkl
Binary file not shown.
35 changes: 35 additions & 0 deletions loki/transformations/projParallelRoutineDispatch/cpphinp.intfb.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
INTERFACE
SUBROUTINE CPPHINP(YDGEOMETRY,YDMODEL,KIDIA,KFDIA,&
& PGEMU,PGELAM,&
& PUT0,PVT0,PQT0,PQT0L,PQT0M,PQSLT0L,PQSLT0M,&
& PRDELP0,PEVEL0,PCVGQSL,&
& PMU0,PMU0LU,PMU0M,PMU0N,PCVGQ,PCVGT)
USE PARKIND1 , ONLY : JPIM, JPRB
USE YOMHOOK , ONLY : LHOOK, DR_HOOK, JPHOOK
USE TYPE_MODEL , ONLY : MODEL
USE GEOMETRY_MOD , ONLY : GEOMETRY
IMPLICIT NONE
TYPE(GEOMETRY) ,INTENT(IN) :: YDGEOMETRY
TYPE(MODEL) ,INTENT(IN) :: YDMODEL
INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA
INTEGER(KIND=JPIM),INTENT(IN) :: KFDIA
REAL(KIND=JPRB) ,INTENT(IN) :: PGEMU(YDGEOMETRY%YRDIM%NPROMA)
REAL(KIND=JPRB) ,INTENT(IN) :: PGELAM(YDGEOMETRY%YRDIM%NPROMA)
REAL(KIND=JPRB) ,INTENT(IN) :: PUT0(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(IN) :: PVT0(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(IN) :: PQT0(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(IN) :: PQT0L(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(IN) :: PQT0M(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(IN) :: PQSLT0L(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(IN) :: PQSLT0M(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(IN) :: PRDELP0(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(IN) :: PEVEL0(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(IN) :: PCVGQSL(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(OUT) :: PMU0(YDGEOMETRY%YRDIM%NPROMA)
REAL(KIND=JPRB) ,INTENT(OUT) :: PMU0LU(YDGEOMETRY%YRDIM%NPROMA)
REAL(KIND=JPRB) ,INTENT(OUT) :: PMU0M(YDGEOMETRY%YRDIM%NPROMA)
REAL(KIND=JPRB) ,INTENT(OUT) :: PMU0N(YDGEOMETRY%YRDIM%NPROMA)
REAL(KIND=JPRB) ,INTENT(OUT) :: PCVGQ(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG)
REAL(KIND=JPRB) ,INTENT(OUT) :: PCVGT(YDGEOMETRY%YRDIM%NPROMM, YDGEOMETRY%YRDIMV%NFLEVG)
END SUBROUTINE CPPHINP
END INTERFACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
INTERFACE
SUBROUTINE CPPHINP (YDGEOMETRY, YDMODEL, KIDIA, KFDIA, PGEMU, PGELAM,&
& PUT0, PVT0, PTT0L, PTT0M, PQT0, PQT0L, PQT0M, PQSLT0L, PQSLT0M, PRDELP0, PEVEL0&
&, PCVGQSL, PMU0, PSOLO, PMU0LU, PMU0M, PMU0N, PCVGQ, PCVGT, YDSTACK)
!$acc routine (CPPHINP_OPENACC) seq
USE PARKIND1,ONLY:JPIM, JPRB
USE TYPE_MODEL,ONLY:MODEL
USE GEOMETRY_MOD,ONLY:GEOMETRY
USE ABOR1_ACC_MOD
USE STACK_MOD
IMPLICIT NONE
TYPE (GEOMETRY), INTENT (IN)::YDGEOMETRY
TYPE (MODEL), INTENT (IN)::YDMODEL
INTEGER (KIND=JPIM), INTENT (IN)::KIDIA
INTEGER (KIND=JPIM), INTENT (IN)::KFDIA
REAL (KIND=JPRB), INTENT (IN)::PGEMU (YDGEOMETRY%YRDIM%NPROMA)
REAL (KIND=JPRB), INTENT (IN)::PGELAM (YDGEOMETRY%YRDIM%NPROMA)
REAL (KIND=JPRB), INTENT (IN)::PUT0 (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PVT0 (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PQT0 (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PQT0L (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PQT0M (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PTT0L (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PTT0M (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PQSLT0L (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PQSLT0M (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PRDELP0 (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PEVEL0 (YDGEOMETRY%YRDIM%NPROMA, 0:YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (IN)::PCVGQSL (YDGEOMETRY%YRDIM%NPROMA, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (OUT)::PMU0 (YDGEOMETRY%YRDIM%NPROMA)
REAL (KIND=JPRB), INTENT (OUT)::PSOLO (YDGEOMETRY%YRDIM%NPROMA)
REAL (KIND=JPRB), INTENT (OUT)::PMU0LU (YDGEOMETRY%YRDIM%NPROMA)
REAL (KIND=JPRB), INTENT (OUT)::PMU0M (YDGEOMETRY%YRDIM%NPROMA)
REAL (KIND=JPRB), INTENT (OUT)::PMU0N (YDGEOMETRY%YRDIM%NPROMA)
REAL (KIND=JPRB), INTENT (OUT)::PCVGQ (YDGEOMETRY%YRDIM%NPROMM, YDGEOMETRY%YRDIMV%NFLEVG)
REAL (KIND=JPRB), INTENT (OUT)::PCVGT (YDGEOMETRY%YRDIM%NPROMM, YDGEOMETRY%YRDIMV%NFLEVG)
TYPE(STACK) :: YDSTACK
ENDSUBROUTINE CPPHINP

END INTERFACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
SUBROUTINE DISPATCH_ROUTINE(YDGEOMETRY, YDCPG_BNDS, YDCPG_OPTS, &
& YDMF_PHYS, YDCPG_PHY0, YDCPG_DYN0, YDMF_PHYS_SURF, YDVARS, &
& YDMODEL)

USE GEOMETRY_MOD , ONLY : GEOMETRY
USE MF_PHYS_TYPE_MOD , ONLY : MF_PHYS_TYPE
USE CPG_TYPE_MOD , ONLY : CPG_DYN_TYPE, &
& CPG_PHY_TYPE
USE CPG_OPTS_TYPE_MOD , ONLY : CPG_BNDS_TYPE, CPG_OPTS_TYPE
USE MF_PHYS_SURFACE_TYPE_MOD &
& , ONLY : MF_PHYS_SURF_TYPE
USE FIELD_VARIABLES_MOD, ONLY : FIELD_VARIABLES
USE TYPE_MODEL , ONLY : MODEL

USE PARKIND1 , ONLY : JPIM ,JPRB
USE YOMHOOK , ONLY : LHOOK ,DR_HOOK, JPHOOK

IMPLICIT NONE

TYPE(GEOMETRY), INTENT(IN) :: YDGEOMETRY
TYPE(CPG_BNDS_TYPE), INTENT(IN) :: YDCPG_BNDS
TYPE(CPG_OPTS_TYPE), INTENT(IN) :: YDCPG_OPTS
TYPE(MF_PHYS_TYPE), INTENT(INOUT) :: YDMF_PHYS
TYPE(CPG_PHY_TYPE), INTENT(IN) :: YDCPG_PHY0
TYPE(CPG_DYN_TYPE), INTENT(IN) :: YDCPG_DYN0
TYPE(MF_PHYS_SURF_TYPE), INTENT(INOUT) :: YDMF_PHYS_SURF
TYPE(FIELD_VARIABLES), INTENT(INOUT) :: YDVARS
TYPE(MODEL), INTENT(IN) :: YDMODEL

#include "cpphinp.intfb.h"
#include "mf_phys_fpl_part1.intfb.h"

REAL(KIND=JPRB) :: ZRDG_CVGQ (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%KFLEVG)
REAL(KIND=JPRB) :: ZRDG_MU0LU (YDCPG_OPTS%KLON)
REAL(KIND=JPRB) :: ZRDG_MU0M (YDCPG_OPTS%KLON)
REAL(KIND=JPRB) :: ZRDG_MU0N (YDCPG_OPTS%KLON)
REAL(KIND=JPRB) :: ZRDG_MU0 (YDCPG_OPTS%KLON)
REAL(KIND=JPRB) :: ZPFL_FPLCH (YDCPG_OPTS%KLON, 0:YDCPG_OPTS%KFLEVG)
REAL(KIND=JPRB) :: ZPFL_FPLSH (YDCPG_OPTS%KLON, 0:YDCPG_OPTS%KFLEVG)
REAL(KIND=JPRB) :: TOTO (YDCPG_OPTS%KLON)


INTEGER(KIND=JPIM) :: INSTEP_DEB, INSTEP_FIN
INTEGER(KIND=JPIM) :: JLEV, JLON, JSPP

REAL(KIND=JPHOOK) :: ZHOOK_HANDLE

IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE',0,ZHOOK_HANDLE)

INSTEP_DEB=1
INSTEP_FIN=1
!!!$ACDC PARALLEL,TARGET=OpenMP/OpenMPSingleColumn/OpenACCSingleColumn,NAME=CPPHINP {
!$loki parallel PARALLEL,TARGET=OpenMP/OpenMPSingleColumn/OpenACCSingleColumn,NAME=CPPHINP

CALL CPPHINP(YDGEOMETRY, YDMODEL, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDVARS%GEOMETRY%GEMU%T0, &
& YDVARS%GEOMETRY%GELAM%T0, YDVARS%U%T0, YDVARS%V%T0, YDVARS%Q%T0, YDVARS%Q%DL, YDVARS%Q%DM, YDVARS%CVGQ%DL, &
& YDVARS%CVGQ%DM, YDCPG_PHY0%XYB%RDELP, YDCPG_DYN0%CTY%EVEL, YDVARS%CVGQ%T0, ZRDG_MU0, ZRDG_MU0LU, ZRDG_MU0M, &
& ZRDG_MU0N, ZRDG_CVGQ, YDMF_PHYS_SURF%GSD_VF%PZ0F)

DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA
YDMF_PHYS%OUT%CT(JLON) = TOTO(JLON)
ENDDO

!$loki end parallel
!!!$ACDC }

CALL MF_PHYS_FPL_PART1 (YDCPG_BNDS, YDCPG_OPTS, ZPFL_FPLCH, ZPFL_FPLSH, YDVARS%CPF%T0, YDVARS%SPF%T0, YDMODEL)

IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE',1,ZHOOK_HANDLE)

END SUBROUTINE DISPATCH_ROUTINE
Binary file not shown.
Loading