Flynn 分類(Flynn's taxonomy)
/ flinz tax-ON-uh-mee /
當人們最初試圖整理平行電腦這座動物園時,他們需要一張簡單的地圖。Flynn 分類(Flynn's taxonomy)就是那張地圖:它沿著兩個問題把機器分類。一次有幾條指令流在跑——一條還是多條?而它們在處理幾條資料流——一條還是多條?兩個是非題給出四個格子,而幾乎每一種計算機結構都落進其中之一。
四個類別。SISD(單指令單資料)是樸素的老式單處理器:一條指令流啃一條資料流,就像一個廚師照一份食譜做。SIMD(單指令多資料)讓一條指令一次作用在許多資料元素上——一道命令「把這些全部加 1」——這正是向量單元和 GPU 處理陣列的方式。MISD(多指令單資料)是異類,好幾條指令流作用在同一筆資料上;實務上罕見,偶爾被提及用於冗餘的容錯系統。MIMD(多指令多資料)是通用的平行電腦:許多彼此獨立的指令流,各自處理自己的資料——這正是多核心處理器的樣子。
記住兩個誠實的提醒。第一,這個分類是粗略的地圖,不是定律:真實晶片會混搭類別——一顆多核心(MIMD),每個核心又有一個 SIMD 向量單元,就同時是兩者。第二,MIMD 是多核心與執行緒層級平行的歸宿,也就是這個領域的主題,而 SIMD 是向量與 GPU 那個獨立的資料平行世界,由別處涵蓋。Flynn 四個格子的價值在於定位:當有人說「這是一台 SIMD 機器」或「一個 MIMD 叢集」,你立刻就知道它運行的形狀。
為四台機器分類:1980 年代的單核心 PC 是 SISD;GPU 把兩個陣列逐元素相加是 SIMD;一個容錯的飛行控制器把同一輸入跑過三個不同程式來表決答案,鬆散地算是 MISD;一台跑著八個不同程式的現代八核心伺服器是 MIMD。
兩個問題——幾條指令流、幾條資料流——把平行運算的動物園分成四個標籤。
Flynn 分類是有用的草圖,不是精確的分類:現代處理器是混血(帶 SIMD 單元的 MIMD 核心),而這些類別對記憶體模型、一致性、或一台機器實際多快都隻字未提。