2011-05-18 106 views
0

让我们假设我有一个代码,让用户通过threads_per_block来调用内核。然后我想检查一下,如果输入有效(例如< = 512,计算能力CC < 2.0和1024(对于CC> = 2.0))。编译时的CUDA设备属性和计算能力

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

  • 有效的输入 - 因为我运行该显卡拥有CC2.0,或...
  • 无效的,因为我编译它CC1.3?

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

回答

1

从NVCC手册:

-arch

该选项指定的架构是由编译链到PTX阶段承担的架构,...

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

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

+0

好的,谢谢so -arch选项只是指定了最低要求的计算上限。该程序是专为......但是,当使用较高的CC,我也可以使用较高的CC的功能,对不对? – tim 2011-05-18 17:20:47

+0

是的,当使用较高的CC时,编译器可以使用在较低CC中不可用的PTX指令。 – Kris 2011-05-18 18:49:32