難怪華爲鴻蒙5.0 6.0手機平板電腦兩三端都能用上ai超分超幀,用npu都能做到
難怪A卡都沒有fsr4,原來是AI性能太爛了,甚至還不如華爲自主研發的達芬奇架構npu
老黃都說華爲強
RDNA3除了翻倍 fp32浮點計算,AMD 還將矩陣 (AI) 吞吐量提高了一倍,並且 AI 矩陣加速器共享許多shader執行資源。AMD不像NVIDIA,有單獨tensor core單元,用於矩陣乘運算(家裏畢竟不富裕啊,要節儉度日)。在RDNA3 上,我們看到的還是利用專有的WMMA指令,以vector方式完成矩陣運算。
矩陣運算,拆解到底層運算就是乘累加運算,針對fp16/bf16/int8,支持64個dot2操作,也就是w**e64。dot2 其實可以看成是下面兩個矩陣乘:
A[1x2]*B[2x1] = C[1x1]
也就是 1x2x1 = 2MAC / thread, 總共64個,也就是128個MAC/cycle,256 ops/cycle。
對比華爲D**inci Cube架構,可以用一條指令完成兩個16*16矩陣的相乘運算(標記爲16^3,也是Cube這一名稱的來歷),等同於單cycle進行了16^3=4096個MAC運算,8192 ops/cycle。
從資源使用上,AMD只使用了相當於華爲1/32,代價是爲了得到兩個16*16矩陣的執行結果,需要連續執行32個cycle。從能效上肯定是輸的。當然從商業角度講,RDNA3 作爲主打遊戲卡來說,對AI計算的支持已然是非常大的提升了,畢竟那些買了NV顯卡的小夥伴來說是額外付了tensor core 的錢,可能有些人會反駁,NV DLSS技術可以充分發揮tensor core的價值,但我相信大多數遊戲是用不到這個技術的。
華爲達芬奇架構的框圖。從大的結構上看,數據從L1預取到L0後,依次發射到Cube中進行2D matrix運算,結果寫到buffer C中,可以通過Vector單元進行卷積和全連接之後的後處理運算(operation fusion,和TPU以及NVDLA的結構類似),然後寫回到United Buffer中等待下一次調度。最下方是控制通路,指令經Icache取得後,譯碼分發到Scalar,Vector和MTE三個單元中進行對應的運算。整體數據通路和寒武紀的“DINANAO”是很類似的,通過顯式的內存管理調度數據進入主運算cube或後處理單元,各buffer內部空間劃分出ping-pong存儲塊,保證數據存取的連續性。下方的控制加上scalar和vector運算,相當於集成了一個通用CPU在其中,這樣的話支持任何算法都沒有問題了。scalar負責控制流和簡單運算,vector來解決MAC矩陣所不擅長的pooling,activation等操作,這幾部分相互配合補充,很好的實現對AI算法全場景的支持。可以明顯看出,最核心的運算還是在cube,主要面向流行的深度學習算法,在其他AI算法上使用vector和scalar運算,算力比cube低不少,因此這類算法的性能是低於SIMT結構的GPU的。
不同於傳統的支持通用計算的CPU和GPU,也不同於專用於某種特定算法的專用芯片ASIC,達芬奇架構本質上是爲了適應某個特定領域中的常見的應用和算法,通常稱之爲“特定域架構(Domain Specific Architecture,DSA)”芯片。
昇騰AI芯片的計算核心主要由AI Core構成,負責執行標量、向量和張量相關的計算密集型算子。AI Core採用了達芬奇架構,其基本結構如圖所示,從控制上可以看成是一個相對簡化的現代微處理器的基本架構。它包括了三種基礎計算資源:矩陣計算單元(Cube Unit)、向量計算單元(Vector Unit)和標量計算單元(Scalar Unit)。這三種計算單元分別對應了張量、向量和標量三種常見的計算模式,在實際的計算過程中各司其職,形成了三條獨立的執行流水線,在系統軟件的統一調度下互相配合達到優化的計算效率。此外在矩陣計算單元和向量計算單元內部還提供了不同精度、不同類型的計算模式。AI Core中的矩陣計算單元目前可以支持INT8、INT4和FP16的計算;向量計算單元目前可以支持FP16和FP32的計算。
爲了配合AI Core中數據的傳輸和搬運,圍繞着三種計算資源還分佈式的設置了一系列的片上緩衝區,比如用來放置整體圖像特徵數據、網絡參數以及中間結果的輸入緩衝區(Input Buffer,IB)和輸出緩衝區(Output Buffer,OB),以及提供一些臨時變量的高速寄存器單元,這些寄存器單元位於各個計算單元中。這些存儲資源的設計架構和組織方式不盡相同,但目的都是爲了更好的適應不同計算模式下格式、精度和數據排布的需求。這些存儲資源和相關聯的計算資源相連,或者和總線接口單元(Bus Interface Unit,BIU)相連從而可以獲得外部總線上的數據。
在AI Core中,輸入緩衝區之後設置了一個存儲轉換單元(Memory Transfer Unit,MTE)。這是達芬奇架構的特色之一,主要的目的是爲了以極高的效率實現數據格式的轉換。比如前面提到GPU要通過矩陣計算來實現卷積,首先要通過Im2Col的方法把輸入的網絡和特徵數據重新以一定的格式排列起來。這一步在GPU當中是通過軟件來實現的,效率比較低下。達芬奇架構採用了一個專用的存儲轉換單元來完成這一過程,將這一步完全固化在硬件電路中,可以在很短的時間之內完成整個轉置過程。由於類似轉置的計算在深度神經網絡中出現的極爲頻繁,這樣定製化電路模塊的設計可以提升AI Core的執行效率,從而能夠實現不間斷的卷積計算。
AI Core中的控制單元主要包括系統控制模塊、標量指令處理隊列、指令發射模塊、矩陣運算隊列、向量運算隊列、存儲轉換隊列和事件同步模塊。系統控制模塊負責指揮和協調AI Core的整體運行模式,配置參數和實現功耗控制等。標量指令處理隊列主要實現控制指令的譯碼。當指令被譯碼並通過指令發射模塊順次發射出去後,根據指令的不同類型,將會分別被髮送到矩陣運算隊列、向量運算隊列和存儲轉換隊列。三個隊列中的指令依據先進先出的方式分別輸出到矩陣計算單元、向量計算單元和存儲轉換單元進行相應的計算。不同的指令陣列和計算資源構成了獨立的流水線,可以並行執行以提高指令執行效率。如果指令執行過程中出現依賴關係或者有強制的時間先後順序要求,則可以通過事件同步模塊來調整和維護指令的執行順序。事件同步模塊完全由軟件控制,在軟件編寫的過程中可以通過插入同步符的方式來指定每一條流水線的執行時序從而達到調整指令執行順序的目的。
在AI Core中,存儲單元爲各個計算單元提供轉置過並符合要求的數據,計算單元返回運算的結果給存儲單元,控制單元爲計算單元和存儲單元提供指令控制,三者相互協調合作完成計算任務。
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com
