Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
CudaCommon.h
1#pragma once
2
3#include "cuda.h"
4#include "Logger.h"
5#include "cuda_runtime_api.h"
6
7inline bool check(CUresult e, int iLine, const char *szFile)
8{
9 if (e != CUDA_SUCCESS)
10 {
11 const char *szErrName = NULL;
12 cuGetErrorName(e, &szErrName);
13 LOG_FATAL << "CUDA driver API error " << szErrName << " at line " << iLine << " in file " << szFile;
14 return false;
15 }
16 return true;
17}
18
20{
21public:
22 static bool isCudaSupported();
23};
24
25#define ck(call) check(call, __LINE__, __FILE__)
26
28{
29public:
31 {
32 ck(cuInit(0));
33 int nGpu = 0;
34 ck(cuDeviceGetCount(&nGpu));
35 m_cuDevice = 0;
36 ck(cuDeviceGet(&m_cuDevice, 0));
37 char szDeviceName[80];
38 ck(cuDeviceGetName(szDeviceName, sizeof(szDeviceName), m_cuDevice));
39 LOG_INFO << "GPU "<<nGpu<<" in use: " << szDeviceName;
40
41 ck(cuDevicePrimaryCtxRetain(&m_cuContext, m_cuDevice));
42 }
43
45 {
46 ck(cuDevicePrimaryCtxRelease(m_cuDevice));
47 }
48
49 CUcontext getContext()
50 {
51 return m_cuContext;
52 }
53 bool getComputeCapability(int& major, int& minor)
54 {
55 auto rc1=cudaDeviceGetAttribute(& major, ::cudaDevAttrComputeCapabilityMajor, 0);
56 auto rc2=cudaDeviceGetAttribute(& minor, ::cudaDevAttrComputeCapabilityMinor, 0);
57 return (rc1==::cudaSuccess && rc2==::cudaSuccess);
58 }
59
60private:
61 CUcontext m_cuContext;
62 CUdevice m_cuDevice;
63};
64
66{
67public:
69 {
70 cudaStreamCreate(&m_stream);
71 }
72
74 {
75 cudaStreamDestroy(m_stream);
76 }
77
78 cudaStream_t getCudaStream()
79 {
80 return m_stream;
81 }
82
83private:
84 cudaStream_t m_stream;
85};
86
87typedef boost::shared_ptr<ApraCUcontext> apracucontext_sp;
88typedef boost::shared_ptr<ApraCudaStream> cudastream_sp;
Definition CudaCommon.h:28
CUcontext m_cuContext
Definition CudaCommon.h:61
~ApraCUcontext()
Definition CudaCommon.h:44
CUcontext getContext()
Definition CudaCommon.h:49
ApraCUcontext()
Definition CudaCommon.h:30
bool getComputeCapability(int &major, int &minor)
Definition CudaCommon.h:53
CUdevice m_cuDevice
Definition CudaCommon.h:62
Definition CudaCommon.h:66
cudaStream_t m_stream
Definition CudaCommon.h:84
~ApraCudaStream()
Definition CudaCommon.h:73
cudaStream_t getCudaStream()
Definition CudaCommon.h:78
ApraCudaStream()
Definition CudaCommon.h:68
Definition CudaCommon.h:20
static bool isCudaSupported()
Definition CudaCommon.cpp:4