编译具有更高计算能力的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对象加载合适的设备代码,而无需任何额外的主机代码.
归档时间: |
|
查看次数: |
16767 次 |
最近记录: |