#ifndef REMOTEAR2_CUDA_HELPER_HPP #define REMOTEAR2_CUDA_HELPER_HPP #include "config.h" #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 api call {} failed at {}:{} with error 0x{:x}:{}, {}.", api_call_str, file_name, line_number, api_ret, error_name, error_str); RET_ERROR; } 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 api call {} failed at {}:{} with error 0x{:x}.", api_call_str, file_name, line_number, api_ret); RET_ERROR; } #define CUDA_API_CHECK(api_call) \ if (!check_cuda_api_call( \ api_call, __LINE__, __FILE__, #api_call)) [[unlikely]] \ return false inline bool create_cuda_context(CUcontext *ctx) { int cuda_device_count; CUDA_API_CHECK(cuDeviceGetCount(&cuda_device_count)); CALL_CHECK(cuda_device_count > default_cuda_device_id); CUdevice cuda_device; CUDA_API_CHECK(cuDeviceGet(&cuda_device, default_cuda_device_id)); CUDA_API_CHECK(cuCtxCreate(ctx, CU_CTX_SCHED_AUTO, cuda_device)); return true; } #endif //REMOTEAR2_CUDA_HELPER_HPP