處理器的幾個概念(SMT,SMP,CMP,NUMA,ccNUMA等等)


  經常和處理器的這些概念打交道,每個的意思都蠻熟,但是這個縮寫還是時常出現斷片情況,總結一下。

  首先是更基礎的幾個概念:

  socket:就是主板上插cpu的槽的數目,也即管理員說的”路“,一般做server chip說的dual-socket, 就是雙路直連的芯片,主要是因為單芯片性能不夠,而限於工藝尺寸又沒辦法放更多的資源在一顆芯片,所以需要多路。

  core:  就是我們平時說的”核“,即雙核,4核等

  thread: 就是每個core的硬件線程數

  然后是比較容易混淆的幾個概念:

  SMT,同時多線程,Simultaneous multithreading,簡稱SMT。

  SMT是一種在一個CPU 的時鍾周期內能夠執行來自多個線程的指令的硬件多線程技術。本質上,同步多線程是一種將線程級並行處理(多CPU)轉化為指令級並行處理(同一CPU)的方法。 同步多線程是單個物理處理器從多個硬件線程上下文同時分派指令的能力。同步多線程用於在商用環境中及為周期/指令(CPI)計數較高的工作負載創造性能優勢。 處理器采用超標量結構,最適於以並行方式讀取及運行指令。

  CMP, 片上多處理器(Chip multiprocessors,簡稱CMP)

  其實就是多核結構。

  SMP, 對稱多處理器(Symmetric Multi-Processors,簡稱SMP)

  是指在一個計算機上匯集了一組處理器(多CPU),各CPU之間共享內存子系統以及總線結構。在這種技術的支持下,一個服務器系統可以同時運行多個處理器,並共享內存和其他的主機資源。像雙至強,也就是我們所說的二路,這是在對稱處理器系統中最常見的一種(至強MP可以支持到四路,AMD Opteron可以支持1-8路)。也有少數是16路的。但是一般來講,SMP結構的機器可擴展性較差,很難做到100個以上多處理器,常規的一般是8個到16個,不過這對於多數的用戶來說已經夠用了。在高性能服務器和工作站級主板架構中最為常見,像UNIX服務器可支持最多256個CPU的系統,其實qemu從代碼設計上也是最大支持256個virtual cpu。
  

  NUMA: Non-uniformed Memory Access

  在NUMA出現之前,CPU朝着高頻率的方向發展遇到了天花板,轉而向着多核心的方向發展。

  在一開始,內存控制器還在北橋中,所有CPU對內存的訪問都要通過北橋來完成。此時所有CPU訪問內存都是“一致的”,如下圖所示:

 
  
UMA

  這樣的架構稱為UMA(Uniform Memory Access),直譯為“統一內存訪問”,這樣的架構對軟件層面來說非常容易,總線模型保證所有的內存訪問是一致的,即每個處理器核心共享相同的內存地址空間。但隨着CPU核心數的增加,這樣的架構難免遇到問題,比如對總線的帶寬帶來挑戰、訪問同一塊內存的沖突問題。為了解決這些問題,有人搞出了NUMA。

  NUMA 全稱 Non-Uniform Memory Access,譯為“非一致性內存訪問”。這種構架下,不同的內存器件和CPU核心從屬不同的 Node,每個 Node 都有自己的集成內存控制器(IMC,Integrated Memory Controller)。

  在 Node 內部,架構類似SMP,使用 IMC Bus 進行不同核心間的通信;不同的 Node 間通過QPI(Quick Path Interconnect)進行通信,如下圖所示:

 
NUMA

一般來說,一個內存插槽對應一個 Node。需要注意的一個特點是,QPI的延遲要高於IMC Bus,也就是說CPU訪問內存有了遠近(remote/local)之別,而且實驗分析來看,這個差別非常明顯

  
  ccNUMA: Cache Coherent NUMA
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM