Skip to content
Snippets Groups Projects
cuda_util.hpp 1.24 KiB
Newer Older
Pietro Incardona's avatar
Pietro Incardona committed
/*
 * cuda_util.hpp
 *
 *  Created on: Jun 13, 2018
 *      Author: i-bird
 */

#ifndef OPENFPM_DATA_SRC_UTIL_CUDA_UTIL_HPP_
#define OPENFPM_DATA_SRC_UTIL_CUDA_UTIL_HPP_

#include "config.h"
Pietro Incardona's avatar
Pietro Incardona committed
#if defined(CUDA_GPU) && !defined(CUDA_ON_CPU)
Pietro Incardona's avatar
Pietro Incardona committed
#include <cuda_runtime.h>
#endif

#ifdef CUDA_GPU

	#ifndef __NVCC__

		#ifndef __host__
		#define __host__
		#define __device__
Pietro Incardona's avatar
Pietro Incardona committed
		#define __shared__ static thread_local
		#define __global__
		#endif
Pietro Incardona's avatar
Pietro Incardona committed

	#else

		#ifndef __host__
		#define __host__
		#define __device__
		#define __global__
Pietro Incardona's avatar
Pietro Incardona committed
		#endif

		#ifdef CUDA_ON_CPU 

Pietro Incardona's avatar
Pietro Incardona committed
			#define CUDA_SAFE(cuda_call) \
			cuda_call;
Pietro Incardona's avatar
Pietro Incardona committed
			
			#ifdef __shared__
				#undef __shared__
			#endif
Pietro Incardona's avatar
Pietro Incardona committed
			#define __shared__ static thread_local
Pietro Incardona's avatar
Pietro Incardona committed
			#define CUDA_SAFE(cuda_call) \
			cuda_call; \
Pietro Incardona's avatar
Pietro Incardona committed
			{\
Pietro Incardona's avatar
Pietro Incardona committed
				cudaError_t e = cudaPeekAtLastError();\
				if (e != cudaSuccess)\
				{\
					std::string error = cudaGetErrorString(e);\
					std::cout << "Cuda Error in: " << __FILE__ << ":" << __LINE__ << " " << error << std::endl;\
				}\
			}

Pietro Incardona's avatar
Pietro Incardona committed
			#ifndef __shared__
Pietro Incardona's avatar
Pietro Incardona committed
			#define __shared__
Pietro Incardona's avatar
Pietro Incardona committed
			#endif
Pietro Incardona's avatar
Pietro Incardona committed

Pietro Incardona's avatar
Pietro Incardona committed
	#endif
#else

#ifndef __host__
#define __host__
#define __device__
Pietro Incardona's avatar
Pietro Incardona committed
#define __shared__ static thread_local
#define __global__
Pietro Incardona's avatar
Pietro Incardona committed
#endif

#endif


#endif /* OPENFPM_DATA_SRC_UTIL_CUDA_UTIL_HPP_ */