/home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/discretization/data/output_timings.hh Source File#

DiFfRG: /home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/discretization/data/output_timings.hh Source File
DiFfRG
Discretization Framework for functional Renormalization Group flows
output_timings.hh
Go to the documentation of this file.
1#pragma once
2
3// standard library
4#include <chrono>
5#include <cstddef>
6#include <string>
7
8namespace DiFfRG
9{
33 struct FrameTimings {
34 double contributor = 0.;
35 double potential_solves = 0.;
38 double fe_attach = 0.;
39 double build_patches = 0.;
40 double data_filter = 0.;
41 double hdf5_write = 0.;
42 double hdf5_open_close = 0.;
45 double hdf5_queue_wait = 0.;
49 double fe_flush = 0.;
50 double csv = 0.;
51 double total = 0.;
52
53 std::size_t potential_solve_count = 0;
54 std::size_t hdf5_open_count = 0;
55
58 };
59
62 {
63 public:
64 void add(const FrameTimings &frame);
65
73 void set_writer_totals(const FrameTimings &totals, bool asynchronous);
74
76 std::string format() const;
77
78 std::size_t frames() const noexcept { return n_frames; }
79 const FrameTimings &totals() const noexcept { return sum; }
80 const FrameTimings &maxima() const noexcept { return max; }
81
82 private:
83 std::size_t n_frames = 0;
87 bool writer_asynchronous = false;
88 };
89
97 {
98 public:
99 explicit ScopedTimer(double &sink) : sink(&sink), start(std::chrono::steady_clock::now()) {}
101 explicit ScopedTimer(double *sink) : sink(sink), start(std::chrono::steady_clock::now()) {}
103
104 ScopedTimer(const ScopedTimer &) = delete;
106
108 void stop()
109 {
110 if (sink == nullptr) return;
111 *sink += std::chrono::duration<double>(std::chrono::steady_clock::now() - start).count();
112 sink = nullptr;
113 }
114
115 private:
116 double *sink;
117 std::chrono::steady_clock::time_point start;
118 };
119} // namespace DiFfRG
Running statistics over all frames of one run.
Definition output_timings.hh:62
FrameTimings max
Definition output_timings.hh:85
const FrameTimings & totals() const noexcept
Definition output_timings.hh:79
FrameTimings sum
Definition output_timings.hh:84
FrameTimings writer
Definition output_timings.hh:86
bool writer_asynchronous
Definition output_timings.hh:87
std::size_t n_frames
Definition output_timings.hh:83
std::string format() const
void add(const FrameTimings &frame)
void set_writer_totals(const FrameTimings &totals, bool asynchronous)
Record what the writer thread did, which is not part of any frame's cost.
const FrameTimings & maxima() const noexcept
Definition output_timings.hh:80
std::size_t frames() const noexcept
Definition output_timings.hh:78
Adds the wall time of its scope to a double, in seconds.
Definition output_timings.hh:97
ScopedTimer & operator=(const ScopedTimer &)=delete
~ScopedTimer()
Definition output_timings.hh:102
double * sink
Definition output_timings.hh:116
ScopedTimer(double *sink)
Definition output_timings.hh:101
ScopedTimer(const ScopedTimer &)=delete
ScopedTimer(double &sink)
Definition output_timings.hh:99
std::chrono::steady_clock::time_point start
Definition output_timings.hh:117
void stop()
Definition output_timings.hh:108
Definition complex_math.hh:10
Wall-clock cost of producing one output frame, split by where the time went.
Definition output_timings.hh:33
double hdf5_queue_wait
Definition output_timings.hh:45
double csv
CsvOutput::flush.
Definition output_timings.hh:50
double hdf5_open_close
H5Fopen + H5Fflush + H5Fclose.
Definition output_timings.hh:42
double total
the whole frame, from write_frame entry to flush_frame exit
Definition output_timings.hh:51
double fe_flush
Definition output_timings.hh:49
std::size_t hdf5_open_count
how many times the .h5 was opened for this frame
Definition output_timings.hh:54
FrameTimings & operator+=(const FrameTimings &other)
std::size_t potential_solve_count
Definition output_timings.hh:53
double contributor
the whole user contributor callback (attach + readouts)
Definition output_timings.hh:34
double data_filter
DataOutFilter pass: write_filtered_data + fill_node_data.
Definition output_timings.hh:40
double potential_solves
of which: internal::solve_potential
Definition output_timings.hh:35
double build_patches
DataOut::build_patches.
Definition output_timings.hh:39
double fe_attach
Definition output_timings.hh:38
double hdf5_write
group/dataset/attribute creation and writes
Definition output_timings.hh:41