我需要在我的应用程序中进行双精度计算。根据我在谷歌上找到的资料,我应该添加一个标志“-arch sm_13”或“-arch sm_20”。
问题1:"-arch sm_13"和"-arch sm_20"之间有什么区别?
问题2:"-arch sm_13"和"-arch sm_20"之间是否有性能差异?
我的GPU:GTX 570。
谢谢。
我需要在我的应用程序中进行双精度计算。根据我在谷歌上找到的资料,我应该添加一个标志“-arch sm_13”或“-arch sm_20”。
问题1:"-arch sm_13"和"-arch sm_20"之间有什么区别?
问题2:"-arch sm_13"和"-arch sm_20"之间是否有性能差异?
我的GPU:GTX 570。
谢谢。
SM代表Streaming Multiprocessor,数字表示该架构支持的特性。您可以在CUDA编程指南的3.1.2-3.1.4节中找到一个很好的描述,并且您可以在附录F中的表格中查看与每个架构相关联的特性。
从NVCC手册(也包含在工具包中)中可得:
为了允许架构的演化,NVIDIA GPU发布不同的代。新一代引入了主要的功能和/或芯片架构改进,而同一代的GPU型号显示出适度影响功能、性能或两者的轻微配置差异。
您的GPU具有计算能力2.0,因此应使用sm_20使编译器能够使用旧架构中没有的功能。如果您想要向后兼容,还可以针对sm_13(或sm_1x)进行目标设置,请查看上述文档,了解如何使用-gencode
选项来将多个架构定位到单个nvcc调用中。
关于性能,需要注意的一点是,sm_1x不支持IEEE754浮点数,因此如果针对sm_13并在具有计算能力2.0或更高版本的设备上运行,则可能会发现浮点运行速度更快,因为它使用较不准确的路径。您还可以通过使用-ftz=true -prec-div=false -prec-sqrt=false
选项来强制使用较不准确的路径,在sm_20或更高版本中实现此功能,请参见CUDA编程指南5.4.1节以获取更多信息。