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



假设我有一个代码,允许用户传递threads_per_block来调用内核。然后我想检查输入是否有效(例如,计算能力 CC 的 <=512 <2.0 和 1024 的 CC>=2.0)。

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

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

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

来自 nvcc 手册:

-拱

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

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

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

最新更新