26#ifndef dftefeProfiler_h
27#define dftefeProfiler_h
40#include "sys/sysinfo.h"
41#ifdef DFTEFE_WITH_DEVICE
48 template <dftefe::utils::MemorySpace memorySpace>
59 Profiler(
const std::string &profileName =
"");
62 const std::string & profileName =
"");
66 const std::string & profileName =
"");
99 template <dftefe::utils::MemorySpace memorySpace>
102 const std::string message)
111 struct sysinfo memInfo;
113 double totalVirtualMem = memInfo.totalram;
114 totalVirtualMem += memInfo.totalswap;
115 totalVirtualMem *= memInfo.mem_unit;
116 double virtualMemUsed = memInfo.totalram - memInfo.freeram;
117 virtualMemUsed += memInfo.totalswap - memInfo.freeswap;
118 virtualMemUsed *= memInfo.mem_unit;
120 mpi::MPIAllreduceMinMaxAvg<double, utils::MemorySpace::HOST>(
121 virtualMemUsed, mpiComm);
122 const double maxHostBytes = minMaxAvg.max;
126#ifdef DFTEFE_WITH_DEVICE
127 std::size_t freeGPU = 0, totalGPU = 0;
132 double gpuUsed =
static_cast<double>(totalGPU - freeGPU);
133 double gpuTotal =
static_cast<double>(totalGPU);
135 mpi::MPIAllreduceMinMaxAvg<double, utils::MemorySpace::HOST>(
138 << message <<
", CPU: " << maxHostBytes / 1073741824.0
139 <<
" out of " << totalVirtualMem / 1073741824.0
140 <<
" GB, GPU: " << gpuMinMaxAvg.max / 1073741824.0 <<
" out of "
141 << gpuTotal / 1073741824.0 <<
" GB" << std::endl
148 << message <<
", CPU: " << maxHostBytes / 1073741824.0
149 <<
" out of " << totalVirtualMem / 1073741824.0 <<
" GB"
#define DEVICE_API_CHECK(cmd)
Definition: DeviceExceptions.cu.h:21
Provides an interface to print based on whether a certain condition is met or not....
Definition: ConditionalOStream.h:47
void setCondition(const bool active)
Function to set the condition for printing to the output stream associated with this object.
Definition: ConditionalOStream.cpp:48
Definition: Profiler.h:50
void registerEnd(const std::string §ionName="")
Definition: Profiler.t.cpp:128
std::string d_profileName
Definition: Profiler.h:92
size_type getSectionCalls(const std::string §ionName) const
Definition: Profiler.t.cpp:314
Timer d_totalTime
Definition: Profiler.h:91
~Profiler()
Definition: Profiler.t.cpp:65
void registerStart(const std::string §ionName)
Definition: Profiler.t.cpp:76
void reset()
Definition: Profiler.t.cpp:333
std::vector< std::string > d_insertionOrder
Definition: Profiler.h:87
ConditionalOStream d_stream
Definition: Profiler.h:89
Timer getSectionTimer(const std::string §ionName) const
Definition: Profiler.t.cpp:275
double getSectionTotalWallTime(const std::string §ionName) const
Definition: Profiler.t.cpp:294
std::list< std::string > d_activeSections
Definition: Profiler.h:88
std::map< std::string, Section > d_SectionsMap
Definition: Profiler.h:86
const mpi::MPIComm d_mpiComm
Definition: Profiler.h:90
void print() const
Definition: Profiler.t.cpp:174
int MPICommRank(MPIComm comm, int *rank)
Definition: MPIWrapper.cpp:302
int MPIComm
Definition: MPITypes.h:84
int MPIBarrier(MPIComm comm)
Definition: MPIWrapper.cpp:268
cudaError_t deviceError_t
Definition: DeviceTypeConfig.cu.h:26
static void printCurrentMemoryUsage(const utils::mpi::MPIComm &mpiComm, const std::string message)
Definition: Profiler.h:101
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9
Definition: Profiler.h:53
Timer timer
Definition: Profiler.h:54
size_type nCalls
Definition: Profiler.h:56
double totalWallTime
Definition: Profiler.h:55