代码之家  ›  专栏  ›  技术社区  ›  jay.lee

在图形硬件上浮动与双精度

  •  20
  • jay.lee  · 技术社区  · 15 年前

    我一直在努力寻找在图形硬件上使用float和double的性能信息。我在CPU上发现了很多关于浮动和双精度的信息,但是对于GPU来说,这样的信息更为稀缺。

    我使用OpenGL进行编码,所以如果有任何特定于该API的信息您认为应该知道,那么让我们来看看。

    我知道如果程序在图形硬件之间移动大量数据,那么最好使用浮点,因为双精度浮点需要两倍的带宽。我的查询更多的是关于图形硬件是如何处理的。据我所知,现代Intel CPU将浮点/双精度转换为80位实数进行计算(不包括SSE指令),因此这两种类型的速度差不多。现代图形卡能做这种事吗?现在浮点数和双精度数是相等的吗?是否有充分的理由使用一个而另一个?

    4 回复  |  直到 13 年前
        1
  •  21
  •   tkerwin    15 年前

    在速度方面,GPU针对浮动进行了优化。我更熟悉NVIDIA硬件,但在当前的一代硬件中,每8个SP FPU就有1个DP FPU。在下一代硬件中,预计它们将有更多的1比2的比率。

    我的建议是看看你的算法是否需要双精度。许多算法实际上并不需要额外的位。运行一些测试来确定通过单一精度得到的平均错误,并找出它是否重要。如果没有的话,就用单人房。

    如果您的算法纯粹是用于图形,那么您可能不需要双精度。如果您正在进行通用计算,请考虑使用opencl或cuda。

        2
  •  5
  •   Marcin Seredynski    15 年前

    现代图形卡可以进行许多优化,例如:它们甚至可以在24位浮点上操作。据我所知,内部图形卡不使用双打,因为它们是为速度而设计的,不一定是精确的。

    从进入 GPGPU 在维基百科上:

    Nvidia GPU上的浮点实现大多符合IEEE标准;但是,并非所有供应商都是如此。这对正确性有一定的影响,对某些科学应用很重要。虽然64位浮点值(双精度浮点)通常在CPU上可用,但在GPU上并不普遍支持这些值;一些GPU架构牺牲了IEEE遵从性,而另一些则完全缺乏双精度。人们一直在努力在GPU上模拟双精度浮点值;但是,速度权衡一开始就否定了将计算卸载到GPU上的任何好处。

        3
  •  4
  •   Bahbar    15 年前

    大多数GPU根本不支持双浮点数。最近(这一代)增加了支持,但并非无处不在:

    • ATI:
      • HD5870和HD5850的速度都不错(但速度不如单速)
      • HD57 70 尽管和HD5870属于同一代,但还是要拥有它。
    • 恩维迪亚:
      • 基于GT200的卡具有双重支持,但以双重/单一比率(即 非常 低。(8:1比?)
      • 费米的速度应该是单程的一半…无论什么时候那艘船。

    其他的一切,你只是没有双重支持。

    所以…如果你不需要的话,你绝对不应该用双倍的。

        4
  •  3
  •   Goz    15 年前

    在dx11之前不支持双精度渲染:(ie shader model 5)

    http://msdn.microsoft.com/en-us/library/ee418354(VS.85).aspx

    我怀疑OpenGL会是一样的。

    推荐文章