【筆記11】個人掃盲:內存與CPU中的核、線程、物理CPU、邏輯CPU

CPU與內存

CPU

CPU(Central Processing Unit)即中央處理器。CPU從內存(Memory)或緩存(Cache)中取出指令,放入指令寄存器,並對指令譯碼分解成一系列的微操作,然後發出各種控制命令,執行微操作系列,從而完成系統指令的執行。
在這裏插入圖片描述
CPU裏包含計算單元(綠色)、存儲單元(橙紅色)和控制單元(橙黃色)。一些常見詞:動態隨機存取存儲器(Dynamic Random Access Memory,DRAM)、寄存器(Registers)、線程(Threads)。

CPU & GPU
插句題外話,GPU省去Cache,簡化了控制單元,增加了計算單元,採用了超長流水線,這就可以高效處理類型類型高度統一又相互無依賴的大規模數據。
在這裏插入圖片描述

圖來自:CPU 和 GPU 的區別是什麼? - 知乎用戶的回答 - 知乎

內存

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中)所採用新技術,與內存本身無關。在這裏插入圖片描述

圖來自:Motherboard Chipsets and the Memory Map

CPU僅僅通過一組針腳與外界交互,它並不關心外界到底有什麼。前端總線把CPU和北橋連接起來,CPU需要讀寫內存時,就會通過這條總線。

北橋芯片裏會設計兩個內存控制器,這兩個控制器可以相互獨立工作,每個控制器控制一個內存通道。在這兩個內存上,CPU可以分別尋址、讀取數據,可以實現內存帶寬翻倍,速度理論上可以翻倍(由主板、CPU、內存條支持的頻率共同決定)。
在這裏插入圖片描述
通道多了就可以同時訪問更多的內存,在物理內存分配的時候把內存打散分別在多根DIMM上,就可以利用多通道(Channel Interleaving)。

圖來自:雙通道、四通道內存對遊戲重要嗎? - 老狼的文章 - 知乎

常見問題

在這裏插入圖片描述

圖來自:請問CPU,內核,寄存器,緩存,RAM,ROM的作用和他們之間的聯繫? - 知乎用戶的回答 - 知乎

以上是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個數 * 每顆物理CPU的核數
總邏輯CPU數 = 物理CPU個數 * 每顆物理CPU的核數 X 超線程數

參考:線程數與多核CPU的關係

常見問題

假設CPU數目爲NcpuN_{cpu},核數爲NcoreN_{core},線程數爲tt

針對多線程 CPU 核數 線程
物理 × 實際有的CPU
NcpuN_{cpu}
單個CPU的核數
NcoreN_{core}
一個物理覈對應一個線程
1
邏輯 = 邏輯核
tt
單個物理核模擬的邏輯核數
tNcoret * N_{core}
一個邏輯核分別對應一個線程
tt
總物理 × = CPU
NcpuN_{cpu}
= CPU * 物理核數
NcpuNcoreN_{cpu} * N_{core}
= 總物理核數
NcpuNcoreN_{cpu} * N_{core}
總邏輯 = 總邏輯核數
NcputNcoreN_{cpu} * t * N_{core}
= CPU * 邏輯核數
NcputNcoreN_{cpu} * t * N_{core}
= 總邏輯核數
= 總物理核數 * 線程數
NcputNcoreN_{cpu} * t * N_{core}

從概念的層次結構上面分爲: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 線程數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章