|
ApraPipes 1.0
|
Singleton class that dynamically loads libcuda.so (Linux) or nvcuda.dll (Windows) at runtime. More...
#include <CudaDriverLoader.h>

Public Member Functions | |
| CudaDriverLoader (const CudaDriverLoader &)=delete | |
| CudaDriverLoader & | operator= (const CudaDriverLoader &)=delete |
| bool | isAvailable () const |
| const std::string & | getErrorMessage () const |
Static Public Member Functions | |
| static CudaDriverLoader & | getInstance () |
Public Attributes | |
| CUresult(* | cuInit )(unsigned int Flags) = nullptr |
| CUresult(* | cuDeviceGet )(CUdevice *device, int ordinal) = nullptr |
| CUresult(* | cuDeviceGetCount )(int *count) = nullptr |
| CUresult(* | cuDeviceGetName )(char *name, int len, CUdevice dev) = nullptr |
| CUresult(* | cuCtxCreate )(CUcontext *pctx, unsigned int flags, CUdevice dev) = nullptr |
| CUresult(* | cuCtxDestroy )(CUcontext ctx) = nullptr |
| CUresult(* | cuCtxPushCurrent )(CUcontext ctx) = nullptr |
| CUresult(* | cuCtxPopCurrent )(CUcontext *pctx) = nullptr |
| CUresult(* | cuCtxSynchronize )(void) = nullptr |
| CUresult(* | cuDevicePrimaryCtxRetain )(CUcontext *pctx, CUdevice dev) = nullptr |
| CUresult(* | cuDevicePrimaryCtxRelease )(CUdevice dev) = nullptr |
| CUresult(* | cuMemAlloc )(CUdeviceptr *dptr, size_t bytesize) = nullptr |
| CUresult(* | cuMemAllocPitch )(CUdeviceptr *dptr, size_t *pPitch, size_t WidthInBytes, size_t Height, unsigned int ElementSizeBytes) = nullptr |
| CUresult(* | cuMemFree )(CUdeviceptr dptr) = nullptr |
| CUresult(* | cuMemcpy2D )(const CUDA_MEMCPY2D *pCopy) = nullptr |
| CUresult(* | cuMemcpy2DAsync )(const CUDA_MEMCPY2D *pCopy, CUstream hStream) = nullptr |
| CUresult(* | cuStreamCreate )(CUstream *phStream, unsigned int Flags) = nullptr |
| CUresult(* | cuStreamDestroy )(CUstream hStream) = nullptr |
| CUresult(* | cuStreamSynchronize )(CUstream hStream) = nullptr |
| CUresult(* | cuGraphicsEGLRegisterImage )(CUgraphicsResource *pCudaResource, EGLImageKHR image, unsigned int flags) = nullptr |
| CUresult(* | cuGraphicsResourceGetMappedEglFrame )(CUeglFrame *eglFrame, CUgraphicsResource resource, unsigned int index, unsigned int mipLevel) = nullptr |
| CUresult(* | cuGraphicsUnregisterResource )(CUgraphicsResource resource) = nullptr |
| CUresult(* | cuGetErrorName )(CUresult error, const char **pStr) = nullptr |
| CUresult(* | cuGetErrorString )(CUresult error, const char **pStr) = nullptr |
Private Member Functions | |
| CudaDriverLoader () | |
| ~CudaDriverLoader () | |
| template<typename FuncPtr > | |
| void | loadSymbol (FuncPtr &funcPtr, const char *symbolName) |
Private Attributes | |
| void * | libHandle = nullptr |
| std::string | errorMessage |
Singleton class that dynamically loads libcuda.so (Linux) or nvcuda.dll (Windows) at runtime.
This allows the executable to start even when the CUDA driver is not available. When GPU is not present (e.g., GitHub CI runners), the library fails to load gracefully, and isAvailable() returns false. Modules requiring CUDA can check availability and throw appropriate exceptions.
Platform-specific behavior:
Usage: auto& loader = CudaDriverLoader::getInstance(); if (!loader.isAvailable()) { throw AIPException(AIP_NOTEXEPCTED, "CUDA driver not available"); } CUresult result = loader.cuInit(0);
|
delete |
|
private |

|
private |
|
inline |
|
inlinestatic |

|
inline |
|
inlineprivate |

|
delete |
| CUresult(* CudaDriverLoader::cuCtxCreate) (CUcontext *pctx, unsigned int flags, CUdevice dev) = nullptr |
| CUresult(* CudaDriverLoader::cuCtxDestroy) (CUcontext ctx) = nullptr |
| CUresult(* CudaDriverLoader::cuCtxPopCurrent) (CUcontext *pctx) = nullptr |
| CUresult(* CudaDriverLoader::cuCtxPushCurrent) (CUcontext ctx) = nullptr |
| CUresult(* CudaDriverLoader::cuCtxSynchronize) (void) = nullptr |
| CUresult(* CudaDriverLoader::cuDeviceGet) (CUdevice *device, int ordinal) = nullptr |
| CUresult(* CudaDriverLoader::cuDeviceGetCount) (int *count) = nullptr |
| CUresult(* CudaDriverLoader::cuDeviceGetName) (char *name, int len, CUdevice dev) = nullptr |
| CUresult(* CudaDriverLoader::cuDevicePrimaryCtxRelease) (CUdevice dev) = nullptr |
| CUresult(* CudaDriverLoader::cuDevicePrimaryCtxRetain) (CUcontext *pctx, CUdevice dev) = nullptr |
| CUresult(* CudaDriverLoader::cuGetErrorName) (CUresult error, const char **pStr) = nullptr |
| CUresult(* CudaDriverLoader::cuGetErrorString) (CUresult error, const char **pStr) = nullptr |
| CUresult(* CudaDriverLoader::cuGraphicsEGLRegisterImage) (CUgraphicsResource *pCudaResource, EGLImageKHR image, unsigned int flags) = nullptr |
| CUresult(* CudaDriverLoader::cuGraphicsResourceGetMappedEglFrame) (CUeglFrame *eglFrame, CUgraphicsResource resource, unsigned int index, unsigned int mipLevel) = nullptr |
| CUresult(* CudaDriverLoader::cuGraphicsUnregisterResource) (CUgraphicsResource resource) = nullptr |
| CUresult(* CudaDriverLoader::cuInit) (unsigned int Flags) = nullptr |
| CUresult(* CudaDriverLoader::cuMemAlloc) (CUdeviceptr *dptr, size_t bytesize) = nullptr |
| CUresult(* CudaDriverLoader::cuMemAllocPitch) (CUdeviceptr *dptr, size_t *pPitch, size_t WidthInBytes, size_t Height, unsigned int ElementSizeBytes) = nullptr |
| CUresult(* CudaDriverLoader::cuMemcpy2D) (const CUDA_MEMCPY2D *pCopy) = nullptr |
| CUresult(* CudaDriverLoader::cuMemcpy2DAsync) (const CUDA_MEMCPY2D *pCopy, CUstream hStream) = nullptr |
| CUresult(* CudaDriverLoader::cuMemFree) (CUdeviceptr dptr) = nullptr |
| CUresult(* CudaDriverLoader::cuStreamCreate) (CUstream *phStream, unsigned int Flags) = nullptr |
| CUresult(* CudaDriverLoader::cuStreamDestroy) (CUstream hStream) = nullptr |
| CUresult(* CudaDriverLoader::cuStreamSynchronize) (CUstream hStream) = nullptr |
|
private |
|
private |