opencl- async工作组副本和最大工作组大小

时间:2015-05-11 11:29:22

标签: memory opencl

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

我使用"异步工作组副本"将数据从全局存储器复制到本地存储器的指令。

__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。

我是否需要考虑本地内存复制的其他内容?

1 个答案:

答案 0 :(得分:1)

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

与CUDA的-cl-nv-maxrregcount=<N>类似,对于Qualcomm 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