我试图在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。
我是否需要考虑本地内存复制的其他内容?
答案 0 :(得分:1)
这是由寄存器使用和本地内存引起的。
与CUDA的-cl-nv-maxrregcount=<N>
类似,对于Qualcomm Adreno系列,它们具有减少寄存器使用的编译选项。
与此事相关的官方文件是专有的。 因此,如果您担心,请阅读Qualcomm Adreno SDK中包含的文档。
详情请参阅以下链接: