現代CPU
《編譯型語言與解釋型語言如何在計算機底層運行》中提到,計算機依靠編譯器將源代碼(編譯型編程代碼:C之類)編譯成機器碼執行,准確說,就是用CPU執行。
馮 諾伊曼架構
馮⋅ \cdot⋅諾伊曼(1945)提出當前計算機的主流架構,包含以下三大部分:
CPU(Central Processing Unit):包含控制單元(Control Unit)、邏輯運算單元(Arithmetic/Logic Unit);
內存:存儲指令、數據;
輸入輸出設備;
概念解析
CPU(Central Processing Unit)
CPU,中央處理器,負責執行用戶和操作系統下發的指令。此處指令,是以01二進制形式組織的機器碼,在物理底層,01用來控制高低電位。
指令集
除了加減指令,CPU的電路還要實現很多其他指令:內存讀取、邏輯判斷。
指令控制物理電位,不同電路廠家電路設計不同,則電路上所能進行的二進制碼就不同。
某類CPU能支持一種指令集(instruction set architechture),指令集相當於一種設計圖紙,規定了一種CPU架構實現哪些指令。
常見的指令集有:
x86:常見
ARM:常見
MIPS
SPARC:龍芯
Power:IBM小型機
有了指令集:
硬件開發人員只需要關心如何設計電路;
軟件開發人員只關心如何使用01機器碼實現軟件功能;
單核CPU的架構
前面圖片展示了馮⋅ \cdot⋅諾伊曼計算機架構,下圖展示了一個單核CPU的架構:
其中包含:
Control Unit(CU):控制單元,協調管理;
Arithmetic Logic Unit(ALU):數學邏輯單元,接受控制單元CU的命令,負責進行加減乘、與或非運算。
Register:ALU是負責計算邏輯,具體計算的數據是存放在寄存器(Register,幾KB大小)中,寄存器以極高的速度(<1納秒)與CU和ALU交互。
寄存器中的數據是臨時寄存的,這些數據和指令會被ALU和CU拿來立即進行計算,如果寄存器中沒有CPU想要的數據,CPU會去內存或硬盤中讀取。
BUS:總線,如果寄存器中沒有CPU需要的數據,CPU會去內存或硬盤中讀取,這個讀取內存或其他設備數據的過程,是通過Bus(總線)來實現,計算機中有多條總線。
舉例說明計算過程:
對於一個加法運算,計算機需要知道兩個問題:
本次所執行的是哪個指令;
該指令的執行對象是什么;
具體過程:
控制單元CU先取指令(Fetch);
指令譯碼(Decode)解析出要執行什么指令;
確認指令是對哪些數據(操作數Operand)進行操作;
將操作數從主存加載到寄存器中;
ALU執行指令(Execute);
結果寫回Store;
存儲金字塔
計算機的速度瓶頸,已經變成了超高速的CPU運算速度(納秒級別)與落后的數據讀取速度(百納秒)之間的矛盾。
CPU計算完成后,要閑置幾十倍的時間,等待存取。
CPU的寄存器存取速度極快,但是造價成本太高,發熱量大,不能被大量采用。通常,CPU的寄存器只有幾KB;
L1 Cache和L2 Cache一般設計在CPU上,訪問延遲在幾~幾十納秒內;
主存的訪問延遲在百納秒內;
速度越快,意味着成本越高。所以硬件設計是在現有技術水平、期望計算速度、成本、散熱等因素之間所做的trade-off。
多核
當單個CPU主頻超過一定范圍后,CPU成本和散熱成了很大的問題,主頻很難突破10GHz。
為了獲得更快的計算速度和更好的性能,芯片設計者決定繞過主頻,采用人海戰術,在一塊CPU中增加多個核心(Core)。
一個核心是一個可以運行指令的獨立單元,它包含了ALU和寄存器,並配備L1和L2 Cache。多個核心共享L3 Cache。
上圖是一個多核處理器電路圖。下圖是多個多核處理器:
服務器可以支持多個處理器(CPU),支持單個CPU的服務器稱為單路服務器;支持兩個CPU的服務器稱為雙路服務器。上圖是Intel的四路架構,系統支持四個CPU,假如每塊CPU內有8個核心,系統可對外提供32核計算能力。
————————————————
版權聲明:本文為CSDN博主「quantLearner」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/The_Time_Runner/article/details/103348137