#pragma once #ifdef __CUDACC__ #include #include #endif #include #include #include #ifdef __CUDACC__ #define checkCuda(x) do { if((x)!=cudaSuccess) { \ printf("CUDA Runtime Error: %s at %s:%d\n",\ cudaGetErrorString(x),__FILE__,__LINE__);\ exit(1);}} while(0) #endif template DEVICE inline T infinity() { #ifdef __CUDA_ARCH__ const unsigned long long ieee754inf = 0x7ff0000000000000; return __longlong_as_double(ieee754inf); #else return std::numeric_limits::infinity(); #endif } template <> DEVICE inline double infinity() { #ifdef __CUDA_ARCH__ return __longlong_as_double(0x7ff0000000000000ULL); #else return std::numeric_limits::infinity(); #endif } template <> DEVICE inline float infinity() { #ifdef __CUDA_ARCH__ return __int_as_float(0x7f800000); #else return std::numeric_limits::infinity(); #endif } inline void cuda_synchronize() { #ifdef __CUDACC__ checkCuda(cudaDeviceSynchronize()); #endif }