From a28d8062e67264046f87811ef76ccc21e3274fe1 Mon Sep 17 00:00:00 2001 From: "Mads R. B. Kristensen" Date: Wed, 25 Sep 2024 21:29:53 +0200 Subject: [PATCH 1/2] KVIKIO_NVTX_FUNC_RANGE(): use convert_to_64bit --- cpp/include/kvikio/utils.hpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/cpp/include/kvikio/utils.hpp b/cpp/include/kvikio/utils.hpp index 7a54b2793b..234f17879f 100644 --- a/cpp/include/kvikio/utils.hpp +++ b/cpp/include/kvikio/utils.hpp @@ -21,7 +21,9 @@ #include #include #include +#include #include +#include #include @@ -69,6 +71,27 @@ inline constexpr std::size_t page_size = 4096; return reinterpret_cast(devPtr); } +/** + * @brief Help function to convert value to 64 bit signed integer + */ +template >* = nullptr> +[[nodiscard]] std::int64_t convert_to_64bit(T value) +{ + if (value >= std::numeric_limits::max()) { + throw std::overflow_error("convert_to_64bit(x): x too large to fit std::int64_t"); + } + return std::int64_t(value); +} + +/** + * @brief Help function to convert value to 64 bit float + */ +template >* = nullptr> +[[nodiscard]] double convert_to_64bit(T value) +{ + return double(value); +} + /** * @brief Check if `ptr` points to host memory (as opposed to device memory) * @@ -280,7 +303,7 @@ struct libkvikio_domain { { \ nvtx3::event_attributes \ { \ - msg, nvtx3::payload { val } \ + msg, nvtx3::payload { convert_to_64bit(val) } \ } \ } #define GET_KVIKIO_NVTX_FUNC_RANGE_MACRO(_1, _2, NAME, ...) NAME From 439f59ff530668ccd9b7eb7073e4b774578b1ebc Mon Sep 17 00:00:00 2001 From: "Mads R. B. Kristensen" Date: Sun, 29 Sep 2024 16:08:55 +0200 Subject: [PATCH 2/2] use constexpr --- cpp/include/kvikio/utils.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cpp/include/kvikio/utils.hpp b/cpp/include/kvikio/utils.hpp index 234f17879f..acdafba4da 100644 --- a/cpp/include/kvikio/utils.hpp +++ b/cpp/include/kvikio/utils.hpp @@ -77,8 +77,10 @@ inline constexpr std::size_t page_size = 4096; template >* = nullptr> [[nodiscard]] std::int64_t convert_to_64bit(T value) { - if (value >= std::numeric_limits::max()) { - throw std::overflow_error("convert_to_64bit(x): x too large to fit std::int64_t"); + if constexpr (std::numeric_limits::max() > std::numeric_limits::max()) { + if (value > std::numeric_limits::max()) { + throw std::overflow_error("convert_to_64bit(x): x too large to fit std::int64_t"); + } } return std::int64_t(value); }