專利名稱:用于多線程的寄存器檢查點(diǎn)機(jī)制的制作方法
技術(shù)領(lǐng)域:
本公開一般涉及信息處理系統(tǒng)領(lǐng)域。本公開尤其涉及用于推測性多線程 (speculative multithreading)的寄存器檢查點(diǎn)機(jī)制。
背景技術(shù):
為了提高諸如包括微處理器的那些信息處理系統(tǒng)的性能,已開發(fā)出硬件和軟件技 術(shù)兩者。一種已開發(fā)來改善處理器性能的辦法被稱為“多線程”。在多線程中,一個指令流 被拆分成能并行執(zhí)行的多個指令流。在僅軟件多線程辦法中,諸如時間復(fù)用多線程或接通 事件多線程,這多個指令流是在同一共享處理器上交替地執(zhí)行的。日益增加地在硬件中支持多線程。例如,在一種辦法中,諸如芯片多處理器(CMP) 系統(tǒng)等多處理器系統(tǒng)中的處理器可同時各自對多個線程之一進(jìn)行動作。在被稱為同時多線 程(SMT)的另一種辦法中,使得單個物理處理器對操作系統(tǒng)和用戶程序而言看起來是多個 邏輯處理器。即,每個邏輯處理器維持完整的架構(gòu)狀態(tài)集,但物理處理器的幾乎所有其他資 源都被共享,這些資源諸如高速緩存、執(zhí)行單元、分支預(yù)測器控制邏輯和總線。這些線程同 時執(zhí)行并且比時間復(fù)用多線程或接通事件多線程更好地利用共享資源。對于諸如CMP和SMT多線程系統(tǒng)等為多線程提供硬件支持的那些系統(tǒng),在單線程 應(yīng)用的執(zhí)行期間,一個或更多個線程可能是空閑的。利用另外的空閑線程來推測性地使單 線程應(yīng)用并行化可提高執(zhí)行速度,但常常難以確定單線程應(yīng)用的哪些部分應(yīng)由另外的空閑 線程來推測性地執(zhí)行。推測性線程并不總是保證是獨(dú)立的。在運(yùn)行時間可能產(chǎn)生線程間依 存性,這導(dǎo)致誤推測并且將簡單地造成推測失敗。為了解決誤推測,可能需要恢復(fù)正確的架 構(gòu)狀態(tài)。迄今為止,尚未完全探索出用于解決推測性多線程系統(tǒng)中的此類誤推測的高效機(jī) 制。
本發(fā)明通過示例進(jìn)行說明,而且不旨在受限于附圖的各圖。圖1示出對推測性多線程使用寄存器檢查點(diǎn)機(jī)制的多線程處理系統(tǒng)的一個實(shí)施 例。圖2示出對推測性多線程使用寄存器檢查點(diǎn)機(jī)制的過程的一個實(shí)施例的流程圖。圖3示出對推測性多線程使用寄存器檢查點(diǎn)機(jī)制的過程的替換性實(shí)施例的流程 圖。
具體實(shí)施例方式公開了在多線程處理系統(tǒng)中使用寄存器檢查點(diǎn)機(jī)制來支持推測性多線程的方法 和裝置。每當(dāng)在運(yùn)行時間產(chǎn)生線程間依存性時,它們可能導(dǎo)致誤推測。解決誤推測可能要 求恢復(fù)正確的架構(gòu)狀態(tài)并且執(zhí)行回退到安全點(diǎn)。本發(fā)明的一些實(shí)施例包括存儲器,該存儲器具有存儲用于在多個線程中進(jìn)行誤推測恢復(fù)的檢查點(diǎn)數(shù)據(jù)的存儲區(qū)域。多線程單元并發(fā) 地執(zhí)行線程。線程單元可執(zhí)行檢查點(diǎn)掩碼指令以便將存儲區(qū)域初始化為存儲活躍檢查點(diǎn)數(shù) 據(jù),其包括寄存器內(nèi)容和指示所存儲的寄存器內(nèi)容的有效性的檢查點(diǎn)掩碼。隨著寄存器內(nèi) 容改變,線程單元可執(zhí)行檢查點(diǎn)寫指令以便為活躍檢查點(diǎn)存儲寄存器內(nèi)容并更新檢查點(diǎn)掩 碼。線程單元還可執(zhí)行恢復(fù)函數(shù)指令以存儲關(guān)于活躍檢查點(diǎn)的檢查點(diǎn)恢復(fù)函數(shù)的指令指 針,并且響應(yīng)于線程中的誤推測分支到檢查點(diǎn)恢復(fù)函數(shù)。線程單元隨后執(zhí)行一個或更多個 檢查點(diǎn)讀指令以便將數(shù)據(jù)從有效檢查點(diǎn)存儲區(qū)域復(fù)制到必要的寄存器中以恢復(fù)正確的架 構(gòu)狀態(tài),執(zhí)行可從該架構(gòu)狀態(tài)重新開始。由此,此類寄存器檢查點(diǎn)機(jī)制可提供可恢復(fù)的有效架構(gòu)狀態(tài)而不需要線程間同 步。線程單元異步地執(zhí)行線程并且因此無縫地協(xié)作以合并及構(gòu)建架構(gòu)狀態(tài)。將領(lǐng)會,本發(fā) 明的實(shí)施例允許精細(xì)粒度的推測性多線程。出于以下討論的清晰目的,在誤推測的上下文 中解決維持可恢復(fù)的有效架構(gòu)狀態(tài),但是將領(lǐng)會,在諸如中斷、異常、上下文切換等任何數(shù) 目個非預(yù)期打斷的情形中,可以用基本上相同的方式來促成恢復(fù)。同樣出于以下討論的清 晰目的,假定指令以順序次序提交或變得全局可見。本發(fā)明的這些和其他實(shí)施例可根據(jù)以下教示來實(shí)現(xiàn),并且應(yīng)當(dāng)明顯的是,可在以 下教示中作出各種修改和改變而不脫離本發(fā)明的較寬泛精神和范圍。因此,說明書和附圖 應(yīng)當(dāng)以說明性而非限制性的意義來對待,并且本發(fā)明僅根據(jù)權(quán)利要求及其等效技術(shù)方案來衡量。如已提到的,推測性線程并不總是保證是獨(dú)立的。已使用多種技術(shù)來靜態(tài)地或在 運(yùn)行時間檢測和解決線程間依存性。這些技術(shù)可以是基于軟件或基于硬件的,或者這兩者 的組合?;谟布母咚倬彺嬉恢滦曰A(chǔ)設(shè)施例如可用于檢測線程間依存性、和/或通過 針對名稱依存性重命名和/或針對運(yùn)行時間的真正依存性進(jìn)行轉(zhuǎn)發(fā)來解決線程間依存性。在軟件中,可執(zhí)行依賴于編譯器靜態(tài)地私有化數(shù)據(jù)的能力的名稱依存性解決方 案。那么其他依存性可在運(yùn)行時間檢測,并且將簡單地造成推測失敗。動態(tài)重命名也可用 來解決軟件中的名稱依存性,但在推測性執(zhí)行之后需要恢復(fù)階段。真正數(shù)據(jù)依存性可通過 廣播共享數(shù)據(jù)的地址并強(qiáng)迫這些地址上的線程在相關(guān)聯(lián)開銷下進(jìn)行同步來解決。懶惰轉(zhuǎn)發(fā) 技術(shù)也可用于真正數(shù)據(jù)依存性以降低同步開銷。也可在軟件中用檢查碼和數(shù)據(jù)結(jié)構(gòu)來擴(kuò)張 推測性負(fù)載和存儲以檢測誤推測。每當(dāng)在運(yùn)行時間產(chǎn)生線程間依存性時,它們可能導(dǎo)致誤推測。不管用于檢測誤推 測的機(jī)制如何,解決誤推測可能要求恢復(fù)正確的架構(gòu)狀態(tài)并且使執(zhí)行回退到安全點(diǎn)。本文 中所公開的技術(shù)針對維護(hù)架構(gòu)狀態(tài)檢查點(diǎn)并且使執(zhí)行回退到安全執(zhí)行點(diǎn),這些安全執(zhí)行點(diǎn) 與獨(dú)立于可用于依存性解決方案并檢測誤推測的其他機(jī)制的那些檢查點(diǎn)相對應(yīng)。圖1示出對推測性多線程使用寄存器檢查點(diǎn)機(jī)制的多線程處理系統(tǒng)101的一個實(shí) 施例。系統(tǒng)101的實(shí)施例可包括存儲器114,該存儲器具有存儲用于在多個推測性線程中 進(jìn)行誤推測恢復(fù)的檢查點(diǎn)141數(shù)據(jù)和檢查點(diǎn)145數(shù)據(jù)的存儲區(qū)域。多個線程單元111-131 經(jīng)由總線或任何其他互連117與存儲器114耦合,并且線程單元111-131并發(fā)地執(zhí)行其相 應(yīng)的線程。系統(tǒng)101的一些實(shí)施例還包括諸如處理器102等處理器,其具有多個線程單元 111和121。將領(lǐng)會,用于存儲檢查點(diǎn)141數(shù)據(jù)和檢查點(diǎn)145的存儲區(qū)域可由編譯器或由操 作系統(tǒng)在存儲器114中分配,或者存儲器114在硬件中可以處于隱藏或別名狀態(tài)。
線程單元111-131可通過其相應(yīng)的執(zhí)行單元112-132執(zhí)行檢查點(diǎn)掩碼指令以便 將存儲區(qū)域初始化為存儲活躍檢查點(diǎn)141數(shù)據(jù),包括多個存儲位置143-144用于存儲寄存 器113-133內(nèi)容和指示所存儲的寄存器113-133內(nèi)容的有效性的檢查點(diǎn)掩碼。將領(lǐng)會,在 一些實(shí)施例中,執(zhí)行單元112-132中的一個或更多個可由線程單元111-131中的一些物理 地共享。在一些實(shí)施例中,管理兩個存儲區(qū)域,一個用于存儲活躍檢查點(diǎn)141數(shù)據(jù),一個用 于存儲最近有效檢查點(diǎn)145數(shù)據(jù)。隨著寄存器113-133內(nèi)容改變,線程單元111-131可通 過相應(yīng)的執(zhí)行單元112-132執(zhí)行檢查點(diǎn)寫指令以便為活躍檢查點(diǎn)141存儲其相應(yīng)的寄存器 113-133內(nèi)容并更新關(guān)于所存儲的相應(yīng)寄存器的檢查點(diǎn)掩碼。對于一些實(shí)施例,更新檢查點(diǎn) 掩碼直至所有感興趣的寄存器內(nèi)容都已被存儲,此時活躍檢查點(diǎn)變成最近有效檢查點(diǎn),并 且可通過執(zhí)行另一個檢查點(diǎn)掩碼指令來初始化新的活躍檢查點(diǎn)。對于一些實(shí)施例,通過在 活躍檢查點(diǎn)掩碼完全有效時響應(yīng)于第一個成功的檢查點(diǎn)掩碼指令復(fù)制檢查點(diǎn)數(shù)據(jù),活躍檢 查點(diǎn)可變成最近有效檢查點(diǎn)。對于替換性實(shí)施例,可交換指針115和116。線程單元111-131還可通過相應(yīng)的執(zhí)行單元112-132執(zhí)行恢復(fù)函數(shù)指令以便將關(guān) 于檢查點(diǎn)恢復(fù)函數(shù)的指令指針存儲在用于活躍檢查點(diǎn)141數(shù)據(jù)的存儲位置142。對于一些 實(shí)施例,每個推測性線程可在用于活躍檢查點(diǎn)141數(shù)據(jù)的存儲位置142中存儲對應(yīng)截然不 同的檢查點(diǎn)恢復(fù)函數(shù)的截然不同的指令指針。響應(yīng)于線程單元111-131中任一個的推測性 線程中的誤推測,這些線程單元111-131可分支到檢查點(diǎn)恢復(fù)函數(shù)。線程單元111-131隨 后可通過相應(yīng)的執(zhí)行單元112-132執(zhí)行一個或更多個檢查點(diǎn)讀指令以便將數(shù)據(jù)從有效檢 查點(diǎn)145存儲區(qū)域復(fù)制到必要的相應(yīng)寄存器113-133中以恢復(fù)正確的架構(gòu)狀態(tài),執(zhí)行可從 該架構(gòu)狀態(tài)重新開始。對于支持推測性多線程的寄存器檢查點(diǎn)機(jī)制的指令的一個實(shí)施例,在表1中給出 描述。
指令范圍描述CP—MASK register—mask (0 _掩碼寄存器_掩 碼)全局通過將寄存器檢查點(diǎn)掩碼設(shè)置為 register_mask來初始化活躍檢查點(diǎn)。任 選地將所提交的檢查點(diǎn)信息復(fù)制到活躍 檢查點(diǎn)中。REC0VERY_FUNC ip (恢復(fù)_函數(shù)ip)線程指定用于在活躍檢查點(diǎn)中執(zhí)行線程的恢 復(fù)路線的指令指針(ip)。CP_WRITE reg, address 寄存器,地址)全局將架構(gòu)寄存器的內(nèi)容存儲到活躍檢查點(diǎn) 存儲的地址并將相應(yīng)的檢查點(diǎn)掩碼設(shè)為 有效。CP_READ reg, address 寄存器,地址)線程將所存儲的寄存器內(nèi)容從有效檢查點(diǎn)存 儲中的地址加載到架構(gòu)寄存器中。
7
表1.檢查點(diǎn)指令描述將領(lǐng)會,可作出或使用表1中所示的檢查點(diǎn)指令的各種替換性實(shí)施例而不脫離本 發(fā)明的原理。例如,檢查點(diǎn)掩碼可能無需由檢查點(diǎn)掩碼指令來顯式地設(shè)置,而是可提供寄存 器計(jì)數(shù)作為自變量。圖2示出對推測性多線程使用寄存器檢查點(diǎn)機(jī)制的過程201的一個實(shí)施例的流程 圖。過程201和本文中所公開的其他過程由處理塊來執(zhí)行,處理塊可包括專用硬件或軟件、 或者可由通用機(jī)器或由專用機(jī)器或由這兩者的組合執(zhí)行的固件操作碼。過程201和本文中 所公開的其他過程的處理塊也可由一個或更多個線程單元并發(fā)或并行或順序或無序地執(zhí) 行。在處理塊211中,執(zhí)行檢查點(diǎn)掩碼指令以便將用于活躍檢查點(diǎn)141的存儲器存儲 區(qū)域初始化為存儲至少第一數(shù)據(jù)143和第二數(shù)據(jù)144。在處理塊212中,當(dāng)發(fā)生中央處理單 元(CPU)寫時,例如在關(guān)鍵寄存器的內(nèi)容可能已改變的情形中,處理前進(jìn)到處理塊213,在 那里執(zhí)行檢查點(diǎn)寫指令以存儲與已改變的寄存器內(nèi)容相對應(yīng)的第一數(shù)據(jù)143、以及存儲第 二數(shù)據(jù)144,第二數(shù)據(jù)144的狀態(tài)指示關(guān)于該檢查點(diǎn)寫指令的已改變的寄存器內(nèi)容的有效 性狀態(tài)。否則處理前進(jìn)到處理塊214,在那里如果檢測到誤推測或其他需要回退的事件,則 處理前進(jìn)到處理塊215并且執(zhí)行回退到最近有效檢查點(diǎn)145。如果沒有檢測到誤推測或其 他此類事件,則處理從處理塊214正常地前進(jìn)到處理塊211并且初始化新的活躍檢查點(diǎn)。對于過程201的一些實(shí)施例,檢查點(diǎn)掩碼指令、檢查點(diǎn)寫指令以及用于使執(zhí)行回 退到最近有效檢查點(diǎn)的恢復(fù)碼全部由編譯器靜態(tài)地插入線程中。對于過程201的一些替換 性實(shí)施例,檢查點(diǎn)掩碼指令、檢查點(diǎn)寫指令以及用于使執(zhí)行回退到最近有效檢查點(diǎn)的恢復(fù) 碼可由動態(tài)優(yōu)化器或通過微代碼或由動態(tài)硬件機(jī)制動態(tài)地插入線程中。圖3示出對推測性多線程使用寄存器檢查點(diǎn)機(jī)制的過程302的替換性實(shí)施例的流 程圖。在處理塊311中,執(zhí)行恢復(fù)函數(shù)指令以便在用于活躍檢查點(diǎn)141的存儲器存儲區(qū) 域中存儲包括關(guān)于檢查點(diǎn)恢復(fù)函數(shù)的指令指針的第一數(shù)據(jù)142。在處理塊312中,當(dāng)發(fā)生 CPU寫時——例如在關(guān)鍵寄存器的內(nèi)容可能已改變的情形中,處理前進(jìn)到處理塊313,在那 里執(zhí)行檢查點(diǎn)寫指令以存儲與已改變的寄存器內(nèi)容相對應(yīng)的第二數(shù)據(jù)143、并且存儲第三 數(shù)據(jù)144,第三數(shù)據(jù)144的狀態(tài)指示關(guān)于該檢查點(diǎn)寫指令的已改變的寄存器內(nèi)容的有效性 狀態(tài)。否則處理前進(jìn)到處理塊314,在那里如果檢測到誤推測或其他此類事件,則處理前進(jìn) 到處理塊315,并且響應(yīng)于誤推測采取去往關(guān)于所述檢查點(diǎn)恢復(fù)函數(shù)的指令指針?biāo)付ǖ?位置的分支。隨后在處理塊316中,執(zhí)行一個或更多個檢查點(diǎn)讀指令以便將所存儲數(shù)據(jù)147 從用于最近有效檢查點(diǎn)145的所述存儲器存儲區(qū)域復(fù)制到必要的相應(yīng)寄存器中。如果在處 理塊314中沒有檢測到誤推測或其他此類事件,則處理可正常地前進(jìn)到處理塊311并且構(gòu) 建新的活躍檢查點(diǎn)。將領(lǐng)會,在過程301的一些實(shí)施例中,恢復(fù)函數(shù)指令、檢查點(diǎn)寫指令以及這一個或 更多個檢查點(diǎn)讀指令可由編譯器靜態(tài)地插入線程中,或者可由動態(tài)優(yōu)化器或通過任何其他 合適的方法動態(tài)地插入線程中。以上描述旨在解說本發(fā)明的優(yōu)選實(shí)施例。根據(jù)以上討論還應(yīng)該清楚,尤其是在快速增長且不容易預(yù)見進(jìn)一步進(jìn)步的這些技術(shù)領(lǐng)域,本領(lǐng)域技術(shù)人員可在裝置和細(xì)節(jié)上修改 本發(fā)明而不脫離落在所附權(quán)利要求及其等效技術(shù)方案的范圍內(nèi)的本發(fā)明原理。
權(quán)利要求
一種裝置,包括多個線程單元,用于并發(fā)地執(zhí)行多個線程,所述多個線程單元中的每一個能夠執(zhí)行檢查點(diǎn)寫指令;以及存儲器存儲區(qū)域,用于存儲關(guān)于在所述多個線程中的一個的執(zhí)行期間遭遇的檢查點(diǎn)寫指令的第一數(shù)據(jù),所述第一數(shù)據(jù)對應(yīng)于由所述檢查點(diǎn)寫指令正在寫的內(nèi)容數(shù)據(jù);其中所述存儲器存儲區(qū)域還用于存儲關(guān)于所述檢查點(diǎn)寫指令的第二數(shù)據(jù),所述第二數(shù)據(jù)的狀態(tài)響應(yīng)于所述檢查點(diǎn)寫指令的執(zhí)行指示所述檢查點(diǎn)寫指令的執(zhí)行狀態(tài)。
2.如權(quán)利要求1所述的裝置,其特征在于,所述多個線程單元中的每一個還能夠執(zhí)行 檢查點(diǎn)掩碼指令以初始化所述第二數(shù)據(jù)的狀態(tài)。
3.如權(quán)利要求2所述的裝置,其特征在于,執(zhí)行所述檢查點(diǎn)掩碼指令針對活躍檢查點(diǎn) 初始化所述第二數(shù)據(jù)的狀態(tài)。
4.如權(quán)利要求3所述的裝置,其特征在于,執(zhí)行所述檢查點(diǎn)掩碼指令將所提交的有效 檢查點(diǎn)復(fù)制到所述活躍檢查點(diǎn)中。
5.如權(quán)利要求1所述的裝置,其特征在于,所述多個線程單元中的每一個還能夠執(zhí)行 檢查點(diǎn)讀指令以將所述第一數(shù)據(jù)從所述存儲器存儲區(qū)域復(fù)制到寄存器中。
6.如權(quán)利要求1所述的裝置,其特征在于,所述存儲器存儲區(qū)域還用于存儲關(guān)于檢查 點(diǎn)恢復(fù)函數(shù)的第三數(shù)據(jù)。
7.如權(quán)利要求6所述的裝置,其特征在于,所述第三數(shù)據(jù)響應(yīng)于在所述多個線程中的 所述一個的執(zhí)行期間遭遇的恢復(fù)函數(shù)指令存儲關(guān)于所述檢查點(diǎn)恢復(fù)函數(shù)的指令指針。
8.一種多線程處理器,包括多個線程單元,用于并發(fā)地執(zhí)行多個線程,所述多個線程單元中的每一個能夠執(zhí)行檢 查點(diǎn)寫指令并且還能夠執(zhí)行檢查點(diǎn)掩碼指令;所述多個線程單元中的一個的執(zhí)行單元,響應(yīng)于所述檢查點(diǎn)掩碼指令將存儲器存儲區(qū) 域初始化為存儲至少第一數(shù)據(jù)和第二數(shù)據(jù);以及所述執(zhí)行單元響應(yīng)于所述檢查點(diǎn)寫指令存儲與所述檢查點(diǎn)寫指令正在寫的寄存器內(nèi) 容數(shù)據(jù)相對應(yīng)的所述第一數(shù)據(jù)、并且存儲所述第二數(shù)據(jù),所述第二數(shù)據(jù)的狀態(tài)指示關(guān)于所 述檢查點(diǎn)寫指令的所述寄存器內(nèi)容數(shù)據(jù)的執(zhí)行狀態(tài)。
9.如權(quán)利要求8所述的處理器,其特征在于,所述多個線程單元中的每一個還能夠執(zhí) 行檢查點(diǎn)讀指令以將所述第一數(shù)據(jù)從所述存儲器存儲區(qū)域復(fù)制到寄存器中。
10.如權(quán)利要求9所述的處理器,其特征在于,所述多個線程單元中的每一個還能夠執(zhí) 行恢復(fù)函數(shù)指令以在所述存儲器存儲區(qū)域中存儲包括關(guān)于檢查點(diǎn)恢復(fù)函數(shù)的指令指針的 第三數(shù)據(jù)。
11.一種用于推測性地執(zhí)行多個線程的機(jī)器實(shí)現(xiàn)的方法,包括執(zhí)行檢查點(diǎn)掩碼指令以將存儲器存儲區(qū)域初始化為存儲至少第一數(shù)據(jù)和第二數(shù)據(jù);以及執(zhí)行檢查點(diǎn)寫指令以存儲與所述檢查點(diǎn)寫指令正在寫的寄存器內(nèi)容數(shù)據(jù)相對應(yīng)的所 述第一數(shù)據(jù)、并且存儲所述第二數(shù)據(jù),所述第二數(shù)據(jù)的狀態(tài)指示關(guān)于所述檢查點(diǎn)寫指令的 所述寄存器內(nèi)容數(shù)據(jù)的狀態(tài)。
12.如權(quán)利要求11所述的方法,其特征在于,還包括執(zhí)行恢復(fù)函數(shù)指令以在所述存儲器存儲區(qū)域中存儲包括關(guān)于檢查點(diǎn)恢復(fù)函數(shù)的指令 指針的第三數(shù)據(jù)。
13.如權(quán)利要求12所述的方法,其特征在于,還包括執(zhí)行檢查點(diǎn)讀指令以將所述第一數(shù)據(jù)從所述存儲器存儲區(qū)域復(fù)制到所述寄存器中。
14.如權(quán)利要求12所述的方法,其特征在于,執(zhí)行所述檢查點(diǎn)讀指令是響應(yīng)于所述多 個線程中的誤推測而分支到由關(guān)于所述檢查點(diǎn)恢復(fù)函數(shù)的所述指令指針?biāo)付ǖ奈恢玫慕Y(jié)果。
15.一種用于多個線程中的誤推測恢復(fù)的機(jī)器實(shí)現(xiàn)的方法,包括執(zhí)行恢復(fù)函數(shù)指令以在存儲器存儲區(qū)域中存儲包括關(guān)于檢查點(diǎn)恢復(fù)函數(shù)的指令指針 的第一數(shù)據(jù);響應(yīng)于所述多個線程中的誤推測而分支到由關(guān)于所述檢查點(diǎn)恢復(fù)函數(shù)的所述指令指 針?biāo)付ǖ奈恢?;以及?zhí)行檢查點(diǎn)讀指令以將第二數(shù)據(jù)從所述存儲器存儲區(qū)域復(fù)制到寄存器中。
16.如權(quán)利要求15所述的方法,其特征在于,還包括執(zhí)行檢查點(diǎn)掩碼指令以針對新檢查點(diǎn)將所述存儲器存儲區(qū)域初始化為存儲至少所述 第一數(shù)據(jù)、所述第二數(shù)據(jù)和第三數(shù)據(jù);以及執(zhí)行檢查點(diǎn)寫指令以存儲與所述檢查點(diǎn)寫指令正在寫的寄存器內(nèi)容數(shù)據(jù)相對應(yīng)的所 述第二數(shù)據(jù)、并且存儲所述第三數(shù)據(jù),所述第三數(shù)據(jù)的狀態(tài)指示關(guān)于所述檢查點(diǎn)寫指令的 所述寄存器內(nèi)容數(shù)據(jù)的狀態(tài)。
17.如權(quán)利要求16所述的方法,其特征在于,執(zhí)行所述檢查點(diǎn)掩碼指令將所提交的有 效檢查點(diǎn)復(fù)制到活躍檢查點(diǎn)中。
18.一種多線程處理系統(tǒng),包括存儲器,其具有存儲用于在多個線程中進(jìn)行誤推測恢復(fù)的數(shù)據(jù)的存儲器存儲區(qū)域;多個線程單元,用于并發(fā)地執(zhí)行所述多個線程,所述多個線程單元中的每一個能夠執(zhí) 行檢查點(diǎn)寫指令并且還能夠執(zhí)行檢查點(diǎn)掩碼指令;所述多個線程單元中的一個的執(zhí)行單元,響應(yīng)于所述檢查點(diǎn)掩碼指令將所述存儲器存 儲區(qū)域初始化為存儲至少第一數(shù)據(jù)和第二數(shù)據(jù);以及所述執(zhí)行單元響應(yīng)于所述檢查點(diǎn)寫指令存儲與所述檢查點(diǎn)寫指令正在寫的寄存器內(nèi) 容數(shù)據(jù)相對應(yīng)的所述第一數(shù)據(jù)、并且存儲所述第二數(shù)據(jù),所述第二數(shù)據(jù)的狀態(tài)指示關(guān)于所 述檢查點(diǎn)寫指令的所述寄存器內(nèi)容數(shù)據(jù)的執(zhí)行狀態(tài)。
19.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述多個線程單元中的每一個還能夠執(zhí) 行檢查點(diǎn)讀指令以將所述第一數(shù)據(jù)從所述存儲器存儲區(qū)域復(fù)制到所述寄存器中。
20.如權(quán)利要求19所述的系統(tǒng),其特征在于,所述多個線程單元中的每一個還能夠執(zhí) 行恢復(fù)函數(shù)指令以在所述存儲器存儲區(qū)域中存儲包括關(guān)于檢查點(diǎn)恢復(fù)函數(shù)的指令指針的 第三數(shù)據(jù)。
21.—種多線程處理系統(tǒng),包括存儲器,其具有存儲用于在多個線程中進(jìn)行誤推測恢復(fù)的數(shù)據(jù)的存儲器存儲區(qū)域;多個線程單元,用于并發(fā)地執(zhí)行所述多個線程,所述多個線程單元中的每一個能夠執(zhí) 行恢復(fù)函數(shù)指令并且還能夠執(zhí)行檢查點(diǎn)讀指令;所述多個線程單元中的一個的執(zhí)行單元,響應(yīng)于所述恢復(fù)函數(shù)指令在所述存儲器存儲 區(qū)域中存儲包括關(guān)于檢查點(diǎn)恢復(fù)函數(shù)的指令指針的第一數(shù)據(jù);所述多個線程單元中的所述一個,響應(yīng)于所述多個線程中的誤推測分支到由關(guān)于所述 檢查點(diǎn)恢復(fù)函數(shù)的所述指令指針?biāo)付ǖ奈恢?;以及所述?zhí)行單元,響應(yīng)于所述檢查點(diǎn)讀指令將第二數(shù)據(jù)從所述存儲器存儲區(qū)域復(fù)制到寄 存器中。
22.如權(quán)利要求21所述的系統(tǒng),其特征在于響應(yīng)于檢查點(diǎn)掩碼指令,所述多個線程單元中的所述一個針對新檢查點(diǎn)將所述存儲器 存儲區(qū)域初始化為存儲至少所述第一數(shù)據(jù)、所述第二數(shù)據(jù)和第三數(shù)據(jù);以及響應(yīng)于檢查點(diǎn)寫指令,所述多個線程單元中的所述一個存儲與所述檢查點(diǎn)寫指令正在 寫的寄存器內(nèi)容數(shù)據(jù)相對應(yīng)的所述第二數(shù)據(jù)、并且存儲所述第三數(shù)據(jù),所述第三數(shù)據(jù)的狀 態(tài)指示關(guān)于所述檢查點(diǎn)寫指令的所述寄存器內(nèi)容數(shù)據(jù)的狀態(tài)。
23.如權(quán)利要求22所述的系統(tǒng),其特征在于,執(zhí)行所述檢查點(diǎn)掩碼指令將所提交的有 效檢查點(diǎn)復(fù)制到活躍檢查點(diǎn)中。
全文摘要
公開了使用寄存器檢查點(diǎn)機(jī)制來解決多線程誤推測的方法和裝置?;謴?fù)有效的架構(gòu)狀態(tài)并且執(zhí)行回退。一些實(shí)施例包括用于存儲檢查點(diǎn)數(shù)據(jù)的存儲器。多線程單元并發(fā)地執(zhí)行線程。它們執(zhí)行檢查點(diǎn)掩碼指令以便將存儲器初始化為存儲活躍檢查點(diǎn)數(shù)據(jù),其包括寄存器內(nèi)容和指示所存儲寄存器內(nèi)容的有效性的檢查點(diǎn)掩碼。隨著寄存器內(nèi)容改變,線程執(zhí)行檢查點(diǎn)寫指令以存儲寄存器內(nèi)容并更新檢查點(diǎn)掩碼。線程還執(zhí)行恢復(fù)函數(shù)指令以存儲至檢查點(diǎn)恢復(fù)函數(shù)的指針,并且響應(yīng)于線程中的誤推測分支到檢查點(diǎn)恢復(fù)函數(shù)。線程隨后執(zhí)行一個或更多個檢查點(diǎn)讀指令以便將數(shù)據(jù)從有效檢查點(diǎn)存儲區(qū)域復(fù)制到必要的寄存器中以恢復(fù)有效的架構(gòu)狀態(tài),執(zhí)行可從該架構(gòu)狀態(tài)重新開始。
文檔編號G06F9/38GK101916183SQ20101016108
公開日2010年12月15日 申請日期2010年4月6日 優(yōu)先權(quán)日2009年4月8日
發(fā)明者A·岡薩雷斯, A·馬丁內(nèi)斯, C·瑪?shù)吕锼? E·G·康迪那, F·拉托瑞, J·M·康迪那, P·洛佩茨, R·馬丁內(nèi)斯 申請人:英特爾公司