2017-06-20 65 views
1

我正在與OpenCL合作,我使用矩陣來增加其值,並且我需要的應用程序時間越少越好。用OpenCL提高性能的最佳方法是什麼?我已經閱讀了一些關於數據並行和任務並行的內容,但我不太瞭解它們。OpenCL - 性能

我正在使用64x56矩陣。使用任務並行我創建了64個內核函數。每列有一個內核,但我認爲我可以做得更好。

+0

即使矩陣乘法,64x56矩陣的工作量也太小。爲56個元素產卵新內核的開銷過大。但是,如果他們在不同的隊列上運行,可能會比單個隊列更快。你使用單隊列嗎? –

+0

我現在正在使用2個隊列中的32個內核。但是使用2個隊列而不是1個隊列的時間稍微差一些。這個想法是在CPU中創建一個矩陣,將其發送到GPU,增加矩陣的每個值1個單位,並將新矩陣返回給CPU。在這種情況下,我不知道如何少做內核函數。 – Coke

回答

1

如果您在GPU上執行內核,最好讓一個線程處理一個項目。然而,這取決於你對矩陣的元素究竟做了什麼,例如,你在他們每個人上執行多少次操作。 如果您只是通過某些數字增加元素,則可能沒有好處。

一般情況下,有3個選項:

  1. 一個線程的工作原理與整個矩陣。這種方式沒有並行性,對GPU不利。
  2. 一個線程與一個行/列一起工作。 - >使用64/56個線程,全局工作大小等於64或56.
  3. 一個線程使用單個元素。 - >使用3584個線程,全局工作量爲{64,56}。

您是否嘗試過僅使用一個內核,處理一個元素,併爲其調用clEnqueueNDRangeKernel,其全局工作大小等於{64,56}?它如何影響執行時間?