20 #ifdef KVIKIO_CUDA_FOUND
21 #include <nvtx3/nvtx3.hpp>
24 #include <kvikio/shim/cuda.hpp>
25 #include <kvikio/utils.hpp>
29 #ifdef KVIKIO_CUDA_FOUND
33 struct libkvikio_domain {
34 static constexpr
char const* name{
"libkvikio"};
37 using nvtx_scoped_range_type = nvtx3::scoped_range_in<libkvikio_domain>;
38 using nvtx_registered_string_type = nvtx3::registered_string_in<libkvikio_domain>;
41 #define KVIKIO_CONCAT_HELPER(x, y) x##y
42 #define KVIKIO_CONCAT(x, y) KVIKIO_CONCAT_HELPER(x, y)
46 #define KVIKIO_REGISTER_STRING(message) \
47 [](const char* a_message) -> auto& { \
48 static kvikio::nvtx_registered_string_type a_reg_str{a_message}; \
55 #define KVIKIO_NVTX_FUNC_RANGE_IMPL_0() KVIKIO_NVTX_SCOPED_RANGE_IMPL_1(__PRETTY_FUNCTION__)
56 #define KVIKIO_NVTX_FUNC_RANGE_IMPL_1(payload) \
57 KVIKIO_NVTX_SCOPED_RANGE_IMPL_2(__PRETTY_FUNCTION__, payload)
58 #define KVIKIO_NVTX_FUNC_RANGE_IMPL_2(payload, color) \
59 KVIKIO_NVTX_SCOPED_RANGE_IMPL_3(__PRETTY_FUNCTION__, payload, color)
60 #define KVIKIO_NVTX_FUNC_RANGE_SELECTOR(_0, _1, _2, NAME, ...) NAME
63 #define KVIKIO_NVTX_FUNC_RANGE_IMPL(...) \
64 KVIKIO_NVTX_FUNC_RANGE_SELECTOR(_0, \
66 KVIKIO_NVTX_FUNC_RANGE_IMPL_2, \
67 KVIKIO_NVTX_FUNC_RANGE_IMPL_1, \
68 KVIKIO_NVTX_FUNC_RANGE_IMPL_0) \
72 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL_1(message) \
73 kvikio::nvtx_scoped_range_type KVIKIO_CONCAT(_kvikio_nvtx_range, __LINE__) \
75 nvtx3::event_attributes \
77 KVIKIO_REGISTER_STRING(message), kvikio::NvtxManager::default_color() \
80 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL_3(message, payload_v, color) \
81 kvikio::nvtx_scoped_range_type KVIKIO_CONCAT(_kvikio_nvtx_range, __LINE__) \
83 nvtx3::event_attributes \
85 KVIKIO_REGISTER_STRING(message), nvtx3::payload{kvikio::convert_to_64bit(payload_v)}, color \
88 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL_2(message, payload) \
89 KVIKIO_NVTX_SCOPED_RANGE_IMPL_3(message, payload, kvikio::NvtxManager::default_color())
90 #define KVIKIO_NVTX_SCOPED_RANGE_SELECTOR(_1, _2, _3, NAME, ...) NAME
91 #define KVIKIO_NVTX_SCOPED_RANGE_IMPL(...) \
92 KVIKIO_NVTX_SCOPED_RANGE_SELECTOR(__VA_ARGS__, \
93 KVIKIO_NVTX_SCOPED_RANGE_IMPL_3, \
94 KVIKIO_NVTX_SCOPED_RANGE_IMPL_2, \
95 KVIKIO_NVTX_SCOPED_RANGE_IMPL_1) \
99 #define KVIKIO_NVTX_MARKER_IMPL(message, payload_v) \
100 nvtx3::mark_in<kvikio::libkvikio_domain>(nvtx3::event_attributes{ \
101 KVIKIO_REGISTER_STRING(message), nvtx3::payload{kvikio::convert_to_64bit(payload_v)}})
105 #ifdef KVIKIO_CUDA_FOUND
106 using nvtx_color_type = nvtx3::color;
108 using nvtx_color_type = int;
184 #ifdef KVIKIO_CUDA_FOUND
185 #define KVIKIO_NVTX_FUNC_RANGE(...) KVIKIO_NVTX_FUNC_RANGE_IMPL(__VA_ARGS__)
187 #define KVIKIO_NVTX_FUNC_RANGE(...) \
209 #ifdef KVIKIO_CUDA_FOUND
210 #define KVIKIO_NVTX_SCOPED_RANGE(...) KVIKIO_NVTX_SCOPED_RANGE_IMPL(__VA_ARGS__)
212 #define KVIKIO_NVTX_SCOPED_RANGE(message, payload, ...) \
235 #ifdef KVIKIO_CUDA_FOUND
236 #define KVIKIO_NVTX_MARKER(message, payload) KVIKIO_NVTX_MARKER_IMPL(message, payload)
238 #define KVIKIO_NVTX_MARKER(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.