Skip to content

Commit 6fdb530

Browse files
committed
fix: replace fragmented bc member GPU_UPDATE with single whole-struct update
Compilers (nvfortran/CCE with OpenMP target, and AMD amdflang) fail or generate incorrect device pointer arithmetic when target update uses 3-level-deep struct member paths like bc%y%beg_side%vel_wall. bc_xyz_info has no allocatable/pointer members, so updating the entire bc struct atomically is safe and generates ! target update to(bc) / ! update device(bc) — one directive vs 14 fragmented member paths.
1 parent 030fcc9 commit 6fdb530

1 file changed

Lines changed: 4 additions & 17 deletions

File tree

src/simulation/m_start_up.fpp

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,27 +1080,14 @@ contains
10801080
$:GPU_UPDATE(device='[acoustic_source, num_source]')
10811081
$:GPU_UPDATE(device='[sigma, surface_tension]')
10821082

1083-
$:GPU_UPDATE(device='[dx, x_cc, x_cb]')
1083+
$:GPU_UPDATE(device='[x%spacing, x%cb, x%cc]')
10841084
if (n > 0) then
1085-
$:GPU_UPDATE(device='[dy, y_cc, y_cb]')
1085+
$:GPU_UPDATE(device='[y%spacing, y%cb, y%cc]')
10861086
end if
10871087
if (p > 0) then
1088-
$:GPU_UPDATE(device='[dz, z_cc, z_cb]')
1088+
$:GPU_UPDATE(device='[z%spacing, z%cb, z%cc]')
10891089
end if
1090-
$:GPU_UPDATE(device='[bc%x%beg, bc%x%end, bc%y%beg, bc%y%end, bc%z%beg, bc%z%end]')
1091-
$:GPU_UPDATE(device='[bc%x%beg_side%vel_wall, bc%x%end_side%vel_wall]')
1092-
$:GPU_UPDATE(device='[bc%y%beg_side%vel_wall, bc%y%end_side%vel_wall]')
1093-
$:GPU_UPDATE(device='[bc%z%beg_side%vel_wall, bc%z%end_side%vel_wall]')
1094-
1095-
$:GPU_UPDATE(device='[bc%x%beg_side%grcbc, bc%x%end_side%grcbc, bc%x%end_side%grcbc_vel]')
1096-
$:GPU_UPDATE(device='[bc%y%beg_side%grcbc, bc%y%end_side%grcbc, bc%y%end_side%grcbc_vel]')
1097-
$:GPU_UPDATE(device='[bc%z%beg_side%grcbc, bc%z%end_side%grcbc, bc%z%end_side%grcbc_vel]')
1098-
1099-
$:GPU_UPDATE(device='[bc%x%beg_side%isothermal, bc%x%end_side%isothermal]')
1100-
$:GPU_UPDATE(device='[bc%y%beg_side%isothermal, bc%y%end_side%isothermal]')
1101-
$:GPU_UPDATE(device='[bc%z%beg_side%isothermal, bc%z%end_side%isothermal]')
1102-
$:GPU_UPDATE(device='[bc%x%beg_side%T_wall, bc%x%end_side%T_wall, bc%y%beg_side%T_wall, bc%y%end_side%T_wall, &
1103-
& bc%z%beg_side%T_wall, bc%z%end_side%T_wall]')
1090+
$:GPU_UPDATE(device='[bc]')
11041091

11051092
$:GPU_UPDATE(device='[relax, relax_model]')
11061093
if (relax) then

0 commit comments

Comments
 (0)