2012-05-06 42 views
3

有什麼更好的?我需要幾個步驟來處理數據,並在我看來,我已經2種選擇: 1)使用一個大內核 2)使用流有一個內核每一步最好使用一個大內核或cuda流?

有一些延遲前的內核執行,但在這種情況下真的很重要嗎?大內核的延遲與幾個較小內核的延遲總和相同?

與其他方式相比,一種方式有什麼優勢嗎?

謝謝你們。

回答

3

Fermi卡上內核的啓動延遲大約爲10us,所以沒什麼可擔心的。有意義的 - 在遊戲中渲染場景,必須運行許多不同的着色器(它們是內核)。

內核必須讀取將從全局內存中處理的數據並將結果寫回全局內存。所以每個獨立的內核都意味着完整的讀/寫週期。如果您能夠將大量內核中的多個步驟鏈接在一起,您仍然可以加快速度,仍然可以通過單個讀取/寫入週期進行括起來。作爲一個例子,如果你需要執行操作A,B和C,鏈接它們可能會給你READ-A-B-C-WRITE,而單獨的內核會給你READ-A-WRITE-READ-B - 寫 - 讀 - 寫 - 寫。

請記住,即使您運行的是單個內核,您仍然可以通過將單獨的步驟分開以分離設備功能來保持代碼可讀。

+3

大內核也有很大的寄存器佔用空間,可能會對性能產生顯着影響。 – talonmies

+3

我沒有檢查,但理論上,如果變量不在鏈中的步驟之間共享,編譯器應該能夠保持重用寄存器,以便總寄存器使用率僅等於使用最多的步驟。即便如此,這也是一個很好的觀點,共享內存的使用也應該以相同的方式來考慮。換句話說,如果鏈中一個步驟的資源使用量遠高於其他步驟的可能性,它可能會保持其他步驟的佔用率下降,所以最好單獨運行。 –

+0

謝謝,我將使用設備功能和一個大內核。 – zitmen