1/*
2 * cuda_util.hpp
3 *
4 * Created on: Jun 13, 2018
5 * Author: i-bird
6 */
7
8#ifndef OPENFPM_DATA_SRC_UTIL_CUDA_UTIL_HPP_
9#define OPENFPM_DATA_SRC_UTIL_CUDA_UTIL_HPP_
10
11#include "config.h"
12#if defined(CUDA_GPU) && !defined(CUDA_ON_CPU)
13#include <cuda_runtime.h>
14#endif
15
16#ifdef CUDA_GPU
17
18 #ifndef __NVCC__
19
20 #ifndef __host__
21 #define __host__
22 #define __device__
23 #define __shared__
24 #define __global__
25 #endif
26
27 #else
28
29 #ifndef __host__
30 #define __host__
31 #define __device__
32 #define __global__
33 #endif
34
35 #ifdef CUDA_ON_CPU
36
37 #define CUDA_SAFE(cuda_call) \
38 cuda_call;
39
40 #ifdef __shared__
41 #undef __shared__
42 #endif
43 #define __shared__ static
44
45 #else
46
47 #define CUDA_SAFE(cuda_call) \
48 cuda_call; \
49 {\
50 cudaError_t e = cudaPeekAtLastError();\
51 if (e != cudaSuccess)\
52 {\
53 std::string error = cudaGetErrorString(e);\
54 std::cout << "Cuda Error in: " << __FILE__ << ":" << __LINE__ << " " << error << std::endl;\
55 }\
56 }
57
58 #ifndef __shared__
59 #define __shared__
60 #endif
61
62 #endif
63
64 #endif
65#else
66
67#ifndef __host__
68#define __host__
69#define __device__
70#define __shared__ static
71#define __global__
72#endif
73
74#endif
75
76
77#endif /* OPENFPM_DATA_SRC_UTIL_CUDA_UTIL_HPP_ */
78