隨著機器學習(Machine Learning)領域越來越多地使用現場可編程閘陣列(FPGA)來加速推論(inference),傳統FPGA只支援定點運算的瓶頸日益突顯。為了解決這一困境,Achronix設計機器學習處理(Machine Learning Processing;MLP)單元,不僅支援浮點的乘加運算,還可以支援對多種定浮點數格式進行拆分。

MLP單元是由一組至多32個乘法器的陣列,以及一個加法樹、累加器,以及四捨五入(rounding)/飽和(saturation)/常規化(normalize)功能區塊。同時還包括2個快取,分別是一個BRAM72k和LRAM2k,用於獨立或結合乘法器使用。MLP支援定點模式和浮點模式,對應以下圖1和圖2。

20200306_Achronix_TA61P1

圖1:定點模式下的MLP方塊圖

20200306_Achronix_TA61P2

圖2:浮點模式下的MLP方塊圖

考慮到運算功耗以及準確度的折衷,目前機器學習引擎中最常使用的運算格式是FP16和INT8,而Google Tensor Flow支援的BF16格式則是透過降低精度,以獲取更大的數值空間。下面的表1是MLP支援的最大位寬浮點格式,表2說明各自的取值範圍。

20200306_Achronix_TA61T1

表1:MLP支援的最大位寬浮點格式

20200306_Achronix_TA61T2

表2:不同運算格式的取值範圍

而且這似乎也成為未來的一種趨勢。目前已經有不少研究顯示,更小位寬的浮點或整數可以在確保準確度的同時,還可以減少大量的計算量。因此,為了順應這一潮流,MLP還支援將大位元寬乘法單元拆分成多個小位元寬乘法,包括整數和浮點數。如以下的表3。

值得注意的是,這裡的BFloat16即腦浮點(Brain Float)格式,而Block Float為塊浮點演算法,即當應用Block Float16及更低位寬塊浮點格式時,指數位寬不變,小數位縮減到了16bit以內,因此浮點加法位寬變小,並且不需要使用浮點乘法單元,而是整數乘法和加法樹即可,MLP的架構可以使這些格式下的運算能力倍增。

表3是Speedster7t系列1500元件所支援的典型格式運算能力比較,從表中可以看到,單晶片FPGA的浮點運算力最高可達到123TOPS。

20200306_Achronix_TA61T3

表3:Achronix Speedster7t系列1500元件支援的典型格式運算能力比較

下圖3是MLP中FP24/FP16乘加單元的簡化結構圖,即一個MLP支援FP24/FP16的AxB+CxD,或者AxB、CxD。

20200306_Achronix_TA61P3

圖3:MLP中FP24/FP16乘加單元的簡化結構圖。

而以下的圖4則是塊浮點乘加單元結構。

20200306_Achronix_TA61P4

圖4:塊浮點乘加單元結構。

在此考慮浮點數序列塊:

20200306_Achronix_TA61E1

浮點數序列塊:

20200306_Achronix_TA61E2

各序列塊內均擁有相同的指數ea和eb。則:

20200306_Achronix_TA61E3

因此,不難看出,乘法單元的個數取決於尾數(即整數)位寬。

20200306_Achronix_TA61T4

表4:MLP中乘法單元的個數與整數位寬之關係。