#include #include #include #include #ifndef INC_CUDA # error "INC_CUDA not defined!" #endif #ifndef HOST_DEFINE # error "HOST_DEFINE not defined!" #endif #ifndef PACKED_DEFINE # error "PACKED_DEFINE not defined!" #endif #ifndef FLAG_COMPILE_LANG_CUDA # error "FLAG_COMPILE_LANG_CUDA not defined!" #endif #ifndef FLAG_LANG_IS_CUDA # error "FLAG_LANG_IS_CUDA not defined!" #endif #if !FLAG_LANG_IS_CUDA # error "Expected FLAG_LANG_IS_CUDA" #endif #ifndef DEF_COMPILE_LANG_CUDA # error "DEF_COMPILE_LANG_CUDA not defined!" #endif #ifndef DEF_LANG_IS_CUDA # error "DEF_LANG_IS_CUDA not defined!" #endif #if !DEF_LANG_IS_CUDA # error "Expected DEF_LANG_IS_CUDA" #endif static __global__ void DetermineIfValidCudaDevice() { } #ifdef _MSC_VER # pragma pack(push, 1) # undef PACKED_DEFINE # define PACKED_DEFINE #endif struct PACKED_DEFINE result_type { bool valid; int value; #if defined(NDEBUG) && !defined(DEFREL) # error missing DEFREL flag #endif }; #ifdef _MSC_VER # pragma pack(pop) #endif result_type can_launch_kernel() { result_type r; DetermineIfValidCudaDevice<<<1, 1>>>(); r.valid = (cudaSuccess == cudaGetLastError()); if (r.valid) { r.value = 1; } else { r.value = -1; } return r; } int main(int argc, char** argv) { cudaError_t err; int nDevices = 0; err = cudaGetDeviceCount(&nDevices); if (err != cudaSuccess) { std::cerr << cudaGetErrorString(err) << std::endl; return 1; } return 0; }