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