假设我有一个代码,允许用户传递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是否有效的最好方法是启动内核并查看是否发生任何错误。