opencl-异步工作组副本和最大工作组大小

opencl- async work group copy and maximum work group size

我正在尝试在 OpenCL 中将全局内存复制到本地内存。

我使用 "async work group copy" 指令将数据从全局内存复制到本地内存。

__local float gau2_sh[1024];
event_t tevent = (event_t)0;
__local float gau4_sh[256];
tevent = async_work_group_copy(gau2_sh, GAU2, 1024, tevent);
tevent = async_work_group_copy(gau4_sh, GAU4, 256, tevent);
wait_group_events(2, &tevent);

gau2的全局内存大小为1024 * 4。当我使用少于128个线程时,它工作正常。但是如果我使用超过 128 个线程,内核会导致错误 CL_INVALID_WORK_GROUP_SIZE.

我的 GPU 是 Adreno420,最大工作组大小是 1024。

我需要考虑本地内存复制的其他事情吗?

这是由寄存器使用和本地内存引起的。

与CUDA的-cl-nv-maxrregcount=<N>类似,对于高通Adreno系列,他们有减少寄存器使用的编译选项。 .

与此相关的官方文档是专有的。 因此,如果您担心它,请阅读 Qualcomm Adreno SDK 中包含的文档。

详情请参考以下链接:

  1. Using a barrier causes a CL_INVALID_WORK_GROUP_SIZE error
  2. Questions about global and local work size
  3. Qualcomm Forums - Strange Behavior With OpenCL on Adreno 320
  4. Mobile Gaming & Graphics (Adreno) Tools and Resources