【问题标题】:OpenCL, half vs float performanceOpenCL,一半与浮动性能
【发布时间】:2012-10-06 20:29:07
【问题描述】:

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

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

我的问题是双重的。

  • 使用 half 代替 float 是否会影响性能(我会为浮点操作构建图像显卡)

  • 在计算中混合浮点数和半数会影响性能吗? (即浮点乘以一半。)

真诚地, Andreas Falkenstrøm Mieritz

【问题讨论】:

  • 我相信答案非常依赖于硬件。所以你应该衡量和基准。
  • 绝对是基准测试,因为它绝对是情境性的。通常情况下half 胜过float——如果有的话——与内存带宽和缓存效率有关。大多数硬件无法比float更快地计算half结果;他们只是更快地四处走动。
  • 一个经验法则是,在将内存传输到 GPGPU 时一半获胜,而当需要在着色器中进行类型转换时,一半获胜。我不认为从浮动到一半时计算单元的数量增加了......

标签: c++ c opencl gpu gpgpu


【解决方案1】:

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

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

【讨论】:

  • 我已经开始了一些实验,正如这里的几个人所说,内存带宽将是瓶颈,而不是计算速度。因此,使用 half 可以实现理论上的 2 倍加速。我还没有尝试过,但这是我要走的路线。感谢您的澄清答案!不了解 ARM 的东西,但它与我当前的项目不太相关,但很高兴在未来了解。
【解决方案2】:

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

就性能而言,half 很少比 float 差。我相当肯定任何支持一半的设备都会像使用浮点数一样快地进行计算。同样,即使这里有轻微的开销,您也可以在非常优越的传输时间中弥补它。

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 1970-01-01
    • 2010-09-29
    • 2011-11-07
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2014-06-22
    相关资源
    最近更新 更多