From 281e3aaf3033f557a8aa731f76b5c79d78240a06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Plewa?= Date: Wed, 14 Feb 2024 17:54:46 +0100 Subject: [PATCH] Refactor cuda adapter to new logger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit refactors the Cuda adapter to adopt the new logger introduced in d9cd2235 (Integrate logger with library, 2023-02-03). Signed-off-by: Ɓukasz Plewa --- source/adapters/cuda/adapter.cpp | 28 ++++++++++++++ source/adapters/cuda/command_buffer.hpp | 5 ++- source/adapters/cuda/common.cpp | 50 ++++++++++--------------- source/adapters/cuda/device.cpp | 3 +- 4 files changed, 52 insertions(+), 34 deletions(-) diff --git a/source/adapters/cuda/adapter.cpp b/source/adapters/cuda/adapter.cpp index d4c88974a9..3ca3b8a9ad 100644 --- a/source/adapters/cuda/adapter.cpp +++ b/source/adapters/cuda/adapter.cpp @@ -11,14 +11,42 @@ #include #include "common.hpp" +#include "logger/ur_logger.hpp" #include "tracing.hpp" struct ur_adapter_handle_t_ { std::atomic RefCount = 0; std::mutex Mutex; struct cuda_tracing_context_t_ *TracingCtx = nullptr; + logger::Logger &logger; + ur_adapter_handle_t_(); }; +class ur_legacy_sink : public logger::Sink { +public: + ur_legacy_sink(std::string logger_name = "", bool skip_prefix = true) + : Sink(std::move(logger_name), skip_prefix) { + this->ostream = &std::cerr; + } + + virtual void print([[maybe_unused]] logger::Level level, + const std::string &msg) override { + std::cerr << msg << std::endl; + } + + ~ur_legacy_sink() = default; +}; +ur_adapter_handle_t_::ur_adapter_handle_t_() + : logger(logger::get_logger("cuda")) { + + if (std::getenv("UR_LOG_CUDA") != nullptr) + return; + + if (std::getenv("SYCL_PI_SUPPRESS_ERROR_MESSAGE") != nullptr || + std::getenv("UR_SUPPRESS_ERROR_MESSAGE") != nullptr) { + logger.setLegacySink(std::make_unique()); + } +} ur_adapter_handle_t_ adapter{}; UR_APIEXPORT ur_result_t UR_APICALL diff --git a/source/adapters/cuda/command_buffer.hpp b/source/adapters/cuda/command_buffer.hpp index 60e03dc655..92f3433162 100644 --- a/source/adapters/cuda/command_buffer.hpp +++ b/source/adapters/cuda/command_buffer.hpp @@ -12,6 +12,7 @@ #include #include "context.hpp" +#include "logger/ur_logger.hpp" #include #include @@ -169,10 +170,10 @@ static inline const char *getUrResultString(ur_result_t Result) { #define UR_CALL(Call, Result) \ { \ if (PrintTrace) \ - fprintf(stderr, "UR ---> %s\n", #Call); \ + logger::always("UR ---> {}", #Call); \ Result = (Call); \ if (PrintTrace) \ - fprintf(stderr, "UR <--- %s(%s)\n", #Call, getUrResultString(Result)); \ + logger::always("UR <--- {}({})", #Call, getUrResultString(Result)); \ } // Handle to a kernel command. diff --git a/source/adapters/cuda/common.cpp b/source/adapters/cuda/common.cpp index 9f2a330262..f2b6dae841 100644 --- a/source/adapters/cuda/common.cpp +++ b/source/adapters/cuda/common.cpp @@ -9,6 +9,7 @@ //===----------------------------------------------------------------------===// #include "common.hpp" +#include "logger/ur_logger.hpp" #include @@ -41,22 +42,18 @@ void checkErrorUR(CUresult Result, const char *Function, int Line, return; } - if (std::getenv("SYCL_PI_SUPPRESS_ERROR_MESSAGE") == nullptr && - std::getenv("UR_SUPPRESS_ERROR_MESSAGE") == nullptr) { - const char *ErrorString = nullptr; - const char *ErrorName = nullptr; - cuGetErrorName(Result, &ErrorName); - cuGetErrorString(Result, &ErrorString); - std::stringstream SS; - SS << "\nUR CUDA ERROR:" - << "\n\tValue: " << Result - << "\n\tName: " << ErrorName - << "\n\tDescription: " << ErrorString - << "\n\tFunction: " << Function << "\n\tSource Location: " << File - << ":" << Line << "\n" - << std::endl; - std::cerr << SS.str(); - } + const char *ErrorString = nullptr; + const char *ErrorName = nullptr; + cuGetErrorName(Result, &ErrorName); + cuGetErrorString(Result, &ErrorString); + std::stringstream SS; + SS << "\nUR CUDA ERROR:" + << "\n\tValue: " << Result + << "\n\tName: " << ErrorName + << "\n\tDescription: " << ErrorString + << "\n\tFunction: " << Function << "\n\tSource Location: " << File + << ":" << Line << "\n"; + logger::error("{}", SS.str()); if (std::getenv("PI_CUDA_ABORT") != nullptr || std::getenv("UR_CUDA_ABORT") != nullptr) { @@ -72,16 +69,11 @@ void checkErrorUR(ur_result_t Result, const char *Function, int Line, return; } - if (std::getenv("SYCL_PI_SUPPRESS_ERROR_MESSAGE") == nullptr && - std::getenv("UR_SUPPRESS_ERROR_MESSAGE") == nullptr) { - std::stringstream SS; - SS << "\nUR ERROR:" - << "\n\tValue: " << Result - << "\n\tFunction: " << Function << "\n\tSource Location: " << File - << ":" << Line << "\n" - << std::endl; - std::cerr << SS.str(); - } + std::stringstream SS; + SS << "\nUR ERROR:" + << "\n\tValue: " << Result << "\n\tFunction: " << Function + << "\n\tSource Location: " << File << ":" << Line << "\n"; + logger::error("{}", SS.str()); if (std::getenv("PI_CUDA_ABORT") != nullptr) { std::abort(); @@ -101,7 +93,7 @@ std::string getCudaVersionString() { } void detail::ur::die(const char *Message) { - std::cerr << "ur_die: " << Message << std::endl; + logger::always("ur_die:{}", Message); std::terminate(); } @@ -110,10 +102,6 @@ void detail::ur::assertion(bool Condition, const char *Message) { die(Message); } -void detail::ur::cuPrint(const char *Message) { - std::cerr << "ur_print: " << Message << std::endl; -} - // Global variables for ZER_EXT_RESULT_ADAPTER_SPECIFIC_ERROR thread_local ur_result_t ErrorMessageCode = UR_RESULT_SUCCESS; thread_local char ErrorMessage[MaxMessageSize]; diff --git a/source/adapters/cuda/device.cpp b/source/adapters/cuda/device.cpp index 69665fb456..da11f3f1bf 100644 --- a/source/adapters/cuda/device.cpp +++ b/source/adapters/cuda/device.cpp @@ -15,6 +15,7 @@ #include "adapter.hpp" #include "context.hpp" #include "device.hpp" +#include "logger/ur_logger.hpp" #include "platform.hpp" #include "ur_util.hpp" @@ -293,7 +294,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, std::getenv("UR_CUDA_ENABLE_IMAGE_SUPPORT") != nullptr) { Enabled = true; } else { - detail::ur::cuPrint( + logger::always( "Images are not fully supported by the CUDA BE, their support is " "disabled by default. Their partial support can be activated by " "setting SYCL_PI_CUDA_ENABLE_IMAGE_SUPPORT environment variable at "