2014-09-30 69 views
0

我試圖在GPU上看到Opencl編程模型的性能,現在在測試編程模型時,我必須使用clEnqueueNDkernel()啓動內核,我試圖多次調用此函數,以便我可以看看它在兩個或四個併發內核啓動時的表現如何。如何在程序內部的OpenCL中啓動多個內核?

我觀察到程序的啓動時間與啓動一個內核的時間相同,現在我假設它只是運行一次內核,導致無法花費相同的時間來運行兩個內核或四個併發內核。

現在我想知道如何在一個GPU上啓動多個內核。

如:我想推出類似:

clEnqueueNDkernel() 
clEnqueueNDkernel() 

我怎樣才能做到這一點?

+0

四個併發內核是指四個相同的內核代碼還是四個不同的內核代碼?在一個內核中還有多少工作,是隻增加了兩個值還是很多的計算? – maZZZu 2014-09-30 14:03:55

+0

四個相同的內核。而且工作量也各不相同。因爲我在各種工作負載下檢查 – 2014-09-30 16:34:19

+0

如果計算量很小,幾乎所有的時間都可以用來在主機和設備之間移動數據。這可能是一個和四個內核需要相同時間的原因。與數據傳輸相比,嘗試使負載非常巨大。那麼它應該是四次發射一次的時間的四倍。 – maZZZu 2014-09-30 17:22:29

回答

0

首先,檢查您的設備是否支持併發內核執行。最新的AMD & Nvidia顯卡。

然後,創建多個命令隊列。如果你將內核排入同一隊列,它們將會一個接一個地執行。

最後,檢查內核確實是並行執行的。使用來自SDK或OpenCL事件的分析器來收集分析信息。

+0

所以你的意思是......我在不同的clenqueuendkernel()中使用不同的隊列。這樣它就會在同一個設備中並行運行 – 2014-09-30 16:38:27

+0

是的。根據它的性質排隊,意味着內部的對象將被逐一訪問。所以,如果你使用單個隊列,內核將會一個接一個地執行。 – 2014-09-30 16:44:05