From 6edd5b49e7a3561c9d9aafd8e348902f98e60028 Mon Sep 17 00:00:00 2001 From: Abishek Gopal Date: Mon, 22 Jun 2026 22:48:22 -0600 Subject: [PATCH 1/3] Opt 1 - Specify workers + timers --- .../dynamics/mpas_atm_time_integration.F | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F index 227fbde862..d6317d2ef5 100644 --- a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F +++ b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F @@ -7127,12 +7127,12 @@ subroutine atm_compute_solve_diagnostics_work(nCells, nEdges, nVertices, & logical :: reconstruct_v - + call mpas_timer_start('atm_comp_solve_diag_7134') ! ! Compute height on cell edges at velocity locations ! !$acc parallel default(present) - !$acc loop gang + !$acc loop gang worker do iEdge=edgeStart,edgeEnd cell1 = cellsOnEdge(1,iEdge) cell2 = cellsOnEdge(2,iEdge) @@ -7156,7 +7156,7 @@ subroutine atm_compute_solve_diagnostics_work(nCells, nEdges, nVertices, & ! ! Compute circulation and relative vorticity at each vertex ! - !$acc loop gang + !$acc loop gang worker do iVertex=vertexStart,vertexEnd !$acc loop vector do k=1,nVertLevels @@ -7183,7 +7183,7 @@ subroutine atm_compute_solve_diagnostics_work(nCells, nEdges, nVertices, & ! ! Compute the divergence at each cell center ! - !$acc loop gang + !$acc loop gang worker do iCell=cellStart,cellEnd !$acc loop vector do k=1,nVertLevels @@ -7206,7 +7206,7 @@ subroutine atm_compute_solve_diagnostics_work(nCells, nEdges, nVertices, & end do end do !$acc end parallel - + call mpas_timer_stop('atm_comp_solve_diag_7134') !$OMP BARRIER From dcd5f0198c1a09349cd0277201c08b281cad4928 Mon Sep 17 00:00:00 2001 From: Abishek Gopal Date: Tue, 23 Jun 2026 09:54:37 -0600 Subject: [PATCH 2/3] Opt 2 - Swap loop seq and loop vector --- .../dynamics/mpas_atm_time_integration.F | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F index d6317d2ef5..2d3e1d9fc8 100644 --- a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F +++ b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F @@ -7162,13 +7162,15 @@ subroutine atm_compute_solve_diagnostics_work(nCells, nEdges, nVertices, & do k=1,nVertLevels vorticity(k,iVertex) = 0.0_RKIND end do - !$acc loop seq - do i=1,vertexDegree - iEdge = edgesOnVertex(i,iVertex) - s = edgesOnVertex_sign(i,iVertex) * dcEdge(iEdge) !DIR$ IVDEP - !$acc loop vector - do k=1,nVertLevels + !$acc loop vector + do k=1,nVertLevels + !$acc loop seq + do i=1,vertexDegree + iEdge = edgesOnVertex(i,iVertex) + s = edgesOnVertex_sign(i,iVertex) * dcEdge(iEdge) + + vorticity(k,iVertex) = vorticity(k,iVertex) + s * u(k,iEdge) end do end do From cb71d77d682608dd84d92006ddb4e2c0bf7b3938 Mon Sep 17 00:00:00 2001 From: Abishek Gopal Date: Tue, 23 Jun 2026 11:50:32 -0600 Subject: [PATCH 3/3] Opt 3 - Move efac to vector loop --- src/core_atmosphere/dynamics/mpas_atm_time_integration.F | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F index 2d3e1d9fc8..4283f46c60 100644 --- a/src/core_atmosphere/dynamics/mpas_atm_time_integration.F +++ b/src/core_atmosphere/dynamics/mpas_atm_time_integration.F @@ -7145,10 +7145,9 @@ subroutine atm_compute_solve_diagnostics_work(nCells, nEdges, nVertices, & ! the first openmp barrier below is set so that ke_edge is computed ! it would be good to move this somewhere else? - efac = dcEdge(iEdge)*dvEdge(iEdge) !$acc loop vector do k=1,nVertLevels - ke_edge(k,iEdge) = efac*u(k,iEdge)**2 + ke_edge(k,iEdge) = dcEdge(iEdge)*dvEdge(iEdge)*u(k,iEdge)**2 end do end do