我一直在尝试寻找关于在图形硬件上使用float和double的性能的信息。我在CPU上找到了很多关于float和double的信息,但这样的信息对于GPU来说更是稀缺。
我使用OpenGL编写代码,所以如果有任何您认为应该知道的特定于该应用程序接口的信息,就让我们来看看吧。
我知道,如果程序要在图形硬件之间移动大量数据,那么使用浮点数可能会更好,因为双精度浮点数需要两倍的带宽。我的问题更多的是关于图形硬件是如何处理的。据我所知,现代的Intel CPU将浮点数/双精度数转换为80位实数(SSE指令除外),因此这两种类型的速度大致相同。现代的显卡有这样的功能吗?现在的浮点数和双精度性能差不多吗?有什么充分的理由使用其中一个而不是另一个吗?
发布于 2010-01-17 12:55:35
在速度方面,GPU针对浮点数进行了优化。我更熟悉Nvidia硬件,但在当前一代的硬件中,每8个SP FPU对应1个DP FPU。在下一代硬件中,他们预计会有更多的1:2的比率。
我的建议是看看你的算法是否需要双精度。许多算法实际上并不需要额外的比特。运行一些测试来确定通过使用单精度得到的平均误差,并计算出它是否显着。如果不是,只需使用single。
如果你的算法纯粹是针对图形的,你可能不需要双精度。如果您正在进行通用计算,请考虑使用OpenCL或CUDA。
发布于 2010-01-17 12:12:14
现代显卡做了许多优化,例如:他们甚至可以在24位浮点数上操作。据我所知,在内部显卡不使用双倍,因为它们是为速度而构建的,不一定是精确的。
来自维基百科上的GPGPU词条:
Nvidia GPU上的浮点实现大多符合标准;然而,并非所有供应商都是如此。这对正确性有影响,这被认为对一些科学应用很重要。虽然64位浮点值(双精度浮点数)通常在CPU上可用,但并不是所有GPU都支持这些浮点值;一些GPU架构牺牲了IEEE兼容,而其他GPU架构则完全缺乏双精度。人们一直在努力在GPU上模拟双精度浮点值;然而,速度权衡首先否定了将计算负载转移到GPU上的任何好处。
发布于 2010-01-17 17:24:21
大多数GPU根本不支持双浮点。这种支持是最近才添加的(这一代),并不是到处都是:
对于其他所有事情,你只是没有双重支持。
所以..。如果你不需要,你绝对不应该使用double。
https://stackoverflow.com/questions/2079906
复制相似问题