我正在尝试使用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.这是否意味着我无法使用更大的矩阵?
非常感谢
答案 0 :(得分:1)
本地大小必须是全局大小的精确除数。
1000x1000可以被10x10或20x5和类似的
整除如果你坚持本地尺寸14,你应该将你的整个阵列填充到像1400x1400这样的东西,这样它可以工作但不完全在填充的补丁。这浪费了周期,但至少兼容任何尺寸,直到(包括)1400x1400。
如果您的设备的最大本地大小为1024,那么它可以处理32x32本地大小。或者1-D中的1024。