C++ OpenCL,半对浮性能

C++ OpenCL,半对浮性能,c++,c,opencl,gpu,gpgpu,C++,C,Opencl,Gpu,Gpgpu,我目前正在开发一个需要存储和处理大量变量的应用程序(~4gb浮点) 由于单个变量的精度不太重要(我知道它们是有界的),我发现我可以使用OpenCL的一半而不是浮点数,因为这将真正减少内存量 我的问题有两方面 使用“一半”而不是“浮动”是否会影响性能(我希望为浮动操作构建图像图形卡) 计算中混合浮点数和半浮点数是否会影响性能?(即,浮点数乘以半。) 诚恳地说, Andreas Falkenstrøm MieritzARM CPU和GPU在其ALU中对half具有本机支持,因此您将获得接近双倍的

我目前正在开发一个需要存储和处理大量变量的应用程序(~4gb浮点)

由于单个变量的精度不太重要(我知道它们是有界的),我发现我可以使用OpenCL的一半而不是浮点数,因为这将真正减少内存量

我的问题有两方面

  • 使用“一半”而不是“浮动”是否会影响性能(我希望为浮动操作构建图像图形卡)

  • 计算中混合浮点数和半浮点数是否会影响性能?(即,浮点数乘以半。)

诚恳地说,
Andreas Falkenstrøm Mieritz

ARM CPU和GPU在其ALU中对
half
具有本机支持,因此您将获得接近双倍的速度,并大幅节省能耗编辑:PowerVR GPU也是如此


桌面硬件仅支持加载/存储和纹理单元AFAIK中的
half
。即便如此,我还是希望
half
纹理在任何GPU上的性能都比
float
纹理或缓冲区好。特别是如果你能巧妙地使用纹理过滤的话。

OpenCL内核几乎总是内存速度或pci速度受限的。如果要将一大块数据转换为半浮点数,这将加快值的传输速度。几乎可以肯定,在任何平台/设备上都会更快


就性能而言,一半很少比浮动差。我相当确信,任何支持一半的设备都会像使用float一样快速地进行计算。再说一次,即使这里有一点开销,你也可以用你优越的换乘时间来弥补。

我相信答案是非常依赖硬件的。所以你应该衡量和基准。绝对基准,因为它绝对是情境性的。通常情况下,
half
胜于
float
——如果它真的胜出的话——与内存带宽和缓存效率有关。大多数硬件计算
一半
结果的速度不能快于
浮点
;根据经验,当将内存传输到GPGPU时,一半的人会赢,而当需要在着色器中键入时,一半的人会输。我不认为当从浮点移动到一半时,计算单位的数量会增加……我已经开始了一些实验,正如这里的一些人所建议的,内存带宽将是瓶颈,而不是计算速度。同样地,使用half可以在理论上获得2倍的加速比。我还没试过,但这是我要走的路线。谢谢你的回答!我不知道关于ARM的事情,但它与我当前的项目不太相关,但很高兴将来知道。