Stabilize EScalar CUDA sync defaults

This commit is contained in:
2026-05-03 00:24:50 +08:00
parent 74ba5feb86
commit 4430d04ee7
6 changed files with 243 additions and 20 deletions

View File

@@ -393,7 +393,8 @@ static const int k_bssn_cuda_bh_state_indices[3] = {18, 19, 20};
bool fill_bssn_cuda_views(Block *cg, MyList<var> *vars,
double **host_views,
double *propspeeds = nullptr,
double *soa_flat = nullptr)
double *soa_flat = nullptr,
bool allow_trailing_vars = false)
{
int idx = 0;
while (vars && idx < BSSN_CUDA_STATE_COUNT)
@@ -410,7 +411,7 @@ bool fill_bssn_cuda_views(Block *cg, MyList<var> *vars,
vars = vars->next;
++idx;
}
return idx == BSSN_CUDA_STATE_COUNT && vars == 0;
return idx == BSSN_CUDA_STATE_COUNT && (allow_trailing_vars || vars == 0);
}
bool bssn_cuda_use_resident_sync(int lev)
@@ -687,7 +688,7 @@ void bssn_cuda_download_level_state(MyList<Patch> *PatL, MyList<var> *vars, int
if (myrank == cg->rank && bssn_cuda_has_resident_state(cg))
{
double *state_out[BSSN_CUDA_STATE_COUNT];
if (!fill_bssn_cuda_views(cg, vars, state_out))
if (!fill_bssn_cuda_views(cg, vars, state_out, nullptr, nullptr, true))
{
cout << "CUDA BSSN state list mismatch on resident state download" << endl;
MPI_Abort(MPI_COMM_WORLD, 1);
@@ -720,7 +721,7 @@ void bssn_cuda_download_level_state_if_present(MyList<Patch> *PatL, MyList<var>
if (myrank == cg->rank && bssn_cuda_has_resident_state(cg))
{
double *state_out[BSSN_CUDA_STATE_COUNT];
if (!fill_bssn_cuda_views(cg, vars, state_out))
if (!fill_bssn_cuda_views(cg, vars, state_out, nullptr, nullptr, true))
{
cout << "CUDA BSSN state list mismatch on resident state conditional download" << endl;
MPI_Abort(MPI_COMM_WORLD, 1);