Conroe強在哪兒?Core vs K8架構解析
為使那些不熟悉處理器設計的讀者也能理解文章后面的內容,我們首先從一個處理器微架構的速成教程開始。為了理解處理器設計的目標和優(yōu)劣,你首先需要了解處理器執(zhí)行的指令,所以我們從處理器運行的軟件開始。
典型的 X86 程序的代碼中大約有50%的指令是存儲器訪問指令,其中存儲器讀指令大約是存儲器寫指令的2倍。然后,大約15%到20%的指令是分支指令(if, then, else等)。剩余指令中,大部分是諸如“ADD”、“MUL”這樣的較簡單的計算指令。像“DIV”、“SQRT”這些較復雜的計算指令在所有指令中只占很少的一部分。所有這些指令都按照典型的流水線步驟執(zhí)行:取指,解碼,取操作數(shù),執(zhí)行,退出。
首先,處理器會根據(jù)指令指針寄存器(instruction pointer register)指示的地址取回指令。這時,對處理器來說,指令僅僅是一些沒有意義的0、1字符串。只有在被解碼之后,指令對處理器來說才開始有意義。指令被解碼后可以得到操作數(shù)地址和操作碼,而操作數(shù)地址可以在下一步發(fā)揮作用:取操作數(shù)。你不會希望處理器對操作數(shù)的地址進行計算,而是對那些地址里面存放的內容進行計算——與 C 語言里面的指針的概念很相似。當操作數(shù)被取出來以后,ALU根據(jù)操作碼的指示,就可以對操作數(shù)進行正確的計算了。計算結果一般將被寫回處理器內部的寄存器堆中。有時候,計算結果也需要寫回到緩存和內存中。這就是最后的步驟——退出。到此為止,你應該略微了解一條指令的整個執(zhí)行過程了。
今天,對處理器設計者來說,主要的挑戰(zhàn)是處理器的存儲器訪問平均延遲。在一個由 Pentium 4 3.6GHz 和 DDR400 內存構成的系統(tǒng)中,處理器的速度是內存的速度(200MHz)的18倍。也就是說,訪問內存的每一個周期,處理器會經(jīng)過18個周期。而且,發(fā)送一個內存訪問請求需要多個內存周期,回應一個內存訪問也需要多個周期。因此,對于 Pentium 4 來說,花費200到300個處理器周期來等待內存訪問的完成并不罕見。設計處理器緩存的目標就是避免內存訪問的發(fā)生。但即使處理器緩存的缺失率僅為4%,也就是說,在處理器訪問存儲器的所有情況中只有4%的比例需要訪問內存,這4%也將顯著降低處理器的執(zhí)行效率。
關注我們
