25#ifdef SHAMROCK_USE_NVTX
26 #include <nvtx3/nvtx3.hpp>
32 loc.loc.function_name(),
38auto get_profiling = []() {
39 const char *val = std::getenv(
"SHAM_PROFILING");
41 if (std::string(val) ==
"1") {
43 }
else if (std::string(val) ==
"0") {
51 const char *val = std::getenv(
"SHAM_PROF_USE_NVTX");
53 if (std::string(val) ==
"1") {
55 if (!get_profiling()) {
57 "-- SHAM_PROF_USE_NVTX is set to 1 but SHAM_PROFILING is not set to 1.\n"
58 " please set SHAM_PROFILING=1 before SHAM_PROF_USE_NVTX=1");
62 }
else if (std::string(val) ==
"0") {
69auto get_complete_event = []() {
70 const char *val = std::getenv(
"SHAM_PROF_USE_COMPLETE_EVENT");
72 if (std::string(val) ==
"1") {
74 }
else if (std::string(val) ==
"0") {
81auto get_threshold = []() {
82 const char *val = std::getenv(
"SHAM_PROF_EVENT_RECORD_THRES");
84 return std::stod(val);
89bool enable_profiling = get_profiling();
90bool use_complete_event = get_complete_event();
91f64 threshold = get_threshold();
92bool enable_nvtx = get_nvtx();
104 const std::optional<std::string> &name,
105 const std::optional<std::string> &category_name) {
107 if (enable_profiling) {
109 if (!use_complete_event) {
111 src_loc_to_name(fileloc), fileloc.loc.function_name(), t_start, 0, 0);
121 const std::optional<std::string> &name,
122 const std::optional<std::string> &category_name) {
124 if (enable_profiling) {
125 if (use_complete_event) {
126 if (tend - t_start > threshold) {
128 src_loc_to_name(fileloc), fileloc.loc.function_name(), t_start, tend, 0, 0);
132 src_loc_to_name(fileloc), fileloc.loc.function_name(), tend, 0, 0);
140 const std::optional<std::string> &name,
141 const std::optional<std::string> &category_name) {
143 if (enable_profiling && enable_nvtx) {
144#ifdef SHAMROCK_USE_NVTX
146 nvtxRangePush(fileloc.loc.function_name());
153 const std::optional<std::string> &name,
154 const std::optional<std::string> &category_name) {
156 if (enable_profiling && enable_nvtx) {
157#ifdef SHAMROCK_USE_NVTX
166 if (enable_profiling) {
double f64
Alias for double.
void register_event_complete(const std::string &name, const std::string &category_name, f64 t_start, f64 tend, u64 pid, u64 tid)
Register a complete event in Chrome tracing.
void register_counter_val(u64 pid, f64 t, const std::string &name, f64 val)
Register a counter value in Chrome tracing.
void register_event_end(const std::string &name, const std::string &category_name, f64 tend, u64 pid, u64 tid)
Register the end of an event in Chrome tracing.
void register_event_start(const std::string &name, const std::string &category_name, f64 t_start, u64 pid, u64 tid)
Register the start of an event in Chrome tracing.
void set_use_complete_event(bool use_complete_event)
Use complete event, or start and begin event in chrome tracing.
void set_event_record_threshold(f64 threshold)
Set the event record threshold.
bool is_profiling_enabled()
Check if profiling is enabled.
void stack_entry_start_no_time(const SourceLocation &fileloc, const std::optional< std::string > &name=std::nullopt, const std::optional< std::string > &category_name=std::nullopt)
Start a profiling event without a time info.
void set_enable_profiling(bool enable_profiling)
Set wether to enable profiling.
void register_counter_val(const std::string &name, f64 time, f64 val)
Register a counter value.
void set_enable_nvtx(bool enable_nvtx)
Set wether to enable NVTX profiling.
void stack_entry_end_no_time(const SourceLocation &fileloc, const std::optional< std::string > &name=std::nullopt, const std::optional< std::string > &category_name=std::nullopt)
End a profiling event without a time info.
void stack_entry_start(const SourceLocation &fileloc, f64 t_start, const std::optional< std::string > &name=std::nullopt, const std::optional< std::string > &category_name=std::nullopt)
Register the start of a profiling event.
void stack_entry_end(const SourceLocation &fileloc, f64 t_start, f64 tend, const std::optional< std::string > &name=std::nullopt, const std::optional< std::string > &category_name=std::nullopt)
Register the end of a profiling event.
provide information about the source location