__attribute __((reqd_work_group_size(X,Y,Z)))用于什么?

时间:2016-06-15 00:57:43

标签: opencl

我是一名新的OpenCL程序员,我对如何设置工作组大小感到困惑。这是设置工作组大小的正确方法:

  1. 在主机代码的clEnqueueNDRangeKernel中设置local_work_size参数。
  2. 在内核代码中使用__attribute__((reqd_work_group_size(X, Y, Z)))
  3. 同时使用。
  4. 别的东西

1 个答案:

答案 0 :(得分:4)

这可确保传入正确的工作组大小。通常,本地内存的必要大小是工作组大小的函数。例如。处理图像的16x16图块。

E.g。一个人可以写:

__attribute__((reqd_work_group_size(16, 16, 1)))
kernel foo void(...) {
   local float tile[16][16]; // compiler allocates local memory
   ...
}

编译器分配本地内存,我们不需要将其作为显式参数传递。但是,我们需要确保工作组大小与该假设相匹配。这个属性就是这样。