20 #include <nvtx3/nvtx3.hpp>
22 #include <kvikio/shim/cuda.hpp>
23 #include <kvikio/utils.hpp>
31 static constexpr
char const* name{
"libkvikio"};
34 using nvtx_scoped_range_type = nvtx3::scoped_range_in<libkvikio_domain>;
35 using nvtx_registered_string_type = nvtx3::registered_string_in<libkvikio_domain>;
38 #define KVIKIO_CONCAT_HELPER(x, y) x##y
39 #define KVIKIO_CONCAT(x, y) KVIKIO_CONCAT_HELPER(x, y)
43 #define KVIKIO_REGISTER_STRING(message) \
44 [](const char* a_message) -> auto& { \
45 static kvikio::nvtx_registered_string_type a_reg_str{a_message}; \
52 #define KVIKIO_NVTX_FUNC_RANGE_IMPL_0() KVIKIO_NVTX_SCOPED_RANGE_IMPL_1(__PRETTY_FUNCTION__)
53 #define KVIKIO_NVTX_FUNC_RANGE_IMPL_1(payload) \
54 KVIKIO_NVTX_SCOPED_RANGE_IMPL_2(__PRETTY_FUNCTION__, payload)
55 #define KVIKIO_NVTX_FUNC_RANGE_IMPL_2(payload, color) \
56 KVIKIO_NVTX_SCOPED_RANGE_IMPL_3(__PRETTY_FUNCTION__, payload, color)
57 #define KVIKIO_NVTX_FUNC_RANGE_SELECTOR(_0, _1, _2, NAME, ...) NAME
60 #define KVIKIO_NVTX_FUNC_RANGE_IMPL(...) \
61 KVIKIO_NVTX_FUNC_RANGE_SELECTOR(_0, \
63 KVIKIO_NVTX_FUNC_RANGE_IMPL_2, \
64 KVIKIO_NVTX_FUNC_RANGE_IMPL_1, \
65 KVIKIO_NVTX_FUNC_RANGE_IMPL_0) \
69 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL_1(message) \
70 kvikio::nvtx_scoped_range_type KVIKIO_CONCAT(_kvikio_nvtx_range, __LINE__) \
72 nvtx3::event_attributes \
74 KVIKIO_REGISTER_STRING(message), kvikio::NvtxManager::default_color() \
77 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL_3(message, payload_v, color) \
78 kvikio::nvtx_scoped_range_type KVIKIO_CONCAT(_kvikio_nvtx_range, __LINE__) \
80 nvtx3::event_attributes \
82 KVIKIO_REGISTER_STRING(message), nvtx3::payload{kvikio::convert_to_64bit(payload_v)}, color \
85 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL_2(message, payload) \
86 KVIKIO_NVTX_SCOPED_RANGE_IMPL_3(message, payload, kvikio::NvtxManager::default_color())
87 #define KVIKIO_NVTX_SCOPED_RANGE_SELECTOR(_1, _2, _3, NAME, ...) NAME
88 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL(...) \
89 KVIKIO_NVTX_SCOPED_RANGE_SELECTOR(__VA_ARGS__, \
90 KVIKIO_NVTX_SCOPED_RANGE_IMPL_3, \
91 KVIKIO_NVTX_SCOPED_RANGE_IMPL_2, \
92 KVIKIO_NVTX_SCOPED_RANGE_IMPL_1) \
96 #define KVIKIO_NVTX_MARKER_IMPL(message, payload_v) \
97 nvtx3::mark_in<kvikio::libkvikio_domain>(nvtx3::event_attributes{ \
98 KVIKIO_REGISTER_STRING(message), nvtx3::payload{kvikio::convert_to_64bit(payload_v)}})
100 using nvtx_color_type = nvtx3::color;
175 #define KVIKIO_NVTX_FUNC_RANGE(...) KVIKIO_NVTX_FUNC_RANGE_IMPL(__VA_ARGS__)
194 #define KVIKIO_NVTX_SCOPED_RANGE(...) KVIKIO_NVTX_SCOPED_RANGE_IMPL(__VA_ARGS__)
214 #define KVIKIO_NVTX_MARKER(message, payload) KVIKIO_NVTX_MARKER_IMPL(message, payload)
Utility singleton class for NVTX annotation.
static void rename_current_thread(std::string_view new_name) noexcept
Rename the current thread under the KvikIO NVTX domain.
static const nvtx_color_type & get_color_by_index(std::uint64_t idx) noexcept
Return the color at the given index from the internal color palette whose size n is a power of 2....
static const nvtx_color_type & default_color() noexcept
Return the default color.
Tag type for libkvikio's NVTX domain.