| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #ifndef REMOTEAR2_CUDA_HELPER_HPP
- #define REMOTEAR2_CUDA_HELPER_HPP
- #include "config.h"
- #include <cuda.h>
- #include <cuda_runtime.h>
- 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
|