我传入矩阵作为全局内存并处理本地内存中的每个向量(行)。传入的实际矩阵是100 X 2025,但在内核中我用零填充它以利用2次操作的功率。我在每个工作项中处理向量的4个元素。
MAX_WORK_ITEM_SIZES:(512,512,512) MAX_WORK_GROUP_SIZE:512
size_t globalWorkSize[2] = { 100, 2048 };
size_t localWorkSize[1] = { 512 };
我还尝试过制作localWorkSize 2维:{1,512}但是我在这个函数调用中遇到了同样的错误CL_INVALID_WORKGROUP_SIZE:
err = clEnqueueNDRangeKernel( openCLObjects.queue, openCLObjects.Normalize, 2, NULL,
globalWorkSize, localWorkSize, 0, NULL, NULL );
知道可能出现什么问题吗?
感谢。
答案 0 :(得分:1)
设备属性:(设备的通用上限)
内核属性:(已编译的设备内核的特定限制)
第一个是针对每个设备进行硬编码的,并且可能受限于在完全SIMD模式下可以处理多少项目。
第二个限制是每个内核,而你应该使用它。这个考虑了特定于您的代码的更多内容。像最大的私人记忆等...
您是否也符合第二项要求?
BTW:在任何情况下都应该使用:
size_t globalWorkSize[2] = { 100, 2048 };
size_t localWorkSize[2] = { 1, 512 };