對于基于存儲資歷實現(xiàn)從不同線程進行轉(zhuǎn)發(fā)的線程不可知的加載存儲緩沖器的制造方法
【專利說明】對于基于存儲資歷實現(xiàn)從不同線程進行轉(zhuǎn)發(fā)的線程不可知的加載存儲緩沖器
[0001]本申請要求2012年6月15日由Mohammad A.Abdallah提交的題為“A LOAD STOREBUFFER AGNOSTIC TO THREADS IMPLEMENTING FORWARDING FROM DIFFERENT THREADS BASEDON STORE SEN1RITY”的共同待決共同轉(zhuǎn)讓的美國臨時專利申請序號61/660,526的權(quán)益,并且該申請被整體地并入到本文中。
技術(shù)領(lǐng)域
[0002]本發(fā)明總體涉及數(shù)字計算機系統(tǒng),更具體地涉及用于選擇指令(包括指令序列)的系統(tǒng)和方法。
【背景技術(shù)】
[0003]要求處理器來處理相關(guān)或完全獨立的多個任務。此類處理器的內(nèi)部狀態(tài)通常由在程序執(zhí)行的每個特定時刻可能保持不同的值的寄存器組成。在程序執(zhí)行的每個時刻,將內(nèi)部狀態(tài)圖像稱為處理器的架構(gòu)狀態(tài)。
[0004]當架構(gòu)代碼執(zhí)行切換成運行另一功能(例如,另一線程、進程或程序)時,然后必須保存機器/處理器的狀態(tài),使得新功能可以利用內(nèi)部寄存器以構(gòu)建其新狀態(tài)。一旦新功能已終止,則可以丟棄其狀態(tài),并且先前情境的狀態(tài)將被恢復且該執(zhí)行又繼續(xù)。此類切換過程稱為情境切換,并且通常包括10個或數(shù)百個循環(huán),尤其是在采用大量寄存器(例如,64、128,256)和/或亂序執(zhí)行的現(xiàn)代架構(gòu)的情況下。
[0005]在線程感知硬件架構(gòu)中,硬件支持用于有限數(shù)目的硬件支持線程的多個情境狀態(tài)是正常的。在這種情況下,硬件復制用于每個所支持線程的所有架構(gòu)狀態(tài)元素。這消除了在執(zhí)行新線程時的情境切換的需要。然而,這仍具有多個缺點,即復制用于用硬件中所支持的每個附加線程的所有架構(gòu)狀態(tài)元素(即,寄存器)的面積、功率和復雜性。另外,如果軟件線程的數(shù)目超過明確支持的硬件線程的數(shù)目,則仍必須執(zhí)行情境切換。
[0006]這變得常見,因為在要求大量線程的細粒度基礎(chǔ)上需要并行性。具有復制情境狀態(tài)硬件存儲的硬件線程感知架構(gòu)無助于非線程軟件代碼,并且僅僅減少了用于被線程化的軟件的情境切換的次數(shù)。然而,那些線程通常是針對粗粒并行性而構(gòu)造的,并且導致用于發(fā)起和同步、離開細粒并行性的沉重軟件開銷,諸如函數(shù)調(diào)用和回路并行執(zhí)行,而沒有高效的線程化發(fā)起/自動生成。此類所述開銷伴隨著針對非明確/容易并行化/線程化軟件代碼而使用現(xiàn)有技術(shù)編譯程序或用戶并行化技術(shù)進行此類代碼的自動并行化的困難。
【發(fā)明內(nèi)容】
[0007]在一個實施例中,將本發(fā)明實現(xiàn)為一種用于在使用共享存儲器資源的存儲器一致性模型中的亂序加載的線程不可知統(tǒng)一存儲隊列和統(tǒng)一加載隊列方法。該方法包括:實現(xiàn)能夠由多個異步核心訪問的存儲器資源,其中所述多個核心共享統(tǒng)一存儲隊列和統(tǒng)一加載隊列;以及實現(xiàn)訪問掩碼,該訪問掩碼通過跟蹤高速緩存的哪些字經(jīng)由加載被訪問來運行,其中高速緩存線包括存儲器資源,其中加載在訪問高速緩存線的字時設(shè)置訪問掩碼內(nèi)的掩碼位,并且其中掩碼位阻止從多個核心的來自其他加載的訪問。該方法還包括:在執(zhí)行從多個核心到高速緩存線的后續(xù)存儲時檢查訪問掩碼,其中來自不同線程的存儲能夠在仍保持按序存儲器一致性語義的同時向不同線程的加載進行轉(zhuǎn)發(fā);以及當?shù)礁咚倬彺婢€的部分的后續(xù)存儲在訪問掩碼中見到來自加載的在先標記時導致缺失預測,其中后續(xù)存儲將通過使用跟蹤符寄存器和線程ID寄存器來用信號發(fā)送對應于該加載的加載隊列條目。
[0008]前述是概要且因此必要地包含細節(jié)的簡化、一般化以及省略;因此,本領(lǐng)域的技術(shù)人員將認識到的是該概要僅僅是說明性的且并不意圖以任何方式是限制性的。單獨地由權(quán)利要求定義的本發(fā)明的其他方面、發(fā)明特征以及優(yōu)點在下面闡述的非限制性詳細描述中將變得顯而易見。
【附圖說明】
[0009]在附圖中以示例的方式而不是以限制的方式舉例說明本發(fā)明,并且在附圖中相同的附圖標記指示類似元件。
[0010]圖1示出了根據(jù)本發(fā)明的一個實施例的加載隊列和存儲隊列。
[0011]圖2示出了根據(jù)本發(fā)明的一個實施例的加載和存儲指令分離的第一圖。
[0012]圖3示出了根據(jù)本發(fā)明的一個實施例的加載和存儲指令分離的第二圖。
[0013]圖4示出了根據(jù)本發(fā)明的一個實施例的過程的步驟的流程圖,其中圖示出用于實現(xiàn)從由加載存儲重新排序和優(yōu)化所引發(fā)的推測性轉(zhuǎn)發(fā)缺失預測/錯誤中恢復的規(guī)則。
[0014]圖5示出了圖示出根據(jù)本發(fā)明的一個實施例的用處理器的加載隊列和存儲隊列資源來實現(xiàn)過程300的規(guī)則的方式的圖。
[0015]圖6示出了圖示出根據(jù)本發(fā)明的一個實施例的用處理器的加載隊列和存儲隊列資源來實現(xiàn)過程300的規(guī)則的方式的另一圖。
[0016]圖7示出了圖示出根據(jù)本發(fā)明的一個實施例的用處理器的加載隊列和存儲隊列資源來實現(xiàn)過程300的規(guī)則的方式的另一圖。
[0017]圖8示出了根據(jù)本發(fā)明的一個實施例的其中在加載之后分派存儲的分派功能的概述的過程的流程圖。
[0018]圖9示出了根據(jù)本發(fā)明的一個實施例的其中在存儲之后分派存儲的分派功能的概述的過程的流程圖。
[0019]圖10示出了根據(jù)本發(fā)明的一個實施例的統(tǒng)一加載隊列的圖。
[0020]圖11示出了示出根據(jù)本發(fā)明的一個實施例的滑動加載分派窗口的統(tǒng)一加載隊列。
[0021]圖12示出了根據(jù)本發(fā)明的一個實施例的分布式加載隊列。
[0022]圖13示出了根據(jù)本發(fā)明的一個實施例的具有按序連續(xù)性的分布式加載隊列。
[0023]圖14示出了根據(jù)本發(fā)明的一個實施例的用于多核處理器的分段存儲器子系統(tǒng)的圖。
[0024]圖15示出了如何通過本發(fā)明的實施例來處理加載和存儲的圖。
[0025]圖16示出了根據(jù)本發(fā)明的一個實施例的存儲過濾算法的圖。
[0026]圖17示出了根據(jù)本發(fā)明的一個實施例的在組成按序從存儲器進行讀取的加載的存儲器一致性模型中具有亂序加載的信號量實現(xiàn)方式。
[0027]圖18示出了根據(jù)本發(fā)明的一個實施例的到通過使用基于鎖的模型和基于事務的模型兩者而組成按序的用于存儲器的加載讀取的存儲器一致性模型中的亂序加載。
[0028]圖19示出了根據(jù)本發(fā)明的一個實施例的多核分段存儲器子系統(tǒng)的多個核心。
[0029]圖20示出了根據(jù)本發(fā)明的一個實施例的訪問統(tǒng)一存儲隊列的異步核心的圖,其中存儲可以基于存儲資歷而從任一線程獲得。
[0030]圖21示出了描繪根據(jù)本發(fā)明的一個實施例的其中存儲相比于其他線程中的對應存儲而言具有資歷的功能的圖。
[0031]圖22示出了根據(jù)本發(fā)明的一個實施例的非消歧亂序加載存儲隊列退出實現(xiàn)方式。
[0032]圖23示出了根據(jù)本發(fā)明的一個實施例的非消歧亂序加載存儲隊列重新排序?qū)崿F(xiàn)方式的重新排序?qū)崿F(xiàn)方式。
[0033]圖24示出了根據(jù)本發(fā)明的一個實施例的指令序列(例如,蹤跡)重新排序的推測性執(zhí)行實現(xiàn)方式。
[0034]圖25示出了根據(jù)本發(fā)明的一個實施例的示例性微處理器管線的圖。
【具體實施方式】
[0035]雖然已結(jié)合一個實施例描述了本發(fā)明,但本發(fā)明并不意圖局限于本文中所闡述的特定形式。相反地,其意圖涵蓋可以適當?shù)匕ㄔ谟伤綑?quán)利要求定義的本發(fā)明的范圍內(nèi)的此類替換、修改以及等同物。
[0036]在以下詳細描述中,已闡述了許多特定細節(jié),諸如特定方法順序、結(jié)構(gòu)、元件以及連接。然而應理解的是不需要利用這些及其他特定細節(jié)來實施本發(fā)明的實施例。在其他情況下,已省略眾所周知的結(jié)構(gòu)、元件或連接或未特別詳細地描述以避免不必要地使本描述含糊。
[0037]在本說明書內(nèi)對“一個實施例”或“實施例”的引用意圖指示在本發(fā)明的至少一個實施例中包括結(jié)合該實施例所述的特定特征、結(jié)構(gòu)或特性。短語“在一個實施例中”在本說明書內(nèi)的各種位置上的出現(xiàn)并不一定全部參考同一實施例,也不是其他實施例的互斥的單獨或替換實施例。此外,描述了某些實施例可展示出而其他的沒有的各種特征。同樣地,描述了對于某些實施例而言可能是要求但其他實施例并非如此的各種要求。
[0038]隨后的詳細描述的某些部分是在對計算機存儲器內(nèi)的數(shù)據(jù)位的操作的程序、步驟、邏輯塊、處理及其他符號表示方面提出的。這些算法描述和表示是數(shù)據(jù)處理領(lǐng)域的技術(shù)人員用來最有效地向本領(lǐng)域的其他人傳達其工作的實質(zhì)的手段。程序、計算機執(zhí)行步驟、邏輯塊、過程等在這里且一般地被設(shè)想為是導致期望結(jié)果的步驟或指令的自相一致序列。該步驟是要求物理量的物理操作的那些。通常但不一定,這些量采取計算機可讀存儲介質(zhì)的電或磁信號的形式,并且能夠在計算機系統(tǒng)中被存儲、傳輸、組合、比較以及操縱。主要由于一般使用的原因,已證明將這些信號稱為位、值、元素、符號、字符、項、數(shù)字等有時是方便的。
[0039]然而,應記住的是所有這些和類似術(shù)語將與適當?shù)奈锢砹肯嚓P(guān)聯(lián)且僅僅是應用于這些量的方便標記。如從以下討論顯而易見的那樣,除非另外具體地說,應認識到的是遍及本發(fā)明,利用諸如“處理”或“訪問”或“寫”或“存儲”或“復制”等等術(shù)語的討論指的是計算機系統(tǒng)或類似電子計算設(shè)備的動作或過程,其對在計算機系統(tǒng)的寄存器和存儲器及其他計算機可讀介質(zhì)內(nèi)表示為物理(例如,電子)量的數(shù)據(jù)進行操縱并變換成在計算機系統(tǒng)存儲器或寄存器或其他此類信息存儲、傳輸或顯示設(shè)備內(nèi)同樣地表示為物理量的其他數(shù)據(jù)。
[0040]本發(fā)明的實施例實現(xiàn)了亂序指令調(diào)度過程,其中允許輸入指令序列內(nèi)的指令在處理器資源可用于執(zhí)行它們時就立即亂序發(fā)出。本發(fā)明的實施例能夠確保外部代理見到指令按序執(zhí)行(例如,存儲器一致性規(guī)則/模型)。確保指令對外部代理可見地按序執(zhí)行,從而確保無錯誤程序執(zhí)行。本發(fā)明的實施例確保處理器的存儲器分級結(jié)構(gòu)(例如,LI高速緩存、L2高速緩存、系統(tǒng)存儲器等)見到指令的一致按序執(zhí)行。
[0041]圖1示出了根據(jù)本發(fā)明的一個實施例的加載隊列和存儲隊列。圖1還示出了輸入指令序列。如上所述,處理器的存儲器分級結(jié)構(gòu)(例如,LI高速緩存、L2高速緩存、系統(tǒng)存儲器等)見到指令的一致性按序執(zhí)行。其后常常稱為加載/存儲隊列的加載隊列和存儲隊列可以用來保持按序執(zhí)行的語義。
[0042]另外,加載和存儲的亂序執(zhí)行引發(fā)推測性執(zhí)行。當執(zhí)行推測性執(zhí)行時,機器需要識別推測性錯誤。在圖1的實施例中,加載/存儲隊列提供了一種用于實現(xiàn)從由加載存儲重新排序和優(yōu)化引發(fā)的推測性轉(zhuǎn)發(fā)或缺失預測/錯誤中恢復的系統(tǒng)。加載/存儲隊列包括允許從作為轉(zhuǎn)發(fā)、分支和錯誤的結(jié)果而由加載存儲重新排序/優(yōu)化引發(fā)的推測性錯誤中恢復的硬件支持。為了允許機器從推測性錯誤中恢復,將推測性執(zhí)行的結(jié)果保持在加載隊列和存儲隊列中。加載隊列和存儲隊列保持推測性執(zhí)行的結(jié)果直至可以修正錯誤且可以使存儲結(jié)果退出(retire)至存儲器為止。加載隊列和存儲隊列的推測性執(zhí)行內(nèi)容對于外部代理而言是不可見的。相對于可見性,存儲需要按序退出至存儲器。
[0043]圖2示出了根據(jù)本發(fā)明的一個實施例的加載和存儲指令分離的第一圖。本發(fā)明的一個特征是這樣的事實,即加載被分離成兩個宏指令,第一個進行地址計算并取讀到臨時位置(加載存儲隊列),并且第二個是存儲器地址內(nèi)容(數(shù)據(jù))到寄存器或ALU目的地的加載。應注意的是雖然在將加載和存儲指令分離成兩個相應宏指令并將其重新排序的情境內(nèi)描述了本發(fā)明的實施例,但可以通過在微代碼情境內(nèi)將加載和存儲指令分離成兩個相應微指令并將其重新排序來實現(xiàn)該方法和系統(tǒng)。
[0044]該功能對于存儲而言是相同的。存儲也被分離成兩個宏指令。第一指令是存儲地址和取讀,第二指令是該地址處的數(shù)據(jù)的存儲。存儲和兩個指令的分離遵循與下面針對加載所述的相同規(guī)則。