增加指令流水線條數 指令流水線的概念在介紹8086和80386時都講到了。它是指將微處理器分成若幹個相互獨立而又有聯系的功能塊,例如,8086分成總線接口部件和執行部件兩大塊,80386分成總線接口部件、指令譯碼部件、執行部件和存儲器管理部件四塊,這樣就可以同時有幾條指令在不同的功能部件中進行相應的處理,從而實現指令的並行執行。顯然,將每一個功能部件完成的功能簡單化而增加功能部件的個數,即增加指令流水線的深度,能夠進一步提高指令的並行處理能力。關于這一點在本節的後面還要單獨討論。 80486及之前的x86微處理器中都只有一條指令流水線,程序中的所有指令都是通過這惟一的一條指令流水線來執行的。雖然增加指令流水線的深度能夠提高指令的並行處理能力,但是採用這種方法,指令的並行處理能力畢竟有一個極限。如果在微處理器中再增加一條指令流水線,那麼指令執行的並行度在原有基礎上豈不又提高很多?正是出于這一想法,在高檔微處理器中採用了多指令流水線的結構。這裡以Pentium處理器為例作一些說明。在Pentium處理器中設置了兩條指令流水線,分別叫u指令流水線和V指令流水線。每個流水線都擁有自己的算術邏輯運算部件ALU、地址生成邏輯以及與數據Cache的接口。u指令流水線可以執行所有的指令,而v指令流水線只能執行簡單的指令。例如程序段: MOV AX.5 INC BX ADD AX.BX XOR CX,CX MOV DX.8 INC DX 其中,第一、二條指令可以用U、V指令流水線並行執行,第三、第四條指令也可以用u、V指令流水線並行執行。顯然,執行這四條指令的時間大約是單條指令流水線時的一半。但是,請注意第五、第六條指令,由于它們都對同一個寄存器DX進行操作,執行第六條指令依賴于第五條指令的執行結果,所以它們不能同時送到u、V指令流水線中去執行。為此,Pentium處理器還需借用編譯工具以產生盡量不衝突的指令序列。這一缺陷後來在Pentium Pro開始的第六代微處理器(P6)中得到克服。在第六代微處理器中運用寄存器更名映射技術,使通用寄存器與微處理器內部的程序員看不到的40個寄存器建立起映射關系。比如,將上面第五條指令的DX和內部寄存器r5建立映射,將第六條指令的DX和內部寄存器r6建立映射。這樣,第五、第六條指令就可以用u、V指令流水線並行執行。 需要指出,指令流水線之間是存在一定聯系的,比如上例u指令流水線執行第五條指令的結果(DX的內容)最終還要反映到v指令流水線執行第六條指令上。
|