CUDA:如何检查正确的计算能力?

Ash*_*ppa 15 cuda

编译具有更高计算能力的CUDA代码将在具有较低计算能力的设备上长时间完美地执行,然后在某些内核中静默失败一天.我花了半天时间追逐一个难以捉摸的小虫只是为了意识到构建规则sm_21在设备(特斯拉C2050)是一个时2.0.

是否有我可以添加的CUDA API代码可以自我检查它是否在兼容计算能力的设备上运行?我需要编译和使用许多计算能力的设备.我可以采取任何其他措施来确保不会发生此类错误吗?

tal*_*ies 17

在运行时API中,cudaGetDeviceProperties返回两个字段major,minor并返回任何给定枚举的CUDA设备的计算能力.您可以使用它来解析任何GPU的计算能力,然后在其上建立上下文,以确保它是您的代码所做的正确架构.nvcc可以使用该-gencode选项从单个调用生成包含多个体系结构的目标文件,例如:

nvcc -c -gencode arch=compute_20,code=sm_20  \
        -gencode arch=compute_13,code=sm_13  \
        source.cu
Run Code Online (Sandbox Code Playgroud)

将生成一个输出对象文件,其中包含嵌入的fatbinary对象,其中包含GT200和GF100卡的cubin文件.运行时API将自动处理体系结构检测,并尝试从fatbinary对象加载合适的设备代码,而无需任何额外的主机代码.