7 #include <source_location>
10 #include <string_view>
11 #include <type_traits>
13 #include <nvtx3/nvtx3.hpp>
15 #include <rapidsmpf/utils/misc.hpp>
27 requires std::is_integral_v<T>
29 if constexpr (std::numeric_limits<T>::max()
30 > std::numeric_limits<std::int64_t>::max())
32 if (value > std::numeric_limits<std::int64_t>::max()) {
33 throw std::overflow_error(
34 "convert_to_64bit(x): x too large to fit std::int64_t"
38 return rapidsmpf::safe_cast<std::int64_t>(value);
49 requires std::is_floating_point_v<T>
70 std::string_view pretty
73 auto const paren = pretty.find(
'(');
74 auto const end_pos = (paren == std::string_view::npos) ? pretty.size() : paren;
77 auto const space = pretty.rfind(
' ', end_pos);
81 auto const start_pos = (space == std::string_view::npos) ? 0 : space + 1;
83 return pretty.substr(start_pos, end_pos - start_pos);
92 static constexpr
char const*
name{
"rapidsmpf"};
97 #define RAPIDSMPF_REGISTER_STRING(msg) \
98 [](char const* a_msg) -> auto& { \
99 static nvtx3::registered_string_in<rapidsmpf_domain> a_reg_str{a_msg}; \
114 #define RAPIDSMPF_REGISTER_FUNC_STRING \
115 [](char const* pretty_fn) -> auto& { \
116 static const std::string s_func_name{ \
117 rapidsmpf::detail::extract_func_name(pretty_fn) \
119 static nvtx3::registered_string_in<rapidsmpf_domain> a_reg_str{ \
120 s_func_name.c_str() \
123 }(std::source_location::current().function_name())
126 #define RAPIDSMPF_NVTX_FUNC_RANGE_IMPL_WITH_VAL(val) \
128 std::is_arithmetic_v<decltype(val)>, \
129 "Value must be integral or floating point type" \
131 nvtx3::scoped_range_in<rapidsmpf_domain> RAPIDSMPF_CONCAT( \
132 _rapidsmpf_nvtx_range, __LINE__ \
134 nvtx3::event_attributes { \
135 RAPIDSMPF_REGISTER_FUNC_STRING, nvtx3::payload { \
136 rapidsmpf::detail::convert_to_64bit(val) \
142 #define RAPIDSMPF_NVTX_FUNC_RANGE_IMPL_WITHOUT_VAL() \
143 nvtx3::scoped_range_in<rapidsmpf_domain> RAPIDSMPF_CONCAT( \
144 _rapidsmpf_nvtx_range, __LINE__ \
146 nvtx3::event_attributes { \
147 RAPIDSMPF_REGISTER_FUNC_STRING \
152 #define RAPIDSMPF_GET_MACRO_FUNC(_0, _1, NAME, ...) NAME
155 #define RAPIDSMPF_NVTX_FUNC_RANGE_IMPL(...) \
156 RAPIDSMPF_GET_MACRO_FUNC(dummy __VA_OPT__(, ) __VA_ARGS__, RAPIDSMPF_NVTX_FUNC_RANGE_IMPL_WITH_VAL, RAPIDSMPF_NVTX_FUNC_RANGE_IMPL_WITHOUT_VAL)( \
190 #define RAPIDSMPF_NVTX_FUNC_RANGE(...) RAPIDSMPF_NVTX_FUNC_RANGE_IMPL(__VA_ARGS__)
193 #define RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL_WITH_VAL(msg, val) \
194 nvtx3::scoped_range_in<rapidsmpf_domain> RAPIDSMPF_CONCAT( \
195 _rapidsmpf_nvtx_range, __LINE__ \
197 nvtx3::event_attributes { \
198 RAPIDSMPF_REGISTER_STRING(msg), nvtx3::payload { \
199 rapidsmpf::detail::convert_to_64bit(val) \
205 #define RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL_WITHOUT_VAL(msg) \
206 nvtx3::scoped_range_in<rapidsmpf_domain> RAPIDSMPF_CONCAT( \
207 _rapidsmpf_nvtx_range, __LINE__ \
209 nvtx3::event_attributes { \
210 RAPIDSMPF_REGISTER_STRING(msg) \
215 #define RAPIDSMPF_GET_MACRO(_1, _2, NAME, ...) NAME
218 #define RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL(...) \
219 RAPIDSMPF_GET_MACRO( \
221 RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL_WITH_VAL, \
222 RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL_WITHOUT_VAL \
247 #define RAPIDSMPF_NVTX_SCOPED_RANGE(...) RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL(__VA_ARGS__)
270 #if RAPIDSMPF_VERBOSE_INFO
271 #define RAPIDSMPF_NVTX_SCOPED_RANGE_VERBOSE(...) RAPIDSMPF_NVTX_SCOPED_RANGE(__VA_ARGS__)
273 #define RAPIDSMPF_NVTX_SCOPED_RANGE_VERBOSE(...)
276 #define RAPIDSMPF_NVTX_MARKER_IMPL(msg, val) \
277 nvtx3::mark_in<rapidsmpf_domain>(nvtx3::event_attributes{ \
278 RAPIDSMPF_REGISTER_STRING(msg), \
279 nvtx3::payload{rapidsmpf::detail::convert_to_64bit(val)} \
291 #define RAPIDSMPF_NVTX_MARKER(message, payload) \
292 RAPIDSMPF_NVTX_MARKER_IMPL(message, payload)
304 #if RAPIDSMPF_VERBOSE_INFO
305 #define RAPIDSMPF_NVTX_MARKER_VERBOSE(message, payload) \
306 RAPIDSMPF_NVTX_MARKER_IMPL(message, payload)
308 #define RAPIDSMPF_NVTX_MARKER_VERBOSE(message, payload)
requires std::is_integral_v< T > std::int64_t convert_to_64bit(T value)
Convert an integral value to a 64-bit signed integer.
constexpr std::string_view extract_func_name(std::string_view pretty) noexcept
Extract the qualified function name from a __PRETTY_FUNCTION__ string.
Tag type for rapidsmpf's NVTX domain.
static constexpr char const * name
nvtx domain name