2012-10-16 39 views
1

我目前工作需要大量的变量应用程序进行存储和处理(〜浮法4GB)OpenCL的,半浮VS性能

由于各个变量的精度是不太重要的(我知道他们会被限制),我看到我可以使用OpenCL的一半而不是浮动,因为这会真的减少内存的数量。

我的问题是双重的。

  • 是否有任何性能损失,使用一半,而不是浮动(我会像显卡正在修建的浮点运算)

  • 是否有在计算混合花车和一半的性能损失? (即浮动倍半。)

Sincerily, 安德烈亚斯FalkenstrømMieritz

+4

我相信答案是非常依赖硬件。所以你应该测量和基准。 –

+9

绝对基准,因为它绝对是情景。通常情况下,'half'会胜过'float' - 如果确实如此 - 必须处理内存带宽和缓存效率。大多数硬件无法比'float'更快地计算'half'结果;他们只是快速移动。 – willglynn

+1

经验法则是当将内存传输到GPGPU时失败,当需要在着色器中进行类型转换时会失败。我认为当从浮点移动到一半时,计算单元的数量不会增加... –

回答

4

ARM CPU和GPU有自己的ALU为half的原生支持,所以你会得到接近双倍的速度,再加上大量节约能源消耗。 编辑: PowerVR GPU也是如此。

桌面硬件仅在加载/存储和纹理单元AFAIK中支持half。尽管如此,我还是希望half纹理在任何GPU上的表现都比float更好。特别是如果你可以巧妙地使用纹理过滤。

+0

我已经开始了一些实验,并且正如这里的几个人所建议的,内存带宽将成为瓶颈,而不是计算速度。因此,使用一半给出理论2x加速。我还没有尝试过,但这是我要走的路线。 感谢您的澄清答案!不知道关于ARM的东西,但它对我目前的项目来说并不太相关,但在未来很了解。 –

2

OpenCL内核几乎总是内存速度或pci速度限制。如果您将数据的相当一部分转换为半浮点数,则可以更快地转换您的值。在任何平台/设备上几乎肯定会更快。

就表现而言,一半几乎不会比浮动差。我相当肯定,任何支持一半的设备都会像浮点一样快速地进行计算。再说一次,即使这里有一个小小的开销,你将在远远优越的转会时间弥补它。