關於華為的主流技術術語,筆者在專欄《華為方舟編譯器原始碼分析》的第5章《鴻蒙能解決谷歌斷供嗎?昇騰、鯤鵬、麒麟、方舟之間是什麼關係》有詳細闡述,有興趣可以關注筆者,訂閱該專欄。
現在回到正題:一直說華為獲得了ARMv8的永久授權,那麼為什麼又搞出了「達文西架構」?
答案是:華為目前的主流晶片最底層都是基於ARM架構,達文西其實是在這個架構之上主攻AI加速。
華為之所以投資搞達文西架構,是因為在華為看來,主流計算模式已經從過去基於規則的計算轉移到了基於統計的計算,計算進入了AI時代,所以有必要在傳統的ARM架構上進行AI的創新。
AI運算主要有以下幾種場景:
標量(Scalar):其實就是一個數。
向量(Vector):由一組一維有序數構成,每一個數由一個索引(index)標識。
矩陣(Matrix):由一組二維有序數構成,每一個數由兩個索引(index)標識。
張量(Tensor):由一組n維有序數構成,每一個數由n個索引(index)標識。
達文西架構採用了3DCube技術,主攻矩陣運算的超高性能。在其最大配置(16x16x16)下,一個Cube可在一個時鐘周期內完成4096個FP16MACs運算。
這意味著什麼呢?以兩個NxN的矩陣AxB乘法為例:假如是N個1D的MAC,需要N的平方個時鐘周期;假如是1個N的平方的2DMAC陣列,需要N個時鐘周期;假如是1個N維3D的Cube,只需要1個時鐘周期。
什麼是MAC運算?乘積累加運算(MultiplyAccumulate,MAC)是在數位訊號處理器或一些微處理器中的特殊運算。實現此運算操作的硬體電路單元,被稱為「乘數累加器」。這種運算的操作,是將乘法的乘積結果和累加器A的值相加,再存入累加器:a<-a+bxc。若沒有使用MAC指令,上述的程序可能需要二個指令,但MAC指令可以使用一個指令完成。而許多運算(例如卷積運算、點積運算、矩陣運算、數字濾波器運算、乃至多項式的求值運算)都可以分解為數個MAC指令,因此可以提高上述運算的效率。
可能會有朋友挑戰了:那如果運算場景不是矩陣運算,而是普通的標量運算或者矢量運算,那麼3DCube的顆粒度不是不太匹配了嗎?此時如何保證性能?不用著急,達文西架構還配備了超高位矢量處理器單元和標量處理器單元,專門用於解決這個問題。
鑑於極高的計算密度,當電路全速運行時,電源的完整性變得至關重要,皮秒級電流控制技術有效地滿足了這一極其關鍵的要求。
達文西包含Max、Mini、Lite、Tiny和Nano五個系列。Max可在一個周期內完成8192次MAC運算,Tiny僅512次。