【问题标题】:OpenCL, float vs uint, expected performance gain?OpenCL,float vs uint,预期的性能提升?
【发布时间】:2014-08-05 23:54:34
【问题描述】:

在 OpenCL 内核中使用 (u)int16 而不是 float 的预期性能提升是多少?如果有的话? 我希望内存传输大致除以 2,但设备负载是多少?

奇怪的是,我几乎找不到任何关于该主题的长凳或文档。 (或者也许我的 google fu 让我失望了……)

我正在研究图像处理(主要是过滤)。精度不是那么关键,实际上几个内核操作的结果被转换成一个字符。我们缩小了几个可以使用较短数据类型的操作。所以我想知道是否可以通过使用更短的数据来加速这些操作,而这些数据的精度并不重要。

感谢您的帮助。

【问题讨论】:

  • OpenCL 与平台无关,无法有意义地回答这个问题。这个内核运行在什么样的加速器上? GPU 风格还是 CPU 风格?
  • 目前,CPU 和 GPU 都有,但我们的目标是入门级专业 GPU(例如:ati firepro scale)。
  • 您必须在相关硬件上进行测量。无法说出 {C,G}PU 和编译器对您的源代码执行了什么魔法,因此无法说。请注意,至少有时,代码大小也会对结果产生影响,因此,例如,如果浮点指令更长,尽管理论上一样快,那么这可能会因代码增长而失去宝贵的性能。
  • 这也取决于你的代码是计算还是内存限制。
  • @delnan 好的 thx,我只是对简单的卷积做了一点测试,确实 float 比 int16 (~20%) 快,bw 使用量除以 ~1.9。所以我想我会坚持浮动

标签: c++ c image-processing opencl


【解决方案1】:

GPU 的浮点运算往往比积分运算好。例如,有些会为浮点运算提供额外的管道,并且使所有内容都集成只会降低 GPU 的吞吐量。数据复制可能不是您的瓶颈,使用 16 位整数将数量减半可能无济于事。此外,在英特尔或 AMD 等集成 GPU 上,您可以获得零拷贝行为。所以对图像或缓冲区大小的影响是最小的(在一定程度上)。

另外,您可能会研究 16 位浮点数支持。这让您获得了两全其美的优势(一半的数据包含浮点数)。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2012-11-02
    • 2020-07-12
    • 2019-08-22
    • 2014-07-17
    • 1970-01-01
    相关资源
    最近更新 更多