cooperative groups:
介紹:cooperative groups:是對cuda 9中引入的cuda程式設計模型的擴充套件,用於組織通訊線程組。 合作組允許開發人員表達執行緒通訊的粒度,幫助他們表達更豐富,更高效的並行分解。
歷史上,cuda程式設計模型為同步協作執行緒提供了乙個簡單的構造:跨越執行緒塊的所有執行緒的屏障,如使用__syncthreads()
內部函式實現的。但是,程式設計師希望以其他粒度定義和同步執行緒組,以「集體」組範圍功能介面的形式實現更高的效能,設計靈活性和軟體重用。為了表達更廣泛的並行互動模式,許多面向效能的程式設計師採用編寫自己的臨時和不安全基元來同步單個warp內的執行緒,或者跨單個gpu上執行的執行緒塊集。雖然實現的效能改進常常是有價值的,但這導致了越來越多的脆弱**集合,隨著時間的推移以及gpu代之間的編寫,調優和維護成本很高。合作組通過提供安全且面向未來的機制來實現高效能**來解決這個問題。
協作組程式設計模型擴充套件描述了cuda執行緒塊內部和跨cuda執行緒塊的同步模式。 它提供了應用程式定義自己的執行緒組以及同步它們的介面的方法。 它還提供了新的啟動api,可以強制實施某些限制,因此可以保證同步工作。 這些原語支援cuda內部的新合作並行模式,包括生產者 - 消費者並行(producer-consumer parallelism),機會並行(opportunistic parallelism)以及跨整個網格的全域性同步。
由於集合函式可以接收表示參與執行緒組的顯式物件,因此將組表示為一等程式物件可以改進軟體組合。 這個物件也使得程式設計師的意圖是明確的,這消除了不合理的架構假設,導致**變得脆弱,編譯器優化的不受限制的限制以及與新一代gpu的更好的相容性。
協作組程式設計模型由以下元素組成:
塊內組:
在本節中,我們將介紹可用於在可同步和協作的執行緒塊內建立執行緒組的功能。 請注意,使用協作組來跨執行緒塊或裝置進行同步需要一些其他注意事項,如本附錄後面所述。
合作組織需要cuda 9.0或更高版本。 要使用協作組,請包括標頭檔案:
#include
並使用命名空間:
using namespace cooperative_groups;
然後可以使用nvcc以正常方式編譯包含任何塊內協作組功能的**。
(五十四)列舉
列舉的使用方法類似結構,但是不需要為每個變數制定變數型別。列舉的使用範圍,主要是用來給某乙個狀態賦值,例如,星期一到星期日,通過列舉,可以分別賦值1 2 3 4 5 6 7,這樣在使用的時候,可以直接呼叫星期x這個名字,便自動呼叫相應的變數。列舉的格式為 enum 列舉名 上 include int...
(五十四)列舉
列舉的使用方法類似結構,但是不需要為每個變數制定變數型別。列舉的使用範圍,主要是用來給某乙個狀態賦值,例如,星期一到星期日,通過列舉,可以分別賦值1 2 3 4 5 6 7,這樣在使用的時候,可以直接呼叫星期x這個名字,便自動呼叫相應的變數。列舉的格式為 enum 列舉名 上 include int...
CUDA學習(三十四)
c語言擴充套件 函式執行空間說明符 函式執行空間說明符表示函式是在主機上還是在裝置上執行,以及函式是從主機還是從裝置中呼叫。device device 執行空間說明符宣告乙個函式 global 和 device 執行空間說明符不能一起使用。global 空間說明符將乙個函式宣告為乙個核心。這樣的功能...