MAIA bb96820c
Multiphysics at AIA
Loading...
Searching...
No Matches
timer.h File Reference

Go to the source code of this file.

Classes

class  MTimers
 MTimers manages all MAIA Timers and allows primitive profiling. More...
 
struct  MTimers::Timer
 
class  FunctionTiming
 This class counts the static execution time of a function. More...
 
class  Profile
 This class collects all function timings and produces a profiling for certain areas of the code. More...
 

Functions

MTimerstimers ()
 
MBool operator< (const FunctionTiming &a, const FunctionTiming &b)
 
void logDuration_ (const MFloat timeStart, const MString module, const MString comment, const MPI_Comm comm, const MInt domainId, const MInt noDomains)
 Output the min/max/average duration of a code section over the ranks in a communicator Note: only use this function for timing initialization steps or similar due to the blocking MPI_Allreduce operations involved. Instead use logDurations() to assemble a vector of durations first and evaluate at once. More...
 
void logDurations (std::vector< std::pair< MFloat, MString > > &durations, const MString module, const MPI_Comm comm, const MInt domainId, const MInt noDomains)
 Output the min/max/average durations of provided timed code sections over the ranks in a communicator. More...
 

Variables

InfoOutFile m_log
 
InfoOutFile maia_res
 

Function Documentation

◆ logDuration_()

void logDuration_ ( const MFloat  timeStart,
const MString  module,
const MString  comment,
const MPI_Comm  comm,
const MInt  domainId,
const MInt  noDomains 
)
Parameters
[in]timeStartstart time obtained with wallTime()/MPI_Wtime() to compute difference to

Definition at line 171 of file timer.cpp.

172 {
173 const MFloat duration = wallTime() - timeStart;
174
175 std::vector<std::pair<MFloat, MString>> durations{};
176 durations.push_back(std::make_pair(duration, comment));
177 logDurations(durations, module, comm, domainId, noDomains);
178}
MFloat wallTime()
Definition: functions.h:80
double MFloat
Definition: maiatypes.h:52
void logDurations(std::vector< std::pair< MFloat, MString > > &durations, const MString module, const MPI_Comm comm, const MInt domainId, const MInt noDomains)
Output the min/max/average durations of provided timed code sections over the ranks in a communicator...
Definition: timer.cpp:182

◆ logDurations()

void logDurations ( std::vector< std::pair< MFloat, MString > > &  durations,
const MString  module,
const MPI_Comm  comm,
const MInt  domainId,
const MInt  noDomains 
)

Definition at line 182 of file timer.cpp.

183 {
184 const MInt noDurations = durations.size();
185
186 std::vector<MFloat> maxDurations(noDurations);
187 for(MInt i = 0; i < noDurations; i++) {
188 maxDurations[i] = durations[i].first;
189 }
190 // Copy durations vector
191 std::vector<MFloat> minDurations = maxDurations;
192 std::vector<MFloat> sumDurations = maxDurations;
193
194 // Compute max, min and sum of durations over all involved ranks
195 MPI_Allreduce(MPI_IN_PLACE, &maxDurations[0], noDurations, maia::type_traits<MFloat>::mpiType(), MPI_MAX, comm, AT_,
196 "MPI_IN_PLACE", "maxDurations");
197 MPI_Allreduce(MPI_IN_PLACE, &minDurations[0], noDurations, maia::type_traits<MFloat>::mpiType(), MPI_MIN, comm, AT_,
198 "MPI_IN_PLACE", "minDurations");
199 MPI_Allreduce(MPI_IN_PLACE, &sumDurations[0], noDurations, maia::type_traits<MFloat>::mpiType(), MPI_SUM, comm, AT_,
200 "MPI_IN_PLACE", "sumDurations");
201
202 const MInt maxLineLength = 256;
203 MChar b[maxLineLength];
204 for(MInt i = 0; i < noDurations; i++) {
205 const MString comment = durations[i].second;
206 snprintf(b, maxLineLength, "=== MAIA %s DURATION: %-35s | min: %.4e s | avg: %.4e s | max: %.4e s |",
207 module.c_str(), comment.c_str(), minDurations[i], sumDurations[i] / (MFloat)noDomains, maxDurations[i]);
208 if(domainId == 0) {
209 std::cerr << b << std::endl;
210 }
211 m_log << b << std::endl;
212 }
213}
InfoOutFile m_log
int32_t MInt
Definition: maiatypes.h:62
std::basic_string< char > MString
Definition: maiatypes.h:55
char MChar
Definition: maiatypes.h:56
int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, const MString &name, const MString &sndvarname, const MString &rcvvarname)
same as MPI_Allreduce

◆ operator<()

MBool operator< ( const FunctionTiming a,
const FunctionTiming b 
)

Definition at line 27 of file timer.cpp.

27 {
28 if(approx(a.getDeltaCpuTime(), b.getDeltaCpuTime(), MFloatEps)) return (a.getInitCpuTime() < b.getInitCpuTime());
29 return (a.getDeltaCpuTime() < b.getDeltaCpuTime());
30}
MBool approx(const T &, const U &, const T)
Definition: functions.h:272
Definition: contexttypes.h:19

◆ timers()

MTimers & timers ( )

Definition at line 170 of file timer.cpp.

19 {
20 static MTimers timers;
21 return timers;
22}
MTimers manages all MAIA Timers and allows primitive profiling.
Definition: timer.h:169
MTimers & timers()
Definition: timer.cpp:19

Variable Documentation

◆ m_log

std::ostream& m_log
extern

Definition at line 34 of file timer.h.

◆ maia_res

std::ostream& maia_res
extern

Definition at line 35 of file timer.h.