11#ifndef BENCHMARK_UTILS_H
12#define BENCHMARK_UTILS_H
61 return "solver_type,test_type,n_mpi,n_threads,total_cores,"
62 "n_refinements,poly_degree,n_dofs,n_cells,"
63 "setup_time,assembly_time,solve_time,total_time,"
64 "n_iterations,l2_error,memory_mb,"
65 "dofs_per_second,parallel_efficiency";
72 std::ostringstream oss;
73 oss << std::fixed << std::setprecision(6);
92 : filename(output_file), communicator(comm) {
93 MPI_Comm_rank(comm, &rank);
97 results.push_back(result);
107 std::ofstream ofs(filename);
109 for (
const auto& r : results) {
110 ofs << r.to_csv() <<
"\n";
122 std::cout <<
"\n" << std::string(80,
'=') <<
"\n";
123 std::cout <<
"BENCHMARK SUMMARY\n";
124 std::cout << std::string(80,
'=') <<
"\n\n";
126 std::cout << std::left << std::setw(15) <<
"Solver" << std::setw(10)
127 <<
"MPI" << std::setw(10) <<
"Threads" << std::setw(12)
128 <<
"DoFs" << std::setw(12) <<
"Total(s)" << std::setw(12)
129 <<
"Memory(MB)" << std::setw(15) <<
"DoFs/s"
131 std::cout << std::string(80,
'-') <<
"\n";
133 for (
const auto& r : results) {
134 std::cout << std::left << std::setw(15) << r.solver_type
135 << std::setw(10) << r.n_mpi_processes << std::setw(10)
136 << r.n_threads_per_process << std::setw(12) << r.n_dofs
137 << std::fixed << std::setprecision(3) << std::setw(12)
138 << r.total_time << std::setw(12) << r.memory_mb
139 << std::scientific << std::setprecision(2)
140 << std::setw(15) << r.dofs_per_second <<
"\n";
142 std::cout << std::string(80,
'=') <<
"\n";
146 std::string filename;
147 MPI_Comm communicator;
149 std::vector<BenchmarkResult> results;
157 void start() { start_time = MPI_Wtime(); }
158 void stop() { elapsed = MPI_Wtime() - start_time; }
162 double start_time = 0.0;
163 double elapsed = 0.0;
174 if (tp <= 0 || p <= 0)
176 return t1 / (p * tp);
193 std::ifstream status(
"/proc/self/status");
195 while (std::getline(status, line)) {
196 if (line.substr(0, 6) ==
"VmRSS:") {
197 std::istringstream iss(line.substr(6));
void print_summary() const
Print summary to stdout (only rank 0)
Definition utils.h:118
ResultCollector(const std::string &output_file, MPI_Comm comm)
Definition utils.h:91
void write_csv() const
Write all results to CSV file (only rank 0)
Definition utils.h:103
void add_result(const BenchmarkResult &result)
Definition utils.h:96
High-resolution timer using MPI_Wtime for consistency.
Definition utils.h:155
void start()
Definition utils.h:157
void stop()
Definition utils.h:158
double get_elapsed() const
Definition utils.h:159
double compute_speedup(const double t1, const double tp)
Compute speedup.
Definition utils.h:182
double get_process_memory_mb()
Get memory info from /proc/self/status (Linux specific)
Definition utils.h:191
double compute_efficiency(const double t1, const double tp, int p)
Compute parallel efficiency.
Definition utils.h:173
Structure to hold benchmark results for a single run.
Definition utils.h:27
int polynomial_degree
Definition utils.h:34
double solve_time
Definition utils.h:43
unsigned int n_cells
Definition utils.h:38
double parallel_efficiency
Definition utils.h:55
static std::string csv_header()
Get CSV header line.
Definition utils.h:60
double setup_time
Definition utils.h:41
std::string to_csv() const
Convert result to CSV line.
Definition utils.h:71
std::string solver_type
Definition utils.h:29
double assembly_time
Definition utils.h:42
unsigned int n_dofs
Definition utils.h:37
int n_threads_per_process
Definition utils.h:32
double total_time
Definition utils.h:44
unsigned int n_iterations
Definition utils.h:47
double memory_mb
Definition utils.h:51
double dofs_per_second
Definition utils.h:54
std::string test_type
Definition utils.h:30
double l2_error
Definition utils.h:48
int n_refinements
Definition utils.h:33
int n_mpi_processes
Definition utils.h:31
Configuration for scaling tests.
Definition utils.h:209
int n_timed_runs
Definition utils.h:214
int min_refinements
Definition utils.h:210
bool test_matrix_based
Definition utils.h:215
int max_refinements
Definition utils.h:211
bool test_matrix_free
Definition utils.h:216
int polynomial_degree
Definition utils.h:212
int n_warmup_runs
Definition utils.h:213