18 #include "serac/serac_config.hpp"
20 #ifdef SERAC_USE_ADIAK
24 #ifdef SERAC_USE_CALIPER
25 #include "caliper/cali-manager.h"
26 #include "caliper/cali.h"
81 #ifdef SERAC_USE_ADIAK
82 #define SERAC_SET_METADATA(name, data) adiak::value(name, data)
84 #define SERAC_SET_METADATA(name, data)
87 #ifdef SERAC_USE_CALIPER
89 #define SERAC_MARK_FUNCTION CALI_CXX_MARK_FUNCTION
90 #define SERAC_MARK_LOOP_BEGIN(id, name) CALI_CXX_MARK_LOOP_BEGIN(id, name)
91 #define SERAC_MARK_LOOP_ITER(id, i) CALI_CXX_MARK_LOOP_ITERATION(id, i)
92 #define SERAC_MARK_LOOP_END(id) CALI_CXX_MARK_LOOP_END(id)
93 #define SERAC_MARK_BEGIN(name) serac::profiling::detail::startCaliperRegion(name)
94 #define SERAC_MARK_END(name) serac::profiling::detail::endCaliperRegion(name)
96 #define SERAC_CONCAT_(a, b) a##b
97 #define SERAC_CONCAT(a, b) SERAC_CONCAT_(a, b)
104 inline const char* make_cstr(
const char* str) {
return str; }
109 inline const char* make_cstr(
const std::string& str) {
return str.c_str(); }
113 #define SERAC_PROFILE_SCOPE(name) \
114 cali::ScopeAnnotation SERAC_CONCAT(region, __LINE__)(serac::profiling::detail::make_cstr(name))
121 #define SERAC_PROFILE_EXPR(name, expr) \
122 [&]() -> decltype(auto) { \
123 const cali::ScopeAnnotation SERAC_CONCAT(region, __LINE__)(serac::profiling::detail::make_cstr(name)); \
130 #define SERAC_PROFILE_EXPR_LOOP(name, expr, ntest) \
133 for (int SERAC_CONCAT(i, __LINE__) = 0; SERAC_CONCAT(i, __LINE__) < ntest - 1; SERAC_CONCAT(i, __LINE__)++) \
134 SERAC_PROFILE_EXPR(serac::profiling::detail::make_cstr(name), expr); \
136 SERAC_PROFILE_EXPR(serac::profiling::detail::make_cstr(name), expr))
141 #define SERAC_MARK_FUNCTION
142 #define SERAC_MARK_LOOP_BEGIN(id, name)
143 #define SERAC_MARK_LOOP_ITER(id, i)
144 #define SERAC_MARK_LOOP_END(id)
145 #define SERAC_MARK_BEGIN(name)
146 #define SERAC_MARK_END(name)
147 #define SERAC_PROFILE_SCOPE(name)
148 #define SERAC_PROFILE_EXPR(name, expr) expr
149 #define SERAC_PROFILE_EXPR_LOOP(name, expr, ntest) expr
162 void initialize([[maybe_unused]] MPI_Comm comm = MPI_COMM_WORLD, [[maybe_unused]] std::string options =
"");
189 template <
typename... T>
192 std::stringstream ss;
void endCaliperRegion(const char *name)
Caliper methods for marking the end of a region.
void startCaliperRegion(const char *name)
Caliper method for marking the start of a profiling region.
std::string concat(T... args)
Produces a string by applying << to all arguments.
void finalize()
Concludes performance monitoring and writes collected data to a file.
void initialize([[maybe_unused]] MPI_Comm comm, [[maybe_unused]] std::string options)
Initializes performance monitoring using the Caliper and Adiak libraries.