我需要在我的应用程序中进行双精度计算。根据我在谷歌上找到的结果,我应该添加一个标志"-arch sm_13“或"-arch sm_20”。
Q1:"-arch sm_13“和"-arch sm_20”有什么区别?
Q2:"-arch sm_13“和"-arch sm_20”在性能上有区别吗?
我的GPU: GTX 570。
谢谢。
发布于 2012-04-26 18:49:02
SM代表流式多处理器,数字表示体系结构支持的功能。您可以在CUDA Programming Guide的3.1.2-3.1.4小节中找到很好的描述,并且可以在附录F的表中看到与每个体系结构相关联的特性。
从NVCC manual (也包含在工具包中):
为了适应架构演变,NVIDIA GPU分不同代发布。新一代在功能和/或芯片架构方面引入了重大改进,而同一代中的GPU型号显示出微小的配置差异,这些差异“适度”影响了功能和/或性能。
您的图形处理器具有计算能力2.0,因此您应该使用sm_20来使编译器能够使用旧架构中没有的功能。如果您想要向后兼容,也可以面向sm_13 (或sm_1x),请查看上面的文档,了解如何使用nvcc的-gencode选项在单个nvcc调用中面向多个体系结构。
关于性能,要注意的一件事是sm_1x不支持IEEE754浮点,所以如果你以sm_13为目标,并在具有计算能力2.0或更高版本的设备上运行,那么你可能会发现浮点运行得更快,因为它使用的是不太精确的路径。您还可以使用sm_20或更高版本通过使用CUDA强制使用不太精确的路径,有关详细信息,请参阅-ftz=true -prec-div=false -prec-sqrt=false编程指南中的第5.4.1节。
https://stackoverflow.com/questions/10330527
复制相似问题