10 #include <nvtx3/nvtx3.hpp>
12 #include <rapidsmpf/utils/misc.hpp>
24 requires std::is_integral_v<T>
26 if constexpr (std::numeric_limits<T>::max()
27 > std::numeric_limits<std::int64_t>::max())
29 if (value > std::numeric_limits<std::int64_t>::max()) {
30 throw std::overflow_error(
31 "convert_to_64bit(x): x too large to fit std::int64_t"
35 return rapidsmpf::safe_cast<std::int64_t>(value);
46 requires std::is_floating_point_v<T>
56 static constexpr
char const*
name{
"rapidsmpf"};
61 #define RAPIDSMPF_REGISTER_STRING(msg) \
62 [](char const* a_msg) -> auto& { \
63 static nvtx3::registered_string_in<rapidsmpf_domain> a_reg_str{a_msg}; \
68 #define RAPIDSMPF_NVTX_FUNC_RANGE_IMPL_WITH_VAL(val) \
70 std::is_arithmetic_v<decltype(val)>, \
71 "Value must be integral or floating point type" \
73 nvtx3::scoped_range_in<rapidsmpf_domain> RAPIDSMPF_CONCAT( \
74 _rapidsmpf_nvtx_range, __LINE__ \
76 nvtx3::event_attributes { \
77 RAPIDSMPF_REGISTER_STRING(__func__), nvtx3::payload { \
78 rapidsmpf::detail::convert_to_64bit(val) \
84 #define RAPIDSMPF_NVTX_FUNC_RANGE_IMPL_WITHOUT_VAL() NVTX3_FUNC_RANGE_IN(rapidsmpf_domain)
87 #define RAPIDSMPF_GET_MACRO_FUNC(_0, _1, NAME, ...) NAME
90 #define RAPIDSMPF_NVTX_FUNC_RANGE_IMPL(...) \
91 RAPIDSMPF_GET_MACRO_FUNC(dummy __VA_OPT__(, ) __VA_ARGS__, RAPIDSMPF_NVTX_FUNC_RANGE_IMPL_WITH_VAL, RAPIDSMPF_NVTX_FUNC_RANGE_IMPL_WITHOUT_VAL)( \
117 #define RAPIDSMPF_NVTX_FUNC_RANGE(...) RAPIDSMPF_NVTX_FUNC_RANGE_IMPL(__VA_ARGS__)
120 #define RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL_WITH_VAL(msg, val) \
121 nvtx3::scoped_range_in<rapidsmpf_domain> RAPIDSMPF_CONCAT( \
122 _rapidsmpf_nvtx_range, __LINE__ \
124 nvtx3::event_attributes { \
125 RAPIDSMPF_REGISTER_STRING(msg), nvtx3::payload { \
126 rapidsmpf::detail::convert_to_64bit(val) \
132 #define RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL_WITHOUT_VAL(msg) \
133 nvtx3::scoped_range_in<rapidsmpf_domain> RAPIDSMPF_CONCAT( \
134 _rapidsmpf_nvtx_range, __LINE__ \
136 nvtx3::event_attributes { \
137 RAPIDSMPF_REGISTER_STRING(msg) \
142 #define RAPIDSMPF_GET_MACRO(_1, _2, NAME, ...) NAME
145 #define RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL(...) \
146 RAPIDSMPF_GET_MACRO( \
148 RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL_WITH_VAL, \
149 RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL_WITHOUT_VAL \
174 #define RAPIDSMPF_NVTX_SCOPED_RANGE(...) RAPIDSMPF_NVTX_SCOPED_RANGE_IMPL(__VA_ARGS__)
197 #if RAPIDSMPF_VERBOSE_INFO
198 #define RAPIDSMPF_NVTX_SCOPED_RANGE_VERBOSE(...) RAPIDSMPF_NVTX_SCOPED_RANGE(__VA_ARGS__)
200 #define RAPIDSMPF_NVTX_SCOPED_RANGE_VERBOSE(...)
203 #define RAPIDSMPF_NVTX_MARKER_IMPL(msg, val) \
204 nvtx3::mark_in<rapidsmpf_domain>(nvtx3::event_attributes{ \
205 RAPIDSMPF_REGISTER_STRING(msg), \
206 nvtx3::payload{rapidsmpf::detail::convert_to_64bit(val)} \
218 #define RAPIDSMPF_NVTX_MARKER(message, payload) \
219 RAPIDSMPF_NVTX_MARKER_IMPL(message, payload)
231 #if RAPIDSMPF_VERBOSE_INFO
232 #define RAPIDSMPF_NVTX_MARKER_VERBOSE(message, payload) \
233 RAPIDSMPF_NVTX_MARKER_IMPL(message, payload)
235 #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.
Tag type for rapidsmpf's NVTX domain.
static constexpr char const * name
nvtx domain name