__attribute__((reqd_work_group_size(X, Y, Z))) 有什么用?

What is __attribute__((reqd_work_group_size(X, Y, Z))) used for?

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

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

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

例如可以写:

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

编译器分配本地内存,我们不需要将其作为显式参数传入。但是,我们需要确保工作组规模符合该假设。此属性正是这样做的。