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 中包含的文档。
详情请参考以下链接:
- Using a barrier causes a CL_INVALID_WORK_GROUP_SIZE error
- Questions about global and local work size
- Qualcomm Forums - Strange Behavior With OpenCL on Adreno 320
- Mobile Gaming & Graphics (Adreno) Tools and Resources
我正在尝试在 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 中包含的文档。
详情请参考以下链接:
- Using a barrier causes a CL_INVALID_WORK_GROUP_SIZE error
- Questions about global and local work size
- Qualcomm Forums - Strange Behavior With OpenCL on Adreno 320
- Mobile Gaming & Graphics (Adreno) Tools and Resources