2013-05-15 54 views
0

最近我需要做一些實驗,這些實驗需要在AMD硬件上運行多個不同的內核。但在開始編碼之前我有幾個問題,因此我真的需要你的幫助。並行內核執行和OpenCL設備分區

首先,我不太確定AMD硬件是否可以在一臺設備上支持併發內核執行。因爲當我參考OpenCL規範時,他們說命令隊列可以按照有序和無序的方式創建。但是我不「亂序」是指「併發執行」。有沒有人知道這方面的信息?我的硬件是AMD APU A8 3870k。如果此處理器不支持,其他AMD產品是否支持?第二,我知道有一個擴展名「設備分裂」,可以用來將一個設備分割爲兩個設備。這現在只適用於CPU。但是在OpenCL規範中,我看到了一些東西,即「clcreatesubdevice」,它也被用來將一個設備分成兩部分?所以我的問題是這兩種技術有什麼區別?我的理解是:設備的分裂只能用在CPU上,clcreatesubdevice可以用在CPU和GPU上。那是對的嗎?

謝謝你的回覆!

+0

'clCreateSubDevice' * *設備分裂。你的OpenCL實現(無論是AMD的GPU實現還是它的CPU實現)和設備只需要支持它(OpenCL 1.2,我認爲這是強制性的)。但對於CPU和GPU來說,這是相同的功能(嗯,這就是OpenCL的全部功能,對於衆多不同的硬件設備使用相同的接口)。 –

回答

0

真正的併發內核不是一個需要的功能,給驅動程序開發者帶來了很多麻煩。據我所知,如果沒有子設備拆分,AMD不支持此功能。正如你所提到的那樣,「無序」不是正在執行的,只是無序執行隊列。

但是,它們以一半的速度並行運行,而不是按照全速運行,這又有什麼意義?如果你這樣做,你可能會失去整體性能。

如果您在其中一個GPU中耗盡資源,我建議您使用更多GPU設備(或GPU + CPU)。優化也可能是一個不錯的選擇。但是,對於真實場景來說,分離不是一個好的選擇,僅用於學術目的或測試。

+0

如果你有一個內存是內存帶寬綁定,另一個是計算綁定? –