cuda_util.h 2.7 KB
Newer Older
1
2
3
4
#ifndef _CUDA_UTIL_H_
#define _CUDA_UTIL_H_

#if CUDART_VERSION >= 4000
5
#define CUDA_DEVICE_SYNCHRONIZE() cudaDeviceSynchronize();
6
#else
7
#define CUDA_DEVICE_SYNCHRONIZE() cudaThreadSynchronize();
8
9
#endif

10
11
12
13
14
15
16
17
18
#define CUDA_SAFE_CALL_NO_SYNC(call)                                           \
  {                                                                            \
    cudaError err = call;                                                      \
    if (cudaSuccess != err) {                                                  \
      fprintf(stderr, "Cuda error in file '%s' in line %i : %s.\n", __FILE__,  \
              __LINE__, cudaGetErrorString(err));                              \
      exit(EXIT_FAILURE);                                                      \
    }                                                                          \
  }
19

20
#define CUDA_SAFE_CALL(call) CUDA_SAFE_CALL_NO_SYNC(call);
21
22
23

//! Check for CUDA error
#ifdef _DEBUG
24
25
26
27
28
29
30
31
#define CUDA_CHECK_ERROR(errorMessage)                                         \
  {                                                                            \
    cudaError_t err = cudaGetLastError();                                      \
    if (cudaSuccess != err) {                                                  \
      fprintf(stderr, "Cuda error: %s in file '%s' in line %i : %s.\n",        \
              errorMessage, __FILE__, __LINE__, cudaGetErrorString(err));      \
      exit(EXIT_FAILURE);                                                      \
    }                                                                          \
32
    err = CUDA_DEVICE_SYNCHRONIZE();                                           \
33
34
35
36
37
38
    if (cudaSuccess != err) {                                                  \
      fprintf(stderr, "Cuda error: %s in file '%s' in line %i : %s.\n",        \
              errorMessage, __FILE__, __LINE__, cudaGetErrorString(err));      \
      exit(EXIT_FAILURE);                                                      \
    }                                                                          \
  }
39
#else
40
41
42
43
44
45
46
47
48
#define CUDA_CHECK_ERROR(errorMessage)                                         \
  {                                                                            \
    cudaError_t err = cudaGetLastError();                                      \
    if (cudaSuccess != err) {                                                  \
      fprintf(stderr, "Cuda error: %s in file '%s' in line %i : %s.\n",        \
              errorMessage, __FILE__, __LINE__, cudaGetErrorString(err));      \
      exit(EXIT_FAILURE);                                                      \
    }                                                                          \
  }
49
50
51
#endif

#endif