Skip to content
Snippets Groups Projects
Commit c57b7838 authored by René Fritze's avatar René Fritze
Browse files

[timings] sanitize output wrt parallel setups and naming

parent 4ad2d52d
No related branches found
No related tags found
No related merge requests found
......@@ -52,8 +52,9 @@ TEST(ProfilerTest, OutputConstness)
{
DXTC_TIMINGS.reset();
const auto& prof = DXTC_TIMINGS;
prof.output_timings("timings");
prof.output_timings(dev_null);
prof.output_per_rank("timings");
prof.output_all_measures(dev_null);
prof.output_simple(dev_null);
}
TEST(ProfilerTest, ExpectedFailures)
......
......@@ -165,25 +165,37 @@ void Timings::set_outputdir(const std::string dir)
test_create_directory(output_dir_);
}
void Timings::output_timings(const std::string csv_base,
const CollectiveCommunication<MPIHelper::MPICommunicator>& comm) const
void Timings::output_per_rank(const std::string csv_base) const
{
const auto rank = MPIHelper::getCollectiveCommunication().rank();
boost::filesystem::path dir(output_dir_);
boost::filesystem::path filename = dir / (boost::format("%s_p%08d.csv") % csv_base % comm.rank()).str();
boost::filesystem::path filename = dir / (boost::format("%s_p%08d.csv") % csv_base % rank).str();
boost::filesystem::ofstream out(filename);
output_timings(out);
output_all_measures(out, MPIHelper::getLocalCommunicator());
std::stringstream tmp_out;
output_timings_all(tmp_out);
if (comm.rank() == 0) {
output_all_measures(tmp_out, MPIHelper::getCommunicator());
if (rank == 0) {
boost::filesystem::path a_filename = dir / (boost::format("%s.csv") % csv_base).str();
boost::filesystem::ofstream a_out(a_filename);
a_out << tmp_out.str() << std::endl;
}
}
void Timings::output_timings_all(std::ostream& out,
const CollectiveCommunication<MPIHelper::MPICommunicator>& comm) const
void Timings::output_simple(std::ostream& out) const
{
for (const auto& section : commited_deltas_) {
out << csv_sep_ << section.first;
}
for (const auto& section : commited_deltas_) {
out << csv_sep_ << section.second[0];
;
}
out << std::endl;
}
void Timings::output_all_measures(std::ostream& out, MPIHelper::MPICommunicator mpi_comm) const
{
CollectiveCommunication<MPIHelper::MPICommunicator> comm(mpi_comm);
std::stringstream stash;
stash << "run" << csv_sep_ << "threads" << csv_sep_ << "ranks";
......@@ -217,19 +229,6 @@ void Timings::output_timings_all(std::ostream& out,
out << stash.str();
}
void Timings::output_timings(std::ostream& out, const CollectiveCommunication<MPIHelper::MPICommunicator>& comm) const
{
for (const auto& section : commited_deltas_) {
out << csv_sep_ << section.first;
}
const double size = comm.size();
for (const auto& section : commited_deltas_) {
auto val = section.second[0];
out << csv_sep_ << comm.sum(val) / size;
}
out << std::endl;
}
Timings::Timings()
: csv_sep_(",")
{
......
......@@ -103,17 +103,16 @@ public:
//! get the full delta array
TimingData::DeltaType delta(const std::string section_name) const;
/** file-output the named sections' walltimes only
* \note averages over all MPI processes **/
void output_timings(const std::string csv_base, const CollectiveCommunication<MPIHelper::MPICommunicator>& comm =
Dune::MPIHelper::getCollectiveCommunication()) const;
void output_timings(std::ostream& out = std::cout, const CollectiveCommunication<MPIHelper::MPICommunicator>& comm =
Dune::MPIHelper::getCollectiveCommunication()) const;
/** output all recoreded measures
* \note outputs average, min, max over all MPI processes **/
void output_timings_all(std::ostream& out = std::cout,
const CollectiveCommunication<MPIHelper::MPICommunicator>& comm =
Dune::MPIHelper::getCollectiveCommunication()) const;
/** creates one file local to each MPI-rank (no global averaging)
* one single rank-0 file with all combined/averaged measures
***/
void output_per_rank(const std::string csv_base) const;
//! outputs walltime only w/o MPI-rank averaging
void output_simple(std::ostream& out = std::cout) const;
/** output all recorded measures
* \note outputs average, min, max over all MPI processes associated to mpi_comm **/
void output_all_measures(std::ostream& out = std::cout,
MPIHelper::MPICommunicator mpi_comm = Dune::MPIHelper::getCommunicator()) const;
/// stops and resets all timers and data
void reset();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment