版本記錄
| 版本號(hào) | 時(shí)間 |
|---|---|
| V1.0 | 2018.10.06 星期六 |
前言
很多做視頻和圖像的,相信對(duì)這個(gè)框架都不是很陌生,它渲染高級(jí)3D圖形,并使用GPU執(zhí)行數(shù)據(jù)并行計(jì)算。接下來的幾篇我們就詳細(xì)的解析這個(gè)框架。感興趣的看下面幾篇文章。
1. Metal框架詳細(xì)解析(一)—— 基本概覽
2. Metal框架詳細(xì)解析(二) —— 器件和命令(一)
3. Metal框架詳細(xì)解析(三) —— 渲染簡單的2D三角形(一)
4. Metal框架詳細(xì)解析(四) —— 關(guān)于GPU Family 4(一)
5. Metal框架詳細(xì)解析(五) —— 關(guān)于GPU Family 4之關(guān)于Imageblocks(二)
6. Metal框架詳細(xì)解析(六) —— 關(guān)于GPU Family 4之關(guān)于Tile Shading(三)
7. Metal框架詳細(xì)解析(七) —— 關(guān)于GPU Family 4之關(guān)于光柵順序組(四)
8. Metal框架詳細(xì)解析(八) —— 關(guān)于GPU Family 4之關(guān)于增強(qiáng)的MSAA和Imageblock采樣覆蓋控制(五)
About Threadgroup Sharing - 關(guān)于線程組共享
了解增強(qiáng)的內(nèi)存模型,該模型允許在線程之間靈活高效地共享數(shù)據(jù)。
Overview - 概覽
A11上的Metal 2引入了一種新的內(nèi)存模型,它采用并擴(kuò)展了C ++ 11一致性模型。 此模型具有新功能,允許線程組和線程組內(nèi)的線程使用原子操作或內(nèi)存柵欄相互通信,而不是昂貴的barriers。
線程組需要通信的一個(gè)示例是一個(gè)對(duì)浮點(diǎn)數(shù)組合求和的內(nèi)核,如圖1所示。傳統(tǒng)上,您可以使用計(jì)算每個(gè)線程組的值總和的內(nèi)核實(shí)現(xiàn)此求和,并將這些值寫入中間緩沖區(qū)。 因?yàn)檫@些線程組無法通信,所以您需要調(diào)度第二個(gè)內(nèi)核來計(jì)算中間緩沖區(qū)值的最終總和。
因?yàn)閱?dòng)每個(gè)內(nèi)核需要成本,所以這種方法可能效率不高。 此外,由于第二個(gè)內(nèi)核使用單個(gè)線程組,因此可能無法完全利用圖形處理單元(GPU)。

通過線程組共享,一個(gè)內(nèi)核和一個(gè)dispatch可以對(duì)輸入數(shù)組中的每個(gè)元素求和。 您可以使用原子操作來計(jì)算已完成的線程組的數(shù)量。 當(dāng)所有線程組完成后,最后一個(gè)執(zhí)行線程組可以計(jì)算最終的總和,如圖2所示。

A11上的Metal 2引入了原子函數(shù),允許對(duì)內(nèi)存位置進(jìn)行互斥訪問,并允許您指定在線程組內(nèi)或線程組之間的線程之間如何同步內(nèi)存。 您可以為每個(gè)原子操作指定內(nèi)存順序和內(nèi)存范圍。
內(nèi)存順序用于指定圍繞同步操作如何排序內(nèi)存操作。 內(nèi)存順序可以放寬 - 這是最快的模式,并提供僅對(duì)原子操作進(jìn)行獨(dú)占訪問的保證。 如果需要在線程之間同步數(shù)據(jù),請(qǐng)使用acquire-release內(nèi)存順序。 在此模式下,寫入內(nèi)存的線程執(zhí)行釋放以允許線程獲取相同的內(nèi)存并讀取最新數(shù)據(jù)。
內(nèi)存范圍基于GPU內(nèi)存層次結(jié)構(gòu),并指定是否需要在SIMD組,線程組或設(shè)備中的線程之間同步原子操作。
后記
本篇主要講述了線程組共享,感興趣的給個(gè)贊或者關(guān)注~~~
