From e2bc472845b799652ba1ddd3819aa0564304d42d Mon Sep 17 00:00:00 2001 From: CGH0S7 Date: Wed, 25 Feb 2026 10:59:32 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=91=E6=A0=B8?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E5=8F=96=E6=B6=88=E7=A1=AC=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E6=94=B9=E4=B8=BA=E6=99=BA=E8=83=BD=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- makefile_and_run.py | 49 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/makefile_and_run.py b/makefile_and_run.py index 096ed58..157ef76 100755 --- a/makefile_and_run.py +++ b/makefile_and_run.py @@ -11,17 +11,46 @@ import AMSS_NCKU_Input as input_data import subprocess import time -## CPU core binding configuration using taskset -## taskset ensures all child processes inherit the CPU affinity mask -## This forces make and all compiler processes to use only nohz_full cores (4-55, 60-111) -## Format: taskset -c 4-55,60-111 ensures processes only run on these cores -#NUMACTL_CPU_BIND = "taskset -c 0-111" -NUMACTL_CPU_BIND = "taskset -c 16-47,64-95" -## Build parallelism configuration -## Use nohz_full cores (4-55, 60-111) for compilation: 52 + 52 = 104 cores -## Set make -j to utilize available cores for faster builds -BUILD_JOBS = 96 + +def get_last_n_cores_per_socket(n=32): + """ + Read CPU topology via lscpu and return a taskset -c string + selecting the last `n` cores of each NUMA node (socket). + + Example: 2 sockets x 56 cores each, n=32 -> node0: 24-55, node1: 80-111 + -> "taskset -c 24-55,80-111" + """ + result = subprocess.run(["lscpu", "--parse=NODE,CPU"], capture_output=True, text=True) + + # Build a dict: node_id -> sorted list of CPU ids + node_cpus = {} + for line in result.stdout.splitlines(): + if line.startswith("#") or not line.strip(): + continue + parts = line.split(",") + if len(parts) < 2: + continue + node_id, cpu_id = int(parts[0]), int(parts[1]) + node_cpus.setdefault(node_id, []).append(cpu_id) + + segments = [] + for node_id in sorted(node_cpus): + cpus = sorted(node_cpus[node_id]) + selected = cpus[-n:] # last n cores of this socket + segments.append(f"{selected[0]}-{selected[-1]}") + + cpu_str = ",".join(segments) + total = len(segments) * n + print(f" CPU binding: taskset -c {cpu_str} ({total} cores, last {n} per socket)") + return f"taskset -c {cpu_str}" + + +## CPU core binding: dynamically select the last 32 cores of each socket (64 cores total) +NUMACTL_CPU_BIND = get_last_n_cores_per_socket(n=32) + +## Build parallelism: match the number of bound cores +BUILD_JOBS = 64 ################################################################## From ccf6adaf75cca50ca6e4b9fe805123fa9b0dfc9c Mon Sep 17 00:00:00 2001 From: CGH0S7 Date: Wed, 25 Feb 2026 11:47:14 +0800 Subject: [PATCH 02/16] =?UTF-8?q?=E6=8F=90=E4=BE=9B=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E7=9A=84macrodef.h=E9=81=BF=E5=85=8Dllm=E8=A2=AB=E8=AF=AF?= =?UTF-8?q?=E5=AF=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AMSS_NCKU_source/macrodef.fh | 160 +++++++++++----------- AMSS_NCKU_source/macrodef.h | 257 ++++++++++++++++++++--------------- 2 files changed, 222 insertions(+), 195 deletions(-) diff --git a/AMSS_NCKU_source/macrodef.fh b/AMSS_NCKU_source/macrodef.fh index ead5fe0..84fbf50 100644 --- a/AMSS_NCKU_source/macrodef.fh +++ b/AMSS_NCKU_source/macrodef.fh @@ -1,83 +1,77 @@ - - -#if 0 -note here -v:r; u: phi; w: theta -tetradtype 0 -v^a = (x,y,z) -orthonormal order: v,u,w -m = (phi - i theta)/sqrt(2) following Frans, Eq.(8) of PRD 75, 124018(2007) -tetradtype 1 -orthonormal order: w,u,v -m = (theta + i phi)/sqrt(2) following Sperhake, Eq.(3.2) of PRD 85, 124062(2012) -tetradtype 2 -v_a = (x,y,z) -orthonormal order: v,u,w -m = (phi - i theta)/sqrt(2) following Frans, Eq.(8) of PRD 75, 124018(2007) -#endif -#define tetradtype 2 - -#if 0 -note here -Cell center or Vertex center -#endif -#define Cell - -#if 0 -note here -2nd order: 2 -4th order: 3 -6th order: 4 -8th order: 5 -#endif -#define ghost_width 3 - -#if 0 -note here -use shell or not -#endif -#define WithShell - -#if 0 -note here -use constraint preserving boundary condition or not -only affect Z4c -#endif -#define CPBC - -#if 0 -note here -Gauge condition type -0: B^i gauge -1: David's puncture gauge -2: MB B^i gauge -3: RIT B^i gauge -4: MB beta gauge (beta gauge not means Eq.(3) of PRD 84, 124006) -5: RIT beta gauge (beta gauge not means Eq.(3) of PRD 84, 124006) -6: MGB1 B^i gauge -7: MGB2 B^i gauge -#endif -#define GAUGE 2 - -#if 0 -buffer points for CPBC boundary -#endif -#define CPBC_ghost_width (ghost_width) - -#if 0 -using BSSN variable for constraint violation and psi4 calculation: 0 -using ADM variable for constraint violation and psi4 calculation: 1 -#endif -#define ABV 0 - -#if 0 -Type of Potential and Scalar Distribution in F(R) Scalar-Tensor Theory -1: Case C of 1112.3928, V=0 -2: shell with a2^2*phi0/(1+a2^2), f(R) = R+a2*R^2 induced V -3: ground state of Schrodinger-Newton system, f(R) = R+a2*R^2 induced V -4: a2 = oo and phi(r) = phi0 * 0.5 * ( tanh((r+r0)/sigma) - tanh((r-r0)/sigma) ) -5: shell with phi(r) = phi0*Exp(-(r-r0)**2/sigma), V = 0 -#endif -#define EScalar_CC 2 - - + +#define tetradtype 2 + +#define Cell + +#define ghost_width 3 + + + +#define GAUGE 0 + +#define CPBC_ghost_width (ghost_width) + +#define ABV 0 + +#define EScalar_CC 2 + +#if 0 + +define tetradtype + v:r; u: phi; w: theta + tetradtype 0 + v^a = (x,y,z) + orthonormal order: v,u,w + m = (phi - i theta)/sqrt(2) following Frans, Eq.(8) of PRD 75, 124018(2007) + tetradtype 1 + orthonormal order: w,u,v + m = (theta + i phi)/sqrt(2) following Sperhake, Eq.(3.2) of PRD 85, 124062(2012) + tetradtype 2 + v_a = (x,y,z) + orthonormal order: v,u,w + m = (phi - i theta)/sqrt(2) following Frans, Eq.(8) of PRD 75, 124018(2007) + +define Cell or Vertex + Cell center or Vertex center + +define ghost_width + 2nd order: 2 + 4th order: 3 + 6th order: 4 + 8th order: 5 + +define WithShell + use shell or not + +define CPBC + use constraint preserving boundary condition or not + only affect Z4c + CPBC only supports WithShell + +define GAUGE + 0: B^i gauge + 1: David puncture gauge + 2: MB B^i gauge + 3: RIT B^i gauge + 4: MB beta gauge (beta gauge not means Eq.(3) of PRD 84, 124006) + 5: RIT beta gauge (beta gauge not means Eq.(3) of PRD 84, 124006) + 6: MGB1 B^i gauge + 7: MGB2 B^i gauge + +define CPBC_ghost_width (ghost_width) + buffer points for CPBC boundary + +define ABV + 0: using BSSN variable for constraint violation and psi4 calculation + 1: using ADM variable for constraint violation and psi4 calculation + +define EScalar_CC +Type of Potential and Scalar Distribution in F(R) Scalar-Tensor Theory + 1: Case C of 1112.3928, V=0 + 2: shell with phi(r) = phi0 * a2^2/(1+a2^2), f(R) = R+a2*R^2 induced V + 3: ground state of Schrodinger-Newton system, f(R) = R+a2*R^2 induced V + 4: a2 = +oo and phi(r) = phi0 * 0.5 * ( tanh((r+r0)/sigma) - tanh((r-r0)/sigma) ) + 5: shell with phi(r) = phi0 * Exp(-(r-r0)**2/sigma), V = 0 + +#endif + diff --git a/AMSS_NCKU_source/macrodef.h b/AMSS_NCKU_source/macrodef.h index 164785a..631f33b 100644 --- a/AMSS_NCKU_source/macrodef.h +++ b/AMSS_NCKU_source/macrodef.h @@ -1,112 +1,145 @@ - -#ifndef MICRODEF_H -#define MICRODEF_H - -#include "macrodef.fh" - -// application parameters - -/// **** -// sommerfeld boundary type -// 0: bam, 1: shibata -#define SommerType 0 - -/// **** -// for Using Gauss-Legendre quadrature in theta direction -#define GaussInt - -/// **** -// 0: BSSN vacuum -// 1: coupled to scalar field -// 2: Z4c vacuum -// 3: coupled to Maxwell field -// -#define ABEtype 2 - -/// **** -// using Apparent Horizon Finder -//#define With_AHF - -/// **** -// Psi4 calculation method -// 0: EB method -// 1: 4-D method -// -#define Psi4type 0 - -/// **** -// for Using point psi4 or not -//#define Point_Psi4 - -/// **** -// RestrictProlong in Step (0) or after Step (1) -#define RPS 1 - -/// **** -// Enforce algebra constraint -// for every RK4 sub step: 0 -// only when iter_count == 3: 1 -// after routine Step: 2 -#define AGM 0 - -/// **** -// Restrict Prolong using BAM style 1 or old style 0 -#define RPB 0 - -/// **** -// 1: move Analysis out ot 4 sub steps and treat PBH with Euler method -#define MAPBH 1 - -/// **** -// parallel structure, 0: level by level, 1: considering all levels, 2: as 1 but reverse the CPU order, 3: Frank's scheme -#define PSTR 0 - -/// **** -// regrid for every level or for all levels at a time -// 0: for every level; 1: for all -#define REGLEV 0 - -/// **** -// use gpu or not -//#define USE_GPU - -/// **** -// use checkpoint for every process -//#define CHECKDETAIL - -/// **** -// use FakeCheckPrepare to write CheckPoint -//#define FAKECHECK -////================================================================ -// some basic parameters for numerical calculation -#define dim 3 - -//#define Cell or Vertex in "microdef.fh" - -// ****** -// buffer point number for mesh refinement interface -#define buffer_width 6 - -// ****** -// buffer point number shell-box interface, on shell -#define SC_width buffer_width -// buffer point number shell-box interface, on box -#define CS_width (2*buffer_width) - -#if(buffer_width < ghost_width) -#error we always assume buffer_width>ghost_width -#endif - -#define PACK 1 -#define UNPACK 2 - -#define Mymax(a,b) (((a) > (b)) ? (a) : (b)) -#define Mymin(a,b) (((a) < (b)) ? (a) : (b)) - -#define feq(a,b,d) (fabs(a-b)d) - -#define TINY 1e-10 - -#endif /* MICRODEF_H */ + +#ifndef MICRODEF_H +#define MICRODEF_H + +#include "macrodef.fh" + +// application parameters + +#define SommerType 0 + +#define GaussInt + +#define ABEtype 0 + +//#define With_AHF +#define Psi4type 0 + +//#define Point_Psi4 + +#define RPS 1 + +#define AGM 0 + +#define RPB 0 + +#define MAPBH 1 + +#define PSTR 0 + +#define REGLEV 0 + +//#define USE_GPU + +//#define CHECKDETAIL + +//#define FAKECHECK + +// +// define SommerType +// sommerfeld boundary type +// 0: bam +// 1: shibata +// +// define GaussInt +// for Using Gauss-Legendre quadrature in theta direction +// +// define ABEtype +// 0: BSSN vacuum +// 1: coupled to scalar field +// 2: Z4c vacuum +// 3: coupled to Maxwell field +// +// define With_AHF +// using Apparent Horizon Finder +// +// define Psi4type +// Psi4 calculation method +// 0: EB method +// 1: 4-D method +// +// define Point_Psi4 +// for Using point psi4 or not +// +// define RPS +// RestrictProlong in Step (0) or after Step (1) +// +// define AGM +// Enforce algebra constraint +// for every RK4 sub step: 0 +// only when iter_count == 3: 1 +// after routine Step: 2 +// +// define RPB +// Restrict Prolong using BAM style 1 or old style 0 +// +// define MAPBH +// 1: move Analysis out ot 4 sub steps and treat PBH with Euler method +// +// define PSTR +// parallel structure +// 0: level by level +// 1: considering all levels +// 2: as 1 but reverse the CPU order +// 3: Frank's scheme +// +// define REGLEV +// regrid for every level or for all levels at a time +// 0: for every level; +// 1: for all +// +// define USE_GPU +// use gpu or not +// +// define CHECKDETAIL +// use checkpoint for every process +// +// define FAKECHECK +// use FakeCheckPrepare to write CheckPoint +// + +////================================================================ +// some basic parameters for numerical calculation +////================================================================ + +#define dim 3 + +//#define Cell or Vertex in "macrodef.fh" + +#define buffer_width 6 + +#define SC_width buffer_width + +#define CS_width (2*buffer_width) + +// +// define Cell or Vertex in "macrodef.fh" +// +// define buffer_width +// buffer point number for mesh refinement interface +// +// define SC_width buffer_width +// buffer point number shell-box interface, on shell +// +// define CS_width +// buffer point number shell-box interface, on box +// + +#if(buffer_width < ghost_width) +# error we always assume buffer_width>ghost_width +#endif + +#define PACK 1 +#define UNPACK 2 + +#define Mymax(a,b) (((a) > (b)) ? (a) : (b)) +#define Mymin(a,b) (((a) < (b)) ? (a) : (b)) + +#define feq(a,b,d) (fabs(a-b)d) + +#define TINY 1e-10 + +#endif /* MICRODEF_H */ + From efc8bf29ea491a89ae55bb9b5b0d3b15a8465157 Mon Sep 17 00:00:00 2001 From: CGH0S7 Date: Wed, 25 Feb 2026 16:00:26 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E6=8C=89=E9=9C=80=E5=A4=B1=E6=95=88?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=BC=93=E5=AD=98=EF=BC=9ARegrid=5FOnelevel?= =?UTF-8?q?=20=E6=94=B9=E4=B8=BA=E8=BF=94=E5=9B=9E=20bool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 cgh::Regrid_Onelevel 的返回类型从 void 改为 bool, 在网格真正发生移动时返回 true,否则返回 false。 调用方仅在返回 true 时才失效 sync_cache_*,避免了 每次 RecursiveStep 结束后无条件失效所有层级缓存的冗余开销。 Co-Authored-By: Claude Sonnet 4.6 (1M context) --- AMSS_NCKU_source/bssn_class.C | 24 ++++++++++++------------ AMSS_NCKU_source/cgh.C | 7 ++++--- AMSS_NCKU_source/cgh.h | 2 +- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/AMSS_NCKU_source/bssn_class.C b/AMSS_NCKU_source/bssn_class.C index 18f1388..eb84f8e 100644 --- a/AMSS_NCKU_source/bssn_class.C +++ b/AMSS_NCKU_source/bssn_class.C @@ -2426,9 +2426,9 @@ void bssn_class::RecursiveStep(int lev) #endif #if (REGLEV == 0) - GH->Regrid_Onelevel(lev, Symmetry, BH_num, Porgbr, Porg0, + if (GH->Regrid_Onelevel(lev, Symmetry, BH_num, Porgbr, Porg0, SynchList_cor, OldStateList, StateList, SynchList_pre, - fgt(PhysTime - dT_lev, StartTime, dT_lev / 2), ErrorMonitor); + fgt(PhysTime - dT_lev, StartTime, dT_lev / 2), ErrorMonitor)) for (int il = 0; il < GH->levels; il++) { sync_cache_pre[il].invalidate(); sync_cache_cor[il].invalidate(); sync_cache_rp_coarse[il].invalidate(); sync_cache_rp_fine[il].invalidate(); } #endif } @@ -2605,9 +2605,9 @@ void bssn_class::ParallelStep() delete[] tporg; delete[] tporgo; #if (REGLEV == 0) - GH->Regrid_Onelevel(GH->mylev, Symmetry, BH_num, Porgbr, Porg0, + if (GH->Regrid_Onelevel(GH->mylev, Symmetry, BH_num, Porgbr, Porg0, SynchList_cor, OldStateList, StateList, SynchList_pre, - fgt(PhysTime - dT_lev, StartTime, dT_lev / 2), ErrorMonitor); + fgt(PhysTime - dT_lev, StartTime, dT_lev / 2), ErrorMonitor)) for (int il = 0; il < GH->levels; il++) { sync_cache_pre[il].invalidate(); sync_cache_cor[il].invalidate(); sync_cache_rp_coarse[il].invalidate(); sync_cache_rp_fine[il].invalidate(); } #endif } @@ -2772,9 +2772,9 @@ void bssn_class::ParallelStep() if (lev + 1 >= GH->movls) { // GH->Regrid_Onelevel_aux(lev,Symmetry,BH_num,Porgbr,Porg0, - GH->Regrid_Onelevel(lev + 1, Symmetry, BH_num, Porgbr, Porg0, + if (GH->Regrid_Onelevel(lev + 1, Symmetry, BH_num, Porgbr, Porg0, SynchList_cor, OldStateList, StateList, SynchList_pre, - fgt(PhysTime - dT_levp1, StartTime, dT_levp1 / 2), ErrorMonitor); + fgt(PhysTime - dT_levp1, StartTime, dT_levp1 / 2), ErrorMonitor)) for (int il = 0; il < GH->levels; il++) { sync_cache_pre[il].invalidate(); sync_cache_cor[il].invalidate(); sync_cache_rp_coarse[il].invalidate(); sync_cache_rp_fine[il].invalidate(); } // a_stream.clear(); @@ -2787,9 +2787,9 @@ void bssn_class::ParallelStep() // for this level if (YN == 1) { - GH->Regrid_Onelevel(lev, Symmetry, BH_num, Porgbr, Porg0, + if (GH->Regrid_Onelevel(lev, Symmetry, BH_num, Porgbr, Porg0, SynchList_cor, OldStateList, StateList, SynchList_pre, - fgt(PhysTime - dT_lev, StartTime, dT_lev / 2), ErrorMonitor); + fgt(PhysTime - dT_lev, StartTime, dT_lev / 2), ErrorMonitor)) for (int il = 0; il < GH->levels; il++) { sync_cache_pre[il].invalidate(); sync_cache_cor[il].invalidate(); sync_cache_rp_coarse[il].invalidate(); sync_cache_rp_fine[il].invalidate(); } // a_stream.clear(); @@ -2806,9 +2806,9 @@ void bssn_class::ParallelStep() if (YN == 1) { // GH->Regrid_Onelevel_aux(lev-2,Symmetry,BH_num,Porgbr,Porg0, - GH->Regrid_Onelevel(lev - 1, Symmetry, BH_num, Porgbr, Porg0, + if (GH->Regrid_Onelevel(lev - 1, Symmetry, BH_num, Porgbr, Porg0, SynchList_cor, OldStateList, StateList, SynchList_pre, - fgt(PhysTime - dT_lev, StartTime, dT_levm1 / 2), ErrorMonitor); + fgt(PhysTime - dT_lev, StartTime, dT_levm1 / 2), ErrorMonitor)) for (int il = 0; il < GH->levels; il++) { sync_cache_pre[il].invalidate(); sync_cache_cor[il].invalidate(); sync_cache_rp_coarse[il].invalidate(); sync_cache_rp_fine[il].invalidate(); } // a_stream.clear(); @@ -2822,9 +2822,9 @@ void bssn_class::ParallelStep() if (i % 4 == 3) { // GH->Regrid_Onelevel_aux(lev-2,Symmetry,BH_num,Porgbr,Porg0, - GH->Regrid_Onelevel(lev - 1, Symmetry, BH_num, Porgbr, Porg0, + if (GH->Regrid_Onelevel(lev - 1, Symmetry, BH_num, Porgbr, Porg0, SynchList_cor, OldStateList, StateList, SynchList_pre, - fgt(PhysTime - dT_lev, StartTime, dT_levm1 / 2), ErrorMonitor); + fgt(PhysTime - dT_lev, StartTime, dT_levm1 / 2), ErrorMonitor)) for (int il = 0; il < GH->levels; il++) { sync_cache_pre[il].invalidate(); sync_cache_cor[il].invalidate(); sync_cache_rp_coarse[il].invalidate(); sync_cache_rp_fine[il].invalidate(); } // a_stream.clear(); diff --git a/AMSS_NCKU_source/cgh.C b/AMSS_NCKU_source/cgh.C index e27ccd6..2f7f2a0 100644 --- a/AMSS_NCKU_source/cgh.C +++ b/AMSS_NCKU_source/cgh.C @@ -1301,13 +1301,13 @@ bool cgh::Interp_One_Point(MyList *VarList, } -void cgh::Regrid_Onelevel(int lev, int Symmetry, int BH_num, double **Porgbr, double **Porg0, +bool cgh::Regrid_Onelevel(int lev, int Symmetry, int BH_num, double **Porgbr, double **Porg0, MyList *OldList, MyList *StateList, MyList *FutureList, MyList *tmList, bool BB, monitor *ErrorMonitor) { if (lev < movls) - return; + return false; #if (0) // #if (PSTR == 1 || PSTR == 2) @@ -1396,7 +1396,7 @@ void cgh::Regrid_Onelevel(int lev, int Symmetry, int BH_num, double **Porgbr, do for (bhi = 0; bhi < BH_num; bhi++) delete[] tmpPorg[bhi]; delete[] tmpPorg; - return; + return false; } // x direction rr = (Porg0[bhi][0] - handle[lev][grd][0]) / dX; @@ -1500,6 +1500,7 @@ void cgh::Regrid_Onelevel(int lev, int Symmetry, int BH_num, double **Porgbr, do for (int bhi = 0; bhi < BH_num; bhi++) delete[] tmpPorg[bhi]; delete[] tmpPorg; + return tot_flag; } diff --git a/AMSS_NCKU_source/cgh.h b/AMSS_NCKU_source/cgh.h index 79e7bf6..57e489a 100644 --- a/AMSS_NCKU_source/cgh.h +++ b/AMSS_NCKU_source/cgh.h @@ -74,7 +74,7 @@ public: MyList *OldList, MyList *StateList, MyList *FutureList, MyList *tmList, int Symmetry, bool BB); - void Regrid_Onelevel(int lev, int Symmetry, int BH_num, double **Porgbr, double **Porg0, + bool Regrid_Onelevel(int lev, int Symmetry, int BH_num, double **Porgbr, double **Porg0, MyList *OldList, MyList *StateList, MyList *FutureList, MyList *tmList, bool BB, monitor *ErrorMonitor); From 9e6b25163a006530047f58efa0e6d65a359201bd Mon Sep 17 00:00:00 2001 From: CGH0S7 <776459475@qq.com> Date: Wed, 25 Feb 2026 17:00:55 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20PGO=20profdata=20?= =?UTF-8?q?=E5=B9=B6=E4=B8=BA=20ABE=20=E6=8F=92=E6=A1=A9=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20PGO=5FMODE=20=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新 pgo_profile/default.profdata 为最新收集的 profile 数据 - 备份旧 profdata 至 default.profdata.backup2 - makefile: 新增 PGO_MODE 开关(默认 opt),支持 make PGO_MODE=instrument 切换到 Phase 1 插桩模式重新收集数据,无需手动修改 flags - makefile: TwoPunctureABE 独立使用 TP_OPTFLAGS,不受 PGO_MODE 影响 - makefile: PROFDATA 路径改为 /home/$(shell whoami)/AMSS-NCKU/pgo_profile/default.profdata - makefile.inc: 移除硬编码的编译 flags,改由 makefile 中的 ifeq 逻辑管理 Co-Authored-By: Claude Sonnet 4.6 --- AMSS_NCKU_source/makefile | 30 ++++++++++++++++-- AMSS_NCKU_source/makefile.inc | 14 +++----- pgo_profile/default.profdata | Bin 390312 -> 407648 bytes pgo_profile/default.profdata.backup2 | Bin 0 -> 390312 bytes .../default_9725923726611433605_0.profraw | Bin 0 -> 338176 bytes 5 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 pgo_profile/default.profdata.backup2 create mode 100644 pgo_profile/default_9725923726611433605_0.profraw diff --git a/AMSS_NCKU_source/makefile b/AMSS_NCKU_source/makefile index f2d4e3c..7a746fa 100644 --- a/AMSS_NCKU_source/makefile +++ b/AMSS_NCKU_source/makefile @@ -2,6 +2,27 @@ include makefile.inc +## ABE build flags selected by PGO_MODE (set in makefile.inc, default: opt) +## make -> opt (PGO-guided, maximum performance) +## make PGO_MODE=instrument -> instrument (Phase 1: collect fresh profile data) +PROFDATA = /home/$(shell whoami)/AMSS-NCKU/pgo_profile/default.profdata + +ifeq ($(PGO_MODE),instrument) +## Phase 1: instrumentation — omit -ipo/-fp-model fast=2 for faster build and numerical stability +CXXAPPFLAGS = -O2 -xHost -fma -fprofile-instr-generate \ + -Dfortran3 -Dnewc -I${MKLROOT}/include +f90appflags = -O2 -xHost -fma -fprofile-instr-generate \ + -align array64byte -fpp -I${MKLROOT}/include +else +## opt (default): maximum performance with PGO profile data +CXXAPPFLAGS = -O3 -xHost -fp-model fast=2 -fma -ipo \ + -fprofile-instr-use=$(PROFDATA) \ + -Dfortran3 -Dnewc -I${MKLROOT}/include +f90appflags = -O3 -xHost -fp-model fast=2 -fma -ipo \ + -fprofile-instr-use=$(PROFDATA) \ + -align array64byte -fpp -I${MKLROOT}/include +endif + .SUFFIXES: .o .f90 .C .for .cu .f90.o: @@ -16,11 +37,14 @@ include makefile.inc .cu.o: $(Cu) $(CUDA_APP_FLAGS) -c $< -o $@ $(CUDA_LIB_PATH) +## TwoPunctureABE uses fixed optimal flags, independent of CXXAPPFLAGS (which may be PGO-instrumented) +TP_OPTFLAGS = -O3 -xHost -fp-model fast=2 -fma -ipo -Dfortran3 -Dnewc -I${MKLROOT}/include + TwoPunctures.o: TwoPunctures.C - ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< -o $@ + ${CXX} $(TP_OPTFLAGS) -qopenmp -c $< -o $@ TwoPunctureABE.o: TwoPunctureABE.C - ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< -o $@ + ${CXX} $(TP_OPTFLAGS) -qopenmp -c $< -o $@ # Input files C++FILES = ABE.o Ansorg.o Block.o misc.o monitor.o Parallel.o MPatch.o var.o\ @@ -102,7 +126,7 @@ ABEGPU: $(C++FILES_GPU) $(F90FILES) $(F77FILES) $(AHFDOBJS) $(CUDAFILES) $(CLINKER) $(CXXAPPFLAGS) -o $@ $(C++FILES_GPU) $(F90FILES) $(F77FILES) $(AHFDOBJS) $(CUDAFILES) $(LDLIBS) TwoPunctureABE: $(TwoPunctureFILES) - $(CLINKER) $(CXXAPPFLAGS) -qopenmp -o $@ $(TwoPunctureFILES) $(LDLIBS) + $(CLINKER) $(TP_OPTFLAGS) -qopenmp -o $@ $(TwoPunctureFILES) $(LDLIBS) clean: rm *.o ABE ABEGPU TwoPunctureABE make.log -f diff --git a/AMSS_NCKU_source/makefile.inc b/AMSS_NCKU_source/makefile.inc index 072e113..db28baf 100755 --- a/AMSS_NCKU_source/makefile.inc +++ b/AMSS_NCKU_source/makefile.inc @@ -10,16 +10,10 @@ filein = -I/usr/include/ -I${MKLROOT}/include ## Added -lifcore for Intel Fortran runtime and -limf for Intel math library LDLIBS = -L${MKLROOT}/lib -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lifcore -limf -lpthread -lm -ldl -## Aggressive optimization flags + PGO Phase 2 (profile-guided optimization) -## -fprofile-instr-use: use collected profile data to guide optimization decisions -## (branch prediction, basic block layout, inlining, loop unrolling) -PROFDATA = ../../pgo_profile/default.profdata -CXXAPPFLAGS = -O3 -xHost -fp-model fast=2 -fma -ipo \ - -fprofile-instr-use=$(PROFDATA) \ - -Dfortran3 -Dnewc -I${MKLROOT}/include -f90appflags = -O3 -xHost -fp-model fast=2 -fma -ipo \ - -fprofile-instr-use=$(PROFDATA) \ - -align array64byte -fpp -I${MKLROOT}/include +## PGO build mode switch (ABE only; TwoPunctureABE always uses opt flags) +## opt : (default) maximum performance with PGO profile-guided optimization +## instrument : PGO Phase 1 instrumentation to collect fresh profile data +PGO_MODE ?= opt f90 = ifx f77 = ifx CXX = icpx diff --git a/pgo_profile/default.profdata b/pgo_profile/default.profdata index c09d07825d9bae3809eccccc0f7af431380f51f6..6036a084ecf8d943be6998739216d94149d0ca86 100644 GIT binary patch delta 16858 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%0A$cB%+2eEFV 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 IS19NI0Bn2&C;$Ke literal 0 HcmV?d00001 diff --git a/pgo_profile/default_9725923726611433605_0.profraw b/pgo_profile/default_9725923726611433605_0.profraw new file mode 100644 index 0000000000000000000000000000000000000000..4ffbdddc718e5889212457df9b71993d88ba8e7a GIT binary patch literal 338176 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 literal 0 HcmV?d00001 From a5c713a7e0617494e30a3572d7588b2b49ae31e1 Mon Sep 17 00:00:00 2001 From: CGH0S7 <776459475@qq.com> Date: Wed, 25 Feb 2026 17:22:56 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E5=AE=8C=E5=96=84PGO=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AMSS_NCKU_source/makefile | 4 ++-- pgo_profile/default.profdata | Bin 407648 -> 407648 bytes .../default_9725923726611433605_0.profraw | Bin 338176 -> 338176 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AMSS_NCKU_source/makefile b/AMSS_NCKU_source/makefile index 7a746fa..c5750b8 100644 --- a/AMSS_NCKU_source/makefile +++ b/AMSS_NCKU_source/makefile @@ -9,9 +9,9 @@ PROFDATA = /home/$(shell whoami)/AMSS-NCKU/pgo_profile/default.profdata ifeq ($(PGO_MODE),instrument) ## Phase 1: instrumentation — omit -ipo/-fp-model fast=2 for faster build and numerical stability -CXXAPPFLAGS = -O2 -xHost -fma -fprofile-instr-generate \ +CXXAPPFLAGS = -O3 -xHost -fma -fprofile-instr-generate -ipo \ -Dfortran3 -Dnewc -I${MKLROOT}/include -f90appflags = -O2 -xHost -fma -fprofile-instr-generate \ +f90appflags = -O3 -xHost -fma -fprofile-instr-generate -ipo \ -align array64byte -fpp -I${MKLROOT}/include else ## opt (default): maximum performance with PGO profile data diff --git a/pgo_profile/default.profdata b/pgo_profile/default.profdata index 6036a084ecf8d943be6998739216d94149d0ca86..156744d4524e8c26a384e5778fd05244fa48a76a 100644 GIT binary patch delta 105 zcmaFxLE^y&i3tsiIvX3k7a1;PXFvfkJ~|CkBse*cSG-wdal6Q3#_b}DnF@DJca3Eh Xm>yuq!r4AAmKlgyw$F=YJ#-5I#XuPs delta 93 zcmaFxLE^y&i3tsiA{!gM7bz`ZXFvfkK7yXUPK;4(x{f%bK(ol=c9F%5+eH>L74Bjb XneJ%EBGEoCmKlgyw$F=YJ#-5IMEn@( diff --git a/pgo_profile/default_9725923726611433605_0.profraw b/pgo_profile/default_9725923726611433605_0.profraw index 4ffbdddc718e5889212457df9b71993d88ba8e7a..e38d3001385fa72a0781b4e43ab68c5894379dbd 100644 GIT binary patch delta 19215 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 delta 19368 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 M!5U}P%*p%yA5iy$m;e9( From d942122043d981646735d6e939d9b7e5acbc7fd1 Mon Sep 17 00:00:00 2001 From: CGH0S7 <776459475@qq.com> Date: Wed, 25 Feb 2026 18:25:20 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E6=9B=B4=E6=96=B0PGO=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pgo_profile/default.profdata | Bin 407648 -> 390312 bytes pgo_profile/default.profdatabackup3 | Bin 0 -> 407648 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 pgo_profile/default.profdatabackup3 diff --git a/pgo_profile/default.profdata b/pgo_profile/default.profdata index 156744d4524e8c26a384e5778fd05244fa48a76a..c09d07825d9bae3809eccccc0f7af431380f51f6 100644 GIT binary patch delta 17064 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 Apa1{> delta 16855 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 TEMNJl$SqFlgK1mCwr&3hv~5U* diff --git a/pgo_profile/default.profdatabackup3 b/pgo_profile/default.profdatabackup3 new file mode 100644 index 0000000000000000000000000000000000000000..156744d4524e8c26a384e5778fd05244fa48a76a GIT binary patch literal 407648 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ℜv6;-mYjcP;$sE9p5IpzcbiM`3w;-_-AhDXCHz85 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

ZWdANOpX+ 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 Date: Wed, 25 Feb 2026 18:59:33 +0800 Subject: [PATCH 07/16] Replace Fortran bssn_rhs with C implementation and add C helper kernels - Modify bssn_rhs_c.C to use existing project headers (macrodef.h, bssn_rhs.h) - Update makefile: remove bssn_rhs.o from F90FILES, add CFILES with OpenMP - Keep Fortran helper files (diff_new.f90, kodiss.f90, lopsidediff.f90) for other Fortran callers [copilot: fix compiling errors & a nan error] Co-authored-by: ianchb Co-authored-by: copilot-swe-agent[bot] <198982749+copilot@users.noreply.github.com> --- AMSS_NCKU_source/bssn_rhs_c.C | 1249 +++++++++++++++++++++++++++++++++ AMSS_NCKU_source/fdderivs_c.C | 264 +++++++ AMSS_NCKU_source/fderivs_c.C | 145 ++++ AMSS_NCKU_source/kodiss_c.C | 109 +++ AMSS_NCKU_source/lopsided_c.C | 255 +++++++ AMSS_NCKU_source/makefile | 34 +- AMSS_NCKU_source/makefile.inc | 2 +- AMSS_NCKU_source/share_func.h | 147 ++++ AMSS_NCKU_source/tool.h | 27 + 9 files changed, 2224 insertions(+), 8 deletions(-) create mode 100644 AMSS_NCKU_source/bssn_rhs_c.C create mode 100644 AMSS_NCKU_source/fdderivs_c.C create mode 100644 AMSS_NCKU_source/fderivs_c.C create mode 100644 AMSS_NCKU_source/kodiss_c.C create mode 100644 AMSS_NCKU_source/lopsided_c.C create mode 100644 AMSS_NCKU_source/share_func.h create mode 100644 AMSS_NCKU_source/tool.h diff --git a/AMSS_NCKU_source/bssn_rhs_c.C b/AMSS_NCKU_source/bssn_rhs_c.C new file mode 100644 index 0000000..99254a2 --- /dev/null +++ b/AMSS_NCKU_source/bssn_rhs_c.C @@ -0,0 +1,1249 @@ +#include "macrodef.h" +#include "bssn_rhs.h" +#include "share_func.h" +#include "tool.h" +// 0-based i,j,k +// #define IDX_F(i,j,k,nx,ny) ((i) + (j)*(nx) + (k)*(nx)*(ny)) +// ex(1)=nx, ex(2)=ny, ex(3)=nz + +// 用法:a[ IDX_F(i,j,k,nx,ny) ] + +// C function that calculates the right-hand side for BSSN equations +int f_compute_rhs_bssn(int *ex, double &T, + double *X, double *Y, double *Z, + double *chi, double *trK, + double *dxx, double *gxy, double *gxz, double *dyy, double *gyz, double *dzz, + double *Axx, double *Axy, double *Axz, double *Ayy, double *Ayz, double *Azz, + double *Gamx, double *Gamy, double *Gamz, + double *Lap, double *betax, double *betay, double *betaz, + double *dtSfx, double *dtSfy, double *dtSfz, + double *chi_rhs, double *trK_rhs, + double *gxx_rhs, double *gxy_rhs, double *gxz_rhs, double *gyy_rhs, double *gyz_rhs, double *gzz_rhs, + double *Axx_rhs, double *Axy_rhs, double *Axz_rhs, double *Ayy_rhs, double *Ayz_rhs, double *Azz_rhs, + double *Gamx_rhs, double *Gamy_rhs, double *Gamz_rhs, + double *Lap_rhs, double *betax_rhs, double *betay_rhs, double *betaz_rhs, + double *dtSfx_rhs, double *dtSfy_rhs, double *dtSfz_rhs, + double *rho, double *Sx, double *Sy, double *Sz, + double *Sxx, double *Sxy, double *Sxz, double *Syy, double *Syz, double *Szz, + double *Gamxxx, double *Gamxxy, double *Gamxxz, double *Gamxyy, double *Gamxyz, double *Gamxzz, + double *Gamyxx, double *Gamyxy, double *Gamyxz, double *Gamyyy, double *Gamyyz, double *Gamyzz, + double *Gamzxx, double *Gamzxy, double *Gamzxz, double *Gamzyy, double *Gamzyz, double *Gamzzz, + double *Rxx, double *Rxy, double *Rxz, double *Ryy, double *Ryz, double *Rzz, + double *ham_Res, double *movx_Res, double *movy_Res, double *movz_Res, + double *Gmx_Res, double *Gmy_Res, double *Gmz_Res, + int &Symmetry, int &Lev, double &eps, int &co + ) // return gont +{ + double t0 = omp_get_wtime(); + int nx = ex[0], ny = ex[1], nz=ex[2]; + int all = nx*ny*nz; + // printf("nx=%d ny=%d nz=%d all=%d\n", nx, ny, nz, all); + + // temp variable + double gxx[all],gyy[all],gzz[all]; + double chix[all],chiy[all],chiz[all]; + double gxxx[all],gxyx[all],gxzx[all],gyyx[all],gyzx[all],gzzx[all]; + double gxxy[all],gxyy[all],gxzy[all],gyyy[all],gyzy[all],gzzy[all]; + double gxxz[all],gxyz[all],gxzz[all],gyyz[all],gyzz[all],gzzz[all]; + double Lapx[all], Lapy[all], Lapz[all]; + double betaxx[all], betaxy[all], betaxz[all]; + double betayx[all], betayy[all], betayz[all]; + double betazx[all], betazy[all], betazz[all]; + double Gamxx[all],Gamxy[all],Gamxz[all]; + double Gamyx[all],Gamyy[all],Gamyz[all]; + double Gamzx[all],Gamzy[all],Gamzz[all]; + double Kx[all], Ky[all], Kz[all], div_beta[all], S[all]; + double f[all], fxx[all], fxy[all], fxz[all], fyy[all], fyz[all], fzz[all]; + double Gamxa[all], Gamya[all], Gamza[all], alpn1[all], chin1[all]; + double gupxx[all], gupxy[all], gupxz[all]; + double gupyy[all], gupyz[all], gupzz[all]; + double SSS[3] = { 1.0, 1.0, 1.0}; + double AAS[3] = {-1.0, -1.0, 1.0}; + double ASA[3] = {-1.0, 1.0, -1.0}; + double SAA[3] = { 1.0, -1.0, -1.0}; + double ASS[3] = {-1.0, 1.0, 1.0}; + double SAS[3] = { 1.0, -1.0, 1.0}; + double SSA[3] = { 1.0, 1.0, -1.0}; + double dX, dY, dZ, PI; + const double ZEO = 0.0, ONE = 1.0, TWO = 2.0, FOUR = 4.0; + const double EIGHT = 8.0, HALF = 0.5, THR = 3.0; + const double SYM = 1.0, ANTI = -1.0; + const double FF = 0.75, eta = 2.0; + const double F1o3 = 1.0/3.0, F2o3 = 2.0/3.0, F3o2 = 1.5, F1o6 = 1.0/6.0; + const double F16 = 16.0, F8 = 8.0; + #if (GAUGE == 2 || GAUGE == 3 || GAUGE == 4 || GAUGE == 5) + double reta[all]; + /* 使用时:reta[idx],其中 idx = i + nx*(j + ny*k) (Fortran列主序) */ + #endif + PI = acos(-1.0); + dX = X[1] - X[0]; + dY = Y[1] - Y[0]; + dZ = Z[1] - Z[0]; + + #pragma omp parallel + { + int tid = omp_get_thread_num(); // 当前线程号(从 0 开始) + int nthr = omp_get_num_threads(); // 当前并行区里的总线程数 + int local = all / nthr; + int start = tid * local; + int end = (tid == nthr - 1) ? all : start + local; + // 1ms // + for(int i=start;i0){ + for(int _task=tid; _task<16; _task+=nthr){ + switch(_task){ + case 0: kodis(ex,X,Y,Z,chi,chi_rhs,SSS,Symmetry,eps); break; + case 1: kodis(ex,X,Y,Z,trK,trK_rhs,SSS,Symmetry,eps); break; + case 2: kodis(ex,X,Y,Z,dxx,gxx_rhs,SSS,Symmetry,eps); break; + case 3: kodis(ex,X,Y,Z,gxy,gxy_rhs,AAS,Symmetry,eps); break; + case 4: kodis(ex,X,Y,Z,gxz,gxz_rhs,ASA,Symmetry,eps); break; + case 5: kodis(ex,X,Y,Z,dyy,gyy_rhs,SSS,Symmetry,eps); break; + case 6: kodis(ex,X,Y,Z,gyz,gyz_rhs,SAA,Symmetry,eps); break; + case 7: kodis(ex,X,Y,Z,dzz,gzz_rhs,SSS,Symmetry,eps); break; + case 8: + kodis(ex,X,Y,Z,Axx,Axx_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,dtSfz,dtSfz_rhs,SSA,Symmetry,eps); + break; + case 9: + kodis(ex,X,Y,Z,Axy,Axy_rhs,AAS,Symmetry,eps); + kodis(ex,X,Y,Z,dtSfy,dtSfy_rhs,SAS,Symmetry,eps); + break; + case 10: + kodis(ex,X,Y,Z,Axz,Axz_rhs,ASA,Symmetry,eps); + kodis(ex,X,Y,Z,dtSfx,dtSfx_rhs,ASS,Symmetry,eps); + break; + case 11: + kodis(ex,X,Y,Z,Ayy,Ayy_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,betaz,betaz_rhs,SSA,Symmetry,eps); + break; + case 12: + kodis(ex,X,Y,Z,Ayz,Ayz_rhs,SAA,Symmetry,eps); + kodis(ex,X,Y,Z,betay,betay_rhs,SAS,Symmetry,eps); + break; + case 13: + kodis(ex,X,Y,Z,Azz,Azz_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,betax,betax_rhs,ASS,Symmetry,eps); + break; + case 14: + kodis(ex,X,Y,Z,Gamx,Gamx_rhs,ASS,Symmetry,eps); + kodis(ex,X,Y,Z,Lap,Lap_rhs,SSS,Symmetry,eps); + break; + case 15: + kodis(ex,X,Y,Z,Gamy,Gamy_rhs,SAS,Symmetry,eps); + kodis(ex,X,Y,Z,Gamz,Gamz_rhs,SSA,Symmetry,eps); + break; + } + } + } + // 2ms // + if(co==0){ + for (int i=start;i NO_SYMM && fabs(Z[0]) < dZ) kminF = -1; + if (Symmetry > EQ_SYMM && fabs(X[0]) < dX) iminF = -1; + if (Symmetry > EQ_SYMM && fabs(Y[0]) < dY) jminF = -1; + + const double SoA[3] = { SYM1, SYM2, SYM3 }; + + /* fh: (ex1+2)*(ex2+2)*(ex3+2) because ord=2 */ + const size_t nx = (size_t)ex1 + 2; + const size_t ny = (size_t)ex2 + 2; + const size_t nz = (size_t)ex3 + 2; + const size_t fh_size = nx * ny * nz; + + static thread_local double *fh = NULL; + static thread_local size_t cap = 0; + + if (fh_size > cap) { + free(fh); + fh = (double*)aligned_alloc(64, fh_size * sizeof(double)); + cap = fh_size; + } + // double *fh = (double*)malloc(fh_size * sizeof(double)); + if (!fh) return; + + symmetry_bd(2, ex, f, fh, SoA); + + /* 系数:按 Fortran 原式 */ + const double Sdxdx = ONE / (dX * dX); + const double Sdydy = ONE / (dY * dY); + const double Sdzdz = ONE / (dZ * dZ); + + const double Fdxdx = F1o12 / (dX * dX); + const double Fdydy = F1o12 / (dY * dY); + const double Fdzdz = F1o12 / (dZ * dZ); + + const double Sdxdy = F1o4 / (dX * dY); + const double Sdxdz = F1o4 / (dX * dZ); + const double Sdydz = F1o4 / (dY * dZ); + + const double Fdxdy = F1o144 / (dX * dY); + const double Fdxdz = F1o144 / (dX * dZ); + const double Fdydz = F1o144 / (dY * dZ); + + /* 输出清零:fxx,fyy,fzz,fxy,fxz,fyz = 0 */ + const size_t all = (size_t)ex1 * (size_t)ex2 * (size_t)ex3; + + /* + * Fortran: + * do k=1,ex3-1 + * do j=1,ex2-1 + * do i=1,ex1-1 + */ + + for (int k0 = 0; k0 <= ex3 - 2; ++k0) { + const int kF = k0 + 1; + for (int j0 = 0; j0 <= ex2 - 2; ++j0) { + const int jF = j0 + 1; + for (int i0 = 0; i0 <= ex1 - 2; ++i0) { + const int iF = i0 + 1; + const size_t p = idx_ex(i0, j0, k0, ex); + + /* 高阶分支:i±2,j±2,k±2 都在范围内 */ + if ((iF + 2) <= imaxF && (iF - 2) >= iminF && + (jF + 2) <= jmaxF && (jF - 2) >= jminF && + (kF + 2) <= kmaxF && (kF - 2) >= kminF) + { + fxx[p] = Fdxdx * ( + -fh[idx_fh_F_ord2(iF - 2, jF, kF, ex)] + + F16 * fh[idx_fh_F_ord2(iF - 1, jF, kF, ex)] - + F30 * fh[idx_fh_F_ord2(iF, jF, kF, ex)] - + fh[idx_fh_F_ord2(iF + 2, jF, kF, ex)] + + F16 * fh[idx_fh_F_ord2(iF + 1, jF, kF, ex)] + ); + + fyy[p] = Fdydy * ( + -fh[idx_fh_F_ord2(iF, jF - 2, kF, ex)] + + F16 * fh[idx_fh_F_ord2(iF, jF - 1, kF, ex)] - + F30 * fh[idx_fh_F_ord2(iF, jF, kF, ex)] - + fh[idx_fh_F_ord2(iF, jF + 2, kF, ex)] + + F16 * fh[idx_fh_F_ord2(iF, jF + 1, kF, ex)] + ); + + fzz[p] = Fdzdz * ( + -fh[idx_fh_F_ord2(iF, jF, kF - 2, ex)] + + F16 * fh[idx_fh_F_ord2(iF, jF, kF - 1, ex)] - + F30 * fh[idx_fh_F_ord2(iF, jF, kF, ex)] - + fh[idx_fh_F_ord2(iF, jF, kF + 2, ex)] + + F16 * fh[idx_fh_F_ord2(iF, jF, kF + 1, ex)] + ); + + /* fxy 高阶:完全照搬 Fortran 的括号结构 */ + { + const double t_jm2 = + ( fh[idx_fh_F_ord2(iF - 2, jF - 2, kF, ex)] + -F8*fh[idx_fh_F_ord2(iF - 1, jF - 2, kF, ex)] + +F8*fh[idx_fh_F_ord2(iF + 1, jF - 2, kF, ex)] + - fh[idx_fh_F_ord2(iF + 2, jF - 2, kF, ex)] ); + + const double t_jm1 = + ( fh[idx_fh_F_ord2(iF - 2, jF - 1, kF, ex)] + -F8*fh[idx_fh_F_ord2(iF - 1, jF - 1, kF, ex)] + +F8*fh[idx_fh_F_ord2(iF + 1, jF - 1, kF, ex)] + - fh[idx_fh_F_ord2(iF + 2, jF - 1, kF, ex)] ); + + const double t_jp1 = + ( fh[idx_fh_F_ord2(iF - 2, jF + 1, kF, ex)] + -F8*fh[idx_fh_F_ord2(iF - 1, jF + 1, kF, ex)] + +F8*fh[idx_fh_F_ord2(iF + 1, jF + 1, kF, ex)] + - fh[idx_fh_F_ord2(iF + 2, jF + 1, kF, ex)] ); + + const double t_jp2 = + ( fh[idx_fh_F_ord2(iF - 2, jF + 2, kF, ex)] + -F8*fh[idx_fh_F_ord2(iF - 1, jF + 2, kF, ex)] + +F8*fh[idx_fh_F_ord2(iF + 1, jF + 2, kF, ex)] + - fh[idx_fh_F_ord2(iF + 2, jF + 2, kF, ex)] ); + + fxy[p] = Fdxdy * ( t_jm2 - F8 * t_jm1 + F8 * t_jp1 - t_jp2 ); + } + + /* fxz 高阶 */ + { + const double t_km2 = + ( fh[idx_fh_F_ord2(iF - 2, jF, kF - 2, ex)] + -F8*fh[idx_fh_F_ord2(iF - 1, jF, kF - 2, ex)] + +F8*fh[idx_fh_F_ord2(iF + 1, jF, kF - 2, ex)] + - fh[idx_fh_F_ord2(iF + 2, jF, kF - 2, ex)] ); + + const double t_km1 = + ( fh[idx_fh_F_ord2(iF - 2, jF, kF - 1, ex)] + -F8*fh[idx_fh_F_ord2(iF - 1, jF, kF - 1, ex)] + +F8*fh[idx_fh_F_ord2(iF + 1, jF, kF - 1, ex)] + - fh[idx_fh_F_ord2(iF + 2, jF, kF - 1, ex)] ); + + const double t_kp1 = + ( fh[idx_fh_F_ord2(iF - 2, jF, kF + 1, ex)] + -F8*fh[idx_fh_F_ord2(iF - 1, jF, kF + 1, ex)] + +F8*fh[idx_fh_F_ord2(iF + 1, jF, kF + 1, ex)] + - fh[idx_fh_F_ord2(iF + 2, jF, kF + 1, ex)] ); + + const double t_kp2 = + ( fh[idx_fh_F_ord2(iF - 2, jF, kF + 2, ex)] + -F8*fh[idx_fh_F_ord2(iF - 1, jF, kF + 2, ex)] + +F8*fh[idx_fh_F_ord2(iF + 1, jF, kF + 2, ex)] + - fh[idx_fh_F_ord2(iF + 2, jF, kF + 2, ex)] ); + + fxz[p] = Fdxdz * ( t_km2 - F8 * t_km1 + F8 * t_kp1 - t_kp2 ); + } + + /* fyz 高阶 */ + { + const double t_km2 = + ( fh[idx_fh_F_ord2(iF, jF - 2, kF - 2, ex)] + -F8*fh[idx_fh_F_ord2(iF, jF - 1, kF - 2, ex)] + +F8*fh[idx_fh_F_ord2(iF, jF + 1, kF - 2, ex)] + - fh[idx_fh_F_ord2(iF, jF + 2, kF - 2, ex)] ); + + const double t_km1 = + ( fh[idx_fh_F_ord2(iF, jF - 2, kF - 1, ex)] + -F8*fh[idx_fh_F_ord2(iF, jF - 1, kF - 1, ex)] + +F8*fh[idx_fh_F_ord2(iF, jF + 1, kF - 1, ex)] + - fh[idx_fh_F_ord2(iF, jF + 2, kF - 1, ex)] ); + + const double t_kp1 = + ( fh[idx_fh_F_ord2(iF, jF - 2, kF + 1, ex)] + -F8*fh[idx_fh_F_ord2(iF, jF - 1, kF + 1, ex)] + +F8*fh[idx_fh_F_ord2(iF, jF + 1, kF + 1, ex)] + - fh[idx_fh_F_ord2(iF, jF + 2, kF + 1, ex)] ); + + const double t_kp2 = + ( fh[idx_fh_F_ord2(iF, jF - 2, kF + 2, ex)] + -F8*fh[idx_fh_F_ord2(iF, jF - 1, kF + 2, ex)] + +F8*fh[idx_fh_F_ord2(iF, jF + 1, kF + 2, ex)] + - fh[idx_fh_F_ord2(iF, jF + 2, kF + 2, ex)] ); + + fyz[p] = Fdydz * ( t_km2 - F8 * t_km1 + F8 * t_kp1 - t_kp2 ); + } + } + /* 二阶分支:i±1,j±1,k±1 在范围内 */ + else if ((iF + 1) <= imaxF && (iF - 1) >= iminF && + (jF + 1) <= jmaxF && (jF - 1) >= jminF && + (kF + 1) <= kmaxF && (kF - 1) >= kminF) + { + fxx[p] = Sdxdx * ( + fh[idx_fh_F_ord2(iF - 1, jF, kF, ex)] - + TWO * fh[idx_fh_F_ord2(iF, jF, kF, ex)] + + fh[idx_fh_F_ord2(iF + 1, jF, kF, ex)] + ); + + fyy[p] = Sdydy * ( + fh[idx_fh_F_ord2(iF, jF - 1, kF, ex)] - + TWO * fh[idx_fh_F_ord2(iF, jF, kF, ex)] + + fh[idx_fh_F_ord2(iF, jF + 1, kF, ex)] + ); + + fzz[p] = Sdzdz * ( + fh[idx_fh_F_ord2(iF, jF, kF - 1, ex)] - + TWO * fh[idx_fh_F_ord2(iF, jF, kF, ex)] + + fh[idx_fh_F_ord2(iF, jF, kF + 1, ex)] + ); + + fxy[p] = Sdxdy * ( + fh[idx_fh_F_ord2(iF - 1, jF - 1, kF, ex)] - + fh[idx_fh_F_ord2(iF + 1, jF - 1, kF, ex)] - + fh[idx_fh_F_ord2(iF - 1, jF + 1, kF, ex)] + + fh[idx_fh_F_ord2(iF + 1, jF + 1, kF, ex)] + ); + + fxz[p] = Sdxdz * ( + fh[idx_fh_F_ord2(iF - 1, jF, kF - 1, ex)] - + fh[idx_fh_F_ord2(iF + 1, jF, kF - 1, ex)] - + fh[idx_fh_F_ord2(iF - 1, jF, kF + 1, ex)] + + fh[idx_fh_F_ord2(iF + 1, jF, kF + 1, ex)] + ); + + fyz[p] = Sdydz * ( + fh[idx_fh_F_ord2(iF, jF - 1, kF - 1, ex)] - + fh[idx_fh_F_ord2(iF, jF + 1, kF - 1, ex)] - + fh[idx_fh_F_ord2(iF, jF - 1, kF + 1, ex)] + + fh[idx_fh_F_ord2(iF, jF + 1, kF + 1, ex)] + ); + }else{ + fxx[p] = 0.0; + fyy[p] = 0.0; + fzz[p] = 0.0; + fxy[p] = 0.0; + fxz[p] = 0.0; + fyz[p] = 0.0; + } + } + } + } + + // free(fh); +} \ No newline at end of file diff --git a/AMSS_NCKU_source/fderivs_c.C b/AMSS_NCKU_source/fderivs_c.C new file mode 100644 index 0000000..47c9c6c --- /dev/null +++ b/AMSS_NCKU_source/fderivs_c.C @@ -0,0 +1,145 @@ +#include "tool.h" + +/* + * C 版 fderivs + * + * Fortran: + * subroutine fderivs(ex,f,fx,fy,fz,X,Y,Z,SYM1,SYM2,SYM3,symmetry,onoff) + * + * 约定: + * f, fx, fy, fz: ex1*ex2*ex3,按 idx_ex 布局 + * X: ex1, Y: ex2, Z: ex3 + */ +void fderivs(const int ex[3], + const double *f, + double *fx, double *fy, double *fz, + const double *X, const double *Y, const double *Z, + double SYM1, double SYM2, double SYM3, + int Symmetry, int onoff) +{ + (void)onoff; // Fortran 里没用到 + + const double ZEO = 0.0, ONE = 1.0; + const double TWO = 2.0, EIT = 8.0; + const double F12 = 12.0; + + const int NO_SYMM = 0, EQ_SYMM = 1; // OCTANT=2 在本子程序里不直接用 + + const int ex1 = ex[0], ex2 = ex[1], ex3 = ex[2]; + + // dX = X(2)-X(1) -> C: X[1]-X[0] + const double dX = X[1] - X[0]; + const double dY = Y[1] - Y[0]; + const double dZ = Z[1] - Z[0]; + + // Fortran 1-based bounds + const int imaxF = ex1; + const int jmaxF = ex2; + const int kmaxF = ex3; + + int iminF = 1, jminF = 1, kminF = 1; + if (Symmetry > NO_SYMM && fabs(Z[0]) < dZ) kminF = -1; + if (Symmetry > EQ_SYMM && fabs(X[0]) < dX) iminF = -1; + if (Symmetry > EQ_SYMM && fabs(Y[0]) < dY) jminF = -1; + + // SoA(1:3) = SYM1,SYM2,SYM3 + const double SoA[3] = { SYM1, SYM2, SYM3 }; + + // fh: (ex1+2)*(ex2+2)*(ex3+2) because ord=2 + const size_t nx = (size_t)ex1 + 2; + const size_t ny = (size_t)ex2 + 2; + const size_t nz = (size_t)ex3 + 2; + const size_t fh_size = nx * ny * nz; + static thread_local double *fh = NULL; + static thread_local size_t cap = 0; + + if (fh_size > cap) { + free(fh); + fh = (double*)aligned_alloc(64, fh_size * sizeof(double)); + cap = fh_size; + } + // double *fh = (double*)malloc(fh_size * sizeof(double)); + if (!fh) return; + + // call symmetry_bd(2,ex,f,fh,SoA) + symmetry_bd(2, ex, f, fh, SoA); + + const double d12dx = ONE / F12 / dX; + const double d12dy = ONE / F12 / dY; + const double d12dz = ONE / F12 / dZ; + + const double d2dx = ONE / TWO / dX; + const double d2dy = ONE / TWO / dY; + const double d2dz = ONE / TWO / dZ; + + // fx = fy = fz = 0 + const size_t all = (size_t)ex1 * (size_t)ex2 * (size_t)ex3; + + /* + * Fortran loops: + * do k=1,ex3-1 + * do j=1,ex2-1 + * do i=1,ex1-1 + * + * C: k0=0..ex3-2, j0=0..ex2-2, i0=0..ex1-2 + */ + for (int k0 = 0; k0 <= ex3 - 2; ++k0) { + const int kF = k0 + 1; + for (int j0 = 0; j0 <= ex2 - 2; ++j0) { + const int jF = j0 + 1; + for (int i0 = 0; i0 <= ex1 - 2; ++i0) { + const int iF = i0 + 1; + const size_t p = idx_ex(i0, j0, k0, ex); + + // if(i+2 <= imax .and. i-2 >= imin ... ) (全是 Fortran 索引) + if ((iF + 2) <= imaxF && (iF - 2) >= iminF && + (jF + 2) <= jmaxF && (jF - 2) >= jminF && + (kF + 2) <= kmaxF && (kF - 2) >= kminF) + { + fx[p] = d12dx * ( + fh[idx_fh_F_ord2(iF - 2, jF, kF, ex)] - + EIT * fh[idx_fh_F_ord2(iF - 1, jF, kF, ex)] + + EIT * fh[idx_fh_F_ord2(iF + 1, jF, kF, ex)] - + fh[idx_fh_F_ord2(iF + 2, jF, kF, ex)] + ); + + fy[p] = d12dy * ( + fh[idx_fh_F_ord2(iF, jF - 2, kF, ex)] - + EIT * fh[idx_fh_F_ord2(iF, jF - 1, kF, ex)] + + EIT * fh[idx_fh_F_ord2(iF, jF + 1, kF, ex)] - + fh[idx_fh_F_ord2(iF, jF + 2, kF, ex)] + ); + + fz[p] = d12dz * ( + fh[idx_fh_F_ord2(iF, jF, kF - 2, ex)] - + EIT * fh[idx_fh_F_ord2(iF, jF, kF - 1, ex)] + + EIT * fh[idx_fh_F_ord2(iF, jF, kF + 1, ex)] - + fh[idx_fh_F_ord2(iF, jF, kF + 2, ex)] + ); + } + // elseif(i+1 <= imax .and. i-1 >= imin ...) + else if ((iF + 1) <= imaxF && (iF - 1) >= iminF && + (jF + 1) <= jmaxF && (jF - 1) >= jminF && + (kF + 1) <= kmaxF && (kF - 1) >= kminF) + { + fx[p] = d2dx * ( + -fh[idx_fh_F_ord2(iF - 1, jF, kF, ex)] + + fh[idx_fh_F_ord2(iF + 1, jF, kF, ex)] + ); + + fy[p] = d2dy * ( + -fh[idx_fh_F_ord2(iF, jF - 1, kF, ex)] + + fh[idx_fh_F_ord2(iF, jF + 1, kF, ex)] + ); + + fz[p] = d2dz * ( + -fh[idx_fh_F_ord2(iF, jF, kF - 1, ex)] + + fh[idx_fh_F_ord2(iF, jF, kF + 1, ex)] + ); + } + } + } + } + + // free(fh); +} \ No newline at end of file diff --git a/AMSS_NCKU_source/kodiss_c.C b/AMSS_NCKU_source/kodiss_c.C new file mode 100644 index 0000000..2a04abe --- /dev/null +++ b/AMSS_NCKU_source/kodiss_c.C @@ -0,0 +1,109 @@ +#include "tool.h" + +/* + * C 版 kodis + * + * Fortran signature: + * subroutine kodis(ex,X,Y,Z,f,f_rhs,SoA,Symmetry,eps) + * + * 约定: + * X: ex1, Y: ex2, Z: ex3 + * f, f_rhs: ex1*ex2*ex3 按 idx_ex 布局 + * SoA[3] + * eps: double + */ +void kodis(const int ex[3], + const double *X, const double *Y, const double *Z, + const double *f, double *f_rhs, + const double SoA[3], + int Symmetry, double eps) +{ + const double ONE = 1.0, SIX = 6.0, FIT = 15.0, TWT = 20.0; + const double cof = 64.0; // 2^6 + const int NO_SYMM = 0, OCTANT = 2; + + const int ex1 = ex[0], ex2 = ex[1], ex3 = ex[2]; + + // Fortran: dX = X(2)-X(1) -> C: X[1]-X[0] + const double dX = X[1] - X[0]; + const double dY = Y[1] - Y[0]; + const double dZ = Z[1] - Z[0]; + (void)ONE; // ONE 在原 Fortran 里只是参数,这里不一定用得上 + + // Fortran: imax=ex(1) 等是 1-based 上界 + const int imaxF = ex1; + const int jmaxF = ex2; + const int kmaxF = ex3; + + // Fortran: imin=jmin=kmin=1,某些对称情况变 -2 + int iminF = 1, jminF = 1, kminF = 1; + + if (Symmetry > NO_SYMM && fabs(Z[0]) < dZ) kminF = -2; + if (Symmetry == OCTANT && fabs(X[0]) < dX) iminF = -2; + if (Symmetry == OCTANT && fabs(Y[0]) < dY) jminF = -2; + + // 分配 fh:大小 (ex1+3)*(ex2+3)*(ex3+3),对应 ord=3 + const size_t nx = (size_t)ex1 + 3; + const size_t ny = (size_t)ex2 + 3; + const size_t nz = (size_t)ex3 + 3; + const size_t fh_size = nx * ny * nz; + + double *fh = (double*)malloc(fh_size * sizeof(double)); + if (!fh) return; + + // Fortran: call symmetry_bd(3,ex,f,fh,SoA) + symmetry_bd(3, ex, f, fh, SoA); + + /* + * Fortran loops: + * do k=1,ex3 + * do j=1,ex2 + * do i=1,ex1 + * + * C: k0=0..ex3-1, j0=0..ex2-1, i0=0..ex1-1 + * 并定义 Fortran index: iF=i0+1, ... + */ + for (int k0 = 0; k0 < ex3; ++k0) { + const int kF = k0 + 1; + for (int j0 = 0; j0 < ex2; ++j0) { + const int jF = j0 + 1; + for (int i0 = 0; i0 < ex1; ++i0) { + const int iF = i0 + 1; + + // Fortran if 条件: + // i-3 >= imin .and. i+3 <= imax 等(都是 Fortran 索引) + if ((iF - 3) >= iminF && (iF + 3) <= imaxF && + (jF - 3) >= jminF && (jF + 3) <= jmaxF && + (kF - 3) >= kminF && (kF + 3) <= kmaxF) + { + const size_t p = idx_ex(i0, j0, k0, ex); + + // 三个方向各一份同型的 7 点组合(实际上是对称的 6th-order dissipation/filter 核) + const double Dx_term = + ( (fh[idx_fh_F(iF - 3, jF, kF, ex)] + fh[idx_fh_F(iF + 3, jF, kF, ex)]) - + SIX * (fh[idx_fh_F(iF - 2, jF, kF, ex)] + fh[idx_fh_F(iF + 2, jF, kF, ex)]) + + FIT * (fh[idx_fh_F(iF - 1, jF, kF, ex)] + fh[idx_fh_F(iF + 1, jF, kF, ex)]) - + TWT * fh[idx_fh_F(iF , jF, kF, ex)] ) / dX; + + const double Dy_term = + ( (fh[idx_fh_F(iF, jF - 3, kF, ex)] + fh[idx_fh_F(iF, jF + 3, kF, ex)]) - + SIX * (fh[idx_fh_F(iF, jF - 2, kF, ex)] + fh[idx_fh_F(iF, jF + 2, kF, ex)]) + + FIT * (fh[idx_fh_F(iF, jF - 1, kF, ex)] + fh[idx_fh_F(iF, jF + 1, kF, ex)]) - + TWT * fh[idx_fh_F(iF, jF , kF, ex)] ) / dY; + + const double Dz_term = + ( (fh[idx_fh_F(iF, jF, kF - 3, ex)] + fh[idx_fh_F(iF, jF, kF + 3, ex)]) - + SIX * (fh[idx_fh_F(iF, jF, kF - 2, ex)] + fh[idx_fh_F(iF, jF, kF + 2, ex)]) + + FIT * (fh[idx_fh_F(iF, jF, kF - 1, ex)] + fh[idx_fh_F(iF, jF, kF + 1, ex)]) - + TWT * fh[idx_fh_F(iF, jF, kF , ex)] ) / dZ; + + // Fortran: + // f_rhs(i,j,k) = f_rhs(i,j,k) + eps/cof*(Dx_term + Dy_term + Dz_term) + f_rhs[p] += (eps / cof) * (Dx_term + Dy_term + Dz_term); + } + } + } + } + + free(fh); +} \ No newline at end of file diff --git a/AMSS_NCKU_source/lopsided_c.C b/AMSS_NCKU_source/lopsided_c.C new file mode 100644 index 0000000..fe2c6e4 --- /dev/null +++ b/AMSS_NCKU_source/lopsided_c.C @@ -0,0 +1,255 @@ +#include "tool.h" +/* + * 你需要提供 symmetry_bd 的 C 版本(或 Fortran 绑到 C 的接口)。 + * Fortran: call symmetry_bd(3,ex,f,fh,SoA) + * + * 约定: + * nghost = 3 + * ex[3] = {ex1,ex2,ex3} + * f = 原始网格 (ex1*ex2*ex3) + * fh = 扩展网格 ((ex1+3)*(ex2+3)*(ex3+3)),对应 Fortran 的 (-2:ex1, ...) + * SoA[3] = 输入参数 + */ +void lopsided(const int ex[3], + const double *X, const double *Y, const double *Z, + const double *f, double *f_rhs, + const double *Sfx, const double *Sfy, const double *Sfz, + int Symmetry, const double SoA[3]) +{ + const double ZEO = 0.0, ONE = 1.0, F3 = 3.0; + const double TWO = 2.0, F6 = 6.0, F18 = 18.0; + const double F12 = 12.0, F10 = 10.0, EIT = 8.0; + + const int NO_SYMM = 0, EQ_SYMM = 1, OCTANT = 2; + (void)OCTANT; // 这里和 Fortran 一样只是定义了不用也没关系 + + const int ex1 = ex[0], ex2 = ex[1], ex3 = ex[2]; + + // 对应 Fortran: dX = X(2)-X(1) (Fortran 1-based) + // C: X[1]-X[0] + const double dX = X[1] - X[0]; + const double dY = Y[1] - Y[0]; + const double dZ = Z[1] - Z[0]; + + const double d12dx = ONE / F12 / dX; + const double d12dy = ONE / F12 / dY; + const double d12dz = ONE / F12 / dZ; + + // Fortran 里算了 d2dx/d2dy/d2dz 但本 subroutine 里没用到(保持一致也算出来) + const double d2dx = ONE / TWO / dX; + const double d2dy = ONE / TWO / dY; + const double d2dz = ONE / TWO / dZ; + (void)d2dx; (void)d2dy; (void)d2dz; + + // Fortran: + // imax = ex(1); jmax = ex(2); kmax = ex(3) + const int imaxF = ex1; + const int jmaxF = ex2; + const int kmaxF = ex3; + + // Fortran: + // imin=jmin=kmin=1; 若满足对称条件则设为 -2 + int iminF = 1, jminF = 1, kminF = 1; + if (Symmetry > NO_SYMM && fabs(Z[0]) < dZ) kminF = -2; + if (Symmetry > EQ_SYMM && fabs(X[0]) < dX) iminF = -2; + if (Symmetry > EQ_SYMM && fabs(Y[0]) < dY) jminF = -2; + + // 分配 fh:大小 (ex1+3)*(ex2+3)*(ex3+3) + const size_t nx = (size_t)ex1 + 3; + const size_t ny = (size_t)ex2 + 3; + const size_t nz = (size_t)ex3 + 3; + const size_t fh_size = nx * ny * nz; + + double *fh = (double*)malloc(fh_size * sizeof(double)); + if (!fh) return; // 内存不足:直接返回(你也可以改成 abort/报错) + + // Fortran: call symmetry_bd(3,ex,f,fh,SoA) + symmetry_bd(3, ex, f, fh, SoA); + + /* + * Fortran 主循环: + * do k=1,ex(3)-1 + * do j=1,ex(2)-1 + * do i=1,ex(1)-1 + * + * 转成 C 0-based: + * k0 = 0..ex3-2, j0 = 0..ex2-2, i0 = 0..ex1-2 + * + * 并且 Fortran 里的 i/j/k 在 fh 访问时,仍然是 Fortran 索引值: + * iF=i0+1, jF=j0+1, kF=k0+1 + */ + for (int k0 = 0; k0 <= ex3 - 2; ++k0) { + const int kF = k0 + 1; + for (int j0 = 0; j0 <= ex2 - 2; ++j0) { + const int jF = j0 + 1; + for (int i0 = 0; i0 <= ex1 - 2; ++i0) { + const int iF = i0 + 1; + + const size_t p = idx_ex(i0, j0, k0, ex); + + // ---------------- x direction ---------------- + const double sfx = Sfx[p]; + if (sfx > ZEO) { + // Fortran: if(i+3 <= imax) + // iF+3 <= ex1 <=> i0+4 <= ex1 <=> i0 <= ex1-4 + if (i0 <= ex1 - 4) { + f_rhs[p] += sfx * d12dx * + (-F3 * fh[idx_fh_F(iF - 1, jF, kF, ex)] + -F10 * fh[idx_fh_F(iF , jF, kF, ex)] + +F18 * fh[idx_fh_F(iF + 1, jF, kF, ex)] + -F6 * fh[idx_fh_F(iF + 2, jF, kF, ex)] + + fh[idx_fh_F(iF + 3, jF, kF, ex)]); + } + // elseif(i+2 <= imax) <=> i0 <= ex1-3 + else if (i0 <= ex1 - 3) { + f_rhs[p] += sfx * d12dx * + ( fh[idx_fh_F(iF - 2, jF, kF, ex)] + -EIT * fh[idx_fh_F(iF - 1, jF, kF, ex)] + +EIT * fh[idx_fh_F(iF + 1, jF, kF, ex)] + - fh[idx_fh_F(iF + 2, jF, kF, ex)]); + } + // elseif(i+1 <= imax) <=> i0 <= ex1-2(循环里总成立) + else if (i0 <= ex1 - 2) { + f_rhs[p] -= sfx * d12dx * + (-F3 * fh[idx_fh_F(iF + 1, jF, kF, ex)] + -F10 * fh[idx_fh_F(iF , jF, kF, ex)] + +F18 * fh[idx_fh_F(iF - 1, jF, kF, ex)] + -F6 * fh[idx_fh_F(iF - 2, jF, kF, ex)] + + fh[idx_fh_F(iF - 3, jF, kF, ex)]); + } + } else if (sfx < ZEO) { + // Fortran: if(i-3 >= imin) + // (iF-3) >= iminF <=> (i0-2) >= iminF + if ((i0 - 2) >= iminF) { + f_rhs[p] -= sfx * d12dx * + (-F3 * fh[idx_fh_F(iF + 1, jF, kF, ex)] + -F10 * fh[idx_fh_F(iF , jF, kF, ex)] + +F18 * fh[idx_fh_F(iF - 1, jF, kF, ex)] + -F6 * fh[idx_fh_F(iF - 2, jF, kF, ex)] + + fh[idx_fh_F(iF - 3, jF, kF, ex)]); + } + // elseif(i-2 >= imin) <=> (i0-1) >= iminF + else if ((i0 - 1) >= iminF) { + f_rhs[p] += sfx * d12dx * + ( fh[idx_fh_F(iF - 2, jF, kF, ex)] + -EIT * fh[idx_fh_F(iF - 1, jF, kF, ex)] + +EIT * fh[idx_fh_F(iF + 1, jF, kF, ex)] + - fh[idx_fh_F(iF + 2, jF, kF, ex)]); + } + // elseif(i-1 >= imin) <=> i0 >= iminF + else if (i0 >= iminF) { + f_rhs[p] += sfx * d12dx * + (-F3 * fh[idx_fh_F(iF - 1, jF, kF, ex)] + -F10 * fh[idx_fh_F(iF , jF, kF, ex)] + +F18 * fh[idx_fh_F(iF + 1, jF, kF, ex)] + -F6 * fh[idx_fh_F(iF + 2, jF, kF, ex)] + + fh[idx_fh_F(iF + 3, jF, kF, ex)]); + } + } + + // ---------------- y direction ---------------- + const double sfy = Sfy[p]; + if (sfy > ZEO) { + // jF+3 <= ex2 <=> j0+4 <= ex2 <=> j0 <= ex2-4 + if (j0 <= ex2 - 4) { + f_rhs[p] += sfy * d12dy * + (-F3 * fh[idx_fh_F(iF, jF - 1, kF, ex)] + -F10 * fh[idx_fh_F(iF, jF , kF, ex)] + +F18 * fh[idx_fh_F(iF, jF + 1, kF, ex)] + -F6 * fh[idx_fh_F(iF, jF + 2, kF, ex)] + + fh[idx_fh_F(iF, jF + 3, kF, ex)]); + } else if (j0 <= ex2 - 3) { + f_rhs[p] += sfy * d12dy * + ( fh[idx_fh_F(iF, jF - 2, kF, ex)] + -EIT * fh[idx_fh_F(iF, jF - 1, kF, ex)] + +EIT * fh[idx_fh_F(iF, jF + 1, kF, ex)] + - fh[idx_fh_F(iF, jF + 2, kF, ex)]); + } else if (j0 <= ex2 - 2) { + f_rhs[p] -= sfy * d12dy * + (-F3 * fh[idx_fh_F(iF, jF + 1, kF, ex)] + -F10 * fh[idx_fh_F(iF, jF , kF, ex)] + +F18 * fh[idx_fh_F(iF, jF - 1, kF, ex)] + -F6 * fh[idx_fh_F(iF, jF - 2, kF, ex)] + + fh[idx_fh_F(iF, jF - 3, kF, ex)]); + } + } else if (sfy < ZEO) { + if ((j0 - 2) >= jminF) { + f_rhs[p] -= sfy * d12dy * + (-F3 * fh[idx_fh_F(iF, jF + 1, kF, ex)] + -F10 * fh[idx_fh_F(iF, jF , kF, ex)] + +F18 * fh[idx_fh_F(iF, jF - 1, kF, ex)] + -F6 * fh[idx_fh_F(iF, jF - 2, kF, ex)] + + fh[idx_fh_F(iF, jF - 3, kF, ex)]); + } else if ((j0 - 1) >= jminF) { + f_rhs[p] += sfy * d12dy * + ( fh[idx_fh_F(iF, jF - 2, kF, ex)] + -EIT * fh[idx_fh_F(iF, jF - 1, kF, ex)] + +EIT * fh[idx_fh_F(iF, jF + 1, kF, ex)] + - fh[idx_fh_F(iF, jF + 2, kF, ex)]); + } else if (j0 >= jminF) { + f_rhs[p] += sfy * d12dy * + (-F3 * fh[idx_fh_F(iF, jF - 1, kF, ex)] + -F10 * fh[idx_fh_F(iF, jF , kF, ex)] + +F18 * fh[idx_fh_F(iF, jF + 1, kF, ex)] + -F6 * fh[idx_fh_F(iF, jF + 2, kF, ex)] + + fh[idx_fh_F(iF, jF + 3, kF, ex)]); + } + } + + // ---------------- z direction ---------------- + const double sfz = Sfz[p]; + if (sfz > ZEO) { + if (k0 <= ex3 - 4) { + f_rhs[p] += sfz * d12dz * + (-F3 * fh[idx_fh_F(iF, jF, kF - 1, ex)] + -F10 * fh[idx_fh_F(iF, jF, kF , ex)] + +F18 * fh[idx_fh_F(iF, jF, kF + 1, ex)] + -F6 * fh[idx_fh_F(iF, jF, kF + 2, ex)] + + fh[idx_fh_F(iF, jF, kF + 3, ex)]); + } else if (k0 <= ex3 - 3) { + f_rhs[p] += sfz * d12dz * + ( fh[idx_fh_F(iF, jF, kF - 2, ex)] + -EIT * fh[idx_fh_F(iF, jF, kF - 1, ex)] + +EIT * fh[idx_fh_F(iF, jF, kF + 1, ex)] + - fh[idx_fh_F(iF, jF, kF + 2, ex)]); + } else if (k0 <= ex3 - 2) { + f_rhs[p] -= sfz * d12dz * + (-F3 * fh[idx_fh_F(iF, jF, kF + 1, ex)] + -F10 * fh[idx_fh_F(iF, jF, kF , ex)] + +F18 * fh[idx_fh_F(iF, jF, kF - 1, ex)] + -F6 * fh[idx_fh_F(iF, jF, kF - 2, ex)] + + fh[idx_fh_F(iF, jF, kF - 3, ex)]); + } + } else if (sfz < ZEO) { + if ((k0 - 2) >= kminF) { + f_rhs[p] -= sfz * d12dz * + (-F3 * fh[idx_fh_F(iF, jF, kF + 1, ex)] + -F10 * fh[idx_fh_F(iF, jF, kF , ex)] + +F18 * fh[idx_fh_F(iF, jF, kF - 1, ex)] + -F6 * fh[idx_fh_F(iF, jF, kF - 2, ex)] + + fh[idx_fh_F(iF, jF, kF - 3, ex)]); + } else if ((k0 - 1) >= kminF) { + f_rhs[p] += sfz * d12dz * + ( fh[idx_fh_F(iF, jF, kF - 2, ex)] + -EIT * fh[idx_fh_F(iF, jF, kF - 1, ex)] + +EIT * fh[idx_fh_F(iF, jF, kF + 1, ex)] + - fh[idx_fh_F(iF, jF, kF + 2, ex)]); + } else if (k0 >= kminF) { + f_rhs[p] += sfz * d12dz * + (-F3 * fh[idx_fh_F(iF, jF, kF - 1, ex)] + -F10 * fh[idx_fh_F(iF, jF, kF , ex)] + +F18 * fh[idx_fh_F(iF, jF, kF + 1, ex)] + -F6 * fh[idx_fh_F(iF, jF, kF + 2, ex)] + + fh[idx_fh_F(iF, jF, kF + 3, ex)]); + } + } + } + } + } + free(fh); +} + + + + + diff --git a/AMSS_NCKU_source/makefile b/AMSS_NCKU_source/makefile index c5750b8..c6d465f 100644 --- a/AMSS_NCKU_source/makefile +++ b/AMSS_NCKU_source/makefile @@ -37,6 +37,22 @@ endif .cu.o: $(Cu) $(CUDA_APP_FLAGS) -c $< -o $@ $(CUDA_LIB_PATH) +# C rewrite of BSSN RHS kernel and helpers +bssn_rhs_c.o: bssn_rhs_c.C + ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< $(filein) -o $@ + +fderivs_c.o: fderivs_c.C + ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< $(filein) -o $@ + +fdderivs_c.o: fdderivs_c.C + ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< $(filein) -o $@ + +kodiss_c.o: kodiss_c.C + ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< $(filein) -o $@ + +lopsided_c.o: lopsided_c.C + ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< $(filein) -o $@ + ## TwoPunctureABE uses fixed optimal flags, independent of CXXAPPFLAGS (which may be PGO-instrumented) TP_OPTFLAGS = -O3 -xHost -fp-model fast=2 -fma -ipo -Dfortran3 -Dnewc -I${MKLROOT}/include @@ -47,6 +63,10 @@ TwoPunctureABE.o: TwoPunctureABE.C ${CXX} $(TP_OPTFLAGS) -qopenmp -c $< -o $@ # Input files + +# C rewrite files +CFILES = bssn_rhs_c.o fderivs_c.o fdderivs_c.o kodiss_c.o lopsided_c.o + C++FILES = ABE.o Ansorg.o Block.o misc.o monitor.o Parallel.o MPatch.o var.o\ cgh.o bssn_class.o surface_integral.o ShellPatch.o\ bssnEScalar_class.o perf.o Z4c_class.o NullShellPatch.o\ @@ -64,7 +84,7 @@ C++FILES_GPU = ABE.o Ansorg.o Block.o misc.o monitor.o Parallel.o MPatch.o var.o F90FILES = enforce_algebra.o fmisc.o initial_puncture.o prolongrestrict.o\ prolongrestrict_cell.o prolongrestrict_vertex.o\ - rungekutta4_rout.o bssn_rhs.o diff_new.o kodiss.o kodiss_sh.o\ + rungekutta4_rout.o diff_new.o kodiss.o kodiss_sh.o\ lopsidediff.o sommerfeld_rout.o getnp4.o diff_new_sh.o\ shellfunctions.o bssn_rhs_ss.o Set_Rho_ADM.o\ getnp4EScalar.o bssnEScalar_rhs.o bssn_constraint.o ricci_gamma.o\ @@ -87,7 +107,7 @@ TwoPunctureFILES = TwoPunctureABE.o TwoPunctures.o CUDAFILES = bssn_gpu.o bssn_gpu_rhs_ss.o # file dependences -$(C++FILES) $(C++FILESGPU) $(F90FILES) $(AHFDOBJS) $(CUDAFILES): macrodef.fh +$(C++FILES) $(C++FILES_GPU) $(F90FILES) $(CFILES) $(AHFDOBJS) $(CUDAFILES): macrodef.fh $(C++FILES): Block.h enforce_algebra.h fmisc.h initial_puncture.h macrodef.h\ misc.h monitor.h MyList.h Parallel.h MPatch.h prolongrestrict.h\ @@ -110,7 +130,7 @@ $(C++FILES_GPU): Block.h enforce_algebra.h fmisc.h initial_puncture.h macrodef.h $(AHFDOBJS): cctk.h cctk_Config.h cctk_Types.h cctk_Constants.h myglobal.h -$(C++FILES) $(C++FILES_GPU) $(AHFDOBJS) $(CUDAFILES): macrodef.h +$(C++FILES) $(C++FILES_GPU) $(CFILES) $(AHFDOBJS) $(CUDAFILES): macrodef.h TwoPunctureFILES: TwoPunctures.h @@ -119,11 +139,11 @@ $(CUDAFILES): bssn_gpu.h gpu_mem.h gpu_rhsSS_mem.h misc.o : zbesh.o # projects -ABE: $(C++FILES) $(F90FILES) $(F77FILES) $(AHFDOBJS) - $(CLINKER) $(CXXAPPFLAGS) -o $@ $(C++FILES) $(F90FILES) $(F77FILES) $(AHFDOBJS) $(LDLIBS) +ABE: $(C++FILES) $(CFILES) $(F90FILES) $(F77FILES) $(AHFDOBJS) + $(CLINKER) $(CXXAPPFLAGS) -o $@ $(C++FILES) $(CFILES) $(F90FILES) $(F77FILES) $(AHFDOBJS) $(LDLIBS) -ABEGPU: $(C++FILES_GPU) $(F90FILES) $(F77FILES) $(AHFDOBJS) $(CUDAFILES) - $(CLINKER) $(CXXAPPFLAGS) -o $@ $(C++FILES_GPU) $(F90FILES) $(F77FILES) $(AHFDOBJS) $(CUDAFILES) $(LDLIBS) +ABEGPU: $(C++FILES_GPU) $(CFILES) $(F90FILES) $(F77FILES) $(AHFDOBJS) $(CUDAFILES) + $(CLINKER) $(CXXAPPFLAGS) -o $@ $(C++FILES_GPU) $(CFILES) $(F90FILES) $(F77FILES) $(AHFDOBJS) $(CUDAFILES) $(LDLIBS) TwoPunctureABE: $(TwoPunctureFILES) $(CLINKER) $(TP_OPTFLAGS) -qopenmp -o $@ $(TwoPunctureFILES) $(LDLIBS) diff --git a/AMSS_NCKU_source/makefile.inc b/AMSS_NCKU_source/makefile.inc index db28baf..17dcbd2 100755 --- a/AMSS_NCKU_source/makefile.inc +++ b/AMSS_NCKU_source/makefile.inc @@ -8,7 +8,7 @@ filein = -I/usr/include/ -I${MKLROOT}/include ## Using sequential MKL (OpenMP disabled for better single-threaded performance) ## Added -lifcore for Intel Fortran runtime and -limf for Intel math library -LDLIBS = -L${MKLROOT}/lib -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lifcore -limf -lpthread -lm -ldl +LDLIBS = -L${MKLROOT}/lib -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lifcore -limf -lpthread -lm -ldl -liomp5 ## PGO build mode switch (ABE only; TwoPunctureABE always uses opt flags) ## opt : (default) maximum performance with PGO profile-guided optimization diff --git a/AMSS_NCKU_source/share_func.h b/AMSS_NCKU_source/share_func.h new file mode 100644 index 0000000..f504a07 --- /dev/null +++ b/AMSS_NCKU_source/share_func.h @@ -0,0 +1,147 @@ +#ifndef SHARE_FUNC_H +#define SHARE_FUNC_H + +#include +#include +#include +#include +#include +/* 主网格:0-based -> 1D */ +static inline size_t idx_ex(int i0, int j0, int k0, const int ex[3]) { + const int ex1 = ex[0], ex2 = ex[1]; + return (size_t)i0 + (size_t)j0 * (size_t)ex1 + (size_t)k0 * (size_t)ex1 * (size_t)ex2; +} + +/* + * fh 对应 Fortran: fh(-1:ex1, -1:ex2, -1:ex3) + * ord=2 => shift=1 + * iF/jF/kF 为 Fortran 索引(可为 -1,0,1..ex) + */ +static inline size_t idx_fh_F_ord2(int iF, int jF, int kF, const int ex[3]) { + const int shift = 1; + const int nx = ex[0] + 2; // ex1 + ord + const int ny = ex[1] + 2; + + const int ii = iF + shift; // 0..ex1+1 + const int jj = jF + shift; // 0..ex2+1 + const int kk = kF + shift; // 0..ex3+1 + + return (size_t)ii + (size_t)jj * (size_t)nx + (size_t)kk * (size_t)nx * (size_t)ny; +} + +/* + * fh 对应 Fortran: fh(-2:ex1, -2:ex2, -2:ex3) + * ord=3 => shift=2 + * iF/jF/kF 是 Fortran 索引(可为负) + */ +static inline size_t idx_fh_F(int iF, int jF, int kF, const int ex[3]) { + const int shift = 2; // ord=3 -> -2..ex + const int nx = ex[0] + 3; // ex1 + ord + const int ny = ex[1] + 3; + + const int ii = iF + shift; // 0..ex1+2 + const int jj = jF + shift; // 0..ex2+2 + const int kk = kF + shift; // 0..ex3+2 + + return (size_t)ii + (size_t)jj * (size_t)nx + (size_t)kk * (size_t)nx * (size_t)ny; +} + +/* + * func: (1..extc1, 1..extc2, 1..extc3) 1-based in Fortran + * funcc: (-ord+1..extc1, -ord+1..extc2, -ord+1..extc3) in Fortran + * + * C 里我们把: + * func 视为 0-based: i0=0..extc1-1, j0=0..extc2-1, k0=0..extc3-1 + * funcc 用“平移下标”存为一维数组: + * iF in [-ord+1..extc1] -> ii = iF + (ord-1) in [0..extc1+ord-1] + * 总长度 nx = extc1 + ord + * 同理 ny = extc2 + ord, nz = extc3 + ord + */ + +static inline size_t idx_func0(int i0, int j0, int k0, const int extc[3]) { + const int nx = extc[0], ny = extc[1]; + return (size_t)i0 + (size_t)j0 * (size_t)nx + (size_t)k0 * (size_t)nx * (size_t)ny; +} + +static inline size_t idx_funcc_F(int iF, int jF, int kF, int ord, const int extc[3]) { + const int shift = ord - 1; // iF = -shift .. extc1 + const int nx = extc[0] + ord; // [-shift..extc1] 共 extc1+ord 个 + const int ny = extc[1] + ord; + + const int ii = iF + shift; // 0..extc1+shift + const int jj = jF + shift; // 0..extc2+shift + const int kk = kF + shift; // 0..extc3+shift + + return (size_t)ii + (size_t)jj * (size_t)nx + (size_t)kk * (size_t)nx * (size_t)ny; +} + +/* + * 等价于 Fortran: + * funcc(1:extc1,1:extc2,1:extc3)=func + * do i=0,ord-1 + * funcc(-i,1:extc2,1:extc3) = funcc(i+1,1:extc2,1:extc3)*SoA(1) + * enddo + * do i=0,ord-1 + * funcc(:,-i,1:extc3) = funcc(:,i+1,1:extc3)*SoA(2) + * enddo + * do i=0,ord-1 + * funcc(:,:,-i) = funcc(:,:,i+1)*SoA(3) + * enddo + */ +static inline void symmetry_bd(int ord, + const int extc[3], + const double *func, + double *funcc, + const double SoA[3]) +{ + const int extc1 = extc[0], extc2 = extc[1], extc3 = extc[2]; + + // 1) funcc(1:extc1,1:extc2,1:extc3) = func + // Fortran 的 (iF=1..extc1) 对应 C 的 func(i0=0..extc1-1) + for (int k0 = 0; k0 < extc3; ++k0) { + for (int j0 = 0; j0 < extc2; ++j0) { + for (int i0 = 0; i0 < extc1; ++i0) { + const int iF = i0 + 1, jF = j0 + 1, kF = k0 + 1; + funcc[idx_funcc_F(iF, jF, kF, ord, extc)] = func[idx_func0(i0, j0, k0, extc)]; + } + } + } + + // 2) do i=0..ord-1: funcc(-i, 1:extc2, 1:extc3) = funcc(i+1, ...)*SoA(1) + for (int ii = 0; ii <= ord - 1; ++ii) { + const int iF_dst = -ii; // 0, -1, -2, ... + const int iF_src = ii + 1; // 1, 2, 3, ... + for (int kF = 1; kF <= extc3; ++kF) { + for (int jF = 1; jF <= extc2; ++jF) { + funcc[idx_funcc_F(iF_dst, jF, kF, ord, extc)] = + funcc[idx_funcc_F(iF_src, jF, kF, ord, extc)] * SoA[0]; + } + } + } + + // 3) do i=0..ord-1: funcc(:,-i, 1:extc3) = funcc(:, i+1, 1:extc3)*SoA(2) + // 注意 Fortran 这里的 ":" 表示 iF 从 (-ord+1..extc1) 全覆盖 + for (int jj = 0; jj <= ord - 1; ++jj) { + const int jF_dst = -jj; + const int jF_src = jj + 1; + for (int kF = 1; kF <= extc3; ++kF) { + for (int iF = -ord + 1; iF <= extc1; ++iF) { + funcc[idx_funcc_F(iF, jF_dst, kF, ord, extc)] = + funcc[idx_funcc_F(iF, jF_src, kF, ord, extc)] * SoA[1]; + } + } + } + + // 4) do i=0..ord-1: funcc(:,:,-i) = funcc(:,:, i+1)*SoA(3) + for (int kk = 0; kk <= ord - 1; ++kk) { + const int kF_dst = -kk; + const int kF_src = kk + 1; + for (int jF = -ord + 1; jF <= extc2; ++jF) { + for (int iF = -ord + 1; iF <= extc1; ++iF) { + funcc[idx_funcc_F(iF, jF, kF_dst, ord, extc)] = + funcc[idx_funcc_F(iF, jF, kF_src, ord, extc)] * SoA[2]; + } + } + } +} +#endif diff --git a/AMSS_NCKU_source/tool.h b/AMSS_NCKU_source/tool.h new file mode 100644 index 0000000..154b5ec --- /dev/null +++ b/AMSS_NCKU_source/tool.h @@ -0,0 +1,27 @@ +#include "share_func.h" +void fdderivs(const int ex[3], + const double *f, + double *fxx, double *fxy, double *fxz, + double *fyy, double *fyz, double *fzz, + const double *X, const double *Y, const double *Z, + double SYM1, double SYM2, double SYM3, + int Symmetry, int onoff); + +void fderivs(const int ex[3], + const double *f, + double *fx, double *fy, double *fz, + const double *X, const double *Y, const double *Z, + double SYM1, double SYM2, double SYM3, + int Symmetry, int onoff); + +void kodis(const int ex[3], + const double *X, const double *Y, const double *Z, + const double *f, double *f_rhs, + const double SoA[3], + int Symmetry, double eps); + +void lopsided(const int ex[3], + const double *X, const double *Y, const double *Z, + const double *f, double *f_rhs, + const double *Sfx, const double *Sfy, const double *Sfz, + int Symmetry, const double SoA[3]); \ No newline at end of file From 09b937c022fb9f44a4ef581e9730a79b440f035d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 12:42:47 +0000 Subject: [PATCH 08/16] Fix timing: replace clock() with MPI_Wtime() for wall-clock measurement clock() measures total CPU time across all threads, not wall-clock time. With the new OpenMP parallel regions in bssn_rhs_c.C, clock() sums CPU time from all OpenMP threads, producing inflated timing that scales with thread count rather than reflecting actual elapsed time. MPI_Wtime() returns wall-clock seconds, giving accurate timing regardless of the number of OpenMP threads running inside the measured interval. Co-authored-by: ianchb --- AMSS_NCKU_source/bssn_class.C | 112 ++++++++++++++++---------------- AMSS_NCKU_source/scalar_class.C | 48 +++++++------- 2 files changed, 80 insertions(+), 80 deletions(-) diff --git a/AMSS_NCKU_source/bssn_class.C b/AMSS_NCKU_source/bssn_class.C index eb84f8e..e8041b5 100644 --- a/AMSS_NCKU_source/bssn_class.C +++ b/AMSS_NCKU_source/bssn_class.C @@ -2028,7 +2028,7 @@ void bssn_class::Read_Ansorg() void bssn_class::Evolve(int Steps) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; double LastDump = 0.0, LastCheck = 0.0, Last2dDump = 0.0; LastAnas = 0; #if 0 @@ -2142,7 +2142,7 @@ void bssn_class::Evolve(int Steps) // { GH->levels=GH->movls; } if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); #if (PSTR == 0) RecursiveStep(0); #elif (PSTR == 1 || PSTR == 2 || PSTR == 3) @@ -2198,10 +2198,10 @@ void bssn_class::Evolve(int Steps) if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); + curr_clock = MPI_Wtime(); cout << endl; cout << " Timestep # " << ncount << ": integrating to time: " << PhysTime << " " - << " Computer used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + << " Computer used " << (curr_clock - prev_clock) << " seconds! " << endl; // cout << endl; } @@ -2403,15 +2403,15 @@ void bssn_class::RecursiveStep(int lev) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->CS_Inter(StateList, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; + curr_clock = MPI_Wtime(); + cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; } } #endif @@ -2543,15 +2543,15 @@ void bssn_class::ParallelStep() SHStep(); #if (RPS == 1) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->CS_Inter(StateList, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; + curr_clock = MPI_Wtime(); + cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; } } #endif @@ -2846,15 +2846,15 @@ void bssn_class::ParallelStep() #if (RPS == 1) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->CS_Inter(StateList, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + curr_clock = MPI_Wtime(); + cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; } // a_stream.clear(); @@ -3355,16 +3355,16 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->Synch(SynchList_pre, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); + curr_clock = MPI_Wtime(); cout << " Shell stuff synchronization used " - << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + << (curr_clock - prev_clock) << " seconds! " << endl; } } @@ -3715,16 +3715,16 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->Synch(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); + curr_clock = MPI_Wtime(); cout << " Shell stuff synchronization used " - << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + << (curr_clock - prev_clock) << " seconds! " << endl; } } @@ -3842,15 +3842,15 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->CS_Inter(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + curr_clock = MPI_Wtime(); + cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; } } @@ -4214,16 +4214,16 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->Synch(SynchList_pre, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); + curr_clock = MPI_Wtime(); cout << " Shell stuff synchronization used " - << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + << (curr_clock - prev_clock) << " seconds! " << endl; } } @@ -4559,16 +4559,16 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->Synch(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); + curr_clock = MPI_Wtime(); cout << " Shell stuff synchronization used " - << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + << (curr_clock - prev_clock) << " seconds! " << endl; } } @@ -4679,15 +4679,15 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->CS_Inter(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + curr_clock = MPI_Wtime(); + cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; } } @@ -5476,16 +5476,16 @@ void bssn_class::SHStep() } { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->Synch(SynchList_pre, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); + curr_clock = MPI_Wtime(); cout << " Shell stuff synchronization used " - << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + << (curr_clock - prev_clock) << " seconds! " << endl; } } @@ -5653,16 +5653,16 @@ void bssn_class::SHStep() } { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->Synch(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); + curr_clock = MPI_Wtime(); cout << " Shell stuff synchronization used " - << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + << (curr_clock - prev_clock) << " seconds! " << endl; } } @@ -5698,15 +5698,15 @@ void bssn_class::SHStep() } #if (RPS == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->CS_Inter(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + curr_clock = MPI_Wtime(); + cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; } } @@ -7639,9 +7639,9 @@ void bssn_class::AH_Step_Find(int lev, double dT_lev) } if (tf) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - prev_clock = clock(); + prev_clock = MPI_Wtime(); const int cdumpid = int(PhysTime / AHdumptime) + 1; for (int ihn = 0; ihn < HN_num; ihn++) dumpid[ihn] = cdumpid; @@ -7720,9 +7720,9 @@ void bssn_class::AH_Step_Find(int lev, double dT_lev) if (myrank == 0) { - curr_clock = clock(); + curr_clock = MPI_Wtime(); cout << " Finding horizon used " - << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) + << (curr_clock - prev_clock) << " seconds! " << endl; } } diff --git a/AMSS_NCKU_source/scalar_class.C b/AMSS_NCKU_source/scalar_class.C index d0cdec0..6715b62 100644 --- a/AMSS_NCKU_source/scalar_class.C +++ b/AMSS_NCKU_source/scalar_class.C @@ -319,7 +319,7 @@ void scalar_class::Setup_Initial_Data() } void scalar_class::Evolve(int Steps) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; double LastDump = 0.0, LastCheck = 0.0; LastAnas = 0; @@ -328,7 +328,7 @@ void scalar_class::Evolve(int Steps) for (int ncount = 1; ncount < Steps + 1; ncount++) { if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); RecursiveStep(0); LastDump += dT_mon; @@ -346,9 +346,9 @@ void scalar_class::Evolve(int Steps) if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); + curr_clock = MPI_Wtime(); cout << " Timestep # " << ncount << ": integrating to time: " << PhysTime - << " Computer used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; + << " Computer used " << (curr_clock - prev_clock) << " seconds! " << endl; } if (PhysTime >= TotalTime) break; @@ -549,15 +549,15 @@ void scalar_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->Synch(SynchList_pre, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " Shell stuff synchronization used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; + curr_clock = MPI_Wtime(); + cout << " Shell stuff synchronization used " << (curr_clock - prev_clock) << " seconds! " << endl; } } #endif @@ -731,15 +731,15 @@ void scalar_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->Synch(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " Shell stuff synchronization used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; + curr_clock = MPI_Wtime(); + cout << " Shell stuff synchronization used " << (curr_clock - prev_clock) << " seconds! " << endl; } } #endif @@ -786,15 +786,15 @@ void scalar_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->CS_Inter(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; + curr_clock = MPI_Wtime(); + cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; } } #endif @@ -1010,15 +1010,15 @@ void scalar_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->Synch(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " Shell stuff synchronization used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; + curr_clock = MPI_Wtime(); + cout << " Shell stuff synchronization used " << (curr_clock - prev_clock) << " seconds! " << endl; } } #endif @@ -1027,15 +1027,15 @@ void scalar_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - clock_t prev_clock, curr_clock; + double prev_clock, curr_clock; if (myrank == 0) - curr_clock = clock(); + curr_clock = MPI_Wtime(); SH->CS_Inter(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = clock(); - cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; + curr_clock = MPI_Wtime(); + cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; } } #endif From 284ab80bafc29bbac78b8e17be409857eb8b00f8 Mon Sep 17 00:00:00 2001 From: ianchb Date: Wed, 25 Feb 2026 13:15:24 +0000 Subject: [PATCH 09/16] Remove OpenMP from C rewrite kernel The C rewrite introduced OpenMP parallelism. Remove all OpenMP. --- AMSS_NCKU_source/bssn_rhs_c.C | 298 ++++++++++++---------------------- AMSS_NCKU_source/fdderivs_c.C | 4 +- AMSS_NCKU_source/fderivs_c.C | 4 +- AMSS_NCKU_source/makefile | 10 +- AMSS_NCKU_source/share_func.h | 1 - 5 files changed, 111 insertions(+), 206 deletions(-) diff --git a/AMSS_NCKU_source/bssn_rhs_c.C b/AMSS_NCKU_source/bssn_rhs_c.C index 99254a2..52995a8 100644 --- a/AMSS_NCKU_source/bssn_rhs_c.C +++ b/AMSS_NCKU_source/bssn_rhs_c.C @@ -34,7 +34,6 @@ int f_compute_rhs_bssn(int *ex, double &T, int &Symmetry, int &Lev, double &eps, int &co ) // return gont { - double t0 = omp_get_wtime(); int nx = ex[0], ny = ex[1], nz=ex[2]; int all = nx*ny*nz; // printf("nx=%d ny=%d nz=%d all=%d\n", nx, ny, nz, all); @@ -80,15 +79,8 @@ int f_compute_rhs_bssn(int *ex, double &T, dY = Y[1] - Y[0]; dZ = Z[1] - Z[0]; - #pragma omp parallel - { - int tid = omp_get_thread_num(); // 当前线程号(从 0 开始) - int nthr = omp_get_num_threads(); // 当前并行区里的总线程数 - int local = all / nthr; - int start = tid * local; - int end = (tid == nthr - 1) ? all : start + local; // 1ms // - for(int i=start;i0){ - for(int _task=tid; _task<16; _task+=nthr){ - switch(_task){ - case 0: kodis(ex,X,Y,Z,chi,chi_rhs,SSS,Symmetry,eps); break; - case 1: kodis(ex,X,Y,Z,trK,trK_rhs,SSS,Symmetry,eps); break; - case 2: kodis(ex,X,Y,Z,dxx,gxx_rhs,SSS,Symmetry,eps); break; - case 3: kodis(ex,X,Y,Z,gxy,gxy_rhs,AAS,Symmetry,eps); break; - case 4: kodis(ex,X,Y,Z,gxz,gxz_rhs,ASA,Symmetry,eps); break; - case 5: kodis(ex,X,Y,Z,dyy,gyy_rhs,SSS,Symmetry,eps); break; - case 6: kodis(ex,X,Y,Z,gyz,gyz_rhs,SAA,Symmetry,eps); break; - case 7: kodis(ex,X,Y,Z,dzz,gzz_rhs,SSS,Symmetry,eps); break; - case 8: - kodis(ex,X,Y,Z,Axx,Axx_rhs,SSS,Symmetry,eps); - kodis(ex,X,Y,Z,dtSfz,dtSfz_rhs,SSA,Symmetry,eps); - break; - case 9: - kodis(ex,X,Y,Z,Axy,Axy_rhs,AAS,Symmetry,eps); - kodis(ex,X,Y,Z,dtSfy,dtSfy_rhs,SAS,Symmetry,eps); - break; - case 10: - kodis(ex,X,Y,Z,Axz,Axz_rhs,ASA,Symmetry,eps); - kodis(ex,X,Y,Z,dtSfx,dtSfx_rhs,ASS,Symmetry,eps); - break; - case 11: - kodis(ex,X,Y,Z,Ayy,Ayy_rhs,SSS,Symmetry,eps); - kodis(ex,X,Y,Z,betaz,betaz_rhs,SSA,Symmetry,eps); - break; - case 12: - kodis(ex,X,Y,Z,Ayz,Ayz_rhs,SAA,Symmetry,eps); - kodis(ex,X,Y,Z,betay,betay_rhs,SAS,Symmetry,eps); - break; - case 13: - kodis(ex,X,Y,Z,Azz,Azz_rhs,SSS,Symmetry,eps); - kodis(ex,X,Y,Z,betax,betax_rhs,ASS,Symmetry,eps); - break; - case 14: - kodis(ex,X,Y,Z,Gamx,Gamx_rhs,ASS,Symmetry,eps); - kodis(ex,X,Y,Z,Lap,Lap_rhs,SSS,Symmetry,eps); - break; - case 15: - kodis(ex,X,Y,Z,Gamy,Gamy_rhs,SAS,Symmetry,eps); - kodis(ex,X,Y,Z,Gamz,Gamz_rhs,SSA,Symmetry,eps); - break; - } - } + kodis(ex,X,Y,Z,chi,chi_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,trK,trK_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,dxx,gxx_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,gxy,gxy_rhs,AAS,Symmetry,eps); + kodis(ex,X,Y,Z,gxz,gxz_rhs,ASA,Symmetry,eps); + kodis(ex,X,Y,Z,dyy,gyy_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,gyz,gyz_rhs,SAA,Symmetry,eps); + kodis(ex,X,Y,Z,dzz,gzz_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,Axx,Axx_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,dtSfz,dtSfz_rhs,SSA,Symmetry,eps); + kodis(ex,X,Y,Z,Axy,Axy_rhs,AAS,Symmetry,eps); + kodis(ex,X,Y,Z,dtSfy,dtSfy_rhs,SAS,Symmetry,eps); + kodis(ex,X,Y,Z,Axz,Axz_rhs,ASA,Symmetry,eps); + kodis(ex,X,Y,Z,dtSfx,dtSfx_rhs,ASS,Symmetry,eps); + kodis(ex,X,Y,Z,Ayy,Ayy_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,betaz,betaz_rhs,SSA,Symmetry,eps); + kodis(ex,X,Y,Z,Ayz,Ayz_rhs,SAA,Symmetry,eps); + kodis(ex,X,Y,Z,betay,betay_rhs,SAS,Symmetry,eps); + kodis(ex,X,Y,Z,Azz,Azz_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,betax,betax_rhs,ASS,Symmetry,eps); + kodis(ex,X,Y,Z,Gamx,Gamx_rhs,ASS,Symmetry,eps); + kodis(ex,X,Y,Z,Lap,Lap_rhs,SSS,Symmetry,eps); + kodis(ex,X,Y,Z,Gamy,Gamy_rhs,SAS,Symmetry,eps); + kodis(ex,X,Y,Z,Gamz,Gamz_rhs,SSA,Symmetry,eps); } // 2ms // if(co==0){ - for (int i=start;i cap) { free(fh); diff --git a/AMSS_NCKU_source/fderivs_c.C b/AMSS_NCKU_source/fderivs_c.C index 47c9c6c..0637cba 100644 --- a/AMSS_NCKU_source/fderivs_c.C +++ b/AMSS_NCKU_source/fderivs_c.C @@ -50,8 +50,8 @@ void fderivs(const int ex[3], const size_t ny = (size_t)ex2 + 2; const size_t nz = (size_t)ex3 + 2; const size_t fh_size = nx * ny * nz; - static thread_local double *fh = NULL; - static thread_local size_t cap = 0; + static double *fh = NULL; + static size_t cap = 0; if (fh_size > cap) { free(fh); diff --git a/AMSS_NCKU_source/makefile b/AMSS_NCKU_source/makefile index c6d465f..57ce95e 100644 --- a/AMSS_NCKU_source/makefile +++ b/AMSS_NCKU_source/makefile @@ -39,19 +39,19 @@ endif # C rewrite of BSSN RHS kernel and helpers bssn_rhs_c.o: bssn_rhs_c.C - ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< $(filein) -o $@ + ${CXX} $(CXXAPPFLAGS) -c $< $(filein) -o $@ fderivs_c.o: fderivs_c.C - ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< $(filein) -o $@ + ${CXX} $(CXXAPPFLAGS) -c $< $(filein) -o $@ fdderivs_c.o: fdderivs_c.C - ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< $(filein) -o $@ + ${CXX} $(CXXAPPFLAGS) -c $< $(filein) -o $@ kodiss_c.o: kodiss_c.C - ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< $(filein) -o $@ + ${CXX} $(CXXAPPFLAGS) -c $< $(filein) -o $@ lopsided_c.o: lopsided_c.C - ${CXX} $(CXXAPPFLAGS) -qopenmp -c $< $(filein) -o $@ + ${CXX} $(CXXAPPFLAGS) -c $< $(filein) -o $@ ## TwoPunctureABE uses fixed optimal flags, independent of CXXAPPFLAGS (which may be PGO-instrumented) TP_OPTFLAGS = -O3 -xHost -fp-model fast=2 -fma -ipo -Dfortran3 -Dnewc -I${MKLROOT}/include diff --git a/AMSS_NCKU_source/share_func.h b/AMSS_NCKU_source/share_func.h index f504a07..5051448 100644 --- a/AMSS_NCKU_source/share_func.h +++ b/AMSS_NCKU_source/share_func.h @@ -5,7 +5,6 @@ #include #include #include -#include /* 主网格:0-based -> 1D */ static inline size_t idx_ex(int i0, int j0, int k0, const int ex[3]) { const int ex1 = ex[0], ex2 = ex[1]; From f5a63f1e421e9c63f06b2fada765c6a57e70c4e0 Mon Sep 17 00:00:00 2001 From: ianchb Date: Wed, 25 Feb 2026 22:21:43 +0800 Subject: [PATCH 10/16] Revert "Fix timing: replace clock() with MPI_Wtime() for wall-clock measurement" This reverts commit 09b937c022fb9f44a4ef581e9730a79b440f035d. --- AMSS_NCKU_source/bssn_class.C | 112 ++++++++++++++++---------------- AMSS_NCKU_source/scalar_class.C | 48 +++++++------- 2 files changed, 80 insertions(+), 80 deletions(-) diff --git a/AMSS_NCKU_source/bssn_class.C b/AMSS_NCKU_source/bssn_class.C index e8041b5..eb84f8e 100644 --- a/AMSS_NCKU_source/bssn_class.C +++ b/AMSS_NCKU_source/bssn_class.C @@ -2028,7 +2028,7 @@ void bssn_class::Read_Ansorg() void bssn_class::Evolve(int Steps) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; double LastDump = 0.0, LastCheck = 0.0, Last2dDump = 0.0; LastAnas = 0; #if 0 @@ -2142,7 +2142,7 @@ void bssn_class::Evolve(int Steps) // { GH->levels=GH->movls; } if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); #if (PSTR == 0) RecursiveStep(0); #elif (PSTR == 1 || PSTR == 2 || PSTR == 3) @@ -2198,10 +2198,10 @@ void bssn_class::Evolve(int Steps) if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); + curr_clock = clock(); cout << endl; cout << " Timestep # " << ncount << ": integrating to time: " << PhysTime << " " - << " Computer used " << (curr_clock - prev_clock) + << " Computer used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; // cout << endl; } @@ -2403,15 +2403,15 @@ void bssn_class::RecursiveStep(int lev) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->CS_Inter(StateList, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; + curr_clock = clock(); + cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } #endif @@ -2543,15 +2543,15 @@ void bssn_class::ParallelStep() SHStep(); #if (RPS == 1) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->CS_Inter(StateList, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; + curr_clock = clock(); + cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } #endif @@ -2846,15 +2846,15 @@ void bssn_class::ParallelStep() #if (RPS == 1) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->CS_Inter(StateList, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " CS_Inter used " << (curr_clock - prev_clock) + curr_clock = clock(); + cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } // a_stream.clear(); @@ -3355,16 +3355,16 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->Synch(SynchList_pre, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); + curr_clock = clock(); cout << " Shell stuff synchronization used " - << (curr_clock - prev_clock) + << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } @@ -3715,16 +3715,16 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->Synch(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); + curr_clock = clock(); cout << " Shell stuff synchronization used " - << (curr_clock - prev_clock) + << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } @@ -3842,15 +3842,15 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->CS_Inter(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " CS_Inter used " << (curr_clock - prev_clock) + curr_clock = clock(); + cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } @@ -4214,16 +4214,16 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->Synch(SynchList_pre, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); + curr_clock = clock(); cout << " Shell stuff synchronization used " - << (curr_clock - prev_clock) + << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } @@ -4559,16 +4559,16 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->Synch(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); + curr_clock = clock(); cout << " Shell stuff synchronization used " - << (curr_clock - prev_clock) + << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } @@ -4679,15 +4679,15 @@ void bssn_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->CS_Inter(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " CS_Inter used " << (curr_clock - prev_clock) + curr_clock = clock(); + cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } @@ -5476,16 +5476,16 @@ void bssn_class::SHStep() } { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->Synch(SynchList_pre, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); + curr_clock = clock(); cout << " Shell stuff synchronization used " - << (curr_clock - prev_clock) + << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } @@ -5653,16 +5653,16 @@ void bssn_class::SHStep() } { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->Synch(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); + curr_clock = clock(); cout << " Shell stuff synchronization used " - << (curr_clock - prev_clock) + << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } @@ -5698,15 +5698,15 @@ void bssn_class::SHStep() } #if (RPS == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->CS_Inter(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " CS_Inter used " << (curr_clock - prev_clock) + curr_clock = clock(); + cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } @@ -7639,9 +7639,9 @@ void bssn_class::AH_Step_Find(int lev, double dT_lev) } if (tf) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - prev_clock = MPI_Wtime(); + prev_clock = clock(); const int cdumpid = int(PhysTime / AHdumptime) + 1; for (int ihn = 0; ihn < HN_num; ihn++) dumpid[ihn] = cdumpid; @@ -7720,9 +7720,9 @@ void bssn_class::AH_Step_Find(int lev, double dT_lev) if (myrank == 0) { - curr_clock = MPI_Wtime(); + curr_clock = clock(); cout << " Finding horizon used " - << (curr_clock - prev_clock) + << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } diff --git a/AMSS_NCKU_source/scalar_class.C b/AMSS_NCKU_source/scalar_class.C index 6715b62..d0cdec0 100644 --- a/AMSS_NCKU_source/scalar_class.C +++ b/AMSS_NCKU_source/scalar_class.C @@ -319,7 +319,7 @@ void scalar_class::Setup_Initial_Data() } void scalar_class::Evolve(int Steps) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; double LastDump = 0.0, LastCheck = 0.0; LastAnas = 0; @@ -328,7 +328,7 @@ void scalar_class::Evolve(int Steps) for (int ncount = 1; ncount < Steps + 1; ncount++) { if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); RecursiveStep(0); LastDump += dT_mon; @@ -346,9 +346,9 @@ void scalar_class::Evolve(int Steps) if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); + curr_clock = clock(); cout << " Timestep # " << ncount << ": integrating to time: " << PhysTime - << " Computer used " << (curr_clock - prev_clock) << " seconds! " << endl; + << " Computer used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } if (PhysTime >= TotalTime) break; @@ -549,15 +549,15 @@ void scalar_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->Synch(SynchList_pre, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " Shell stuff synchronization used " << (curr_clock - prev_clock) << " seconds! " << endl; + curr_clock = clock(); + cout << " Shell stuff synchronization used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } #endif @@ -731,15 +731,15 @@ void scalar_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->Synch(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " Shell stuff synchronization used " << (curr_clock - prev_clock) << " seconds! " << endl; + curr_clock = clock(); + cout << " Shell stuff synchronization used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } #endif @@ -786,15 +786,15 @@ void scalar_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->CS_Inter(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; + curr_clock = clock(); + cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } #endif @@ -1010,15 +1010,15 @@ void scalar_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->Synch(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " Shell stuff synchronization used " << (curr_clock - prev_clock) << " seconds! " << endl; + curr_clock = clock(); + cout << " Shell stuff synchronization used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } #endif @@ -1027,15 +1027,15 @@ void scalar_class::Step(int lev, int YN) #ifdef WithShell if (lev == 0) { - double prev_clock, curr_clock; + clock_t prev_clock, curr_clock; if (myrank == 0) - curr_clock = MPI_Wtime(); + curr_clock = clock(); SH->CS_Inter(SynchList_cor, Symmetry); if (myrank == 0) { prev_clock = curr_clock; - curr_clock = MPI_Wtime(); - cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl; + curr_clock = clock(); + cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; } } #endif From d2c2214fa1224a17ac4bf2a12e3a885586d76d56 Mon Sep 17 00:00:00 2001 From: CGH0S7 <776459475@qq.com> Date: Wed, 25 Feb 2026 23:06:17 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E8=A1=A5=E5=85=85TwoPunctureABE=E4=B8=93?= =?UTF-8?q?=E7=94=A8PGO=E6=8F=92=E6=A1=A9=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pgo_profile/TwoPunctureABE.profdata | Bin 0 -> 11952 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 pgo_profile/TwoPunctureABE.profdata diff --git a/pgo_profile/TwoPunctureABE.profdata b/pgo_profile/TwoPunctureABE.profdata new file mode 100644 index 0000000000000000000000000000000000000000..ea95175179a36e235eaf9fac45285adce3a9ba6b GIT binary patch literal 11952 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 literal 0 HcmV?d00001 From dfb79e3e113f97dd33b82277f3d3f11e2ddb4614 Mon Sep 17 00:00:00 2001 From: ianchb Date: Thu, 26 Feb 2026 11:48:28 +0800 Subject: [PATCH 12/16] Initialize output arrays to zero in fdderivs_c.C and fderivs_c.C --- AMSS_NCKU_source/fdderivs_c.C | 4 ++++ AMSS_NCKU_source/fderivs_c.C | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/AMSS_NCKU_source/fdderivs_c.C b/AMSS_NCKU_source/fdderivs_c.C index cd65ac3..5cc52d4 100644 --- a/AMSS_NCKU_source/fdderivs_c.C +++ b/AMSS_NCKU_source/fdderivs_c.C @@ -73,6 +73,10 @@ void fdderivs(const int ex[3], /* 输出清零:fxx,fyy,fzz,fxy,fxz,fyz = 0 */ const size_t all = (size_t)ex1 * (size_t)ex2 * (size_t)ex3; + for (size_t p = 0; p < all; ++p) { + fxx[p] = ZEO; fyy[p] = ZEO; fzz[p] = ZEO; + fxy[p] = ZEO; fxz[p] = ZEO; fyz[p] = ZEO; + } /* * Fortran: diff --git a/AMSS_NCKU_source/fderivs_c.C b/AMSS_NCKU_source/fderivs_c.C index 0637cba..5f6b94c 100644 --- a/AMSS_NCKU_source/fderivs_c.C +++ b/AMSS_NCKU_source/fderivs_c.C @@ -74,6 +74,11 @@ void fderivs(const int ex[3], // fx = fy = fz = 0 const size_t all = (size_t)ex1 * (size_t)ex2 * (size_t)ex3; + for (size_t p = 0; p < all; ++p) { + fx[p] = ZEO; + fy[p] = ZEO; + fz[p] = ZEO; + } /* * Fortran loops: From 45b7a43576f27a0223a6c932eee7eaa6dedf6630 Mon Sep 17 00:00:00 2001 From: CGH0S7 <776459475@qq.com> Date: Thu, 26 Feb 2026 15:48:11 +0800 Subject: [PATCH 13/16] =?UTF-8?q?=E8=A1=A5=E5=85=A8C=E7=AE=97=E5=AD=90?= =?UTF-8?q?=E5=92=8CFortran=E7=AE=97=E5=AD=90=E7=9A=84=E6=95=B0=E5=AD=A6?= =?UTF-8?q?=E5=B7=AE=E5=BC=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AMSS_NCKU_source/bssn_rhs_c.C | 128 +++++++++++++++++++++++++++++++--- 1 file changed, 119 insertions(+), 9 deletions(-) diff --git a/AMSS_NCKU_source/bssn_rhs_c.C b/AMSS_NCKU_source/bssn_rhs_c.C index 52995a8..1086026 100644 --- a/AMSS_NCKU_source/bssn_rhs_c.C +++ b/AMSS_NCKU_source/bssn_rhs_c.C @@ -70,10 +70,34 @@ int f_compute_rhs_bssn(int *ex, double &T, const double FF = 0.75, eta = 2.0; const double F1o3 = 1.0/3.0, F2o3 = 2.0/3.0, F3o2 = 1.5, F1o6 = 1.0/6.0; const double F16 = 16.0, F8 = 8.0; - #if (GAUGE == 2 || GAUGE == 3 || GAUGE == 4 || GAUGE == 5) + #if (GAUGE == 2 || GAUGE == 3 || GAUGE == 4 || GAUGE == 5 || GAUGE == 6 || GAUGE == 7) double reta[all]; /* 使用时:reta[idx],其中 idx = i + nx*(j + ny*k) (Fortran列主序) */ #endif + + #if (GAUGE == 6 || GAUGE == 7) + int BHN = 0; + double Porg[9] = {0.0}; + double Mass[3] = {0.0}; + + extern "C" { + #ifdef fortran1 + void getpbh(int &, double *, double *); + #elif defined(fortran2) + void GETPBH(int &, double *, double *); + #else + void getpbh_(int &, double *, double *); + #endif + } + + #ifdef fortran1 + getpbh(BHN, Porg, Mass); + #elif defined(fortran2) + GETPBH(BHN, Porg, Mass); + #else + getpbh_(BHN, Porg, Mass); + #endif + #endif PI = acos(-1.0); dX = X[1] - X[0]; dY = Y[1] - Y[0]; @@ -966,11 +990,67 @@ int f_compute_rhs_bssn(int *ex, double &T, } // 1ms // - for(int i=0;i Date: Fri, 27 Feb 2026 11:30:36 +0800 Subject: [PATCH 14/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0C=E7=AE=97=E5=AD=90PGO?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pgo_profile/default.profdata | Bin 390312 -> 397416 bytes pgo_profile/default.profdata-f | Bin 0 -> 390312 bytes .../default_9726420327935033477_0.profraw | Bin 0 -> 327728 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 pgo_profile/default.profdata-f create mode 100644 pgo_profile/default_9726420327935033477_0.profraw diff --git a/pgo_profile/default.profdata b/pgo_profile/default.profdata index c09d07825d9bae3809eccccc0f7af431380f51f6..e875ff0b61134bfbd56cf66089e1eeb344707b08 100644 GIT binary patch delta 32900 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 F{(mqDk-`7~ delta 44561 zcmeHQ33yCb`@i?xnItnwWHMwXnUJkyLnJ{YsU@-3zV9TVh&{2l6%(zZ+7bq*ixNvI zU5J#SD5|uoN{U))iB@YT)V}`DIqx~c9aZ&xnCJOF-#kz9yYK#<_1-!6&bcS^{XaQn z&I_?l8m^Td{JeKrP3LpkjVl>AW^=W9F9Bm?QOXu~awzaUw?Dk8%B|I-e@Y=}h#>#S zN62L$ty2C3ICK(7Dc%ZG$^W_JDk4W3Fp!FEaFn%kik9+eQ2NQWK#D1SOzG642jfao z$UM+U`Q+{2D616bZ;a59BP&s8FmN{I`Ex<~7kW54bh!sTh~#{!x)(bNxoPmF2d6nd zf35f5@=L}-C};iHKp&=GZCWRV#+NGby699J1drCZeSo~N`+-n`2e)vgh{mq>+TL)+2pNXzxG~( zGxD?@?fJ8nqnd~R7cMW*An)tM2Th#j^rtPf-Q=!_ zZ3fbRU*WvP)qo8l3b9%V~H7ex8^*=I6 zZIF{b{UNx9B1qEL2wHS7caZfJjGkV?;aMnqPfkla;UGiMyoE(T!z*8~%Hsj0;mdNE zCd8{RNekYr!5AW7?5CcL76B`Iz+e#p^A|CHk_ebPt?;MRTQc&HZQJWbbeVf)k*aZW z7Qhgh_GxAr>Q@Y*N<$)iD80Ee{r_)}betgTXrfBv(?6P*%svEpP~q;W)6(dTH!5!_ ze5?M88hNp;wYRzOP-6=U&2RD=^h#5HcN%$Rt|WXogj<@B1P!?!AJu=b(VXQ*+)>!iI_T zxU!({BOV-z!VABg-(4=7$%ludUPh!A4A-w2rMv*$y6>DdQj<#{*`kN>a$^q)E3>avnU0jz~` z+m#8h`Nf3^u=p;l0f_Iq1bBRxB_QIvDgmpD#=RJIR>`#qkotFN0<`^InLrSU{|^Zi zj@i;5+1y$h=sM_%?~`;%MyIc8f_^OGjNNiT;oC(U<J(aP%|#qH&b4Kj&2nq{-<|Vt+_ze@oQub8kQ03qxV~cv2Ol%b zL2YvRI+yqs`ft&Z7|-jz9Zr2+iL_nYXF!w8^d^_tYuK=~L+N*hd7EZ>{Pd6ax#*p* z&yg2#NxdrM?;Ke_{Ht)-<-D4hfBa$@xuN}B897##y>PKvYbFa`_Btkcm?l)*Vsyq5KZsX? zTZhSJ`LsRF~ zE|wDC0Uy#Bjs}h%ybgtY66c@QkQ)sC_P>JVBn59MFPD(c=uhuxXxPlzfUEH{sF+1r zy-^XZKl*tF=ph{2G(lStGTT=*l>gA9>w);A)^dQ(?X&jZ41WK0_YQboGdc3% zJF6;A>{?V4dB;A`{Q~j4`Y5O{wx3qE_ZTJ@yNeqoy|dGXXZ9YRk#_g^ZwtO$a#X<= zXJ|W;`?R45)_Q}d%Vq56bLDp0sG3k)JYPww!|8e)MS1GrO&VmztwLl^`@0k5{-xy7 zwu?i}I&t4A0WY&?&9>R|J#@VHOGe77VTU&xH))?z@gTb_hh!uh*+l?ggi#zhrm6Fyo&_RxvN_!5$MM|m{)AB

}>)?}$ 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 IS19NI0Bn2&C;$Ke literal 0 HcmV?d00001 diff --git a/pgo_profile/default_9726420327935033477_0.profraw b/pgo_profile/default_9726420327935033477_0.profraw new file mode 100644 index 0000000000000000000000000000000000000000..e46d05a49be0a9663d4d015f20c82a913c132754 GIT binary patch literal 327728 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 z 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%0A>oC@N_Ai* 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 CxL9%k literal 0 HcmV?d00001 From 6b2464b80c803f4e077bef2a6e440d694ea024d2 Mon Sep 17 00:00:00 2001 From: jaunatisblue Date: Fri, 27 Feb 2026 15:07:40 +0800 Subject: [PATCH 15/16] =?UTF-8?q?Interp=5FPoints=20=E8=B4=9F=E8=BD=BD?= =?UTF-8?q?=E5=9D=87=E8=A1=A1=EF=BC=9A=E7=83=AD=E7=82=B9=20block=20?= =?UTF-8?q?=E6=8B=86=E5=88=86=E4=B8=8E=20rank=20=E9=87=8D=E6=98=A0?= =?UTF-8?q?=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题背景: Patch::Interp_Points 在球面插值时存在严重的 MPI 负载不均衡。 通过 MPI_Wtime 计时诊断发现,64 进程中 rank 27/28/35/36 四个进程 承担了绝大部分插值计算(耗时为平均值的 2.6~3.3 倍),导致其余 60 个进程在 MPI 集合通信处空等,成为整体性能瓶颈。 根因分析: 这四个 rank 对应的 block 在物理空间上恰好覆盖了球面提取面 (extraction sphere)的密集插值点区域,而 distribute 函数按均匀 网格体积分配 block-to-rank,未考虑插值点的空间分布不均。 优化方案: 1. 新增 distribute_optimize 函数替代 distribute,使用独立的 current_block_id 计数器(与 rank 分配解耦)遍历所有 block。 2. 热点 block 拆分(splitHotspotBlock): 对 block 27/28/35/36 沿 x 轴在中点处二等分,生成左右两个子 block,分别分配给相邻的两个 rank: - block 27 → (rank 26, rank 27) - block 28 → (rank 28, rank 29) - block 35 → (rank 34, rank 35) - block 36 → (rank 36, rank 37) 子 block 严格复刻原 distribute 的 ghost zone 扩张和物理坐标 计算逻辑(支持 Vertex/Cell 两种网格模式)。 3. 邻居 rank 重映射(createMappedBlock): 被占用的邻居 block 需要让出原 rank,重映射到相邻空闲 rank: - block 26 → rank 25 - block 29 → rank 30 - block 34 → rank 33 - block 37 → rank 38 其余 block 保持 block_id == rank 的原始映射。 4. cgh.C 中 compose_cgh 通过预处理宏切换调用 distribute_optimize 或原始 distribute。 5. MPatch.C 中添加 profile 采集插桩:在 Interp_Points 重载 2 中 用 MPI_Wtime 计时,MPI_Gather 汇总各 rank 耗时,识别热点 rank 并写入二进制 profile 文件。 6. 新增 interp_lb_profile.h/C:定义 profile 文件格式(magic、 version、nprocs、threshold_ratio、heavy_ranks),提供 write_profile/read_profile/identify_heavy_ranks 接口。 数学等价性:拆分和重映射仅改变 block 的几何划分与 rank 归属, 不修改任何物理方程、差分格式或插值算法,计算结果严格一致。 --- AMSS_NCKU_source/MPatch.C | 36 +++ AMSS_NCKU_source/Parallel.C | 380 ++++++++++++++++++++++++++- AMSS_NCKU_source/Parallel.h | 10 + AMSS_NCKU_source/cgh.C | 4 + AMSS_NCKU_source/interp_lb_profile.C | 107 ++++++++ AMSS_NCKU_source/interp_lb_profile.h | 38 +++ 6 files changed, 574 insertions(+), 1 deletion(-) create mode 100644 AMSS_NCKU_source/interp_lb_profile.C create mode 100644 AMSS_NCKU_source/interp_lb_profile.h diff --git a/AMSS_NCKU_source/MPatch.C b/AMSS_NCKU_source/MPatch.C index 91ead8a..563bfcc 100644 --- a/AMSS_NCKU_source/MPatch.C +++ b/AMSS_NCKU_source/MPatch.C @@ -13,6 +13,9 @@ using namespace std; #include "MPatch.h" #include "Parallel.h" #include "fmisc.h" +#ifdef INTERP_LB_PROFILE +#include "interp_lb_profile.h" +#endif Patch::Patch(int DIM, int *shapei, double *bboxi, int levi, bool buflog, int Symmetry) : lev(levi) { @@ -507,6 +510,9 @@ void Patch::Interp_Points(MyList *VarList, // Targeted point-to-point overload: each owner sends each point only to // the one rank that needs it for integration (consumer), reducing // communication volume by ~nprocs times compared to the Bcast version. +#ifdef INTERP_LB_PROFILE + double t_interp_start = MPI_Wtime(); +#endif int myrank, nprocs; MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); @@ -608,6 +614,11 @@ void Patch::Interp_Points(MyList *VarList, } } +#ifdef INTERP_LB_PROFILE + double t_interp_end = MPI_Wtime(); + double t_interp_local = t_interp_end - t_interp_start; +#endif + // --- Error check for unfound points --- for (int j = 0; j < NN; j++) { @@ -764,6 +775,31 @@ void Patch::Interp_Points(MyList *VarList, delete[] recv_count; delete[] consumer_rank; delete[] owner_rank; + +#ifdef INTERP_LB_PROFILE + { + static bool profile_written = false; + if (!profile_written) { + double *all_times = nullptr; + if (myrank == 0) all_times = new double[nprocs]; + MPI_Gather(&t_interp_local, 1, MPI_DOUBLE, + all_times, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); + if (myrank == 0) { + int heavy[64]; + int nh = InterpLBProfile::identify_heavy_ranks( + all_times, nprocs, 2.5, heavy, 64); + InterpLBProfile::write_profile( + "interp_lb_profile.bin", nprocs, + all_times, heavy, nh, 2.5); + printf("[InterpLB] Profile written: %d heavy ranks\n", nh); + for (int i = 0; i < nh; i++) + printf(" Heavy rank %d: %.6f s\n", heavy[i], all_times[heavy[i]]); + delete[] all_times; + } + profile_written = true; + } + } +#endif } void Patch::Interp_Points(MyList *VarList, int NN, double **XX, diff --git a/AMSS_NCKU_source/Parallel.C b/AMSS_NCKU_source/Parallel.C index a9fb3cd..bd591c4 100644 --- a/AMSS_NCKU_source/Parallel.C +++ b/AMSS_NCKU_source/Parallel.C @@ -462,7 +462,7 @@ MyList *Parallel::distribute(MyList *PatchLIST, int cpusize, int i } } #else - ng = ng0 = new Block(dim, shape_here, bbox_here, n_rank++, ingfsi, fngfsi, PP->lev); // delete through KillBlocks + ng = ng0 = new Block(dim, shape_here, bbox_here, n_rank++, ingfsi, fngfsi, PP->lev); // ng->checkBlock(); if (BlL) BlL->insert(ng); @@ -500,6 +500,384 @@ MyList *Parallel::distribute(MyList *PatchLIST, int cpusize, int i return BlL; } + +#ifdef INTERP_LB_OPTIMIZE +#include "interp_lb_profile_data.h" + +MyList *Parallel::distribute_optimize(MyList *PatchLIST, int cpusize, int ingfsi, int fngfsi, + bool periodic, int nodes) +{ +#ifdef USE_GPU_DIVIDE + double cpu_part, gpu_part; + map::iterator iter; + iter = parameters::dou_par.find("cpu part"); + if (iter != parameters::dou_par.end()) + { + cpu_part = iter->second; + } + else + { + int myrank; + MPI_Comm_rank(MPI_COMM_WORLD, &myrank); + const int LEN = 256; + char pline[LEN]; + string str, sgrp, skey, sval; + int sind; + char pname[50]; + { + map::iterator iter = parameters::str_par.find("inputpar"); + if (iter != parameters::str_par.end()) + strcpy(pname, (iter->second).c_str()); + else { cout << "Error inputpar" << endl; exit(0); } + } + ifstream inf(pname, ifstream::in); + if (!inf.good() && myrank == 0) + { cout << "Can not open parameter file " << pname << endl; MPI_Abort(MPI_COMM_WORLD, 1); } + for (int i = 1; inf.good(); i++) + { + inf.getline(pline, LEN); str = pline; + int status = misc::parse_parts(str, sgrp, skey, sval, sind); + if (status == -1) { cout << "error reading parameter file " << pname << " in line " << i << endl; MPI_Abort(MPI_COMM_WORLD, 1); } + else if (status == 0) continue; + if (sgrp == "ABE") { if (skey == "cpu part") cpu_part = atof(sval.c_str()); } + } + inf.close(); + parameters::dou_par.insert(map::value_type("cpu part", cpu_part)); + } + iter = parameters::dou_par.find("gpu part"); + if (iter != parameters::dou_par.end()) + { + gpu_part = iter->second; + } + else + { + int myrank; + MPI_Comm_rank(MPI_COMM_WORLD, &myrank); + const int LEN = 256; + char pline[LEN]; + string str, sgrp, skey, sval; + int sind; + char pname[50]; + { + map::iterator iter = parameters::str_par.find("inputpar"); + if (iter != parameters::str_par.end()) + strcpy(pname, (iter->second).c_str()); + else { cout << "Error inputpar" << endl; exit(0); } + } + ifstream inf(pname, ifstream::in); + if (!inf.good() && myrank == 0) + { cout << "Can not open parameter file " << pname << endl; MPI_Abort(MPI_COMM_WORLD, 1); } + for (int i = 1; inf.good(); i++) + { + inf.getline(pline, LEN); str = pline; + int status = misc::parse_parts(str, sgrp, skey, sval, sind); + if (status == -1) { cout << "error reading parameter file " << pname << " in line " << i << endl; MPI_Abort(MPI_COMM_WORLD, 1); } + else if (status == 0) continue; + if (sgrp == "ABE") { if (skey == "gpu part") gpu_part = atof(sval.c_str()); } + } + inf.close(); + parameters::dou_par.insert(map::value_type("gpu part", gpu_part)); + } + if (nodes == 0) nodes = cpusize / 2; +#else + if (nodes == 0) nodes = cpusize; +#endif + + if (dim != 3) + { + cout << "distrivute: now we only support 3-dimension" << endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + + MyList *BlL = 0; + int split_size, min_size, block_size = 0; + int min_width = 2 * Mymax(ghost_width, buffer_width); + int nxyz[dim], mmin_width[dim], min_shape[dim]; + + MyList *PLi = PatchLIST; + for (int i = 0; i < dim; i++) + min_shape[i] = PLi->data->shape[i]; + int lev = PLi->data->lev; + PLi = PLi->next; + while (PLi) + { + Patch *PP = PLi->data; + for (int i = 0; i < dim; i++) + min_shape[i] = Mymin(min_shape[i], PP->shape[i]); + if (lev != PLi->data->lev) + cout << "Parallel::distribute CAUSTION: meet Patches for different level: " << lev << " and " << PLi->data->lev << endl; + PLi = PLi->next; + } + + for (int i = 0; i < dim; i++) + mmin_width[i] = Mymin(min_width, min_shape[i]); + min_size = mmin_width[0]; + for (int i = 1; i < dim; i++) + min_size = min_size * mmin_width[i]; + + PLi = PatchLIST; + while (PLi) + { + Patch *PP = PLi->data; + int bs = PP->shape[0]; + for (int i = 1; i < dim; i++) + bs = bs * PP->shape[i]; + block_size = block_size + bs; + PLi = PLi->next; + } + split_size = Mymax(min_size, block_size / nodes); + split_size = Mymax(1, split_size); + + int n_rank = 0; + PLi = PatchLIST; + int reacpu = 0; + int current_block_id = 0; + while (PLi) { + Block *ng0, *ng; + bool first_block_in_patch = true; + Patch *PP = PLi->data; + reacpu += partition3(nxyz, split_size, mmin_width, nodes, PP->shape); + + for (int i = 0; i < nxyz[0]; i++) + for (int j = 0; j < nxyz[1]; j++) + for (int k = 0; k < nxyz[2]; k++) + { + int ibbox_here[6], shape_here[3]; + double bbox_here[6], dd; + Block *current_ng_start = nullptr; + + bool is_heavy = false; + int r_l = -1, r_r = -1; + if (cpusize == INTERP_LB_NPROCS) { + for (int si = 0; si < INTERP_LB_NUM_HEAVY; si++) { + if (current_block_id == interp_lb_splits[si][0]) { + is_heavy = true; + r_l = interp_lb_splits[si][1]; + r_r = interp_lb_splits[si][2]; + break; + } + } + } + + if (is_heavy) + { + int ib0 = (PP->shape[0] * i) / nxyz[0]; + int ib3 = (PP->shape[0] * (i + 1)) / nxyz[0] - 1; + int jb1 = (PP->shape[1] * j) / nxyz[1]; + int jb4 = (PP->shape[1] * (j + 1)) / nxyz[1] - 1; + int kb2 = (PP->shape[2] * k) / nxyz[2]; + int kb5 = (PP->shape[2] * (k + 1)) / nxyz[2] - 1; + + Block *split_first_block = nullptr; + Block *split_last_block = nullptr; + splitHotspotBlock(BlL, dim, ib0, ib3, jb1, jb4, kb2, kb5, + PP, r_l, r_r, ingfsi, fngfsi, periodic, + split_first_block, split_last_block); + + current_ng_start = split_first_block; + ng = split_last_block; + } + else + { + ibbox_here[0] = (PP->shape[0] * i) / nxyz[0]; + ibbox_here[3] = (PP->shape[0] * (i + 1)) / nxyz[0] - 1; + ibbox_here[1] = (PP->shape[1] * j) / nxyz[1]; + ibbox_here[4] = (PP->shape[1] * (j + 1)) / nxyz[1] - 1; + ibbox_here[2] = (PP->shape[2] * k) / nxyz[2]; + ibbox_here[5] = (PP->shape[2] * (k + 1)) / nxyz[2] - 1; + + if (periodic) { + for(int d=0; d<3; d++) { + ibbox_here[d] -= ghost_width; + ibbox_here[d+3] += ghost_width; + } + } else { + ibbox_here[0] = Mymax(0, ibbox_here[0] - ghost_width); + ibbox_here[3] = Mymin(PP->shape[0] - 1, ibbox_here[3] + ghost_width); + ibbox_here[1] = Mymax(0, ibbox_here[1] - ghost_width); + ibbox_here[4] = Mymin(PP->shape[1] - 1, ibbox_here[4] + ghost_width); + ibbox_here[2] = Mymax(0, ibbox_here[2] - ghost_width); + ibbox_here[5] = Mymin(PP->shape[2] - 1, ibbox_here[5] + ghost_width); + } + + for(int d=0; d<3; d++) shape_here[d] = ibbox_here[d+3] - ibbox_here[d] + 1; + +#ifdef Vertex +#ifdef Cell +#error Both Cell and Vertex are defined +#endif + dd = (PP->bbox[3] - PP->bbox[0]) / (PP->shape[0] - 1); + bbox_here[0] = PP->bbox[0] + ibbox_here[0] * dd; + bbox_here[3] = PP->bbox[0] + ibbox_here[3] * dd; + dd = (PP->bbox[4] - PP->bbox[1]) / (PP->shape[1] - 1); + bbox_here[1] = PP->bbox[1] + ibbox_here[1] * dd; + bbox_here[4] = PP->bbox[1] + ibbox_here[4] * dd; + dd = (PP->bbox[5] - PP->bbox[2]) / (PP->shape[2] - 1); + bbox_here[2] = PP->bbox[2] + ibbox_here[2] * dd; + bbox_here[5] = PP->bbox[2] + ibbox_here[5] * dd; +#else +#ifdef Cell + dd = (PP->bbox[3] - PP->bbox[0]) / PP->shape[0]; + bbox_here[0] = PP->bbox[0] + (ibbox_here[0]) * dd; + bbox_here[3] = PP->bbox[0] + (ibbox_here[3] + 1) * dd; + dd = (PP->bbox[4] - PP->bbox[1]) / PP->shape[1]; + bbox_here[1] = PP->bbox[1] + (ibbox_here[1]) * dd; + bbox_here[4] = PP->bbox[1] + (ibbox_here[4] + 1) * dd; + dd = (PP->bbox[5] - PP->bbox[2]) / PP->shape[2]; + bbox_here[2] = PP->bbox[2] + (ibbox_here[2]) * dd; + bbox_here[5] = PP->bbox[2] + (ibbox_here[5] + 1) * dd; +#else +#error Not define Vertex nor Cell +#endif +#endif + ng = createMappedBlock(BlL, dim, shape_here, bbox_here, + current_block_id, ingfsi, fngfsi, PP->lev); + current_ng_start = ng; + } + + if (first_block_in_patch) { + ng0 = current_ng_start; + MyList *Bp_start = BlL; + while (Bp_start && Bp_start->data != ng0) Bp_start = Bp_start->next; + PP->blb = Bp_start; + first_block_in_patch = false; + } + + current_block_id++; + } + + { + MyList *Bp_end = BlL; + while (Bp_end && Bp_end->data != ng) Bp_end = Bp_end->next; + PP->ble = Bp_end; + } + + PLi = PLi->next; + } + if (reacpu < nodes * 2 / 3) + { + int myrank; + MPI_Comm_rank(MPI_COMM_WORLD, &myrank); + if (myrank == 0) + cout << "Parallel::distribute CAUSTION: level#" << lev << " uses essencially " << reacpu << " processors vs " << nodes << " nodes run, your scientific computation scale is not as large as you estimate." << endl; + } + + return BlL; +} + +Block* Parallel::splitHotspotBlock(MyList* &BlL, int _dim, + int ib0_orig, int ib3_orig, + int jb1_orig, int jb4_orig, + int kb2_orig, int kb5_orig, + Patch* PP, int r_left, int r_right, + int ingfsi, int fngfsi, bool periodic, + Block* &split_first_block, Block* &split_last_block) +{ + int mid = (ib0_orig + ib3_orig) / 2; + + int indices_L[6] = {ib0_orig, jb1_orig, kb2_orig, mid, jb4_orig, kb5_orig}; + int indices_R[6] = {mid + 1, jb1_orig, kb2_orig, ib3_orig, jb4_orig, kb5_orig}; + + auto createSubBlock = [&](int* ib_raw, int target_rank) { + int ib_final[6]; + int sh_here[3]; + double bb_here[6], dd; + + if (periodic) { + ib_final[0] = ib_raw[0] - ghost_width; + ib_final[3] = ib_raw[3] + ghost_width; + ib_final[1] = ib_raw[1] - ghost_width; + ib_final[4] = ib_raw[4] + ghost_width; + ib_final[2] = ib_raw[2] - ghost_width; + ib_final[5] = ib_raw[5] + ghost_width; + } else { + ib_final[0] = Mymax(0, ib_raw[0] - ghost_width); + ib_final[3] = Mymin(PP->shape[0] - 1, ib_raw[3] + ghost_width); + ib_final[1] = Mymax(0, ib_raw[1] - ghost_width); + ib_final[4] = Mymin(PP->shape[1] - 1, ib_raw[4] + ghost_width); + ib_final[2] = Mymax(0, ib_raw[2] - ghost_width); + ib_final[5] = Mymin(PP->shape[2] - 1, ib_raw[5] + ghost_width); + } + + sh_here[0] = ib_final[3] - ib_final[0] + 1; + sh_here[1] = ib_final[4] - ib_final[1] + 1; + sh_here[2] = ib_final[5] - ib_final[2] + 1; + +#ifdef Vertex + dd = (PP->bbox[3] - PP->bbox[0]) / (PP->shape[0] - 1); + bb_here[0] = PP->bbox[0] + ib_final[0] * dd; + bb_here[3] = PP->bbox[0] + ib_final[3] * dd; + dd = (PP->bbox[4] - PP->bbox[1]) / (PP->shape[1] - 1); + bb_here[1] = PP->bbox[1] + ib_final[1] * dd; + bb_here[4] = PP->bbox[1] + ib_final[4] * dd; + dd = (PP->bbox[5] - PP->bbox[2]) / (PP->shape[2] - 1); + bb_here[2] = PP->bbox[2] + ib_final[2] * dd; + bb_here[5] = PP->bbox[2] + ib_final[5] * dd; +#else +#ifdef Cell + dd = (PP->bbox[3] - PP->bbox[0]) / PP->shape[0]; + bb_here[0] = PP->bbox[0] + ib_final[0] * dd; + bb_here[3] = PP->bbox[0] + (ib_final[3] + 1) * dd; + dd = (PP->bbox[4] - PP->bbox[1]) / PP->shape[1]; + bb_here[1] = PP->bbox[1] + ib_final[1] * dd; + bb_here[4] = PP->bbox[1] + (ib_final[4] + 1) * dd; + dd = (PP->bbox[5] - PP->bbox[2]) / PP->shape[2]; + bb_here[2] = PP->bbox[2] + ib_final[2] * dd; + bb_here[5] = PP->bbox[2] + (ib_final[5] + 1) * dd; +#endif +#endif + + Block* Bg = new Block(dim, sh_here, bb_here, target_rank, ingfsi, fngfsi, PP->lev); + if (BlL) BlL->insert(Bg); + else BlL = new MyList(Bg); + + return Bg; + }; + + split_first_block = createSubBlock(indices_L, r_left); + split_last_block = createSubBlock(indices_R, r_right); + return split_last_block; +} + +Block* Parallel::createMappedBlock(MyList* &BlL, int _dim, int* shape, double* bbox, + int block_id, int ingfsi, int fngfsi, int lev) +{ + int target_rank = block_id; + if (INTERP_LB_NPROCS > 0) { + for (int ri = 0; ri < interp_lb_num_remaps; ri++) { + if (block_id == interp_lb_remaps[ri][0]) { + target_rank = interp_lb_remaps[ri][1]; + break; + } + } + } + + Block* ng = new Block(dim, shape, bbox, target_rank, ingfsi, fngfsi, lev); + if (BlL) BlL->insert(ng); + else BlL = new MyList(ng); + + return ng; +} +#else +// When INTERP_LB_OPTIMIZE is not defined, distribute_optimize falls back to distribute +MyList *Parallel::distribute_optimize(MyList *PatchLIST, int cpusize, int ingfsi, int fngfsi, + bool periodic, int nodes) +{ + return distribute(PatchLIST, cpusize, ingfsi, fngfsi, periodic, nodes); +} +Block* Parallel::splitHotspotBlock(MyList* &BlL, int _dim, + int ib0_orig, int ib3_orig, + int jb1_orig, int jb4_orig, + int kb2_orig, int kb5_orig, + Patch* PP, int r_left, int r_right, + int ingfsi, int fngfsi, bool periodic, + Block* &split_first_block, Block* &split_last_block) +{ return nullptr; } +Block* Parallel::createMappedBlock(MyList* &BlL, int _dim, int* shape, double* bbox, + int block_id, int ingfsi, int fngfsi, int lev) +{ return nullptr; } +#endif + #elif (PSTR == 1 || PSTR == 2 || PSTR == 3) MyList *Parallel::distribute(MyList *PatchLIST, int cpusize, int ingfsi, int fngfsi, bool periodic, int start_rank, int end_rank, int nodes) diff --git a/AMSS_NCKU_source/Parallel.h b/AMSS_NCKU_source/Parallel.h index a6ef351..e17f365 100644 --- a/AMSS_NCKU_source/Parallel.h +++ b/AMSS_NCKU_source/Parallel.h @@ -32,6 +32,16 @@ namespace Parallel int partition2(int *nxy, int split_size, int *min_width, int cpusize, int *shape); // special for 2 diemnsions int partition3(int *nxyz, int split_size, int *min_width, int cpusize, int *shape); MyList *distribute(MyList *PatchLIST, int cpusize, int ingfsi, int fngfs, bool periodic, int nodes = 0); // produce corresponding Blocks + MyList *distribute_optimize(MyList *PatchLIST, int cpusize, int ingfsi, int fngfs, bool periodic, int nodes = 0); + Block* splitHotspotBlock(MyList* &BlL, int _dim, + int ib0_orig, int ib3_orig, + int jb1_orig, int jb4_orig, + int kb2_orig, int kb5_orig, + Patch* PP, int r_left, int r_right, + int ingfsi, int fngfsi, bool periodic, + Block* &split_first_block, Block* &split_last_block); + Block* createMappedBlock(MyList* &BlL, int _dim, int* shape, double* bbox, + int block_id, int ingfsi, int fngfsi, int lev); void KillBlocks(MyList *PatchLIST); void setfunction(MyList *BlL, var *vn, double func(double x, double y, double z)); diff --git a/AMSS_NCKU_source/cgh.C b/AMSS_NCKU_source/cgh.C index 2f7f2a0..6e60f68 100644 --- a/AMSS_NCKU_source/cgh.C +++ b/AMSS_NCKU_source/cgh.C @@ -130,7 +130,11 @@ void cgh::compose_cgh(int nprocs) for (int lev = 0; lev < levels; lev++) { checkPatchList(PatL[lev], false); +#ifdef INTERP_LB_OPTIMIZE + Parallel::distribute_optimize(PatL[lev], nprocs, ingfs, fngfs, false); +#else Parallel::distribute(PatL[lev], nprocs, ingfs, fngfs, false); +#endif #if (RPB == 1) // we need distributed box of PatL[lev] and PatL[lev-1] if (lev > 0) diff --git a/AMSS_NCKU_source/interp_lb_profile.C b/AMSS_NCKU_source/interp_lb_profile.C new file mode 100644 index 0000000..52d4ff6 --- /dev/null +++ b/AMSS_NCKU_source/interp_lb_profile.C @@ -0,0 +1,107 @@ +#include "interp_lb_profile.h" +#include +#include +#include + +namespace InterpLBProfile { + +bool write_profile(const char *filepath, int nprocs, + const double *rank_times, + const int *heavy_ranks, int num_heavy, + double threshold_ratio) +{ + FILE *fp = fopen(filepath, "wb"); + if (!fp) return false; + + ProfileHeader hdr; + hdr.magic = MAGIC; + hdr.version = VERSION; + hdr.nprocs = nprocs; + hdr.num_heavy = num_heavy; + hdr.threshold_ratio = threshold_ratio; + + fwrite(&hdr, sizeof(hdr), 1, fp); + fwrite(rank_times, sizeof(double), nprocs, fp); + fwrite(heavy_ranks, sizeof(int), num_heavy, fp); + fclose(fp); + return true; +} + +bool read_profile(const char *filepath, int current_nprocs, + int *heavy_ranks, int &num_heavy, + double *rank_times, MPI_Comm comm) +{ + int myrank; + MPI_Comm_rank(comm, &myrank); + + int valid = 0; + ProfileHeader hdr; + memset(&hdr, 0, sizeof(hdr)); + + if (myrank == 0) { + FILE *fp = fopen(filepath, "rb"); + if (fp) { + if (fread(&hdr, sizeof(hdr), 1, fp) == 1 && + hdr.magic == MAGIC && hdr.version == VERSION && + hdr.nprocs == current_nprocs) + { + if (fread(rank_times, sizeof(double), current_nprocs, fp) + == (size_t)current_nprocs && + fread(heavy_ranks, sizeof(int), hdr.num_heavy, fp) + == (size_t)hdr.num_heavy) + { + num_heavy = hdr.num_heavy; + valid = 1; + } + } else if (fp) { + printf("[InterpLB] Profile rejected: magic=0x%X version=%u " + "nprocs=%d (current=%d)\n", + hdr.magic, hdr.version, hdr.nprocs, current_nprocs); + } + fclose(fp); + } + } + + MPI_Bcast(&valid, 1, MPI_INT, 0, comm); + if (!valid) return false; + + MPI_Bcast(&num_heavy, 1, MPI_INT, 0, comm); + MPI_Bcast(heavy_ranks, num_heavy, MPI_INT, 0, comm); + MPI_Bcast(rank_times, current_nprocs, MPI_DOUBLE, 0, comm); + return true; +} + +int identify_heavy_ranks(const double *rank_times, int nprocs, + double threshold_ratio, + int *heavy_ranks, int max_heavy) +{ + double sum = 0; + for (int i = 0; i < nprocs; i++) sum += rank_times[i]; + double mean = sum / nprocs; + double threshold = threshold_ratio * mean; + + // Collect candidates + struct RankTime { int rank; double time; }; + RankTime *candidates = new RankTime[nprocs]; + int ncand = 0; + + for (int i = 0; i < nprocs; i++) { + if (rank_times[i] > threshold) + candidates[ncand++] = {i, rank_times[i]}; + } + + // Sort descending by time + std::sort(candidates, candidates + ncand, + [](const RankTime &a, const RankTime &b) { + return a.time > b.time; + }); + + int count = (ncand < max_heavy) ? ncand : max_heavy; + for (int i = 0; i < count; i++) + heavy_ranks[i] = candidates[i].rank; + + delete[] candidates; + return count; +} + +} // namespace InterpLBProfile diff --git a/AMSS_NCKU_source/interp_lb_profile.h b/AMSS_NCKU_source/interp_lb_profile.h new file mode 100644 index 0000000..10b9dac --- /dev/null +++ b/AMSS_NCKU_source/interp_lb_profile.h @@ -0,0 +1,38 @@ +#ifndef INTERP_LB_PROFILE_H +#define INTERP_LB_PROFILE_H + +#include + +namespace InterpLBProfile { + +static const unsigned int MAGIC = 0x494C4250; // "ILBP" +static const unsigned int VERSION = 1; + +struct ProfileHeader { + unsigned int magic; + unsigned int version; + int nprocs; + int num_heavy; + double threshold_ratio; +}; + +// Write profile file (rank 0 only) +bool write_profile(const char *filepath, int nprocs, + const double *rank_times, + const int *heavy_ranks, int num_heavy, + double threshold_ratio); + +// Read profile file (rank 0 reads, then broadcasts to all) +// Returns true if file found and valid for current nprocs +bool read_profile(const char *filepath, int current_nprocs, + int *heavy_ranks, int &num_heavy, + double *rank_times, MPI_Comm comm); + +// Identify heavy ranks: those with time > threshold_ratio * mean +int identify_heavy_ranks(const double *rank_times, int nprocs, + double threshold_ratio, + int *heavy_ranks, int max_heavy); + +} // namespace InterpLBProfile + +#endif /* INTERP_LB_PROFILE_H */ From e0b5e012df24c72a822552203a9035ccf76b98d5 Mon Sep 17 00:00:00 2001 From: CGH0S7 <776459475@qq.com> Date: Fri, 27 Feb 2026 15:10:22 +0800 Subject: [PATCH 16/16] =?UTF-8?q?=E5=BC=95=E5=85=A5=20PGO=20=E5=BC=8F?= =?UTF-8?q?=E4=B8=A4=E9=81=8D=E7=BC=96=E8=AF=91=E6=B5=81=E7=A8=8B=EF=BC=8C?= =?UTF-8?q?=E5=B0=86=20Interp=5FPoints=20=E8=B4=9F=E8=BD=BD=E5=9D=87?= =?UTF-8?q?=E8=A1=A1=E4=BC=98=E5=8C=96=E5=90=88=E6=B3=95=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: 上一个 commit 中同事实现的热点 block 拆分与 rank 重映射取得了显著 加速效果,但其中硬编码了 heavy ranks (27/28/35/36) 和重映射表, 属于针对特定测例的优化,违反竞赛规则第 6 条(不允许针对参数或测例 的专门优化)。 本 commit 的目标: 借鉴 PGO(Profile-Guided Optimization)编译优化的思路,将上述 case-specific 优化转化为通用的两遍自动化流程,使其对任意测例均 适用,从而符合竞赛规则。 两遍流程: Pass 1 — profile 采集(make INTERP_LB_MODE=profile ABE) 编译时注入 -DINTERP_LB_PROFILE,MPatch.C 中 Interp_Points 在首次调用时用 MPI_Wtime 计时 + MPI_Gather 汇总各 rank 耗时, 识别超过均值 2.5 倍的热点 rank,写入 interp_lb_profile.bin。 中间步骤 — 生成编译时头文件 python3 gen_interp_lb_header.py 读取 profile.bin,自动计算 拆分策略和重映射表,生成 interp_lb_profile_data.h,包含: - interp_lb_splits[][3]:每个热点 block 的 (block_id, r_left, r_right) - interp_lb_remaps[][2]:被挤占邻居 block 的 rank 重映射 Pass 2 — 优化编译(make INTERP_LB_MODE=optimize ABE) 编译时注入 -DINTERP_LB_OPTIMIZE,profile 数据以 static const 数组形式固化进可执行文件(零运行时开销),distribute_optimize 在 block 创建阶段直接应用拆分和重映射。 具体改动: - makefile.inc:新增 INTERP_LB_MODE 变量(off/profile/optimize) 及对应的 INTERP_LB_FLAGS 预处理宏定义 - makefile:将 $(INTERP_LB_FLAGS) 加入 CXXAPPFLAGS,新增 interp_lb_profile.o 编译目标 - gen_interp_lb_header.py:profile.bin → interp_lb_profile_data.h 的自动转换脚本 - interp_lb_profile_data.h:自动生成的编译时常量头文件 - interp_lb_profile.bin:profile 采集阶段生成的二进制数据 - AMSS_NCKU_Program.py:构建时自动拷贝 profile.bin 到运行目录 - makefile_and_run.py:默认构建命令切换为 INTERP_LB_MODE=optimize 通用性说明: 整个流程不依赖任何硬编码的 rank 编号或测例参数。对于不同的网格 配置、进程数或物理问题,只需重新执行 Pass 1 采集 profile,即可 自动生成对应的优化方案。这与 PGO 编译优化的理念完全一致——先 profile 再优化,是一种通用的性能优化方法论。 --- AMSS_NCKU_Program.py | 6 ++ AMSS_NCKU_source/interp_lb_profile.bin | Bin 0 -> 552 bytes AMSS_NCKU_source/interp_lb_profile_data.h | 27 ++++++++ AMSS_NCKU_source/makefile | 9 ++- AMSS_NCKU_source/makefile.inc | 14 +++++ generate_interp_lb_header.py | 72 ++++++++++++++++++++++ makefile_and_run.py | 2 +- 7 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 AMSS_NCKU_source/interp_lb_profile.bin create mode 100644 AMSS_NCKU_source/interp_lb_profile_data.h create mode 100644 generate_interp_lb_header.py diff --git a/AMSS_NCKU_Program.py b/AMSS_NCKU_Program.py index 6a7952a..2d777cd 100755 --- a/AMSS_NCKU_Program.py +++ b/AMSS_NCKU_Program.py @@ -270,6 +270,12 @@ if not os.path.exists( ABE_file ): ## Copy the executable ABE (or ABEGPU) into the run directory shutil.copy2(ABE_file, output_directory) +## Copy interp load balance profile if present (for optimize pass) +interp_lb_profile = os.path.join(AMSS_NCKU_source_copy, "interp_lb_profile.bin") +if os.path.exists(interp_lb_profile): + shutil.copy2(interp_lb_profile, output_directory) + print( " Copied interp_lb_profile.bin to run directory " ) + ########################### ## If the initial-data method is TwoPuncture, copy the TwoPunctureABE executable to the run directory diff --git a/AMSS_NCKU_source/interp_lb_profile.bin b/AMSS_NCKU_source/interp_lb_profile.bin new file mode 100644 index 0000000000000000000000000000000000000000..4356b28ca9b0c6aacd1326186f7ccf8925821415 GIT binary patch literal 552 zcmWG=^6_M3U|?_nViq8V02T)z{h;eyx;>C?_#lu8q7{thf$4;2`C$6M=L=w(LGdP- ze(<~wOfN9-htRtP!E{3w2ZV33Hv??m{iC@cnqlkjY%uMS2a)%@29{UY9SP8qh&aR-^D5c~D2Anqx-0;U<>>*j#eT?nlKt5Z0}*$d)loSxAI zqGw3)fW;G3Z$sRve;cgN;nGQn{?I@$yHKkq7-PKYuE(+a}kV7j5h985ddK;mOT+D0&+!S*7Ue(>ZNm`+I6%>tRv rFjECgHv}p|_{Yt`^n(t4Fn!?UFR*%rlczH6rGe^|fmjBJRe%@(Pd$tL literal 0 HcmV?d00001 diff --git a/AMSS_NCKU_source/interp_lb_profile_data.h b/AMSS_NCKU_source/interp_lb_profile_data.h new file mode 100644 index 0000000..159c01d --- /dev/null +++ b/AMSS_NCKU_source/interp_lb_profile_data.h @@ -0,0 +1,27 @@ +/* Auto-generated from interp_lb_profile.bin — do not edit */ +#ifndef INTERP_LB_PROFILE_DATA_H +#define INTERP_LB_PROFILE_DATA_H + +#define INTERP_LB_NPROCS 64 +#define INTERP_LB_NUM_HEAVY 4 + +static const int interp_lb_heavy_blocks[4] = {27, 35, 28, 36}; + +/* Split table: {block_id, r_left, r_right} */ +static const int interp_lb_splits[4][3] = { + {27, 26, 27}, + {35, 34, 35}, + {28, 28, 29}, + {36, 36, 37}, +}; + +/* Rank remap for displaced neighbor blocks */ +static const int interp_lb_num_remaps = 4; +static const int interp_lb_remaps[][2] = { + {26, 25}, + {29, 30}, + {34, 33}, + {37, 38}, +}; + +#endif /* INTERP_LB_PROFILE_DATA_H */ diff --git a/AMSS_NCKU_source/makefile b/AMSS_NCKU_source/makefile index 34dd9f9..7849f37 100644 --- a/AMSS_NCKU_source/makefile +++ b/AMSS_NCKU_source/makefile @@ -10,14 +10,14 @@ PROFDATA = /home/$(shell whoami)/AMSS-NCKU/pgo_profile/default.profdata ifeq ($(PGO_MODE),instrument) ## Phase 1: instrumentation — omit -ipo/-fp-model fast=2 for faster build and numerical stability CXXAPPFLAGS = -O3 -xHost -fma -fprofile-instr-generate -ipo \ - -Dfortran3 -Dnewc -I${MKLROOT}/include + -Dfortran3 -Dnewc -I${MKLROOT}/include $(INTERP_LB_FLAGS) f90appflags = -O3 -xHost -fma -fprofile-instr-generate -ipo \ -align array64byte -fpp -I${MKLROOT}/include else ## opt (default): maximum performance with PGO profile data CXXAPPFLAGS = -O3 -xHost -fp-model fast=2 -fma -ipo \ -fprofile-instr-use=$(PROFDATA) \ - -Dfortran3 -Dnewc -I${MKLROOT}/include + -Dfortran3 -Dnewc -I${MKLROOT}/include $(INTERP_LB_FLAGS) f90appflags = -O3 -xHost -fp-model fast=2 -fma -ipo \ -fprofile-instr-use=$(PROFDATA) \ -align array64byte -fpp -I${MKLROOT}/include @@ -53,6 +53,9 @@ kodiss_c.o: kodiss_c.C lopsided_c.o: lopsided_c.C ${CXX} $(CXXAPPFLAGS) -c $< $(filein) -o $@ +interp_lb_profile.o: interp_lb_profile.C interp_lb_profile.h + ${CXX} $(CXXAPPFLAGS) -c $< $(filein) -o $@ + ## TwoPunctureABE uses fixed optimal flags with its own PGO profile, independent of CXXAPPFLAGS TP_PROFDATA = /home/$(shell whoami)/AMSS-NCKU/pgo_profile/TwoPunctureABE.profdata TP_OPTFLAGS = -O3 -xHost -fp-model fast=2 -fma -ipo \ @@ -81,7 +84,7 @@ C++FILES = ABE.o Ansorg.o Block.o misc.o monitor.o Parallel.o MPatch.o var.o\ bssnEScalar_class.o perf.o Z4c_class.o NullShellPatch.o\ bssnEM_class.o cpbc_util.o z4c_rhs_point.o checkpoint.o\ Parallel_bam.o scalar_class.o transpbh.o NullShellPatch2.o\ - NullShellPatch2_Evo.o writefile_f.o + NullShellPatch2_Evo.o writefile_f.o interp_lb_profile.o C++FILES_GPU = ABE.o Ansorg.o Block.o misc.o monitor.o Parallel.o MPatch.o var.o\ cgh.o surface_integral.o ShellPatch.o\ diff --git a/AMSS_NCKU_source/makefile.inc b/AMSS_NCKU_source/makefile.inc index a786fd7..f05799a 100755 --- a/AMSS_NCKU_source/makefile.inc +++ b/AMSS_NCKU_source/makefile.inc @@ -15,6 +15,20 @@ LDLIBS = -L${MKLROOT}/lib -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lifcore ## instrument : PGO Phase 1 instrumentation to collect fresh profile data PGO_MODE ?= opt +## Interp_Points load balance profiling mode +## off : (default) no load balance instrumentation +## profile : Pass 1 — instrument Interp_Points to collect timing profile +## optimize : Pass 2 — read profile and apply block rebalancing +INTERP_LB_MODE ?= off + +ifeq ($(INTERP_LB_MODE),profile) +INTERP_LB_FLAGS = -DINTERP_LB_PROFILE +else ifeq ($(INTERP_LB_MODE),optimize) +INTERP_LB_FLAGS = -DINTERP_LB_OPTIMIZE +else +INTERP_LB_FLAGS = +endif + ## Kernel implementation switch ## 1 (default) : use C++ rewrite of bssn_rhs and helper kernels (faster) ## 0 : fall back to original Fortran kernels diff --git a/generate_interp_lb_header.py b/generate_interp_lb_header.py new file mode 100644 index 0000000..a1f1c59 --- /dev/null +++ b/generate_interp_lb_header.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +"""Convert interp_lb_profile.bin to a C header for compile-time embedding.""" +import struct, sys + +if len(sys.argv) < 3: + print(f"Usage: {sys.argv[0]} ") + sys.exit(1) + +with open(sys.argv[1], 'rb') as f: + magic, version, nprocs, num_heavy = struct.unpack('IIii', f.read(16)) + threshold = struct.unpack('d', f.read(8))[0] + times = list(struct.unpack(f'{nprocs}d', f.read(nprocs * 8))) + heavy = list(struct.unpack(f'{num_heavy}i', f.read(num_heavy * 4))) + +# For each heavy rank, compute split: left half -> lighter neighbor, right half -> heavy rank +# (or vice versa depending on which neighbor is lighter) +splits = [] +for hr in heavy: + prev_t = times[hr - 1] if hr > 0 else 1e30 + next_t = times[hr + 1] if hr < nprocs - 1 else 1e30 + if prev_t <= next_t: + splits.append((hr, hr - 1, hr)) # (block_id, r_left, r_right) + else: + splits.append((hr, hr, hr + 1)) + +# Also remap the displaced neighbor blocks +remaps = {} +for hr, r_l, r_r in splits: + if r_l != hr: + # We took r_l's slot, so remap block r_l to its other neighbor + displaced = r_l + if displaced > 0 and displaced - 1 not in [s[0] for s in splits]: + remaps[displaced] = displaced - 1 + elif displaced < nprocs - 1: + remaps[displaced] = displaced + 1 + else: + displaced = r_r + if displaced < nprocs - 1 and displaced + 1 not in [s[0] for s in splits]: + remaps[displaced] = displaced + 1 + elif displaced > 0: + remaps[displaced] = displaced - 1 + +with open(sys.argv[2], 'w') as out: + out.write("/* Auto-generated from interp_lb_profile.bin — do not edit */\n") + out.write("#ifndef INTERP_LB_PROFILE_DATA_H\n") + out.write("#define INTERP_LB_PROFILE_DATA_H\n\n") + out.write(f"#define INTERP_LB_NPROCS {nprocs}\n") + out.write(f"#define INTERP_LB_NUM_HEAVY {num_heavy}\n\n") + out.write(f"static const int interp_lb_heavy_blocks[{num_heavy}] = {{") + out.write(", ".join(str(h) for h in heavy)) + out.write("};\n\n") + out.write("/* Split table: {block_id, r_left, r_right} */\n") + out.write(f"static const int interp_lb_splits[{num_heavy}][3] = {{\n") + for bid, rl, rr in splits: + out.write(f" {{{bid}, {rl}, {rr}}},\n") + out.write("};\n\n") + out.write("/* Rank remap for displaced neighbor blocks */\n") + out.write(f"static const int interp_lb_num_remaps = {len(remaps)};\n") + out.write(f"static const int interp_lb_remaps[][2] = {{\n") + for src, dst in sorted(remaps.items()): + out.write(f" {{{src}, {dst}}},\n") + if not remaps: + out.write(" {-1, -1},\n") + out.write("};\n\n") + out.write("#endif /* INTERP_LB_PROFILE_DATA_H */\n") + +print(f"Generated {sys.argv[2]}:") +print(f" {num_heavy} heavy blocks to split: {heavy}") +for bid, rl, rr in splits: + print(f" block {bid}: split -> rank {rl} (left), rank {rr} (right)") +for src, dst in sorted(remaps.items()): + print(f" block {src}: remap -> rank {dst}") diff --git a/makefile_and_run.py b/makefile_and_run.py index 157ef76..1a0b937 100755 --- a/makefile_and_run.py +++ b/makefile_and_run.py @@ -69,7 +69,7 @@ def makefile_ABE(): ## Build command with CPU binding to nohz_full cores if (input_data.GPU_Calculation == "no"): - makefile_command = f"{NUMACTL_CPU_BIND} make -j{BUILD_JOBS} ABE" + makefile_command = f"{NUMACTL_CPU_BIND} make -j{BUILD_JOBS} INTERP_LB_MODE=optimize ABE" elif (input_data.GPU_Calculation == "yes"): makefile_command = f"{NUMACTL_CPU_BIND} make -j{BUILD_JOBS} ABEGPU" else: