Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
22 changes: 22 additions & 0 deletions driver/ecrad_ifs_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ program ecrad_ifs_driver
#ifdef HAVE_NVTX
use nvtx
#endif
#ifdef HAVE_ROCTX
use roctx_profiling, only: roctxstartrange, roctxendrange
use iso_c_binding, only: c_null_char
#endif

implicit none

Expand Down Expand Up @@ -381,6 +385,9 @@ program ecrad_ifs_driver
#ifdef HAVE_NVTX
call nvtxStartRange("ecrad_offload")
#endif
#ifdef HAVE_ROCTX
call roctxStartRange("ecrad_offload"//c_null_char)
#endif

#if defined(_OPENACC)
!$ACC DATA COPYIN(yradiation, yradiation%rad_config, single_level, thermodynamics, &
Expand Down Expand Up @@ -420,6 +427,9 @@ program ecrad_ifs_driver
#ifdef HAVE_NVTX
call nvtxEndRange
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
#endif

! --------------------------------------------------------
! Section 4b: Call radiation_scheme per block
Expand All @@ -442,6 +452,9 @@ program ecrad_ifs_driver
#ifdef HAVE_NVTX
call nvtxStartRange("ecrad_it")
#endif
#ifdef HAVE_ROCTX
call roctxStartRange("ecrad_it"//c_null_char)
#endif

! Compute number of blocks to process
nblock = (driver_config%iendcol - driver_config%istartcol &
Expand Down Expand Up @@ -493,6 +506,12 @@ program ecrad_ifs_driver
& )
end do
!$OMP END PARALLEL DO
#ifdef HAVE_NVTX
call nvtxEndRange
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
#endif

end do
#ifdef DEBUG
Expand Down Expand Up @@ -537,6 +556,9 @@ program ecrad_ifs_driver
#ifdef HAVE_NVTX
call nvtxEndRange
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
#endif

#ifndef NO_OPENMP
if (driver_config%nrepeat > driver_config%nwarmup) then
Expand Down
10 changes: 10 additions & 0 deletions driver/ecrad_ifs_driver_blocked.F90
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ program ecrad_ifs_driver
#ifdef HAVE_NVTX
use nvtx
#endif
#ifdef HAVE_ROCTX
use roctx_profiling, only: roctxstartrange, roctxendrange
use iso_c_binding, only: c_null_char
#endif

implicit none

Expand Down Expand Up @@ -400,6 +404,9 @@ program ecrad_ifs_driver
#ifdef HAVE_NVTX
call nvtxStartRange("ecrad_it")
#endif
#ifdef HAVE_ROCTX
call roctxStartRange("ecrad_it"//c_null_char)
#endif

#ifdef COPY_ASYNC
#if defined(OMPGPU)
Expand Down Expand Up @@ -568,6 +575,9 @@ program ecrad_ifs_driver
#ifdef HAVE_NVTX
call nvtxEndRange
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
#endif

end do

Expand Down
48 changes: 48 additions & 0 deletions ifs/radiation_scheme.F90
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ SUBROUTINE RADIATION_SCHEME &
#ifdef HAVE_NVTX
USE NVTX
#endif
#ifdef HAVE_ROCTX
USE ROCTX_PROFILING, ONLY: ROCTXSTARTRANGE, ROCTXENDRANGE
USE ISO_C_BINDING, ONLY: C_NULL_CHAR
#endif

IMPLICIT NONE

Expand Down Expand Up @@ -321,6 +325,9 @@ SUBROUTINE RADIATION_SCHEME &
#ifdef HAVE_NVTX
call nvtxStartRange("allocate")
#endif
#ifdef HAVE_ROCTX
call roctxStartRange("allocate"//c_null_char)
#endif
CALL SINGLE_LEVEL%ALLOCATE(KLON, YRERAD%NSW, YRERAD%NLWEMISS, &
& USE_SW_ALBEDO_DIRECT=.TRUE.)
CALL THERMODYNAMICS%ALLOCATE(KLON, KLEV, USE_H2O_SAT=.TRUE.)
Expand All @@ -338,6 +345,9 @@ SUBROUTINE RADIATION_SCHEME &
#ifdef HAVE_NVTX
call nvtxEndRange
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
#endif

#if defined(_OPENACC) || defined(OMPGPU)
LLACC = .TRUE.
Expand Down Expand Up @@ -395,6 +405,9 @@ SUBROUTINE RADIATION_SCHEME &
#ifdef HAVE_NVTX
call nvtxStartRange("thermodynamics setup")
#endif
#ifdef HAVE_ROCTX
call roctxStartRange("thermodynamics setup"//c_null_char)
#endif
! Set thermodynamic profiles: simply copy over the half-level
! pressure and temperature
!$ACC PARALLEL DEFAULT(NONE) ASYNC(1) IF(LLACC) &
Expand Down Expand Up @@ -460,6 +473,10 @@ SUBROUTINE RADIATION_SCHEME &
call nvtxEndRange
call nvtxStartRange("single level setup")
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
call roctxStartRange("single level setup"//c_null_char)
#endif

! Set single-level fileds
SINGLE_LEVEL%SOLAR_IRRADIANCE = PSOLAR_IRRADIANCE
Expand Down Expand Up @@ -580,6 +597,10 @@ SUBROUTINE RADIATION_SCHEME &
call nvtxEndRange
call nvtxStartRange("cloud setup")
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
call roctxStartRange("cloud setup"//c_null_char)
#endif

! Set cloud fields
!$ACC PARALLEL DEFAULT(PRESENT) ASYNC(1) IF(LLACC)
Expand Down Expand Up @@ -719,6 +740,10 @@ SUBROUTINE RADIATION_SCHEME &
call nvtxEndRange
call nvtxStartRange("aerosol setup")
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
call roctxStartRange("aerosol setup"//c_null_char)
#endif

! Copy over aerosol mass mixing ratio
IF (.NOT. LL_USE_TEGEN_AEROSOLS) THEN
Expand Down Expand Up @@ -804,6 +829,10 @@ SUBROUTINE RADIATION_SCHEME &
call nvtxEndRange
call nvtxStartRange("gas setup")
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
call roctxStartRange("gas setup"//c_null_char)
#endif

! Insert gas mixing ratios (mol mol-1 or kg kg-1)
CALL GAS%PUT(GAS, IH2O, IMASSMIXINGRATIO, PQ, LACC=LLACC)
Expand All @@ -824,18 +853,27 @@ SUBROUTINE RADIATION_SCHEME &
#ifdef HAVE_NVTX
call nvtxEndRange
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
#endif

! Call radiation scheme
#ifdef HAVE_NVTX
call nvtxStartRange("radiation")
#endif
#ifdef HAVE_ROCTX
call roctxStartRange("radiation"//c_null_char)
#endif

CALL RADIATION(KLON, KLEV, KIDIA, KFDIA, RAD_CONFIG,&
& SINGLE_LEVEL, THERMODYNAMICS, GAS, YLCLOUD, AEROSOL, FLUX)

#ifdef HAVE_NVTX
call nvtxEndRange
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
#endif

! Check fluxes are within physical bounds
IF (YRERAD%NDUMPBADINPUTS /= 0 &
Expand Down Expand Up @@ -919,6 +957,9 @@ SUBROUTINE RADIATION_SCHEME &
#ifdef HAVE_NVTX
call nvtxStartRange("compute fluxes")
#endif
#ifdef HAVE_ROCTX
call roctxStartRange("compute fluxes"//c_null_char)
#endif
! Compute required output fluxes
! First the net fluxes
!$ACC PARALLEL DEFAULT(PRESENT) ASYNC(1) IF(LLACC)
Expand Down Expand Up @@ -1020,6 +1061,10 @@ SUBROUTINE RADIATION_SCHEME &
call nvtxEndRange
call nvtxStartRange("cleanup")
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
call roctxStartRange("cleanup"//c_null_char)
#endif

!$ACC END DATA
!$OMP TARGET EXIT DATA MAP(DELETE:ZRE_LIQUID_UM, ZRE_ICE_UM, ZDECORR_LEN_KM,ZLAYER_MASS)
Expand Down Expand Up @@ -1047,6 +1092,9 @@ SUBROUTINE RADIATION_SCHEME &
#ifdef HAVE_NVTX
call nvtxEndRange
#endif
#ifdef HAVE_ROCTX
call roctxEndRange
#endif

END ASSOCIATE

Expand Down
Loading
Loading