Block-Structured AMR Software Framework
 
Loading...
Searching...
No Matches
AMReX_CommProfStats.H
Go to the documentation of this file.
1// ----------------------------------------------------------------------
2// CommProfStats.H
3// ----------------------------------------------------------------------
4#ifndef BL_COMMPROFSTATS_H
5#define BL_COMMPROFSTATS_H
6#include <AMReX_Config.H>
7
8#include <AMReX_BLProfStats.H>
9#include <AMReX_BLProfiler.H>
10#include <AMReX_SPACE.H>
11#include <AMReX_Array.H>
12#include <AMReX_Vector.H>
13#include <AMReX_IntVect.H>
14#include <AMReX_Box.H>
15#include <AMReX_FArrayBox.H>
16#include <AMReX_MultiFab.H>
17#include <cstdio>
18#include <iostream>
19#include <fstream>
20#include <string>
21#include <map>
22#include <unordered_map>
23#include <vector>
24#include <stack>
25#include <sstream>
26#include <stdlib.h>
27using std::cout;
28using std::cerr;
29using std::endl;
30using std::vector;
31using std::string;
32using std::multimap;
33
34using amrex::Real;
35
36
37// ----------------------------------------------------------------------
38class CommProfStats : public BLProfStats {
39 public:
40 struct BarrierEntry {
42 : number(-1), name("__uninitialized_Barrier_Entry_name__"),
43 seekIndex(-1), bNameNumber(-1) { }
44 BarrierEntry(long n, const std::string &nm, long i, int bnn)
45 : number(n), name(nm), seekIndex(i), bNameNumber(bnn) { }
46
48
49 long number;
50 std::string name;
53 };
54
56 ReductionEntry(const long n, const long i)
57 : number(n), seekIndex(i) { }
58
60 };
61
62 struct NameTagEntry {
63 NameTagEntry(const long ntindex, const long seekindex)
64 : ntIndex(ntindex), seekIndex(seekindex) { }
65
67 };
68
69 struct DataBlock {
71 : proc(0), size(0), fileName(""), seekpos(0), readoffset(0), nodeName(""),
73 { }
74 DataBlock(const int p, const long s, const std::string &fn, const long sp,
75 const std::string &pn, const int nn, const int si)
76 : proc(p), size(s), fileName(fn), seekpos(sp), readoffset(0), nodeName(pn),
78 { }
79
80 int proc;
81 long size;
82 std::string fileName;
83 long seekpos;
85 std::string nodeName;
88 double timerTime;
90
96 };
97
98 struct SendRecvPair {
99 SendRecvPair(const int sp,
100 const int rp, const int ds, const int tg,
101 const Real st, const Real rt, const Real tt)
102 : fromProc(sp), toProc(rp), dataSize(ds),
103 tag(tg), sendTime(st), recvTime(rt), totalTime(tt) { }
104
107 //BLProfiler::CommFuncType unmatchedCFType;
108
109 bool Matches(int fromproc, int toproc, int size, int mtag) {
110 return(fromproc == fromProc && toproc == toProc &&
111 size == dataSize && mtag == tag);
112 }
113 bool Matches(int fromproc, int toproc, int size) {
114 return(fromproc == fromProc && toproc == toProc &&
115 size == dataSize);
116 }
117 long HashLong() {
118 std::stringstream hss;
119 hss << fromProc << toProc << dataSize << tag;
120 return atol(hss.str().c_str());
121 }
122 inline static long HashLong(int fp, int tp, int t) {
123 return(fp + tp + 64*t);
124 }
125 inline static long HashLong(int fp, int tp, int /*ds*/, int t) {
126 //if(fp < 0 || tp < 0 || ds < 0 || t < 0) {
127 //cout << ":::: HashLong: negative values: fp tp ds t = "
128 //<< fp << " " << tp << " " << ds << " " << t << endl;
129 //}
130 //std::stringstream hss;
134 //return(fp + 100*tp + 1000*ds + 10000*t);
135 //return(fp + tp + 10*ds + 100*t);
136 //return(fp + tp + ds + 10*t);
137 //return(fp + tp + 32*t);
138 return(fp + tp + 64*t);
139 //return(fp + tp + ds + t);
140 }
141 };
142
144 SendRecvPairUnpaired(const amrex::BLProfiler::CommFuncType cft, const int sp,
145 const int rp, const int ds, const int tg,
146 const Real st, const Real rt, const Real tt)
147 : SendRecvPair(sp, rp, ds, tg, st, rt, tt), unmatchedCFType(cft)
148 { }
149
150 amrex::BLProfiler::CommFuncType unmatchedCFType;
151 };
152
153 public:
158 void FillSendFAB(long &totalSends, long &totalSentData,
159 amrex::Vector<long> &totalSendsPerProc,
160 amrex::Vector<long> &totalSentDataPerProc,
161 amrex::FArrayBox &sendFAB, bool proxmap);
162 void ReportSyncPointDataSetup(long &nBMax, long &nRMax);
164 amrex::Vector<amrex::Vector<Real> > &barrierWaitTimes,
165 amrex::Vector<amrex::Vector<Real> > &reductionWaitTimes,
166 bool bDoReductions = false);
167 void ReportStats(long &totalSentData, long &totalNCommStats,
168 amrex::Vector<long> &totalFuncCalls,
169 int bytesPerSlot, amrex::Vector<long> &msgSizes,
170 int &minMsgSize, int &maxMsgSize,
171 Real &timeMin, Real &timeMax, Real &timerTime,
172 amrex::Vector<int> &rankNodeNumbers);
173 void WriteTopoFab();
175 void TimelineFAB(amrex::FArrayBox &timelineFAB, const amrex::Box &probDomain,
176 const BLProfStats::TimeRange tr,
177 const int rankMin, const int rankMax,
178 const int rankStride,
179 const Real ntnMultiplier, const amrex::Vector<Real> &ntnNumbers,
180 const Real bnMultiplier, const amrex::Vector<Real> &bnNumbers);
181 void SendRecvData(const std::string &filename,
182 const double tlo, const double thi);
183 void SendRecvList(std::multimap<Real, SendRecvPairUnpaired> &srMMap);
184 virtual void InitCommDataBlock(const int proc, const long ncommstats,
185 const std::string &filename, const long seekpos,
186 const std::string &nodename = "", const int nodenumber = -1);
187
188 int AfterBarrier(const int proc, const double t);
189
190 virtual void AddBarrier(long bnum, const std::string &bname, long index);
191 virtual void AddReduction(const long rnum, const long index);
192 virtual void AddTimeMinMax(const double tmin, const double tmax);
193 virtual void AddTimerTime(const double tt);
194 virtual void AddNameTag(const long ntnindex, const long seekindex);
195 virtual void AddNameTagName(const std::string &name);
198 virtual void AddTagRange(const long tmin, const long tmax);
199 virtual void AddGridLevel(const int level, const int ngrids);
200 virtual void AddGrid3D(int level, int xlo, int ylo, int zlo,
201 int xhi, int yhi, int zhi,
202 int xc, int yc, int zc,
203 int xn, int yn, int zn, int proc);
204
205 virtual void SetCPVersion(const int cpv) { cpVersion = cpv; }
206 static int GetCPVersion() { return cpVersion; }
207 virtual void SetCSSize(const int css) { csSize = css; }
208 static int GetCSSize() { return csSize; }
209 virtual void AddFinestLevel(const int lev) { finestLevel = lev; }
210 static int GetFinestLevel() { return finestLevel; }
211 virtual void AddMaxLevel(const int lev) { maxLevel = lev; }
212 static int GetMaxLevel() { return maxLevel; }
213 virtual void AddRefRatio(const int lev, const amrex::IntVect &rr);
216 virtual void AddTopoCoord(const int nid, const int node,
217 const int tx, const int ty, const int tz,
218 const bool servicenode = false);
219 virtual void AddProbDomain(const int lev, const amrex::Box &pd);
222 virtual void AddCommHeaderFileName(const std::string &hfn);
223 const std::map<int, long> &GLMap() const { return glMap; }
224 const std::map<int, int> &GLSizeMap() const { return glSizeMap; }
225
226 static void SetInitDataBlocks(bool b) { bInitDataBlocks = b; }
227 static bool InitDBlocks() { return bInitDataBlocks; }
228 static void InitDataFileNames(const amrex::Vector<std::string> &hfn);
229 static void InitProxMap();
231
232 static void OpenAllStreams(const std::string &dirname);
233 static void CloseAllStreams();
234
235 void InitEdisonTopoMF();
236 void WriteEdisonTopoMF();
237 virtual void AddEdisonPID(int X, int Y, int Z,
238 int cab, int row, int cage, int slot,
239 int cpu, int pid);
240
241 bool IsSend(const amrex::BLProfiler::CommFuncType &cft);
242 bool IsRecv(const amrex::BLProfiler::CommFuncType &cft);
243 bool IsBlockingRecv(const amrex::BLProfiler::CommFuncType &cft);
244
245 private:
248 static bool persistentStreams;
250 std::stack<double> nestedTimeStack;
257 std::map<int, long> glMap; // [proc, npoints]
258 std::map<int, int> glSizeMap; // [grid size, ngrids of that size]
259 static bool bInitDataBlocks;
262 static bool bProxMapOK;
264 static std::map<std::string, int> commDataFileNames; // [filename, stream index]
266
267 void ReadCommStats(DataBlock &dBlock); // reads whole block
268 void ReadCommStatsNoOpen(DataBlock &dBlock); // files must be open already
269 bool ReadCommStats(DataBlock &dBlock, const int nmessages); // reads nmessages
270 void ClearCommStats(DataBlock &dBlock);
271
272 // ---- Edison support
273 amrex::Vector<Real> edisonNodeFab; // ---- not a fab yet
274 amrex::Vector<Real> edisonCPUFab; // ---- not a fab yet
276
277 friend int yyparse(void *);
278};
279
280
281std::ostream &operator<<(std::ostream &os, const CommProfStats::BarrierEntry &be);
282
283#endif
284// ----------------------------------------------------------------------
285// ----------------------------------------------------------------------
std::ostream & operator<<(std::ostream &os, const CommProfStats::BarrierEntry &be)
Definition AMReX_CommProfStats.cpp:1891
Definition AMReX_BLProfStats.H:30
Definition AMReX_CommProfStats.H:38
static int GetCSSize()
Definition AMReX_CommProfStats.H:208
const std::map< int, long > & GLMap() const
Definition AMReX_CommProfStats.H:223
static bool persistentStreams
Definition AMReX_CommProfStats.H:248
static void CloseAllStreams()
Definition AMReX_CommProfStats.cpp:412
virtual void SetCSSize(const int css)
Definition AMReX_CommProfStats.H:207
static amrex::Vector< std::string > commHeaderFileNames
Definition AMReX_CommProfStats.H:263
virtual void AddProbDomain(const int lev, const amrex::Box &pd)
Definition AMReX_CommProfStats.cpp:278
friend int yyparse(void *)
void SendRecvList(std::multimap< Real, SendRecvPairUnpaired > &srMMap)
Definition AMReX_CommProfStats.cpp:1140
amrex::Vector< Real > edisonCPUFab
Definition AMReX_CommProfStats.H:274
static std::map< std::string, int > commDataFileNames
Definition AMReX_CommProfStats.H:264
void SetProbDomain(const amrex::Vector< amrex::Box > &pd)
Definition AMReX_CommProfStats.H:220
void TimelineFAB(amrex::FArrayBox &timelineFAB, const amrex::Box &probDomain, const BLProfStats::TimeRange tr, const int rankMin, const int rankMax, const int rankStride, const Real ntnMultiplier, const amrex::Vector< Real > &ntnNumbers, const Real bnMultiplier, const amrex::Vector< Real > &bnNumbers)
Definition AMReX_CommProfStats.cpp:953
std::map< int, long > glMap
Definition AMReX_CommProfStats.H:257
virtual void AddBarrier(long bnum, const std::string &bname, long index)
Definition AMReX_CommProfStats.cpp:181
static bool InitDBlocks()
Definition AMReX_CommProfStats.H:227
void ReportSyncPointData(amrex::Vector< amrex::Vector< Real > > &barrierExitTimes, amrex::Vector< amrex::Vector< Real > > &barrierWaitTimes, amrex::Vector< amrex::Vector< Real > > &reductionWaitTimes, bool bDoReductions=false)
Definition AMReX_CommProfStats.cpp:791
const amrex::Vector< amrex::Box > & GetProbDomain() const
Definition AMReX_CommProfStats.H:221
static amrex::Vector< int > rankFromProx
Definition AMReX_CommProfStats.H:260
static int cpVersion
Definition AMReX_CommProfStats.H:247
static void InitProxMap()
Definition AMReX_CommProfStats.cpp:314
void InitEdisonTopoMF()
Definition AMReX_CommProfStats.cpp:1809
const std::map< int, int > & GLSizeMap() const
Definition AMReX_CommProfStats.H:224
std::stack< double > nestedTimeStack
Definition AMReX_CommProfStats.H:250
void SetRefRatio(const amrex::Vector< amrex::IntVect > &rr)
Definition AMReX_CommProfStats.H:214
static int GetCPVersion()
Definition AMReX_CommProfStats.H:206
CommProfStats()
Definition AMReX_CommProfStats.cpp:110
static amrex::Vector< std::ifstream * > commDataStreams
Definition AMReX_CommProfStats.H:265
static amrex::Vector< amrex::IntVect > calcRefRatios
Definition AMReX_CommProfStats.H:254
static bool bProxMapOK
Definition AMReX_CommProfStats.H:262
virtual void AddTagRange(const long tmin, const long tmax)
Definition AMReX_CommProfStats.cpp:220
virtual void AddMaxLevel(const int lev)
Definition AMReX_CommProfStats.H:211
const amrex::Vector< std::string > & BarrierNames()
Definition AMReX_CommProfStats.H:197
virtual void AddCommHeaderFileName(const std::string &hfn)
Definition AMReX_CommProfStats.cpp:304
void WriteEdisonTopoMF()
Definition AMReX_CommProfStats.cpp:1823
static int GetFinestLevel()
Definition AMReX_CommProfStats.H:210
void ReportStats(long &totalSentData, long &totalNCommStats, amrex::Vector< long > &totalFuncCalls, int bytesPerSlot, amrex::Vector< long > &msgSizes, int &minMsgSize, int &maxMsgSize, Real &timeMin, Real &timeMax, Real &timerTime, amrex::Vector< int > &rankNodeNumbers)
Definition AMReX_CommProfStats.cpp:864
void CheckCommData(amrex::Vector< long > &nBMin, amrex::Vector< long > &nBMax, amrex::Vector< long > &nRMin, amrex::Vector< long > &nRMax)
Definition AMReX_CommProfStats.cpp:493
virtual void AddEdisonPID(int X, int Y, int Z, int cab, int row, int cage, int slot, int cpu, int pid)
Definition AMReX_CommProfStats.cpp:1844
bool IsSend(const amrex::BLProfiler::CommFuncType &cft)
Definition AMReX_CommProfStats.cpp:1110
virtual void AddNameTagName(const std::string &name)
Definition AMReX_CommProfStats.cpp:206
static bool bInitDataBlocks
Definition AMReX_CommProfStats.H:259
void FillSendFAB(long &totalSends, long &totalSentData, amrex::Vector< long > &totalSendsPerProc, amrex::Vector< long > &totalSentDataPerProc, amrex::FArrayBox &sendFAB, bool proxmap)
Definition AMReX_CommProfStats.cpp:642
static int GetMaxLevel()
Definition AMReX_CommProfStats.H:212
static void OpenAllStreams(const std::string &dirname)
Definition AMReX_CommProfStats.cpp:387
static int maxLevel
Definition AMReX_CommProfStats.H:247
virtual void AddFinestLevel(const int lev)
Definition AMReX_CommProfStats.H:209
virtual void AddReduction(const long rnum, const long index)
Definition AMReX_CommProfStats.cpp:200
virtual void AddGrid3D(int level, int xlo, int ylo, int zlo, int xhi, int yhi, int zhi, int xc, int yc, int zc, int xn, int yn, int zn, int proc)
Definition AMReX_CommProfStats.cpp:246
bool IsRecv(const amrex::BLProfiler::CommFuncType &cft)
Definition AMReX_CommProfStats.cpp:1120
amrex::Vector< DataBlock > dataBlocks
Definition AMReX_CommProfStats.H:251
virtual void AddTimeMinMax(const double tmin, const double tmax)
Definition AMReX_CommProfStats.cpp:227
void ClearCommStats(DataBlock &dBlock)
Definition AMReX_CommProfStats.cpp:479
void SendRecvData(const std::string &filename, const double tlo, const double thi)
Definition AMReX_CommProfStats.cpp:1179
int tagMin
Definition AMReX_CommProfStats.H:249
virtual void AddNameTag(const long ntnindex, const long seekindex)
Definition AMReX_CommProfStats.cpp:214
bool IsBlockingRecv(const amrex::BLProfiler::CommFuncType &cft)
Definition AMReX_CommProfStats.cpp:1132
void WriteTopoFab()
Definition AMReX_CommProfStats.cpp:340
std::map< int, int > glSizeMap
Definition AMReX_CommProfStats.H:258
amrex::Vector< Real > edisonNodeFab
Definition AMReX_CommProfStats.H:273
static amrex::Vector< amrex::Box > probDomain
Definition AMReX_CommProfStats.H:256
amrex::Vector< std::map< int, amrex::IntVect > > TopoMap
Definition AMReX_CommProfStats.H:255
const amrex::Vector< std::string > & NameTagNames()
Definition AMReX_CommProfStats.H:196
static void SetInitDataBlocks(bool b)
Definition AMReX_CommProfStats.H:226
static const amrex::Vector< std::string > & GetHeaderFileNames()
Definition AMReX_CommProfStats.H:230
const amrex::Vector< amrex::IntVect > & GetRefRatio() const
Definition AMReX_CommProfStats.H:215
virtual void InitCommDataBlock(const int proc, const long ncommstats, const std::string &filename, const long seekpos, const std::string &nodename="", const int nodenumber=-1)
Definition AMReX_CommProfStats.cpp:135
virtual void AddRefRatio(const int lev, const amrex::IntVect &rr)
Definition AMReX_CommProfStats.cpp:269
virtual void AddTopoCoord(const int nid, const int node, const int tx, const int ty, const int tz, const bool servicenode=false)
Definition AMReX_CommProfStats.cpp:287
int tagMax
Definition AMReX_CommProfStats.H:249
virtual void AddGridLevel(const int level, const int ngrids)
Definition AMReX_CommProfStats.cpp:241
void ReportSyncPointDataSetup(long &nBMax, long &nRMax)
Definition AMReX_CommProfStats.cpp:766
int currentDataBlock
Definition AMReX_CommProfStats.H:246
static amrex::Vector< int > proxFromRank
Definition AMReX_CommProfStats.H:261
static void InitDataFileNames(const amrex::Vector< std::string > &hfn)
Definition AMReX_CommProfStats.cpp:125
amrex::Vector< std::string > nameTagNames
Definition AMReX_CommProfStats.H:252
virtual void AddTimerTime(const double tt)
Definition AMReX_CommProfStats.cpp:234
amrex::Vector< std::string > barrierNames
Definition AMReX_CommProfStats.H:253
void FindTimeRange(BLProfStats::TimeRange &tr)
Definition AMReX_CommProfStats.cpp:944
int AfterBarrier(const int proc, const double t)
Definition AMReX_CommProfStats.cpp:159
~CommProfStats()
Definition AMReX_CommProfStats.cpp:120
virtual void SetCPVersion(const int cpv)
Definition AMReX_CommProfStats.H:205
amrex::Vector< amrex::Vector< amrex::Vector< int > > > edisonNodeXYZ
Definition AMReX_CommProfStats.H:275
static int finestLevel
Definition AMReX_CommProfStats.H:247
static int csSize
Definition AMReX_CommProfStats.H:247
void ReadCommStats(DataBlock &dBlock)
Definition AMReX_CommProfStats.cpp:430
void ReadCommStatsNoOpen(DataBlock &dBlock)
Definition AMReX_CommProfStats.cpp:446
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:229
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:27
Definition AMReX_BLProfStats.H:79
Definition AMReX_CommProfStats.H:40
BarrierEntry()
Definition AMReX_CommProfStats.H:41
int bNameNumber
Definition AMReX_CommProfStats.H:52
long number
Definition AMReX_CommProfStats.H:49
BarrierEntry(long n, const std::string &nm, long i, int bnn)
Definition AMReX_CommProfStats.H:44
std::string name
Definition AMReX_CommProfStats.H:50
long seekIndex
Definition AMReX_CommProfStats.H:51
BarrierEntry & operator=(const BarrierEntry &be)
Definition AMReX_CommProfStats.cpp:1900
Definition AMReX_CommProfStats.H:69
double timeMin
Definition AMReX_CommProfStats.H:91
int streamIndex
Definition AMReX_CommProfStats.H:89
long size
Definition AMReX_CommProfStats.H:81
std::string fileName
Definition AMReX_CommProfStats.H:82
amrex::Vector< amrex::BLProfiler::CommStats > vCommStats
Definition AMReX_CommProfStats.H:95
amrex::Vector< ReductionEntry > reductions
Definition AMReX_CommProfStats.H:93
double timerTime
Definition AMReX_CommProfStats.H:88
amrex::Vector< NameTagEntry > nameTags
Definition AMReX_CommProfStats.H:94
std::string nodeName
Definition AMReX_CommProfStats.H:85
long readoffset
Definition AMReX_CommProfStats.H:84
int nTimerTimes
Definition AMReX_CommProfStats.H:87
amrex::Vector< BarrierEntry > barriers
Definition AMReX_CommProfStats.H:92
int proc
Definition AMReX_CommProfStats.H:80
long seekpos
Definition AMReX_CommProfStats.H:83
DataBlock()
Definition AMReX_CommProfStats.H:70
DataBlock(const int p, const long s, const std::string &fn, const long sp, const std::string &pn, const int nn, const int si)
Definition AMReX_CommProfStats.H:74
int nodeNumber
Definition AMReX_CommProfStats.H:86
double timeMax
Definition AMReX_CommProfStats.H:91
Definition AMReX_CommProfStats.H:62
long seekIndex
Definition AMReX_CommProfStats.H:66
NameTagEntry(const long ntindex, const long seekindex)
Definition AMReX_CommProfStats.H:63
long ntIndex
Definition AMReX_CommProfStats.H:66
Definition AMReX_CommProfStats.H:55
long number
Definition AMReX_CommProfStats.H:59
ReductionEntry(const long n, const long i)
Definition AMReX_CommProfStats.H:56
long seekIndex
Definition AMReX_CommProfStats.H:59
Definition AMReX_CommProfStats.H:143
SendRecvPairUnpaired(const amrex::BLProfiler::CommFuncType cft, const int sp, const int rp, const int ds, const int tg, const Real st, const Real rt, const Real tt)
Definition AMReX_CommProfStats.H:144
amrex::BLProfiler::CommFuncType unmatchedCFType
Definition AMReX_CommProfStats.H:150
Definition AMReX_CommProfStats.H:98
SendRecvPair(const int sp, const int rp, const int ds, const int tg, const Real st, const Real rt, const Real tt)
Definition AMReX_CommProfStats.H:99
int dataSize
Definition AMReX_CommProfStats.H:105
int fromProc
Definition AMReX_CommProfStats.H:105
static long HashLong(int fp, int tp, int, int t)
Definition AMReX_CommProfStats.H:125
Real sendTime
Definition AMReX_CommProfStats.H:106
int tag
Definition AMReX_CommProfStats.H:105
int toProc
Definition AMReX_CommProfStats.H:105
bool Matches(int fromproc, int toproc, int size)
Definition AMReX_CommProfStats.H:113
Real totalTime
Definition AMReX_CommProfStats.H:106
long HashLong()
Definition AMReX_CommProfStats.H:117
Real recvTime
Definition AMReX_CommProfStats.H:106
bool Matches(int fromproc, int toproc, int size, int mtag)
Definition AMReX_CommProfStats.H:109
static long HashLong(int fp, int tp, int t)
Definition AMReX_CommProfStats.H:122