使用较高计算能力编译的 CUDA 代码将在计算能力较低的设备上完美执行很长一段时间,然后有一天在某些内核中默默地失败。我花了半天时间追寻一个难以捉摸的错误,结果发现构建规则已经sm_21
而该设备(Tesla C2050)是2.0
.
是否有任何我可以添加的 CUDA API 代码可以自我检查它是否在具有兼容计算能力的设备上运行?我需要编译和使用具有许多计算能力的设备。我可以采取任何其他措施来确保不会发生此类错误吗?
在运行时 API 中,cuda获取设备属性 http://www.clear.rice.edu/comp422/resources/cuda/html/group__CUDART__DEVICE_g5aa4f47938af8276f08074d09b7d520c.html返回两个字段major
and minor
它返回任何给定的枚举 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 对象加载合适的设备代码,而无需任何额外的主机代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)