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] 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