两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

Store(存數(shù))指令結(jié)果的前送的制作方法

文檔序號(hào):6414021閱讀:391來(lái)源:國(guó)知局
專利名稱:Store(存數(shù))指令結(jié)果的前送的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般地涉及數(shù)據(jù)處理系統(tǒng),具體地說(shuō),涉及處理器中Load(取數(shù))和Store(存數(shù))指令的亂序執(zhí)行。
本申請(qǐng)與下面的各項(xiàng)申請(qǐng)有關(guān)題目為“支持全亂序執(zhí)行的快速統(tǒng)一中斷和轉(zhuǎn)移恢復(fù)的方法”、系列號(hào)為081829662的美國(guó)專利申請(qǐng),本文中通過(guò)參考將其包含在其中;題目為“推理性執(zhí)行單元中用于選擇性指令沖洗的檢查點(diǎn)表”、系列號(hào)為08/934960的美國(guó)專利申請(qǐng),本文中通過(guò)參考將其包含在其中;題目為“處理器中Load(取數(shù))和Slore(存數(shù))的亂序執(zhí)行的支持”、系列號(hào)為08/829669的美國(guó)專利申請(qǐng),本文中通過(guò)參考將其包含在其中。
為了達(dá)到更高的性能水平,處理器和系統(tǒng)的設(shè)計(jì)者試圖提高處理器和系統(tǒng)的時(shí)鐘速率和提高每個(gè)時(shí)鐘周期完成的工作量。除其他影響外,力求達(dá)到較高的時(shí)鐘速率推動(dòng)了向去耦設(shè)計(jì)和半自治單元的方向發(fā)展,而同時(shí)使單元之間的同步達(dá)到最小。增加每一個(gè)時(shí)鐘周期的工作量往往是利用外加的功能單元和試圖充分利用可用的指令級(jí)的并行性來(lái)達(dá)到的。
編譯器能夠試圖暴露出程序中存在的指令級(jí)的并行性,而同時(shí)試圖把路徑長(zhǎng)度減到最小和有限的結(jié)構(gòu)寄存器數(shù)目相結(jié)合,往往會(huì)人為地妨礙編譯器完全暴露程序內(nèi)在的并行性。有許多情況(諸如,下面的指令序列),寄存器資源妨礙更優(yōu)的指令順序安排。
FMFPR5<-FPR4,F(xiàn)PR4FMA FPR2<-FPR3,F(xiàn)PR4,F(xiàn)PR5
FMA FPR4<-FPR6,F(xiàn)PR7,F(xiàn)PR8這里,假定大部分處理器都具有多周期浮點(diǎn)流水線,第二條指令在第一條指令開始執(zhí)行后再過(guò)幾個(gè)周期才能執(zhí)行。在這種情況下,盡管第三條指令的源寄存器或許預(yù)期已經(jīng)可用,而且預(yù)期第三條指令在第二條指令之前已經(jīng)準(zhǔn)備好可以執(zhí)行,但是編譯器不選擇不同的寄存器分配(因?yàn)榈谌龡l指令立即要覆蓋第二條指令用的FPR4值),就不能將這兩條指令對(duì)調(diào)。程序中選擇一種本來(lái)對(duì)一對(duì)指令來(lái)說(shuō)是較優(yōu)的寄存器分配往往會(huì)與另一對(duì)指令的最優(yōu)寄存器分配沖突。
高速緩存不命中的動(dòng)態(tài)行為,為亂序執(zhí)行比順序執(zhí)行計(jì)算機(jī)可以利用更多的指令級(jí)的并行性提供了一個(gè)實(shí)例。
LoopLoad GPR4,8(GPR5)AddGPR6,GPR6,GPR4Load GPR7,8(GPR3)AddGPR8,GPR8,GPR7Load GPR9,0(GPR6)Load GPR2,0(GPR8)…branch conditional Loop在這個(gè)實(shí)例中,在某些迭代上對(duì)于第一條Load(取數(shù)指令)會(huì)出現(xiàn)高速緩存不命中;在其他迭代上對(duì)第二條Load指令會(huì)有高速緩存不命中的情況。盡管在邏輯上存在兩個(gè)獨(dú)立的計(jì)算流,但在順序執(zhí)行的處理器中,處理將在高速緩存不命中之后會(huì)短時(shí)間暫停,直至高速緩存不命中的問(wèn)題解決之后才會(huì)繼續(xù)下去。
這個(gè)例子還表明,亂序執(zhí)行的串級(jí)作用;通過(guò)允許在被阻塞的指令(在本實(shí)例中是取決于高速緩存不命中的Load指令的一條指令)之外取得進(jìn)展,隨后的高速緩存不命中可以檢測(cè)出來(lái),與此相關(guān)的不命中代價(jià)可以(至少部分地)用原來(lái)的不命中來(lái)復(fù)蓋。對(duì)于多個(gè)不命中的復(fù)蓋高速緩存不命中代價(jià)的幾率,隨著對(duì)Load/Store(存數(shù)指令)執(zhí)行支持能力的增大而增大。
隨著時(shí)鐘速率變得越來(lái)越高,能夠用有用的計(jì)算和其他高速緩存不命中來(lái)復(fù)蓋高速緩存不命中的代價(jià)變得越來(lái)越重要了。
許多當(dāng)前的處理器都通過(guò)允許Load/Store單元以外的所有單元進(jìn)行亂序執(zhí)行來(lái)提取許多可用的指令級(jí)并行性。對(duì)非Load/非Store單元亂序執(zhí)行支持的機(jī)制大家都很清楚;兩條指令之間所有的潛在沖突都可以通過(guò)簡(jiǎn)單地比較指令中靜態(tài)指定的寄存器字段來(lái)檢測(cè)。
存儲(chǔ)器引用指令的亂序執(zhí)行是一個(gè)相當(dāng)困難的問(wèn)題,因?yàn)闆_突可能通過(guò)存儲(chǔ)器地址而發(fā)生,而且在不知道被引用的地址的情況下該沖突是無(wú)法檢測(cè)的。有效/虛擬地址的產(chǎn)生和到實(shí)地址的翻譯一般是作為存儲(chǔ)器引用指令執(zhí)行的一部分來(lái)完成的。因此,當(dāng)一個(gè)存儲(chǔ)器引用指令在另一個(gè)邏輯上較早的指令之前執(zhí)行時(shí),對(duì)邏輯上較早的指令來(lái)說(shuō),在執(zhí)行當(dāng)前指令的過(guò)程中該地址尚不可得,不能用于比較。
當(dāng)在亂序和重疊執(zhí)行的機(jī)器上完成Load和Store指令時(shí),若已確定,正在執(zhí)行的Load指令具有與以前的尚未完成的Store指令重疊的地址,則通常不是需要使Load指令在Store指令完成之前暫停,就是取消該Load指令及任何一個(gè)隨后的指令。
因此,在先有技術(shù)中需要一種在不需要或者讓Load指令在Store指令完成之前暫停、或者取消該Load指令及任何一個(gè)隨后的指令的情況下、把Store指令的數(shù)據(jù)前送給需要該數(shù)據(jù)的Load指令的系統(tǒng)和方法。
本發(fā)明就是針對(duì)上述需要的,若Store指令已經(jīng)翻譯,而且Load的地址范圍包含在Store的地址范圍之內(nèi),并且Store的數(shù)據(jù)已經(jīng)可用時(shí),就把Store數(shù)據(jù)向前送給Load指令。
在一個(gè)實(shí)施例中,本發(fā)明在12位的規(guī)模上完成Store和Load指令的有效地址位匹配。若匹配,則在16位的規(guī)模上完成有效地址位匹配,若與此過(guò)程匹配,則就Store和Load指令的實(shí)地址進(jìn)行比較。若實(shí)地址匹配,則將Store數(shù)據(jù)前送給Load指令。
在一個(gè)替代的實(shí)施例中,若實(shí)地址匹配,則判斷Store前送過(guò)程是被允許還是被禁止。
若完成Store數(shù)據(jù)前送,則Load指令從Store數(shù)據(jù)隊(duì)列而不是從存儲(chǔ)器子系統(tǒng)接收它的數(shù)據(jù)。
為了更好地理解本發(fā)明以下的詳細(xì)描述,上面粗略地描述了本發(fā)明的特征和技術(shù)上的優(yōu)點(diǎn)。本發(fā)明的其他特征和優(yōu)點(diǎn)將在以后以本發(fā)明的權(quán)利要求書要點(diǎn)的形式加以描述。
為了比較完全地理解本發(fā)明及其優(yōu)點(diǎn),現(xiàn)結(jié)合附圖參閱以下的描述。附圖中

圖1舉例說(shuō)明按照本發(fā)明配置的一種數(shù)據(jù)處理系統(tǒng);圖2舉例說(shuō)明按照本發(fā)明配置的處理器;圖3舉例說(shuō)明按照本發(fā)明配置的Load/Store單元的進(jìn)一步細(xì)節(jié);圖4舉例說(shuō)明在不實(shí)現(xiàn)Store前送的情況下Load-命中-Store的流程圖;圖5舉例說(shuō)明在不實(shí)現(xiàn)Store前送的情況下Load-命中-Store腳本的逐周期定時(shí)圖;圖6舉例說(shuō)明Load-命中-Store腳本的檢測(cè)和Store前送的實(shí)現(xiàn)的流程圖;圖7舉例說(shuō)明Load-命中-Store腳本中Store前送的逐周期定時(shí)圖;圖8舉例說(shuō)明按照本發(fā)明檢測(cè)Load-命中-Store腳本和實(shí)現(xiàn)Store前送的流程圖;以及圖9舉例說(shuō)明按照本發(fā)明檢測(cè)Load-命中-Store的腳本和實(shí)現(xiàn)Store前送的逐周期定時(shí)圖。
在下面的描述中,為了徹底理解本發(fā)明,將提出若干特定的細(xì)節(jié),諸如特定的字或字節(jié)長(zhǎng)度等。但是,對(duì)于本專業(yè)的技術(shù)人員來(lái)說(shuō),顯然沒(méi)有這樣一些特定的細(xì)節(jié),本發(fā)明也可以實(shí)現(xiàn)。在其他情況下,為了不使本發(fā)明受到不必要的細(xì)節(jié)的累贅,廣為人知的電路用框圖的形式表示。就大部分而言,只要定時(shí)的細(xì)節(jié)不是對(duì)完全理解本發(fā)明所必要的,而且是在本專業(yè)的普通技術(shù)人員理解范圍內(nèi)的,有關(guān)定時(shí)等考慮的細(xì)節(jié)一概從略。
現(xiàn)參照附圖,其中所描繪的元件不一定充分表示,而且其中相同或類似的元件在所有的視圖中都標(biāo)以相同的標(biāo)號(hào)。
首先參照?qǐng)D1,其中示出按照本發(fā)明配置的數(shù)據(jù)處理系統(tǒng)。該系統(tǒng)具有中央處理單元(CPU)210,諸如按照”PowerPC結(jié)構(gòu)RISC(簡(jiǎn)指令系統(tǒng)計(jì)算機(jī))處理器新家族的規(guī)格”,第二版,1994,Cathy May及其他版(本文通過(guò)參考而將其引入)的PowerPC微處理器(PowerPC是IBM公司的商標(biāo))。PowerPC微處理器具體的實(shí)現(xiàn)在”PowerPC 604RISC微處理器用戶手冊(cè)”,1994,IBM公司(本文通過(guò)參考而將其引入)中描述。這里描述的許多縮寫(例如,用來(lái)描述特定的指令)是PowerPC的指令,在這些參考書中有進(jìn)一步的描述。
CPU 210通過(guò)系統(tǒng)總線211耦合到各種其他部件。只讀存儲(chǔ)器(ROM)116耦合到系統(tǒng)總線211,并包括基本輸入/輸出系統(tǒng)(BIOS),它控制數(shù)據(jù)處理系統(tǒng)的某些基本功能。隨機(jī)存儲(chǔ)器(RAM)250、I/O(輸入/輸出)適配器118和通信適配器134也耦合到系統(tǒng)總線211。I/O適配器118可以是小型計(jì)算機(jī)系統(tǒng)接口(SCSI),它與磁盤存儲(chǔ)裝置120或磁帶存儲(chǔ)裝置140通信。I/O適配器118、磁盤存儲(chǔ)裝置120和磁帶存儲(chǔ)裝置140在這里亦稱海量存儲(chǔ)器252。通信適配器134把總線211連接到外部網(wǎng)絡(luò),使該數(shù)據(jù)處理系統(tǒng)可以與其他這樣的系統(tǒng)通信。輸入/輸出裝置也通過(guò)用戶接口適配器122和顯示器適配器136連接到系統(tǒng)總線211。鍵盤124、軌跡球132、鼠標(biāo)器126和擴(kuò)音器128全都通過(guò)用戶接口適配器122連接到總線211。顯示監(jiān)視器138用顯示適配器136連接到系統(tǒng)總線211。這樣,用戶可以通過(guò)鍵盤124、軌跡球132或鼠標(biāo)器126向系統(tǒng)輸入,或通過(guò)擴(kuò)音器128和顯示監(jiān)視器138接收系統(tǒng)的輸出。另外,操作系統(tǒng),諸如AIX(AIX是IBM公司的商標(biāo))用來(lái)協(xié)調(diào)圖1所示各組成部分的功能。
現(xiàn)參照?qǐng)D2,這里繪出按照后附權(quán)利要求書所列舉的本發(fā)明處理信息用的數(shù)據(jù)處理系統(tǒng)的示范性實(shí)施例的方框圖。在所描繪的示范性實(shí)施例中,CPU 210包括單一的集成電路超標(biāo)量微處理器。因此,正如后面將進(jìn)一步描述的,CPU 210包括各種執(zhí)行單元、寄存器、存儲(chǔ)器和其他功能單元,它們?nèi)加杉呻娐窐?gòu)成。正如圖2舉例說(shuō)明的,CPU 210通過(guò)總線接口單元(BIU)212和處理器總線213耦合到系統(tǒng)總線211,處理器總線象系統(tǒng)總線211一樣具有地址。數(shù)據(jù)和控制總線。BIU 212通過(guò)參與總線仲裁控制處理器210與連接到系統(tǒng)總線211上的其他裝置之間的信息傳遞,系統(tǒng)總線211對(duì)于理解下面的描述是不必要的,故此為簡(jiǎn)單起見而從略。
BIU 212連接到指令高速緩存和MMU(Memory ManagementUnit(存儲(chǔ)器管理單元))214和數(shù)據(jù)高速緩存和MMU 216,使CPU 210能夠達(dá)到相當(dāng)快的訪問(wèn)時(shí)間來(lái)訪問(wèn)以前從主存儲(chǔ)器250傳送到高速緩存的數(shù)據(jù)或指令的子集,以此改善數(shù)據(jù)處理系統(tǒng)的操作速度。分別儲(chǔ)存在數(shù)據(jù)和指令高速緩存中的數(shù)據(jù)和指令是通過(guò)地址標(biāo)記來(lái)識(shí)別和訪問(wèn)的,每一個(gè)地址標(biāo)記都包括數(shù)據(jù)或指令在主存儲(chǔ)器250中的物理地址的選定個(gè)數(shù)的高位。指令高速緩存和MMU 214還耦合到順序取指器217,后者每個(gè)周期都從指令高速緩存取出指令來(lái)執(zhí)行。取指器217把從指令高速緩存和MMU 214取出的轉(zhuǎn)移指令送到轉(zhuǎn)移處理單元(BPU)218來(lái)執(zhí)行,但是,臨時(shí)把順序指令存儲(chǔ)在指令隊(duì)列219內(nèi),以便由CPU 210內(nèi)的其他執(zhí)行電路執(zhí)行。
在所描繪的示范性實(shí)施例中,除了BPU 218以外,CPU 210的執(zhí)行電路包括多個(gè)用來(lái)執(zhí)行順序指令的執(zhí)行單元,包括定點(diǎn)單元(FXU)222、Load/Store單元(LSU)228和浮點(diǎn)單元(FPU)230,每一個(gè)執(zhí)行單元222,228和230一般都在一個(gè)處理器周期中執(zhí)行一個(gè)或多個(gè)特定類型的順序指令。例如,F(xiàn)XU 222利用從指定的通用存儲(chǔ)器(GPR)232接收的源操作數(shù),完成定點(diǎn)算術(shù)指令和邏輯指令,諸如,加、減、“與”、“或”、“異”。隨著定點(diǎn)指令的執(zhí)行,F(xiàn)XU 222把指令的數(shù)據(jù)結(jié)果輸出到GPR緩沖區(qū)232,后者為在結(jié)果總線262接收的結(jié)果提供存儲(chǔ)器。反之,F(xiàn)PU 230一般都對(duì)從浮點(diǎn)寄存器(FPR)236接收的源操作數(shù)完成單和雙精度浮點(diǎn)算術(shù)和邏輯操作,諸如,浮點(diǎn)乘和除。FPU 230把從浮點(diǎn)指令執(zhí)行結(jié)果數(shù)據(jù)輸出到選定的儲(chǔ)存結(jié)果數(shù)據(jù)的FPR緩沖區(qū)236。正如它的名字所暗含的,LSU 228一般執(zhí)行浮點(diǎn)和定點(diǎn)指令,后者不是從存儲(chǔ)器取數(shù)(Load)(亦即,數(shù)據(jù)高速緩存和MMU 216或主存儲(chǔ)器250中的數(shù)據(jù))放入選定的GPR 232或FPR 236中,就是從選定的GPR 232或FPR 236中的數(shù)據(jù)存入(Store)存儲(chǔ)器250。
CPU 210既使用流水線又使用指令的亂序執(zhí)行,以便進(jìn)一步改進(jìn)超標(biāo)量結(jié)構(gòu)的性能。因此,指令可以由FXU 222、LSU 228和FPU 230以任何順序執(zhí)行,只要數(shù)據(jù)的依賴性得到遵守。另外,指令以流水線級(jí)的順序由FXU 222、LSU 228和FPU 230中每一個(gè)處理。作為高性能處理器的典型,每一條順序指令都在流水線的5個(gè)不同的階段進(jìn)行處理,亦即,取指、譯碼/調(diào)度、執(zhí)行、結(jié)束和完成。
在取指階段,順序取指器217從指令高速緩存和MMU 214中取出與一個(gè)或多個(gè)存儲(chǔ)器地址相關(guān)的一條或多條指令。從指令高速緩存和MMU 214取出的順序指令由順序取指器217儲(chǔ)存在指令隊(duì)列219內(nèi)。相反,順序取指器217從指令流中把轉(zhuǎn)移指令取出(挑出),并把它們送到BPU 218去執(zhí)行。BPU 218包括轉(zhuǎn)移預(yù)測(cè)機(jī)制,后者在一個(gè)實(shí)施例中包括動(dòng)態(tài)預(yù)測(cè)機(jī)制,諸如轉(zhuǎn)移歷史表等。這使BPU 218能夠通過(guò)預(yù)測(cè)是否要轉(zhuǎn)移來(lái)預(yù)想執(zhí)行尚未解決的條件轉(zhuǎn)移指令。
在譯碼/調(diào)度階段,調(diào)度單元220進(jìn)行譯碼并一般按程序的順序把一條或多條指令從指令隊(duì)列219調(diào)度給執(zhí)行單元222,228和230。在比較傳統(tǒng)的處理器中,調(diào)度單元220為每一條調(diào)度的指令的結(jié)果數(shù)據(jù)在GPR重命名緩沖區(qū)233或FPR重命名緩沖區(qū)內(nèi)分配重命名緩沖區(qū),在調(diào)度階段,指令還儲(chǔ)存在完成單元240的多槽完成緩沖區(qū)內(nèi),等待完成。但是,本發(fā)明可以配置成這樣的實(shí)施例,即它不要求重命名寄存器,又不需要完成單元。按照所描繪的示范性實(shí)施例,在亂序執(zhí)行中CPU 210利用唯一的指令識(shí)別符來(lái)跟蹤所調(diào)度的指令的程序順序。
在執(zhí)行階段,執(zhí)行單元222,228和230根據(jù)時(shí)機(jī)在操作數(shù)和指定操作所需的執(zhí)行資源變得可用時(shí),執(zhí)行從調(diào)度單元220接收的指令。在一個(gè)實(shí)施例中,每一個(gè)執(zhí)行單元222,228和230都配備有保留站,用來(lái)在操作數(shù)或執(zhí)行資源變得可用之前儲(chǔ)存調(diào)度給該執(zhí)行單元的指令。該指令執(zhí)行結(jié)束之后,若有任何結(jié)果數(shù)據(jù),則執(zhí)行單元222,228和230根據(jù)指令類型將數(shù)據(jù)結(jié)果儲(chǔ)存在GPR或FPR內(nèi)。在比較傳統(tǒng)的處理器中,執(zhí)行單元222,228和230通知完成單元240哪一條指令已經(jīng)執(zhí)行結(jié)束了。最后,指令以程序的順序完成,從完成單元240的完成緩沖區(qū)出來(lái),指令由FXU 222或FPU 230通過(guò)把指令的數(shù)據(jù)結(jié)果分別從GPR重命名緩沖區(qū)233和FPR重命名緩沖區(qū)237傳送到GPR232和FPR236。由LSU 228執(zhí)行的Load和Store指令通過(guò)把已結(jié)束的指令傳送到完成Store隊(duì)列或完成Load隊(duì)列,由此將完成該指令指出的Load和Store操作。
本發(fā)明利用處理器的調(diào)度邏輯將經(jīng)典的馮諾曼指令流“語(yǔ)言符號(hào)化”(“tokenize”)為數(shù)據(jù)流風(fēng)格的格式。這樣,數(shù)據(jù)依賴關(guān)系就不是通過(guò)跟蹤每一條指令正如在寄存器重命名中所要求的源數(shù)據(jù)儲(chǔ)存地址來(lái)處理,而是通過(guò)將指令與某些通過(guò)引用另一條提供源數(shù)據(jù)的指令使跟蹤源數(shù)據(jù)成為可能的信息相聯(lián)系來(lái)處理。因此,處理器設(shè)置目的識(shí)別符(TID)發(fā)生器,它產(chǎn)生語(yǔ)言符號(hào)或標(biāo)記,后者的每一個(gè)都唯一地與正在調(diào)度的指令相聯(lián)系。TID用來(lái)保存程序次序信息和跟蹤數(shù)據(jù)的依賴關(guān)系。
在本發(fā)明中,調(diào)度單元220不只是分配TID和調(diào)度指令,而且更新各種用來(lái)跟蹤被調(diào)度指令的狀態(tài)的表格。
CPU 210支持亂序推測(cè)指令執(zhí)行。指令可以根據(jù)預(yù)測(cè)的轉(zhuǎn)移方向進(jìn)行推測(cè)或在可能引起中斷狀態(tài)的指令以外推測(cè)。萬(wàn)一轉(zhuǎn)移預(yù)測(cè)失準(zhǔn)或出現(xiàn)中斷的情況,硬件自動(dòng)從流水線沖掉不需要的指令,并放棄不需要的結(jié)果,呈現(xiàn)準(zhǔn)確例外的效果并沿著適當(dāng)?shù)霓D(zhuǎn)移路徑往下順序地執(zhí)行指令。在一個(gè)時(shí)鐘周期內(nèi)將不正確的推測(cè)結(jié)果選擇性地從所有單元沖掉,并可以在下一個(gè)時(shí)鐘周期繼續(xù)指令調(diào)度。每一組由未解決的轉(zhuǎn)移或可中斷的指令所包圍的指令賦予一組識(shí)別符標(biāo)記(GID)。
現(xiàn)就一種實(shí)現(xiàn)描述本發(fā)明,該實(shí)現(xiàn)包括多個(gè)Load單元和一個(gè)Store單元。但是,對(duì)于本專業(yè)的技術(shù)人員來(lái)說(shuō),顯然,可以對(duì)本發(fā)明進(jìn)行修改來(lái)處理其他配置,諸如,單獨(dú)一個(gè)Load/Store單元等。所提出的本發(fā)明允許Load指令就其他Load和Store指令而言亂序執(zhí)行,而且它允許Store對(duì)所有Load指令而言亂序執(zhí)行。
如上所述,所有指令都以這樣的方式加標(biāo)記,使得任何兩條指令之間的相對(duì)年齡可以容易地確定。關(guān)于這種描述,假定一種(TID)值單調(diào)增長(zhǎng)的機(jī)制。每一條指令的TID值都與它在隊(duì)列項(xiàng)目或流水線的階段相聯(lián)系。
在與沖掉命令相聯(lián)系的TID和與特定的隊(duì)列項(xiàng)目或功能單元級(jí)相聯(lián)系的TID之間進(jìn)行數(shù)量級(jí)的比較,若一個(gè)項(xiàng)目是一條與被沖掉的指令一樣或更年輕的指令用的,則將該項(xiàng)目判為無(wú)效,用這樣的方法,這一基于TID的方法就允許硬件實(shí)現(xiàn)一條指令的沖掉機(jī)制(響應(yīng)處理器產(chǎn)生的沖掉命令)。其余所有被沖掉的指令(及所有后續(xù)指令)都被從計(jì)算機(jī)沖掉,而取指單元改變方向在被沖掉的指令的地址開始取指。
接著參照?qǐng)D3,這里舉例說(shuō)明與指令隊(duì)列219及指令高速緩存214耦合的Load/Store單元228的進(jìn)一步的細(xì)節(jié)。還舉例說(shuō)明浮點(diǎn)單元230。圖3舉例說(shuō)明基本功能單元和指令隊(duì)列。功能單元是群集器A 307和群集器B 308和Store單元302。本發(fā)明集中在三個(gè)隊(duì)列和這些隊(duì)列之間和Load與Store單元之間的互鎖周圍。這三個(gè)隊(duì)列是。Store地址隊(duì)列303,。”預(yù)取數(shù)”隊(duì)列309和。Load-命中-Load隊(duì)列315。
這些隊(duì)列中每一個(gè)的項(xiàng)目都包括與該項(xiàng)目相聯(lián)系的指令TID(或年齡指示器)、操作數(shù)地址和操作數(shù)字節(jié)計(jì)數(shù)。這些信息允許在一個(gè)項(xiàng)目與其他任何一個(gè)存儲(chǔ)器引用之間的相對(duì)年齡判定,并允許重疊檢測(cè),若要求則可一直下到字節(jié)級(jí)。
在一個(gè)實(shí)施例中,在調(diào)度”以下”以及Load和Store單元”以上”有兩個(gè)指令隊(duì)列所有被調(diào)度的Load指令在等待在Load單元中執(zhí)行時(shí)都排入”PEQ“306隊(duì)列中,而所有Store指令在等待在Store單元302執(zhí)行時(shí)都排入”SPQ”301隊(duì)列中。在每一個(gè)周期開始時(shí),硬件確定哪一個(gè)Store是已調(diào)度但尚未翻譯的最老的Store,若有這樣一個(gè)Store存在的話。對(duì)于上述指令隊(duì)列結(jié)構(gòu),這包括檢驗(yàn)Store單元(或幾個(gè)單元)尋找任何未翻譯的Store。若有任何一個(gè)存在,則將最老的一個(gè)定為”最老的未翻譯Store”。若不存在,則檢驗(yàn)SPQ 301以尋找最老的未翻譯Store。若找到一個(gè)這樣的Store,則將其定為”最老的未翻譯Store”。若找不到,則”最老的未翻譯Store”指針內(nèi)定指向下一條準(zhǔn)備調(diào)度的指令。
Store地址隊(duì)列303是所有已經(jīng)翻譯,但相關(guān)數(shù)據(jù)尚未寫入L1高速緩存301,311的Store指令的先進(jìn)先出(FIFO)清單。正在執(zhí)行Store指令的翻譯結(jié)果是建立項(xiàng)目。把相關(guān)數(shù)據(jù)寫入L1高速緩存310,311的結(jié)果是把項(xiàng)目移走。與Store地址隊(duì)列303相關(guān)的是Store數(shù)據(jù)隊(duì)列304。當(dāng)Store指令被調(diào)度時(shí),在Store數(shù)據(jù)隊(duì)列304中分配項(xiàng)目。若Store數(shù)據(jù)在項(xiàng)目分配時(shí)可用,則該數(shù)據(jù)放入Store數(shù)據(jù)隊(duì)列304。否則,當(dāng)該數(shù)據(jù)由功能單元產(chǎn)生時(shí),Store數(shù)據(jù)隊(duì)列304將窺探結(jié)果總線,并在Store數(shù)據(jù)隊(duì)列304獲取該數(shù)據(jù)。象Store地址隊(duì)列303一樣,隨著字節(jié)寫入L1高速緩存310,311,項(xiàng)目被清除。
Store數(shù)據(jù)隊(duì)列304和Store地址隊(duì)列303都耦合到Store數(shù)據(jù)隊(duì)列處理單元305,后者耦合到Load不命中隊(duì)列312,而該隊(duì)列又耦合到L2高速緩存仲裁邏輯313。因?yàn)閷?duì)這些單元的描述對(duì)描述本發(fā)明而言是不必要的,所以對(duì)它們不再作進(jìn)一步的描述。請(qǐng)注意,在Load/Store單元228內(nèi)還可以實(shí)現(xiàn)其他功能塊,但為簡(jiǎn)單清晰起見沒(méi)有示出。
若執(zhí)行單元302和SPQ 301都并行地以同樣的權(quán)重進(jìn)行檢驗(yàn),則本發(fā)明可以擴(kuò)展成Store指令對(duì)其他Store指令而言是亂序執(zhí)行的情況。在本說(shuō)明書中,假定Store是順序執(zhí)行的;因此,以較高的優(yōu)先級(jí)首先檢驗(yàn)執(zhí)行單元302,以便把該Store指令建立為”最老的未翻譯Store”。Store的順序執(zhí)行還意味著,可以把Store地址隊(duì)列303作為先入先出(FIFO)隊(duì)列管理,而不必?fù)?dān)心由于Store地址隊(duì)列空間而死鎖。
預(yù)取數(shù)隊(duì)列309是本發(fā)明特有的,并保存所有在邏輯上跟在”最老的未翻譯Store”之后的已翻譯的Load地址。在每個(gè)周期的開始,判定是否有任何正在Load單元執(zhí)行的Load指令在邏輯上是跟在”最老的未翻譯Store”之后的指令。若有,則認(rèn)為它們是”預(yù)取數(shù)”(preload),并在預(yù)取數(shù)隊(duì)列309中要求一個(gè)項(xiàng)目來(lái)執(zhí)行。若在預(yù)取數(shù)隊(duì)列309沒(méi)有地方,但又需要一個(gè)項(xiàng)目,結(jié)果將產(chǎn)生以下兩個(gè)動(dòng)作之一<1>若正在執(zhí)行的Load指令比預(yù)取數(shù)隊(duì)列309中所有的Load年輕(在邏輯上在它們之后),則這個(gè)load指令(及所有隨后的指令)從機(jī)器210沖掉,而取指單元217改變方向,以便在沖掉的Load指令的地址上開始取指。
<2>若在預(yù)取數(shù)隊(duì)列309中有一個(gè)項(xiàng)目比正在執(zhí)行的要求預(yù)取數(shù)隊(duì)列項(xiàng)目的Load指令年輕,則沖掉預(yù)取數(shù)隊(duì)列309中最年輕的load指令(及所有隨后的指令),并且重新取指,并把預(yù)取數(shù)隊(duì)列309中被沖掉的Load的項(xiàng)目給予正在執(zhí)行的Load指令。
為了允許多于一個(gè)正在執(zhí)行的Load在同一個(gè)周期中要求預(yù)取數(shù)隊(duì)列項(xiàng)目的實(shí)現(xiàn),可直接地對(duì)上述進(jìn)行修改,亦即結(jié)果就象是該Load指令按上述規(guī)則處理,一次處理一個(gè)Load指令,從最老的Load開始。例如,若正在執(zhí)行的兩個(gè)Load指令每一個(gè)都要求預(yù)取數(shù)隊(duì)列項(xiàng)目,但只有一個(gè)項(xiàng)目存在,則正在執(zhí)行的最老的Load指令取得該可用的項(xiàng)目,而正在執(zhí)行的最年輕的Load遵循上述對(duì)已滿隊(duì)列309的規(guī)則。
每個(gè)周期結(jié)束時(shí),預(yù)取數(shù)隊(duì)列309中的有效項(xiàng)目與”最老的未翻譯Store”進(jìn)行年齡比較;任何比”最老的未翻譯Store”老的(在邏輯上在其之前的)項(xiàng)目都判為無(wú)效(放棄)。若預(yù)取數(shù)隊(duì)列項(xiàng)目是一個(gè)沖掉命令的對(duì)象指令(或更年輕的指令)用的,則預(yù)取數(shù)隊(duì)列項(xiàng)目也可以作為沖掉命令的結(jié)果而被判為無(wú)效。
Store地址隊(duì)列303含有已經(jīng)翻譯但是尚未把它們的數(shù)據(jù)寫入L1高速緩存310,311的Store的地址。另外,為了本發(fā)明使用的目的,這個(gè)隊(duì)列303允許Store去翻譯和在不等待Store數(shù)據(jù)的情況下檢測(cè)例外。使Store指令的這兩部分去耦,是處理器210(對(duì)存儲(chǔ)器引用它通常進(jìn)行地址產(chǎn)生/翻譯)的定點(diǎn)部分與浮點(diǎn)部分230(它產(chǎn)生/歸一化浮點(diǎn)數(shù)據(jù))去耦的關(guān)鍵。幾個(gè)當(dāng)前的設(shè)計(jì)包括這樣的Store地址隊(duì)列303。正如在大多數(shù)實(shí)現(xiàn)中一樣,Store地址隊(duì)列303按照先進(jìn)先出(FIFO)方式管理,而Store地址隊(duì)列303中最老的項(xiàng)目是下一個(gè)要寫入L1高速緩存310,311的項(xiàng)目。對(duì)于本專業(yè)的技術(shù)人員來(lái)說(shuō),顯然,最老的項(xiàng)目以外的其他項(xiàng)目可以寫入L1高速緩存310,311,允許較年輕但已有數(shù)據(jù)的Store指令在等待數(shù)據(jù)的較老的Store指令之前寫入。還應(yīng)該清楚,本發(fā)明正如所描述的無(wú)需修改即可處理這一改進(jìn)。
Store地址隊(duì)列項(xiàng)目在以下兩種情況下被判為無(wú)效·相關(guān)的Store操作對(duì)L1高速緩存310,311已經(jīng)完成,或者·沖掉命令用信號(hào)表明Store地址隊(duì)列的項(xiàng)目應(yīng)當(dāng)放棄,因?yàn)樗戎噶顩_掉命令的對(duì)象年輕。
Load-命中-Load隊(duì)列315是本發(fā)明特有的,并保存所有已翻譯的在邏輯上跟在最老未翻譯Load或Store之后的Load指令地址。在每個(gè)周期開始時(shí),判定是否有任何在Load單元中執(zhí)行的Load指令是在邏輯上跟在最老未翻譯Load或Store之后的指令。若有,則它們?cè)贚oad-命中-Load隊(duì)列315中要求一個(gè)項(xiàng)目來(lái)執(zhí)行。若在Load-命中-Load隊(duì)列315中已經(jīng)沒(méi)有地方但又需要項(xiàng)目,則結(jié)果會(huì)執(zhí)行以下兩個(gè)動(dòng)作之一<1>若執(zhí)行中的Load比Load-命中-Load隊(duì)列315中所有的Load指令都年輕(在邏輯上在它們之后),則這個(gè)Load(及其后的所有指令)從機(jī)器210沖掉,而取指單元217改變方向,在被沖掉的Load指令地址開始取指。
<2>若Load-命中-Load隊(duì)列315中的一個(gè)項(xiàng)目比執(zhí)行中的要求預(yù)取數(shù)隊(duì)列項(xiàng)目的Load指令年輕,則Load-命中-Load隊(duì)列315中最年輕的Load指令(及其隨后的指令)都沖掉,并重新取指,并將Load-命中-Load隊(duì)列315中被沖掉的Load的項(xiàng)目給予執(zhí)行中的Load指令。
為了允許多于一個(gè)正在執(zhí)行的Load在同一個(gè)周期中要求Load-命中-Load隊(duì)列項(xiàng)目的實(shí)現(xiàn),可直接地對(duì)上述進(jìn)行修改。亦即結(jié)果就象是該Load指令按上述規(guī)則處理,一次處理一個(gè)Load指令,從最老的Load開始。例如,若正在執(zhí)行的兩個(gè)Load指令每一個(gè)都要求Load-命中-Load隊(duì)列項(xiàng)目,但又只有一個(gè)項(xiàng)目存在,則正在執(zhí)行的最老的Load指令取得該可用的項(xiàng)目,而正在執(zhí)行的最年輕的Load遵循對(duì)已滿的隊(duì)列315的上述規(guī)則。
每個(gè)周期結(jié)束時(shí),將Load-命中-Load隊(duì)列315中的有效項(xiàng)目與最老未翻譯Load指令和最老未翻譯Store指令進(jìn)行年齡比較;比最老未翻譯Load指令和最老未翻譯Store指令還老的任何項(xiàng)目都被判為無(wú)效(放棄)。若該Load-命中-Load隊(duì)列項(xiàng)目是沖掉命令對(duì)象指令(或更年輕的指令)的Load指令用的項(xiàng)目,則Load-命中-Load隊(duì)列項(xiàng)目也可以作為沖掉命令的結(jié)果被判為無(wú)效。
注意,預(yù)取數(shù)隊(duì)列309和Load-命中-Load隊(duì)列315含有類似信息,而在某些實(shí)現(xiàn)中,可以合并成單一結(jié)構(gòu)。
上面的描述給出了在本發(fā)明以下三個(gè)一次隊(duì)列中項(xiàng)目建立和放棄的條件的細(xì)節(jié)預(yù)取數(shù)隊(duì)列309、Store地址隊(duì)列303和Load-命中-Load隊(duì)列315。下一節(jié)給出在隊(duì)列項(xiàng)目之間進(jìn)行的以提供以前描述的結(jié)構(gòu)存儲(chǔ)器一致性要求的地址檢查的細(xì)節(jié)。
考慮一個(gè)例子,其中Load要求來(lái)自Store的數(shù)據(jù),load在Store執(zhí)行之后執(zhí)行,以及Load操作從L1高速緩存310,311取得了數(shù)據(jù),而同時(shí)Store操作仍舊排在Store地址隊(duì)列303中(亦即,在Store操作更新L1高速緩存310,311之前;亦稱完成)。
若Store已經(jīng)翻譯,Load地址范圍包含在Store的地址范圍內(nèi),而且Store數(shù)據(jù)可用,則可以把Store的數(shù)據(jù)向前送給Load指令,并允許機(jī)器210向前執(zhí)行。本發(fā)明的Store前送/Load-命中-Load檢測(cè)邏輯取得了優(yōu)化的優(yōu)點(diǎn),該優(yōu)化由于處理器210分別打破Load和Store跨越32位和16位邊界而成為可能。另外,對(duì)數(shù)據(jù)能夠前送的限制允許格式化和前送硬件的優(yōu)化。由于在Load/Store執(zhí)行周期過(guò)程中翻譯地址的潛在因素,從性能考慮最好或許是把前送測(cè)試分成Load和Store地址已翻譯位測(cè)試之后的多項(xiàng)基于頁(yè)偏移量位的測(cè)試。涉及指令提交的重疊測(cè)試由于有混淆的可能要以實(shí)地址為依據(jù);但是,為了推測(cè)執(zhí)行,Load-命中-Store的預(yù)測(cè)和可能的前送可以在有效地址的基礎(chǔ)上完成。
Store前送是Load-命中-Load腳本的特殊情況,并因此還與Load-命中-Store檢測(cè)邏輯共享某些硬件。Load-命中-Store和Store-命中-Load機(jī)制在交叉引用美國(guó)專利申請(qǐng)序列號(hào)No.08/829,669中描述了。當(dāng)出現(xiàn)Load-命中-Store腳本時(shí),若Load地址范圍包含在Store地址范圍內(nèi),而且下述條件得到滿足,則Load指令從Store數(shù)據(jù)隊(duì)列304接收它的數(shù)據(jù),而不是從L1高速緩存310,311或從其他存儲(chǔ)器子系統(tǒng)組件接收數(shù)據(jù)。
下面是前送操作的概述。若Load指令(包括所有定點(diǎn)和浮點(diǎn)Load,LWARX,ECIWX,但不包括取多個(gè)數(shù)/取串LMX,LSWX和LSWI)在周期1執(zhí)行,而它碰到(低位16位有效地址op尺寸比較)一個(gè)(邏輯上早于)Store操作(在此上下文下,Store包括Store地址隊(duì)列303中所有要求Store地址隊(duì)列項(xiàng)目的指令定點(diǎn)和浮點(diǎn)Store,STWCX,SYNC,ICBI,DCBx,EIEIO,TLBSYNC,TLBIE和ECOWX),Load將保存在群集器執(zhí)行單元307,308中,而且再執(zhí)行一個(gè)周期。在判定Store地址隊(duì)列項(xiàng)目是否在邏輯上早于對(duì)象Load的過(guò)程中,比較相關(guān)的TID。所有標(biāo)有”已提交”(Store已經(jīng)翻譯,而且從IIT(未示出)移出)的Store地址隊(duì)列項(xiàng)目都保證比這個(gè)Load老,而不管TID比較結(jié)果為何。若一個(gè)Load指令碰到一個(gè)以上Store地址隊(duì)列項(xiàng)目,則只有最年輕出問(wèn)題的Store被認(rèn)為是命中。
在周期2中,對(duì)Load和Store指令的32實(shí)地址(RA)位進(jìn)行比較,以確定它是否真正的Load-命中-Store狀態(tài)。地址/TID比較在周期2中完成,而Store地址隊(duì)列303會(huì)包括任何在周期1翻譯的Store指令,但不會(huì)包括在回寫比較周期(周期2)中翻譯的Store指令。
若32位實(shí)地址比較表明它不是Load-命中-Store(亦即無(wú)字節(jié)重疊),則IDU 220用信號(hào)在周期3表示沖掉。若32位實(shí)地址比較表明它是Load-命中-Store(亦即,一個(gè)或多個(gè)字節(jié)重疊),則a)若Store前送被禁止,則IDU 220將用信號(hào)在周期3表示沖掉所述Load。
b)若Store前送被允許,則若數(shù)據(jù)可用,則在重執(zhí)行的第一周期完成該Load指令(無(wú)沖掉)。若滿足下列條件,則數(shù)據(jù)可用a)Load數(shù)據(jù)包含在單獨(dú)一個(gè)SDQ項(xiàng)目中;b)SDQ項(xiàng)目中的數(shù)據(jù)有效;c)不論Load還是Store都是在I=1空間(兩個(gè)都是可高速緩存地址);d)Load不跨越16字節(jié)邊界;而且e)下列各對(duì)Store/Load、尺寸/對(duì)齊中的一對(duì)為真1.STB 前送到LB2.STH 前送到LH3.STW/STFS前送到LW或LFS
4.STWBRX前送到LWBRX5.STHWBRX 前送到LHBRX6.字對(duì)齊STW 前送到LB或LH7.字對(duì)齊STFS前送到LB,LH,LW或LFS8.字對(duì)齊STFD前送到LB,LH,LW或LFS9.字對(duì)齊STMW前送到LB,LH,LW或LFS10.字對(duì)齊STSWX/I前送到LB,LH,LW或LFS應(yīng)用情況9和10就象是SDQ項(xiàng)目是由各個(gè)字對(duì)齊字訪問(wèn)(情況6)的集合建立的。若該字含有少于4字節(jié),則情況10不允許前送。
若數(shù)據(jù)不可用,則IDU 220將在周期3用信號(hào)表示Flush(沖掉)Load指令。若數(shù)據(jù)可用,則與L1高速緩存命中情況相比數(shù)據(jù)前送延遲一個(gè)周期。
Store地址隊(duì)列303和Store數(shù)據(jù)隊(duì)列304含有與檢測(cè)潛在Store前送腳本相關(guān)的外加邏輯,為Store前送提供數(shù)據(jù),沖掉不成功的Store前送機(jī)會(huì)。下面一節(jié)將描述Load-命中-Store邏輯和Store前送如何利用有效地址和實(shí)地址比較。本節(jié)描述Store/Load尺寸和對(duì)齊(上述規(guī)則e)如何確定,Store前送是否能發(fā)生,及如何完成必要的格式化。這假定Load-命中-Store重疊已得到核實(shí)。然后,最年輕的有問(wèn)題的Store指令的數(shù)據(jù)可用性和Load/Store尺寸/對(duì)齊(上述規(guī)則a至e)確定前送是否會(huì)發(fā)生。
上述規(guī)則e的前5項(xiàng)相當(dāng)于Load和Store之間的精確尺寸和對(duì)齊匹配。檢測(cè)這一狀態(tài)就要求Load和Store之間準(zhǔn)確的實(shí)地址比較(因此,同樣對(duì)齊),以及Load和Store同樣尺寸。只要不橫跨16字節(jié)邊界,Load和Store可以不對(duì)齊。
規(guī)則e的第6項(xiàng)至第10項(xiàng)允許不同尺寸的Load和Stored有限的前送。若Store字或Store雙字是字對(duì)齊的,則除了Load字(這也包括在前5項(xiàng)中)之外,Store數(shù)據(jù)還可以前送到Load字節(jié)和Load半字節(jié)。檢測(cè)第6項(xiàng)至第10項(xiàng)的可用性要求Load和Store之間的準(zhǔn)確比較,但最后兩位除外。若Load指令是字節(jié)Load,則Store字可以前送到Load。若Load是半字,則Store字可以前送到Load,只要Load地址的最后兩位不是二進(jìn)制的”11”。
為完成Store前送,規(guī)則e的前5項(xiàng)并不要求任何格式化。每一個(gè)執(zhí)行群集器307,308用的12端口多路開關(guān)(未示出)選擇要前送的Store數(shù)據(jù)隊(duì)列項(xiàng)目。將信號(hào)送到群集器,以便把該項(xiàng)目直接傳送到結(jié)果總線262,因?yàn)闊o(wú)需格式化。第6至10項(xiàng)要求Store數(shù)據(jù)在返回到結(jié)果總線262之前移位0至3字節(jié)。因?yàn)樵谶@些規(guī)則中,Store是字對(duì)齊的,執(zhí)行群集器可以使用從L1高速緩存的輸出要求的同樣的格式化器以及已經(jīng)由Load地址為正確移位量正確配置的控制。Store前送邏輯只需要根據(jù)Load地址指出是否應(yīng)該取前送數(shù)據(jù),或者Load格式化器是否必須對(duì)數(shù)據(jù)進(jìn)行移位。
當(dāng)已經(jīng)檢測(cè)到Load-命中-Store,并確定了最年輕的有問(wèn)題的Store時(shí),用12端口多路開關(guān)(未示出)選擇對(duì)應(yīng)的Store數(shù)據(jù)隊(duì)列項(xiàng)目。一旦執(zhí)行群集器307,308由于Load-命中-Store狀態(tài)而停住,群集器307,308假定它會(huì)從Store數(shù)據(jù)隊(duì)列304接收有效數(shù)據(jù)。若上述Store前送規(guī)則得不到滿足,則Store前送邏輯將對(duì)Load指令發(fā)出Flush命令。
圖4表示Load-命中-Store檢測(cè)流程,假定不實(shí)現(xiàn)Store前送。圖5舉例說(shuō)明Load的可能的定時(shí),假定L1高速緩存命中而且TSA(Translation Shadow Array(翻譯陰影陣列))命中。在Load的執(zhí)行周期中,在該Load指令與Store地址隊(duì)列303每一個(gè)有效項(xiàng)之間進(jìn)行12位有效地址重疊比較。在執(zhí)行周期中12位有效地址重疊比較把已翻譯地址可用時(shí)在下一個(gè)周期中要求的比較邏輯減到最小。若Load翻譯成功,則在下一周期中完成實(shí)地址比較。因?yàn)?2位有效地址重疊比較已在前一周期中完成,而且當(dāng)Load和Store跨越32位和16位邊界時(shí),Load和Store分解成多個(gè)Load和Store這一事實(shí),故只需要完成12位頁(yè)地址相等比較。能夠在完全翻譯地址之前完成12位重疊比較,就減少了關(guān)鍵的路徑定時(shí),因?yàn)?2位重疊測(cè)試包括一組數(shù)量級(jí)比較,后者比24位相等性比較慢。為了避免亂序執(zhí)行機(jī)器出現(xiàn)死鎖,當(dāng)不支持Store前送時(shí),若在Store地址隊(duì)列303中Load與Store重疊,則Load和所有指令以及Load之后的結(jié)果都從處理器210沖掉。
圖6舉例說(shuō)明一個(gè)實(shí)施例中檢測(cè)Load-命中-Store腳本和實(shí)現(xiàn)Store前送的流程圖。圖7舉例說(shuō)明這樣一種Load-命中-Store腳本下Store前送的逐周期定時(shí)。在Load的執(zhí)行周期中,在該Load和Store地址隊(duì)列303的每一個(gè)有效項(xiàng)之間進(jìn)行12位有效地址重疊比較。若12位有效地址與一個(gè)Store地址隊(duì)列項(xiàng)匹配,則執(zhí)行群集器307,308暫停。下一個(gè)周期,若Load翻譯成功,則完成實(shí)地址比較。若實(shí)地址不匹配,則上一個(gè)周期從L1高速緩存310,311取出的數(shù)據(jù)返回到結(jié)果總線262送往GPR 232。若實(shí)地址匹配,并滿足Store前送規(guī)則,則Store的數(shù)據(jù)前送到該Load。若實(shí)地址匹配,但不滿足Store前送要求,則Load被沖掉。
遺憾的是,正如圖7所示的情況B要求執(zhí)行群集器307,308能夠在執(zhí)行周期中保存從L1高速緩存310,311取出的數(shù)據(jù),而若Load-命中-Store條件為假,則下一個(gè)周期把該數(shù)據(jù)前送到它的結(jié)果總線262。其結(jié)果是,在定時(shí)已經(jīng)很關(guān)鍵的路徑上要求增加周期時(shí)間。已發(fā)現(xiàn)的另一個(gè)選擇涉及利用12位有效地址重疊比較來(lái)確定群集器307,308是否應(yīng)該暫停,而且然后在下一個(gè)周期中,若Store數(shù)據(jù)不能滿足Load的要求,則應(yīng)將Load沖掉。這一選擇的結(jié)果是額外的Load沖掉,使總體性能降低。
本發(fā)明實(shí)現(xiàn)替代的Store前送機(jī)制,它是以已經(jīng)設(shè)計(jì)的Load-命中-Store硬件為基礎(chǔ)的。為了讓Store前送的結(jié)果是使凈性能提高,不能象圖6和7實(shí)施例那樣要延長(zhǎng)處理器的周期時(shí)間。那個(gè)實(shí)施例要求數(shù)據(jù)流路徑在確定Load-命中-Store的周期中保存Load的結(jié)果。這一數(shù)據(jù)流路徑可以決定整個(gè)芯片的周期時(shí)間,所以,延長(zhǎng)路徑來(lái)完成Store前送不能提高整體性能。研制了另一個(gè)方案,使得即使在執(zhí)行之后的周期之前還不會(huì)發(fā)生實(shí)地址比較,也不需要保存Load的結(jié)果。執(zhí)行群集器是否要暫停的判決在執(zhí)行周期中完成,但是一旦執(zhí)行群集器暫停,不是需要從Store隊(duì)列將數(shù)據(jù)前送,就是必須沖掉Load。
這另一方案的實(shí)施例示于圖8和9。下面將進(jìn)一步描述情況A,B,C,D。在執(zhí)行周期中,12位和16位有效地址比較都已完成。若12位有效地址重疊比較對(duì)Store地址隊(duì)列所有的有效項(xiàng)都失敗,則沒(méi)有Load-命中-Store,而Load可以把它的數(shù)據(jù)返回到結(jié)果總線262送往GPR 232。若12位有效地址與Store地址隊(duì)列項(xiàng)匹配,但是16位有效地址不匹配,則本發(fā)明推想沒(méi)有Load-命中-Store,而執(zhí)行群集器307,308不暫停。在很少出現(xiàn)的虛擬-到-實(shí)地址混淆的事件中,若有效地址不重疊,但是實(shí)地址重疊,則沖掉Load。(因?yàn)閳?zhí)行群集器307,308不暫停,處理器210不能把Store數(shù)據(jù)前送到Load)若Load的16位有效地址與Store地址隊(duì)列項(xiàng)匹配,則執(zhí)行群集器307,308預(yù)想到Load-命中-Store沖掉,或者Store數(shù)據(jù)前送而暫停。若下一個(gè)周期實(shí)地址匹配,則本發(fā)明確定前送是否符合上述規(guī)則。否則沖掉Load。
注意,若16位有效地址匹配,但是實(shí)地址不匹配,則盡管不出現(xiàn)Load-命中-Store狀態(tài)也發(fā)生沖掉。其結(jié)果是,Load-命中-Store檢測(cè)為假,并引起不必要地取消指令的執(zhí)行。本發(fā)明比較4個(gè)額外的地址位來(lái)減少它的出現(xiàn)次數(shù)。這一Load-命中-Store為假的代價(jià)必須小于出現(xiàn)Store前送而得到的性能增益。所得的Store前送實(shí)現(xiàn)提高了Load在不引起周期時(shí)間延長(zhǎng)的情況下執(zhí)行的百分比。因此,處理器210的整體性能由于Store前送的這一實(shí)現(xiàn)而得到改善。
就圖8注解1而言,Load數(shù)據(jù)可能已在前一個(gè)周期正確地取出。但是由于16位有效地址比較,該過(guò)程確定,發(fā)生潛在的Load-命中-Store狀態(tài),并選擇使執(zhí)行群集器307,308暫停,強(qiáng)迫Store單元不是前送來(lái)自Store數(shù)據(jù)隊(duì)列的數(shù)據(jù),就是沖掉Load指令。
就圖8注解2而言,在16位有效地址不重疊,但是實(shí)地址重疊時(shí)出現(xiàn)地址空間混淆。處理器210檢測(cè)到這一情況以便正確執(zhí)行。因?yàn)閳?zhí)行群集器307,308不暫停,本發(fā)明取消了把Store數(shù)據(jù)前送到Load的選擇。但是這種情況是極其罕見的。
在12位比較中用的地址低位不受翻譯影響,而且缺少?zèng)]有Load-命中-Store沖突或Store前送機(jī)會(huì)的匹配保證。但是,完成16位比較用的剩余位是翻譯的。所以,從16位比較結(jié)果來(lái)的初始步驟基本上是以外加的有效地址位之間的匹配(或不匹配)準(zhǔn)確地反映兩個(gè)地址的整組翻譯位之間的匹配(和不匹配)這一預(yù)測(cè)為基礎(chǔ)的。注意,在所有這一預(yù)測(cè)不正確的情況下,Load操作(及隨后的指令)都沖掉并重新取指,從預(yù)測(cè)不準(zhǔn)中恢復(fù)過(guò)來(lái)。
圖8和9所示的各種情況是情況A-無(wú)Load Store重疊。
有效地址的任何低12位都不與任何Store項(xiàng)匹配,或若低12為匹配,而有效地址低16位不匹配,而且下一周期頁(yè)地址對(duì)該Store項(xiàng)比較失敗。
情況B-實(shí)行群集器暫停,而不能前送數(shù)據(jù)。
16位有效地址比較,而且不能前送數(shù)據(jù)->沖掉不是Load_命中-Store,而且不能前送數(shù)據(jù),就是頁(yè)地址不匹配,因此不能前送數(shù)據(jù)。
情況C-Load_命中-Store,同時(shí)Store數(shù)據(jù)前送至Load。
情況D-Load_命中-Store,其中低16位有效地址不匹配,但因虛擬到實(shí)地址混淆,Load的實(shí)地址與Store實(shí)地址重疊。若實(shí)地址相等,但有效地址不匹配,則處理器210在這種稀少的情況下不前送數(shù)據(jù),以減輕周期時(shí)間的問(wèn)題。
盡管已經(jīng)詳細(xì)地描述了本發(fā)明及其優(yōu)點(diǎn),但應(yīng)明白,這里在不離開本發(fā)明在后附權(quán)利要求書所定義的精神和范圍的情況下可以作出各種改變、替代和更換。
權(quán)利要求
1.一種把Store指令的結(jié)果數(shù)據(jù)前送給Load指令的方法,其中當(dāng)所述Load指令正在執(zhí)行時(shí),該Store指令尚未更新所述數(shù)據(jù),其特征在于所述方法包括以下步驟確定在所述Load指令的地址和所述Store指令的地址之間是否有任何共同的字節(jié);確定Load指令是否在邏輯上跟在所述Store指令之后;以及若在所述Load指令的所述地址和所述Store指令的所述地址之間有任何共同的字節(jié),而且若所述Load指令在邏輯上跟在所述Store指令后面,則把所述數(shù)據(jù)前送給所述Load指令。
2.權(quán)利要求1所敘述的方法,其特征在于所述Store指令位于與Store執(zhí)行單元耦合的Store地址隊(duì)列中,而其中所述數(shù)據(jù)位于Store數(shù)據(jù)隊(duì)列中。
3.權(quán)利要求1所敘述的方法,其特征在于它還包括確定所述數(shù)據(jù)是否可用的步驟。
4.權(quán)利要求1所敘述的方法,其特征在于所述Store指令在所述確定步驟之前已經(jīng)翻譯。
5.權(quán)利要求2所敘述的方法,其特征在于所述前送步驟還包括把所述數(shù)據(jù)從所述Store數(shù)據(jù)隊(duì)列送到執(zhí)行所述Load指令的Load執(zhí)行單元的步驟。
6.權(quán)利要求2所敘述的方法,其特征在于所述確定步驟還包括把所述Load指令與所述Store地址隊(duì)列中的Store指令加以比較的步驟。
7.權(quán)利要求1所敘述的方法,其特征在于所述在所述Load指令的所述地址和所述Store指令的所述地址之間確定是否有任何共同字節(jié)的步驟還包括比較所述Load指令和所述Store指令的有效地址;以及比較所述Load指令和所述Store指令的實(shí)地址。
8.權(quán)利要求7所敘述的方法,其特征在于所述比較有效地址的步驟還包括以下步驟比較所述Load指令和所述Store指令的所述有效地址的低N位;以及若所述低N位匹配,則比較所述Load指令和所述Store指令的所述有效地址的低M位,其中N小于M。
9.權(quán)利要求3所敘述的方法,其特征在于它還包括若所述數(shù)據(jù)不可用則沖掉所述Load指令的步驟。
10.在包括通過(guò)系統(tǒng)總線耦合到存儲(chǔ)器系統(tǒng)的處理器的數(shù)據(jù)處理系統(tǒng)中,一種方法包括以下步驟把Store指令調(diào)度給Store執(zhí)行單元;在所述Store執(zhí)行單元中執(zhí)行所述Store指令;在所述Store指令所述執(zhí)行之后把所述Store指令傳送到Store地址隊(duì)列,其中與所述Store指令相聯(lián)系的數(shù)據(jù)是在Store數(shù)據(jù)隊(duì)列中;把Load指令調(diào)度給Load執(zhí)行單元,其中所述Load指令在邏輯上跟在所述Store指令之后;在所述Load執(zhí)行單元中執(zhí)行所述Load指令;把所述Load指令的有效地址與所述Store指令的有效地址加以比較;若所述Load指令的所述有效地址與所述Store指令的所述有效地址匹配,則把所述Load指令的實(shí)地址與所述Store指令的實(shí)地址加以比較;以及若所述Load指令的所述實(shí)地址與所述Store指令的所述實(shí)地址匹配,則把來(lái)自所述Store數(shù)據(jù)隊(duì)列的所述數(shù)據(jù)前送給所述Load指令。
11.權(quán)利要求10所敘述的方法,其特征在于若所述數(shù)據(jù)可用,則執(zhí)行所述前送步驟。
12.權(quán)利要求10所敘述的方法,其特征在于在所述Store地址隊(duì)列中的所述Store指令已經(jīng)翻譯。
13.權(quán)利要求10所敘述的方法,其特征在于所述比較有效地址的步驟還包括下列步驟比較所述Load指令和所述Store指令的所述有效地址的低N位;以及若所述低N位匹配,則比較所述Load指令和所述Store指令的所述有效地址的低M位,其中N小于M。
14.一種處理器,其特征在于包括指令調(diào)度單元;Load執(zhí)行單元,可操作來(lái)從所述指令調(diào)度單元接收Load指令;Store執(zhí)行單元,可操作來(lái)從所述指令調(diào)度單元接收Store指令,其中所述Load指令在邏輯上跟在所述Store指令之后;與所述Store執(zhí)行單元耦合的Store數(shù)據(jù)隊(duì)列;與所述Store執(zhí)行單元耦合的Store地址隊(duì)列;在所述Store執(zhí)行單元中執(zhí)行所述Store指令用的電路;在所述Store指令的所述執(zhí)行之后,把所述Store指令傳送到所述Store地址隊(duì)列用的電路,其中與所述Store指令相關(guān)聯(lián)的數(shù)據(jù)是在所述Store數(shù)據(jù)隊(duì)列中;在所述Load執(zhí)行單元中執(zhí)行所述Load指令用的電路;比較所述Load指令地址和所述Store指令地址用的電路;若所述Load指令的所述地址和所述Store指令的所述地址匹配,則把所述數(shù)據(jù)從所述Store數(shù)據(jù)隊(duì)列前送到所述Load指令用的電路。
15.權(quán)利要求14所敘述的處理器,其特征在于所述比較電路還包括比較所述Load指令的有效地址和所述Store指令的有效地址用的電路;以及若所述Load指令的所述有效地址和所述Store指令的所述有效地址匹配,則比較所述Load指令的實(shí)地址和所述Store指令的實(shí)地址用的電路,其中若所述實(shí)地址匹配,則完成所述數(shù)據(jù)的所述前送。
16.權(quán)利要求15所敘述的處理器,其特征在于所述比較所述有效地址用的電路還包括比較所述Load指令和所述Store指令的所述有效地址低12位用的電路;比較所述Load指令和所述Store指令的所述有效地址低16位用的電路
17.在一種處理器中,一種把來(lái)自Store數(shù)據(jù)隊(duì)列的數(shù)據(jù)和Store指令得出的數(shù)據(jù)前送給Load指令的方法,其中所述Load指令是在Load執(zhí)行單元中執(zhí)行的,其特征在于所述方法包括以下步驟確定在所述Load指令的有效地址和所述Store指令的有效地址之間是否有任何共同的字節(jié);若在所述Load指令的所述有效地址和所述Store指令的所述有效地址之間有任何共同的字節(jié),則使所述Load執(zhí)行單元中的所述Load指令暫停;確定所述Load指令的實(shí)地址與所述Store指令的實(shí)地址是否匹配;若所述Load指令的所述實(shí)地址和所述Store指令的所述實(shí)地址匹配,則把所述數(shù)據(jù)前送到所述Load執(zhí)行單元。
18.權(quán)利要求17所敘述的方法,其特征在于所述方法還包括判定所述Load指令是否在邏輯上跟在所述Store指令后面的步驟。
19.權(quán)利要求17所敘述的方法,其特征在于若所述Load指令的所述有效地址與所述Store指令的所述有效地址之間有任何共同的字節(jié),則完成所述判定所述Load指令的所述實(shí)地址是否與所述Store指令的所述實(shí)地址匹配的步驟。
20.權(quán)利要求17所敘述的方法,其特征在于所述判定所述Load指令的所述有效地址與所述Store指令的所述有效地址之間是否有任何共同字節(jié)的步驟還包括以下步驟比較所述Load指令和所述Store指令的所述有效地址的低N位;以及若所述低N位匹配,則比較所述Load指令和所述Store指令的所述有效地址的低M位,其中N小于M。
21.權(quán)利要求20所敘述的方法,其特征在于它還包括若所述低N位不匹配,則所述Load指令向前正常執(zhí)行的步驟。
22.權(quán)利要求20所敘述的方法,其特征在于它還包括若所述低M位不匹配,則所述Load指令向前正常執(zhí)行的步驟。
23.權(quán)利要求19所敘述的方法,其特征在于它還包括若所述實(shí)地址不匹配,則沖掉所述Load指令的步驟。
24.在處理器中的一種方法,其特征在于包括以下步驟比較Load指令的有效地址和Store指令的有效地址;以及根據(jù)所述Load指令的所述有效地址是否與所述Store指令的所述有效地址匹配,來(lái)預(yù)測(cè)所述Load指令的實(shí)地址是否會(huì)與所述Store指令的實(shí)地址匹配。
25.權(quán)利要求24所敘述的方法,其特征在于所述預(yù)測(cè)步驟還包括若所述Load指令的所述有效地址與所述Store指令的所述有效地址匹配,則預(yù)測(cè)所述Load指令的實(shí)地址會(huì)與所述Store指令的實(shí)地址匹配的步驟。
26.權(quán)利要求25所敘述的方法,其特征在于所述Load指令在Load執(zhí)行單元中執(zhí)行,而且所述方法還包括若所述Load指令的所述有效地址與所述Store指令的所述有效地址匹配,則使所述Load指令的執(zhí)行暫停的步驟。
27.權(quán)利要求26所敘述的方法,其特征在于它還包括若所述Load指令的所述有效地址與所述Store指令的所述有效地址不匹配,則使所述Load指令向前正常執(zhí)行的步驟。
28.權(quán)利要求26所敘述的方法,其特征在于它還包括若所述Load指令的所述實(shí)地址與所述Store指令的所述實(shí)地址不匹配,則沖掉所述Load指令的步驟。
29.權(quán)利要求26所敘述的方法,其特征在于它還包括當(dāng)所述Load指令的所述實(shí)地址與所述Store指令的所述實(shí)地址匹配時(shí),把與所述Store指令相關(guān)的數(shù)據(jù)前送給所述Load執(zhí)行單元的步驟。
30.權(quán)利要求25所敘述的方法,其特征在于所述比較所述Load指令的所述有效地址是否與所述Store指令的所述有效地址匹配的步驟還包括以下步驟比較所述Load指令和所述Store指令的所述有效地址的低N位;以及若所述低N位匹配,則比較所述Load指令和所述Store指令的所述有效地址的低M位,其中N小于M。
31.權(quán)利要求24所敘述的方法,其特征在于所述預(yù)測(cè)步驟還包括若所述Load指令的所述有效地址與所述Store指令的所述有效地址不匹配,則預(yù)測(cè)所述Load指令的所述實(shí)地址不會(huì)與所述Store指令的所述實(shí)地址匹配的步驟。
32.權(quán)利要求31所敘述的方法,其特征在于它還包括若所述Load指令的所述實(shí)地址與所述Store指令的所述實(shí)地址匹配,則沖掉所述Load指令的步驟。
全文摘要
在一種實(shí)現(xiàn)Load和Store指令亂序調(diào)度和執(zhí)行的超標(biāo)量處理器中,若Store指令已經(jīng)翻譯,Load指令的Load地址范圍包含在該Store指令的地址范圍內(nèi),而且與該Store指令相關(guān)的數(shù)據(jù)可用,則把與該Store指令相關(guān)的數(shù)據(jù)前送給該Load指令,使得該Load指令可以在不被迫暫?;虿槐粵_掉的情況下繼續(xù)執(zhí)行。
文檔編號(hào)G06F9/38GK1195809SQ9810577
公開日1998年10月14日 申請(qǐng)日期1998年3月19日 優(yōu)先權(quán)日1997年4月10日
發(fā)明者K·A·費(fèi)斯提, J·S·穆希徹, L·E·特徹, S·W·懷特 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
万全县| 巧家县| 乌拉特中旗| 屯门区| 长宁区| 双柏县| 阆中市| 元氏县| 隆子县| 泽库县| 朝阳市| 英德市| 和田市| 大城县| 嘉祥县| 宜川县| 女性| 昆山市| 栖霞市| 新野县| 屯昌县| 八宿县| 博乐市| 基隆市| 社会| 东丽区| 定兴县| 历史| 祁连县| 龙陵县| 凤台县| 绥中县| 中江县| 石狮市| 黔西县| 揭东县| 乐陵市| 张家口市| 江西省| 宜黄县| 海原县|