我的应用程序需要双精度计算。根据我在谷歌上找到的内容,我应该添加一个标志“-arch sm_13”或“-arch sm_20”。
Q1:“-arch sm_13”和“-arch sm_20”有什么区别?
Q2:“-arch sm_13”和“-arch sm_20”在性能上有区别吗?
我的显卡:GTX 570。
谢谢。
SM 代表 Streaming Multiprocessor,数字表示架构支持的功能。您可以在CUDA 编程指南第 3.1.2-3.1.4 节中找到一个很好的描述,并且您可以在附录 F 的表格中查看与每个架构相关的特性。
来自NVCC 手册(也包含在工具包中):
为了实现架构演进,NVIDIA GPU 分不同代发布。新一代在功能和/或芯片架构方面引入了重大改进,而同一代中的 GPU 模型显示出轻微的配置差异,这些差异“适度”影响功能、性能或两者。
您的 GPU 具有 Compute Capability 2.0,因此您应该使用 sm_20 使编译器能够使用旧架构中不可用的功能。如果您想要向后兼容,您也可以针对 sm_13(或 sm_1x),查看上面的文档,了解如何使用 nvcc 的-gencode
选项在一次调用 nvcc 中针对多个架构。
关于性能,需要注意的一件事是 sm_1x 不支持 IEEE754 浮点,因此如果您以 sm_13 为目标并在具有 Compute Capability 2.0 或更高版本的设备上运行,那么您可能会发现浮点运行得更快,因为它使用的是 less准确的路径。您还可以使用-ftz=true -prec-div=false -prec-sqrt=false
选项强制使用 sm_20 或更高版本的不太准确的路径,有关更多信息,请参阅 CUDA 编程指南中的第 5.4.1 节。