1#ifndef AMREX_TINY_PROFILER_H_
2#define AMREX_TINY_PROFILER_H_
3#include <AMReX_Config.H>
34 TinyProfiler (std::string funcname,
bool start_)
noexcept;
36 TinyProfiler (
const char* funcname,
bool start_)
noexcept;
44 void start () noexcept;
45 void stop () noexcept;
51 std::map<std::
string,
MemStat>& memstats) noexcept;
55 static
void Finalize (
bool bFlushing = false) noexcept;
61 std::map<std::
string,
MemStat>& memstats) noexcept;
65 static
void StartRegion (std::
string regname) noexcept;
66 static
void StopRegion (const std::
string& regname) noexcept;
74 Stats ()
noexcept =
default;
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};
93 static bool compex (
const ProcStats& lhs,
const ProcStats& rhs) {
94 return lhs.dtexmax > rhs.dtexmax;
96 static bool compin (
const ProcStats& lhs,
const ProcStats& rhs) {
97 return lhs.dtinmax > rhs.dtinmax;
106 Long avgmem_min = std::numeric_limits<Long>::max();
109 Long maxmem_min = std::numeric_limits<Long>::max();
113 static bool compmem (
const MemProcStats& lhs,
const MemProcStats& rhs) {
114 return lhs.maxmem_max > rhs.maxmem_max;
119 bool in_parallel_region =
false;
120 int global_depth = -1;
121 std::vector<Stats*> stats;
123 static std::deque<const TinyProfiler*> mem_stack;
126 struct aligned_deque {
128 alignas(64) std::deque<const TinyProfiler*> deque;
131 static std::vector<aligned_deque> mem_stack_thread_private;
133 static std::vector<std::map<std::string, MemStat>*> all_memstats;
134 static std::vector<std::string> all_memnames;
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;
141 static bool device_synchronize_around_region;
142 static int n_print_tabs;
144 static double print_threshold;
146 static bool memprof_enabled;
147 static std::string output_file;
149 static std::string
const& get_output_file ();
150 static void PrintStats (std::map<std::string,Stats>& regstats,
double dt_max,
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);
Definition AMReX_TinyProfiler.H:158
~TinyProfileRegion()
Definition AMReX_TinyProfiler.cpp:984
TinyProfileRegion & operator=(TinyProfileRegion const &)=delete
TinyProfileRegion(TinyProfileRegion const &)=delete
TinyProfileRegion(TinyProfileRegion &&)=delete
A simple profiler that returns basic performance information (e.g. min, max, and average running time...
Definition AMReX_TinyProfiler.H:31
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 void MemoryFinalize(bool bFlushing=false) noexcept
Definition AMReX_TinyProfiler.cpp:452
static void PrintMemoryUsage(std::ostream *os, bool only_local) noexcept
Definition AMReX_TinyProfiler.cpp:1002
TinyProfiler(TinyProfiler const &)=delete
TinyProfiler & operator=(TinyProfiler const &)=delete
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
static void PrintCallStack(std::ostream &os)
Definition AMReX_TinyProfiler.cpp:991
void start() noexcept
Definition AMReX_TinyProfiler.cpp:97
static void MemoryInitialize()
Definition AMReX_TinyProfiler.cpp:338
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
~TinyProfiler()
Definition AMReX_TinyProfiler.cpp:91
static void StopRegion(const std::string ®name) noexcept
Definition AMReX_TinyProfiler.cpp:959
static void memory_free(std::size_t nbytes, MemStat *stat) noexcept
Definition AMReX_TinyProfiler.cpp:299
TinyProfiler(TinyProfiler &&)=delete
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