#ifndef _CUDA_UTIL_H_ #define _CUDA_UTIL_H_ #if CUDART_VERSION >= 4000 #define CUDA_DEVICE_SYNCHRONIZE( ) cudaDeviceSynchronize(); #else #define CUDA_DEVICE_SYNCHRONIZE( ) cudaThreadSynchronize(); #endif # 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); \ } } # define CUDA_SAFE_CALL( call) CUDA_SAFE_CALL_NO_SYNC(call); //! Check for CUDA error #ifdef _DEBUG # 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); \ } \ err = CUDA_DEVICE_SYNCHRONIZE(); \ if( cudaSuccess != err) { \ fprintf(stderr, "Cuda error: %s in file '%s' in line %i : %s.\n", \ errorMessage, __FILE__, __LINE__, cudaGetErrorString( err) );\ exit(EXIT_FAILURE); \ } \ } #else # 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); \ } \ } #endif #endif