From 19a6ef175c906d824d39f38fb58b3aa3529baa5a Mon Sep 17 00:00:00 2001 From: Tianyu Liu Date: Tue, 21 Jan 2025 15:21:59 -0500 Subject: [PATCH] Apply noexcept for compat mode-related functions wherever application --- cpp/include/kvikio/defaults.hpp | 4 ++-- cpp/include/kvikio/shim/cufile.hpp | 10 +++++----- cpp/include/kvikio/shim/utils.hpp | 4 ++-- cpp/src/defaults.cpp | 4 ++-- cpp/src/shim/cufile.cpp | 6 +++--- cpp/src/shim/utils.cpp | 22 +++++++++++++--------- 6 files changed, 27 insertions(+), 23 deletions(-) diff --git a/cpp/include/kvikio/defaults.hpp b/cpp/include/kvikio/defaults.hpp index ad8b5a3e40..6b866827a7 100644 --- a/cpp/include/kvikio/defaults.hpp +++ b/cpp/include/kvikio/defaults.hpp @@ -139,7 +139,7 @@ class defaults { * (`ON`/`OFF`/`AUTO`) to two (`ON`/`OFF`) so as to determine the actual I/O path. This function * is lightweight as the inferred result is cached. */ - static CompatMode infer_compat_mode_if_auto(CompatMode compat_mode); + static CompatMode infer_compat_mode_if_auto(CompatMode compat_mode) noexcept; /** * @brief Given a requested compatibility mode, whether it is expected to reduce to `ON`. @@ -156,7 +156,7 @@ class defaults { * @param compat_mode Compatibility mode. * @return Boolean answer. */ - static bool is_compat_mode_preferred(CompatMode compat_mode); + static bool is_compat_mode_preferred(CompatMode compat_mode) noexcept; /** * @brief Whether the global compatibility mode from class defaults is expected to be `ON`. diff --git a/cpp/include/kvikio/shim/cufile.hpp b/cpp/include/kvikio/shim/cufile.hpp index c90fba1fce..4823fd42f5 100644 --- a/cpp/include/kvikio/shim/cufile.hpp +++ b/cpp/include/kvikio/shim/cufile.hpp @@ -102,9 +102,9 @@ class cuFileAPI { * @return The boolean answer */ #ifdef KVIKIO_CUFILE_FOUND -bool is_cufile_library_available(); +bool is_cufile_library_available() noexcept; #else -constexpr bool is_cufile_library_available() { return false; } +constexpr bool is_cufile_library_available() noexcept { return false; } #endif /** @@ -115,7 +115,7 @@ constexpr bool is_cufile_library_available() { return false; } * * @return The boolean answer */ -bool is_cufile_available(); +bool is_cufile_available() noexcept; /** * @brief Get cufile version (or zero if older than v1.8). @@ -129,9 +129,9 @@ bool is_cufile_available(); * @return The version (1000*major + 10*minor) or zero if older than 1080. */ #ifdef KVIKIO_CUFILE_FOUND -int cufile_version(); +int cufile_version() noexcept; #else -constexpr int cufile_version() { return 0; } +constexpr int cufile_version() noexcept { return 0; } #endif /** diff --git a/cpp/include/kvikio/shim/utils.hpp b/cpp/include/kvikio/shim/utils.hpp index bc47be205f..52dfea42e8 100644 --- a/cpp/include/kvikio/shim/utils.hpp +++ b/cpp/include/kvikio/shim/utils.hpp @@ -80,7 +80,7 @@ void get_symbol(T& handle, void* lib, const char* name) * * @return The boolean answer */ -[[nodiscard]] bool is_running_in_wsl(); +[[nodiscard]] bool is_running_in_wsl() noexcept; /** * @brief Check if `/run/udev` is readable @@ -91,6 +91,6 @@ void get_symbol(T& handle, void* lib, const char* name) * * @return The boolean answer */ -[[nodiscard]] bool run_udev_readable(); +[[nodiscard]] bool run_udev_readable() noexcept; } // namespace kvikio diff --git a/cpp/src/defaults.cpp b/cpp/src/defaults.cpp index affcac6be3..4b431e9591 100644 --- a/cpp/src/defaults.cpp +++ b/cpp/src/defaults.cpp @@ -143,7 +143,7 @@ CompatMode defaults::compat_mode() { return instance()->_compat_mode; } void defaults::compat_mode_reset(CompatMode compat_mode) { instance()->_compat_mode = compat_mode; } -CompatMode defaults::infer_compat_mode_if_auto(CompatMode compat_mode) +CompatMode defaults::infer_compat_mode_if_auto(CompatMode compat_mode) noexcept { if (compat_mode == CompatMode::AUTO) { static auto inferred_compat_mode_for_auto = []() -> CompatMode { @@ -154,7 +154,7 @@ CompatMode defaults::infer_compat_mode_if_auto(CompatMode compat_mode) return compat_mode; } -bool defaults::is_compat_mode_preferred(CompatMode compat_mode) +bool defaults::is_compat_mode_preferred(CompatMode compat_mode) noexcept { return compat_mode == CompatMode::ON || (compat_mode == CompatMode::AUTO && diff --git a/cpp/src/shim/cufile.cpp b/cpp/src/shim/cufile.cpp index a6758cab7b..b139b50b06 100644 --- a/cpp/src/shim/cufile.cpp +++ b/cpp/src/shim/cufile.cpp @@ -123,7 +123,7 @@ void cuFileAPI::driver_close() } #ifdef KVIKIO_CUFILE_FOUND -bool is_cufile_library_available() +bool is_cufile_library_available() noexcept { try { cuFileAPI::instance(); @@ -134,13 +134,13 @@ bool is_cufile_library_available() } #endif -bool is_cufile_available() +bool is_cufile_available() noexcept { return is_cufile_library_available() && run_udev_readable() && !is_running_in_wsl(); } #ifdef KVIKIO_CUFILE_FOUND -int cufile_version() +int cufile_version() noexcept { try { return cuFileAPI::instance().version; diff --git a/cpp/src/shim/utils.cpp b/cpp/src/shim/utils.cpp index 314fb5382a..1f1aaf8ead 100644 --- a/cpp/src/shim/utils.cpp +++ b/cpp/src/shim/utils.cpp @@ -45,19 +45,23 @@ void* load_library(const std::vector& names, int mode) throw std::runtime_error("cannot open shared object file, tried: " + ss.str()); } -bool is_running_in_wsl() +bool is_running_in_wsl() noexcept { - struct utsname buf {}; - int err = ::uname(&buf); - if (err == 0) { - const std::string name(static_cast(buf.release)); - // 'Microsoft' for WSL1 and 'microsoft' for WSL2 - return name.find("icrosoft") != std::string::npos; + try { + struct utsname buf {}; + int err = ::uname(&buf); + if (err == 0) { + const std::string name(static_cast(buf.release)); + // 'Microsoft' for WSL1 and 'microsoft' for WSL2 + return name.find("icrosoft") != std::string::npos; + } + return false; + } catch (...) { + return false; } - return false; } -bool run_udev_readable() +bool run_udev_readable() noexcept { try { return std::filesystem::is_directory("/run/udev");