From 5bd4760dfde5a8b51f10c53f86434597caf40f3a Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Tue, 24 Jan 2023 13:15:41 +0100 Subject: [PATCH] Philippe 24/01/2023: OpenACC: more data always on GPU (less data transfers) --- src/MNH/ini_modeln.f90 | 5 ++++- src/MNH/modeln.f90 | 30 +++++++++++++++++------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index 962c404f2..45d2945f1 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -860,6 +860,7 @@ ALLOCATE(XRWS_PRES(IIU,IJU,IKU)); XRWS_PRES = 0.0 ALLOCATE(XRTHS(IIU,IJU,IKU)) ; XRTHS = 0.0 !$acc enter data copyin(XRTHS) ALLOCATE(XRTHS_CLD(IIU,IJU,IKU)); XRTHS_CLD = 0.0 +!$acc enter data copyin(XRTHS_CLD) IF ( LIBM ) THEN ALLOCATE(ZIBM_LS(IIU,IJU,IKU)) ; ZIBM_LS = 0.0 @@ -939,6 +940,7 @@ ALLOCATE(XRT(IIU,IJU,IKU,NRR)) ; XRT = 0.0 !$acc enter data copyin( XRT ) ALLOCATE(XRRS(IIU,IJU,IKU,NRR)) ; XRRS = 0.0 ALLOCATE(XRRS_CLD(IIU,IJU,IKU,NRR)); XRRS_CLD = 0.0 +!$acc enter data copyin( XRRS, XRRS_CLD ) ! IF (CTURB /= 'NONE' .AND. NRR>1) THEN ALLOCATE(XSRCT(IIU,IJU,IKU)) @@ -974,6 +976,7 @@ END IF ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) ; XSVT = 0. ALLOCATE(XRSVS(IIU,IJU,IKU,NSV)); XRSVS = 0. ALLOCATE(XRSVS_CLD(IIU,IJU,IKU,NSV)); XRSVS_CLD = 0.0 +!$acc enter data copyin( XRSVS, XRSVS_CLD ) ALLOCATE(XZWS(IIU,IJU)) ; XZWS(:,:) = XZWS_DEFAULT ! IF (LPASPOL) THEN @@ -1942,7 +1945,7 @@ CALL READ_FIELD(KMI,TPINIFILE,IIU,IJU,IKU, & ZIBM_LS,XIBM_XMUT,XUMEANW,XVMEANW,XWMEANW,XUMEANN,XVMEANN, & XWMEANN,XUMEANE,XVMEANE,XWMEANE,XUMEANS,XVMEANS,XWMEANS ) -!$acc update device( XPABST, XRT, XRUS_PRES, XRVS_PRES, XRWS_PRES ) +!$acc update device( XPABST, XRT, XRUS_PRES, XRVS_PRES, XRWS_PRES, XRRS_CLD, XRSVS_CLD ) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index d79846939..ceda1aedb 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -1633,19 +1633,19 @@ XTIME_BU_PROCESS = 0. XTIME_LES_BU_PROCESS = 0. ! ! -!XRWS_PRES copy and not copyout (hidden in UPDATE_HALO) !$acc data create ( XUT, XVT, XWT ) & !$acc & present( XTHT, XRT, XPABST, XTHVREF, XRHODJ ) & !$acc & present( XDXX, XDYY, XDZZ, XDZX, XDZY, XRUS, XRVS, XRWS, XRWS_PRES ) & -!$acc & copyin ( XSVT, XRTHS_CLD, XRRS_CLD ) & -!$acc & copy ( XRRS ) +!$acc & present ( XRRS, XRSVS, XRTHS_CLD, XRRS_CLD, XRSVS_CLD ) & +!$acc & copyin ( XSVT ) ! -!$acc update device( XRUS, XRVS, XRWS ) +!$acc update device( XRUS, XRVS, XRWS, XRRS, XRSVS ) !$acc update device( XRUS_PRES, XRVS_PRES, XRWS_PRES ) !$acc update device( XUT, XVT, XWT, XTHT, XRT, XRHODJ, XRTHS ) +!$acc update device( XRTHS_CLD, XRRS_CLD, XRSVS_CLD ) ! -!$acc data copyin (XTKET, XRSVS_CLD) & -!$acc & copy (XRTKES, XRSVS) & +!$acc data copyin (XTKET) & +!$acc & copy (XRTKES) & !$acc & copyout(XRTKEMS) #ifdef MNH_BITREP_OMP CALL SBR_FZ(XRRS_CLD) @@ -1661,7 +1661,6 @@ CALL ADVECTION_METSV ( TZBAKFILE, CUVW_ADV_SCHEME, & XRTHS_CLD, XRRS_CLD, XRSVS_CLD, XRTKEMS ) !$acc end data ! -!$acc update host(XRTHS) ! CALL SECOND_MNH2(ZTIME2) ! @@ -1825,9 +1824,11 @@ ZPABST(:,:,:) = XPABST(:,:,:) ! IF(.NOT. L1D) THEN ! +!$acc kernels XRUS_PRES = XRUS XRVS_PRES = XRVS XRWS_PRES = XRWS +!$acc end kernels ! !$acc data present( XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY ) & !$acc & present( XRHOM, XAF, XBFY, XCF, XTRIGSX, XTRIGSY, NIFAXX, NIFAXY ) & @@ -1950,21 +1951,22 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XWT_ACT_NUC(:,:,:) = 0. END IF ! +!$acc kernels XRTHS_CLD(:, :, : ) = XRTHS(:, :, : ) XRRS_CLD (:, :, :, : ) = XRRS(:, :, :, : ) XRSVS_CLD(:, :, :, : ) = XRSVS(:, :, :, : ) -!$acc data present( XRHODJ, XRHODREF, XEXNREF, XRTHS, ZPABST, XTHT ) & +!$acc end kernels + +!$acc data present( XRHODJ, XRHODREF, XEXNREF, XRTHS, XRRS, XRSVS, ZPABST, XTHT ) & !$acc & copyin (XZZ, XSIGS, VSIGQSAT, XMFCONV, XTHM, XPABSM, & !$acc & XRCM, XWT_ACT_NUC, XDTHRAD, XCF_MF, XRC_MF, XRI_MF, & !$acc & XSOLORG, XMI) & !$acc & copy (XSUPSAT, XNACT, XNPRO, XSSPRO, & -!$acc & XRT, XRRS, XSVT, XRSVS, XCLDFR, XCIT, XINPRR3D, XEVAP3D, & +!$acc & XRT, XSVT, XCLDFR, XCIT, XINPRR3D, XEVAP3D, & !$acc & XINPRC, XINPRR, XINPRS, XINPRG, XINPRH, XINDEP, & !$acc & XHLC_HRC, XHLC_HCF, XHLI_HRI, XHLI_HCF) & !$acc & copyout(XSRCT, XRAINFR) -!$acc update device ( XRTHS ) - IF (CSURF=='EXTE') THEN #ifndef MNH_OPENACC ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) @@ -2026,11 +2028,13 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN END IF !$acc end data -!$acc update host(XRTHS) - +!$acc kernels XRTHS_CLD(:, :, : ) = XRTHS(:, :, : ) - XRTHS_CLD(:, :, : ) XRRS_CLD (:, :, :, : ) = XRRS (:, :, :, : ) - XRRS_CLD (:, :, :, : ) XRSVS_CLD(:, :, :, : ) = XRSVS(:, :, :, : ) - XRSVS_CLD(:, :, :, : ) +!$acc end kernels +! +!$acc update host( XRTHS, XRRS, XRSVS, XRTHS_CLD, XRRS_CLD, XRSVS_CLD ) ! IF (CCLOUD /= 'REVE' ) THEN XACPRR = XACPRR + XINPRR * XTSTEP -- GitLab