2013-03-31 31 views
0

我正在使用Quadro FX 880卡。在我的圖像分割代碼中,我將圖像分爲4部分(即,如果有4000個像素,則每個部分都是1000像素)。我的代碼中有8個內核,其中前四個是並行執行的,另外四個是並行執行的,但在前四個內核執行後。如果我對所有8個內核使用相同的命令隊列,並且爲前四個內核中的每一個內核指定一個clEnqueueNDRangekernel命令,並且在創建命令隊列時提及OUT_OF_ORDER參數,這是否可能?如果這是可能的如何並行執行接下來的四個內核,那是在前四個內核之後執行的。我可以在前四個內核之後提供一個clWaitForEvents命令,然後指定接下來的四個內核..?這將保證前四個內核是並行執行的,而後四個內核是在它們之後執行的,但是並行執行。在Nvidia Quadro FX上使用亂序執行880

我認爲clEnqueueTask會讓我的代碼變慢,因爲我在每個內核中有大約1000個像素,clEnqueueTask允許gobal_workitem_size和local_work_item_size只是1 ....

我不確定是否所有這些事情都可以完成...什麼是錯的或正確的...所以我只需要確認...!但如果不是這樣,請建議一種替代方式......!

回答

0

FX880M是一個計算能力1.2設備。它不支持同時/併發內核執行,只執行拷貝重疊。您可以創建一個無序執行的命令隊列,但它不會產生您詢問的效果。

+0

如果我創建了多個命令隊列,一個命令隊列爲每個內核...將它們並行執行......在不同的計算單元上?我提到的4個內核包含相同的代碼,但是我爲它們執行了不同的數據集,也就是說,如果我有512X512大小的圖像,我會創建它的4個部分,大小爲256x256像素,並通過給予相同的處理4個不同的clEnqueueNDRangeKernel調用,這些調用將被排隊等待不同的命令隊列。這會使代碼並行,還是會增加crapping 4內核的開銷? – shunya

+0

正如我在回答中所說的那樣,這需要GPU不具備的硬件功能。這個要求是不可談判的。你不能在你問的設備上這樣做。 – talonmies

+0

@ user1770678當然,因爲我認爲圖像被分成四個四分之一分支,所以任何工作組中的所有項目都幾乎可以忽略不計,因此您總是可以重寫您的算法以根據正在處理的像素進行不同的分支總是採取同一個分支。這樣你只能啓動一個內核,根據像素的位置做一些稍微不同的事情。 – Thomas

1

較新的設備應支持在多個命令隊列上並行運行多個內核。

相關問題