2017-02-06 67 views
0

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

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

本地大小必须是全球大小的确切除数。

1000×1000是10×10或20×整除和类似

如果你坚持局部尺寸14,你应该垫你的整个阵列有类似1400x1400所以它的工作原理,但不完全是在填充补丁。这浪费了周期,但至少可以兼容任何尺寸,直到(包括)1400x1400。

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