www.cemf.ir
MPITimer.cpp
Go to the documentation of this file.
1 #include "MPITimer.hpp"
2 
3 #ifdef pFlow_Build_MPI
4  #include "pFlowProcessors.hpp"
5  #include "procCommunication.hpp"
6 #endif
7 
9 {
10  return accTimersTotalMax();
11 }
12 
13 std::vector<pFlow::real> pFlow::MPITimer::totalTimeAllToAll() const
14 {
15 #ifdef pFlow_Build_MPI
16  MPI::procCommunication comm(pFlowProcessors());
17  auto [totTime, succs] = comm.collectAllToAll(totalTime());
18  return totTime;
19 #else
20  return std::vector<real>(1, totalTime());
21 #endif
22 }
23 
24 std::vector<pFlow::real> pFlow::MPITimer::totalTimeAllToMaster() const
25 {
26 #ifdef pFlow_Build_MPI
27  MPI::procCommunication comm(pFlowProcessors());
28  auto [totTime, succs] = comm.collectAllToMaster(totalTime());
29  return totTime;
30 #else
31  return std::vector<real>(1, totalTime());
32 #endif
33 }
34 
36 {
37  return Timer::averageTimeMax();
38 }
39 
40 std::vector<pFlow::real> pFlow::MPITimer::averageTimeAllToAll() const
41 {
42 #ifdef pFlow_Build_MPI
43  MPI::procCommunication comm(pFlowProcessors());
44  auto [totTime, succs] = comm.collectAllToAll(averageTime());
45  return totTime;
46 #else
47  return std::vector<real>(1, averageTime());
48 #endif
49 }
50 
51 std::vector<pFlow::real> pFlow::MPITimer::averageTimeAllAtoMaster() const
52 {
53 #ifdef pFlow_Build_MPI
54  MPI::procCommunication comm(pFlowProcessors());
55  auto [totTime, succs] = comm.collectAllToMaster(averageTime());
56  return totTime;
57 #else
58  return std::vector<real>(1, averageTime());
59 #endif
60 }
61 
63 {
64  const auto ts = totalTimeAllToAll();
65  auto maxloc = std::distance(ts.begin(), std::max_element(ts.begin(), ts.end()));
66  os<<'(';
67  for(auto i=0; i<ts.size(); i++)
68  {
69  if(maxloc == i)
70  os<<Red_Text(ts[i]);
71  else
72  os<<ts[i];
73 
74  if(i != ts.size()-1)
75  os<<' ';
76  else
77  os<<')'<<endl;
78  }
79 
80  return true;
81 }
82 
83 static pFlow::MPITimer ComputationTimer__{"ComputationTimer"};
84 
86 {
87  return ComputationTimer__;
88 }
pFlow::MPITimer::totalTimeMax
real totalTimeMax() const
Definition: MPITimer.cpp:8
pFlow::real
float real
Definition: builtinTypes.hpp:45
pFlow::Timer::accTimersTotalMax
real accTimersTotalMax() const
Definition: Timer.cpp:30
pFlow::MPITimer::totalTimeAllToAll
std::vector< real > totalTimeAllToAll() const
Definition: MPITimer.cpp:13
pFlow::MPITimer::averageTimeMax
real averageTimeMax() const
Definition: MPITimer.cpp:35
pFlow::endl
iOstream & endl(iOstream &os)
Add newline and flush stream.
Definition: iOstream.hpp:341
pFlow::MPITimer::write
bool write(iOstream &os) const
Definition: MPITimer.cpp:62
Red_Text
#define Red_Text(text)
Definition: iOstream.hpp:39
ComputationTimer__
static pFlow::MPITimer ComputationTimer__
Definition: MPITimer.cpp:83
MPITimer.hpp
pFlow::MPITimer::totalTimeAllToMaster
std::vector< real > totalTimeAllToMaster() const
Definition: MPITimer.cpp:24
pFlow::MPITimer::averageTimeAllToAll
std::vector< real > averageTimeAllToAll() const
Definition: MPITimer.cpp:40
pFlow::pFlowProcessors
localProcessors & pFlowProcessors()
Definition: pFlowProcessors.cpp:5
pFlowProcessors.hpp
pFlow::MPITimer::averageTimeAllAtoMaster
std::vector< real > averageTimeAllAtoMaster() const
Definition: MPITimer.cpp:51
pFlow::Timer::averageTimeMax
real averageTimeMax() const
Definition: Timer.cpp:25
pFlow::iOstream
Interface class for any output stream.
Definition: iOstream.hpp:59
pFlow::ComputationTimer
MPITimer & ComputationTimer()
Definition: MPITimer.cpp:85
pFlow::MPITimer
Definition: MPITimer.hpp:12