英文原文:A Journey Through the CPU Pipeline
作為程序員,CPU 在我們的工作中扮演了核心角色,因此了解處理器內(nèi)部的工作方式對程序員來說不無裨益。
CPU 是如何工作的呢?一條指令執(zhí)行需要多長時間?當我們討論某個新款處理器擁有 12 級流水線還是 18 級流水線,甚至是更深的 31 級流水線時,這到些都意味著什么呢?
應用程序通常會將 CPU 看作是黑盒子。程序中的指令按照順序依次進入 CPU,執(zhí)行完之后再按順序依次從 CPU 中出來,而內(nèi)部到底發(fā)生了什么,我們通常并不了解。
對我們程序員來說,尤其是對做程序性能調(diào)優(yōu)工作的程序員來說,學習 CPU 內(nèi)部的細節(jié)非常必要。否則,如果你不知道 CPU 的內(nèi)部結構,那如何才能針對 CPU 做性能優(yōu)化?
本文所關注的就是專門針對 X86 處理器流水線的工作原理。
你需要掌握的預備知識
首先,閱讀本文你需要了解編程,最好了解一點匯編語言。如果你還不知道指令指針(instruction pointer)是什么,那么本文對你來說可能有些難。你需要知道什么是寄存器,指令和緩存,如果不明白它們是什么,你需要盡快查找資料了解一下。
第二,CPU 的工作原理是一個非常龐大和復雜的話題,本文僅僅是匆匆一瞥,很難以用一篇文章詳盡敘述。如果我有什么疏漏,請通過評論告訴我。
第三,我僅僅關注英特爾處理器及其 X86 架構。當然除了 X86,還有很多其他架構的處理器。雖然 AMD 公司引入了很多新特性到 X86 架構,但是 X86 架構是 Intel 公司發(fā)明,并且創(chuàng)造了 X86 指令集,其中絕大多數(shù)特性是由 Intel 引入的。所以為了保持敘述的簡單和一致性,我僅關注 Intel 的處理器。
最后,當你讀到這篇文章時,它已經(jīng)是“過時”的了。更新款的處理器已經(jīng)設計出來,其中一些會在未來幾個月之內(nèi)發(fā)布。我很高興技術能如此快速的發(fā)展,我希望有一天所有這些技術都會過時,創(chuàng)造出擁有更驚人計算能力的 CPU.
處理器流水線基礎
從一個非常廣的角度來說,X86 處理器架構在近 35 年來并沒有變化太多。雖然 X86 架構被附加了很多新功能,但是最初的設計(包括幾乎所有最初的指令集)仍然基本上是完整保留的,即使在最新的處理器上仍然被支持。
最初的 8086 處理器支持 14 個寄存器,這些寄存器在如今最新的處理器中仍然存在。這 14 個寄存器中,有 4 個是通用寄存器:AX,BX,CX 和 DX;有 4 個是段寄存器,段寄存器用來輔助指針的實現(xiàn):代碼段(CS),數(shù)據(jù)段(DS),擴展段(ES)和堆棧段(SS);有 4 個是索引寄存器,用來指向內(nèi)存地址:源引用(SI),目的引用(DI),基指針(BP),棧指針(SP);有 1 個寄存器包含狀態(tài)位;最后是最重要的寄存器:指令指針(IP)。