CPU與內存
CPU
CPU(Central Processing Unit)即中央處理器。CPU從內存(Memory)或緩存(Cache)中取出指令,放入指令寄存器,並對指令譯碼分解成一系列的微操作,然後發出各種控制命令,執行微操作系列,從而完成系統指令的執行。
CPU裏包含計算單元(綠色)、存儲單元(橙紅色)和控制單元(橙黃色)。一些常見詞:動態隨機存取存儲器(Dynamic Random Access Memory,DRAM)、寄存器(Registers)、線程(Threads)。
插句題外話,GPU省去Cache,簡化了控制單元,增加了計算單元,採用了超長流水線,這就可以高效處理類型類型高度統一又相互無依賴的大規模數據。
內存
CPU不能直接調用存儲在外存(硬盤)上的系統、程序和數據,必須先將硬盤的有關內容存儲在內存中,才能讀取運行。內存是CPU能直接尋址的存儲空間,包括隨機存儲器(RAM),只讀存儲器(ROM),以及高速緩存(CACHE),其中RAM是最重要的存儲器。
內存條是將RAM集成塊集中在一起的電路板,上面焊有內存顆粒(Chip)。一開始內存顆粒直接插在主板上,當時叫DIP(Dual In-line Package);後來將內存顆粒焊在電路板上,叫做SIMM(Single-Inline Memory Module);再後來,位寬從SIMM的32bit變成64bit,就叫做DIMM(Double-Inline Memory Module),常聽的電腦是64位就表示這個。
1條內存條實體(DIMM),有2個面(Rank)分別爲Rank0和Rank1,有些內存條每個面都會有黑色的內存顆粒(Chip)。
以一面爲例,1個Rank包含8個Chip,每個Chip裏會有8個bank,每個bank就是數據存儲的實體。這些bank就相當於一個二維矩陣,只要聲明瞭column和row就可以從每個bank中取出8bit的數據。
參考:內存條物理結構分析
從概念的層次結構上面分爲:Channel > DIMM > Rank > Chip > Bank > Row/Column
什麼是通道
雙通道是一種主板芯片組(Athlon 64集成於CPU中)所採用新技術,與內存本身無關。
CPU僅僅通過一組針腳與外界交互,它並不關心外界到底有什麼。前端總線把CPU和北橋連接起來,CPU需要讀寫內存時,就會通過這條總線。
北橋芯片裏會設計兩個內存控制器,這兩個控制器可以相互獨立工作,每個控制器控制一個內存通道。在這兩個內存上,CPU可以分別尋址、讀取數據,可以實現內存帶寬翻倍,速度理論上可以翻倍(由主板、CPU、內存條支持的頻率共同決定)。
通道多了就可以同時訪問更多的內存,在物理內存分配的時候把內存打散分別在多根DIMM上,就可以利用多通道(Channel Interleaving)。
常見問題
以上是CPU和Memory的物理分析,常常弄混的是內存控制器、緩存和內存條。
- 內存(內存儲器)真名叫主存儲器,我們常見的U盤、硬盤、光盤,以前的軟盤叫做輔助存儲器(外存儲器)。內存包括隨機存儲器(RAM),只讀存儲器(ROM),以及高速緩存(CACHE)。
- 我們常說的內存指內存條(DIMM)->RAM。
- 內存條(下稱內存)其實是RAM集成塊集中在一起的電路板,通過插槽實現外部擴展,目的是減少RAM集成塊的空間,另外CACHE集成在CPU上,ROM通常固化在主板的某些基礎功能芯片上,爲雙列直插式(DIP)的集成塊。
- 緩存即高速緩衝存儲器(Cache),是位於CPU和內存之間的存儲器。當CPU向內存中寫入或讀出數據時,這個數據也被存儲進Cache中。當CPU再次需要這些數據時,CPU就從Cache讀取數據,而不是訪問較慢的內存。一般先讀取Cache裏的數據,沒有再去內存中。
- 內存控制器集成在CPU上,控制通道讀寫內存。
物理CPU和邏輯CPU
以下斜體字爲本人區分方法,未查證。
- 物理CPU:獨立的中央處理單元,主板槽位上實際有的CPU數量,physical id。
- 核數(物理核數):核的數量,每個CPU都可能有多個核(core),每一個核中都有獨立的一套ALU、FPU、Cache等組件,也被稱作物理核,cpu cores。
- 線程(分爲物理線程和邏輯線程):可以讓一個物理核模擬出多個邏輯核,Intel有超線程技術,AMD沒有線程數概念,processor。
- 邏輯CPU數(邏輯核數):同上,模擬核心數,一般一個核心對應一個線程,使用超線程技術可以達到CPU翻倍。
- 核數(物理核數):核的數量,每個CPU都可能有多個核(core),每一個核中都有獨立的一套ALU、FPU、Cache等組件,也被稱作物理核,cpu cores。
總核數 = 物理CPU個數 * 每顆物理CPU的核數
總邏輯CPU數 = 物理CPU個數 * 每顆物理CPU的核數 X 超線程數
參考:線程數與多核CPU的關係
常見問題
假設CPU數目爲,核數爲,線程數爲。
針對多線程 | CPU | 核數 | 線程 | |
---|---|---|---|---|
物理 | × | 實際有的CPU |
單個CPU的核數 |
一個物理覈對應一個線程 1 |
邏輯 | √ | = 邏輯核 |
單個物理核模擬的邏輯核數 |
一個邏輯核分別對應一個線程 |
總物理 | × | = CPU |
= CPU * 物理核數 |
= 總物理核數 |
總邏輯 | √ | = 總邏輯核數 |
= CPU * 邏輯核數 |
= 總邏輯核數 = 總物理核數 * 線程數 |
從概念的層次結構上面分爲:CPU > 核數 > 線程
邏輯CPU數在超線程技術的情況下才有意義,換句話講,邏輯CPU數就相當總線程數 = 物理核數 * 超線程數。
理論上來說,對於計算密集型的任務,線程數應該和CPU所能提供的並行數一致,物理核數 < 並行數 < 總線程數。
對於計算密集型的任務,一般建議將線程數設置爲物理核數。
LINUX查看
查看物理CPU個數
cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l
grep ‘physical id’ /proc/cpuinfo | sort -u | wc -l
查看每個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep “cpu cores”| uniq
grep ‘core id’ /proc/cpuinfo | sort -u | wc -l
查看邏輯CPU的個數
cat /proc/cpuinfo| grep “processor”| wc -l
grep ‘processor’ /proc/cpuinfo | sort -u | wc -l
查看CPU信息(型號)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看內 存信息
cat /proc/meminfo
WINDOW查看
將C:\Windows\System32\wbem加入系統環境變量
wmic cpu get *
cpu get Name\ NumberOfCores 核數\ NumberOfLogicalProcessors 物理線程\ ThreadCount 線程數