【问题标题】:how can opencl local memory size works?opencl本地内存大小如何工作?
【发布时间】:2014-07-08 07:24:22
【问题描述】:

我使用 opencl 进行图像处理。例如,我有一张 1000*800 的图片。

我使用2D全局尺寸为1000*800,局部工作尺寸为10*8。

那么,GPU会自动给100*100个计算单元吗?

这 10000 个单元是否同时工作,所以可以并行?

如果硬件没有10000个单元,一个单元会做同样的事情超过一次吗?

我测试了本地尺寸,我发现如果我们使用非常小的尺寸(1*1)或大尺寸(100*80),它们都非常慢,但是如果我们使用中间值(10*8 ) 它更快。那么最后一个问题,为什么?

谢谢!

【问题讨论】:

    标签: image-processing opencl gpu


    【解决方案1】:

    工作组规模可能是一个难以掌握的概念。

    如果您刚刚开始并且不需要在工作项之间共享信息,请忽略本地工作大小并将其保留为 NULL。运行时会自己选择一个。

    对 10*8 的本地工作大小进行硬编码是一种浪费,并且不会很好地利用硬件。例如,某些硬件更喜欢 32 的倍数的工作组大小。

    OpenCL 没有指定工作将按什么顺序完成,只是说明它会完成。它可能一次做一个工作组,也可以分组做,或者(对于小型全球规模)所有这些工作一起做。你不知道,也无法控制。

    对于您的问题“为什么?”:硬件可以在 SIMD(单指令多数据)和/或“Wavefronts”(AMD)或“Warps”(NVIDIA)中运行工作组。工作组规模太小将无法很好地利用硬件。太大,您的寄存器可能会溢出到全局内存(慢)。 “恰到好处”会跑得最快,但如果没有基准测试就很难选择这个。所以现在,将其保留为 NULL 并让运行时为您选择。稍后,当您成为 OpenCL 专家并更多地了解硬件的工作原理时,您可以尝试指定工作组大小。但是请注意,不同硬件的最佳大小可能不同,并且还有其他规则(例如全局大小必须是本地大小的倍数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 2015-07-21
      相关资源
      最近更新 更多