如何正确选择work_group_size?

时间:2017-02-06 15:44:19

标签: opencl

我正在尝试使用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.这是否意味着我无法使用更大的矩阵? 非常感谢

1 个答案:

答案 0 :(得分:1)

本地大小必须是全局大小的精确除数。

1000x1000可以被10x10或20x5和类似的

整除

如果你坚持本地尺寸14,你应该将你的整个阵列填充到像1400x1400这样的东西,这样它可以工作但不完全在填充的补丁。这浪费了周期,但至少兼容任何尺寸,直到(包括)1400x1400。

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