天天看點

CUDA學習(五十八)

CUDA動态并行:

介紹:

概括:

動态并行是對CUDA程式設計模型的擴充,使CUDA核心能夠直接在GPU上建立和同步新的工作。 在需要的程式中動态建立并行性可以提供令人興奮的新功能。

直接從GPU建立工作的能力可以減少在主機和裝置之間傳輸執行控制和資料的需求,因為現在可以通過在裝置上執行的線程在運作時進行啟動配置決策。 此外,資料相關的并行工作可以在運作時在核心内部生成,動态利用GPU的硬體排程程式和負載平衡器,并根據資料驅動的決策或工作負載進行調整。 之前需要進行修改以消除遞歸,不規則循環結構或其他不符合平面單層并行性的構造的算法和程式設計模式可能會更加透明地表達。

本文檔描述了支援動态并行機制的CUDA的擴充功能,包括對利用這些機制所必需的CUDA程式設計模型的修改和補充,以及利用此增加容量的指導原則和最佳實踐。

動态并行性僅受計算能力3.5及更高版本的裝置支援。(哈哈,感覺相對于前面的這節會很重要,和Pytorch的動态計算圖名字上蠻像的,我的1060終于可以用上了)

Glossary:

本指南中使用的術語的定義;

網格(Grid):

網格(Grid)是線程(Threads)的集合。 網格中的線程執行核心功能并分為線程塊(Thread Blocks)。

線程塊(Thread Block):

線程塊是一組在同一個多處理器(SMX)上執行的線程。 線程塊内的線程可以通路共享記憶體,并且可以顯式同步。

核心函數:

核心函數是隐式并行子例程,在CUDA執行和記憶體模型下為網格中的每個線程執行。

主機:

主機指的是最初調用CUDA的執行環境。 通常是在系統的CPU處理器上運作的線程。

Parent(父母):

父母線程,線程塊或網格是已經啟動新網格(即子網格)的網格線程。 直到其所有已啟動的子網格都完成後,父級才被視為已完成。

Child(子):

子線程,塊或網格是由父網格啟動的線程,塊或網格。 子線網格必須在父線程,線程塊或網格被認為完成之前完成。

線程塊範圍:

帶有線程塊範圍的對象具有單個線程塊的生命周期。 它們隻有在建立該對象的線程塊中的線程操作時才具有已定義的行為,并且在建立它們的線程塊完成時将被銷毀。

裝置運作時:

裝置運作時指的是運作時系統和API,可以使核心函數使用動态并行。

CUDA學習(五十八)

繼續閱讀