脈動陣列

平行計算機架構中,脈動陣列是緊密耦合的數據處理單元(DPU)的同質網路,稱為單元或是節點。每個節點或是 DPU 會用上游接收來的數據,獨立計算結果,儲存在自身,然後再將結果傳遞到下游。脈動陣列最早應用於巨人计算机,這是一台早期用在第二次世界大戰期間破解德國洛伦兹密碼的計算機。 [1] 由於 Colossus 是機密,孔祥重和Charles Leiserson 獨立發明或重新發明了脈動陣列:用在帶狀矩陣上的密集線性代數計算(矩陣乘積、求解線性方程式LU 分解等)。早期的應用包括計算「整數的最大公約數」和「多項式求解」。 根據費林分類法,脈動陣列有时候被歸類為为多指令單數據 (MISD) 架構。不過這是有爭議的,正如本文後面所討論的,我們可以提出強而有力的論述,將它與其他四種 費林分類 區分開來: SISDSIMDMISDMIMD

平行輸入的資料流經直接連結的處理器節點,這些節點會將輸入資料組合、處理、合併或排序成為結果。由於資料的類傳播很像人體循環系统的脈搏,因此從醫學術語當中借用了「脈動」這個詞。這個名稱來自心臟收縮,猶如心臟般地泵送血液。

應用

脈動陣列通常會針對特定的運算來實作硬體線路,例如:乘法與加法,來執行大量的 平行計算卷積神經網路相关_(概率论)矩陣乘法 或其它的資料排序。它也常常被用在 動態規劃 演算法,可用於 DNA 與蛋白質的 序列分析.

架構

一個脈動陣列通常包含一個單體系統上的大型基本運算節點圖譜 (可能由硬體或是軟體實作)。這些節點通常是固定不變且一模一樣,不過中間的連接是可程式化的。相較之下,取決於陣列大小和設計參數,更通用的「前端」處理器採用複雜且單獨可編程的節點,這些節點可能是整合在一起的,也可能是分開的。另一個區別是脈動陣列依賴同步資料傳輸,而前端則傾向於非同步工作。

相對於一般的馮諾伊曼架構(指令存放在共同記憶體,尋址模式英语address space與執行順序由 CPU 的程式計數器控制) ,脈動陣列的各別節點是由資料的到來所觸發,而且使用一致的方式處理資料。每個節點中的實際資料處理,可以是硬體寫死的,也可以由微指令控制。

相對於馮諾伊曼架構是由程式計數器來驅動指令流 (instruction-stream) ,脈動陣列則是由資料計數器來驅動資料流 (data-streams) 。由於脈動陣列通常會傳送與接收多個資料流,而我們又需要多個資料計數器來產生資料流,所以脈動陣列是一種資料平行運算模式。

參考