2012-12-07 95 views
2

Hello Everyone ....
我是新來的opencl並試圖探索更多@它。local_work_size對性能的影響以及爲什麼它是

openCL程序中local_work_size的工作方式以及它在性能方面的重要性。

我工作的一些圖像處理算法中和我的OpenCL內核,我給 作爲

size_t local_item_size = 1; 
size_t global_item_size = (int) (ceil((float)(D_can_width*D_can_height)/local_item_size))*local_item_size; // Process the entire lists 
ret = clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL,&global_item_size, &local_item_size, 0, NULL, NULL); 

和相同的內核,當我改變

size_t local_item_size = 16; 

藏在心裏相同。

我的表現快了約4-5倍。

+0

您可以將local_item_size設置爲NULL;而OpenCL將爲工作組選擇「最佳」大小,但不考慮所使用的本地內存。 –

回答

5

當地工作尺寸,又名工作組大小,是每個工作組工作項數量。

每個工作組被一個計算單元其能夠處理一堆工作項,不僅一個上執行。

所以當你使用太小的組時,你會浪費一些計算能力,並且只能在計算單元級別進行粗略的並行化。

但是,如果組中有太多工作項目,那麼也可能會失去一些並行化機會,因爲某些計算單元可能不會被使用,而其他計算單元會被過度使用。

所以,你可以用多個值進行測試,以找到最好的一個,或只是讓OpenCL的通過傳遞NULL作爲當地工作尺寸爲您挑選一個好的。 PS:我有興趣瞭解OpenCL選擇與以前的值相比的性能,所以請你做一個測試併發布結果。 謝謝:)

+0

這是非常有趣的....所以我應該保持local-work-size =(處理元素的數量在一個COMPUTE UNIT中)。我也會很快發佈結果。 – Meluha

+1

這不是一個好主意。如果您使用CPU,則每個計算單元只能有一個處理元素。因此,您的工作組大小等於1.這是非常耗時的。 一般而言,建議的內核工作組大小爲64-128個工作項。 不考慮使用本地內存。您應該將工作組大小設置爲如下所示:Global_size/Compute Unit 通過調用clGetKernelWorkGroupInfo,可以使用CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE獲得首選工作組大小倍數。 而且,要從CPU上使用矢量化中受益,工作組大小必須是8的倍數。 –

相關問題