#ifndef REMOTEAR3_CUDA_HELPER_H #define REMOTEAR3_CUDA_HELPER_H #include "utility.hpp" #include #include #include #include inline bool check_cuda_api_call(CUresult api_ret, unsigned int line_number, const char *file_name, const char *api_call_str) { if (api_ret == CUDA_SUCCESS) [[likely]] return true; const char *error_name, *error_str; auto ret = cuGetErrorName(api_ret, &error_name); if (ret != CUDA_SUCCESS) [[unlikely]] error_name = "Unknown"; ret = cuGetErrorString(api_ret, &error_str); if (ret != CUDA_SUCCESS) [[unlikely]] error_str = "Unknown"; SPDLOG_ERROR("CUDA runtime api call {} failed at {}:{} with error 0x{:x}:{}, {}.", api_call_str, file_name, line_number, (int) api_ret, error_name, error_str); RET_ERROR_B; } inline bool check_cuda_api_call(cudaError api_ret, unsigned int line_number, const char *file_name, const char *api_call_str) { if (api_ret == cudaSuccess) [[likely]] return true; SPDLOG_ERROR("CUDA driver api call {} failed at {}:{} with error 0x{:x}.", api_call_str, file_name, line_number, (int) api_ret); RET_ERROR_B; } inline bool check_cuda_api_call(NppStatus api_ret, unsigned int line_number, const char *file_name, const char *api_call_str) { if (api_ret == NPP_SUCCESS) [[likely]] return true; SPDLOG_ERROR("NPP api call {} failed at {}:{} with error 0x{:x}.", api_call_str, file_name, line_number, (int) api_ret); RET_ERROR_B; } #define CUDA_API_CHECK(api_call) \ check_cuda_api_call( \ api_call, __LINE__, __FILE__, #api_call) #define CUDA_API_CHECK_P(api_call) \ if (!check_cuda_api_call( \ api_call, __LINE__, __FILE__, #api_call)) [[unlikely]] \ return nullptr #endif //REMOTEAR3_CUDA_HELPER_H