2017-02-06 95 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。