如何正确选择work_group_size?

How to correctly choose work_group_size?

我正在尝试使用 OpenCl 进行矩阵乘法。 A 是 1000x1000,B 是 1000x1000,所以我的 C=AxB 也是 1000x1000。 例如,我的 local_size 是 14.

size_t local_item_size[2]  = { local_size, local_size };

我读到工作组的规模就是我的问题的规模。 C 有 2 个维度,所以我会尝试设置

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_INVALID_WORK_GROUP_SIZE。我怎样才能正确选择 global_item_size 我的电脑的最大工作组大小是 1024。这是否意味着我不能使用更大的矩阵? 非常感谢

局部大小必须是全局大小的整除数。

1000x1000 可以被 10x10 或 20x5 整除,类似的

如果您坚持局部大小为 14,则应填充整个数组以使其具有 1400x1400 之类的大小,这样它就可以工作,但不完全是在填充的补丁上。这浪费了周期,但至少兼容任何尺寸,直到(包括)1400x1400。

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