平行計算與計算機叢集/微處理器
多年來,市場一直習慣於使用CPU(中央處理單元)這個術語。這是因為大多數機器在任何時間都只擁有一個能夠在機器內部工作的MPU(微處理器單元) - 一個位於中心(Micro)的MPU,因此被稱為中央處理器單元。平行計算機關注的是利用與這些MPU不同的處理器,而計算機叢集則關注的是將許多此類MPU結合起來,無論是哪種方式,整體都會遠遠超出簡單的CPU的範圍。
為了理解和欣賞區分不同型別處理器的因素,最好先對處理器最基本的形式有一個很好的瞭解。
一個典型的獨立計算單元(數字時鐘、科學計算器、洗衣機等等)的核心是一個單一的中央處理單元(CPU) - 一個控制幾乎所有操作的MPU。這個CPU將控制和執行計算單元執行的大多數任務。它一個接一個地依次執行其眾多工:它將所有操作序列化。以洗衣機為例:它可能從確保門關閉開始迴圈;鎖定門;裝滿洗衣機;加熱水;放入洗滌劑;轉動滾筒;放入織物柔軟劑;轉動滾筒;排放水;再裝滿水;轉動滾筒;排放水;解鎖門。假設它沒有按照那個順序進行操作,而是從裝滿洗衣機開始:衣服還會洗乾淨嗎?還是水會立即從裡面流出來?事物發生在順序中是有原因的:為了得到正確的結果。
幾年來,單個MPU本身一直在執行多個同時活動,以便更好地實現吞吐量。早期,處理器製造商意識到,為了使MPU更快,他們需要的不僅僅是提高MPU的速度。
當分解成各個組成部分時,MPU中的單個指令需要完成很多工作。即使在最簡化的形式中,MPU也必須1)從程式程式碼中檢索指令;2)執行指令;以及對於許多指令,3)將指令的結果放置回某個位置。每個操作都需要MPU一個週期,因此對於能夠每秒執行2個週期的MPU(更常見的是轉換為2Hz),執行最簡單的指令需要一秒鐘,執行需要將結果放到其他位置的簡單指令需要1.5秒。
工程師很快發現,如果MPU設計將這些組成部分分開,並且相對獨立地執行,那麼就可以在不改變MPU速度的情況下,增加每秒執行的指令數量。例如,將指令提取階段與MPU的其餘部分分離,並使其同時執行,您就可以將MPU能夠執行的指令數量增加一倍:當MPU的指令處理部分處理第一個指令時,在同一週期內,MPU的指令提取部分正在提取第二個指令。指令被提取、處理並最終完成的過程被稱為流水線。
| 週期計數 | 單流水線MPU | 雙流水線MPU |
| 1 | 提取指令1 | 提取指令1 |
| 2 | 執行指令1 | 執行指令1 提取指令2 |
| 3 | 提取指令2 | 執行指令2 提取指令3 |
| 4 | 執行指令2 | 執行指令3 提取指令4 |
對稱多處理器(SMP)機器由一系列對稱的MPU組成(因此得名)。各個MPU本身是彼此的映象(相同的速度、設計和外設功能,如片上快取和記憶體管理),並且以一種方式安置,使每個MPU都能以對等的方式訪問和使用整臺機器的外設(RAM、硬碟、影片等等)。由於計算機的二進位制性質,為了實現簡單的數字操作和算術,MPU的數量通常是二的倍數(2、4、8、16、32、64),以實現二進位制對稱。
SMP設計在硬體和軟體的設計中引入了許多問題:啟動機器和訪問外設資源,特別是RAM(在下面RAM和多個MPU中討論)。
在單CPU機器中,BIOS將使用其ROM程式碼的一部分啟動第一個也是唯一的CPU。CPU將讀取和處理該程式碼,並開始對硬體外設以及CPU應如何繼續啟動(例如,使用哪個啟動裝置)進行序列化。在SMP機器中,過程基本相同,只是可以選擇多個CPU。BIOS不進行任何挑選,而通常只是向位於插槽0的CPU發出訊號。與單CPU系統相比,另一個變化是,BIOS中的程式碼允許檢查是否存在其他CPU以及啟動這些其他CPU的程式碼。為了啟動其他CPU,位於插槽0的CPU必須被設計成理解如何執行另一個CPU的啟動。此外,由於這是一個對稱多處理器,每個其他插槽中的CPU將是第一個CPU的映象,因此也具有該能力。
非對稱多處理器(不太可能被稱為AMP)機器不太可能呈現任何形式的對稱性,並且本質上,最難給出準確的描述。通常會存在一箇中央處理單元(甚至多個單元),但其作用是確保將正確的程式程式碼提供給系統中的其他處理器。有時,非對稱多處理器機器不會被描述為這種型別,實際上許多街機遊戲和現代家用遊戲機都屬於此類。
這些專用、專門的處理器專門設計用於並行執行特定任務。並行向量處理器通常被引用為多達64個,有時甚至更多,每個處理器通常具有x個獨立的核心,每個核心包含x個流水線。指令集通常很簡單,有時甚至比常見的RISC處理器還要簡單,但它們的目的是非常強大的:載入資料以進行工作的指令將載入一個數據集以進行工作,而不是單個位元組、字或雙字。另一個單一指令將並行地對資料集中的每個資料部分執行相同的操作,從而實現類似的單資料部分實現RISC處理器的x倍效能。因此,使用跨越兩個處理器週期的兩個指令,處理器可以載入並對x個不同的資料型別執行一個指令。資料的組織方式和程式編譯的方式可能與處理器本身一樣獨特。
嚴格來說,大規模並行處理器(MPP)本身不是一種處理器型別,而是一種架構型別,其中多個並行向量處理器被封裝到單獨的子板上,每個子板都有自己的專用RAM和專用板級匯流排。多個子板然後被插槽到系統上的專用處理器超級總線上。整個系統擁有額外的資源(儲存容量,通常還有系統RAM),並連線到處理器超級匯流排以形成完整的系統。最大的超級計算機(例如地球模擬器和深藍)很少不屬於此類別。