jay*_*lee 23 opengl floating-point double graphics
我一直试图找到有关在图形硬件上使用float vs double的性能的信息.我已经在CPU上找到了关于float vs double的大量信息,但是GPU的这种信息更加稀缺.
我使用OpenGL进行编码,因此,如果您认为应该知道该API的任何特定信息,那就让我们了解一下.
我知道如果程序将大量数据移入/移出图形硬件,那么使用浮点数可能会更好,因为双倍需要两倍的带宽.我的询问更多的是图形硬件如何处理它.据我所知,现代英特尔CPU将浮点/双精度转换为80位实数进行计算(不包括SSE指令),因此这两种类型的速度同样快.现代显卡做这样的事吗?浮动和双重表现现在大致相等?是否有任何强有力的理由使用一个而不是另一个?
tke*_*win 25
在速度方面,GPU针对浮动进行了优化.我对Nvidia硬件更为熟悉,但在目前的硬件中,每8个SP FPU有1个DP FPU.在下一代硬件中,它们预计会有更多的1比2的比例.
我的建议是看你的算法是否需要双精度.许多算法并不真正需要额外的位.运行一些测试以确定通过单精度获得的平均误差,并确定它是否重要.如果没有,只需使用单身.
如果您的算法纯粹用于图形,则可能不需要双精度.如果您正在进行通用计算,请考虑使用OpenCL或CUDA.
现代图形卡可以进行许多优化,例如:它们甚至可以在24位浮点数上运行.据我所知,内部显卡不使用双打,因为它们是为了速度而制造的,不一定是精确的.
从维基百科上的GPGPU入门:
Nvidia GPU上的浮点实现主要是IEEE兼容的; 但是,并非所有供应商都这样做.这对正确性有影响,这对于某些科学应用来说是重要的.虽然CPU上通常可以使用64位浮点值(双精度浮点数),但GPU并不普遍支持这些值.一些GPU架构牺牲了IEEE兼容性,而其他架构则完全缺乏双精度.已经努力在GPU上模拟双精度浮点值; 然而,速度权衡取消了首先将计算卸载到GPU上的任何好处.