Block-Structured AMR Software Framework
 
Loading...
Searching...
No Matches
AMReX_TinyProfiler.H
Go to the documentation of this file.
1#ifndef AMREX_TINY_PROFILER_H_
2#define AMREX_TINY_PROFILER_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_INT.H>
6#include <AMReX_REAL.H>
7
8#include <array>
9#include <deque>
10#include <iosfwd>
11#include <limits>
12#include <map>
13#include <string>
14#include <tuple>
15#include <utility>
16#include <vector>
17
18namespace amrex {
19
20struct MemStat
21{
23 Long nfree = 0;
25 double avgmem = 0.;
27};
28
31{
32public:
33 explicit TinyProfiler (std::string funcname) noexcept;
34 TinyProfiler (std::string funcname, bool start_) noexcept;
35 explicit TinyProfiler (const char* funcname) noexcept;
36 TinyProfiler (const char* funcname, bool start_) noexcept;
38
39 TinyProfiler (TinyProfiler const&) = delete;
43
44 void start () noexcept;
45 void stop () noexcept;
46
47 void memory_start () const noexcept;
48 void memory_stop () const noexcept;
49
50 static MemStat* memory_alloc (std::size_t nbytes,
51 std::map<std::string, MemStat>& memstats) noexcept;
52 static void memory_free (std::size_t nbytes, MemStat* stat) noexcept;
53
54 static void Initialize ();
55 static void Finalize (bool bFlushing = false) noexcept;
56
57 static void MemoryInitialize ();
58 static void MemoryFinalize (bool bFlushing = false) noexcept;
59
60 static bool RegisterArena (const std::string& memory_name,
61 std::map<std::string, MemStat>& memstats) noexcept;
62
63 static void DeregisterArena (std::map<std::string, MemStat>& memstats) noexcept;
64
65 static void StartRegion (std::string regname) noexcept;
66 static void StopRegion (const std::string& regname) noexcept;
67
68 static void PrintCallStack (std::ostream& os);
69 static void PrintMemoryUsage (std::ostream* os, bool only_local) noexcept;
70
71private:
72 struct Stats
73 {
74 Stats () noexcept = default;
75 int depth{0};
76 Long n{0L};
77 double dtin{0.0};
78 double dtex{0.0};
79 };
80
82 struct ProcStats
83 {
84
85 Long nmin{std::numeric_limits<Long>::max()};
86 Long navg{0L}, nmax{0L};
87 double dtinmin{std::numeric_limits<double>::max()};
88 double dtinavg{0.0}, dtinmax{0.0};
89 double dtexmin{std::numeric_limits<double>::max()};
90 double dtexavg{0.0}, dtexmax{0.0};
91 bool do_print{true};
92 std::string fname;
93 static bool compex (const ProcStats& lhs, const ProcStats& rhs) {
94 return lhs.dtexmax > rhs.dtexmax;
95 }
96 static bool compin (const ProcStats& lhs, const ProcStats& rhs) {
97 return lhs.dtinmax > rhs.dtinmax;
98 }
99 };
100
102 {
106 Long avgmem_min = std::numeric_limits<Long>::max();
109 Long maxmem_min = std::numeric_limits<Long>::max();
112 std::string fname;
113 static bool compmem (const MemProcStats& lhs, const MemProcStats& rhs) {
114 return lhs.maxmem_max > rhs.maxmem_max;
115 }
116 };
117
118 std::string fname;
119 bool in_parallel_region = false;
120 int global_depth = -1;
121 std::vector<Stats*> stats;
122
123 static std::deque<const TinyProfiler*> mem_stack;
124
125#ifdef AMREX_USE_OMP
126 struct aligned_deque {
127 // align thread-private data to cache lines to prevent false sharing
128 alignas(64) std::deque<const TinyProfiler*> deque;
129 };
130
131 static std::vector<aligned_deque> mem_stack_thread_private;
132#endif
133 static std::vector<std::map<std::string, MemStat>*> all_memstats;
134 static std::vector<std::string> all_memnames;
135
136 static std::vector<std::string> regionstack;
137 static std::deque<std::tuple<double,double,std::string*> > ttstack;
138 static std::map<std::string,std::map<std::string, Stats> > statsmap;
139 static double t_init;
140 static double t_memory_init;
142 static int n_print_tabs;
143 static int verbose;
144 static double print_threshold;
145 static bool enabled;
146 static bool memprof_enabled;
147 static std::string output_file;
148
149 static std::string const& get_output_file ();
150 static void PrintStats (std::map<std::string,Stats>& regstats, double dt_max,
151 std::ostream* os);
152 static void PrintMemStats (std::map<std::string, MemStat>& memstats,
153 std::string const& memname, double dt_max,
154 double t_final, std::ostream* os, bool only_local);
155};
156
158{
159public:
160 explicit TinyProfileRegion (std::string a_regname) noexcept;
161 explicit TinyProfileRegion (const char* a_regname) noexcept;
167private:
168 std::string regname;
170};
171
172}
173#endif
Definition AMReX_TinyProfiler.H:158
~TinyProfileRegion()
Definition AMReX_TinyProfiler.cpp:984
TinyProfileRegion & operator=(TinyProfileRegion const &)=delete
TinyProfileRegion(TinyProfileRegion const &)=delete
TinyProfileRegion(TinyProfileRegion &&)=delete
std::string regname
Definition AMReX_TinyProfiler.H:168
TinyProfiler tprof
Definition AMReX_TinyProfiler.H:169
A simple profiler that returns basic performance information (e.g. min, max, and average running time...
Definition AMReX_TinyProfiler.H:31
static bool memprof_enabled
Definition AMReX_TinyProfiler.H:146
static std::vector< std::string > regionstack
Definition AMReX_TinyProfiler.H:136
static void Initialize()
Definition AMReX_TinyProfiler.cpp:314
static bool RegisterArena(const std::string &memory_name, std::map< std::string, MemStat > &memstats) noexcept
Definition AMReX_TinyProfiler.cpp:490
static bool device_synchronize_around_region
Definition AMReX_TinyProfiler.H:141
static std::deque< const TinyProfiler * > mem_stack
Definition AMReX_TinyProfiler.H:123
static std::string const & get_output_file()
Definition AMReX_TinyProfiler.cpp:1019
static void MemoryFinalize(bool bFlushing=false) noexcept
Definition AMReX_TinyProfiler.cpp:452
static bool enabled
Definition AMReX_TinyProfiler.H:145
static void PrintMemoryUsage(std::ostream *os, bool only_local) noexcept
Definition AMReX_TinyProfiler.cpp:1002
static int verbose
Definition AMReX_TinyProfiler.H:143
static std::vector< std::string > all_memnames
Definition AMReX_TinyProfiler.H:134
static double print_threshold
Definition AMReX_TinyProfiler.H:144
std::vector< Stats * > stats
Definition AMReX_TinyProfiler.H:121
static std::deque< std::tuple< double, double, std::string * > > ttstack
Definition AMReX_TinyProfiler.H:137
static double t_memory_init
Definition AMReX_TinyProfiler.H:140
TinyProfiler(TinyProfiler const &)=delete
TinyProfiler & operator=(TinyProfiler const &)=delete
static void PrintStats(std::map< std::string, Stats > &regstats, double dt_max, std::ostream *os)
Definition AMReX_TinyProfiler.cpp:516
static MemStat * memory_alloc(std::size_t nbytes, std::map< std::string, MemStat > &memstats) noexcept
Definition AMReX_TinyProfiler.cpp:270
void stop() noexcept
Definition AMReX_TinyProfiler.cpp:158
std::string fname
Definition AMReX_TinyProfiler.H:118
static void PrintCallStack(std::ostream &os)
Definition AMReX_TinyProfiler.cpp:991
static void PrintMemStats(std::map< std::string, MemStat > &memstats, std::string const &memname, double dt_max, double t_final, std::ostream *os, bool only_local)
Definition AMReX_TinyProfiler.cpp:730
bool in_parallel_region
Definition AMReX_TinyProfiler.H:119
void start() noexcept
Definition AMReX_TinyProfiler.cpp:97
static void MemoryInitialize()
Definition AMReX_TinyProfiler.cpp:338
static double t_init
Definition AMReX_TinyProfiler.H:139
void memory_start() const noexcept
Definition AMReX_TinyProfiler.cpp:231
void memory_stop() const noexcept
Definition AMReX_TinyProfiler.cpp:248
static void StartRegion(std::string regname) noexcept
Definition AMReX_TinyProfiler.cpp:949
static std::map< std::string, std::map< std::string, Stats > > statsmap
Definition AMReX_TinyProfiler.H:138
~TinyProfiler()
Definition AMReX_TinyProfiler.cpp:91
static void StopRegion(const std::string &regname) noexcept
Definition AMReX_TinyProfiler.cpp:959
static void memory_free(std::size_t nbytes, MemStat *stat) noexcept
Definition AMReX_TinyProfiler.cpp:299
static std::vector< std::map< std::string, MemStat > * > all_memstats
Definition AMReX_TinyProfiler.H:133
int global_depth
Definition AMReX_TinyProfiler.H:120
TinyProfiler(TinyProfiler &&)=delete
static std::string output_file
Definition AMReX_TinyProfiler.H:147
static int n_print_tabs
Definition AMReX_TinyProfiler.H:142
static void DeregisterArena(std::map< std::string, MemStat > &memstats) noexcept
Definition AMReX_TinyProfiler.cpp:501
amrex_long Long
Definition AMReX_INT.H:30
Definition AMReX_Amr.cpp:49
void Finalize()
Definition AMReX.cpp:786
Definition AMReX_Arena.H:12
Long currentmem
amount of currently used memory in bytes
Definition AMReX_TinyProfiler.H:24
Long maxmem
running maximum of currentmem
Definition AMReX_TinyProfiler.H:26
Long nalloc
number of allocations
Definition AMReX_TinyProfiler.H:22
Long nfree
number of frees
Definition AMReX_TinyProfiler.H:23
double avgmem
memory used (bytes) times time in use (seconds)
Definition AMReX_TinyProfiler.H:25
Definition AMReX_TinyProfiler.H:102
static bool compmem(const MemProcStats &lhs, const MemProcStats &rhs)
Definition AMReX_TinyProfiler.H:113
Long avgmem_avg
Definition AMReX_TinyProfiler.H:107
Long maxmem_avg
Definition AMReX_TinyProfiler.H:110
Long nalloc
Definition AMReX_TinyProfiler.H:103
Long curmem_max
Definition AMReX_TinyProfiler.H:105
Long avgmem_max
Definition AMReX_TinyProfiler.H:108
Long maxmem_min
Definition AMReX_TinyProfiler.H:109
Long nfree
Definition AMReX_TinyProfiler.H:104
Long maxmem_max
Definition AMReX_TinyProfiler.H:111
Long avgmem_min
Definition AMReX_TinyProfiler.H:106
std::string fname
Definition AMReX_TinyProfiler.H:112
stats across processes
Definition AMReX_TinyProfiler.H:83
double dtexmin
Definition AMReX_TinyProfiler.H:89
Long navg
Definition AMReX_TinyProfiler.H:86
double dtexavg
Definition AMReX_TinyProfiler.H:90
std::string fname
Definition AMReX_TinyProfiler.H:92
static bool compin(const ProcStats &lhs, const ProcStats &rhs)
Definition AMReX_TinyProfiler.H:96
Long nmin
Definition AMReX_TinyProfiler.H:85
Long nmax
Definition AMReX_TinyProfiler.H:86
double dtexmax
Definition AMReX_TinyProfiler.H:90
bool do_print
Definition AMReX_TinyProfiler.H:91
double dtinavg
Definition AMReX_TinyProfiler.H:88
double dtinmax
Definition AMReX_TinyProfiler.H:88
double dtinmin
Definition AMReX_TinyProfiler.H:87
static bool compex(const ProcStats &lhs, const ProcStats &rhs)
Definition AMReX_TinyProfiler.H:93
Definition AMReX_TinyProfiler.H:73
Stats() noexcept=default