如果你經常和DMIPS,TOPS,GFLOPS等評價晶片效能的單位打交道,又不知道這些單位意味著什麼,那看這篇文章就對了
TOPS
TOPS是Tera Operation Per Second的縮寫,表示每秒鐘可以進行的運算元量,用於衡量自動駕駛的算力,有時還會拿TOPS/W來說明功耗,即單位功耗下的運算能力。
眾所周知,CV演算法會消耗很大一部分自動駕駛晶片的算力,在車上堆攝像頭的同時也需要堆TOPS,那麼視覺處理能力為什麼用TOPS評估呢?通常計算機視覺演算法是基於卷積神經網路的,而卷積神經網路的本質是累積累加演算法(Multiply Accumulate)。
上圖是一個非常生動的卷積過程
MAC
乘積累加運算MAC(Multiply Accumulate)是在數字訊號處理器或一些微處理器中的特殊運算。實現此運算操作的硬體電路單元,被稱為“乘數累加器”。這種運算的操作,是將乘法的乘積結果和累加器 A 的值相加,再存入累加器:
若沒有使用 MAC 指令,上述的程式可能需要二個指令,但 MAC 指令可以使用一個指令完成。而許多運算(例如卷積運算、點積運算、矩陣運算、數字濾波器運算、乃至多項式的求值運算)都可以分解為數個 MAC 指令,因此可以提高上述運算的效率。
MAC矩陣是AI晶片的核心,但這是很成熟的架構,在機器學習大背景下煥發了新春。
上圖為特斯拉自動駕駛晶片架構,佔很大一部分面積的是處理神經網路的NPU。
總體設計相對簡單。每個週期,從SRAM讀取256byte位元組的啟用資料和另外128byte的權重資料到MAC陣列中。每個NPU擁有96x96 MAC,另外在精度方面,乘法為8x8bit,加法為32bit,兩種資料型別的選擇很大程度上取決於他們降功耗的努力(例如32bitFP加法器的功耗大約是32bit整數加法器的9倍)。在2GHz的工作頻率下,每個NPU的算力為36.86TOPS,FSD晶片峰值算力為73.7TOPS。在點積運算之後,資料轉移到啟用硬體,最後寫入快取,以彙總結果。FSD支援許多啟用功能,包括ReLU、SiLU和TanH。每個週期,將128byte的資料寫回SRAM。所有操作同時且連續地進行,重複直到完成整個計算。
在每個週期中,將在整個MAC陣列中廣播輸入資料的底行和權重的最右列。每個單元獨立執行適當的乘法累加運算。在下一個迴圈中,將輸入資料向下推一行,而將權重網格向右推一行。在整個陣列中廣播輸入資料的最底行和權重的最右列,重複此過程。單元繼續獨立執行其操作。全點積卷積結束時,MAC陣列一次向下移動一行96個元素,這也是SIMD單元的吞吐量。
TOPS計算
回到正題,TOPS是MAC在1秒內操作的數,計算公式為:
TOPS = MAC矩陣行 * MAC矩陣列 * 2 * 主頻
每個NPU的為96 * 96 * 2 * 2G = 36.864TOPS
DMIPS
DMIPS是Dhrystone Million Instructions Per Second的縮寫,每秒處理的百萬級的機器語言指令數。
CPU執行指令
程式編譯和執行過程中,程式碼會經過編譯器轉化成機器可以理解的指令。CPU每個指令週期分為取指令、指令譯碼、指令執行三個過程,只有在指令執行時才真正有效,在取指令和指令譯碼時,CPU時間是白白浪費的,而同樣的運算在不同架構不同指令集需要的指令數也不一樣。
除了 Instruction Cycle 這個指令週期,在 CPU 裡面我們還會提到另外兩個常見的 Cycle。一個叫 Machine Cycle,機器週期或者 CPU 週期。CPU 內部的操作速度很快,但是訪問記憶體的速度卻要慢很多。每一條指令都需要從記憶體裡面載入而來,所以我們一般把從記憶體裡面讀取一條指令的最短時間,稱為 CPU 週期。
還有一個是Clock Cycle,也就是時鐘週期以及我們機器的主頻。一個 CPU 週期,通常會由幾個時鐘週期累積起來。一個 CPU 週期的時間,就是這幾個 Clock Cycle 的總和。
對於一個指令週期來說,我們取出一條指令,然後執行它,至少需要兩個 CPU 週期。取出指令至少需要一個 CPU 週期,執行至少也需要一個 CPU 週期,複雜的指令則需要更多的 CPU 週期。
從上圖可以看出,時鐘週期是固定的,但是每個指令執行用時不同,所以需要提高CPU執行效率。
當前提升CPU效能的方法有:流水線技術、流水線冒險/預測、超標量Superscalar、超長指令字設計VLIW、單指令多資料流SIMD等技術(將來慢慢介紹)。尤其是SIMD 技術,是一種“指令級並行”的加速方案,或者說是一種“資料並行”的加速方案。在處理向量計算的情況下,同一個向量的不同維度之間的計算是相互獨立的。而CPU 裡的暫存器,又能放得下多條資料。於是,我們可以一次性取出多條資料,交給 CPU 平行計算。
DMIPS
如前文所言,不同的CPU指令集不同、硬體加速器不同、CPU架構不同,導致不能簡單的用核心數和CPU主頻來評估效能,所以出了一個跑分演算法叫Dhrystone:程式用來測試CPU整數計算效能,其輸出結果為每秒鐘執行Dhrystone的次數,即每秒鐘迭代主迴圈的次數。
Dhrystone所代表的處理器分數比MIPS(million instructions per second 每秒鐘執行的指令數)更有意義,因為在不同的指令系統中,比如RISC(Reduced Instruction Set Computer精簡指令集計算機)系統和CISC(Complex Instruction Set Computer複雜指令集計算機)系統,Dhrystone的得分更能表現其真正效能。
由於在一個高階任務中,RISC可能需要更多的指令,但是其執行的時間可能會比在CISC中的一條指令還要快。由於Dhrystone僅將每秒鐘程式執行次數作為指標,所以可以讓不同的機器用其自身的方式去完成任務。
另一項基於Dhrystone的分數為DMIPS(DhrystoneMIPS),其含義為每秒鐘執行Dhrystone的次數除以1757(這一數值來自於VAX 11/780機器,此機器在名義上為1MIPS機器,它每秒執行Dhrystone次數為1757次)。