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 <i@4t.pw>
This commit is contained in:
copilot-swe-agent[bot]
2026-02-25 12:42:47 +00:00
committed by ianchb
parent 8a9c775705
commit 09b937c022
2 changed files with 80 additions and 80 deletions

View File

@@ -2028,7 +2028,7 @@ void bssn_class::Read_Ansorg()
void bssn_class::Evolve(int Steps) 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; double LastDump = 0.0, LastCheck = 0.0, Last2dDump = 0.0;
LastAnas = 0; LastAnas = 0;
#if 0 #if 0
@@ -2142,7 +2142,7 @@ void bssn_class::Evolve(int Steps)
// { GH->levels=GH->movls; } // { GH->levels=GH->movls; }
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
#if (PSTR == 0) #if (PSTR == 0)
RecursiveStep(0); RecursiveStep(0);
#elif (PSTR == 1 || PSTR == 2 || PSTR == 3) #elif (PSTR == 1 || PSTR == 2 || PSTR == 3)
@@ -2198,10 +2198,10 @@ void bssn_class::Evolve(int Steps)
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << endl; cout << endl;
cout << " Timestep # " << ncount << ": integrating to time: " << PhysTime << " " 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; << " seconds! " << endl;
// cout << endl; // cout << endl;
} }
@@ -2403,15 +2403,15 @@ void bssn_class::RecursiveStep(int lev)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->CS_Inter(StateList, Symmetry); SH->CS_Inter(StateList, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl;
} }
} }
#endif #endif
@@ -2543,15 +2543,15 @@ void bssn_class::ParallelStep()
SHStep(); SHStep();
#if (RPS == 1) #if (RPS == 1)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->CS_Inter(StateList, Symmetry); SH->CS_Inter(StateList, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl;
} }
} }
#endif #endif
@@ -2846,15 +2846,15 @@ void bssn_class::ParallelStep()
#if (RPS == 1) #if (RPS == 1)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->CS_Inter(StateList, Symmetry); SH->CS_Inter(StateList, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) cout << " CS_Inter used " << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
// a_stream.clear(); // a_stream.clear();
@@ -3355,16 +3355,16 @@ void bssn_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->Synch(SynchList_pre, Symmetry); SH->Synch(SynchList_pre, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " Shell stuff synchronization used " cout << " Shell stuff synchronization used "
<< (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
} }
@@ -3715,16 +3715,16 @@ void bssn_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->Synch(SynchList_cor, Symmetry); SH->Synch(SynchList_cor, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " Shell stuff synchronization used " cout << " Shell stuff synchronization used "
<< (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
} }
@@ -3842,15 +3842,15 @@ void bssn_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->CS_Inter(SynchList_cor, Symmetry); SH->CS_Inter(SynchList_cor, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) cout << " CS_Inter used " << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
} }
@@ -4214,16 +4214,16 @@ void bssn_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->Synch(SynchList_pre, Symmetry); SH->Synch(SynchList_pre, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " Shell stuff synchronization used " cout << " Shell stuff synchronization used "
<< (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
} }
@@ -4559,16 +4559,16 @@ void bssn_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->Synch(SynchList_cor, Symmetry); SH->Synch(SynchList_cor, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " Shell stuff synchronization used " cout << " Shell stuff synchronization used "
<< (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
} }
@@ -4679,15 +4679,15 @@ void bssn_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->CS_Inter(SynchList_cor, Symmetry); SH->CS_Inter(SynchList_cor, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) cout << " CS_Inter used " << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
} }
@@ -5476,16 +5476,16 @@ void bssn_class::SHStep()
} }
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->Synch(SynchList_pre, Symmetry); SH->Synch(SynchList_pre, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " Shell stuff synchronization used " cout << " Shell stuff synchronization used "
<< (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
} }
@@ -5653,16 +5653,16 @@ void bssn_class::SHStep()
} }
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->Synch(SynchList_cor, Symmetry); SH->Synch(SynchList_cor, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " Shell stuff synchronization used " cout << " Shell stuff synchronization used "
<< (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
} }
@@ -5698,15 +5698,15 @@ void bssn_class::SHStep()
} }
#if (RPS == 0) #if (RPS == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->CS_Inter(SynchList_cor, Symmetry); SH->CS_Inter(SynchList_cor, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) cout << " CS_Inter used " << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
} }
@@ -7639,9 +7639,9 @@ void bssn_class::AH_Step_Find(int lev, double dT_lev)
} }
if (tf) if (tf)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
prev_clock = clock(); prev_clock = MPI_Wtime();
const int cdumpid = int(PhysTime / AHdumptime) + 1; const int cdumpid = int(PhysTime / AHdumptime) + 1;
for (int ihn = 0; ihn < HN_num; ihn++) for (int ihn = 0; ihn < HN_num; ihn++)
dumpid[ihn] = cdumpid; dumpid[ihn] = cdumpid;
@@ -7720,9 +7720,9 @@ void bssn_class::AH_Step_Find(int lev, double dT_lev)
if (myrank == 0) if (myrank == 0)
{ {
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " Finding horizon used " cout << " Finding horizon used "
<< (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << (curr_clock - prev_clock)
<< " seconds! " << endl; << " seconds! " << endl;
} }
} }

View File

@@ -319,7 +319,7 @@ void scalar_class::Setup_Initial_Data()
} }
void scalar_class::Evolve(int Steps) void scalar_class::Evolve(int Steps)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
double LastDump = 0.0, LastCheck = 0.0; double LastDump = 0.0, LastCheck = 0.0;
LastAnas = 0; LastAnas = 0;
@@ -328,7 +328,7 @@ void scalar_class::Evolve(int Steps)
for (int ncount = 1; ncount < Steps + 1; ncount++) for (int ncount = 1; ncount < Steps + 1; ncount++)
{ {
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
RecursiveStep(0); RecursiveStep(0);
LastDump += dT_mon; LastDump += dT_mon;
@@ -346,9 +346,9 @@ void scalar_class::Evolve(int Steps)
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " Timestep # " << ncount << ": integrating to time: " << PhysTime 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) if (PhysTime >= TotalTime)
break; break;
@@ -549,15 +549,15 @@ void scalar_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->Synch(SynchList_pre, Symmetry); SH->Synch(SynchList_pre, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; 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) << " seconds! " << endl; cout << " Shell stuff synchronization used " << (curr_clock - prev_clock) << " seconds! " << endl;
} }
} }
#endif #endif
@@ -731,15 +731,15 @@ void scalar_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->Synch(SynchList_cor, Symmetry); SH->Synch(SynchList_cor, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; 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) << " seconds! " << endl; cout << " Shell stuff synchronization used " << (curr_clock - prev_clock) << " seconds! " << endl;
} }
} }
#endif #endif
@@ -786,15 +786,15 @@ void scalar_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->CS_Inter(SynchList_cor, Symmetry); SH->CS_Inter(SynchList_cor, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl;
} }
} }
#endif #endif
@@ -1010,15 +1010,15 @@ void scalar_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->Synch(SynchList_cor, Symmetry); SH->Synch(SynchList_cor, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; 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) << " seconds! " << endl; cout << " Shell stuff synchronization used " << (curr_clock - prev_clock) << " seconds! " << endl;
} }
} }
#endif #endif
@@ -1027,15 +1027,15 @@ void scalar_class::Step(int lev, int YN)
#ifdef WithShell #ifdef WithShell
if (lev == 0) if (lev == 0)
{ {
clock_t prev_clock, curr_clock; double prev_clock, curr_clock;
if (myrank == 0) if (myrank == 0)
curr_clock = clock(); curr_clock = MPI_Wtime();
SH->CS_Inter(SynchList_cor, Symmetry); SH->CS_Inter(SynchList_cor, Symmetry);
if (myrank == 0) if (myrank == 0)
{ {
prev_clock = curr_clock; prev_clock = curr_clock;
curr_clock = clock(); curr_clock = MPI_Wtime();
cout << " CS_Inter used " << (double)(curr_clock - prev_clock) / ((double)CLOCKS_PER_SEC) << " seconds! " << endl; cout << " CS_Inter used " << (curr_clock - prev_clock) << " seconds! " << endl;
} }
} }
#endif #endif