编译时的CUDA设备属性和计算能力

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译时的CUDA设备属性和计算能力相关的知识,希望对你有一定的参考价值。

我们假设我有一个代码,让用户通过threads_per_block来调用内核。然后我想检查输入是否有效(例如,<= 512表示计算能力CC <2.0,1024表示CC> = 2.0)。

现在我想知道当用户通过nvcc -arch=sm_13时,如果我用CC2.0在我的计算机上安装显卡时使用threads_per_block == 1024编译代码会发生什么?这是:

  • 一个有效的输入 - 因为我运行的卡有CC2.0,或者......
  • 自从我为CC1.3编译它以后无效?

或者nvcc -arch=sm_13是否意味着CC1.3至少是必要的,但是当它在更高的CC上运行时,可以使用那些更高的功能?

答案

从nvcc手册:

-拱

此选项指定的体系结构是编译链到ptx阶段所假定的体系结构,...

这意味着它指定了编译器可以使用的PTX功能(如特殊指令)。 PTX ISA未指定每个块的最大线程数,因此此编译器参数与您尝试解决的问题无关。

检查threads_per_block是否有效的最佳方法是启动内核并查看是否发生任何错误。

以上是关于编译时的CUDA设备属性和计算能力的主要内容,如果未能解决你的问题,请参考以下文章

CUDA 计算能力 1.0 比 3.5 快

如何从活动 CUDA 设备获取属性?

如何针对 cublas_device 编译/链接具有不同计算能力的代码?

我可以在 cuda 计算能力 2.0 卡上使用多少个网格维度?

使用动态并行回退编译 CUDA - 多种架构/计算能力

CUDA C Programming Guide 在线教程学习笔记 Part 5