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.