我怎么知道CUDA是否可以使用



假设我编译了一个使用CUDA工具包的程序,并且我在不支持所需计算功能的硬件上运行该程序,或者可能甚至没有支持CUDA接口的NVIDIA GPU,那么我如何从编程级别知道呢?以便回退到CPU过程或显示错误消息。

如果您已经安装了带有示例的CUDA Toolkit,我建议您查看deviceQuery项目。这显示了一个关于如何在设备中查询属性(如主要/次要功能版本号)的示例。

附短片:

    cudaSetDevice(dev);
    cudaDeviceProp deviceProp;
    cudaGetDeviceProperties(&deviceProp, dev);
    printf("nDevice %d: "%s"n", dev, deviceProp.name);
    // Console log
    cudaDriverGetVersion(&driverVersion);
    cudaRuntimeGetVersion(&runtimeVersion);
    printf("  CUDA Driver Version / Runtime Version          %d.%d / %d.%dn", driverVersion/1000, (driverVersion%100)/10, runtimeVersion/1000, (runtimeVersion%100)/10);
    printf("  CUDA Capability Major/Minor version number:    %d.%dn", deviceProp.major, deviceProp.minor);

至于如果系统没有GPU,你可以使用下面的代码片段,尽管我认为你需要有静态库。

int deviceCount = 0;
cudaError_t error_id = cudaGetDeviceCount(&deviceCount);
if (error_id != cudaSuccess)
{
    printf("cudaGetDeviceCount returned %dn-> %sn", (int)error_id, cudaGetErrorString(error_id));
    exit(EXIT_FAILURE);
}
// This function call returns 0 if there are no CUDA capable devices.
if (deviceCount == 0)
{
    printf("There are no available device(s) that support CUDAn");
}
else
{
    printf("Detected %d CUDA Capable device(s)n", deviceCount);
}

相关内容

最新更新