From 4b9de28feb046fb80b2a2b585766f277df1b3283 Mon Sep 17 00:00:00 2001 From: ianchb Date: Tue, 3 Mar 2026 14:25:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=20Restrict/Prolong=20=E9=93=BE?= =?UTF-8?q?=E8=B7=AF=E9=87=8C=E7=9A=84=20coarse-level=20Sync=5Fcached=20?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=8F=AF=E9=80=89=EF=BC=88=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E8=B7=B3=E8=BF=87=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OutBdLow2Hi_cached 读的是 coarse owned 区域(非 coarse ghost/buffer) 回退旧行为:编译时定义 RP_SYNC_COARSE_AFTER_RESTRICT=1 --- AMSS_NCKU_source/bssn_class.C | 55 ++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/AMSS_NCKU_source/bssn_class.C b/AMSS_NCKU_source/bssn_class.C index 432747e..1b951d1 100644 --- a/AMSS_NCKU_source/bssn_class.C +++ b/AMSS_NCKU_source/bssn_class.C @@ -5745,11 +5745,17 @@ void bssn_class::SHStep() //================================================================================================ -// 0: do not use mixing two levels data for OutBD; 1: do use - -#define MIXOUTB 0 -void bssn_class::RestrictProlong(int lev, int YN, bool BB, - MyList *SL, MyList *OL, MyList *corL) +// 0: do not use mixing two levels data for OutBD; 1: do use + +#define MIXOUTB 0 +// In the cached Restrict->OutBdLow2Hi path, coarse Sync is usually redundant: +// OutBdLow2Hi_cached reads coarse owned cells (build_owned_gsl type-4), not coarse ghost/buffer cells. +// Keep a switch to restore the old behavior if needed for debugging. +#ifndef RP_SYNC_COARSE_AFTER_RESTRICT +#define RP_SYNC_COARSE_AFTER_RESTRICT 0 +#endif +void bssn_class::RestrictProlong(int lev, int YN, bool BB, + MyList *SL, MyList *OL, MyList *corL) // we assume // StateList 1 ----------- // @@ -5811,7 +5817,9 @@ void bssn_class::RestrictProlong(int lev, int YN, bool BB, // misc::tillherecheck(GH->Commlev[GH->mylev],GH->start_rank[GH->mylev],a_stream.str()); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (PSTR == 1 || PSTR == 2) // a_stream.clear(); @@ -5862,7 +5870,9 @@ void bssn_class::RestrictProlong(int lev, int YN, bool BB, // misc::tillherecheck(GH->Commlev[GH->mylev],GH->start_rank[GH->mylev],a_stream.str()); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], SL, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], SL, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (PSTR == 1 || PSTR == 2) // a_stream.clear(); @@ -5948,7 +5958,9 @@ void bssn_class::RestrictProlong_aux(int lev, int YN, bool BB, Parallel::Restrict_bam(GH->PatL[lev - 1], GH->PatL[lev], SL, SynchList_pre, GH->rsul[lev], Symmetry); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (RPB == 0) #if (MIXOUTB == 0) @@ -5970,7 +5982,9 @@ void bssn_class::RestrictProlong_aux(int lev, int YN, bool BB, Parallel::Restrict_bam(GH->PatL[lev - 1], GH->PatL[lev], SL, SL, GH->rsul[lev], Symmetry); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], SL, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], SL, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (RPB == 0) #if (MIXOUTB == 0) @@ -6035,7 +6049,9 @@ void bssn_class::RestrictProlong(int lev, int YN, bool BB) Parallel::Restrict_bam(GH->PatL[lev - 1], GH->PatL[lev], SynchList_cor, SynchList_pre, GH->rsul[lev], Symmetry); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], SynchList_pre, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (RPB == 0) #if (MIXOUTB == 0) @@ -6059,7 +6075,9 @@ void bssn_class::RestrictProlong(int lev, int YN, bool BB) Parallel::Restrict_bam(GH->PatL[lev - 1], GH->PatL[lev], SynchList_cor, StateList, GH->rsul[lev], Symmetry); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], StateList, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], StateList, Symmetry, sync_cache_rp_coarse[lev]); +#endif #if (RPB == 0) #if (MIXOUTB == 0) @@ -6083,7 +6101,7 @@ void bssn_class::RestrictProlong(int lev, int YN, bool BB) //================================================================================================ -void bssn_class::ProlongRestrict(int lev, int YN, bool BB) +void bssn_class::ProlongRestrict(int lev, int YN, bool BB) { if (lev > 0) { @@ -6136,15 +6154,18 @@ void bssn_class::ProlongRestrict(int lev, int YN, bool BB) #else Parallel::Restrict_after(GH->PatL[lev - 1], GH->PatL[lev], SynchList_cor, StateList, Symmetry); #endif - Parallel::Sync_cached(GH->PatL[lev - 1], StateList, Symmetry, sync_cache_rp_coarse[lev]); +#if (RP_SYNC_COARSE_AFTER_RESTRICT == 1) + Parallel::Sync_cached(GH->PatL[lev - 1], StateList, Symmetry, sync_cache_rp_coarse[lev]); +#endif } Parallel::Sync_cached(GH->PatL[lev], SynchList_cor, Symmetry, sync_cache_rp_fine[lev]); } -} -#undef MIXOUTB - -//================================================================================================ +} +#undef MIXOUTB +#undef RP_SYNC_COARSE_AFTER_RESTRICT + +//================================================================================================