被排隊(duì)的指令在超前運(yùn)行之后的重新分派的制作方法
【專利摘要】被排隊(duì)的指令在超前運(yùn)行之后的重新分派。本文公開微處理器和在超前運(yùn)行操作期間操作微處理器的方法的各實(shí)施例。操作微處理器的一個(gè)示例方法包括標(biāo)識(shí)與觸發(fā)超前運(yùn)行的指令相關(guān)聯(lián)的觸發(fā)超前運(yùn)行的事件,以及響應(yīng)于觸發(fā)超前運(yùn)行的事件的標(biāo)識(shí),進(jìn)入超前運(yùn)行操作并將觸發(fā)超前運(yùn)行的指令與一個(gè)或多個(gè)附加指令一起插入隊(duì)列。示例方法還包括響應(yīng)于觸發(fā)超前運(yùn)行的事件的解決而恢復(fù)微處理器的非超前運(yùn)行操作以及將觸發(fā)超前運(yùn)行的指令與一個(gè)或多個(gè)附加指令一起從隊(duì)列重新分派到執(zhí)行邏輯。
【專利說明】被排隊(duì)的指令在超前運(yùn)行之后的重新分派
【背景技術(shù)】
[0001]微處理器中的指令可引起停頓,這潛在地延遲指令處理并綁定微處理器資源。因?yàn)橥nD通常不可預(yù)測(cè),一些解決第一停頓的微處理器可能推測(cè)性地執(zhí)行指令以揭示其他潛在的停頓。雖然如果潛在停頓被揭示則推測(cè)性執(zhí)行可加速執(zhí)行,但每次實(shí)施推測(cè)性執(zhí)行時(shí),在推測(cè)性執(zhí)行結(jié)束后重新啟動(dòng)微處理器并將微處理器重置到預(yù)推測(cè)性執(zhí)行狀態(tài)可能減慢執(zhí)行。
【專利附圖】
【附圖說明】
[0002]圖1示意性地示出根據(jù)本公開的實(shí)施例的示例微處理器。
[0003]圖2示出根據(jù)本公開的實(shí)施例的、說明操作微處理器的示例方法的流程圖。
[0004]圖3示出用來說明圖4和5中所描繪的方法的示例程序。
[0005]圖4示意性地示出根據(jù)本公開的實(shí)施例的、在超前運(yùn)行(runahead)中操作微處理器的方法。
[0006]圖5示意性地示出根據(jù)本公開的實(shí)施例的、在超前運(yùn)行中操作微處理器的另一方法。
[0007]圖6示意性地示出根據(jù)本公開的實(shí)施例的另一示例微處理器。
[0008]圖7示意性地示出根據(jù)本公開的實(shí)施例的另一示例微處理器。
【具體實(shí)施方式】
[0009]在現(xiàn)代微處理器中,指令常常在管線中執(zhí)行??梢詫⑦@類指令單獨(dú)地或作為微操作束(bundle)分派到管線內(nèi)的各執(zhí)行級(jí)。無論發(fā)出用于執(zhí)行時(shí)指令的形式如何,當(dāng)發(fā)出指令時(shí),在分派時(shí)可能并不知道在指令的執(zhí)行期間是否將發(fā)生未命中或異常。在微處理器能夠?qū)罄m(xù)指令取得進(jìn)展之前需要一些時(shí)間以解決一些未命中/異常。因此,微處理器在嘗試解決長(zhǎng)時(shí)延事件的根本原因的同時(shí)可能停頓。常見管線停頓的一個(gè)非限制性示例是導(dǎo)致高速緩存未命中的加載操作。
[0010]在一些微處理器中,停頓可能觸發(fā)進(jìn)入配置為檢測(cè)其他潛在停頓的操作的超前運(yùn)行模式中的入口。換句話說,微處理器可檢測(cè)可能使微處理器停頓的長(zhǎng)時(shí)延事件。在嘗試解決該長(zhǎng)時(shí)延事件(例如觸發(fā)超前運(yùn)行的事件)的同時(shí),微處理器可推測(cè)性地執(zhí)行附加指令以嘗試揭示其他可能的停頓。通過揭示其他可能的停頓,微處理器可開始解決作為那些可能的停頓的基礎(chǔ)的長(zhǎng)時(shí)延事件,同時(shí)解決觸發(fā)超前運(yùn)行的事件,這潛在地節(jié)約時(shí)間。
[0011]如本文所使用的,超前運(yùn)行操作描述產(chǎn)生自長(zhǎng)時(shí)延事件的任何合適的推測(cè)性執(zhí)行方案,并配置為揭示可能導(dǎo)致停頓的一個(gè)或多個(gè)其他潛在長(zhǎng)時(shí)延事件。這類長(zhǎng)時(shí)延事件的非限制性示例包括高速緩存未命中(例如存儲(chǔ)未命中和/或加載未命中)、轉(zhuǎn)譯后備緩沖區(qū)(例如指令和/或數(shù)據(jù)轉(zhuǎn)譯后備緩沖區(qū))中的未命中、和一些長(zhǎng)時(shí)延浮點(diǎn)運(yùn)算(例如非正規(guī)(denormal)平方根運(yùn)算)。
[0012]一旦檢測(cè)到觸發(fā)超前運(yùn)行的事件,微處理器的狀態(tài)(例如寄存器值和其他合適的狀態(tài))可被設(shè)置檢查點(diǎn),使得一旦已解決觸發(fā)超前運(yùn)行的事件并且超前運(yùn)行操作結(jié)束,則微處理器可返回到超前運(yùn)行前(pre-runahead)狀態(tài)。設(shè)置檢查點(diǎn)保存微處理器的當(dāng)前狀態(tài),這允許以后恢復(fù)到這類狀態(tài)。設(shè)置檢查點(diǎn)可包括例如拷貝寄存器的內(nèi)容以復(fù)制寄存器。在超前運(yùn)行操作期間,微處理器在工作狀態(tài)中執(zhí)行,但不提交指令的結(jié)果以避免更改微處理器的狀態(tài)。提交更新微處理器狀態(tài)并可包括例如覆寫被設(shè)置檢查點(diǎn)的寄存器。在觸發(fā)超前運(yùn)行的事件被解決后,微處理器退出超前運(yùn)行并重新啟動(dòng)。如本文所使用的,重新啟動(dòng)微處理器是指返回到被設(shè)置檢查點(diǎn)的超前運(yùn)行前狀態(tài),使得正常的非超前運(yùn)行操作恢復(fù)。在超前運(yùn)行之后重新啟動(dòng)微處理器是指在指令流中的超前運(yùn)行前位置處重新啟動(dòng)指令的執(zhí)行,使得該指令的執(zhí)行在重新啟動(dòng)后繼續(xù),猶如超前運(yùn)行從未發(fā)生過,盡管采取了各種動(dòng)作以對(duì)在超前運(yùn)行期間所揭示的潛在長(zhǎng)時(shí)延事件(例如預(yù)獲取未命中等)進(jìn)行解決。
[0013]典型地,重新進(jìn)入非超前運(yùn)行操作涉及隨著對(duì)執(zhí)行觸發(fā)超前運(yùn)行的指令的較早嘗試不成功,重新分派觸發(fā)超前運(yùn)行的指令用于執(zhí)行。然而,從指令高速緩存或統(tǒng)一高速緩存重新獲取指令可能增加重新進(jìn)入非超前運(yùn)行執(zhí)行的時(shí)延。因此,本文公開了與微處理器和操作微處理器的方法相關(guān)的各實(shí)施例。在一個(gè)示例中,在超前運(yùn)行操作結(jié)束之后從隊(duì)列重新分派觸發(fā)超前運(yùn)行的指令。從隊(duì)列重新分派觸發(fā)超前運(yùn)行的指令而不是對(duì)其加以重新獲取可節(jié)省可能另外花費(fèi)在獲取指令以及在一些設(shè)定中解碼指令的時(shí)間。
[0014]例如,在一些實(shí)施例中,在超前運(yùn)行之外的普通操作期間具有第一目的的隊(duì)列(例如重演隊(duì)列)可在超前運(yùn)行期間用于另一目的。具體來講,隊(duì)列可重新用來在超前運(yùn)行期間保持觸發(fā)超前運(yùn)行的指令和一個(gè)或多個(gè)附加指令。在一些實(shí)施例中,重演隊(duì)列可在超前運(yùn)行期間用于該目的。在根據(jù)這類實(shí)施例的一個(gè)場(chǎng)景中,重演隊(duì)列可用來在正常操作期間重演超前運(yùn)行之外的指令。當(dāng)遭遇觸發(fā)超前運(yùn)行的指令時(shí),該指令與一個(gè)或多個(gè)附加指令一起被添加到重新目的化(repurposed)的重演隊(duì)列。采用該場(chǎng)景繼續(xù),一旦那些指令被添加并且進(jìn)行超前運(yùn)行,則經(jīng)重新目的化的重演隊(duì)列被凍結(jié)。一經(jīng)從超前運(yùn)行退出,則從經(jīng)重新目的化的重演隊(duì)列分派觸發(fā)超前運(yùn)行的指令和附加指令,這如上文所述在超前運(yùn)行之后潛在地加速處理。
[0015]圖1示意性地示出可與本文所描述的系統(tǒng)和方法有關(guān)所采用的微處理器100的實(shí)施例。微處理器100包括配置為存儲(chǔ)指令的存儲(chǔ)器系統(tǒng)102和配置為處理指令的管線104。關(guān)于存儲(chǔ)器系統(tǒng)102的附加細(xì)節(jié)在圖7中加以說明并在附隨文本中加以描述。
[0016]存儲(chǔ)器系統(tǒng)102可配置為存儲(chǔ)任何合適類型的指令。例如,指令可以以指令集架構(gòu)(ISA)指令、微操作(以合適的束化形式或非束化)的形式來存儲(chǔ)、存儲(chǔ)為相關(guān)ISA指令的轉(zhuǎn)譯等等。在一些示例中,單獨(dú)的微操作可與一個(gè)或多個(gè)指令或指令的一部分相對(duì)應(yīng)。換句話說,在一個(gè)場(chǎng)景中單個(gè)指令可存儲(chǔ)為微操作束,而在另一場(chǎng)景中多個(gè)指令可存儲(chǔ)為微操作束。如本文所使用的,束是指成組在一起的一個(gè)或多個(gè)微操作。
[0017]圖1中以簡(jiǎn)化形式示出的管線104在程序執(zhí)行期間處理存儲(chǔ)在存儲(chǔ)器系統(tǒng)102中的一個(gè)或多個(gè)指令。管線指令處理可允許多于一個(gè)指令并發(fā)地處于在檢索和執(zhí)行的不同級(jí)中。換言之,被包括在管線104中的各級(jí)可允許一些指令準(zhǔn)備好用于由上游級(jí)執(zhí)行而下游級(jí)執(zhí)行其他指令并收回另一些其他指令。
[0018]圖1中示出的示例管線104包括獲取邏輯106、解碼邏輯108、調(diào)度器邏輯110、執(zhí)行邏輯112和回寫邏輯114。將理解的是,僅出于例示性目的提供圖1中示出的管線104的實(shí)施例中所顯示的邏輯部分,并且可以以任何合適的方式布置下文更詳細(xì)地描述的功能性。例如,管線104的一些實(shí)施例可包括執(zhí)行單元中的一個(gè)或多個(gè)內(nèi)的經(jīng)單獨(dú)管線化的部分(例如獲取邏輯106、解碼邏輯108等中的一個(gè)或多個(gè)可包括經(jīng)單獨(dú)管線化的部分),而一些實(shí)施例可將單個(gè)管線執(zhí)行單元內(nèi)的兩個(gè)或更多個(gè)邏輯部分的部分加以組合。
[0019]在圖1中示出的實(shí)施例中,獲取邏輯106從存儲(chǔ)器系統(tǒng)102檢索指令,典型地是從由L2-L3高速緩存和主存儲(chǔ)器所支持的統(tǒng)一或?qū)S肔I高速緩存檢索指令。解碼邏輯108例如通過解析操作符/操作碼、操作數(shù)和尋址模式來解碼指令。一經(jīng)被解析,指令就隨后由調(diào)度器邏輯110所調(diào)度用于由執(zhí)行邏輯112執(zhí)行。執(zhí)行邏輯112可包括配置為執(zhí)行由調(diào)度器邏輯110所發(fā)出的指令的一個(gè)或多個(gè)執(zhí)行級(jí)(例如執(zhí)行級(jí)O到4在圖1中示出)。任何合適數(shù)目和類型的執(zhí)行級(jí)可包括在執(zhí)行邏輯112內(nèi)。執(zhí)行邏輯112還可與存儲(chǔ)器系統(tǒng)102通信(例如經(jīng)由被包括在執(zhí)行邏輯112中的一個(gè)或多個(gè)加載/存儲(chǔ)單元)以處置在操作期間所遭遇的加載和/或存儲(chǔ)操作。一旦由執(zhí)行邏輯112處理,可存儲(chǔ)所完成的指令以準(zhǔn)備用于由回寫邏輯114提交?;貙戇壿?14通過將所完成的指令的結(jié)果提交到微處理器寄存器、高速緩存和/或存儲(chǔ)器來更改微處理器100的架構(gòu)狀態(tài)。換句話說,回寫邏輯114針對(duì)微處理器100實(shí)施提交功能性。
[0020]在圖1中示出的實(shí)施例中,微處理器100包括超前運(yùn)行控制邏輯116。超前運(yùn)行控制邏輯116針對(duì)微處理器100控制進(jìn)入和退出超前運(yùn)行模式。在一些實(shí)施例中,超前運(yùn)行控制邏輯116還可控制與進(jìn)入和退出超前運(yùn)行相關(guān)的其他操作。例如,當(dāng)進(jìn)入超前運(yùn)行時(shí),微處理器100的部分可被設(shè)置檢查點(diǎn)以留存微處理器100的狀態(tài),同時(shí)微處理器100的未被設(shè)置檢查點(diǎn)的(non-checkpointed)工作狀態(tài)版本在超前運(yùn)行期間推測(cè)性地執(zhí)行指令。在一些這類實(shí)施例中,一經(jīng)從超前運(yùn)行退出,超前運(yùn)行控制邏輯116就可將微處理器100還原到被設(shè)置檢查點(diǎn)的狀態(tài)。
[0021]微處理器100還包括隊(duì)列118,其配置為保持要由調(diào)度器邏輯110重新分派或“重演”的一個(gè)或多個(gè)指令。如本文所使用的,指令重演是指指令被重新分派/重新發(fā)出用于執(zhí)行而不用被重新獲取和/或重新解碼。例如,隊(duì)列118可用來響應(yīng)于管線不連續(xù)性而存儲(chǔ)被選擇以重演的指令,所述管線不連續(xù)性使該指令在初始分派之后無法完成。可重演指令一次或多次直到指令達(dá)到完成狀態(tài)為止。
[0022]在正常的非超前運(yùn)行操作期間,被選擇用于重演的指令可傳遞入和傳遞出隊(duì)列118,使得隊(duì)列118將要重演的指令重新循環(huán)到執(zhí)行邏輯112。在一些實(shí)施例中,該指令一經(jīng)分派則從隊(duì)列118中釋出指令。隨著指令被分派而排空指令的隊(duì)列118可釋放隊(duì)列118中的空間,使得可添加被選擇用于重演的新指令,并還可維護(hù)指令流流暢。然而,引起重演的事件也可以是觸發(fā)超前運(yùn)行的事件;因此先于進(jìn)入超前運(yùn)行來排空隊(duì)列118將一經(jīng)重新進(jìn)入非超前運(yùn)行操作就使獲取邏輯106重新獲取該指令。在其他實(shí)施例中,指令可以不是一經(jīng)分派就從隊(duì)列118中釋出。反而,指令可維持在隊(duì)列118中直到這些指令的執(zhí)行完成并且不能實(shí)施重新分派為止。在該實(shí)施例中,指令將不需要被重新插入到隊(duì)列中用于設(shè)置檢查點(diǎn)或超前運(yùn)行。
[0023]因此,在一些實(shí)施例中,可一經(jīng)檢測(cè)到觸發(fā)超前運(yùn)行的事件就采用觸發(fā)超前運(yùn)行的指令來填充隊(duì)列118。通過將觸發(fā)超前運(yùn)行的指令插入到隊(duì)列118中,該指令在超前運(yùn)行結(jié)束后將可用于重新分派。當(dāng)進(jìn)入超前運(yùn)行時(shí)可凍結(jié)隊(duì)列118,使得觸發(fā)超前運(yùn)行的指令一經(jīng)從超前運(yùn)行退出就將可用于分派而無論在超前運(yùn)行期間發(fā)生什么。將理解的是,在一些實(shí)施例中,凍結(jié)的隊(duì)列118可被包括在設(shè)置檢查點(diǎn)的微處理器100中以準(zhǔn)備用于進(jìn)入超前運(yùn)行,而在一些其他實(shí)施例中,其可以是分開的進(jìn)程或者完全不實(shí)施。
[0024]此外,一個(gè)或多個(gè)附加指令可與觸發(fā)超前運(yùn)行的指令一起插入到隊(duì)列118中。將附加指令插入到隊(duì)列118中可節(jié)省可能另外花費(fèi)在當(dāng)微處理器在超前運(yùn)行之后恢復(fù)正常操作時(shí)獲取和解碼那些指令上的時(shí)間。換句話說,與重新獲取觸發(fā)超前運(yùn)行的指令或?qū)⑵?例如從被設(shè)置檢查點(diǎn)的狀態(tài))重新發(fā)出相反,將觸發(fā)超前運(yùn)行的指令和一個(gè)或多個(gè)附加指令插入到隊(duì)列118中可允許在超前運(yùn)行終了并且微處理器恢復(fù)非超前運(yùn)行操作之后那些指令從隊(duì)列118到執(zhí)行邏輯112的快速重新分派。
[0025]雖然為了清楚起見在圖1中以線性方式示出隊(duì)列118,但將理解的是隊(duì)列118可具有任何合適的形式。例如,隊(duì)列118可布置為循環(huán)隊(duì)列。進(jìn)一步地,可以以任何合適的方式從隊(duì)列118插入和分派指令。例如,可使用“先入先出”格式從隊(duì)列118插入和分派指令。在另一示例中,可根據(jù)從初始分派開始的相對(duì)壽命來分派指令,該相對(duì)壽命可以與隊(duì)列內(nèi)的壽命不同。隊(duì)列118還可具有任何合適的大小。在一個(gè)非限制性示例中,隊(duì)列118可包括16個(gè)條目。
[0026]此外,在一些實(shí)施例中,在正重新分派保持在隊(duì)列118中的指令的同時(shí),獲取邏輯106可并發(fā)地檢索一個(gè)或多個(gè)后續(xù)指令,并且解碼邏輯108可解碼那些后續(xù)指令中的一個(gè)或多個(gè)。反過來,用于新獲取的指令的檢索和解碼時(shí)間可與用于被排隊(duì)的指令的重新分派過程重疊。對(duì)后續(xù)指令的檢索和假如適當(dāng)?shù)脑掃M(jìn)行解碼可引起被獲取/被解碼的后續(xù)指令隨時(shí)可用于由調(diào)度器邏輯Iio進(jìn)行的分派。反過來,微處理器100可經(jīng)歷從來自隊(duì)列118的指令的重新分派到新獲取的指令的分派的幾乎無縫的轉(zhuǎn)變。
[0027]圖2示出用于操作微處理器的方法200的實(shí)施例的一部分的流程圖。將理解的是,可以通過包括本文所描述的硬件的任何合適的硬件來實(shí)施方法200。在一些實(shí)施例中,一個(gè)或多個(gè)軟件模塊可實(shí)施方法200的各方面。進(jìn)一步地,將理解的是,圖2中示出的和下文所描述的方法200的實(shí)施例呈現(xiàn)為用于討論目的的示例。圖2中描述的過程中的任何一個(gè)可通過其他合適的過程加以補(bǔ)充、省略和/或合適地重新排序而不脫離本公開的范圍。
[0028]在202,方法200包括標(biāo)識(shí)觸發(fā)超前運(yùn)行的事件。在一些實(shí)施例中,可由合適的超前運(yùn)行控制邏輯標(biāo)識(shí)觸發(fā)超前運(yùn)行的事件,但應(yīng)理解的是微處理器的任何合適的部分可檢測(cè)這類事件。例如,被包括在微處理器執(zhí)行邏輯中的加載/存儲(chǔ)執(zhí)行級(jí)可檢測(cè)高速緩存未命中或存儲(chǔ)未命中;浮點(diǎn)執(zhí)行級(jí)可檢測(cè)非正規(guī)平方根運(yùn)算等。任何合適的長(zhǎng)時(shí)延事件可視為觸發(fā)超前運(yùn)行的事件。這類長(zhǎng)時(shí)延事件可在微處理器設(shè)計(jì)期間被預(yù)確定、在微處理器操作期間來動(dòng)態(tài)地被確定等等。
[0029]在204,方法200包括在隊(duì)列中插入觸發(fā)超前運(yùn)行的指令。一個(gè)或多個(gè)附加指令可與觸發(fā)超前運(yùn)行的指令一起插入到隊(duì)列中。例如,圖1示出在超前運(yùn)行操作的開始處的隊(duì)列118。隊(duì)列118包括二個(gè)指令:指令A(yù)、指令B以及指令C,指令A(yù)包括兩個(gè)束(不出為束Al和束A2),指令C包括多于一個(gè)束(示出為束Cl)。在圖1中示出的示例中,在執(zhí)行邏輯112的級(jí)2處所檢測(cè)到的觸發(fā)超前運(yùn)行的事件導(dǎo)致相關(guān)聯(lián)的觸發(fā)超前運(yùn)行的指令(指令A(yù))經(jīng)由路徑120如所示被插入隊(duì)列118。在執(zhí)行邏輯112中跟隨指令A(yù)的指令B和指令C的束Cl也被置入隊(duì)列118。將理解的是,任何合適數(shù)目的附加指令可與觸發(fā)超前運(yùn)行的指令一起插入到隊(duì)列118中。在一些實(shí)施例中,可基于隊(duì)列118的大小、用于從存儲(chǔ)器系統(tǒng)中所檢索的指令的典型檢索時(shí)間和/或解碼時(shí)間等等來選擇被選擇用于插入到隊(duì)列118中的指令的數(shù)目。換句話說,被選擇用于插入的指令的數(shù)目可在設(shè)計(jì)階段期間被預(yù)確定和/或在微處理器操作期間動(dòng)態(tài)地被確定。
[0030] 將理解的是,可在處理期間的任何合適的點(diǎn)或位置處將指令插入到隊(duì)列118中。微處理器可具有配置為將指令路由到隊(duì)列中的多個(gè)路徑。例如,圖1描繪從級(jí)2延伸到隊(duì)列118的插入路徑120,并描繪從級(jí)4延伸到隊(duì)列118的另一插入路徑122。雖然任何合適數(shù)目的插入路徑均是可能的而不脫離本公開的范圍,但在一些實(shí)施例中,可選擇將指令從可能檢測(cè)到觸發(fā)超前運(yùn)行的事件的級(jí)路由到隊(duì)列的路徑。例如,插入路徑可將加載/存儲(chǔ)級(jí)與隊(duì)列鏈接。如另一示例,插入路徑可將最后級(jí)與隊(duì)列鏈接來作為在指令退出管線之前收集那些指令的方式。在一些實(shí)施例中,超前運(yùn)行控制邏輯可管理到隊(duì)列中的指令的選擇和/或插入。在一些實(shí)施例中,一個(gè)或多個(gè)執(zhí)行級(jí)可管理到隊(duì)列中的指令的選擇和/或插入。在一些其他實(shí)施例中,到隊(duì)列中的指令的選擇和插入可分布在微處理器的各部分當(dāng)中。[0031 ] 在一些實(shí)施例中,可在由分配指針?biāo)甘镜奈恢锰幉迦氡贿x擇用于插入到隊(duì)列中的指令。分配指針指示下一指令要插入在隊(duì)列中的何處。例如,圖1示出示例分配指針124,其指示用于將另一指令插入到隊(duì)列118中的位置(示出在條目126A處)。當(dāng)指令插入到隊(duì)列中時(shí)分配指針124被更新。因此,在緊挨在指令C的束Cl到隊(duì)列118中的插入之前的時(shí)間,分配指針124置于條目126B。
[0032]當(dāng)在超前運(yùn)行之后重新啟動(dòng)/重新進(jìn)入正常操作時(shí),獲取邏輯在隊(duì)列中的最后指令被重新分派之后被引導(dǎo)到指令指針,使得在超前運(yùn)行之前插入到隊(duì)列中的最后指令被重新分派之后處理繼續(xù)。指令指針可按順序跟隨隊(duì)列中的最后指令,或者反之,諸如在采取分支的情況下。因此,在206,方法200包括跟蹤在超前運(yùn)行操作之后要從獲取邏輯所分派的指令的位置。跟蹤在超前運(yùn)行操作之后要從獲取邏輯所分派的指令的位置可包括跟蹤跟隨隊(duì)列中的最后指令的指令的位置。在一些實(shí)施例中,重新啟動(dòng)指令指針可用來跟蹤跟隨隊(duì)列中的最后指令的位置。例如,圖1描繪重新啟動(dòng)指令指針128,其配置為將獲取邏輯106引導(dǎo)到用于在重新分派隊(duì)列中的最后指令之后要獲取的下一指令的指令指針。
[0033]在隊(duì)列保持ISA指令的實(shí)施例中,跟蹤在超前運(yùn)行操作之后要從獲取邏輯所分派的指令的位置可以是直截了當(dāng)?shù)?,因?yàn)槊總€(gè)ISA指令可具有與其相關(guān)聯(lián)的指令指針。在一些實(shí)施例中,諸如微操作束被保持在隊(duì)列中的實(shí)施例中,可以是與指令相關(guān)聯(lián)的指令指針被包括在僅一個(gè)束中。
[0034]在這類實(shí)施例中,在206的跟蹤在超前運(yùn)行操作之后要從獲取邏輯所分派的指令的位置可包括跟蹤被插入到隊(duì)列中的最后完成的指令的位置(例如用于跟隨其所有組成部分保持在隊(duì)列中的指令的指令的位置/地址)。例如,指令指針可被包括在形成束的指令集中的最后束中。因?yàn)閺奈⒉僮魇袠?biāo)識(shí)指令的結(jié)束可能是困難的,所以可使用跟蹤指針以維護(hù)對(duì)在插入到隊(duì)列中的最后完成的指令與可呈現(xiàn)在隊(duì)列中的其他束之間的邊界的跟蹤。例如,圖1不出指向被包括在指令B中的最后束的跟S示指針130。
[0035]跟蹤最后完成指令的位置并因此跟蹤在隊(duì)列中的最后完成的指令和其他指令之間的邊界還可包括隨著完成的指令插入到隊(duì)列中而更新該位置/邊界信息。進(jìn)一步地,更新位置/邊界信息還可包括隨著完成的指令插入到隊(duì)列中,一經(jīng)從超前運(yùn)行退出則針對(duì)要由獲取邏輯所獲取的指令來更新位置信息。反過來,微處理器(例如在一些實(shí)施例中,調(diào)度器邏輯)將具有對(duì)在超前運(yùn)行之后一經(jīng)重新進(jìn)入正常操作則可被發(fā)送到獲取邏輯的有效的重新啟動(dòng)指令指針的訪問權(quán)限,并將能夠停止從隊(duì)列重新分派指令以及開始適當(dāng)?shù)貜墨@取邏輯和/或解碼邏輯分派束。在圖1中示出的示例中,一經(jīng)對(duì)跟蹤指針130進(jìn)行更新則可更新重新啟動(dòng)指令指針128,在132示意性地示出對(duì)重新啟動(dòng)指令指針128的更新。
[0036]在208,方法200包括準(zhǔn)備進(jìn)入超前運(yùn)行操作。在一些實(shí)施例中,在208針對(duì)超前運(yùn)行的準(zhǔn)備可以包括凍結(jié)隊(duì)列并將微處理器的狀態(tài)設(shè)置檢查點(diǎn),其可包括將寄存器條目值和與那些寄存器條目相關(guān)聯(lián)的各狀態(tài)和/或位設(shè)置檢查點(diǎn)。被設(shè)置檢查點(diǎn)的值在超前運(yùn)行的持續(xù)期期間保留在被設(shè)置檢查點(diǎn)的狀態(tài)中。那些值、狀態(tài)和/或位的工作狀態(tài)版本至少最初保留在微處理器一經(jīng)進(jìn)入超前運(yùn)行的工作狀態(tài)版本中,但那些值、狀態(tài)和/或位中的一個(gè)或多個(gè)在超前運(yùn)行操作期間可能改變。將理解的是,在一些實(shí)施例中,過程204和/或206可與在208的準(zhǔn)備進(jìn)入超前運(yùn)行并發(fā)地發(fā)生和/或被包括在208的準(zhǔn)備進(jìn)入超前運(yùn)行中。在一些實(shí)施例中,合適的超前運(yùn)行控制邏輯可控制準(zhǔn)備進(jìn)入超前運(yùn)行的一個(gè)或多個(gè)方面。例如,在圖1中示出的實(shí)施例中,超前運(yùn)行控制邏輯116可控制設(shè)置檢查點(diǎn)的微處理器100。
[0037]在210,方法200包括進(jìn)入并操作在超前運(yùn)行模式中。例如,圖1中示出的超前運(yùn)行控制邏輯116可控制進(jìn)入到超前運(yùn)行中和在超前運(yùn)行期間的操作。在超前運(yùn)行期間,微處理器推測(cè)性地執(zhí)行指令,同時(shí)嘗試揭示其他潛在的長(zhǎng)時(shí)延事件、停頓、分支誤預(yù)測(cè)等等。被設(shè)置檢查點(diǎn)的微處理器狀態(tài)在超前運(yùn)行期間不更改,因?yàn)闋顟B(tài)的更改(例如回寫事件或指令提交)可能損害微處理器的一旦解決觸發(fā)超前運(yùn)行的事件則返回到超前運(yùn)行前條件的能力。進(jìn)一步地,因?yàn)樵诔斑\(yùn)行執(zhí)行期間所生成的結(jié)果可能是無效的,例如,因?yàn)槠淇赡芤揽课疵械臄?shù)據(jù),所以將超前運(yùn)行執(zhí)行的結(jié)果存儲(chǔ)到高速緩存位置可能損壞保持在存儲(chǔ)器系統(tǒng)中的數(shù)據(jù)。因此,在超前運(yùn)行模式期間,各寄存器位置可被抑制(poison)或另行標(biāo)記為保持無效數(shù)據(jù),使得可提高指令吞吐量和其他長(zhǎng)時(shí)延事件的潛在發(fā)現(xiàn)。在超前運(yùn)行結(jié)束之后,那些寄存器位置還原到其超前運(yùn)行前狀態(tài)使得正常處理可繼續(xù)。
[0038]將理解的是,微處理器操作可能時(shí)常處于變化之中,甚至是在超前運(yùn)行操作期間。因此,取決于在超前運(yùn)行期間如何操作微處理器,微處理器的在超前運(yùn)行期間檢測(cè)其他長(zhǎng)時(shí)延事件的能力可能以變化的成功率實(shí)現(xiàn)。
[0039]例如,圖3示意性地示出以靜態(tài)所描繪的程序300的實(shí)施例。如圖3所示,程序300包括8個(gè)指令。第二指令將來自存儲(chǔ)器的值加載到寄存器Rl中。第六指令使用Rl中所存儲(chǔ)的值來計(jì)算從其加載數(shù)據(jù)的地址。
[0040]圖4示意性地示出用于在超前運(yùn)行操作期間(例如在進(jìn)行中的超前運(yùn)行片斷期間)執(zhí)行程序300的方法400的實(shí)施例。在圖4示出的示例中,指令2在超前運(yùn)行期間在LI高速緩存中未命中。已標(biāo)識(shí)LI高速緩存未命中,微處理器可開始從較高高速緩存級(jí)別(例如L2高速緩存)檢索數(shù)據(jù)。同時(shí),微處理器抑制Rl并繼續(xù)在超前運(yùn)行中執(zhí)行程序300。因?yàn)橹噶?引用R1,所以不使用存儲(chǔ)在Rl中的值計(jì)算地址并且不實(shí)施加載指令。反而,用于指令6的目標(biāo)寄存器位置被抑制并且微處理器前進(jìn),繼續(xù)執(zhí)行程序300。然而,因?yàn)橹噶?不嘗試加載,所以不知道用于指令6的輸入存儲(chǔ)器位置是否將引起高速緩存命中或未命中。換句話說,通過在指令6處抑制目標(biāo)寄存器并前進(jìn),微處理器可能已犧牲標(biāo)識(shí)另一觸發(fā)超前運(yùn)行的事件的機(jī)會(huì)。雖然出于討論目的提供圖4中示出的示例,但將理解的是,當(dāng)LI未命中時(shí)抑制目標(biāo)寄存器而不確定是否伴有L2未命中可導(dǎo)致一設(shè)定,其中例如指令可頻繁地引用一個(gè)或多個(gè)被抑制的位置。
[0041]因此,在一些實(shí)施例中,可選擇一個(gè)或多個(gè)指令用于在超前運(yùn)行期間進(jìn)行重新分派/重演。例如,可選擇與短持續(xù)期事件相關(guān)的指令用于重演。在短持續(xù)期事件中,原始分派可以不完成,但在短時(shí)延之后的重演可以完成。在超前運(yùn)行期間重演指令可減少在超前運(yùn)行期間系統(tǒng)中累積的抑制量,這潛在地暴露否則可能未命中的其他事件。將理解的是,在超前運(yùn)行期間完成的指令可更新當(dāng)前微處理器狀態(tài)而非被設(shè)置檢查點(diǎn)的狀態(tài),這允許微處理器一經(jīng)退出超前運(yùn)行就返回到被設(shè)置檢查點(diǎn)的狀態(tài)。
[0042]例如,圖5示意性地示出用于使用指令重演在超前運(yùn)行操作期間執(zhí)行程序300的方法500的實(shí)施例。在圖5示出的示例中,指令2在超前運(yùn)行期間在LI高速緩存中未命中。與圖4示出的示例相似,微處理器開始從較高高速緩存級(jí)別(例如L2高速緩存)檢索數(shù)據(jù)。同時(shí),微處理器繼續(xù)在超前運(yùn)行中執(zhí)行程序300,并且觸發(fā)未命中的指令(指令2)以及在一些實(shí)施例中一個(gè)或多個(gè)附加指令被選擇用于重演。當(dāng)微處理器獲得來自L2高速緩存的數(shù)據(jù)時(shí),其被遞送到LI高速緩存和到指令2,該指令2與指令3和4 一起被重新分派。在一些實(shí)施例中,可將指令的重新分派定時(shí),使得與來自高速緩存(例如圖5示出的示例中的L2高速緩存)的數(shù)據(jù)的到達(dá)并發(fā)地發(fā)出觸發(fā)未命中的指令,但將理解的是可采用任何合適的重新分派指令的方式而不脫離本公開的范圍。
[0043]在重新分派指令4之后,指令5-8的規(guī)則分派繼續(xù)。指令6的執(zhí)行引用R1,所以可計(jì)算地址;一旦計(jì)算了地址,則發(fā)送用于該地址的加載指令。在圖5示出的示例中,指令6觸發(fā)高速緩存未命中。反過來,觸發(fā)未命中的指令(指令6)以及在一些實(shí)施例中一個(gè)或多個(gè)附加指令被選擇用于重演。當(dāng)微處理器獲得來自L2高速緩存的數(shù)據(jù)時(shí),其將被遞送到LI高速緩存和到指令6,該指令6被重新分派。因此,指令6生成地址并觸發(fā)高速緩存未命中,這在圖4示出的示例中并未實(shí)現(xiàn)。不同于圖4示出的不采用重演的超前運(yùn)行的示例,圖5示出的示例說明在一些設(shè)定中,在超前運(yùn)行期間重演指令的能力可提供機(jī)會(huì)以標(biāo)識(shí)否則可能未命中的長(zhǎng)時(shí)延事件,盡管在一些實(shí)施例中可能存在與超前運(yùn)行中的重演相關(guān)聯(lián)的指令吞吐量的減少。
[0044]將理解的是,在一些實(shí)施例中,用來保持觸發(fā)超前運(yùn)行的指令和一個(gè)或多個(gè)附加指令的隊(duì)列可能不用來保持被選擇用于在超前運(yùn)行期間重演的指令。重新使用隊(duì)列用于超前運(yùn)行期間的重演可能引起在超前運(yùn)行期間的指令的丟失,這潛在地?fù)p害一旦解決觸發(fā)超前運(yùn)行的事件則微處理器重新啟動(dòng)/重新進(jìn)入非超前運(yùn)行操作的能力。因此,在一些實(shí)施例中,用于超前運(yùn)行期間的重演的指令的選擇可使微處理器抑制指令的目標(biāo)寄存器并繼續(xù)超前運(yùn)行。在一些其他實(shí)施例中,在超前運(yùn)行期間遭遇重演條件可使微處理器退出超前運(yùn)行。將理解的是,這些示例是非限制性的。在一些實(shí)施例中,可在微處理器設(shè)計(jì)期間預(yù)確定用來確定是結(jié)束超前運(yùn)行還是抑制目標(biāo)寄存器的標(biāo)準(zhǔn)。
[0045]在一些其他實(shí)施例中,可使用與用來保持觸發(fā)超前運(yùn)行的指令的隊(duì)列不同的專用超前運(yùn)行重演隊(duì)列來在超前運(yùn)行期間重演指令。例如,圖6示意性地示出包括超前運(yùn)行重演隊(duì)列602的微處理器600的實(shí)施例,該超前運(yùn)行重演隊(duì)列602配置為保持被選擇用于在超前運(yùn)行期間重演的一個(gè)或多個(gè)指令,而保持觸發(fā)超前運(yùn)行的指令的隊(duì)列118在超前運(yùn)行期間維持凍結(jié)。雖然為了清楚起見在圖6中以線性方式示出超前運(yùn)行重演隊(duì)列602,但將理解的是超前運(yùn)行重演隊(duì)列602可具有任何合適的形式。例如,超前運(yùn)行重演隊(duì)列602可布置為循環(huán)隊(duì)列。進(jìn)一步地,可以以任何合適的方式從超前運(yùn)行重演隊(duì)列602插入和分派指令。例如,可使用“先入先出”格式從超前運(yùn)行重演隊(duì)列602插入和分派指令。在另一示例中,可根據(jù)從初始分派開始的相對(duì)壽命來分派指令,該相對(duì)壽命可以與超前運(yùn)行重演隊(duì)列602內(nèi)的壽命不同。超前運(yùn)行重演隊(duì)列602還可具有任何合適的大小。在一個(gè)非限制性示例中,超前運(yùn)行重演隊(duì)列602可包括16個(gè)條目。
[0046]在圖6示出的示例中,被選擇用于重演的指令可經(jīng)由將管線104的部分與超前運(yùn)行重演隊(duì)列602鏈接的一個(gè)或多個(gè)插入路徑604來插入到超前運(yùn)行重演隊(duì)列602中。分配指針606可用來指示超前運(yùn)行重演隊(duì)列602內(nèi)的插入位置。當(dāng)指令(或其一部分)插入到超前運(yùn)行重演隊(duì)列602中時(shí)分配指針606可被更新。
[0047]如上文所引入的,在一些實(shí)施例中,可管理來自超前運(yùn)行重演隊(duì)列602的指令的重新分派,使得與另一事件的發(fā)生并發(fā)地發(fā)出被選擇用于重演的指令。例如,可與來自高速緩存的指令相關(guān)的數(shù)據(jù)的到達(dá)并發(fā)地重新分派觸發(fā)高速緩存未命中的該指令??墒褂米x指針以指示超前運(yùn)行重演隊(duì)列602中的、被選擇讀取以準(zhǔn)備用于分派到調(diào)度器邏輯110的位置。換句話說,讀指針可指示在超前運(yùn)行重演隊(duì)列602中的、被讀取用于重新分派的位置。指示在超前運(yùn)行重演隊(duì)列602中的、被讀取用于重新分派的位置可允許在重新分派指令之前讀取與該位置相關(guān)聯(lián)的該指令的各從屬。例如,在圖6示出的實(shí)施例中,讀指針608指示超前運(yùn)行重演隊(duì)列602中的保持指令X的位置。因此,指令X將是經(jīng)由分派路徑610被路由到調(diào)度器邏輯110用于重新分派到執(zhí)行邏輯112的下一指令。當(dāng)被選擇的指令(或其一部分)被分派到調(diào)度器邏輯110時(shí)讀指針608可被更新。
[0048]在一些實(shí)施例中,超前運(yùn)行重演隊(duì)列602可包括釋出指針612,其指示超前運(yùn)行重演隊(duì)列602中的、準(zhǔn)備好邏輯地并在一些情況下物理地從隊(duì)列中移除的位置。換句話說,釋出指針612指向指令,該指令是要通過覆寫、刪除、或類似地消除來從超前運(yùn)行重演隊(duì)列602中移除的下一指令。在圖6示出的示例中,釋出指針612指示由指令X所占用的位置。該位置將是要被釋出的下一位置,這引起指令X從超前運(yùn)行重演隊(duì)列602中消除。當(dāng)被選擇的指令(或其一部分)已被分派到調(diào)度器邏輯110時(shí)釋出指針612可被更新。在一些實(shí)施例中,讀指針608可實(shí)施釋出指針612的功能,使得已經(jīng)按照由讀指針608的指示來讀取/分派則釋出位置。
[0049]雖然圖6示出的示例將超前運(yùn)行重演隊(duì)列602描繪為與隊(duì)列118分開,但將理解的是,在一些實(shí)施例中,可使用合適大小的隊(duì)列以保持觸發(fā)超前運(yùn)行的指令和被選擇用于在超前運(yùn)行期間重演的指令。例如,隊(duì)列的一部分可在超前運(yùn)行期間凍結(jié)而另一部分是活動(dòng)的用于重演。在一些其他實(shí)施例中,可使用隊(duì)列118的被設(shè)置檢查點(diǎn)的版本以保持觸發(fā)超前運(yùn)行的指令,而使用隊(duì)列118的工作狀態(tài)版本以保持被選擇用于在超前運(yùn)行期間重演的指令,從而實(shí)施超前運(yùn)行重演隊(duì)列602的功能。
[0050]無論在超前運(yùn)行期間是否實(shí)施重演,一旦初始的觸發(fā)超前運(yùn)行的事件被解決,則微處理器退出超前運(yùn)行并返回到正常的非超前運(yùn)行操作。因此,采用圖2繼續(xù),在212,方法200包括確定觸發(fā)超前運(yùn)行的事件的解決,以及在214,退出超前運(yùn)行操作。可以由微處理器的任何合適的部分以任何合適方式實(shí)施對(duì)觸發(fā)超前運(yùn)行的事件已被解決的確定。例如,在圖1示出的實(shí)施例中,超前運(yùn)行控制邏輯116配置為確定觸發(fā)超前運(yùn)行的事件的解決并使微處理器退出超前運(yùn)行。退出超前運(yùn)行可包括還原微處理器100的被設(shè)置檢查點(diǎn)的版本、轉(zhuǎn)儲(chǔ)管線104、解凍隊(duì)列118以及重新引導(dǎo)獲取邏輯106以開始從重新啟動(dòng)指令指針128獲取指令。在包括超前運(yùn)行重演隊(duì)列602的實(shí)施例中,退出超前運(yùn)行還可包括轉(zhuǎn)儲(chǔ)超前運(yùn)行重演隊(duì)列602。
[0051]在216,方法200包括對(duì)當(dāng)觸發(fā)超前運(yùn)行時(shí)插入到隊(duì)列中的觸發(fā)超前運(yùn)行的指令與一個(gè)或多個(gè)附加指令一起進(jìn)行重新分派。觸發(fā)超前運(yùn)行的指令與附加指令一起被重新分派。在分派最后的附加指令之后,微處理器開始分派新獲取的指令。
[0052]在超前運(yùn)行之后從隊(duì)列重新分派觸發(fā)超前運(yùn)行的指令可包括從由讀指針?biāo)甘镜奈恢梅峙捎|發(fā)超前運(yùn)行的指令。換句話說,讀指針可指示隊(duì)列118中的被讀取用于重新分派的位置。指示隊(duì)列118中的被讀取用于重新分派的位置可允許在重新分派指令之前讀取與該位置相關(guān)聯(lián)的該指令的各從屬。例如,在圖1示出的實(shí)施例中,讀指針134指示隊(duì)列118中的保持指令A(yù)的束Al的位置。因此,束Al將是被分派到調(diào)度器邏輯110的、經(jīng)由分派路徑136被路由用于重新分派到執(zhí)行邏輯112的下一指令。當(dāng)被選擇的指令(或其一部分)被分派到調(diào)度器邏輯110時(shí)讀指針134可被更新。然而將理解的是,在其他實(shí)施例中,分派路徑136可將指令直接地分派到執(zhí)行邏輯112和其中的任何級(jí)。
[0053]在一些實(shí)施例中,隊(duì)列118可包括釋出指針138,其指示隊(duì)列118中的、準(zhǔn)備好邏輯地并在一些情況下物理地從隊(duì)列中移除的位置。換句話說,釋出指針138指向指令,該指令是要通過覆寫、刪除、或類似地消除來從隊(duì)列118中移除的下一指令。在圖1示出的示例中,釋出指針138指示由指令A(yù)的束Al所占用的位置。該位置將是要釋出的下一位置,這引起束Al從隊(duì)列118中的消除。當(dāng)被選擇的指令(或其一部分)已被分派到調(diào)度器邏輯110時(shí)釋出指針138可被更新。在一些實(shí)施例中,讀指針134可實(shí)施釋出指針138的功能,使得一經(jīng)按照讀指針134的指示來讀取/分派則釋出位置。
[0054]一旦與觸發(fā)超前運(yùn)行的指令一起插入到隊(duì)列中的最后指令被從隊(duì)列重新分派,則微處理器停止從隊(duì)列重新分派指令并開始分派由獲取邏輯所檢索的指令。因此,在216的重新分派包括一經(jīng)遭遇插入到隊(duì)列中的最后完成的指令的指示,則停止從隊(duì)列的指令的重新分派。例如,在圖1示出的實(shí)施例中,一經(jīng)遭遇跟蹤指針130,則微處理器可停止從隊(duì)列118重新分派指令。進(jìn)一步地,在216的重新分派包括在從隊(duì)列重新分派最后完成的指令之后分派由獲取邏輯所檢索的指令。
[0055]在一些實(shí)施例中,在216的重新分派可包括將與用來跟蹤跟隨隊(duì)列中的最后指令的位置的重新啟動(dòng)指令指針相關(guān)聯(lián)的位置發(fā)送到管線的前端(例如在一些實(shí)施例中,獲取邏輯),但可在214或一經(jīng)退出超前運(yùn)行的另一合適的點(diǎn)處發(fā)送該位置而不脫離本公開的范圍。例如,在圖1示出的實(shí)施例中,由獲取邏輯106從由重新啟動(dòng)指令指針128所指示的位置所檢索的指令被分派到執(zhí)行邏輯112。在一些實(shí)施例中,可從調(diào)度器邏輯110和/或從獲取邏輯106分派新獲取的指令。例如,可將從由重新啟動(dòng)指令指針128所指示的位置所檢索的新獲取的指令從獲取邏輯106分派到解碼邏輯108用于在架構(gòu)指令的情況下的解碼。在一些實(shí)施例中,在新獲取的指令包括架構(gòu)指令的本地轉(zhuǎn)譯的設(shè)定中,從由重新啟動(dòng)指令指針128所指示的位置所檢索的新獲取的指令可繞過解碼邏輯108。無論指令是否被解碼,一經(jīng)到達(dá)調(diào)度器邏輯110,新獲取的指令在插入到隊(duì)列118中的最后完成的指令被重新分派之后被分派到執(zhí)行邏輯112。
[0056]圖7示意性地描繪示出被包括在存儲(chǔ)器系統(tǒng)102的一些示例中的附加細(xì)節(jié)的微處理器700的實(shí)施例。圖7中示出的微處理器700的實(shí)施例描繪存儲(chǔ)器系統(tǒng)102。存儲(chǔ)器系統(tǒng)102包括存儲(chǔ)器層級(jí)702,其可包括LI處理器高速緩存702A、L2處理器高速緩存702B、L3處理器高速緩存702C、主存儲(chǔ)器702D (例如一個(gè)或多個(gè)DRAM芯片)、二級(jí)存儲(chǔ)702E (例如磁性、固態(tài)和/或光學(xué)存儲(chǔ)單元)和/或三級(jí)存儲(chǔ)702F (例如磁帶群)。應(yīng)該理解示例存儲(chǔ)器/存儲(chǔ)部件以訪問時(shí)間和容量增大的順序列出,盡管有可能的例外。
[0057]存儲(chǔ)器控制器704可用來處置協(xié)議并提供主存儲(chǔ)器702D所需的信號(hào)接口以及可用來調(diào)度存儲(chǔ)器訪問。存儲(chǔ)器控制器可實(shí)現(xiàn)在處理器裸片(die)上或分開的裸片上。應(yīng)該理解以上所提供的存儲(chǔ)器層級(jí)是非限制性的并且可以使用其他存儲(chǔ)器層級(jí)而不脫離本公開的范圍。
[0058]圖7示出的微處理器700的實(shí)施例還包括一個(gè)或多個(gè)處理器寄存器706。在一些實(shí)施例中,寄存器706可被包括在通用寄存器堆中或另外合適地分布在微處理器700內(nèi)。寄存器706存儲(chǔ)在操作期間所使用的數(shù)據(jù)和/或指令。例如,管線級(jí)可從輸入寄存器獲得數(shù)據(jù),使用獲得的數(shù)據(jù)實(shí)施指定操作,并隨后將結(jié)果存儲(chǔ)在目標(biāo)寄存器。將理解的是,標(biāo)簽“目標(biāo)寄存器”和“輸入寄存器”是相對(duì)術(shù)語。例如,用于第一操作的目標(biāo)寄存器可起到用于另一操作的輸入寄存器的作用;類似地,用于一個(gè)操作的輸入寄存器可能已起到用于先前操作的目標(biāo)寄存器的作用,以此類推。
[0059]在一些實(shí)施例中,可采用配置為在寄存器706中指示相關(guān)聯(lián)位置的可信度的抑制位來擴(kuò)充一個(gè)或多個(gè)寄存器706。換句話說,每個(gè)抑制位指示被包括在相關(guān)聯(lián)寄存器706中的數(shù)據(jù)的有效性/無效性。例如,可使用抑制位以指示在超前運(yùn)行操作期間特定寄存器條目是否成為無效的。
[0060]圖7示出的微處理器700的實(shí)施例包括管線104。管線104包括獲取邏輯106、解碼邏輯108、調(diào)度器邏輯110、執(zhí)行邏輯112和回寫邏輯114。將理解的是,被包括在圖7示出的實(shí)施例中的管線104中的級(jí)以及圖1和6中示出的那些級(jí)是典型RISC實(shí)現(xiàn)方案的示例,但其并非意在限制。例如,在一些實(shí)施例中,可以在管線的上游提供獲取邏輯和調(diào)度器邏輯功能性,諸如編譯VLIW指令或指令集轉(zhuǎn)譯。在一些其他實(shí)施例中,調(diào)度器邏輯可被包括在微處理器的獲取邏輯和/或解碼邏輯中。更一般地,微處理器可包括獲取、解碼和執(zhí)行邏輯,其中的每一個(gè)可包括一個(gè)或多個(gè)級(jí),而由執(zhí)行邏輯實(shí)行mem (例如加載/存儲(chǔ))和回寫功能性。本公開同樣適用于這些和其他微處理器實(shí)現(xiàn)方案,包括可使用VLIW指令和/或其他邏輯指令的混合實(shí)現(xiàn)方案。
[0061]在所描述的示例中,可以每次一個(gè)地獲取和執(zhí)行指令,這可能要求多個(gè)時(shí)鐘周期。在此期間,大部分?jǐn)?shù)據(jù)路徑可能未被使用。補(bǔ)充或取代單個(gè)指令獲取,可使用預(yù)獲取方法來改善性能并避免與讀取和存儲(chǔ)操作(即讀取指令以及將這類指令加載到處理器寄存器和/或執(zhí)行隊(duì)列中)相關(guān)聯(lián)的時(shí)延瓶頸。因此,將理解的是可以使用任何合適的獲取、調(diào)度和分派指令的方式而不脫離本公開的范圍。
[0062]本書面描述使用示例來公開本發(fā)明,包括最佳模式,并且還使相關(guān)領(lǐng)域的普通技術(shù)人員能夠?qū)嵺`本發(fā)明,包括制造和使用任何設(shè)備或系統(tǒng)以及實(shí)施任何所包含的方法。本發(fā)明的可專利范圍由權(quán)利要求所定義,并且可以包括本領(lǐng)域普通技術(shù)人員所理解的其他示例。這類其他示例旨在處于權(quán)利要求的范圍內(nèi)。
【權(quán)利要求】
1.一種微處理器,包括: 調(diào)度器邏輯,用于發(fā)出一個(gè)或多個(gè)指令用于執(zhí)行; 執(zhí)行邏輯,用于執(zhí)行由所述調(diào)度器邏輯所發(fā)出的所述一個(gè)或多個(gè)指令; 隊(duì)列,用于保持一個(gè)或多個(gè)指令用于到所述執(zhí)行邏輯的重新分派;以及超前運(yùn)行控制邏輯,用于管理所述微處理器的超前運(yùn)行操作,所述超前運(yùn)行控制邏輯配置為: 檢測(cè)觸發(fā)超前運(yùn)行的事件, 響應(yīng)于檢測(cè)到所述觸發(fā)超前運(yùn)行的事件,(i)使所述微處理器操作在超前運(yùn)行中,并且(ii)將與所述觸發(fā)超前運(yùn)行的事件相關(guān)聯(lián)的觸發(fā)超前運(yùn)行的指令與一個(gè)或多個(gè)附加指令一起插入到所述隊(duì)列中, 一經(jīng)解決所述觸發(fā)超前運(yùn)行的事件則恢復(fù)非超前運(yùn)行操作,以及一經(jīng)恢復(fù)非超前運(yùn)行操作,則將所述觸發(fā)超前運(yùn)行的指令和所述一個(gè)或多個(gè)附加指令從所述隊(duì)列重新分派到所述執(zhí)行邏輯。
2.根據(jù)權(quán)利要求1所述的微處理器,其中所述調(diào)度器邏輯將所述一個(gè)或多個(gè)指令從所述隊(duì)列重新分派到所述執(zhí)行邏輯。
3.根據(jù)權(quán)利要求1所述的微處理器,進(jìn)一步包括分配指針,所述分配指針配置為指示用于被選擇用于插入到所述隊(duì)列中的指令的插入位置。
4.根據(jù)權(quán)利要求1所述的微處理器,進(jìn)一步包括讀指針,所述讀指針配置為指示所述隊(duì)列中的被讀取用于重新分派的位置。
5.根據(jù)權(quán)利要求4所述的微處理器,其中所述讀指針進(jìn)一步配置為一經(jīng)重新分派存儲(chǔ)在其中的指令,則釋出所述被讀取用于重新分派的位置。
6.根據(jù)權(quán)利要求1所述的微處理器,進(jìn)一步包括超前運(yùn)行重演隊(duì)列,所述超前運(yùn)行重演隊(duì)列配置為保持被標(biāo)識(shí)用于在超前運(yùn)行期間重演的一個(gè)或多個(gè)指令。
7.根據(jù)權(quán)利要求1所述的微處理器,進(jìn)一步包括: 跟蹤指針,其配置為跟蹤插入到所述隊(duì)列中的最后完成的指令的位置;以及重新啟動(dòng)指令指針,其配置為跟蹤在重新分派所述最后完成的指令之后要從獲取邏輯所分派的指令的位置。
8.根據(jù)權(quán)利要求7所述的微處理器,其中所述重新啟動(dòng)指令指針配置為響應(yīng)于所述跟蹤指針的更新而被更新。
9.根據(jù)權(quán)利要求1所述的微處理器,其中所述隊(duì)列配置為保持被標(biāo)識(shí)用于在非超前運(yùn)行操作期間重演的一個(gè)或多個(gè)指令。
10.根據(jù)權(quán)利要求1所述的微處理器,其中將所述觸發(fā)超前運(yùn)行的指令與所述一個(gè)或多個(gè)附加指令一起插入包括在所述微處理器在超前運(yùn)行操作中的同時(shí)凍結(jié)所述隊(duì)列。
【文檔編號(hào)】G06F9/30GK103914279SQ201310743131
【公開日】2014年7月9日 申請(qǐng)日期:2013年12月30日 優(yōu)先權(quán)日:2012年12月28日
【發(fā)明者】吉列爾莫·J·羅扎斯, 亞歷山大·克萊貝爾, 詹姆斯·范·策恩, 保羅·塞維斯, 布拉德·霍伊特, 斯里達(dá)蘭·羅摩克里希納, 亨斯·凡德斯庫特, 羅斯·澤格爾肯, 達(dá)雷爾·D·博格斯, 馬格努斯·??寺? 阿溫達(dá)哈·巴克他, 戴維·鄧恩 申請(qǐng)人:輝達(dá)公司