【发布时间】:2011-07-30 06:05:44
【问题描述】:
当我将工作组大小从 16 更改为 32 或更大时,我收到 CL_INVALID_WORK_GROUP_SIZE 错误。 matrix_size 是 64。
localWorkSize[0] = groupsize;
localWorkSize[1] = localWorkSize[0];
globalWorkSize[0] = matrix_size;
globalWorkSize[1] = globalWorkSize[0];
首先我检查了clEnqueueNDRangeKernel 的文档,其中说明了四(五)个不同的原因CL_INVALID_WORK_GROUP_SIZE,但我认为它们都不适用。请检查我的结论。 (希望你不要介意我的 QA 风格)
问 CL_INVALID_WORK_GROUP_SIZE if local_work_size is specified and number of work-items specified by global_work_size is not evenly divisable by size of work-group given by local_work_size
A 64 % 32 = 0
问 or does not match the work-group size specified for kernel using the __attribute__((reqd_work_group_size(X, Y, Z))) qualifier in program source.
A 据我了解,我没有使用__attribute__。
问 CL_INVALID_WORK_GROUP_SIZE if local_work_size is specified and the total number of work-items in the work-group computed as local_work_size[0] *... local_work_size[work_dim - 1] is greater than the value specified by CL_DEVICE_MAX_WORK_GROUP_SIZE in the table of OpenCL Device Queries for clGetDeviceInfo.
A 我查询clGetDeviceInfo和CL_DEVICE_MAX_WORK_GROUP_SIZE是512, 512, 64
问 CL_INVALID_WORK_GROUP_SIZE if local_work_size is NULL and the __attribute__((reqd_work_group_size(X, Y, Z))) qualifier is used to declare the work-group size for kernel in the program source.
A local_work_size 不是NULL。
问 CL_INVALID_WORK_ITEM_SIZE if the number of work-items specified in any of local_work_size[0], ... local_work_size[work_dim - 1] is greater than the corresponding values specified by CL_DEVICE_MAX_WORK_ITEM_SIZES[0], .... CL_DEVICE_MAX_WORK_ITEM_SIZES[work_dim - 1].
A 32
我希望,我没有忽略什么。请告诉我,当您知道什么可能导致CL_INVALID_WORK_GROUP_SIZE 或在我的结论中发现错误时。
感谢您抽出宝贵时间阅读所有内容:)
【问题讨论】:
-
这个问题很老了,但我只是想感谢你这个非常清楚的解释,因为它刚刚找到了我的问题的解决方案!
-
@BigBourin。你很受欢迎。如果您还没有回答,也请 +1 Quantumboredom 回答。
标签: opencl