Opencl 如何正确选择工作组大小?

Opencl 如何正确选择工作组大小?,opencl,Opencl,我想用OpenCl做矩阵乘法。 A是1000x1000,B是1000x1000,所以我的C=AxB也是1000x1000。 例如,我当地的尺码是14号 size_t local_item_size[2] = { local_size, local_size }; 我读到了工作组的规模,这是我问题的规模。C有两个维度,所以我会尝试设置 size_t work_group_size[2] = { N, N }; err = clEnqueueNDRangeKernel(dev.que

我想用OpenCl做矩阵乘法。 A是1000x1000,B是1000x1000,所以我的C=AxB也是1000x1000。 例如,我当地的尺码是14号

size_t local_item_size[2]  = { local_size, local_size };
我读到了工作组的规模,这是我问题的规模。C有两个维度,所以我会尝试设置

size_t work_group_size[2] = 
    { N, N };

err = clEnqueueNDRangeKernel(dev.queue, kernel, 2, 0, 
                             global_item_size, work_group_size,
                             0, NULL, &event);
但是我得到了一个
CL\u无效的\u工作组\u大小
。如何正确选择全局项目大小我的电脑的最大工作组大小为1024。这是否意味着我不能处理更大的矩阵?
非常感谢

局部大小必须是全局大小的精确除数

1000x1000可被10x10或20x5或类似值整除

如果您坚持使用本地大小14,那么您应该将整个阵列填充为类似1400x1400的大小,这样它就可以工作,但不能完全在填充的补丁上。这浪费了周期,但至少在(包括)1400x1400之前兼容任何尺寸

如果设备的最大本地大小为1024,则可以处理32x32的本地大小。或1-D中的1024