“-arch sm_13”和“-arch sm_20”之间的区别是什么?

时间:2012-04-26 09:18:38

标签: cuda gpu gpu-programming

我需要在我的应用程序中进行双精度计算。根据我在谷歌上发现的,我应该添加一个标志“-arch sm_13”或“-arch sm_20”。

Q1:“-arch sm_13”和“-arch sm_20”有什么区别?

Q2:“-arch sm_13”和“-arch sm_20”之间的性能是否存在差异?

我的GPU:GTX 570。

感谢。

1 个答案:

答案 0 :(得分:27)

SM代表Streaming Multiprocessor,数字表示架构支持的功能。您可以在CUDA Programming Guide部分3.1.2-3.1.4中找到一个很好的描述,您可以在附录F的表格中看到与每个体系结构相关的功能。

来自NVCC manual(也包含在工具包中):

  

为了进行体系结构演变,NVIDIA GPU已发布   不同世代。新一代引入了重大改进   功能和/或芯片架构,而GPU模型在同一个   生成显示“适度”影响的微小配置差异   功能,性能或两者兼而有之。

您的GPU具有Compute Capability 2.0,因此您应该使用sm_20来使编译器能够使用旧架构中不可用的功能。如果你想要向后兼容,你可以定位sm_13(或sm_1x),查看上面的文档,了解如何使用-gencode选项将nvcc定位到一次调用中的多个体系结构NVCC。

关于性能,需要注意的一点是sm_1x不支持IEEE754浮点,所以如果你定位sm_13并在具有Compute Capability 2.0或更高版本的设备上运行,那么你可能会发现浮点数运行得更快,因为它是使用不太准确的路径。您还可以使用-ftz=true -prec-div=false -prec-sqrt=false选项使用sm_20或更高版本强制使用不太准确的路径,有关详细信息,请参阅“CUDA编程指南”中的第5.4.1节。