李 昭,劉有耀,焦繼業(yè),潘樹朋
(1.西安郵電大學(xué)電子工程學(xué)院,西安 710100;2.西安郵電大學(xué)計(jì)算機(jī)學(xué)院,西安 710100)
傳統(tǒng)超標(biāo)量處理器通過指令級并行(Instruction Level Parallelism,ILP)提升處理器執(zhí)行性能,為實(shí)現(xiàn)推測性執(zhí)行、精確異常和寄存器回收等功能,引入重排序緩存(Reorder Buffer,ROB)機(jī)制[1]。將解碼之后的指令按照程序順序?qū)懭隦OB 中,每條指令占用ROB 的一個(gè)表項(xiàng),在指令執(zhí)行階段一直保存在ROB中,直到提交階段從ROB 中逐條退休,使程序按順序更新處理器的狀態(tài),保證了在分支預(yù)測失敗和指令異常時(shí)處理器狀態(tài)的正確。隨著集成電路技術(shù)的發(fā)展,眾多領(lǐng)域?qū)μ幚砥餍阅艿囊笤絹碓礁撸琑OB機(jī)制的不足也逐漸顯現(xiàn)。例如,當(dāng)ROB head 被長周期執(zhí)行指令占用時(shí),后續(xù)指令就不能從ROB 中退出,即使這些指令獨(dú)立于長周期執(zhí)行指令,并且它們已經(jīng)計(jì)算完成,也不允許提交,使得ROB 利用率較低。同時(shí),由于ROB 容量有限,指令持續(xù)解碼最終會導(dǎo)致ROB 完全填滿,無論是否有其他獨(dú)立的指令,都不能進(jìn)入發(fā)射隊(duì)列,并且指令執(zhí)行停滯[2],從而使處理器陷入相當(dāng)多的周期停頓[3],對處理器性能造成影響。ROB 阻塞問題的產(chǎn)生是由于ROB 遵循指令順序退出策略影響處理器性能,這些長周期執(zhí)行指令一方面在多個(gè)周期內(nèi)不可用,可能會長時(shí)間阻塞從屬指令的執(zhí)行,另一方面退出緩慢,已執(zhí)行完的指令會在多個(gè)周期內(nèi)占用關(guān)鍵資源,一旦資源用盡,處理器就會停止獲取新指令并最終停頓,導(dǎo)致ROB 等其他硬件資源利用率降低。針對以上問題,需要從提高電路硬件資源利用率以及指令提交控制邏輯等方面進(jìn)行優(yōu)化,簡單的解決方案是擴(kuò)大ROB容量以容納更多的并行指令。隨著基于ROB 的微體系結(jié)構(gòu)在指令提交階段對某些關(guān)鍵資源的分布進(jìn)行例化,會增加處理器面積和功耗方面的成本,還可能會影響處理器周期[4]。
目前,研究人員針對ROB 阻塞問題提出了一些解決方案。文獻(xiàn)[5]提出退休長周期指令的值預(yù)測機(jī)制,該機(jī)制在長周期執(zhí)行指令阻塞ROB 時(shí),通過賦假值使其提前退出,其他指令正常執(zhí)行,但不允許覆蓋內(nèi)存中的數(shù)據(jù)。在等待長周期執(zhí)行指令操作完成后,處理器系統(tǒng)返回到檢查點(diǎn)并恢復(fù)常規(guī)執(zhí)行。該機(jī)制加快了整體執(zhí)行速度,但是沒有真正解決ROB 的阻塞問題。文獻(xiàn)[6]提出指令亂序退休機(jī)制來解決ROB 阻塞問題,該機(jī)制將程序中所有可能產(chǎn)生異常和預(yù)測錯(cuò)誤的指令設(shè)置為節(jié)點(diǎn)指令,當(dāng)驗(yàn)證緩存(Valid Buffer,VB)檢驗(yàn)?zāi)彻?jié)點(diǎn)指令不會發(fā)生異常和預(yù)測錯(cuò)誤時(shí),其后面到下一個(gè)節(jié)點(diǎn)之間的指令會亂序退休。通過指令亂序退休縮小了長周期執(zhí)行指令占用ROB 的時(shí)間,但同時(shí)為保證亂序退休時(shí)ROB 的正確維護(hù),需要復(fù)雜的控制邏輯和大量的硬件資源進(jìn)行支持。文獻(xiàn)[7]提出組提交機(jī)制,該機(jī)制將程序按順序分組,每組內(nèi)包含若干寄存器相關(guān)的指令時(shí),僅將使用同一寄存器的最后更新寄存器文件的指令輸入ROB 條目中。此外,在提交該組指令之前,可以更早地釋放該組中最后更新寄存器文件的指令對應(yīng)的寄存器。該機(jī)制增加了ROB 的有效容量和物理寄存器的有效數(shù)量,但是有限的ROB 資源不能滿足管理組信息的高存儲需求,并且由于指令組提交數(shù)量大,當(dāng)預(yù)測錯(cuò)誤發(fā)生時(shí)會沖刷更多的指令,造成嚴(yán)重的周期停滯。
為滿足超標(biāo)量處理器的高性能和小面積設(shè)計(jì)需求,本文在研究傳統(tǒng)ROB 機(jī)制以及多種主流ROB 優(yōu)化機(jī)制的基礎(chǔ)上,提出一種指令快速提交機(jī)制。該機(jī)制通過容量可配置的多緩存指令提交結(jié)構(gòu),實(shí)現(xiàn)存儲器操作指令和ALU 類型指令的分類退休,并利用指令目的寄存器編碼提交模式完成指令結(jié)果的亂序提交。
傳統(tǒng)超標(biāo)量處理器ROB 的每個(gè)表項(xiàng)中都包含判斷指令執(zhí)行完畢的狀態(tài)位Complete、指令異常類型判斷標(biāo)志位Exception、判斷指令類型并決定其提交位置的狀態(tài)位Type、寄存器重命名的映射關(guān)系等資源。這些資源導(dǎo)致了重排序緩存內(nèi)部結(jié)構(gòu)復(fù)雜,并且當(dāng)指令產(chǎn)生異常時(shí),必須在ROB 內(nèi)部等待異常處理完畢后才能繼續(xù)后續(xù)指令的退出,這樣會給處理器帶來相當(dāng)多的周期停滯,嚴(yán)重影響處理器性能。ROB 容量越大,容納的并行指令越多,造成阻塞的風(fēng)險(xiǎn)越小,對處理器性能提升有一定幫助。目前,提出的一些解決方案通過擴(kuò)大主要的微處理器結(jié)構(gòu)或?qū)ζ溥M(jìn)行高效管理來減輕ROB 阻塞引起的性能下降問題[8]。由文獻(xiàn)[2]可知此類解決方案的效果并不理想,因?yàn)楫?dāng)ROB 尺寸持續(xù)增加到某一定值時(shí),首先會對處理器性能提升產(chǎn)生免疫,其次增大ROB 尺寸就必須增加其內(nèi)部例化的各種資源,會增加處理器面積和功耗方面的成本,也可能影響處理器周期,造成處理器性能和面積的失衡。
通過對項(xiàng)目組在研的一款基于ROB 機(jī)制的雙發(fā)射超標(biāo)量處理器的性能和面積進(jìn)行評估,在功能仿真的硬件設(shè)計(jì)下載入現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)進(jìn)行驗(yàn)證,運(yùn)行Dhrystone 和CoreMark 基準(zhǔn)測試程序?qū)μ幚砥餍阅苓M(jìn)行評估。通過記錄程序中指令執(zhí)行總時(shí)長和執(zhí)行總數(shù)得到平均IPC 指數(shù),以此作為處理器性能評判的指標(biāo)。基于ROB 機(jī)制的超標(biāo)量處理器內(nèi)核在0.11 μm CMOS 工藝下使用Design Compiler 完成邏輯綜合,具體參數(shù)設(shè)置如表1 所示。

表1 基于ROB 機(jī)制的超標(biāo)量處理器參數(shù)設(shè)置Table 1 Parameters setting of superscalar processor based on ROB mechanism
實(shí)驗(yàn)中所研究的超標(biāo)量處理器架構(gòu)最多可同時(shí)亂序發(fā)射并執(zhí)行2 條指令、順序提交1 條指令,其平均IPC指數(shù)為0.73,與理論值相差較大[9]。由文獻(xiàn)[10]結(jié)論可知,平均IPC 指數(shù)達(dá)不到理想值是由于流水線停頓,其中ROB 堵塞是造成流水線停頓的主要原因。通過實(shí)驗(yàn)對不同類型指令造成ROB 阻塞的比例進(jìn)行對比分析,得出存儲器操作指令的比例最高。影響ROB 阻塞的主要因素為:1)ROB 尺寸難以匹配指令持續(xù)解碼的速度,ROB 變滿而造成阻塞;2)由于指令順序提交,因此當(dāng)程序中長周期執(zhí)行指令延遲退休時(shí)會阻塞ROB,導(dǎo)致ROB 利用率較低。
為提高處理器的平均IPC 指數(shù),本文從上述兩個(gè)影響因素入手,對ROB 機(jī)制進(jìn)行優(yōu)化。首先對基于該處理器的RISC-V 指令集中各指令功用及其指令編碼格式進(jìn)行分類研究,提出將存儲器操作指令和其他指令分類退休、結(jié)果亂序提交的設(shè)計(jì)思路。針對影響因素1,該機(jī)制可以根據(jù)應(yīng)用程序的需求動(dòng)態(tài)調(diào)整資源分配[11],將指令提交緩存模塊容量根據(jù)處理器性能要求進(jìn)行參數(shù)化配置。針對影響因素2,該機(jī)制中的指令目的寄存器編碼提交模式可以增加單次指令提交數(shù)量,實(shí)現(xiàn)指令結(jié)果亂序提交。該機(jī)制一方面通過調(diào)節(jié)指令提交緩存模塊容量來容納更多的并行指令,另一方面通過指令亂序提交來加快指令提交速率,為后續(xù)等待提交的指令預(yù)留出足夠的空間,從而有效降低ROB 阻塞的風(fēng)險(xiǎn),充分利用指令提交緩存模塊的資源,提升超標(biāo)量處理器的執(zhí)行性能。
基于指令類型緩存(Type Buffer,TB)、目標(biāo)緩存(Object Buffer,OB)和存儲緩存(Memory Buffer,MB)的超標(biāo)量流水線結(jié)構(gòu)可實(shí)現(xiàn)指令亂序提交。指令目的寄存器編碼提交模式支持指令結(jié)果亂序提交,相比傳統(tǒng)超標(biāo)量處理器中ROB 順序提交模式,將所有指令運(yùn)行過程中的信息存儲在ROB 中進(jìn)行退休管理,并考慮了性能和成本之間的折衷[12]。本文在此基礎(chǔ)上,通過將ROB 中的數(shù)據(jù)或地址字段保留在單獨(dú)的結(jié)構(gòu)中來減小ROB 條目的寬度,而不會影響ROB 接口[13],一定程度上降低了長周期執(zhí)行指令阻塞后續(xù)指令提交的風(fēng)險(xiǎn),提高了單次指令提交數(shù)量。亂序提交的流水線結(jié)構(gòu)如圖1 所示。

圖1 亂序提交的流水線結(jié)構(gòu)Fig.1 Pipeline structure of out-of-order submission
亂序提交的流水線結(jié)構(gòu)滿足指令分類退休和結(jié)果亂序提交,流水線分為取指令(Fetch)和解碼(Decode)、相關(guān)檢測(Related detection)和發(fā)射(Issue)以及執(zhí)行(Execute)、訪存(Memory access)和提交(Commit)3級。該流水線結(jié)構(gòu)的基本工作流程為:首先取指單元(Instruction Fetch Unit,IFU)在一個(gè)周期內(nèi)從指令緩存(I-Cache)中取出3 條指令,經(jīng)過解碼之后對這3 條指令的目的寄存器依次編碼為D1、D2、D3,然后送入寄存器相關(guān)檢測(Register-related Detection)模塊中進(jìn)行亂序發(fā)射評估。將滿足發(fā)射條件的指令送入發(fā)射隊(duì)列(Issue_queue)中,等待發(fā)射隊(duì)列中指令的操作數(shù)準(zhǔn)備就緒并且功能單元空閑時(shí)將指令發(fā)送給相應(yīng)的ALU 進(jìn)行計(jì)算,而將與之前送入發(fā)列隊(duì)列的指令存在寫后讀(Read After Write,RAW)相關(guān)的后續(xù)指令暫存在鎖存隊(duì)列(Latch_queue)中,等待與下一輪循環(huán)進(jìn)入流水線的3 條新指令共同進(jìn)行寄存器相關(guān)檢測。以此類推,可以為發(fā)射隊(duì)列提供持續(xù)的并行指令源,實(shí)現(xiàn)指令的動(dòng)態(tài)調(diào)度。ALU 計(jì)算完畢后經(jīng)過指令類型緩存TB 的判斷,將Load/Store 指令的目的寄存器編碼號(Di,i=1,2,…,n)和讀寫地址、寫數(shù)據(jù)送入存儲緩存中,存儲緩存再通過地址數(shù)據(jù)總線訪問數(shù)據(jù)緩存(D-Cache),完成數(shù)據(jù)存取操作。其余指令的計(jì)算結(jié)果和目的寄存器編碼號送入目標(biāo)緩存中,等待指令目的寄存器編碼號等于0 時(shí)將結(jié)果提交至寄存器文件(Register File,RF)中完成一次提交動(dòng)作。本文提出的新型超標(biāo)量處理器流水線結(jié)構(gòu)可實(shí)現(xiàn)同時(shí)3 條指令亂序發(fā)射,亂序執(zhí)行,2 條指令亂序提交,極大地提升了指令提交速率,同時(shí)使用容量可配置的指令提交緩存結(jié)構(gòu)TB、OB 和MB 代替復(fù)雜的ROB 機(jī)制,可有效提高電路硬件資源的利用率。
與開放式指令集體系結(jié)構(gòu)(Instruction Set Architecture,ISA)不同,RISC-V 設(shè)計(jì)簡單、靈活和可擴(kuò)展,這有助于將其移植到不同的技術(shù)和應(yīng)用領(lǐng)域[14]。本文基于RISC-V 指令集規(guī)整的指令編碼格式,借助指令類型緩存、目標(biāo)緩存和存儲緩存的多緩存結(jié)構(gòu)實(shí)現(xiàn)Load/Store 指令和其余指令分類退休。指令類型緩存主要負(fù)責(zé)對ALU 計(jì)算完成的指令進(jìn)行類型判斷后發(fā)送給相應(yīng)的提交緩存模塊,并且當(dāng)指令提交緩存模塊OB 和MB 沒有剩余空間時(shí)負(fù)責(zé)暫存待提交指令的信息,等待目標(biāo)緩存和存儲緩存騰出足夠的空間時(shí)再將指令計(jì)算結(jié)果和目的寄存編碼送入其內(nèi)部等待提交,防止因指令提交緩存變滿而造成的流水線停頓,提供緩沖作用,使得流水線各級實(shí)現(xiàn)速度匹配。指令類型緩存還可以為關(guān)聯(lián)尋址的指令提供源操作數(shù),加快了指令執(zhí)行速度,但是操作數(shù)讀取端口的增加會導(dǎo)致處理器面積的增加。MB 負(fù)責(zé)緩存Load/Store 指令的信息,OB 負(fù)責(zé)緩存其余指令的信息。本文根據(jù)微處理器性能及架構(gòu)要求對目標(biāo)緩存和存儲緩存容量進(jìn)行調(diào)整,保證流水線各級的速度匹配。基于TB+OB+MB 的指令退休結(jié)構(gòu)如圖2 所示。

圖2 基于TB+OB+MB 的指令退休結(jié)構(gòu)Fig.2 Instruction retirement structure based on TB+OB+MB
基于TB+OB+MB 的指令退休結(jié)構(gòu)可有效解決當(dāng)Store 指令占用ROB head 時(shí)而導(dǎo)致的流水線停頓問題,采用TB+OB+MB 結(jié)構(gòu)對不同功用指令進(jìn)行分類退休,并與流水線其他各級模塊相互協(xié)作。首先由指令類型緩存模塊接收來自ALU 模塊輸出的指令計(jì)算結(jié)果(Data &Addre)和目的寄存器編碼號,然后將指令分類后的指令信息分別送入目標(biāo)緩存和存儲緩存中進(jìn)行暫存,等待第1 條指令提交后,目標(biāo)緩存將該輪循環(huán)中所有指令的目的寄存器編碼號減1,依此類推,直到指令目的寄存器編碼號等于0 的指令將其結(jié)果提交至寄存器文件中。如果檢測到Load指令,則由TB 負(fù)責(zé)將指令的讀地址和目的寄存器編碼號送入存儲緩存中進(jìn)行暫存,等待其目的寄存器編碼減為0 且完成數(shù)據(jù)讀取操作后,再通過存儲緩存模塊將讀取結(jié)果提交至寄存器文件中,完成Load指令提交動(dòng)作。該結(jié)構(gòu)可以實(shí)現(xiàn)單周期執(zhí)行指令優(yōu)先于Store 長周期執(zhí)行指令提交,即使Store 指令發(fā)生了異常,也無需沖刷已經(jīng)提交的單周期執(zhí)行指令,因?yàn)樵谥噶罘诸愅诵輽C(jī)制的控制下,與Store 指令存在讀后寫(Write After Read,WAR)相關(guān)的指令在本輪循環(huán)中不滿足提交的條件,所以該機(jī)制滿足亂序提交下的精確異常,降低指令異常時(shí)沖刷流水線的風(fēng)險(xiǎn)。同時(shí),隨著循環(huán)輪數(shù)的增加,指令譯碼仍在繼續(xù),此時(shí)將導(dǎo)致目標(biāo)緩存和存儲緩存剩余空間不足,從而阻塞流水線,對處理器性能造成影響。
本文通過修改目標(biāo)緩存和存儲緩存容量來解決此問題,但是增大提交緩存模塊的同時(shí)會影響處理器的面積和功耗,因此本文在每個(gè)程序中合理利用OB 和MB,并且根據(jù)程序中不同類型的指令數(shù)量來確定OB 和MB 尺寸[15]。結(jié)合實(shí)際性能測試結(jié)果來合理分配OB+MB 尺寸,目的是為了通過調(diào)節(jié)模塊容量來更好地反映應(yīng)用程序的需求,從而獲得更合理的資源配置方案以及更好的能耗比,使處理器達(dá)到性能和面積的平衡。通過實(shí)驗(yàn)分析可知,針對不同的應(yīng)用程序調(diào)整指令退休結(jié)構(gòu)的硬件參數(shù)可獲取最佳處理器性能,使得基于該結(jié)構(gòu)的超標(biāo)量處理器更適用于高性能和低功耗場景。
目前,多數(shù)超標(biāo)量處理器主要通過指令亂序發(fā)射和并行執(zhí)行、結(jié)果順序提交來保證處理器性能,但當(dāng)長周期執(zhí)行指令占用ROB head 時(shí),順序提交的缺陷就異常凸顯。針對以上問題,本文提出的結(jié)果亂序提交機(jī)制利用目的寄存器編碼提交模式在保證指令正確提交的前提下,最多可同時(shí)完成2 條指令的亂序提交,相比傳統(tǒng)ROB 機(jī)制,該機(jī)制從單次指令提交數(shù)量和指令亂序提交兩方面加快了指令提交速率,為指令提交緩存模塊預(yù)留出足夠的空間來容納更多的并行指令,一定程度上提升了指令提交模塊的利用率。指令目的寄存器編碼提交結(jié)構(gòu)如圖3所示。

圖3 指令目的寄存器編碼提交結(jié)構(gòu)Fig.3 Coding submission structure of instruction destination register
指令目的寄存器編碼提交模式的控制流程為首先在指令譯碼階段對輸出的3 條指令中存在目的寄存器的指令編碼為Di=0,1,2,然后送入寄存器相關(guān)檢測模塊中進(jìn)行指令相關(guān)性判斷,將這3 條指令中與之前指令存在RAW 相關(guān)的后續(xù)指令送入鎖存隊(duì)列中進(jìn)行暫存,其余指令由發(fā)射隊(duì)列送入ALU 中進(jìn)行計(jì)算,等待指令計(jì)算完成,將計(jì)算結(jié)果和目的寄存器編碼號送入目標(biāo)緩存中等待提交。允許指令亂序提交的必要條件為指令計(jì)算完成和指令Di=0[16]。滿足這兩個(gè)條件的指令可以將其計(jì)算結(jié)果提交至寄存器文件中,并且由目標(biāo)緩存控制該輪循環(huán)中所有指令的目的寄存器編碼號減1。該目的寄存器編碼提交模式為不斷循環(huán)迭代,在第2 輪循環(huán)中,將鎖存隊(duì)列中指令的目的寄存器編碼號減1 后作為首條參與寄存器相關(guān)檢測的指令,此時(shí)指令譯碼模塊輸出的3 條新指令的目的寄存器編碼規(guī)則必須按照程序順序進(jìn)行編碼,并且第1 條指令目的寄存器編碼號必須等于上一輪循環(huán)中所有指令目的寄存器編碼號的最大值減1。依此類推,這樣就可以保證指令目的寄存器編碼提交模式的循環(huán)迭代,從而通過控制指令提交順序和數(shù)量來提升處理器性能。該指令目的寄存器編碼提交模式可滿足當(dāng)長周期執(zhí)行指令Store等待提交時(shí),最多同時(shí)亂序提交2 條與Store 不相關(guān)的指令,因滿足提交的2 條指令不在同一輪循環(huán)中,它們之間可能存在RAW、WAR 和寫后寫(Write After Write,WAW)相關(guān)問題[17]。為避免該問題帶來的錯(cuò)誤提交,本文通過指令目的寄存器編碼提交模式中的循環(huán)輪數(shù)優(yōu)先級可解決讀后寫相關(guān)問題,并且可在控制指令發(fā)射階段避免寫后讀相關(guān)問題。當(dāng)一輪循環(huán)中已發(fā)射的指令與其編號之后的鎖存隊(duì)列中的指令存在寫后讀相關(guān)時(shí),在下一輪循環(huán)鎖存隊(duì)列中的指令可以從指令類型緩存中快速讀取源操作數(shù),TB 的一個(gè)輸出端口與讀取端口復(fù)用,可在加快指令執(zhí)行速度的同時(shí)減少讀取端口的數(shù)量[18]。
本文中的結(jié)果亂序提交機(jī)制滿足同時(shí)亂序提交2條指令,加快了指令提交速率,同時(shí)其控制邏輯相對簡單,相比傳統(tǒng)ROB 順序提交機(jī)制,極大地提升了程序運(yùn)行速度。但當(dāng)鎖存隊(duì)列中的指令與Store 指令存在RAW相關(guān)時(shí),由于Store 指令執(zhí)行時(shí)間不確定,可能先于鎖存隊(duì)列中的指令完成提交,這樣會造成錯(cuò)誤提交,需要沖刷流水線使處理器狀態(tài)恢復(fù)正常。本文提出一種指令發(fā)射控制策略,當(dāng)指令鎖存隊(duì)列變滿時(shí),先不允許發(fā)射檢測出的Store 指令,等待鎖存隊(duì)列中的指令執(zhí)行完畢后再發(fā)射Store 指令。這樣雖然避免了提交錯(cuò)誤而導(dǎo)致的流水線沖刷問題,但同時(shí)又帶來了新的問題,使得在該發(fā)射控制策略下遇到上述情況時(shí)最差只能發(fā)射1 條指令,此時(shí)不僅不能充分利用電路的硬件資源,影響超標(biāo)量處理器性能,而且還會產(chǎn)生不必要的功耗。可見,結(jié)果亂序提交機(jī)制還需綜合考慮微處理器架構(gòu)以及性能需求做進(jìn)一步優(yōu)化。
本節(jié)主要對基于指令亂序提交機(jī)制(簡稱本文機(jī)制)的超標(biāo)量處理器性能和面積進(jìn)行評估,并與基于ROB 順序提交機(jī)制、值預(yù)測機(jī)制[5]、亂序退休機(jī)制[6]和組提交機(jī)制[7]的超標(biāo)量處理器進(jìn)行性能對比。首先對整體設(shè)計(jì)進(jìn)行功能仿真和邏輯綜合后將生成的sof 文件載入DE2_70 FPGA 開發(fā)板上,通過運(yùn)行Dhrystone、CoreMark 和SPEC 2006 基準(zhǔn)測試程序獲取改進(jìn)后處理器的平均IPC 指數(shù)。為估計(jì)芯片面積開銷[19],在0.11 μm CMOS 工藝下對優(yōu)化后的整體電路進(jìn)行邏輯綜合,得到處理器內(nèi)核尺寸以及指令提交緩存模塊尺寸。為進(jìn)一步探究指令提交緩存模塊尺寸與處理器性能的關(guān)系,通過修改OB 和MB 尺寸并對修改后的處理器按上述過程進(jìn)行性能和面積評估。不同OB+MB 尺寸下Dhrystone 和CoreMark的平均IPC 指數(shù),如圖4 所示。

圖4 不同OB+MB 尺寸下Dhrystone 和CoreMark 的平均IPC 指數(shù)Fig.4 Average IPC index of Dhrystone and CoreMark at different OB+MB size
實(shí)驗(yàn)結(jié)果表明,當(dāng)指令提交緩存模塊OB+MB尺寸從1.97×104增長到2.60×104時(shí),處理器的平均IPC 指數(shù)逐漸增長并趨于穩(wěn)定,當(dāng)OB+MB 尺寸從2.60×104增長到4.16×104時(shí),平均IPC 指數(shù)增幅并不明顯,并且隨著OB+MB 的不斷增大,平均IPC 指數(shù)保持穩(wěn)定不變,證明此時(shí)單純增加指令提交緩存模塊不能有效提升處理器性能,需要結(jié)合流水線其他各級模塊進(jìn)行綜合考慮。為實(shí)現(xiàn)處理器性能和面積的平衡,根據(jù)上述結(jié)果可知,當(dāng)OB+MB 尺寸為2.60×104時(shí)的處理器內(nèi)核尺寸為4.90×104,對應(yīng)的平均IPC指標(biāo)為1.078 是最佳配置。本文通過運(yùn)行SPEC CPU2006 基準(zhǔn)測試套件中的12 個(gè)SPECint 應(yīng)用程序[20]來評估處理器性能,當(dāng)OB+MB 尺寸為2.60×104時(shí),基于本文機(jī)制的超標(biāo)量處理器平均IPC 指數(shù)如圖5 所示。

圖5 當(dāng)OB+MB 尺寸為2.60×104時(shí)基于本文機(jī)制的超標(biāo)量處理器平均IPC 指數(shù)Fig.5 Average IPC index of superscalar processor based on the proposed mechanism when the OB+MB size is 2.60×104
實(shí)驗(yàn)結(jié)果表明,當(dāng)本文機(jī)制中的指令提交緩存模塊OB+MB 尺寸為2.60×104時(shí),通過每個(gè)周期提交的IPC 表示處理器在一個(gè)周期內(nèi)可以執(zhí)行的指令個(gè)數(shù)。在各個(gè)應(yīng)用程序中差異較大[21],基于本文機(jī)制的超標(biāo)量處理器的平均IPC 指數(shù)為1.11,相比基于ROB 順序提交機(jī)制的超標(biāo)量處理器在使用較少的硬件資源情況下處理器性能提升了46%。將基于本文機(jī)制、值預(yù)測機(jī)制[5]、亂序退休機(jī)制[6]和組提交機(jī)制[7]的超標(biāo)量處理器進(jìn)行性能對比,如表2 所示。可以看出,基于本文機(jī)制的超標(biāo)量處理器相比基于值預(yù)測、亂序退休和組提交機(jī)制的超標(biāo)量處理器平均IPC 指數(shù)增益為19%,實(shí)現(xiàn)了更高的性能提升。

表2 基于4 種機(jī)制的超標(biāo)量處理器性能對比Table 2 Performance comparison of superscalar processors based on four mechanisms
由實(shí)驗(yàn)分析可知,本文機(jī)制可通過調(diào)整OB 和MB 尺寸來提升處理器性能,但是單純增加OB+MB尺寸并不能明顯提升處理器性能,甚至隨著OB+MB尺寸的不斷增大,處理器性能將不再變化。出現(xiàn)該情況的主要原因?yàn)楸疚臋C(jī)制未充分考慮指令提交緩存模塊與流水線其他各級模塊的關(guān)系,只有實(shí)現(xiàn)各級模塊速度的匹配,才能最大化處理器性能。
傳統(tǒng)基于ROB 順序提交機(jī)制的超標(biāo)量處理器由于長周期執(zhí)行指令占用ROB head 時(shí)間過長導(dǎo)致流水線阻塞,以及指令持續(xù)解碼使得ROB 無法容納更多并行指令,從而造成ROB 資源利用率降低。為解決上述問題,本文提出一種指令亂序提交機(jī)制,利用指令目的寄存器編碼提交模式實(shí)現(xiàn)在Store指令阻塞提交時(shí),后續(xù)執(zhí)行完畢的單周期執(zhí)行指令優(yōu)先于Store指令完成提交,保證單次最多同時(shí)提交2條指令,提高指令提交速率。實(shí)驗(yàn)結(jié)果表明,基于指令亂序提交機(jī)制的超標(biāo)量處理器相比傳統(tǒng)基于ROB順序提交機(jī)制的超標(biāo)量處理器在減少硬件開銷的情況下性能提升46%,相比基于值預(yù)測、亂序退休和組提交機(jī)制的超標(biāo)量處理器性能平均提升19%。后續(xù)可將該指令亂序提交機(jī)制應(yīng)用于嵌入式處理器中,實(shí)現(xiàn)高性能和低功耗的處理器設(shè)計(jì)。