多核心、一致性與執行緒層級平行

對稱多處理(symmetric multiprocessing, SMP)

/ S-M-P /

假設一家公司有好幾位職級相同的經理,任何一位都能處理任何任務——沒有誰是別人的上司,每位拿到檔案櫃的速度都一樣快。工作交給有空的那位。對稱多處理(SMP)就是建立在這份公平上的共享記憶體機器:所有核心都是平等的同儕,每個核心都能跑作業系統,每個核心存取主記憶體的代價都相同。沒有哪個核心是特別的。

兩根支柱是對稱與均勻存取。對稱意味著核心可互換:任何核心都能跑任何執行緒、處理任何中斷、執行核心碼,所以作業系統只維護一個排程器,把執行緒在平等的核心間負載平衡。均勻記憶體存取(uniform memory access, UMA)意味著每個核心以相同延遲看到相同記憶體——通常是因為它們共享一個記憶體控制器和一條匯流排或互連。這份均勻讓程式設計師的日子很簡單:執行緒在哪裡跑,並不改變它存取資料的快慢。

誠實的陷阱在於擴展。因為每個核心都要競爭那一條通往單一記憶體的共享路徑,當你加上核心時,共享的匯流排或記憶體控制器就成了瓶頸——到某個點,多一個核心只是更用力地爭同一根吸管。這就是為什麼大型機器放棄嚴格的 UMA 改用 NUMA,把記憶體切成接到不同核心的記憶庫,近處存取快、遠處存取慢。SMP 是乾淨的教科書模型,對少數幾個核心是準確的;超過之後,真實硬體就偏向非均勻的設計。

一顆四核心桌機晶片,配一個共享的 L3 快取和一個記憶體控制器,就是 SMP:作業系統把四個核心當成平等的,能在其中任一個上跑執行緒,全都以相同延遲抵達記憶體。加到 64 個核心、共用單一記憶體路徑,競爭就會逼著改用 NUMA 佈局。

SMP 的平等核心與等延遲記憶體讓排程簡單,但單一的共享記憶體路徑限制了它能擴展多遠。

SMP(核心彼此平等的系統組織)不等於多核心(一顆晶片上有許多核心):多核心晶片通常是 SMP,但 SMP 也能跨好幾顆獨立晶片,而大型多核心系統往往是 NUMA 而非嚴格均勻。

又称
SMPuniform memory access multiprocessorUMA對稱式多處理