OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
MemoryWriter.cpp
Go to the documentation of this file.
1 #include "MemoryWriter.h"
2 
5 #include "Utilities/Timer.h"
6 #include "Ippl.h"
7 
8 MemoryWriter::MemoryWriter(const std::string& fname, bool restart)
9  : SDDSWriter(fname, restart)
10 { }
11 
12 
14 
15  if (this->hasColumns()) {
16  return;
17  }
18 
19  columns_m.addColumn("t", "double", "ns", "Time");
20 
21  columns_m.addColumn("s", "double", "m", "Path length");
22 
24  columns_m.addColumn("memory", "double", memory->getUnit(), "Total Memory");
25 
26  for (int p = 0; p < Ippl::getNodes(); ++p) {
27  std::stringstream tmp1;
28  tmp1 << "\"processor-" << p << "\"";
29 
30  std::stringstream tmp2;
31  tmp2 << "Memory per processor " << p;
32  columns_m.addColumn(tmp1.str(), "double", memory->getUnit(), tmp2.str());
33  }
34 
35  if ( mode_m == std::ios::app )
36  return;
37 
38  OPALTimer::Timer simtimer;
39 
40  std::string dateStr(simtimer.date());
41  std::string timeStr(simtimer.time());
42 
43 
44  std::stringstream ss;
45 
46  ss << "Memory statistics '"
47  << OpalData::getInstance()->getInputFn() << "' "
48  << dateStr << "" << timeStr;
49 
50  this->addDescription(ss.str(), "memory parameters");
51 
52  this->addDefaultParameters();
53 
54 
55  this->addInfo("ascii", 1);
56 }
57 
58 
60 {
62  memory->sample();
63 
64  if (Ippl::myNode() != 0) {
65  return;
66  }
67 
68  double pathLength = beam->get_sPos();
69 
70  fillHeader();
71 
72  this->open();
73 
74  this->writeHeader();
75 
76  columns_m.addColumnValue("t", beam->getT() * 1e9); // 1
77  columns_m.addColumnValue("s", pathLength); // 2
78 
79  int nProcs = Ippl::getNodes();
80  double total = 0.0;
81  for (int p = 0; p < nProcs; ++p) {
82  total += memory->getMemoryUsage(p);
83  }
84 
85  columns_m.addColumnValue("memory", total);
86 
87  for (int p = 0; p < nProcs; p++) {
88  std::stringstream ss;
89  ss << "\"processor-" << p << "\"";
90  columns_m.addColumnValue(ss.str(), memory->getMemoryUsage(p));
91  }
92 
93  this->writeRow();
94 
95  this->close();
96 }
static int getNodes()
Definition: IpplInfo.cpp:773
double getT() const
bool hasColumns() const
Definition: SDDSWriter.h:190
void writeHeader()
Write SDDS header.
Definition: SDDSWriter.cpp:130
void writeRow()
Definition: SDDSWriter.h:175
static IpplMemory_p getInstance(Unit unit=Unit::GB, bool reset=true)
static int myNode()
Definition: IpplInfo.cpp:794
MemoryWriter(const std::string &fname, bool restart)
Definition: MemoryWriter.cpp:8
void close()
Definition: SDDSWriter.cpp:123
void addDescription(const std::string &text, const std::string &content)
Definition: SDDSWriter.h:147
SDDSColumnSet columns_m
Definition: SDDSWriter.h:109
std::string date() const
Return date.
Definition: Timer.cpp:35
static OpalData * getInstance()
Definition: OpalData.cpp:209
void fillHeader()
const std::string & getUnit() const
std::string getInputFn()
get opals input filename
Definition: OpalData.cpp:713
void addColumnValue(const std::string &name, const T &val)
Definition: SDDSColumnSet.h:46
std::ios_base::openmode mode_m
First write to the statistics output file.
Definition: SDDSWriter.h:107
std::string time() const
Return time.
Definition: Timer.cpp:42
void addColumn(const std::string &name, const std::string &type, const std::string &unit, const std::string &desc, std::ios_base::fmtflags flags=std::ios_base::scientific, unsigned short precision=15)
void open()
Definition: SDDSWriter.cpp:113
void addDefaultParameters()
Definition: SDDSWriter.cpp:190
double getMemoryUsage(int core) const
void addInfo(const std::string &mode, const size_t &no_row_counts)
Definition: SDDSWriter.h:168
void write(PartBunchBase< double, 3 > *beam) override