【问题标题】:Downside of using image vs global memory?使用图像与全局内存的缺点?
【发布时间】:2014-07-26 14:08:00
【问题描述】:

我有一个处理 RGB 图像的内核。现在, 我一个接一个地获取每个通道,并在该通道上运行相同的内核

内核输入是一个全局内存缓冲区:数据以块的形式从全局内存中移动 缓存到本地内存中进行处理,然后存储到另一个全局内存中 缓冲区作为输出。

我正在考虑重构它以将所有三个通道存储在 RGBA 中 缓冲区,并同时对所有三个通道进行操作,使用向量 操作。我知道图像具有更好的空间缓存。

这个重构有什么缺点吗?我意识到我将不得不减少 每个块的像素数,因为我现在将有三倍的数量 数据。

谢谢!

【问题讨论】:

  • 问题:您的 RGB 数据是如何布局的?平面还是交错?另外,你的目标是什么硬件?不同的硬件会有不同的特性。最后,您的过滤器使用多少 ALU?大型复杂过滤器还是小型简单过滤器?
  • 谢谢,user2746401。我可以选择使用什么格式——如果我切换到图像,我想交错是要走的路。目前它是平面的。另外,我将瞄准 AMD Hawaii GPUS;以 290X 为例。此外,过滤器又大又复杂。

标签: opencl


【解决方案1】:

通常,现代 GPU 可以很好地处理图像,因为它们最初就是为此而设计的。除非您使用某些特定的硬件,这对 Image 数据结构不利,否则这种重构是一个好主意 (IMO)。

更改每个 WI 或 WG 流程的数据量并不一定会导致性能下降 - 算法更改可能会以不可预知的方式影响性能。因此,要得出结论,需要仔细的基准测试。

如果您针对特定硬件,使用 SDK 工具始终是一个好主意。性能分析器可以提供有用的统计信息和优化提示(例如寄存器溢出、缓存命中率、利用率等)

【讨论】:

  • 谢谢,罗曼。我正在做一个离散小波变换:先变换列,然后变换行,所以它不是一个简单的卷积型算法。我一个人在这个项目上工作,我是一个 opencl 初学者:你有时间快速审查代码以标记我的任何明显错误吗? github.com/boxerab/ocldwt 是项目。目前,在windows上,使用intel处理器作为设备,它并不比CPU上的串行代码快,所以有点令人失望。但我知道它可以改进......
猜你喜欢
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 2013-09-22
  • 2013-06-11
  • 2012-06-02
  • 2011-06-08
  • 2016-04-23
相关资源
最近更新 更多