版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.10.06 星期六 |
前言
很多做視頻和圖像的,相信對這個框架都不是很陌生,它渲染高級3D圖形,并使用GPU執行數據并行計算。接下來的幾篇我們就詳細的解析這個框架。感興趣的看下面幾篇文章。
1. Metal框架詳細解析(一)—— 基本概覽
2. Metal框架詳細解析(二) —— 器件和命令(一)
3. Metal框架詳細解析(三) —— 渲染簡單的2D三角形(一)
4. Metal框架詳細解析(四) —— 關于GPU Family 4(一)
5. Metal框架詳細解析(五) —— 關于GPU Family 4之關于Imageblocks(二)
6. Metal框架詳細解析(六) —— 關于GPU Family 4之關于Tile Shading(三)
7. Metal框架詳細解析(七) —— 關于GPU Family 4之關于光柵順序組(四)
8. Metal框架詳細解析(八) —— 關于GPU Family 4之關于增強的MSAA和Imageblock采樣覆蓋控制(五)
About Threadgroup Sharing - 關于線程組共享
了解增強的內存模型,該模型允許在線程之間靈活高效地共享數據。
Overview - 概覽
A11上的Metal 2
引入了一種新的內存模型,它采用并擴展了C ++ 11
一致性模型。 此模型具有新功能,允許線程組和線程組內的線程使用原子操作或內存柵欄相互通信,而不是昂貴的barriers
。
線程組需要通信的一個示例是一個對浮點數組合求和的內核,如圖1所示。傳統上,您可以使用計算每個線程組的值總和的內核實現此求和,并將這些值寫入中間緩沖區。 因為這些線程組無法通信,所以您需要調度第二個內核來計算中間緩沖區值的最終總和。
因為啟動每個內核需要成本,所以這種方法可能效率不高。 此外,由于第二個內核使用單個線程組,因此可能無法完全利用圖形處理單元(GPU)。
通過線程組共享,一個內核和一個dispatch
可以對輸入數組中的每個元素求和。 您可以使用原子操作來計算已完成的線程組的數量。 當所有線程組完成后,最后一個執行線程組可以計算最終的總和,如圖2所示。
A11上的Metal 2
引入了原子函數,允許對內存位置進行互斥訪問,并允許您指定在線程組內或線程組之間的線程之間如何同步內存。 您可以為每個原子操作指定內存順序和內存范圍。
內存順序用于指定圍繞同步操作如何排序內存操作。 內存順序可以放寬 - 這是最快的模式,并提供僅對原子操作進行獨占訪問的保證。 如果需要在線程之間同步數據,請使用acquire-release
內存順序。 在此模式下,寫入內存的線程執行釋放以允許線程獲取相同的內存并讀取最新數據。
內存范圍基于GPU內存層次結構,并指定是否需要在SIMD
組,線程組或設備中的線程之間同步原子操作。
后記
本篇主要講述了線程組共享,感興趣的給個贊或者關注~~~