Add keyed BSSN CUDA resident banks

This commit is contained in:
2026-04-29 19:44:19 +08:00
parent 68eab03bac
commit 1ee229a91f
4 changed files with 910 additions and 89 deletions

View File

@@ -273,6 +273,12 @@ bool bssn_cuda_use_resident_sync(int lev)
bool bssn_cuda_keep_resident_after_step(int lev, int trfls_in, int analysis_lev)
{
static int keep_all_levels = -1;
if (keep_all_levels < 0)
{
const char *env = getenv("AMSS_CUDA_KEEP_ALL_LEVELS");
keep_all_levels = (env && atoi(env) != 0) ? 1 : 0;
}
static int enabled = -1;
if (enabled < 0)
{
@@ -281,11 +287,12 @@ bool bssn_cuda_keep_resident_after_step(int lev, int trfls_in, int analysis_lev)
}
if (!enabled)
return false;
// Levels at and above trfls can be read by CPU time interpolation through
// State/Old/corrector lists. Keep those conservative until multi-time-level
// resident storage is implemented.
if (lev == analysis_lev)
return false;
if (keep_all_levels)
return true;
// Conservative default: high time-refinement levels still have scattered
// CPU consumers outside the RK4/AMR exchange path.
return lev < trfls_in;
}