2017-03-20 54 views
3

當您從GPU上的主內核啓動次內核時,會產生一些開銷。造成或影響這種開銷的因素是什麼?例如內核代碼的大小,啓動內核的SM的佔用情況,內核參數的大小等。什麼因素影響動態並行內核啓動的開銷?

爲了這個問題,讓我們具有包容性,並將「開銷」定義爲以下總和時間間隔:

開始:一個SM看到啓動指示
結束:一個SM開始執行的子內核

開始的指令:最後SM執行子的任何指令內核(或者可能最後由子內核指令寫入致力於相關的內存空間)
結束:執行子內核啓動後父內容的下一條指令。

+0

您提到的「開銷」是否僅包含從啓動調用到子內核啓動的時間段? – xhg

+0

@aahung:請參閱編輯。 – einpoklum

回答

1

此答案不是基於設備端運行時實現的實驗或知識,而是基於需要做什麼來執行操作。

我認爲啓動的網格配置和註冊使用有一些影響,因爲狀態需要保存在某處讓SM移動到另一個內核。 此外,啓動的塊數可能會有一些影響,因爲我沒有看到設備運行時如何處理所有配置。 另一方面,我不明白爲什麼被調用者註冊使用情況/代碼大小會產生巨大影響。

再次,沒有測試/實驗在這裏證明上述任何。

+0

我傾向於不同意 - 再次,不是基於經驗數據 - 至少有兩個建議因素。塊數量:設備會將其保存爲某個數字,並根據需要分配更多塊;對於所有的塊沒有預先分配任何東西。寄存器數量:在新內核啓動之前沒有寄存器值的初始化,所以我不明白爲什麼這會是一個問題。當然,我可能是錯的,但我確實需要一些關於這方面的硬性事實... – einpoklum

+0

@einpokum:重新塊和寄存器的數量:運行內核的狀態需要保存在某個地方繼續執行,一旦被調用者內核已完成運行。保存這個狀態需要的資源取決於用於恢復其值的寄存器的數量,並且這取決於每個塊。也許有一些祕密的存儲寄存器值的方式不依賴於主存儲器,那麼訪問它是非常棒的... –