我有一些代码,是在特斯拉和费米代芯片组上编译和测试的。
在所有特斯拉代芯片(260,280,c1060)中,输出是一致的。
在所有费米代芯片(460-580,c2080)中,输出是一致的。
然而,在特斯拉和费米两代之间,输出图像略有不同。
这是意料之中的吗?代码中有浮点数学,精度是我的第一个怀疑,但我在Nvidia的文档中找不到任何提到它的地方。
发布于 2011-06-08 23:09:37
在Fermi Tuning Guide中有一节关于IEEE 754-2008遵从性的说明:
与计算能力为1.x的设备相比,计算能力为2.x的
设备与IEEE754-2008浮点标准的偏差要小得多,特别是在单精度方面(F.2节)。这可能会导致计算能力为1.x的设备和计算能力为2.x的设备之间的数值结果略有不同。
完整文档可在CUDA网站的下载部分找到。
发布于 2011-06-09 06:06:03
您还应该查看我的NVIDIA GPU浮点白皮书和网络研讨会(我是NVIDIA的员工)。
http://developer.nvidia.com/content/everything-you-ever-wanted-know-about-floating-point-were-afraid-ask
要回答这个问题,硬件代号之间确实存在数字上的差异。“计算能力”告诉你芯片有什么功能。计算能力为1.0-1.2的设备仅具有单精度。这些设备上的单精度为零,这意味着它不支持非正规化数字。一些运算,如除法和平方根,不能正确地四舍五入(它们对函数使用快速的硬件近似)。
计算能力的设备1.3增加了对双精度的支持。Double精度被正确地舍入,并支持非正规化。Double precision还具有融合的乘法-加法,这可以提高精度。
计算能力2.0和更高版本的设备升级了单精度浮点数。现在,单精度被正确地四舍五入并支持非正规化。它们还具有单精度和双精度的融合乘加运算。
https://stackoverflow.com/questions/6278129
复制相似问题