关于 CPU 的多核和超线程技术
1. 關于 CPU 的多核和超線程技術
CPU 的物理個數由主板上的插槽數量決定,每個 CPU 可以有多核心,每核心可能會有多線程。
多核 CPU 的每核(每核都是一個小芯片),在 OS 看來都是一個獨立的 CPU。
對于超線程 CPU 來說,每核 CPU 可以有多個線程(數量是兩個,比如1核雙線程,2核4線程,4核8線程),每個線程都是一個虛擬的邏輯 CPU (比如 Windows 下是以邏輯處理器的名稱稱呼的),而每個線程在 OS 看來也是獨立的 CPU。.
這是欺騙操作系統的行為,在物理上仍然只有 1 核,只不過在超線程 CPU 的角度上看,它認為它的超線程會加速程序的運行。
CPU 的多線程和程序的多線程是不同的,CPU 的多線程是硬件多線程,程序的多線程是軟件多線程,軟件多線程定義的是多個并發執行的任務分支,硬件的多線程是可以被當作一個 CPU 核心來調度執行任務的 CPU 資源。
要發揮超線程優勢,需要操作系統對超線程有專門的優化。
超線程的 CPU 在能力上,比非多線程的 CPU 核心要更強,但每個線程不足以與獨立的 CPU 核心能力相比較。
每核上的多線程 CPU 都共享該核的 CPU 資源。例如,假設每核 CPU 都只有一個”發動機”資源,那么線程 1 這個虛擬 CPU 使用了這個”發動機”后,線程 2 就沒法使用,只能等待。
所以,超線程技術的主要目的是為了增加流水線(參見前文對流水線的解釋)上更多個獨立的指令,這樣線程 1 和線程 2 在流水線上就盡量不會爭搶該核 CPU 資源。所以,超線程技術利用了 superscalar (超標量)架構的優點。
多線程意味著每核可以有多個線程的狀態。比如某核的線程 1 空閑,線程 2 運行。
超線程沒有提供完全意義上的并行處理,每核 CPU 在某一時刻仍然只能運行一個進程,因為線程 1 和線程 2 是共享某核 CPU 資源的??梢院唵蔚恼J為每核 CPU 在獨立執行進程的能力上,有一個資源是唯一的,線程 1 獲取了該資源,線程 2 就沒法獲取。(稍后會深入解釋超線程如何實現并行運行)
但是,線程 1 和線程 2 在很多方面上是可以并行執行的。比如可以并行取指、并行解碼、并行執行指令等。所以雖然單核在同一時間只能執行一個進程,但線程 1 和線程 2 可以互相幫助,加速進程的執行。
并且,如果線程 1 在某一時刻獲取了該核執行進程的能力,假設此刻該進程發出了 IO 請求,于是線程 1 掌握的執行進程的能力,就可以被線程 2 獲取,即切換到線程 2 。這是在執行線程間的切換,是非常輕量級的。(WIKI: if resources for one process are not available, then another process can continue if its resources are available)
多線程可能會出現一種現象:假如 2 核 4 線程 CPU,有兩個進程要被調度,那么只有兩個線程會處于運行狀態,如果這兩個線程是在同一核上,則另一核完全空轉,處于浪費狀態。更期望的結果是每核上都有一個 CPU 分別調度這兩個進程。
2. CPU多線程和程序多線程的關系和區別
程序的多線程,是軟件多線程;多個軟線程提供了多任務并發執行的可能性。
CPU 里的線程數是超線程,是硬件多線程。每個硬件多線程(超線程)可以看作是邏輯 cpu,但并非是完全意義上的 CPU。
CPU 核心中的超線程共享該核心中的部分功能單元,比如超線程 1 執行加法運算時,超線程 2 可以執行乘法運算,但超線程 2 不能同時執行加法運算,只是舉個例子來說明,并非合理,不過也由此可知,超線程這種邏輯 CPU 是不能當作一個完整核心的物理 CPU 來看待的。此外,由于每個超線程都是 CPU 資源,可以獨立運行任務,所以每個超線程都具有自己的執行狀態,比如要有自己的寄存器,有自己的 PC。
另一方面,超線程因為都在核心內,它們共享該核心的 L1 和 L2 高速緩存,所以每個核心內的 L1 和 L2 需要有專門的緩存控制器,需要有專門的緩存策略。
再回頭來說多進程以及軟件多線程的調度問題。
無論是多進程還是軟件多線程,它們所表示的含義都是可并發執行的多個任務分支,如果是在多處理器、多核、或超線程 CPU 下,這些并發任務就可以被并行執行,所以多進程、軟件多線程都可以被調度分配到超線程上執行,因為超線程是可以獨立執行任務的 CPU 資源。
3. 多顆CPU
對于多顆CPU的架構組織方式,有:
- AMP(Asymmetric multiprocessing): 非對稱多處理器結構
- SMP(Symmetric multiprocessing): 對稱多處理器結構
- UMA(Uniform memory access): 一致存儲訪問結構
- NUMA(Non-uniform memory access): 非一致存儲訪問結構
- MPP(massively parallel processing): 大規模(海量)并行處理結構
通常會拿來說明的是 SMP 和 NUMA,MPP 是海量并行處理結構。
4. SMP
對稱多處理結構,認為所有 CPU 的角色是平等的,所有 CPU 都共享內存、總線等資源。其實單顆多核的 CPU 內部的多核組織方式也是 SMP 結構,所有的核心都共享內存、總線資源。
對于 SMP 結構來說,由于每顆 CPU 都需要操作共享存儲:內存,所以需要保證內存數據的一致性(即緩存一致性)。比如 CPU1 里的 Core1 修改數據 A,假如采用 bus snooping 緩存一致性策略,需要在總線發送廣播通知所有 CPU 的所有 Core 使它們對數據 A 的緩存失效。如果 CPU 數量較少,問題并不大,但是隨著 CPU 數量增多,因緩存一致性和共享對象導致的總線流量會暴增。
所以 SMP 結構并不利于擴展更多 CPU ,比如 2-4 顆 CPU 可考慮 SMP 架構,但 4 顆 CPU 以上便不適合使用 SMP。
5. NUMA
NUMA(非一致存儲訪問結構)結構使得各個 CPU 有自己的內存資源,通過各 CPU 之間的互聯模塊,各 CPU 也可以訪問其它 CPU 的內存資源。
因為 CPU 都有自己本地的內存,可以各自管理自己的內存保證自己的緩存一致性。但是,因為各 CPU 各自的內存分離開了,使得 CPU1 通過互聯模塊訪問 CPU2 的內存速度很慢(因為通過中間數據傳輸介質且距離更遠),所以使用 NUMA 結構時,程序應盡量避免 CPU 之間的交互并行。
此外,CPU 數量越多,跨 CPU 訪問內存的距離可能會越遠,速度會越差,所以 NUMA 結構的性能并不能隨 CPU 數量的增加而線性增長。
下圖是 4 個 CPU 組成 NUMA 結構,總共 32 核,總共分配 32G 內存,每顆 CPU 分配 8G 內存作為自己的本地內存。
#原文地址
原文地址: https://www.junmajinlong.com/os/multi_cpu/
總結
以上是生活随笔為你收集整理的关于 CPU 的多核和超线程技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 申请163电子邮箱,163邮箱格式是什么
- 下一篇: 2013中国高校SAS数据分析大赛完美落