5#include "cuda_runtime_api.h"
6#include "CudaDriverLoader.h"
7#include "AIPExceptions.h"
9inline bool check(CUresult e,
int iLine,
const char *szFile)
11 if (e != CUDA_SUCCESS)
13 const char *szErrName = NULL;
15 if (loader.cuGetErrorName) {
16 loader.cuGetErrorName(e, &szErrName);
18 LOG_FATAL <<
"CUDA driver API error " << (szErrName ? szErrName :
"Unknown") <<
" at line " << iLine <<
" in file " << szFile;
30#define ck(call) check(call, __LINE__, __FILE__)
38 if (!loader.isAvailable()) {
39 throw AIPException(AIP_NOTEXEPCTED,
"ApraCUcontext requires CUDA driver but libcuda.so not available. Error: " + loader.getErrorMessage());
44 ck(loader.cuDeviceGetCount(&nGpu));
47 char szDeviceName[80];
48 ck(loader.cuDeviceGetName(szDeviceName,
sizeof(szDeviceName),
m_cuDevice));
49 LOG_INFO <<
"GPU "<<nGpu<<
" in use: " << szDeviceName;
57 if (loader.isAvailable() && loader.cuDevicePrimaryCtxRelease) {
58 ck(loader.cuDevicePrimaryCtxRelease(
m_cuDevice));
68 auto rc1=cudaDeviceGetAttribute(& major, ::cudaDevAttrComputeCapabilityMajor, 0);
69 auto rc2=cudaDeviceGetAttribute(& minor, ::cudaDevAttrComputeCapabilityMinor, 0);
70 return (rc1==::cudaSuccess && rc2==::cudaSuccess);
84 if (!loader.isAvailable()) {
85 throw AIPException(AIP_NOTEXEPCTED,
"ApraCudaStream requires CUDA driver but libcuda.so not available. Error: " + loader.getErrorMessage());
88 auto rc = cudaStreamCreate(&
m_stream);
89 if (rc != cudaSuccess) {
90 throw AIPException(AIP_NOTEXEPCTED, std::string(
"cudaStreamCreate failed: ") + cudaGetErrorString(rc));
110typedef boost::shared_ptr<ApraCUcontext> apracucontext_sp;
111typedef boost::shared_ptr<ApraCudaStream> cudastream_sp;
Definition CudaCommon.h:33
CUcontext m_cuContext
Definition CudaCommon.h:74
~ApraCUcontext()
Definition CudaCommon.h:54
CUcontext getContext()
Definition CudaCommon.h:62
ApraCUcontext()
Definition CudaCommon.h:35
bool getComputeCapability(int &major, int &minor)
Definition CudaCommon.h:66
CUdevice m_cuDevice
Definition CudaCommon.h:75
Definition CudaCommon.h:79
cudaStream_t m_stream
Definition CudaCommon.h:107
~ApraCudaStream()
Definition CudaCommon.h:94
cudaStream_t getCudaStream()
Definition CudaCommon.h:101
ApraCudaStream()
Definition CudaCommon.h:81
static CudaDriverLoader & getInstance()
Definition CudaDriverLoader.h:41
Definition CudaCommon.h:25
static bool isCudaSupported()
Definition CudaCommon.cpp:4