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.