9 #include <nvtx3/nvtx3.hpp>
11 #include <kvikio/shim/cuda.hpp>
12 #include <kvikio/utils.hpp>
20 static constexpr
char const* name{
"libkvikio"};
23 using nvtx_scoped_range_type = nvtx3::scoped_range_in<libkvikio_domain>;
24 using nvtx_registered_string_type = nvtx3::registered_string_in<libkvikio_domain>;
27 #define KVIKIO_CONCAT_HELPER(x, y) x##y
28 #define KVIKIO_CONCAT(x, y) KVIKIO_CONCAT_HELPER(x, y)
32 #define KVIKIO_REGISTER_STRING(message) \
33 [](const char* a_message) -> auto& { \
34 static kvikio::nvtx_registered_string_type a_reg_str{a_message}; \
41 #define KVIKIO_NVTX_FUNC_RANGE_IMPL_0() KVIKIO_NVTX_SCOPED_RANGE_IMPL_1(__PRETTY_FUNCTION__)
42 #define KVIKIO_NVTX_FUNC_RANGE_IMPL_1(payload) \
43 KVIKIO_NVTX_SCOPED_RANGE_IMPL_2(__PRETTY_FUNCTION__, payload)
44 #define KVIKIO_NVTX_FUNC_RANGE_IMPL_2(payload, color) \
45 KVIKIO_NVTX_SCOPED_RANGE_IMPL_3(__PRETTY_FUNCTION__, payload, color)
46 #define KVIKIO_NVTX_FUNC_RANGE_SELECTOR(_0, _1, _2, NAME, ...) NAME
49 #define KVIKIO_NVTX_FUNC_RANGE_IMPL(...) \
50 KVIKIO_NVTX_FUNC_RANGE_SELECTOR(_0, \
52 KVIKIO_NVTX_FUNC_RANGE_IMPL_2, \
53 KVIKIO_NVTX_FUNC_RANGE_IMPL_1, \
54 KVIKIO_NVTX_FUNC_RANGE_IMPL_0) \
58 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL_1(message) \
59 kvikio::nvtx_scoped_range_type KVIKIO_CONCAT(_kvikio_nvtx_range, __LINE__) \
61 nvtx3::event_attributes \
63 KVIKIO_REGISTER_STRING(message), kvikio::NvtxManager::default_color() \
66 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL_3(message, payload_v, color) \
67 kvikio::nvtx_scoped_range_type KVIKIO_CONCAT(_kvikio_nvtx_range, __LINE__) \
69 nvtx3::event_attributes \
71 KVIKIO_REGISTER_STRING(message), nvtx3::payload{kvikio::convert_to_64bit(payload_v)}, color \
74 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL_2(message, payload) \
75 KVIKIO_NVTX_SCOPED_RANGE_IMPL_3(message, payload, kvikio::NvtxManager::default_color())
76 #define KVIKIO_NVTX_SCOPED_RANGE_SELECTOR(_1, _2, _3, NAME, ...) NAME
77 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL(...) \
78 KVIKIO_NVTX_SCOPED_RANGE_SELECTOR(__VA_ARGS__, \
79 KVIKIO_NVTX_SCOPED_RANGE_IMPL_3, \
80 KVIKIO_NVTX_SCOPED_RANGE_IMPL_2, \
81 KVIKIO_NVTX_SCOPED_RANGE_IMPL_1) \
85 #define KVIKIO_NVTX_MARKER_IMPL(message, payload_v) \
86 nvtx3::mark_in<kvikio::libkvikio_domain>(nvtx3::event_attributes{ \
87 KVIKIO_REGISTER_STRING(message), nvtx3::payload{kvikio::convert_to_64bit(payload_v)}})
89 using nvtx_color_type = nvtx3::color;
164 #define KVIKIO_NVTX_FUNC_RANGE(...) KVIKIO_NVTX_FUNC_RANGE_IMPL(__VA_ARGS__)
183 #define KVIKIO_NVTX_SCOPED_RANGE(...) KVIKIO_NVTX_SCOPED_RANGE_IMPL(__VA_ARGS__)
203 #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.