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

时间:2011-07-14 06:12:36

标签: cuda

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

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

2 个答案:

答案 0 :(得分:17)

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

nvcc -c -gencode arch=compute_20,code=sm_20  \
        -gencode arch=compute_13,code=sm_13  \
        source.cu

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

答案 1 :(得分:0)

运行设备查询。 查找系统中每个设备的计算能力。 然后使用SetDevice();

在所需设备上执行代码