Skip to content

Commit 7a8aa40

Browse files
committed
Initial OpenACC port of atm_bdy_reset_speczone_values
This commit enables the GPU execution of the atm_bdy_reset_speczone_values subroutine using OpenACC directives for the data movements and loops. A new timer, 'atm_bdy_reset_speczone_values [ACC_data_xfer]', has been added for host-device data transfers in this subroutine.
1 parent d1a4a94 commit 7a8aa40

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

src/core_atmosphere/dynamics/mpas_atm_time_integration.F

+14
Original file line numberDiff line numberDiff line change
@@ -6962,15 +6962,29 @@ subroutine atm_bdy_reset_speczone_values( state, diag, mesh, nVertLevels, &
69626962
call mpas_pool_get_array(state, 'theta_m', theta_m, 2)
69636963
call mpas_pool_get_array(diag, 'rtheta_p', rtheta_p)
69646964
call mpas_pool_get_array(diag, 'rtheta_base', rtheta_base)
6965+
6966+
MPAS_ACC_TIMER_START('atm_bdy_reset_speczone_values [ACC_data_xfer]')
6967+
!$acc enter data copyin(rt_driving_values, rho_driving_values, rtheta_base, &
6968+
!$acc theta_m, rtheta_p)
6969+
MPAS_ACC_TIMER_STOP('atm_bdy_reset_speczone_values [ACC_data_xfer]')
69656970

6971+
!$acc parallel default(present)
6972+
!$acc loop gang worker
69666973
do iCell = cellSolveStart, cellSolveEnd
69676974
if( bdyMaskCell(iCell) > nRelaxZone) then
6975+
!$acc loop vector
69686976
do k=1, nVertLevels
69696977
theta_m(k,iCell) = rt_driving_values(k,iCell)/rho_driving_values(k,iCell)
69706978
rtheta_p(k,iCell) = rt_driving_values(k,iCell) - rtheta_base(k,iCell)
69716979
end do
69726980
end if
69736981
end do
6982+
!$acc end parallel
6983+
6984+
MPAS_ACC_TIMER_START('atm_bdy_reset_speczone_values [ACC_data_xfer]')
6985+
!$acc exit data copyout(theta_m, rtheta_p) &
6986+
!$acc delete(rt_driving_values, rho_driving_values, rtheta_base)
6987+
MPAS_ACC_TIMER_STOP('atm_bdy_reset_speczone_values [ACC_data_xfer]')
69746988

69756989
end subroutine atm_bdy_reset_speczone_values
69766990

0 commit comments

Comments
 (0)