88 std::ifstream
meminfo(
"/proc/meminfo");
93 if (
line.find(
"MemTotal:") == 0) {
112 const double KB = 1024.0;
113 const double MB =
KB * 1024.0;
114 const double GB =
MB * 1024.0;
115 const double TB =
GB * 1024.0;
117 std::ostringstream
oss;
169template <
typename WorldType>
170inline void report_memory_usage(
const MemoryUsage &
usage,
const WorldType &world,
173 int rank = pfc::mpi::get_comm_rank(comm);
174 int num_ranks = pfc::mpi::get_comm_size(comm);
178 usage.total_bytes()};
179 size_t global_mem[3] = {0, 0, 0};
181 MPI_Reduce(local_mem, global_mem, 3, MPI_UNSIGNED_LONG_LONG, MPI_SUM, 0, comm);
185 log_info(logger,
"");
186 log_info(logger,
"=== Memory Usage Report ===");
189 std::ostringstream rank_msg;
190 rank_msg <<
" Rank 0 - Application: " <<
format_bytes(usage.m_application_bytes)
193 log_info(logger, rank_msg.str());
196 std::ostringstream global_msg;
197 global_msg <<
" Global Total: " <<
format_bytes(global_mem[2]) <<
" ("
198 << num_ranks <<
" ranks)";
199 log_info(logger, global_msg.str());
202 auto [Nx, Ny, Nz] = get_size(world);
203 size_t total_voxels =
static_cast<size_t>(Nx) * Ny * Nz;
204 double mem_per_voxel =
static_cast<double>(global_mem[2]) / total_voxels;
206 std::ostringstream voxel_msg;
207 voxel_msg <<
" Per Voxel: " <<
format_bytes(
static_cast<size_t>(mem_per_voxel))
208 <<
"/voxel (" << total_voxels <<
" voxels)";
209 log_info(logger, voxel_msg.str());
213 if (system_mem > 0) {
214 double usage_pct = (
static_cast<double>(global_mem[2]) / system_mem) * 100.0;
215 std::ostringstream sys_msg;
216 sys_msg <<
" System Memory: " <<
format_bytes(system_mem)
217 <<
", Usage: " << std::fixed << std::setprecision(1) << usage_pct
219 log_info(logger, sys_msg.str());
222 log_info(logger,
"===========================");
223 log_info(logger,
"");
Minimal structured logging utilities for OpenPFC.
size_t get_system_memory_bytes() noexcept
Attempt to read total system memory from /proc/meminfo.
Definition memory_reporter.hpp:87
std::string format_bytes(size_t bytes)
Format bytes as human-readable string (KB, MB, GB, TB)
Definition memory_reporter.hpp:111
MPI utilities and wrappers.
Lightweight logger configuration.
Definition logging.hpp:29
Memory usage statistics for a single MPI rank.
Definition memory_reporter.hpp:65
size_t m_application_bytes
Memory allocated by user application (bytes)
Definition memory_reporter.hpp:66
size_t m_fft_bytes
Memory allocated by FFT library (bytes)
Definition memory_reporter.hpp:67
size_t total_bytes() const noexcept
Calculate total memory usage.
Definition memory_reporter.hpp:73
Represents the global simulation domain (the "world").
Definition world.hpp:91
General utility functions.
World class definition and unified interface.
World query and coordinate transformation functions.