#ifndef __CUDACC__ # error "A C or C++ compiler has been selected for CUDA" #endif #include #include #include "CMakeCompilerABI.h" int main(int argc, char* argv[]) { int require = 0; require += info_sizeof_dptr[argc]; require += info_byte_order_big_endian[argc]; require += info_byte_order_little_endian[argc]; #if defined(ABI_ID) require += info_abi[argc]; #endif static_cast(argv); int count = 0; if (cudaGetDeviceCount(&count) != cudaSuccess || count == 0) { std::fprintf(stderr, "No CUDA devices found.\n"); return -1; } int found = 0; const char* sep = ""; for (int device = 0; device < count; ++device) { cudaDeviceProp prop; if (cudaGetDeviceProperties(&prop, device) == cudaSuccess) { std::printf("%s%d%d", sep, prop.major, prop.minor); sep = ";"; found = 1; } } if (!found) { std::fprintf(stderr, "No CUDA architecture detected from any devices.\n"); // Convince the compiler that the non-zero return value depends // on the info strings so they are not optimized out. return require ? -1 : 1; } return 0; }