我需要在我的应用程序中进行双精度计算。根据我在谷歌上发现的,我应该添加一个标志“-arch sm_13”或“-arch sm_20”。
Q1:“-arch sm_13”和“-arch sm_20”有什么区别?
Q2:“-arch sm_13”和“-arch sm_20”之间的性能是否存在差异?
我的GPU:GTX 570。
感谢。
答案 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节。