1. 程式人生 > >【C++多執行緒程式設計學習(1)】-CPU個數、CPU核心數、CPU執行緒數

【C++多執行緒程式設計學習(1)】-CPU個數、CPU核心數、CPU執行緒數

轉自:CPU個數、CPU核心數、CPU執行緒數(by kimsimple)

 

CPU個數即CPU晶片個數。

CPU核心數是指物理上,也就是硬體上存在著幾個核心。比如,雙核就是包括2個相對獨立的CPU核心單元組,四核就包含4個相對獨立的CPU核心單元組。

CPU執行緒數是一種邏輯的概念,簡單地說,就是模擬出的CPU核心數。比如,可以通過一個CPU核心數模擬出2執行緒的CPU,也就是說,這個單核心的CPU被模擬成了一個類似雙核心CPU的功能。我們從工作管理員的效能標籤頁中看到的是兩個CPU。 比如Intel賽揚G460是單核心,雙執行緒的CPU,Intel 酷睿i3 3220是雙核心 四執行緒,Intel 酷睿i7 4770K是四核心 八執行緒,Intel 酷睿i5 4570是四核心 四執行緒等等。 對於一個CPU,執行緒數總是大於或等於核心數的。一個核心最少對應一個執行緒,但通過超執行緒技術,一個核心可以對應兩個執行緒,也就是說它可以同時執行兩個執行緒。 

CPU的執行緒數概念僅僅只針對Intel的CPU才有用,因為它是通過Intel超執行緒技術來實現的,最早應用在Pentium4上。如果沒有超執行緒技術,一個CPU核心對應一個執行緒。所以,對於AMD的CPU來說,只有核心數的概念,沒有執行緒數的概念。 

CPU之所以要增加執行緒數,是源於多工處理的需要。執行緒數越多,越有利於同時執行多個程式,因為執行緒數等同於在某個瞬間CPU能同時並行處理的任務數。 因此,執行緒數是一種邏輯的概念,簡單地說,就是模擬出的 CPU 核心數。一個核心最少對應一個執行緒,但英特爾有個超執行緒技術可以把一個物理執行緒模擬出兩個執行緒來用,充分發揮 CPU 效能

,即一個核心可以有兩個到多個執行緒。

 


多核CPU

 多核心cpu主要分原生多核封裝多核
  原生多核指的是真正意義上的多核,最早由AMD提出,每個核心之間都是完全獨立的,都擁有自己的前端匯流排,不會造成衝突,即使在高負載狀況下,每個核心都能保證自己的效能不受太大的影響,通俗的說,原生多核的抗壓能力強,但是需要先進的工藝,每擴充套件一個核心都需要很多的研發時間。
  封裝多核是隻把多個核心直接封裝在一起,比如Intel早期的PD雙核系列,就是把兩個單核直接封裝在一起,但兩核心只能共同擁有一條前端匯流排,在兩個核心滿載時,兩個核心會爭搶前端匯流排,導致效能大幅度下降,所以早期的PD被扣上了“高頻低能”的帽子,要提高封裝多核的效能,在多工的高壓下儘量減少效能損失,只能不斷的擴大前端匯流排的總體大小,來彌補多核心爭搶資源帶來的效能損失,但這樣做只能在一定程度上彌補效能的不足,和原生的比起來還是差了很多,而且後者成本比較高,優點在於多核心的發展要比原生快的多。

HT技術超執行緒技術,是造就了PENTIUM 4的一個輝煌時代的武器,儘管它被評為失敗的技術,但是卻對P4起一定推廣作用,雙核心處理器是全新推出的處理器類別;HT技術是在單個處理器實現2個邏輯處理器,是充分利用單個處理器資源,而雙核心處理器則是整合2個物理核心,是實際意義上的雙核心處理器。

通常,把將兩個或更多獨立處理器封裝在一個單一積體電路(IC)中的方案稱為多核心處理器;而封裝在不同IC中的獨立處理器形成的計算機系統被稱為多處理器

多核心處理器!=多處理器

多核心處理器可以在不將每個核心分別獨立物理封裝的情況下進行多工處理(執行緒級併發處理Thread-Level Parallelism,TLP),這種形式的TLP通常被認為是晶片級多處理)。

 


單核多CPU與多核單CPU

一臺計算機的處理器部分的架構:

單核多CPU,那麼每一個CPU都需要有較為獨立的電路支援,有自己的Cache,而他們之間通過板上的匯流排進行通訊。(一致性問題)

假如在這樣的架構上,我們要跑一個多執行緒的程式(常見典型情況),不考慮超執行緒,那麼每一個執行緒就要跑在一個獨立的CPU上,執行緒間的所有協作都要走匯流排,而共享的資料更是有可能要在好幾個Cache裡同時存在。這樣的話,匯流排開銷相比較而言是很大的,怎麼辦?那麼多Cache,即使我們不心疼儲存能力的浪費,一致性怎麼保證?

多核單CPU,那麼我們只需要一套晶片組,一套儲存,多核之間通過晶片內部匯流排進行通訊,共享使用記憶體。在這樣的架構上,如果我們跑一個多執行緒的程式,那麼執行緒間通訊將比上一種情形更快。

多個CPU常見於分散式系統,用於普通消費級市場的不多,多用於cluster,雲端計算平臺什麼的。多CPU架構最大的瓶頸就是I/O,尤其是各個CPU之間的通訊,低成本的都用100M乙太網做,稍微好一點的用1000M乙太網,再好的就用光纖等等,但無論如何速度和通量都比不上主機板的主線。所以多CPU適用於大計算量,對速度(時間)不(太)敏感的任務,比如一些工程建模,或者像SATI找外星人這種極端的,跑上幾千年都不著急的。而且多CPU架構更簡單清晰,可以用消費級產品簡單做數量堆疊,成本上有優勢。而多核單CPU則適合對通訊I/O速度要求較快的應用,(相同核數量下)成本上也高一些,好像只有在超級計算機裡會用到以萬為單位的核心數,普通消費級產品也就是到16核封頂了,因為成本控制的原因。

 


1、在Windows中,在cmd命令中輸入“wmic”,然後在出現的新視窗中分別輸入

“cpu get Name”,

“cpu get NumberOfCores”,

“cpu get NumberOfLogicalProcessors”

即可檢視物理CPU數、CPU核心數、執行緒數。
如下圖所示:

Name:表示物理CPU名稱
NumberOfCores:表示CPU核心數 
NumberOfLogicalProcessors:表示CPU執行緒數

2、在cmd命令中輸入“systeminfo”,可以查詢物理CPU個數。