本發(fā)明一般涉及一種執(zhí)行加載指令以從處理器中的存儲器加載信息的過程,更具體地涉及執(zhí)行高速緩存行未對齊加載指令以加載跨越高速緩存行邊界的數(shù)據(jù)的系統(tǒng)和方法。
背景技術(shù):
計算機程序包括用于執(zhí)行程序的功能的指令,包括從存儲器讀取數(shù)據(jù)的加載指令。典型的計算機系統(tǒng)包括:用于執(zhí)行指令的處理器;和耦合到處理器的外部系統(tǒng)存儲器,用于存儲計算機程序的部分和可應(yīng)用的數(shù)據(jù)和信息。本文所用的術(shù)語“處理器”是指任何類型的處理單元,包括微處理器、中央處理單元(cpu)、一個或多個處理核心、微控制器等。本文所用的術(shù)語“處理器”還包括任何類型的處理器配置,例如集成在芯片或集成電路(ic)上的處理單元,包括集成在芯片上的系統(tǒng)(soc)等中的處理器配置。
從系統(tǒng)存儲器加載數(shù)據(jù)消耗寶貴的處理時間,因此處理器通常包括用于加載處理數(shù)據(jù)的較小且顯著更快的高速緩沖存儲器。高速緩沖存儲器的至少一部分通常被并入處理器內(nèi)用于更快地訪問。一些高速緩沖存儲器可以在外部定位,但是通常通過單獨的和/或?qū)S玫母咚倬彺婵偩€連接來實現(xiàn)更高的性能。多個數(shù)據(jù)塊可以一次被復(fù)制到高速緩沖存儲器中,并且當從高速緩沖存儲器而不是較大和較慢的外部系統(tǒng)存儲器操作時,處理器運行得更快、更有效。高速緩沖存儲器被組織為一系列高速緩存行,其中每個高速緩存行通常具有預(yù)定長度。例如,通常一個高速緩存行尺寸是64字節(jié),但可以考慮替代的高速緩存行尺寸。
計算機程序可以執(zhí)行一個或多個加載指令以從高速緩沖存儲器中的特定存儲器位置加載指定量的數(shù)據(jù)。每個加載指令可以包括加載地址和數(shù)據(jù)長度。然而,軟件程序中指定的加載地址可能不一定與處理器用于訪問高速緩存的物理地址相同。包括基于x86指令集架構(gòu)的現(xiàn)代處理器可以執(zhí)行地址轉(zhuǎn)換,包括分段和分頁等,其中加載地址被轉(zhuǎn)換成完全不同的物理地址以訪問高速緩沖存儲器。此外,一個或多個加載指令可能不直接與高速緩存行尺寸對齊。因此,存儲器讀取操作可能會嘗試加載跨越高速緩存行邊界的數(shù)據(jù),這意味著指定的數(shù)據(jù)在一個高速緩存行上開始并且在下一個高速緩存行上結(jié)束。由于目標數(shù)據(jù)占用多個緩存行,所以這種類型的存儲器讀操作被稱為緩存行未對齊加載。通常需要一種特殊的方法來處理緩存行未對齊的加載操作,因為不能通過單個正常加載請求擷取數(shù)據(jù)?,F(xiàn)代處理器通常使用流行的高速緩存結(jié)構(gòu),其中對于單個加載請求,只有一條緩存行可以訪問,因此高速緩存行未對齊加載操作必須以不同的方式處理,從而不利地影響性能。
用于處理高速緩存行未對齊加載操作的常規(guī)解決方案是低效的,并且已經(jīng)消耗了寶貴的處理時間以最終擷取正確的數(shù)據(jù)。導(dǎo)致大量高速緩存行未對齊加載操作的軟件程序和應(yīng)用程序?qū)е虏僮餍实拖拢阅芙档汀?/p>
技術(shù)實現(xiàn)要素:
根據(jù)一個實施例,能夠執(zhí)行高速緩存行未對齊加載指令的處理器包括調(diào)度器、存儲器執(zhí)行單元和合并單元。調(diào)度器分派用于執(zhí)行的加載指令。存儲器執(zhí)行單元執(zhí)行加載指令,并且當加載指令被確定為高速緩存行未對齊加載指令時,存儲器執(zhí)行單元推遲調(diào)度器,確定遞增地址到下一個順序高速緩存行,使用遞增地址在存儲器執(zhí)行單元的輸入處插入高速緩存行未對齊加載指令的副本作為第二加載指令,并且通過執(zhí)行高速緩存行未對齊加載指令從第一高速緩存行擷取第一數(shù)據(jù)。存儲器執(zhí)行單元執(zhí)行第二加載指令以從下一個順序高速緩存行擷取第二數(shù)據(jù)。合并單元將第一數(shù)據(jù)的第一部分數(shù)據(jù)與第二數(shù)據(jù)的第二部分數(shù)據(jù)合并,以提供結(jié)果數(shù)據(jù)。
處理器可以調(diào)整由高速緩存行未對齊加載指令指定的地址以從第一高速緩存行擷取數(shù)據(jù)??梢允褂弥付〝?shù)據(jù)長度和下一個順序高速緩存行的地址進行這種調(diào)整。高速緩存行未對齊加載之后插入的第二個加載指令可能包括增加的地址和指定數(shù)據(jù)長度。合并單元可以將第一數(shù)據(jù)附加到第二數(shù)據(jù),以將第一部分數(shù)據(jù)與第二部分數(shù)據(jù)組合以隔離結(jié)果數(shù)據(jù)。
存儲器執(zhí)行單元可以使調(diào)度器推遲一個周期,以在存儲器執(zhí)行單元的輸入處插入第二加載指令。第二個加載指令可以在高速緩存行未對齊的加載指令之后立即被插入。存儲器執(zhí)行單元可以使調(diào)度器推遲分派依賴于高速緩存行非對齊加載指令的另一個加載指令和/或任何其他指令。存儲器執(zhí)行單元可以在插入第二加載指令之后重新啟動調(diào)度器。
根據(jù)一個實施例,能夠執(zhí)行高速緩存行未對齊加載指令的方法包括由調(diào)度器分派用于執(zhí)行的加載指令,確定在執(zhí)行期間所分派的加載指令是否為高速緩存未對齊的加載指令,以及當發(fā)送加載指令被確定為緩存未對齊加載指令時,推遲分派執(zhí)行指令的調(diào)度器,插入用于執(zhí)行的第二加載指令,其中第二加載指令是高速緩存未對齊加載指令的副本,其使用指向下一個順序高速緩存行的遞增地址,作為執(zhí)行緩存未對齊加載指令的結(jié)果從第一高速緩存行擷取第一數(shù)據(jù),作為執(zhí)行第二加載指令的結(jié)果從下一個順序高速緩存行擷取第二數(shù)據(jù),以及合并部分數(shù)據(jù)的第一數(shù)據(jù)與第二數(shù)據(jù)的部分數(shù)據(jù)以提供用于緩存的結(jié)果數(shù)據(jù)用于未對齊的加載指令。
該方法可以包括基于與高速緩存未對齊加載指令和遞增地址一起提供的的指定數(shù)據(jù)長度來調(diào)整高速緩存未對齊加載指令使用的地址。該方法可以包括將第一數(shù)據(jù)附加到第二數(shù)據(jù),以及隔離并組合第一數(shù)據(jù)的第一部分數(shù)據(jù)和第二數(shù)據(jù)的第二部分數(shù)據(jù)以提供結(jié)果數(shù)據(jù)。該方法可以包括將第二加載指令作為下一個加載指令插入到高速緩存行未對齊加載指令之后。該方法可以包括推遲調(diào)度器以不分派依賴于高速緩存行非對齊加載指令的另一個加載指令和/或任何另一指令。該方法可以包括在插入第二加載指令之后重新啟動調(diào)度器。該方法可以包括在合并部分數(shù)據(jù)之前存儲第一和第二數(shù)據(jù)中的至少一個。
附圖說明
關(guān)于以下描述和附圖,將更好地理解本發(fā)明的益處,特征和優(yōu)點,其中:
圖1是根據(jù)本發(fā)明的一個實施例的超標量流水線處理器的簡化框圖,其執(zhí)行高速緩存行未對齊加載指令;
圖2是示出根據(jù)本發(fā)明的一個實施例的由圖1的合并單元執(zhí)行的合并操作的結(jié)果的簡化圖;和
圖3是示出根據(jù)本發(fā)明的實施例的圖1的用于執(zhí)行高速緩存行未對齊的加載指令的處理器推遲流水線執(zhí)行的流程圖。
具體實施方式
發(fā)明人已經(jīng)認識到與執(zhí)行高速緩存行未對齊加載指令相關(guān)聯(lián)的低效率和較低的性能。因此,他開發(fā)了一種推遲高速緩存行未對齊加載指令的流水線執(zhí)行的系統(tǒng)和方法,包括立即將具有遞增地址的相同加載指令插入下一個高速緩存行進入流水線,并合并結(jié)果。
圖1是根據(jù)本發(fā)明的一個實施例的執(zhí)行高速緩存行未對齊加載指令的超標量流水線處理器100的簡化框圖。處理器100的宏架構(gòu)可以是x86宏架構(gòu),其中它可以正確地執(zhí)行被設(shè)計為在x86處理器上執(zhí)行的大多數(shù)應(yīng)用程序。如果獲得了預(yù)期的結(jié)果,則應(yīng)用程序被正確執(zhí)行。特別地,處理器100執(zhí)行x86指令集的指令并且包括x86用戶可見的寄存器集。然而,本發(fā)明不限于x86架構(gòu),其中處理器100可以是根據(jù)本領(lǐng)域普通技術(shù)人員已知的任何替代架構(gòu)。
在所示實施例中,處理器100具有多階段的流水線架構(gòu),包括發(fā)射階段102、分派階段104、執(zhí)行階段106和回寫階段108。這些階段用虛線分開表示,每個通常描繪一組用于基于一個或多個時鐘信號來控制定時的同步鎖存器等。發(fā)射階段102包括前端110,其通常進行操作以從位于外部系統(tǒng)存儲器118中的應(yīng)用或程序擷取高速緩存行,將所擷取的信息解碼并轉(zhuǎn)換為指令,并將轉(zhuǎn)換的指令按照程序順序發(fā)射到調(diào)度階段104。前端110可以包括:例如擷取和存儲包括程序指令的高速緩存行的指令高速緩存(未示出);指令解碼器和轉(zhuǎn)換器(未示出),其將高速緩存行從指令高速緩存轉(zhuǎn)換為指令,用于執(zhí)行;以及寄存器別名表(rat)(未示出),基于其程序順序、對其指定的操作數(shù)源以及重命名信息來生成針對每個指令的依賴性信息。
在一個實施例中,存儲在系統(tǒng)存儲器118中的應(yīng)用程序或軟件程序包含處理器100的宏指令集的宏指令(例如,x86指令集體系結(jié)構(gòu))。系統(tǒng)存儲器118被組織成一定尺寸的高速緩存行,例如64字節(jié)(64b)等。系統(tǒng)存儲器118經(jīng)由高速緩存存儲器116接口連接到處理器100,高速緩沖存儲器116可以包括多個高速緩存級,例如級1(l1)級2(l2)高速緩存,級3(l3)高速緩存等。在一個實施例中,前端110中的指令高速緩存可以是用于從存儲在系統(tǒng)存儲器118中的程序或應(yīng)用擷取高速緩存行的l1高速緩存,而高速緩存存儲器116中的l1高速緩存可以存儲從用于系統(tǒng)存儲器118加載的數(shù)據(jù)或者存儲用于存儲到系統(tǒng)存儲器118中的數(shù)據(jù)。高速緩存存儲器116內(nèi)的l2高速緩存可以是用于存儲指令和數(shù)據(jù)二者的統(tǒng)一高速緩存。前端110將所擷取的高速緩存行解析或解碼為宏指令,然后將宏指令轉(zhuǎn)換成適合于由處理器100執(zhí)行的微指令集的微指令。微指令在本文中通常被稱為“指令”,其由處理器100執(zhí)行。
前端110將轉(zhuǎn)換的指令及其相關(guān)聯(lián)的依賴性信息發(fā)射到調(diào)度階段104的調(diào)度器112。調(diào)度器112包括一個或多個隊列,以保持從rat(在前端110,未示出)接收的指令和依賴性信息。當準備執(zhí)行時,調(diào)度器112將指令分派到執(zhí)行階段106。當其所有依賴關(guān)系被解析并且執(zhí)行單元可用于執(zhí)行指令時,就準備好可以執(zhí)行指令。諸如浮點指令(例如,媒體類型指令等)或整數(shù)指令等的功能指令被分派到功能執(zhí)行單元(未示出)。包括加載和存儲指令的存儲器指令被分派到存儲器順序緩沖器(mob)114。mob114包括一個或多個加載和存儲流水線或組合的加載/存儲流水線。mob114訪問高速緩沖存儲器116,其存儲從系統(tǒng)存儲器118加載的數(shù)據(jù)和信息,或以其他方式最終存儲到系統(tǒng)存儲器118中。術(shù)語“mob”是執(zhí)行存儲器類型指令的存儲器執(zhí)行單元的常見專有詞匯,包括加載和存儲指令。
結(jié)合發(fā)出指令,rat(在前端110,未示出)中還為重新排序緩沖器(rob)120中的指令分配條目,該重新排序緩沖器(rob)120被示出位于寫回階段108中。因此,指令以程序順序分配到rob120中,rob120可以被配置為循環(huán)隊列,以確保指令以程序順序回退(retire)。在某些配置中,rob120內(nèi)的分配的條目還可以包括用于存儲一旦執(zhí)行的指令的結(jié)果的諸如寄存器等的存儲器空間?;蛘?,處理器100包括單獨的物理寄存器文件(prf),其中所分配的條目可以包括指向prf內(nèi)的分配的寄存器的指針,用于存儲結(jié)果信息。例如,加載指令從高速緩存存儲器116擷取數(shù)據(jù),并將數(shù)據(jù)臨時存儲到prf中的分配的寄存器中。
mob114接收加載指令并且確定加載是高速緩存行對齊還是未對齊。每個加載指令都包含指定的地址和指定的數(shù)據(jù)長度。mob114將加載指令的地址轉(zhuǎn)換為虛擬地址,虛擬地址最終被轉(zhuǎn)換為用于直接訪問高速緩存存儲器116的物理地址。注意,虛擬地址可能足以進行對齊確定(高速緩存行對齊或未對齊),因為虛擬地址的可用的較低位與物理地址相同(兩者都參考存儲器內(nèi)的相同尺寸的頁面)。在一個實施例中,例如,使用4k字節(jié)的頁面,其中虛擬地址和物理地址的低12位是相同的。一旦知道了虛擬地址,并給出了由加載指令本身指定的數(shù)據(jù)長度,mob114就可以確定加載指令是對齊還是未對齊。時間點是在加載指令從調(diào)度器112分派到mob114之后的時刻,例如在加載指令分派之后的下一個時鐘周期內(nèi),并且比mob114獲得實際物理地址進行對齊或未對齊的判斷的時間點要提早許多。
如果加載不是高速緩存行未對齊的加載指令,則最終確定用于虛擬地址的對應(yīng)物理地址,諸如從轉(zhuǎn)換后備緩沖器(translationlook-asidebuffertlb)擷取或作為表行走處理過程的結(jié)果等,并且mob114使用物理地址從存儲在高速緩存存儲器116中的高速緩存行(其最終可以從系統(tǒng)存儲器118擷取)訪問數(shù)據(jù)。結(jié)果沿著路徑122提供結(jié)果到rob120,用于存儲到rob120中或分配的prf和/或前遞(forwarding)到另一個執(zhí)行單元以供另一個指令等使用。
如果相反,加載是高速緩存行未對齊的加載指令,則mob114以類似的方式開始處理加載,其中一旦確定了該加載就使用該物理地址來從存儲在高速緩沖存儲器116中的第一高速緩存行訪問數(shù)據(jù)的一部分。然而,可以基于指定的數(shù)據(jù)長度來調(diào)整指定的地址。指定的地址指向當前高速緩存行內(nèi)的某個位置,否則數(shù)據(jù)長度超出當前高速緩存行到下一個連續(xù)高速緩存行。因此,當前高速緩存行僅包括目標數(shù)據(jù)的一部分,使得高速緩存行未對齊加載指令僅返回部分結(jié)果。如下面進一步描述的,可以通過下一個順序高速緩存行的地址與前述指定數(shù)據(jù)長度之間的差來調(diào)整地址。
mob114包括重新加載電路124,其在加載是高速緩存行未對齊加載指令的情況下執(zhí)行附加功能;重新加載電路124可以被認為是mob114的一部分,或者可以單獨提供重新加載電路124。盡管mob114處理具有調(diào)整后地址的高速緩存行未對齊加載指令,但是重新加載電路124可以向調(diào)度器112發(fā)出推遲(stall)信號,以推遲或凍結(jié)調(diào)度程序112不對至少一個周期的任何相關(guān)指令進行調(diào)度。在一個實施例中,所述相關(guān)指令包括將由調(diào)度器112在該未對齊加載指令之后從調(diào)度器112中的加載隊列(未示出)分派的另一加載指令,并且相關(guān)指令還可以包括依賴于未對齊加載指令的任何其他指令。也就是說,在一些實施例中,喚醒(wakeup)/廣播(broadcast)窗口也被推遲至少一個周期,以防止分派的未對齊加載指令喚醒依賴于未對齊加載指令的指令。同時,重新加載電路124將指定的加載地址“遞增”到下一個連續(xù)高速緩存行的開頭,并且將沿著路徑126的具有增加的地址的加載指令“重新加載”或者重新分派到mob114的前面。這里使用的術(shù)語“增加”及其變體應(yīng)用于遞增地址并不意味著增加一個或任何預(yù)定量(例如,字節(jié),高速緩存行等),而是意在表示地址增加到下一個順序高速緩存行的開頭。在一個實施例中,調(diào)度器112暫時推遲一個周期,并且將具有遞增地址和相同數(shù)據(jù)長度的相同加載指令作為正好在原始高速緩存行未對齊加載指令之后的下一條指令進行分派。
在重新加載電路124在mob114的輸入端插入具有遞增地址的加載指令之后,它將否定stall信號以重新啟動調(diào)度程序112以恢復(fù)分派操作。值得注意的是,該推遲包括凍結(jié)寄存器和加載分派后的任何相關(guān)路徑。在一個實施例中,這可以通過臨時設(shè)置時鐘使能來禁用以保持相關(guān)寄存器和相關(guān)流水線級的當前狀態(tài)來實現(xiàn),這意味著將不再分派更多的加載指令。在一些實施例中,未對齊加載指令的回寫和前遞也被推遲一個周期,以進一步防止未對齊的加載指令將其結(jié)果寫回prf或?qū)⑵浣Y(jié)果前遞到依賴于未對齊加載指令的指令的源(source)。
同時,當由原始高速緩存行未對齊加載指令擷取數(shù)據(jù),而不是經(jīng)由路徑122將結(jié)果提供給rob120時,mob114將結(jié)果存儲到存儲器128中。以這種方式,存儲器128存儲來自第一高速緩存行的數(shù)據(jù),如ld1所示,其是部分數(shù)據(jù),因為它僅包括原始加載指令所預(yù)期的原始目標數(shù)據(jù)的一部分。同時,mob114以與遞增地址以外的第一加載指令相同的遞增地址和指定數(shù)據(jù)長度來處理第二加載指令,以從下一個連續(xù)高速緩存行的開始擷取數(shù)據(jù)。當從第二加載指令擷取數(shù)據(jù)時,mob114將數(shù)據(jù)的其余部分(如ld2所示)從第二高速緩存行存儲到存儲器128中。ld2也是部分數(shù)據(jù),因為僅包括原始目標數(shù)據(jù)的剩余部分。mob114(或重新加載電路124等)然后指令執(zhí)行階段106內(nèi)的合并單元130將ld1和ld2合并成結(jié)果數(shù)據(jù)。mob114或合并單元130然后通過路徑122提供合并的結(jié)果數(shù)據(jù),以便存儲在rob120中或在分配的prf的寄存器中(并前遞,如果適用的話)。注意,重新加載電路124、存儲器128和合并單元130可以全部并入mob114中,并且可以被認為是mob114的一部分。在這樣的實施例中,mob114在其確定加載為高速緩存行未對齊加載指令之后其自身立即同時執(zhí)行stall(推遲)和reload(重新加載)操作。
圖2是示出根據(jù)本發(fā)明的一個實施例的由合并單元130執(zhí)行的合并操作的結(jié)果的簡化圖。該圖示出了一種類型的“字節(jié)順序”(例如,大端或小端),其中應(yīng)當理解,字節(jié)的相反排序是同樣的。在該示例中,高速緩存存儲器116的高速緩存行長度為64字節(jié)(64b),未對齊加載指令指定數(shù)據(jù)的16字節(jié)(16b)的數(shù)據(jù)長度(dl)。緩存行未對齊的加載指令的原始地址(如ula所示)出現(xiàn)在第一高速緩存行cl1內(nèi),其中cl1僅包括高速緩存行末尾的所請求數(shù)據(jù)的前5個字節(jié)(5b)。根據(jù)高速緩存行操作,整個高速緩存行cl1(地址cl1a)被從本地l1高速緩存訪問或以其他方式加載到本地l1高速緩存中以訪問所請求的數(shù)據(jù)。所請求數(shù)據(jù)的剩余11b發(fā)生在下一個高速緩存行cl2的開頭。
由于原始加載指令的指定數(shù)據(jù)長度dl為16字節(jié),所以可以由mob114將未對齊加載指令地址ula轉(zhuǎn)換為調(diào)整的加載地址ala,以從第一高速緩存行cl1加載16個字節(jié),包括目標數(shù)據(jù)的5字節(jié)部分。在一個實施例中,通過基于下一個連續(xù)高速緩存行的起始地址和指定數(shù)據(jù)長度之間的差來替換指定的地址ula來確定經(jīng)調(diào)整的加載地址ala。如圖所示,例如,指定數(shù)據(jù)長度為dl,下一個順序高速緩存行cl2的地址被示為cl2a(與第一高速緩存行cl1的結(jié)尾相同),使得ala=cl2a-dl。具有調(diào)整地址的高速緩存行未對齊的加載指令的執(zhí)行結(jié)果是ld1,其包括原始加載請求的第一部分數(shù)據(jù)。
由重新加載電路124(或mob114)確定的遞增加載地址是下一個高速緩存行cl2或cl2a的開始。第二加載指令包括地址cl2a和原始指定的為16字節(jié)的數(shù)據(jù)長度dl,因此它將加載目標數(shù)據(jù)剩余的11個字節(jié)部分以及在末尾附加的附加5b。執(zhí)行具有遞增地址的第二加載指令的結(jié)果是ld2,其包括原始加載請求的第二部分數(shù)據(jù)或剩余部分。
作為如本文所述執(zhí)行高速緩存行未對齊加載指令和第二加載指令的結(jié)果,如202所示的第一高速緩存行cl1的16個字節(jié)作為ld1存儲在存儲器128中,并且第二高速緩存行cl2(如204所示)的16字節(jié)作為ld2存儲在存儲器128中。將結(jié)果附加在一起以將第一部分數(shù)據(jù)與第二部分數(shù)據(jù)組合,并且所請求的16字節(jié)結(jié)果部分被隔離并作為結(jié)果數(shù)據(jù)可加載到結(jié)果寄存器206??梢圆捎酶鞣N方法來附加兩個加載指令的結(jié)果,并將結(jié)果合并或?qū)⒔Y(jié)果隔離到適用的目的地寄存器206中,包括加載、移位、掩蔽、反轉(zhuǎn)等,或其任何組合。注意,ld1和ld2中的第一個返回的一個可以被存儲到存儲器128中,其中合并單元130在ld1和ld2中的第二個返回時合并結(jié)果,而不必存儲到存儲器128中。
圖3是示出根據(jù)本發(fā)明的實施例的處理器100推遲用于執(zhí)行高速緩存行未對齊加載指令的流水線執(zhí)行的流程圖。在塊302,將加載指令從調(diào)度器112分派到作為所示實施例中的mob114的存儲器執(zhí)行單元。當然,調(diào)度器112在處理器100的操作期間在連續(xù)或周期性的基礎(chǔ)上分派其他指令類型。在塊304,mob114確定加載指令是否是未對齊的加載。如果不是,則操作進行到塊306,其中mob114以正常方式執(zhí)行加載指令,并將獲取的數(shù)據(jù)提供給rob120。對齊的加載指令的操作完成。
如果在塊304,mob114確定加載指令是未對齊的加載,則操作進行到塊308,在塊308中,mob114調(diào)整由mob114執(zhí)行的高速緩存行未對齊加載指令的地址。地址可以根據(jù)加載指令的指定數(shù)據(jù)長度以及下一個連續(xù)高速緩存行的起始地址進行調(diào)整。在下一個塊310,mob114使調(diào)度器112推遲至少一個時鐘周期。同時,在塊314,mob114確定遞增地址,諸如下一個順序高速緩存行的起始地址,并且使用遞增地址在mob114的輸入處插入第二加載指令。應(yīng)注意的是,塊310和314可以同時執(zhí)行,也就是說,在所示實施例中的stall和reload可以在相同的時鐘周期中執(zhí)行,以確保在第一次加載指令在塊304被確定為未對齊的加載時緊接在加載指令之后插入第二加載指令。此外,塊308可以與塊310的步驟同時執(zhí)行,或者甚至在塊314之后執(zhí)行,以確保塊310和314的步驟的執(zhí)行的優(yōu)先級,以插入第二次加載指令。在下一個塊316,mob114重新啟動調(diào)度器112以恢復(fù)分派操作。還應(yīng)注意,在一些實施例中,如果在下一個時鐘周期中等待分派的調(diào)度器112中沒有其他指令,則甚至不需要執(zhí)行塊310來推遲調(diào)度器112。在這種情況下,整條流水線(pipeline)根本沒有延遲。
最后,在下一個塊318,作為執(zhí)行高速緩存行未對齊加載指令的結(jié)果,從第一高速緩存行擷取第一數(shù)據(jù),并且作為執(zhí)行第二次加載指令的結(jié)果從下一個順序高速緩存行擷取第二數(shù)據(jù)。第一和第二數(shù)據(jù)中的至少一個或兩者可以存儲在諸如存儲器128的存儲器中。在下一個塊320,來自第一數(shù)據(jù)的部分數(shù)據(jù)和來自第二數(shù)據(jù)的部分數(shù)據(jù)被合并在一起以提供原始目標數(shù)據(jù)作為提供給rob120的結(jié)果數(shù)據(jù)。
已經(jīng)做出了前述描述,以使本領(lǐng)域普通技術(shù)人員能夠在特定應(yīng)用及其要求的背景下提供和使用本發(fā)明。雖然已經(jīng)參考其某些優(yōu)選的形式相當詳細地描述了本發(fā)明,但是其他的形式和變化是可能的和預(yù)期的。對優(yōu)選實施例的各種修改對于本領(lǐng)域技術(shù)人員將是顯而易見的,并且本文定義的一般原理可以應(yīng)用于其他實施例。例如,本文描述的電路可以以包括邏輯期間或電路等的任何合適的方式來實現(xiàn)。
本領(lǐng)域技術(shù)人員應(yīng)當理解,在不脫離本發(fā)明的精神和范圍的情況下,他們可以容易地使用所公開的概念和具體實施例作為設(shè)計或修改用于實施本發(fā)明的相同目的的其它結(jié)構(gòu)的基礎(chǔ)。因此,本發(fā)明不旨在限于本文所示和所描述的具體實施例,而是符合與本文公開的原理和新穎特征一致的最廣范圍。