TWI646422B - 在處理器中之免消歧義失序載入/儲存佇列方法、微處理器、和非暫態性電腦可讀取儲存媒體 - Google Patents
在處理器中之免消歧義失序載入/儲存佇列方法、微處理器、和非暫態性電腦可讀取儲存媒體 Download PDFInfo
- Publication number
- TWI646422B TWI646422B TW106125574A TW106125574A TWI646422B TW I646422 B TWI646422 B TW I646422B TW 106125574 A TW106125574 A TW 106125574A TW 106125574 A TW106125574 A TW 106125574A TW I646422 B TWI646422 B TW I646422B
- Authority
- TW
- Taiwan
- Prior art keywords
- load
- storage
- queue
- store
- input
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 239000000872 buffer Substances 0.000 claims abstract description 41
- 239000012536 storage buffer Substances 0.000 claims description 6
- 238000012546 transfer Methods 0.000 abstract description 36
- 230000001360 synchronised effect Effects 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 30
- 230000008569 process Effects 0.000 description 18
- 230000006870 function Effects 0.000 description 15
- 239000012634 fragment Substances 0.000 description 14
- 238000012545 processing Methods 0.000 description 14
- 238000004364 calculation method Methods 0.000 description 11
- 238000012797 qualification Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 238000011084 recovery Methods 0.000 description 4
- 230000009977 dual effect Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000004224 protection Effects 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000001568 sexual effect Effects 0.000 description 1
- 230000004083 survival effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本發明揭示一種在處理器內的免消歧義失序載入儲存佇列方法。該方法包含:實施記憶體資源,其可由複數個非同步核心所存取;實施儲存退出緩衝區,其中,來自儲存佇列的儲存具有在該儲存退出緩衝區內依照原始程式順序的輸入;及在派遣來自載入佇列的後續載入後,立即針對位址匹配而搜尋該儲存退出緩衝區。該方法更包含在具有複數個位址匹配的情況下,藉由針對第一匹配而掃描該儲存退出緩衝區來找出正確的轉送輸入、及將來自該第一匹配的資料轉送至該後續載入。
Description
本發明一般係關於數位電腦系統,尤其係關於選擇包括指令序列的指令之系統及方法。
處理器需要處理多個不是相依就是完全獨立的任務。這種處理器的內部狀態通常由暫存器構成,這些暫存器可在程式執行的每一個特定瞬間(instance)保有不同值。在程式執行的每一個瞬間,內部狀態影像(internal state image)被稱為處理器的架構狀態。
當程式碼執行被切換成運行另一功能時(例如,另一執行緒、處理或程式),則必須儲存機器/處理器的狀態,使得該新功能可運用內部暫存器來建立自己的新狀態。一旦已經終止該新功能,則可忽略其狀態,且將復原先前上下文的狀態然後恢復執行。這種切換處理稱為上下文切換(context switch),且通常包含數十個或數百個循
環,尤其是具有運用大量的暫存器(例如,64、128、256)及/或失序(out of order)執行的現代架構。
在執行緒感知(thread-aware)硬體架構內,正常硬體可支援有限數量硬體支援執行緒的多個上下文狀態。在此狀況下,該硬體將所有架構狀態元件複製給每一支援的執行緒。這免除執行新執行緒時上下文切換的需求。不過,這仍舊具有多項缺點,換言之就是複製所有架構狀態元件(即是暫存器)每個硬體內支援的每一個額外執行緒之區域、功率與複雜度。此外,若軟體執行緒的數量超出明確支援硬體執行緒的數量,則仍舊必須執行上下文切換。
這對於需要大量執行緒的細微粒度基礎上需要並行處理來說已經司空見慣。含有複製上下文狀態硬體儲存之該等硬體執行緒感知架構並不幫助非執行緒軟體程式碼,只會減少已經運行執行緒的軟體之上下文切換的數量。不過,這些執行緒通常僅被建構用於粗粒度並行處理,並且造成針對初始化以及同步化之繁重的額外開銷(overhead),使得例如函數呼叫以及迴圈並行執行這類細粒度並行處理不具備有效的執行緒初始化/自動產生。此等所述的額外開銷伴隨著難以將最先進的編譯器或使用者並行處理技術,用於非明確/簡易並行處理/執行緒軟體程式碼,讓這些程式碼自動並行處理。
在一個具體實施例中,本發明係實施為一種免消歧義失序載入儲存佇列方法。該方法包含:實施記憶體資源,其可由複數個非同步核心所存取;實施儲存退出緩衝區,其中,來自儲存佇列的儲存具有在該儲存退出緩衝區內依照原始程式順序的輸入;及在派遣來自載入佇列的後續載入後,立即針對位址匹配而搜尋該儲存退出緩衝區。該方法更包含在具有複數個位址匹配的情況下,藉由針對第一匹配而掃描該儲存退出緩衝區,找出正確的轉送輸入、及將來自該第一匹配的資料轉送至該後續載入。
上述為總結,因此必須簡單扼要且省略細節;因此精通技術人士將了解,該總結僅為例示,並不成為任何限制。從下列非限制的詳細說明當中,將了解如同申請專利範圍所單獨定義的本發明之其他態樣、發明特色以及優點。
400‧‧‧處理
410‧‧‧分配指標器
800‧‧‧處理
900‧‧‧處理
1200‧‧‧互連
1201‧‧‧互連
1211‧‧‧片段
1202‧‧‧位址陣列
1206‧‧‧標籤陣列
1207‧‧‧資料陣列
2101-2105‧‧‧線
2500‧‧‧微處理器管線
2501‧‧‧擷取模組
2502‧‧‧解碼模組
2503‧‧‧分配模組
2504‧‧‧派遣模組
2505‧‧‧執行模組
2506‧‧‧退出模組
本發明藉由範例進行說明且不受其限制,在附圖中的數據以及其中相同的參考編號指示相同的元件。
圖1顯示根據本發明之一個具體實施例的載入佇列與儲存佇列。
圖2顯示根據本發明之一個具體實施例載入與儲存指令分裂的第一圖式。
圖3顯示根據本發明之一個具體實施例載入與儲存指令分裂的第二圖式。
圖4顯示處理步驟的流程圖,其中,根據本發明之一個具體實施例,繪製用於從導因於負載儲存重新排序與最佳化的推測性轉送未命中預測/錯誤當中實施復原之規則。
圖5顯示根據本發明之一個具體實施例,例示其中使用處理器的載入佇列與儲存佇列資源來實施處理300的該等規則之方式圖式。
圖6顯示根據本發明之一個具體實施例,例示其中使用處理器的載入佇列與儲存佇列資源來實施處理300的該等規則之方式另一圖式。
圖7顯示根據本發明之一個具體實施例,例示其中使用處理器的載入佇列與儲存佇列資源來實施處理300的該等規則之方式另一圖式。
圖8顯示根據本發明之一個具體實施例,其中,在載入之後派遣儲存的該派遣功能概要之處理流程圖。
圖9顯示根據本發明之一個具體實施例,其中,在儲存之後派遣載入的該派遣功能概要之處理流程圖。
圖10顯示根據本發明之一個具體實施例的統一載入佇列之圖式。
圖11顯示根據本發明之一個具體實施例顯示該滑動載入派遣窗的統一載入佇列。
圖12顯示根據本發明之一個具體實施例的分
配載入佇列。
圖13顯示根據本發明之一個具體實施例具有依序連續窗的分配載入佇列。
圖14顯示根據本發明之一個具體實施例用於多核心處理器的分段記憶體子系統之圖式。
圖15顯示本發明具體實施例如何操控載入與儲存的圖式。
圖16顯示根據本發明之一個具體實施例的儲存篩選演算法之圖式。
圖17顯示根據本發明之一個具體實施例,具有構成從記憶體內依序讀取載入的記憶體一致性模型內失序載入之旗語實施。
圖18顯示根據本發明之一個具體實施例,利用使用鎖定式模型與交易式模型,失序載入至構成從記憶體內依序讀取載入的記憶體一致性模型內。
圖19顯示根據本發明之一個具體實施例的多核心分段記憶體子系統之複數個核心。
圖20顯示根據本發明之一個具體實施例非同步核心存取一統一儲存佇列之圖式,其中執行緒根據儲存資歷賦予儲存。
圖21顯示根據本發明之一個具體實施例,說明其中儲存的資歷超越其他執行緒內對應儲存的功能性之圖式。
圖22顯示根據本發明之一個具體實施例的免
消歧義失序載入佇列退出實施。
圖23顯示根據本發明之一個具體實施例的免消歧義失序載入佇列重新排序實施之重新排序實施。
圖24顯示根據本發明之一個具體實施例的指令序列(例如,軌跡)重新排序推測性執行實施。
圖25顯示根據本發明之一個具體實施例的示範微處理器管線之圖式。
雖然本發明已經配合具體實施例來說明,但本發明並不用來限制到此處所公佈的特殊形式。相反地,吾人想要如申請專利範圍內所定義將改變、修改以及同等配置合理地包含在本發明的範疇內。
在下列詳細說明當中,許多特定細節,例如特定方法序列、結構、元件以及連接都已經被提出。不過吾人要了解,這些與其他特定細節並不需要用來實現本發明的具體實施例。在其它環境中,已知的結構、元件或連接都已經被省略或未詳細說明,以避免模糊本說明。
說明書內參考本發明的「一個具體實施例」或「具體實施例」用來表示,與該具體實施例有關連所說明的特定功能、結構或特性包含在本發明的至少一具體實施例內。出現在整個說明書內許多地方的「在一個具體實施例內」一詞,並不一定全都參照到同一個具體實施例,也不是與其他具體實施例互斥的個別或替代具體實施例。
再者,說明可由某些具體實施例展示且其他沒有的許多特色。同樣,說明可為某些具體實施例所需但是其他具體實施例不需的許多需求。
某些詳細說明部分都以可在電腦記憶體上執行的資料位元上操作之程序、步驟、邏輯區塊、處理以及其他符號表示之方式來呈現。這些說明與代表為精通資料處理技術人士用來將其工作內容灌輸給其他精通此技術人士的最有效方式。此處的程序、電腦可執行步驟、邏輯區塊、處理等等一般係認為是導致所要結果的自洽步驟或指令序列。這些步驟為所需的物理量之物理操縱。通常,雖然非必要,不過這些量採用電腦可讀取儲存媒體且可以在電腦系統內儲存、傳輸、結合、比較以及操縱的電或磁性信號形式。為了時間上方便起見,原則上因為常用,所以這些信號代表位元、數值、元件、符號、字元、術語、數字等等。
不過,吾人應該瞭解,所有這些與類似詞彙都與適當的物理量相關連,且僅為適用這些量的便利符號。除非特別說明,否則從下列討論中可瞭解,整個說明書的討論運用像是「處理」、「存取」、「寫入」、「儲存」或「複製」等詞表示電腦系統或類似電子計算裝置的動作以及處理,其操縱以及轉換代表電腦系統暫存器、記憶體和其他電腦可讀取媒體內物理(電子)量的資料成為類似代表電腦系統記憶體、暫存器或其他這種資訊儲存、傳輸或顯示裝置內物理量的其他資料。
本發明的具體實施例實施一種失序指令排程處理,其中一旦處理器資源可用來執行輸入指令序列內的指令時,即允許失序地發出該指令。本發明的具體實施例可確保外部代理主機(agent)發現指令依序執行(例如,記憶體一致性規則/模型)。對於該等外部代理主機來說,可發現依序執行指令,則可確保正確無誤的程式執行。本發明的具體實施例確保處理器的記憶體階層(例如,L1快取、L2快取、系統記憶體等等)發現該等指令的一致性依序執行。
圖1顯示根據本發明之一個具體實施例的載入佇列與儲存佇列。圖1也顯示輸入指令序列。如上述,該處理器的記憶體階層(例如,L1快取、L2快取、系統記憶體等等)發現該等指令的一致性依序執行。該載入佇列與該儲存佇列,此後稱為載入/儲存佇列,可被用來維持依序執行的語意(semantics)。
此外,該等載入與儲存的失序執行導致推測性(speculative)執行。實施推測性執行時,機器需要感知推測性錯誤。在圖1的具體實施例中,載入/儲存佇列提供一系統,用以從導因於負載儲存重新排序與最佳化的推測性轉送或未命中預測/錯誤當中實施復原。該載入/儲存佇列包含該硬體支援,其允許由於轉送、分支與錯誤結果,從導因於載入儲存重新排序/最佳化的推測性錯誤當中復原。若要允許該機器從推測性錯誤當中復原,則在該載入佇列與該儲存佇列內維護該推測性執行的結果。該載
入佇列與該儲存佇列保留該推測性執行的結果,直到修正錯誤,且該儲存結果可從記憶體當中退出(retire)為止。外部代理主機並無法發現該載入佇列與該儲存佇列的推測性執行內容。關於可見性,儲存必須依序從記憶體中退出。
圖2顯示根據本發明之一個具體實施例載入與儲存指令分裂的第一圖式。本發明的一個特徵在於,載入分成兩個巨集指令,第一個巨集指令進行位址計算且擷取至暫時位置(載入儲存佇列)內,第二個巨集指令為將該記憶體位址內容(資料)載入暫存器或ALU目的地內。請注意,雖然將載入與儲存指令分成兩個個別巨集指令並重新排序的上下文來說明本發明的具體實施例,不過利用將載入與儲存指令分成兩個個別巨集指令且在微碼上下文內重新排序,可實施相同的方法及系統。
該功能性同樣適用於該等儲存。儲存也分成兩個巨集指令,第一指令為儲存位址與擷取,第二指令為將資料儲存在該位址上。分開儲存以及兩個指令都遵照底下用於載入所說明之相同規則。
將載入分裂成兩個指令允許執行時間最佳化器排程該位址計算,且在已知指令序列內較早擷取指令。如此利用預先擷取資料進入與該快取階層分開的暫時緩衝區內,就可輕易從記憶體未命中當中復原。在此使用暫時緩衝區,以保證預先擷取資料在LA/SA與LD/SD之間一對一對應之可用性。若與該載入位址與該載入資料之間窗內的先前儲存有所偏差(例如,若從先前儲存當中偵測到
轉送情況),或若對於位址計算有任何錯誤問題(例如,分頁錯誤),則重新發出對應的載入資料指令。此外,將載入分成兩個指令也可包含將資訊複製到兩個指令內。這種資訊可為位址資訊、來源資訊、其他額外識別碼等等。這種複製允許在沒有LA/SA之下,單獨派遣兩個指令的LD/SD。
不用等待該載入資料返回,就可從實際機器退出窗當中將該載入位址與擷取指令退出,藉以允許該機器即使快取未命中該位址(例如,本章節開頭時提到的該載入位置)的情況下進行轉送。例如:在快取未命中該位址後(例如,位址X),該機器可立即停止(stall)數百個循環,等待從該記憶體階層擷取該資料。在不用等待該載入資料返回之下,從該實際機器退出窗當中將該載入位址與擷取指令退出,該機器仍舊可進行轉送。
請注意,指令分裂致能本發明之具體實施例的關鍵優勢,就是能夠提早重新排序該等LA/SA指令,且讓該指令序列進一步脫離LD/SD,以便能夠提早派遣與執行該等載入與該等儲存。
圖3顯示根據本發明之一個具體實施例載入與儲存指令分裂的第二圖式。圖2的具體實施例顯示如何使用複製功能,以便制定(enact)該等載入指令分離。在此具體實施例中,載入被複製成兩個巨集指令,第一進行位址計算且擷取至暫時位置(載入儲存佇列)內,第二個為將該記憶體位址內容(資料)載入暫存器或ALU目的地內。請
注意,雖然用將載入與儲存指令複製到兩個個別巨集指令並重新排序的上下文來說明本發明的具體實施例,不過利用將載入與儲存指令複製到兩個個別巨集指令且在微碼上下文內重新排序,可實施相同的方法及系統。
現在說明根據本發明之一個具體實施例的指令分裂功能性之更詳細說明。在一個具體實施例中,該指令集並沒有直接對應指令至LA、SA、LD或SD。在這種具體實施例中,使用指令前置碼(prefix)、LAF、SAF、LASAF和協同後置碼(suffix)指令的組合來實現這些概念。且粗略映射到該LA上的指令集具有LAD,且至SA的具有SAD,且可實施組合的LADSAD。這些概念也可實施為微碼內的微指令。
a)在此定義成LAF前置碼+後置碼指令可描述為「LD」。
b)在此定義成SAF前置碼+後置碼指令可描述為「SD」。
c)在此定義成LAD指令可描述為「LA」。
d)在此定義成SAD指令可描述為「SA」。
e)進一步具有LASAF指令以及LADSAD指令,這些指令包含組合的LAF/SAF前置碼+後置碼指令,可用來實施旗語(semaphore)(鎖定的原子(locked-atomic))操作。其也可定義組合式LAD-SAD指令,再次預先擷取該等記憶體運算元,而具有硬體內的結果複雜度。
LAD代表「LA解除融合(LA-defused)」
LAD指令啟動資料預先擷取進入該執行管線。這與正常預先擷取不同,其直接載入至該執行管線,而可承擔比第一階快取還要低的執行延遲。在一個具體實施例中,藉由使用固定儲存體用於該LA-LD配對,其可使用LA-LD對對之間的該ID連結(例如,該QID編號)來標記,以便實施此功能。該LAD指令計算有效記憶體位址(例如,從潛在的複雜指定),指定運算元大小(位元組、半字元、字元、雙字元或更大)、起始該記憶體參照、通過該TLB與快取階層。記錄異常(分頁通行未命中、特權、保護)以便在LAF+後置碼執行上回報,或替代實施例中可取消該Q輸入或使無效、強制該LAF+後置碼指令重新執行且採用該等異常。
該LAD指令具備一般格式以及運算元:LAD(os) QID,M[EA]
‧EA為該有效位址指定,可為基礎暫存器、索引暫存器、位移因數及/或索引偏移,例如M[B,RI,sf,offset],的組合。
‧os-為要讀取的位元組數指示
‧QID-為用於該記憶體參照操作的該載入記憶體QID。其也可用於連結該LAD的操作以及後續LAF前置碼指令。該QID位於1至N的範圍內,N為實施特定值。預期值為31、63、127。QID=0保留用於LAF指令沒有先前LAD的特殊情況。LAF會立即採用QID=0,因此LAD無法使用。
LAF代表「LA融合(LA-fused)」。
LAF為指令前置碼,表示必須直接與後置碼指令連結(或融合(fused))。該後置碼指令可單獨存在。該後置碼指令可為具有至少一來源暫存器的任何指令。然後必須連結當成前置碼的LAF。LAF前置碼改變了該後置碼指令的性質(nature)。利用該前置碼,將一或多個其暫存器運算元重新定義為記憶體佇列識別碼(QID,memory queue identifier)。此外,源自於該暫存器的相關聯資料,現在源自於該記憶體佇列。
LAF前置碼+後置碼指令可具有或沒有先前的LAD指令。若QID=0,則該LAF沒有先前的LAD,若QID≠0,則該LAF具有先前的LAD。想要將該載入指令分成LA和LD時,則LAF將具有QID!=≠0且LAD將實現成在LAF之前具有相同QID(例如,這基本上建立了分離的LA/LD配對)。
在LAF/後置碼執行且具有QID==0時,該記憶體佇列的該0輸入被用來進行「LA」操作、記憶體讀取、儲存資料至該記憶體佇列,然後完成將該資料載入該後置碼指令來源,且套用的該操作可能與其他來源結合,且將該結果寫入該後置碼指令目的地暫存器。在另一方面,若QID≠0,則諮詢(查找)該記憶體佇列找尋匹配的QID,若存在,則從該記憶體佇列讀取該資料,且套用該後置碼指令的操作,且將結果寫入該目的地暫存器。若該匹配QID有效但是不完整,則閒置該資料直到資料係可
用的為止。若該QID無效,則該LAF具有充分資訊(位址與資料運算元大小)來重新啟動該操作。因為許多因素,所以可能並不存在匹配的QID,某些因素為:
a)先前的LAD未執行、不良編碼或其他原因。
b)異常或中斷打斷了LAF與先前LAD之間的執行流。
c)介入儲存操作以該LAD的位址為假名(aliased),且使其資料整體性無效。
在任何這些情況中,該LAF前置碼+後置碼具有足夠資訊來重複LAD(LA)操作。此能力讓我們的LAD指令得到一提示,該LAD並未成功執行,或就此而言,甚至超越NOP來實施,讓正確程式碼使用。
含後置碼指令的LAF指令一般格式或運算元為:LAF M[ea]
SUFFIX(os) Rt,QID,....
該LAF指令從該後置碼指令的編碼當中借到運算元大小、QID。若該後置碼為SIMD,則也從該後置碼借到該操作的SIMD寬度。該QID總是在該後置碼指令的該來源暫存器規格欄位之一者內編碼。在SMI的特定實施當中,這總是位元23:18,但是並不需要是如此。
SAD代表「SA解除融合(SA-defused)」
SAD為LAD的並行指令,只用於儲存。預先擷取資料,將資料帶入快取進行修改。此外,其建立記憶
體儲存佇列輸入。SAD主要具有2種主要用途:
a)當成預先擷取,讀取用於資料修改
b)維持正確記憶體順序,且在儲存(寫入)之前提昇載入(讀取)之後揭露與處理潛在寫入後讀取危險
SAD為提示指令。該SAD指令計算有效記憶體位址(從潛在的複雜規格),指定運算元大小(位元組、半字元、字元、雙字元、...)、啟動該記憶體參照、通過該TLB、快取/記憶體階層。異常(分頁通行未命中、特權、保護)都記錄在SAF+後置碼執行上,以便重新執行且採用該等異常。
該SAD指令具備一般格式以及運算元:SAD(os) M[ea],QID
‧Ea為該有效位址規格,可為基礎暫存器、索引暫存器、位移因數及/或索引偏移,例如M[B,RI,sf,offset],的組合。
‧os-為要讀取至該Ea的位元組數指示
‧QID-為用於該記憶體參照操作的該儲存記憶體QID。其也可用於連結該SAD的操作以及後續SAF前置碼指令。該QID位於1至N的範圍內,N為實施特定值。預期值為31、63、127。QID=0保留用於SAF指令沒有先前SAD的特殊情況。總是由SAF立即使用此QID。
SAF代表「SA融合(SA-fused)」
SAF為LAF前置碼的並行前置碼,只用於儲存。身為前置碼,則必須直接與後置碼指令連結(或融
合)。該後置碼指令可單獨存在。該後置碼指令可為具有至少一目標暫存器的任何指令。然後必須連結當成前置碼的SAF。SAF改變了該後置碼指令的性質:一或多個該等目的地暫存器運算元為正常暫存器選擇索引至記憶體儲存佇列識別碼(QID),且該操作從目標在暫存器變成目標在記憶體(更精準的記憶體佇列輸入)。如此,將暫存器操作改變為儲存記憶體操作。
該SAF指令可具有或沒有先前的SAD。若QID=0,則該SAF沒有先前的SAD,若QID≠0,則該SAF具有先前的SAD。在SAF/後置碼執行且若QID=0時,該記憶體佇列的該0輸入用來進行「SA」操作、記憶體寫入、儲存資料至該記憶體佇列,然後完成儲存該後置碼指令來源供應的該資料。在另一方面,若QID≠0,則諮詢(查找)該記憶體佇列找尋匹配的QID,若存在,則在套用該後置碼指令的操作時,將該資料寫入該記憶體佇列輸入。若該匹配QID有效但是不完整,則閒置該資料到資料可用。若該QID無效,則該LAF具有充分資訊(位址與資料運算元大小)來重新啟動該操作,且完成該記憶體寫入操作。因為許多因素,所以可能並不存在匹配的QID,某些因素為:
a)先前的SAD未執行、不良編碼或其他原因。
b)異常或中斷打斷了SAF與先前SAD之間的執行流。
在任何這些情況中,該SAF前置碼+後置碼具
有足夠資訊來重複SAD(SA)操作。此能力讓我們的SAD指令得到一提示,該SAD並未成功執行,或就此而言,甚至超越NOP來實施,讓正確程式碼使用。
LASAF為指令前置碼
LASAF為前置碼,將具有相同暫存器的指令修改至為來源與目的地。LASAF將這種指令改變成基本記憶體參考讀取/寫入一次操作。使用來自該載入記憶體佇列的其中之一者,以及來自該儲存記憶體佇列的其中另一者。在此並無先前的LAD或SAD指令。
LASAF M[ea3]
ADD QID1,QID2,R1
LASAF在該載入與儲存記憶體佇列內建立QID輸入,然後使用QID2讀取記憶體[ea3]、加入R1且將結果儲存在儲存記憶體QID1內,達成M[ea3]的基本讀取修改寫入。
該SMI實施(若要實施這個)應該需要QID1=QID2=0,但是本發明不欲侷限於此。
可擁有LASAD指令,但是必須窺探進入該記憶體佇列的所有通道來達成。使得窺探上命中的輸入無效。然後在該LASAF上重新執行載入/儲存。
範例用途:
A. 在提昇遠在使用該資料之前的載入之後,節省暫存器資源。
假設原始碼為:
LDR R1,M[ea1]
ADD32 Rt,R1,R2
為了隱藏記憶體存取延遲,要盡早在執行流內提昇該LDR在使用R1資料(該ADD)之上。
LDR R1,M[ea1]
...許多指令
ADD32 Rt,R1,R2
如此有一缺點,就是將該R1暫存器維持在「忙碌」狀態來等待資料,這樣就無法用於其他用途。該記憶體佇列擴充資源庫來保留資料。如此將LDR轉換成LAD以及後續LAD:
LAD QID,M[ea1]
...許多指令
LAF M[ea1]
ADD32 Rt,QID,R2
因為載入佇列輸入QID已經用過,所以R1可用於其他用途。
若用Rt-QID的差載入Rt,或若QID不存在,則從減去R2的M[ea1]當中重新載入資料,且將結果放入Rt。
請注意,在上述實施中,該記憶體位址計算在這2次載入之間並不需要匹配。若兩個位址計算不同,且該QID仍舊有效,則最有可能是程式編輯錯誤。該OS(在範例32內)也不用在LAD與LAF之間匹配。該LAD會讀取比所需要更多的資料,在此情況下,將使用所讀取
資料的最低有效位元組。或者該LAF+後置碼會比該LAD讀取需要更多資料,在此情況下,將使用該LAD所讀取的最低有效位元組,後面接著0直到該後置碼操作足夠。此外,該等位址計算運算元不用在該LAD與LAF之間匹配,不過為了有良好的編碼,應該取得相同的結果有效位址。
B.利用將正常ALU暫存器-暫存器操作逐漸變成ALU暫存器記憶體操作,以節省執行循環。
在此使用該特殊QID=0(%0),將該正常暫存器-暫存器ADD指令改變為記憶體參照。因為LAF為前置碼且必須直接連結至該ADD,所以之間並無指令。該QID=0總是立即可用。
LAF M[ea1]
ADD32 Rt,%q0,R2
LAF將上面的指令有效變成
ADD32 Rt,M[ea1],R2
在此也可使用SAF將ALU暫存器-暫存器操作變成將該ALU操作結果儲存到記憶體的操作。
SAF M[ea1]
ADD %q0,R2,R3
將加入的R2和R3之結果儲存到記憶體內位址ea1上。
C.提昇載入位於儲存之上時,保留順序語意。
另一問題是我們要提昇該載入(LDR)在儲存
(STR)之上,可具有或沒有該載入位址的別名。別名:ea1的某些或全部資料位址都與ea2相同。
STR M[ea2]
LDR R1,M[ea1]
ADD32 Rt,R1,R2
變成
LDR R1,M[ea1]
0-to-many instructions
STR M[ea2],R3
0-to-many instructions
ADD32 Rt,R1,R2
要安全地執行此動作(產生正確碼),我們需要有工具來做。因此使用LAD和SAD指令及其個別LAF和SAF前置碼+後置碼指令,且可保留執行順序並產生正確碼。
LOOP:
SAD M[ea2],R3
0-to-many instructions
a)
LAD R1,M[ea1]
0-to-many instructions
b)
SAF M[ea1],R3
0-to-many instructions
c)
saf-suffix
LAF M[ea1]
d)
BRN LOOP
在上面的程式碼中,必須提昇LAD和SAD且維持相同順序。這會發生什麼事?在a、b、c、d每一點上,分別指示一替代項。
a1)中斷、讓該SAD無效,後續SAF將必須重新執行
a2)LAD別名SAD、使得LAD無效或要插入該記憶體佇列內
b1)中斷、使得SAD和LAD無效
b2)SAF別名LAD且使得LAD無效
b3)SAF同時使用仍舊有效的SAD或重新執行。
c1)中斷、使得LAD無效,c2)若仍舊有效的LAF使用LAD的資料,否則重新執行。
c)迴圈、執行硬體功能、標記IP與執行順序ID的組合以及正確管理QID、LAD/SAD/LAF/SAF。
在上面有關LA/SA和LD/SD的說明當中,使用LA和SA相對程式順序位置,針對轉送目的強制該順序。在另一具體實施例中,使用該LD/SD相對程式順序位置,針對轉送目的強制該順序(如底下所述)。
圖4顯示處理400的步驟流程圖,其中,根
據本發明之一個具體實施例,繪製用於從導因於負載儲存重新排序與最佳化的推測性轉送未命中預測/錯誤當中實施復原之規則。
如步驟401所例示,本發明具體實施例的目標為在儲存與載入之間位址匹配時,找出轉送至該載入的儲存。在步驟402,將最早的儲存(例如,按照機器順序)轉送至該載入。
在步驟403,以機器順序分配LD/SD時,會更新LA/SA的實際時間歷程(ages)。該LA/SA實際時間歷程會指派給與該LD/SD時間歷程相同之值。該LD/SD維持實際時間歷程,且強制(enforce)該原始程式順序語意。
步驟404至407顯示維持程式順序語意同時支援推測性執行的規則。步驟404至407顯示彼此水平排列,以指示同時實施這些規則功能的機制。如步驟404內所示,若儲存具有實際時間歷程,但是該載入尚未獲得實際時間歷程,則該儲存比該載入還要早。如步驟405內所示,若載入具有實際時間歷程,但是該儲存尚未獲得實際時間歷程,則該載入比該儲存還要早。如步驟66內所示,若該載入或該儲存都未獲得實際時間歷程,則將使用虛擬識別碼(VID,virtual identifier)來找出哪個比較早(例如,在某些具體實施例中,與該載入/儲存指令相上下文的該QID代表該VID)。如步驟407內所示,若載入與儲存都已經獲得實際時間歷程,則使用該實際時間歷程找出哪個較早。
請注意,圖4具體實施例所描述用來決定載入與儲存之間相對時間歷程的演算法也可被用來決定複數個儲存之間的相對時間歷程。這在底下圖4以及後續圖式內說明的更新該儲存時間歷程戳記非常有用。
圖5顯示根據本發明之一個具體實施例,例示其中使用處理器的載入佇列與儲存佇列資源來實施處理400的該等規則之方式圖式。圖5具體實施例顯示一範例,其中,將指令迴圈展開成兩個一致的指令序列401-402。請注意,該SA和LA可自由重新排序,不過,該SD和LD則必須維持其相對程式順序。較早的儲存可轉送至較晚的載入。較早意味著較小的VID(例如,該虛擬ID表內所維護)或較小時間歷程。若SA具有VID但是無時間歷程,則該SA比具有時間歷程的載入年輕。LA/SA的實際時間歷程會在分配LD/SD時更新,並指派與該LD/SD相同的時間歷程。若儲存或載入具有實際時間歷程,則與該實際時間歷程比較,否則使用VID時間歷程。
請注意,該VID表的作用為利用儲存該LA/SA對應機器ID以及對應每一個VID唯一識別碼的機器資源,追蹤該LA/SA與LD/SD指令之間的關聯性。另請注意,「VID」一詞與圖2A和圖2B的討論中所描述之「QID」意義相同。
此時描述圖4具體實施例的操作範例。一開始,考慮其中該分配指標器410一開始為3的方案。V3
LA已經在該載入Q輸入第4號內派遣且分配。V1 SA和V2 SA都已經派遣,其與V3 LA比較,且因為V2 SA小於且比V1 SA更靠近V3 LA,則其潛在轉送至V3 LA,如此其針對V3 LA載入Q輸入來更新該儲存初始時間歷程。
此時該分配指標器移動至6。此時V2 SA(5號)的儲存實際時間歷程更新該V3 LA載入Q輸入(因為V2 SA為已經標記成轉送至此載入的紀錄儲存)。此時派遣V4 SA並與該載入初始時間歷程比較,且因為V4大於V3 LA,所以不會轉送。此時該分配指標器移動至11。在V3 LD的分配時間上,用V3 LD(7號)的實際時間歷程更新該載入Q輸入4號。此時派遣V1 SA 11號。此時因為V3 LA 1號具有實際時間歷程,但是V1 SA 11號沒有,則該載入比該儲存還要早,如此不可能轉送。
該預測表用於偵測該預設假設不正確的情況。該預設假設就是並無儲存轉送至載入。一旦偵測到用於載入儲存配對的轉送,即記錄該載入儲存配對的該程式計數器,如此該載入將總是等待派遣該儲存位址,且計算位址以找出載入味至是否匹配儲存位置,因此需要從此處轉送。
請注意在一個具體實施例內所描述的特徵,其中,允許缺少該LA/SA時派遣該LD/SD,幫助在分支之前或在已知指令序列下的分支範疇內重新排列LA/SA。若隨分支結果省略該LA和SA,或因為導致記憶體異常
的結果而省略,該LD和SD仍舊可正確運作,因為其包含派遣兩次的必要資訊:首先當成LA/SA,再來當成LD/SD。在這種情況下,該LD/SD的第一次派遣執行位址計算(例如,載入位址)。因此,相同LD/SD可再次派遣,以滿足該載入或儲存的消耗部分(例如,載入資料)。此機制可稱為該等載入與儲存指令的「雙派遣」。
請注意在一個具體實施例中,該對應的解除融合LA/SA不存在時(例如,在具有融合LD/SD的情況下)發生該LD/SD的雙派遣,或若由於分支結果省略該LA/SA,或由於導致記憶體異常的結果而忽略等等。
上述雙派遣功能確保LD/SD正確執行,獨立於未命中、忽略或省略的LA/SA。上述特徵所提供的優點在於:利用較早排程該LA/SA,甚至在分支存在、潛在錯誤、異常等等之時,由該載入/儲存指定的資料預先擷取可在程式順序中較早開始(例如,減少延遲)。
圖6顯示根據本發明之一個具體實施例,例示其中使用處理器的載入佇列與儲存佇列資源來實施處理400的該等規則之方式另一圖式。在圖6具體實施例中,考慮其中該分配指標器一開始為3的方案。V3 LA已經在該載入Q輸入第4號內派遣且分配。此時該分配指標器移動至6。此時V1和V2(4號、5號)的儲存實際時間歷程更新具有機器ID 2和3的該對應SA之時間歷程。此時派遣V4 SA並與該載入初始時間歷程比較,且因為V4 SA大於V3 LA,所以不會轉送。此時該分配指標器移動至
11。在V3 LD的分配時間上,用V3 LD(7號)的實際時間歷程更新該載入Q輸入4號。此時派遣ID 10現在的V1 LA。
此時派遣機器ID 2的V1 SA以及機器ID 3的V2 SA兩者,這兩者與ID 10的V1 LA比較,且因為ID 10的V1 LA並無機器時間歷程(尚未分配其對應LD),而機器ID 2的V1 SA以及機器ID 3的V2 SA都具有實際時間歷程,因此吾人了解V1和V2儲存都比V1還要早/老。然後將這兩個儲存最新的(V2)轉送至ID 10的V1。此時派遣SA(V2)11號。因為V1 LA和V2 SA沒有實際時間歷程,所以使用其VID的時間歷程來比較,且未偵測到轉送。此時該分配指標器移動至16。此時派遣ID 16的V4 SA且與ID 10的V1 LA比較,因為該V1 LA具有實際時間歷程但是V4 SA沒有,所以該V4 SA在V1 LA之後。因此,不可能從此儲存轉送至此較早儲存。
圖7顯示根據本發明之一個具體實施例,例示其中使用處理器的載入佇列與儲存佇列資源來實施處理400的該等規則之方式另一圖式。在圖7的具體實施例中,考慮其中該分配指標器一開始為3的方案。V1 LA和V2 SA已經在該載入Q輸入第4號和第5號內派遣且分配。此時該分配指標器移動至6且已經派遣V4 SA。V1 SA和V2 SA兩者都取得4和5的實際時間歷程。
此時該分配指標器移動至11。V3 LA取得7的實際時間歷程。此時已經派遣V1 SA 10號和V2 SA 11
號。V3 LA已經派遣且將其位址與該儲存Q輸入比較,找出跨越V1 SA、V2 SA和V4 SA以及V2 SA 11號的匹配。因為V3 LA擁有7的實際時間歷程,則將其實際時間歷程與屬於V2 SA的最接近儲存時間歷程比較,就是時間歷程5,如此仍舊從此儲存轉送載入,且將此標記在該載入Q內。
圖8顯示根據本發明之一個具體實施例,其中,在載入之後派遣儲存的該派遣功能概要之處理800流程圖。
處理800是從步驟801開始,其中一儲存指令分成SA和SD。如稍早所描述,該SA指令維持與該SD指令的語意,允許在該分離SA與該剛分配SD之間該VID表內無匹配的事件中雙派遣。在步驟802,SA重新排序成較早機器可見程式順序,且使用VID表來追蹤該SA,以獲得該原始SD程式順序。在步驟803,該SA的派遣上,針對該儲存佇列內所有載入檢查位址是否匹配該SA。
在步驟804,當位址匹配,藉由使用該等載入的該VID編號或使用該等載入與該等儲存的實際時間歷程,該匹配載入的該程式順序與該SA的程式順序比較。此程序已經在稍早圖3的討論中說明。若儲存具有實際時間歷程但是載入沒有,則該儲存比該載入要早。若載入具有實際時間歷程但是儲存沒有,則該載入比該儲存要早。若載入或儲存都沒有實際時間歷程,則使用虛擬識別碼
(VID)來找出哪一個較早。若載入與儲存都有實際時間歷程,則使用該實際時間歷程找出哪一個較早。如上述,該VID編號允許追蹤原始程式順序以及該重新排序的SA和LA。該VID表內的輸入允許該對應SD和LD取得與已經指派給該SA和LA的機器資源(在這些資源已經分配時)之關聯。
在步驟805,對於在該程式順序內屬於稍後的載入而言,該儲存將檢查來查看該等載入是否已經由其他儲存轉送。在步驟806,若是,則該儲存檢查先前已經轉送至此載入的該儲存之戳記,以查看該儲存在程式順序內是否早於本身。在步驟807,若是,則該儲存檢查先前已經轉送至此載入的該儲存之戳記,以查看該儲存在程式順序內是否早於本身。在步驟808,若否,則該儲存不會轉送至此載入。
圖9顯示根據本發明之一個具體實施例,其中,在儲存之後派遣載入的該派遣功能概要之處理900流程圖。
在步驟901,載入指令以上述方式分成LA和LD。在步驟902,LA重新排序成較早機器可見程式順序,且使用該VID表來追蹤,如上面所述。反之步驟903,該LA針對該儲存順序內所有儲存,檢查位址是否匹配該載入。
在步驟904,當位址匹配,藉由使用該載入和該儲存的該VID編號或使用該載入與該儲存的實際時間
歷程,該匹配載入的該程式順序與該儲存的程式順序比較。此程序已經在稍早圖3的討論中說明。若儲存具有實際時間歷程但是載入沒有,則該儲存比該載入要早。若載入具有實際時間歷程但是儲存沒有,則該載入比該儲存要早。若載入或儲存都沒有實際時間歷程,則使用虛擬識別碼(VID)來找出哪一個較早。若載入與儲存都有實際時間歷程,則使用該實際時間歷程找出哪一個較早。如上述,該VID編號允許追蹤原始程式順序以及該重新排序的SA和LA。接著在步驟905,該載入消耗來自程式順序中最接近其自己程式順序的該儲存之資料。
圖10顯示根據本發明之一個具體實施例的統一載入佇列之圖式。虛擬載入/儲存佇列的目標為允許該處理器使用其載入/儲存佇列的實際大小,在該機器內分配比可容納還要多的載入/儲存。相對地,這允許該處理器除了超越其載入/儲存佇列的處理器實際大小限制的載入/儲存以外,分配其他指令。即使某些該等載入/儲存在該載入/儲存佇列內仍舊沒有空間,這些其他指令仍舊可派遣與執行。
隨著載入從該載入佇列當中退出,該載入派遣窗移動至該序列中後續指令,且將包含比從該載入佇列移除的載入數量還要多的已分配載入派遣考量。在此圖式中,該載入派遣窗將從左往右移動。
在一個具體實施例中,該載入派遣窗總是包含等於該載入佇列內輸入數量的載入數量。任何時間上都
沒有載入可以派遣到該載入派遣窗之外。該排程器窗內載入以外的其他指令(例如,減(Sub)、加(Add)等等)都可派遣。該載入派遣窗內的所有載入只要備妥之後都可派遣。
圖11顯示根據本發明之一個具體實施例顯示該滑動(sliding)載入派遣窗的統一載入佇列。圖11顯示相較於圖10在時間內的後續實例。隨著載入從該載入佇列當中退出,該載入派遣窗移動至該序列中後續指令,且將包含比從該載入佇列移除的載入數量還要多的已分配載入派遣考量。該載入派遣窗總是包含等於該載入佇列內輸入數量的載入數量。任何時間上都沒有載入可以派遣到該載入派遣窗之外。該排程器窗內載入以外的其他指令(例如,減、加等等)都可派遣。該載入派遣窗內的所有載入只要備妥之後都可派遣。如此用此方法所獲得的好處為:若已經超出該載入或該儲存佇列容量,對於該排程器的分配並不會停止,而是繼續將指令分配至包含載入與儲存的排程器,而不管是否超出該載入或儲存佇列容量,該載入與儲存動態窗將確保不會派遣該載入或儲存佇列容量之外的載入或儲存。
圖12顯示根據本發明之一個具體實施例的分配載入佇列。圖12具體實施例的目標為實施分配載入佇列以及分配儲存佇列,其維持單一程式/執行緒依序語意,但是仍舊允許載入與儲存失序派遣通過多個核心/記憶體片段。
圖12圖解顯示避免死結的載入佇列擴充解決
方案。該載入/儲存佇列的擴充已經建立,且從導致該死結的該載入/儲存點(從此點算起),以程式順序將死結載入/儲存分配至擴充佇列,直到該載入/儲存佇列可自由輸入為止。在圖12的方案中,LD 3根據SD載入,而後者根據LD 2(具有映射至載入_Q B的位址)載入,而因為該載入_Q B已滿,所以無法派遣。在此死結方案中,在偵測到死結後,立即允許以接著的順序派遣LD 1和LD 2至保留部分B然後退出。一種分散載入/儲存佇列的保存政策為替每一個載入/儲存保留每一個載入/儲存分配佇列內一輸入。在此圖中,每一個已分配載入需要在載入_Q A內保留一輸入,且在載入_Q B內保留另一輸入。
請注意在已分配的載入/儲存佇列內,有一個關於已分配載入/儲存的問題,就是在分配時並不知道其位址。因為此問題,只有在已知載入或儲存將佔用該已分配佇列的失序派遣期間才會知道位址。
本發明的具體實施例可運用三種不同的解決方案,讓該已分配載入/儲存佇列避免失序派遣時的死結:
1. 導致未命中預測並將產生死結(沒有空間派遣至該載入/儲存緩衝區)的最早載入/儲存清除(flush),且依序開始派遣載入/儲存一段時間,或利用保留分配,其中,每一個載入/儲存都分配所有已分配佇列內的空間。一旦已知該載入/儲存的位址(在派遣時),如此已知將接收該載入/儲存的該特定載入佇列,然後可將其他佇列內的保留空
間解除分配。
2. 該載入/儲存佇列的擴充已經建立,且從導致該死結的該載入/儲存點,以程式順序將死結載入/儲存分配至擴充佇列(圖9)。
3. 動態派遣窗調整大小,其中在該連續窗之外未派遣載入的總和應該小於或等於該特定載入佇列內自由未保留空間的數量(例如,圖11)。
圖13顯示根據本發明之一個具體實施例具有依序連續窗的分配載入佇列。決定動態派遣窗調整大小,如此在該連續窗之外未派遣載入的總和應該小於或等於該特定載入佇列內自由未保留空間的數量。每一個載入佇列都將如本說明書所示,使用其個別派遣窗來追蹤其輸入。任何時間上用於每一個載入佇列的動態窗大小=該佇列加上虛擬輸入的實際大小(在此情況下為6+4=10),如此在此情況下,該窗大小應該只覆蓋10個載入。請注意,其他佇列的載入並未算在內(例如,LD 4)。
保留的訂位比例(booking ratio)為3。訂位比例為競爭每一個保留空間的順序載入數量。在此範例中,只有頭兩個依序未派遣載入(從左至右掃描該依序連續窗)可派遣至該保留部分(假設已經指派保留該佇列的2個輸入)。因此,虛擬輸入的數量=(訂位比例-1)*保留輸入的數量=(3-1)*2=4。
關於該依序連續窗調整大小,任何時間上尚未派遣給該載入佇列內一輸入(擷取空間)的載入數量(從最
舊算到最新)加上已派遣至該保留空間的載入數量必須小於或等於(該訂位比例*保留輸入的輸入)。在此情況下,載入的數量必須小於或等於3。該訂位比例為設計可設置性能指標(performace metric),其決定可接受的保留空間比例(佔用對上訂位)的比例為何。這用在最早未派遣載入無法找出佇列空間來派遣到該保留輸入之外的情況。在這種情況下,從最早(最舊)載入開始的這些載入將競爭該保留空間,該訂位比例決定有多少載入將等待佔用每一個保留輸入,該等保留輸入總是先指派給最舊的未派遣載入,且一旦該載入退出,次舊的載入即佔用該輸入(該訂位比例決定從最早派遣的開始,一個接著一個佔用保留輸入的這些載入數量)。
請注意在一個具體實施例中,在該佇列的未保留部分內已經沒有空間時,來自每一個佇列的該依序連續窗之載入可派遣至該佇列的保留空間(依序從最舊的載入開始)。另請注意在一個具體實施例中,在該佇列的依序連續窗之外且在該佇列的動態派遣窗之內的載入無法派遣至該佇列的保留部分。
另請注意,一旦該佇列的未保留部分內有空間,該佇列的完整動態派遣窗內之任何載入就會失序地派遣至任何該已分配佇列的未保留部分之任何輸入。該佇列的該依序連續窗與該動態派遣窗之大小可隨每一個循環調整,以反應上面在每一個載入派遣或退出之後所提供的等式內所陳述之大小限制。
圖14顯示根據本發明之一個具體實施例用於多核心處理器的分段記憶體子系統之圖式。圖13顯示一般執行續之間及/或載入與儲存之間同步方法之各種方法與實施。該方法描述用於記憶體參照跨越載入/儲存架構及/或跨越記憶體參照及/或執行緒的記憶體存取之同步與免消歧義(disambiguation)較佳方法。在圖15中,顯示暫存器檔案(位址及/或資料暫存器)的多個區段,搭配執行單元、位址記算單元以及第1階快取片段及/或載入儲存緩衝區和第2階快取,以及位址暫存器互連1200和位址計算單元互連1201。在核心/處理器內利用將其集中化資源分成許多引擎,可建構這些片段的元件,或可從多核心/處理器組態內不同核心/處理器的元件,來建構這些元件。圖式內用片段編號1顯示這些片段1211的其中之一者;該等片段可被縮放到大的數目(一般如圖式內所示被縮放到N個片段)。
此機制也用來當成一致性方法,運用於這些引擎/核心/處理器之間的記憶體架構。此方法從片段/核心/處理器內位址計算單元其中之一者要求位址開始,例如:假設由片段1(例如,1211)要求該位址。其可使用屬於其自己的片段之位置暫存器,或從使用位址互連匯流排1200跨越其他片段的暫存器來獲得並計算其位址。在計算該位址之後,建立用來存取快取與記憶體的32位元位址或64位元位址之參考位址。此位址通常被分段成標記欄位以及集合與行欄位。此特定片段/引擎/核心會將該位
址儲存到其載入儲存緩衝區及/或L1及/或L2位址陣列1202,同時將使用壓縮技術建立該標籤的壓縮版本(包含比該位址的原始標籤欄位還少的位元數)。
再者,不同的片段/引擎/核心/處理器將使用該集合欄位或該集合欄位的子集,當成索引來識別該位址將維持在哪一個片段/核心/處理器內。此利用位址集合欄位位元的片段索引確保特定片段/核心/引擎內該位址所有權的排他性,即使對應該位址的該記憶體資料可在另一或多個其他片段/引擎/核心/處理器內存活。即使該位址CAM/標籤陣列1202/1206顯示在每一個片段內要與資料陣列1207連結,其可只連結在位置與佈局的實體附近,或甚至依照事實,兩者都屬於特定引擎/核心/處理器,但是該位址陣列內所維持位址與片段(fragment)內該資料陣列內的資料之間並無關聯。
圖15顯示本發明具體實施例如何操控載入與儲存的圖式。如圖15內所描述,每一個片段都關聯於其載入儲存緩衝區以及儲存退出緩衝區。針對任何給定的片段,指定位址範圍關聯於該片段或另一片段的載入與儲存已經傳送至該片段的載入儲存緩衝區進行處理。請注意,其可失序地到達,如同該核心執行指令失序一樣。在每一個核心之內,該核心不僅存取本身的暫存檔,也存取每一其他核心的暫存檔。
本發明的具體實施例實施一種分散式載入儲存排序系統,該系統分散於多個片段。在一片段中,由該
片段執行局部資料相依性檢查。這是因為該片段只有該特定片段的儲存退出緩衝區內之載入與儲存。這樣限制了必須查找其他片段以維持資料一致性之需求。在此方式中,片段內的資料相依性在本地(locally)實施。
對於資料相依性,該儲存派遣閘依照嚴苛的程式內順序記憶體一致性規則來實施儲存退出。儲存在該載入儲存緩衝區上失序到達,載入也在該載入儲存緩衝區上失序到達。同時,該失序載入與儲存都轉送至該儲存退出緩衝區進行處理。注意,雖然在給定片段內儲存依序退出,當其前往該儲存派遣閘,可失序來自多個片段。該儲存派遣閘實施一政策,確保即使儲存失序通過儲存退出緩衝區,且即使該等緩衝區可將儲存以關於其他緩衝區的儲存方式失序地轉送至該儲存派遣閘,該派遣閘確保嚴格依序轉送至片段記憶體。這是因為該儲存派遣閘具有儲存退出的整體視野(global view),且只允許儲存依序離開至該記憶體的全體可見側(visible side),通過所有片段,例如全體(globally)。依此方式,該儲存派遣閘當成全體觀察者,以確保儲存最終通過所有片段,依序回到記憶體。
圖16顯示根據本發明之一個具體實施例的儲存篩選演算法之圖式。圖16具體實施例的目標為過濾該等儲存,以避免所有儲存必須檢查該載入佇列內所有輸入。
儲存針對位址匹配來窺探該等快取,以維持一致性。若執行緒/核心X載入從快取線讀取,則標記其
載入資料的該快取線部分。在另一執行緒/核心Y儲存窺探該等快取時,若任何這種儲存覆蓋該快取線部分,導致執行緒/核心X載入未命中預測。
過濾這些窺探的一項作法為追蹤該載入佇列輸入的參考。在此情況下,儲存必須要窺探該載入佇列。若該儲存匹配該存取遮罩,則從該參考追蹤器獲得的載入佇列輸入將導致載入輸入進行未命中預測。
在另一作法中(其中並無參考追蹤器),若該儲存匹配該存取遮罩(access mask),則儲存位址將窺探該載入佇列輸入,且將導致該匹配的載入輸入進行未命中預測。
用這兩種作法,一旦從快取線讀取載入,即設定該個別存取遮罩位元。當該載入退出時,重設該位元。
圖17顯示根據本發明之一個具體實施例,具有構成從記憶體內依序讀取載入的記憶體一致性模型內失序載入之旗語實施。如本說明書內所使用,『旗語』一詞就是提供存取控制用於多個執行緒/核心至共用資源的資料建構。
在圖17的具體實施例中,該存取遮罩用於由多個執行緒/核心控制存取至記憶體資源。該存取遮罩利用追蹤快取線的哪個字元具有等待中載入(pending load)來運作。存取該快取線的該字元時,失序載入設定該遮罩位元,且在該載入退出時清除該遮罩位元。若來自另一執行
緒/核心的儲存寫入至該字元,而該遮罩位元已經被設定,則用信號通知對應該載入的該載入佇列輸入(例如,透過追蹤器),用其相關指令未命中預測/清除或退出。該存取遮罩也追蹤執行緒/核心。
在此方式中,該存取遮罩確保正確實施該記憶體一致性規則。記憶體一致性規則規定儲存依序更新記憶體,且載入依序從記憶體讀取,讓此旗語運作通過該兩個核心/執行緒。如此,將正確執行核心1和核心2執行的程式碼,其中這兩者都存取該記憶體位置「旗標(flag)」和「資料」。
圖18顯示根據本發明之一個具體實施例,利用使用鎖定式模型與交易式模型,失序載入至構成從記憶體內依序讀取載入的記憶體一致性模型內。
如上述,記憶體一致性規則規定儲存依序更新記憶體,且載入依序參照記憶體,以便該兩個核心/執行緒正確通訊。在圖18的右下角內顯示兩個核心,分別是核心1和核心2。此時使用旗標與資料這兩個記憶體資源,進行通訊且在核心1與核心2之間共享資料。例如:核心1要將資料傳遞至核心2時,依照核心1內的程式碼所指示,將儲存該資料然後傳送該旗標。依照核心2內程式碼所指示,核心2將載入該旗標,且檢查該旗標是否等於1。若該旗標不等於1,則核心2將跳回且持續檢查該旗標,直到該旗標等於1為止。在該時間點上,將載入該資料。
在運用失序架構而載入與儲存以失序執行的情況下,可使用鎖定型記憶體一致性模式,以確保兩個輸入(例如,核心1和核心2)維持依序記憶體一致性語意。這透過使用存取遮罩、執行緒ID暫存器以及該追蹤暫存器來顯示。利用設定程式碼關鍵段落內任何載入的對應存取遮罩位元,來設定該鎖定。若發生從另一執行緒/核心至該快取線字元的任何存取,則該鎖定將避免該存取。在一個具體實施例中,這可利用將該存取當成未命中來實施。該鎖定已經清除時,就允許存取該字元。
選擇性地,可使用交易型方法以維持依序記憶體一致性語意。運用該交易型方法,利用設定交易之內任何載入的對應存取遮罩位元,來設定基本單元(atomicity)。若發生任何從另一執行緒/核心或並行交易存取至該快取線字元,而該遮罩位元已經設定,則用信號通知對應該載入的該載入佇列輸入(例如,透過追蹤器),用其相關指令未命中預測/清除或退出。該存取遮罩也追蹤執行緒/核心。該交易結束時,將清除該遮罩位元。該執行緒ID暫存器用來追蹤哪個執行緒存取統一儲存佇列輸入的哪個字元。
圖19顯示根據本發明之一個具體實施例的多核心分段(segmented)記憶體子系統之複數個核心。此具體實施例顯示來自多核心分段記憶體子系統的載入,如何避免存取已經標示為進行中交易一部分的字元(例如,類似於鎖定的情況)。
請注意,若此多核心分段子系統為大型叢集的一部分,則此處具有含共享記憶體子系統的外部處理器/核心/叢集。在此情況下,屬於其他外部處理器/核心/叢集的載入應進行,且若該記憶體位置為交易存取的一部分時,則無法避免意外從任何記憶體位置載入。不過,所有載入將標記該存取遮罩,將其為交易一部分的訊息告知未來的儲存。
來自其他處理器的窺探儲存會將其位址與該遮罩比較,若儲存知道其嘗試要儲存的該位址標記在來自另一執行緒載入(屬於交易一部分的載入)之存取遮罩內,則該儲存將導致該載入未命中預測。否則,會在該載入退出時清除該標記(例如,藉以完成交易)。
圖20顯示根據本發明之一個具體實施例非同步核心存取統一儲存佇列之圖式,其中,儲存可根據儲存資歷將資料轉送至執行緒內的載入。
如上述,記憶體一致性規則規定儲存依序更新記憶體,且依序從記憶體讀取載入,如此該核心/執行緒正確通訊。在圖20的右下角內顯示兩個核心,分別是核心1和核心2。該兩個核心非同步且執行每一個核心內指示的程式碼,以存取該旗標與該資料記憶體資源。
在圖20的具體實施例中,該等複數個執行緒並不知道(agnostic)要存取的該統一儲存佇列。在此實施當中,來自不同執行緒的儲存可轉送至不同執行緒的載入,而藉由依循一組演算法規則,仍舊維持依序記憶體一
致性語意。執行緒可根據儲存資歷彼此轉送。
在相同執行緒內之前所有載入與儲存都已經執行時,則儲存變成資深儲存。接收來自另一執行緒的轉送之執行緒無法獨立地退出載入/儲存。若其他執行緒接收的轉送具有未命中預測,則執行緒必須有條件未命中預測。特定載入可從相同執行緒轉送儲存轉送,或若相同執行緒內無儲存轉送給它時,從不同執行緒資深儲存轉送。
運用圖20的方法,利用將任何存取的對應存取遮罩位元設定為該統一儲存佇列輸入內字元之內的位元組,來設定基本單元。若發生任何從另一執行緒/核心或並行交易存取至該儲存佇列輸入字元,而該遮罩位元已經設定,則用信號通知對應該載入的該載入佇列輸入(例如,透過追蹤器),用其相關指令未命中預測/清除或退出。該存取遮罩也追蹤執行緒/核心。該交易結束時,將清除該遮罩位元。
圖21顯示根據本發明之一個具體實施例,說明其中儲存具有資歷(seniority)的功能性之圖式。如圖21內所描述,將從相同執行緒轉送儲存轉送特定載入。若並無來自該執行緒的轉送,則可從不同的執行緒資深儲存轉送。此原理作用於多核心/執行緒存取共享記憶體的情況下。在這種情況下,不過,只有在從該執行緒內無轉送至特定載入的情況下,儲存可根據儲存資歷,從執行緒轉送到從執行緒儲存。在相同執行緒內之前所有載入與儲存都已經執行時,則儲存變成資深儲存。
此外請注意,執行緒無法單獨退出載入/儲存。另一執行緒接收轉送儲存未命中預測或清除時,該執行緒必須載入未命中預測。
圖21圖解兩個非同步核心/執行緒(例如,核心/執行緒1和核心/執行緒2)之間的範例執行串流。線2101至2105顯示其中儲存根據旗資歷轉送至不同載入之情況。為了幫助例示資歷如何在儲存之運用,每一個指令旁邊都加上編號,顯示不同的執行階段,進度從0至14。尤其是請注意,根據上述規則,其中,線2103所指示的該儲存轉送至相同執行緒內一載入。如此,如上述,在從本身執行緒轉送的載入無法從任何相鄰執行緒轉送。這會在轉送線上顯示黑色打叉。
圖22顯示根據本發明之一個具體實施例,非推測性的免消歧義失序載入佇列退出實施(例如,產生低功率、低晶粒面積以及較少時機關鍵性)。
儲存退出/重新排序緩衝區(SRB,store retirement/reorder buffer)可在兩種實施當中操作:退出實施以及重新排序實施。
在退出實施當中,儲存在儲存退出時以原始程式順序,從該儲存佇列載入該SRB,如此在原始程式順序當中較早的該儲存位於該SRB的頂端上。然後找尋後續載入的位址匹配(例如,使用位址CAM),且從該SRB/儲存快取內的匹配輸入轉送。在具有二或多個位址匹配的情況下,具有優先權(priorty)的編碼器可藉由掃描第一個
來找出正確轉送輸入的位置。這樣省下一趟至記憶體的往返,且允許機器進行轉送。若載入已經派遣且轉送給它的該儲存已經退出至該SRB/儲存快取,則該載入從該SRB/儲存快取轉送,且將該配對關係記錄在該預測表。若要偵測載入在轉送給它的該儲存已經退出至該SRB/儲存快取之前已經派遣之情況,則該載入必須建立位址遮罩,其中標示其本身的位址。這可用不同方式實施(例如,圖17的具體實施例)。
如上述,圖17描述利用追蹤快取線的哪個字元具有等待中載入來運作的存取遮罩。存取該快取線的該字元時,失序載入設定該遮罩,且在該載入退出時清除該遮罩位元。若來自相同執行緒/核心的儲存偵測到其退出並寫入至該字元,而該遮罩位元已經設定,則用信號通知對應該載入的該載入佇列輸入(例如,透過追蹤器),用其相關指令未命中預測/清除或退出。該存取遮罩也追蹤執行緒/核心。
圖22為非消歧義載入儲存佇列,事實上其並不包含對應硬體來消除失序載入與儲存的歧義。載入與儲存依照允許的機器資源進行失序派遣。傳統上,該載入佇列與該儲存佇列內都使用位址匹配與對應消歧義硬體,以確保正確的儲存佇列輸入已經轉送至該要求的載入佇列輸入,如上面所述(例如,圖5和圖6)。外部核心/執行緒無法發現該載入佇列與該儲存佇列的內容。
在圖22中,已派遣的載入與儲存位址並不會
相對於該儲存佇列或該載入佇列內的輸入消除歧義。此時該等載入/儲存佇列為精簡的緩衝區實施,含減少的晶粒面積、功率消耗以及時機需求。該SRB將執行該消歧義功能。隨著在該SRB內偵測到位址匹配,這些匹配用於將該儲存內的輸入傳遞至載入轉送預測表,以隨指令序列往前執行來實施該轉送。
隨著載入已經派遣,檢查該預測表來查看是否與對應的儲存配對。若該載入已經配對且特定儲存已經派遣,則該載入如該預測表內所記錄,將從該儲存佇列輸入編號轉送。若該儲存尚未派遣,則該載入將其載入佇列輸入編號暫存在該預測表內,且將在該載入佇列內標記本身,以等待轉送該儲存資料。當稍後派遣該儲存時,其檢查該預測表,以獲得該載入佇列輸入編號並轉送至該載入。
一旦偵測到用於載入儲存配對的轉送,即記錄該PC和該載入儲存配對的該位址,如此確認該位址匹配。若該位址匹配,則直到該儲存資料已經派遣且該載入將標記來轉送之後,才會派遣該載入。該預測臨界用於設定載入儲存配對之間該轉送關係內的機密等級。
圖23顯示根據本發明之一個具體實施例的免消歧義失序載入佇列重新排序實施之重新排序實施。圖23也產生非推測性的低功綠、低晶粒面積以及較少時機關鍵性。
儲存退出/重新排序緩衝區(SRB,store
retirement/reorder buffer)可在兩種實施當中操作:退出實施以及重新排序實施。
在圖23的重新排序實施當中,從該儲存佇列以失序方式(例如,依照允許的資源)將儲存位址載入該SRB。隨著分配每一個儲存,其接收序號。然後該SRB根據序號將儲存重新排序,如此其以原始程式順序存在於該SRB內。在程式順序內較早的儲存位於該SRB的頂端上。然後,後續載入找尋位址匹配以及分配時間歷程(在載入與儲存分配時所賦予的該程式順序序號)。隨著載入已經派遣,其找尋該SRB,若找到尚未派遣(尚未有位址計算)的較早儲存(相較於其本身序號),則可實施兩種解決方案的其中之一。
1. 該載入並未派遣,會等待所有較早儲存都已經派遣,才會輪到派遣此載入。
2. 該載入派遣且將其位址標記在該快取的該存取遮罩內(如圖17內所示)。後續儲存檢查該存取遮罩,且遵照如圖17內所述相同的方法。
請注意,如上述用優先權編碼器來找出正確的轉送輸入位置。
圖24顯示根據本發明之一個具體實施例的指令序列(例如,軌跡)重新排序推測性執行實施。在推測性模式中,儲存在儲存退出時以原始程式順序,從該儲存佇列移動至該SRB,如此在原始程式順序當中較早的該儲存位於該SRB的頂端上。然後找尋後續載入的位址匹配(例
如,使用位址CAM),且從該SRB/儲存快取內的匹配輸入轉送。在具有二或多個位址匹配的情況下,具有優先權的編碼器可利用掃描第一個來找出正確轉送輸入。這允許該機器進行轉送。若載入已經派遣(第一次檢查該SRB)且轉送給它的該儲存已經退出至該SRB/儲存快取,則該載入從該SRB/儲存快取轉送,且將該配對關係記錄在該預測表。若要偵測載入在轉送給它的該儲存已經退出至該SRB/儲存快取之前已經派遣之情況,則該退出的載入將再一次檢查該儲存佇列。若該載入發現轉送儲存匹配,則用信號通知對應該載入的該載入佇列輸入,用其相關指令進行未命中預測/清除或退出。該轉送預測器將從此未命中轉送當中學習。
請注意,該載入將可針對先前儲存檢查該SRB的匹配位址,因為直到包含所提及載入的該軌跡內所有指令都已經進入該軌跡提交(commit)狀態之前(例如,全都變成非推測性,且全部軌跡都準備好提交),SRB內的所有儲存都不會提交至外部快取/儲存快取架構可見狀態(讓記憶體可發現該SRB儲存裝置)。
該儲存退出/重新排序緩衝區在功能上可進行推測性執行。推測性執行的結果可被保存在該儲存退出/重新排序緩衝區內,直到知道推測性結果為止。該推測性結果在架構上並不可見,一旦提交推測性狀態,即儲存可提交至該儲存快取。在提交該狀態之前,任何異常或需要退出的載入與儲存都將發出異常或未命中預測,避免該狀
態提交。儲存與對應載入之間的轉送未命中預測可以修復(例如,利用讓未命中時清除機器的措施預測=轉送載入點等等)。
由Mohammad Abdallah於2012年1月27日提出,名稱為「HARDWARE ACCELERATION COMPONENTS FOR TRANSLATING GUEST INSTRUCTIONS TO NATIVE INSTRUCTIONS」的第13/360,024號美國專利申請案內可找到SRB功能性的額外說明。
圖25顯示根據本發明之一個具體實施例的示範微處理器管線2500之圖式。微處理器管線2500包括擷取模組2501,用以實施識別並擷取包括執行的指令之處理功能,如上述。在圖25的具體實施例中,該擷取模組接著有解碼模組2502、分配模組2503、派遣模組2504、執行模組2505以及退出模組2506。請注意,微處理器管線2500只是實施上述本發明具體實施例功能性的一個範例,熟此技藝者應該了解,可實施包括上述解碼模組功能性的其他微處理器管線。
為了解釋,上面參照特定具體實施例的說明並非用於排他或用於限制本發明。許多修改與變化都可和上述一致。具體實施例經過選擇與說明來最佳闡述本發明原理,且以許多具體實施例讓其他精通此技術的人士對本系統有最佳瞭解,這些具體實施例都適合特定使用期待。
Claims (21)
- 一種在處理器中之免消歧義失序載入/儲存佇列方法,包含:回應來自載入佇列之載入的派遣,在儲存退出緩衝區中搜尋與該已派遣之載入的位址相匹配之輸入的位址,其中,儲存佇列中的儲存具有在該儲存退出緩衝區中依照原始程式順序的輸入;以及將該儲存退出緩衝區中具有與該已派遣之載入的該位址相匹配之位址的第一輸入相關聯的資料轉送至該已派遣之載入。
- 如申請專利範圍第1項之方法,其中,該儲存佇列和該載入佇列為免消歧義的。
- 如申請專利範圍第2項之方法,其中,該儲存佇列和該載入佇列為免消歧義的,原因在於沒有任何用以消除失序載入和儲存的歧義之對應的硬體被包含在該處理器中。
- 如申請專利範圍第1項之方法,其中,在將來自該第一匹配的資料轉送至該已派遣之載入後,對應於該第一輸入的該儲存和該已派遣之載入立即被配對,且對應的配對關係被記錄在預測表中。
- 如申請專利範圍第1項之方法,其中,實施存取遮罩,其藉由追蹤該儲存退出緩衝區的哪些輸入透過載入而被存取而作用。
- 如申請專利範圍第5項之方法,其中,在執行與 該儲存退出緩衝區中之輸入相關聯的儲存後立即檢查該存取遮罩,而且當該存取遮罩指示透過載入來存取與該儲存相關聯的輸入時,為該儲存而導致未命中預測。
- 如申請專利範圍第1項之方法,其中,藉由使用優先權編碼器來找出該第一輸入。
- 一種儲存有指令的非暫態性電腦可讀取儲存媒體,當該等指令被計算裝置的一組一或多個處理器所執行時,致使該計算裝置用以:回應來自載入佇列之載入的派遣,在儲存退出緩衝區中搜尋與該已派遣之載入的位址相匹配之輸入的位址,其中,儲存佇列中的儲存具有在該儲存退出緩衝區中依照原始程式順序的輸入;以及將該儲存退出緩衝區中具有與該已派遣之載入的該位址相匹配之位址的第一輸入相關聯的資料轉送至該已派遣之載入。
- 如申請專利範圍第8項之非暫態性電腦可讀取儲存媒體,其中,該儲存佇列和該載入佇列為免消歧義的。
- 如申請專利範圍第9項之非暫態性電腦可讀取儲存媒體,其中,該儲存佇列和該載入佇列為免消歧義的,原因在於沒有任何用以消除失序載入和儲存的歧義之對應的硬體被包含在該處理器中。
- 如申請專利範圍第8項之非暫態性電腦可讀取儲存媒體,其中,在將來自該第一匹配的資料轉送至該已派遣之載入後,對應於該第一輸入的該儲存和該已派遣之載 入立即被配對,且對應的配對關係被記錄在預測表中。
- 如申請專利範圍第8項之非暫態性電腦可讀取儲存媒體,其中,實施存取遮罩,其藉由追蹤該儲存退出緩衝區的哪些輸入透過載入而被存取而作用。
- 如申請專利範圍第12項之非暫態性電腦可讀取儲存媒體,其中,在執行與該儲存退出緩衝區中之輸入相關聯的儲存後立即檢查該存取遮罩,而且當該存取遮罩指示透過載入來存取與該儲存相關聯的輸入時,為該儲存而導致未命中預測。
- 如申請專利範圍第8項之非暫態性電腦可讀取儲存媒體,其中,藉由使用優先權編碼器來找出該第一輸入。
- 一種微處理器,包含:複數個核心與一載入儲存緩衝區,其中,該載入儲存緩衝區實施用於免消歧義失序載入儲存佇列之方法,透過以下步驟:回應來自載入佇列之載入的派遣,在儲存退出緩衝區中搜尋與該已派遣之載入的位址相匹配之輸入的位址,其中,儲存佇列中的儲存具有在該儲存退出緩衝區中依照原始程式順序的輸入;及將該儲存退出緩衝區中具有與該已派遣之載入的該位址相匹配之位址的第一輸入相關聯的資料轉送至該已派遣之載入。
- 如申請專利範圍第15項之微處理器,其中,該 儲存佇列與該載入佇列為免消歧義的。
- 如申請專利範圍第16項之微處理器,其中,該儲存佇列和該載入佇列為免消歧義的,原因在於沒有任何用以消除失序載入和儲存的歧義之對應的硬體被包含在該微處理器中。
- 如申請專利範圍第15項之微處理器,其中,在將來自該第一匹配的資料轉送至該已派遣之載入後,對應於該第一輸入的該儲存和該已派遣之載入立即被配對,且對應的配對關係被記錄在預測表中。
- 如申請專利範圍第15項之微處理器,其中,實施存取遮罩,其藉由追蹤該儲存退出緩衝區的哪些輸入透過載入而被存取而作用。
- 如申請專利範圍第19項之微處理器,其中,在執行與該儲存退出緩衝區中之輸入相關聯的儲存後立即檢查該存取遮罩,而且當該存取遮罩指示透過載入來存取與該儲存相關聯的輸入時,為該儲存而導致未命中預測。
- 如申請專利範圍第15項之微處理器,其中,藉由使用優先權編碼器來找出該第一輸入。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261660528P | 2012-06-15 | 2012-06-15 | |
US61/660,528 | 2012-06-15 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201800946A TW201800946A (zh) | 2018-01-01 |
TWI646422B true TWI646422B (zh) | 2019-01-01 |
Family
ID=49758746
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106125574A TWI646422B (zh) | 2012-06-15 | 2013-06-14 | 在處理器中之免消歧義失序載入/儲存佇列方法、微處理器、和非暫態性電腦可讀取儲存媒體 |
TW102121088A TWI599879B (zh) | 2012-06-15 | 2013-06-14 | 在處理器中之免消歧義失序載入儲存佇列方法和微處理器 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102121088A TWI599879B (zh) | 2012-06-15 | 2013-06-14 | 在處理器中之免消歧義失序載入儲存佇列方法和微處理器 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10048964B2 (zh) |
EP (1) | EP2862087A4 (zh) |
KR (2) | KR101818967B1 (zh) |
CN (2) | CN107220032B (zh) |
TW (2) | TWI646422B (zh) |
WO (1) | WO2013188754A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10133576B2 (en) | 2015-01-13 | 2018-11-20 | International Business Machines Corporation | Parallel slice processor having a recirculating load-store queue for fast deallocation of issue queue entries |
US9563428B2 (en) | 2015-03-26 | 2017-02-07 | International Business Machines Corporation | Schedulers with load-store queue awareness |
CN105373663B (zh) * | 2015-11-17 | 2018-06-26 | 无锡江南计算技术研究所 | 一种带条目占用指示的异步缓冲实现方法 |
TWI625628B (zh) * | 2016-08-12 | 2018-06-01 | 深圳衡宇芯片科技有限公司 | 由主機到設備控制器傳輸命令的方法及使用該方法的系統 |
US11175924B2 (en) | 2017-10-06 | 2021-11-16 | International Business Machines Corporation | Load-store unit with partitioned reorder queues with single cam port |
US10534616B2 (en) | 2017-10-06 | 2020-01-14 | International Business Machines Corporation | Load-hit-load detection in an out-of-order processor |
US10417002B2 (en) | 2017-10-06 | 2019-09-17 | International Business Machines Corporation | Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses |
US10606591B2 (en) | 2017-10-06 | 2020-03-31 | International Business Machines Corporation | Handling effective address synonyms in a load-store unit that operates without address translation |
US10606590B2 (en) | 2017-10-06 | 2020-03-31 | International Business Machines Corporation | Effective address based load store unit in out of order processors |
US10572256B2 (en) | 2017-10-06 | 2020-02-25 | International Business Machines Corporation | Handling effective address synonyms in a load-store unit that operates without address translation |
US10394558B2 (en) | 2017-10-06 | 2019-08-27 | International Business Machines Corporation | Executing load-store operations without address translation hardware per load-store unit port |
GB2570466B (en) * | 2018-01-25 | 2020-03-04 | Advanced Risc Mach Ltd | Commit window move element |
US11113055B2 (en) | 2019-03-19 | 2021-09-07 | International Business Machines Corporation | Store instruction to store instruction dependency |
US11269644B1 (en) * | 2019-07-29 | 2022-03-08 | Marvell Asia Pte, Ltd. | System and method for implementing strong load ordering in a processor using a circular ordering ring |
US11327766B2 (en) | 2020-07-31 | 2022-05-10 | International Business Machines Corporation | Instruction dispatch routing |
CN111966406B (zh) | 2020-08-06 | 2021-03-23 | 北京微核芯科技有限公司 | 乱序处理器中乱序执行队列的调度方法和装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6058472A (en) * | 1997-06-25 | 2000-05-02 | Sun Microsystems, Inc. | Apparatus for maintaining program correctness while allowing loads to be boosted past stores in an out-of-order machine |
US6591342B1 (en) * | 1999-12-14 | 2003-07-08 | Intel Corporation | Memory disambiguation for large instruction windows |
US7340567B1 (en) * | 2004-04-14 | 2008-03-04 | Sun Microsystems, Inc. | Value prediction for missing read operations instances |
US7343477B1 (en) * | 2003-12-29 | 2008-03-11 | Sun Microsystems, Inc. | Efficient read after write bypass |
US20090210679A1 (en) * | 2008-02-15 | 2009-08-20 | International Business Machines Corporation | Processor and method for store data forwarding in a system with no memory model restrictions |
US20110047350A1 (en) * | 2009-08-20 | 2011-02-24 | International Buisness Machines Corporation | Partition level power management using fully asynchronous cores with software that has limited asynchronous support |
TW201115932A (en) * | 2009-05-04 | 2011-05-01 | Ikanos Communications Inc | Systems and methods for retransmission return channel error detection |
Family Cites Families (155)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4342080A (en) | 1978-11-08 | 1982-07-27 | Data General Corporation | Computer with microcode generator system |
US5487156A (en) | 1989-12-15 | 1996-01-23 | Popescu; Valeri | Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched |
DE69230462T2 (de) | 1991-11-19 | 2000-08-03 | Sun Microsystems, Inc. | Arbitrierung des Multiprozessorzugriffs zu gemeinsamen Mitteln |
US5367656A (en) | 1992-03-13 | 1994-11-22 | Bull Hn Information Systems Inc. | Controlling cache predictive prefetching based on cache hit ratio trend |
US5319766A (en) | 1992-04-24 | 1994-06-07 | Digital Equipment Corporation | Duplicate tag store for a processor having primary and backup cache memories in a multiprocessor computer system |
US5553266A (en) | 1992-04-24 | 1996-09-03 | Digital Equipment Corporation | Update vs. invalidate policy for a snoopy bus protocol |
US5788245A (en) | 1993-11-30 | 1998-08-04 | Sega Enterprises, Ltd. | Game machine for playing ball throw and method of adjusting target behavior in the same |
US5778245A (en) * | 1994-03-01 | 1998-07-07 | Intel Corporation | Method and apparatus for dynamic allocation of multiple buffers in a processor |
US5553265A (en) | 1994-10-21 | 1996-09-03 | International Business Machines Corporation | Methods and system for merging data during cache checking and write-back cycles for memory reads and writes |
US6006324A (en) | 1995-01-25 | 1999-12-21 | Advanced Micro Devices, Inc. | High performance superscalar alignment unit |
US5751983A (en) * | 1995-10-03 | 1998-05-12 | Abramson; Jeffrey M. | Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations |
US6298435B1 (en) | 1996-04-16 | 2001-10-02 | International Business Machines Corporation | Methods and apparatus for exploiting virtual buffers to increase instruction parallelism in a pipelined processor |
US5958042A (en) | 1996-06-11 | 1999-09-28 | Sun Microsystems, Inc. | Grouping logic circuit in a pipelined superscalar processor |
US5748987A (en) | 1996-06-25 | 1998-05-05 | Photo Dimensions | Producing smoothly blended double exposure composite images |
JP3732234B2 (ja) | 1996-07-16 | 2006-01-05 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | スーパースカラマイクロプロセッサのための非ブロッキングロードを実現するロード/ストアユニットおよびロード/ストアバッファから非ブロッキング的にロードを選択する方法 |
US6163838A (en) | 1996-11-13 | 2000-12-19 | Intel Corporation | Computer processor with a replay system |
US5781752A (en) * | 1996-12-26 | 1998-07-14 | Wisconsin Alumni Research Foundation | Table based data speculation circuit for parallel processing computer |
US6021485A (en) | 1997-04-10 | 2000-02-01 | International Business Machines Corporation | Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching |
US5943686A (en) | 1997-04-14 | 1999-08-24 | International Business Machines Corporation | Multiple cache directories for non-arbitration concurrent accessing of a cache memory |
US6006326A (en) | 1997-06-25 | 1999-12-21 | Sun Microsystems, Inc. | Apparatus for restraining over-eager load boosting in an out-of-order machine using a memory disambiguation buffer for determining dependencies |
US6157988A (en) | 1997-08-01 | 2000-12-05 | Micron Technology, Inc. | Method and apparatus for high performance branching in pipelined microsystems |
US6185660B1 (en) | 1997-09-23 | 2001-02-06 | Hewlett-Packard Company | Pending access queue for providing data to a target register during an intermediate pipeline phase after a computer cache miss |
US6463522B1 (en) * | 1997-12-16 | 2002-10-08 | Intel Corporation | Memory system for ordering load and store instructions in a processor that performs multithread execution |
US6360314B1 (en) * | 1998-07-14 | 2002-03-19 | Compaq Information Technologies Group, L.P. | Data cache having store queue bypass for out-of-order instruction execution and method for same |
CN1111297C (zh) | 1998-07-15 | 2003-06-11 | 北京多思科技工业园股份有限公司 | 指令控制排序方法及其装置 |
US6397306B2 (en) | 1998-10-23 | 2002-05-28 | Alcatel Internetworking, Inc. | Per memory atomic access for distributed memory multiprocessor architecture |
US6385708B1 (en) | 1998-11-16 | 2002-05-07 | Infineon Technologies Ag | Using a timing-look-up-table and page timers to determine the time between two consecutive memory accesses |
US6487639B1 (en) | 1999-01-19 | 2002-11-26 | International Business Machines Corporation | Data cache miss lookaside buffer and method thereof |
US6738896B1 (en) * | 1999-02-01 | 2004-05-18 | Hewlett-Packard Development Company, L.P. | Method and apparatus for determining availability of a queue which allows random insertion |
US6336168B1 (en) | 1999-02-26 | 2002-01-01 | International Business Machines Corporation | System and method for merging multiple outstanding load miss instructions |
US6349382B1 (en) * | 1999-03-05 | 2002-02-19 | International Business Machines Corporation | System for store forwarding assigning load and store instructions to groups and reorder queues to keep track of program order |
US6470444B1 (en) | 1999-06-16 | 2002-10-22 | Intel Corporation | Method and apparatus for dividing a store operation into pre-fetch and store micro-operations |
US6694421B2 (en) | 1999-12-29 | 2004-02-17 | Intel Corporation | Cache memory bank access prediction |
US6484254B1 (en) | 1999-12-30 | 2002-11-19 | Intel Corporation | Method, apparatus, and system for maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses |
US6651161B1 (en) | 2000-01-03 | 2003-11-18 | Advanced Micro Devices, Inc. | Store load forward predictor untraining |
US8266367B2 (en) | 2003-12-02 | 2012-09-11 | Super Talent Electronics, Inc. | Multi-level striping and truncation channel-equalization for flash-memory system |
WO2001063240A2 (en) | 2000-02-25 | 2001-08-30 | Sun Microsystems, Inc. | Maintaining high snoop traffic throughput and preventing cache data eviction during an atomic operation |
US6598122B2 (en) * | 2000-04-19 | 2003-07-22 | Hewlett-Packard Development Company, L.P. | Active load address buffer |
US6631460B1 (en) | 2000-04-27 | 2003-10-07 | Institute For The Development Of Emerging Architectures, L.L.C. | Advanced load address table entry invalidation based on register address wraparound |
US6463511B2 (en) | 2000-12-29 | 2002-10-08 | Intel Corporation | System and method for high performance execution of locked memory instructions in a system with distributed memory and a restrictive memory model |
JP3497832B2 (ja) | 2001-03-28 | 2004-02-16 | 株式会社半導体理工学研究センター | ロード・ストアキュー |
US20020188817A1 (en) | 2001-06-08 | 2002-12-12 | Norden Erik K. | Store buffer pipeline |
US6704841B2 (en) | 2001-06-26 | 2004-03-09 | Sun Microsystems, Inc. | Method and apparatus for facilitating speculative stores in a multiprocessor system |
US7752423B2 (en) | 2001-06-28 | 2010-07-06 | Intel Corporation | Avoiding execution of instructions in a second processor by committing results obtained from speculative execution of the instructions in a first processor |
US7406690B2 (en) | 2001-09-26 | 2008-07-29 | International Business Machines Corporation | Flow lookahead in an ordered semaphore management subsystem |
US20030065909A1 (en) | 2001-09-28 | 2003-04-03 | Jourdan Stephan J. | Deferral of dependent loads until after execution of colliding stores |
US6708879B2 (en) | 2001-11-16 | 2004-03-23 | Audio Visual Services Corporation | Automated unmanned rental system and method |
JP3727887B2 (ja) | 2002-02-19 | 2005-12-21 | 富士通株式会社 | マルチスレッドプロセッサにおける共有レジスタファイル制御方式 |
US20030172198A1 (en) | 2002-02-21 | 2003-09-11 | Ashutosh Tiwary | Workload playback for a system for performance testing of N-tiered computer systems using recording and playback of workloads |
US6782461B2 (en) | 2002-02-25 | 2004-08-24 | Intel Corporation | Dynamically adjustable load-sharing circular queues |
US6883086B2 (en) | 2002-03-06 | 2005-04-19 | Intel Corporation | Repair of mis-predicted load values |
US20030208665A1 (en) | 2002-05-01 | 2003-11-06 | Jih-Kwon Peir | Reducing data speculation penalty with early cache hit/miss prediction |
US7181598B2 (en) | 2002-05-17 | 2007-02-20 | Intel Corporation | Prediction of load-store dependencies in a processing agent |
US6920546B2 (en) | 2002-08-13 | 2005-07-19 | Intel Corporation | Fusion of processor micro-operations |
US6957305B2 (en) | 2002-08-29 | 2005-10-18 | International Business Machines Corporation | Data streaming mechanism in a microprocessor |
US7062636B2 (en) | 2002-09-19 | 2006-06-13 | Intel Corporation | Ordering scheme with architectural operation decomposed into result producing speculative micro-operation and exception producing architectural micro-operation |
US6889311B2 (en) | 2002-11-22 | 2005-05-03 | Texas Instruments Incorporated | Pipeline stage single cycle sliding alignment correction of memory read data with integrated data reordering for load and store instructions |
US6986010B2 (en) | 2002-12-13 | 2006-01-10 | Intel Corporation | Cache lock mechanism with speculative allocation |
US7080209B2 (en) | 2002-12-24 | 2006-07-18 | Intel Corporation | Method and apparatus for processing a load-lock instruction using a relaxed lock protocol |
US20040123078A1 (en) | 2002-12-24 | 2004-06-24 | Hum Herbert H | Method and apparatus for processing a load-lock instruction using a scoreboard mechanism |
US7114042B2 (en) | 2003-05-22 | 2006-09-26 | International Business Machines Corporation | Method to provide atomic update primitives in an asymmetric heterogeneous multiprocessor environment |
US7680990B2 (en) | 2003-05-30 | 2010-03-16 | Hewlett-Packard Development Company, L.P. | Superword memory-access instructions for data processor |
US7284097B2 (en) | 2003-09-30 | 2007-10-16 | International Business Machines Corporation | Modified-invalid cache state to reduce cache-to-cache data transfer operations for speculatively-issued full cache line writes |
US20050097304A1 (en) | 2003-10-30 | 2005-05-05 | International Business Machines Corporation | Pipeline recirculation for data misprediction in a fast-load data cache |
US7640419B2 (en) | 2003-12-23 | 2009-12-29 | Intel Corporation | Method for and a trailing store buffer for use in memory renaming |
US7174428B2 (en) | 2003-12-29 | 2007-02-06 | Intel Corporation | Method and system for transforming memory location references in instructions |
US8301844B2 (en) | 2004-01-13 | 2012-10-30 | Hewlett-Packard Development Company, L.P. | Consistency evaluation of program execution across at least one memory barrier |
US20050228971A1 (en) | 2004-04-08 | 2005-10-13 | Samra Nicholas G | Buffer virtualization |
US8607241B2 (en) | 2004-06-30 | 2013-12-10 | Intel Corporation | Compare and exchange operation using sleep-wakeup mechanism |
US7703098B1 (en) | 2004-07-20 | 2010-04-20 | Sun Microsystems, Inc. | Technique to allow a first transaction to wait on condition that affects its working set |
JP4520788B2 (ja) | 2004-07-29 | 2010-08-11 | 富士通株式会社 | マルチスレッドプロセッサ |
US20060026371A1 (en) | 2004-07-30 | 2006-02-02 | Chrysos George Z | Method and apparatus for implementing memory order models with order vectors |
US7606998B2 (en) | 2004-09-10 | 2009-10-20 | Cavium Networks, Inc. | Store instruction ordering for multi-core processor |
US7315926B2 (en) | 2004-09-21 | 2008-01-01 | Emc Corporation | Lock management for concurrent access to a single file from multiple data mover computers |
US7373462B2 (en) | 2005-03-29 | 2008-05-13 | International Business Machines Corporation | Snoop filter for filtering snoop requests |
US7380071B2 (en) | 2005-03-29 | 2008-05-27 | International Business Machines Corporation | Snoop filtering system in a multiprocessor system |
US7392351B2 (en) | 2005-03-29 | 2008-06-24 | International Business Machines Corporation | Method and apparatus for filtering snoop requests using stream registers |
US7502895B2 (en) | 2005-09-13 | 2009-03-10 | Hewlett-Packard Development Company, L.P. | Techniques for reducing castouts in a snoop filter |
US7506132B2 (en) * | 2005-12-22 | 2009-03-17 | International Business Machines Corporation | Validity of address ranges used in semi-synchronous memory copy operations |
US20070180158A1 (en) | 2006-02-01 | 2007-08-02 | International Business Machines Corporation | Method for command list ordering after multiple cache misses |
US7721071B2 (en) | 2006-02-28 | 2010-05-18 | Mips Technologies, Inc. | System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor |
US7590825B2 (en) * | 2006-03-07 | 2009-09-15 | Intel Corporation | Counter-based memory disambiguation techniques for selectively predicting load/store conflicts |
US20070234014A1 (en) | 2006-03-28 | 2007-10-04 | Ryotaro Kobayashi | Processor apparatus for executing instructions with local slack prediction of instructions and processing method therefor |
US8327115B2 (en) * | 2006-04-12 | 2012-12-04 | Soft Machines, Inc. | Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode |
US20070260754A1 (en) | 2006-04-13 | 2007-11-08 | Irish John D | Hardware Assisted Exception for Software Miss Handling of an I/O Address Translation Cache Miss |
CN101449250B (zh) | 2006-05-30 | 2011-11-16 | 英特尔公司 | 用于高速缓存一致性协议的方法、装置及系统 |
US20070288725A1 (en) * | 2006-06-07 | 2007-12-13 | Luick David A | A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism |
US20070288694A1 (en) | 2006-06-13 | 2007-12-13 | Sanjeev Ghai | Data processing system, processor and method of data processing having controllable store gather windows |
US7581068B2 (en) | 2006-06-29 | 2009-08-25 | Intel Corporation | Exclusive ownership snoop filter |
US9262326B2 (en) | 2006-08-14 | 2016-02-16 | Qualcomm Incorporated | Method and apparatus to enable the cooperative signaling of a shared bus interrupt in a multi-rank memory subsystem |
US8032734B2 (en) * | 2006-09-06 | 2011-10-04 | Mips Technologies, Inc. | Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor |
US9946547B2 (en) * | 2006-09-29 | 2018-04-17 | Arm Finance Overseas Limited | Load/store unit for a processor, and applications thereof |
US7594079B2 (en) | 2006-09-29 | 2009-09-22 | Mips Technologies, Inc. | Data cache virtual hint way prediction, and applications thereof |
US7600098B1 (en) * | 2006-09-29 | 2009-10-06 | Sun Microsystems, Inc. | Method and system for efficient implementation of very large store buffer |
EP2523101B1 (en) | 2006-11-14 | 2014-06-04 | Soft Machines, Inc. | Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes |
US7752613B2 (en) | 2006-12-05 | 2010-07-06 | Intel Corporation | Disambiguation in dynamic binary translation |
TW200837568A (en) | 2006-12-20 | 2008-09-16 | Sandisk Il Ltd | Apparatus, method and computer readable medium for disambiguating commands with respect to logical protocols |
US20080183972A1 (en) | 2007-01-26 | 2008-07-31 | James Norris Dieffenderfer | Snoop Filtering Using a Snoop Request Cache |
US8132172B2 (en) | 2007-03-26 | 2012-03-06 | Intel Corporation | Thread scheduling on multiprocessor systems |
US8135900B2 (en) | 2007-03-28 | 2012-03-13 | Kabushiki Kaisha Toshiba | Integrated memory management and memory management method |
WO2008155827A1 (ja) | 2007-06-20 | 2008-12-24 | Fujitsu Limited | キャッシュ制御装置及び制御方法 |
US8447911B2 (en) | 2007-07-05 | 2013-05-21 | Board Of Regents, University Of Texas System | Unordered load/store queue |
US7890725B2 (en) | 2007-07-09 | 2011-02-15 | International Business Machines Corporation | Bufferless transactional memory with runahead execution |
US7765363B2 (en) | 2007-07-26 | 2010-07-27 | Hewlett-Packard Development Company, L.P. | Mask usable for snoop requests |
US8037252B2 (en) | 2007-08-28 | 2011-10-11 | International Business Machines Corporation | Method for reducing coherence enforcement by selective directory update on replacement of unmodified cache blocks in a directory-based coherent multiprocessor |
US8006073B1 (en) | 2007-09-28 | 2011-08-23 | Oracle America, Inc. | Simultaneous speculative threading light mode |
CN101447911B (zh) | 2007-11-27 | 2010-12-15 | 上海高性能集成电路设计中心 | 一种通过分布控制扩展访存队列容量的装置 |
US9311085B2 (en) * | 2007-12-30 | 2016-04-12 | Intel Corporation | Compiler assisted low power and high performance load handling based on load types |
TWI354996B (en) | 2007-12-31 | 2011-12-21 | Phison Electronics Corp | Wear leveling method and controller thereof |
US8719553B2 (en) | 2008-01-31 | 2014-05-06 | Arm Norway As | Method for re-circulating a fragment through a rendering pipeline |
US9146744B2 (en) | 2008-05-06 | 2015-09-29 | Oracle America, Inc. | Store queue having restricted and unrestricted entries |
US8464009B2 (en) | 2008-06-04 | 2013-06-11 | Oracle America, Inc. | Method for memory interleave support with a ceiling mask |
US8332852B2 (en) | 2008-07-21 | 2012-12-11 | International Business Machines Corporation | Thread-to-processor assignment based on affinity identifiers |
US9280466B2 (en) | 2008-09-09 | 2016-03-08 | Kabushiki Kaisha Toshiba | Information processing device including memory management device managing access from processor to memory and memory management method |
US20100274972A1 (en) | 2008-11-24 | 2010-10-28 | Boris Babayan | Systems, methods, and apparatuses for parallel computing |
BRPI0920541A2 (pt) | 2008-11-24 | 2018-11-06 | Intel Corp | sistemas, métodos e aparelho para decompor um programa sequencial em multicadeias, executar as ditas cadeias, e reconstruir a execução sequencial |
CN101763250B (zh) | 2008-12-25 | 2014-03-12 | 世意法(北京)半导体研发有限责任公司 | 地址比较电路和方法 |
US8041928B2 (en) | 2008-12-22 | 2011-10-18 | International Business Machines Corporation | Information handling system with real and virtual load/store instruction issue queue |
US8380964B2 (en) | 2009-04-03 | 2013-02-19 | International Business Machines Corporation | Processor including age tracking of issue queue instructions |
US8521982B2 (en) | 2009-04-15 | 2013-08-27 | International Business Machines Corporation | Load request scheduling in a cache hierarchy |
US8244988B2 (en) | 2009-04-30 | 2012-08-14 | International Business Machines Corporation | Predictive ownership control of shared memory computing system data |
US8099566B2 (en) | 2009-05-15 | 2012-01-17 | Oracle America, Inc. | Load/store ordering in a threaded out-of-order processor |
US8392666B2 (en) | 2009-05-21 | 2013-03-05 | Via Technologies, Inc. | Low power high speed load-store collision detector |
US8230177B2 (en) * | 2009-05-28 | 2012-07-24 | Oracle America, Inc. | Store prefetching via store queue lookahead |
US20100306509A1 (en) * | 2009-05-29 | 2010-12-02 | Via Technologies, Inc. | Out-of-order execution microprocessor with reduced store collision load replay reduction |
CN101901132B (zh) | 2009-08-12 | 2013-08-21 | 威盛电子股份有限公司 | 微处理器以及相关储存方法 |
US8533438B2 (en) | 2009-08-12 | 2013-09-10 | Via Technologies, Inc. | Store-to-load forwarding based on load/store address computation source information comparisons |
US9286075B2 (en) | 2009-09-30 | 2016-03-15 | Oracle America, Inc. | Optimal deallocation of instructions from a unified pick queue |
US8832403B2 (en) | 2009-11-13 | 2014-09-09 | International Business Machines Corporation | Generation-based memory synchronization in a multiprocessor system with weakly consistent memory accesses |
US8397238B2 (en) | 2009-12-08 | 2013-03-12 | Qualcomm Incorporated | Thread allocation and clock cycle adjustment in an interleaved multi-threaded processor |
TWI484335B (zh) | 2010-01-07 | 2015-05-11 | Alibaba Group Holding Ltd | Cached data processing method, processing system, and means |
US8938605B2 (en) | 2010-03-05 | 2015-01-20 | International Business Machines Corporation | Instruction cracking based on machine state |
US20110225297A1 (en) | 2010-03-11 | 2011-09-15 | International Business Machines Corporation | Controlling Access To A Resource In A Distributed Computing System With A Distributed Access Request Queue |
CN101944068A (zh) | 2010-08-23 | 2011-01-12 | 中国科学技术大学苏州研究院 | 一种共享高速缓存的性能优化方法 |
US20120059971A1 (en) | 2010-09-07 | 2012-03-08 | David Kaplan | Method and apparatus for handling critical blocking of store-to-load forwarding |
US8713263B2 (en) * | 2010-11-01 | 2014-04-29 | Advanced Micro Devices, Inc. | Out-of-order load/store queue structure |
US8756374B2 (en) | 2010-11-05 | 2014-06-17 | Oracle International Corporation | Store queue supporting ordered and unordered stores |
US8321635B2 (en) | 2010-11-08 | 2012-11-27 | Lsi Corporation | Synchronizing commands for preventing data corruption |
US20120117335A1 (en) | 2010-11-10 | 2012-05-10 | Advanced Micro Devices, Inc. | Load ordering queue |
US9529594B2 (en) | 2010-11-30 | 2016-12-27 | Oracle International Corporation | Miss buffer for a multi-threaded processor |
WO2012103359A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
WO2012106362A2 (en) | 2011-01-31 | 2012-08-09 | Fusion-Io, Inc. | Apparatus, system, and method for managing eviction of data |
US9043363B2 (en) | 2011-06-03 | 2015-05-26 | Oracle International Corporation | System and method for performing memory management using hardware transactions |
WO2013188311A1 (en) | 2012-06-15 | 2013-12-19 | Soft Machines, Inc. | A load store buffer agnostic to threads implementing forwarding from different threads based on store seniority |
KR20170066700A (ko) | 2012-06-15 | 2017-06-14 | 인텔 코포레이션 | 공유 메모리 자원들을 사용하는 메모리 일관성 모델에서 비순차 load들에 대한 로크 기반 및 동기화 기반 방법 |
CN104583936B (zh) | 2012-06-15 | 2019-01-04 | 英特尔公司 | 具有组成按序从存储器进行读取的加载的存储器一致性模型中的乱序加载的信号量方法和系统 |
KR20170102576A (ko) | 2012-06-15 | 2017-09-11 | 인텔 코포레이션 | 분산된 구조를 갖는 동적 디스패치 윈도우를 가지는 가상 load store 큐 |
EP2862061A4 (en) | 2012-06-15 | 2016-12-21 | Soft Machines Inc | MEMORY PRECISION FOR VIRTUAL LOAD WITH DYNAMIC SHIPPING WINDOW WITH UNIFORM STRUCTURE |
EP2862068B1 (en) * | 2012-06-15 | 2022-07-06 | Intel Corporation | Reordered speculative instruction sequences with a disambiguation-free out of order load store queue |
US9639469B2 (en) | 2012-09-28 | 2017-05-02 | Qualcomm Technologies, Inc. | Coherency controller with reduced data buffer |
US9244837B2 (en) | 2012-10-11 | 2016-01-26 | Texas Instruments Incorporated | Zero cycle clock invalidate operation |
US9455048B2 (en) | 2013-06-28 | 2016-09-27 | Sandisk Technologies Llc | NAND flash word line management using multiple fragment pools |
WO2015089487A1 (en) | 2013-12-12 | 2015-06-18 | Life Technologies Corporation | Membrane-penetrating peptides to enhance transfection and compositions and methods for using same |
US9448936B2 (en) | 2014-01-13 | 2016-09-20 | Apple Inc. | Concurrent store and load operations |
WO2016085541A1 (en) | 2014-11-28 | 2016-06-02 | Nasuni Corporation | Versioned file system with global lock |
-
2013
- 2013-06-14 CN CN201710464270.1A patent/CN107220032B/zh active Active
- 2013-06-14 TW TW106125574A patent/TWI646422B/zh not_active IP Right Cessation
- 2013-06-14 WO PCT/US2013/045863 patent/WO2013188754A1/en active Application Filing
- 2013-06-14 EP EP13805015.8A patent/EP2862087A4/en not_active Ceased
- 2013-06-14 KR KR1020157000678A patent/KR101818967B1/ko active IP Right Grant
- 2013-06-14 TW TW102121088A patent/TWI599879B/zh active
- 2013-06-14 KR KR1020187000693A patent/KR101996462B1/ko active IP Right Grant
- 2013-06-14 CN CN201380043007.5A patent/CN104583975B/zh active Active
-
2014
- 2014-12-12 US US14/569,543 patent/US10048964B2/en active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6058472A (en) * | 1997-06-25 | 2000-05-02 | Sun Microsystems, Inc. | Apparatus for maintaining program correctness while allowing loads to be boosted past stores in an out-of-order machine |
US6591342B1 (en) * | 1999-12-14 | 2003-07-08 | Intel Corporation | Memory disambiguation for large instruction windows |
US7343477B1 (en) * | 2003-12-29 | 2008-03-11 | Sun Microsystems, Inc. | Efficient read after write bypass |
US7340567B1 (en) * | 2004-04-14 | 2008-03-04 | Sun Microsystems, Inc. | Value prediction for missing read operations instances |
US20090210679A1 (en) * | 2008-02-15 | 2009-08-20 | International Business Machines Corporation | Processor and method for store data forwarding in a system with no memory model restrictions |
TW201115932A (en) * | 2009-05-04 | 2011-05-01 | Ikanos Communications Inc | Systems and methods for retransmission return channel error detection |
US20110047350A1 (en) * | 2009-08-20 | 2011-02-24 | International Buisness Machines Corporation | Partition level power management using fully asynchronous cores with software that has limited asynchronous support |
Also Published As
Publication number | Publication date |
---|---|
CN107220032B (zh) | 2020-12-15 |
US20150100765A1 (en) | 2015-04-09 |
TW201800946A (zh) | 2018-01-01 |
KR101996462B1 (ko) | 2019-07-04 |
US10048964B2 (en) | 2018-08-14 |
CN104583975B (zh) | 2017-07-14 |
KR20180008870A (ko) | 2018-01-24 |
EP2862087A4 (en) | 2016-12-14 |
KR101818967B1 (ko) | 2018-01-16 |
TW201421239A (zh) | 2014-06-01 |
KR20150027210A (ko) | 2015-03-11 |
WO2013188754A1 (en) | 2013-12-19 |
EP2862087A1 (en) | 2015-04-22 |
CN107220032A (zh) | 2017-09-29 |
CN104583975A (zh) | 2015-04-29 |
TWI599879B (zh) | 2017-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI646422B (zh) | 在處理器中之免消歧義失序載入/儲存佇列方法、微處理器、和非暫態性電腦可讀取儲存媒體 | |
TWI585686B (zh) | 根據儲存資歷實施來自不同執行緒轉送的執行緒不可知之載入儲存緩衝區 | |
TWI585682B (zh) | 具備免消歧義失序載入儲存佇列的重新排序推測性指令序列 | |
TWI585683B (zh) | 用以實施具備使用分散結構的動態派遣窗之虛擬載入儲存佇列的失序處理器與電腦系統 | |
TWI608414B (zh) | 具備使用統一結構的動態派遣窗之虛擬載入儲存佇列 | |
TWI637318B (zh) | 用於在使用共享記憶體資源的記憶體一致性模型內失序載入之鎖定式與同步式方法 | |
TWI585684B (zh) | 具有在依序從記憶體讀取構成載入的記憶體一致性模型內失序載入之旗標語方法及系統 | |
TWI559221B (zh) | 實現從載入儲存重新排序與最佳化所導致的推測性轉送錯失預測/錯誤當中復原之方法及系統 | |
TWI636399B (zh) | 用於實施載入儲存重新排序與最佳化之指令定義 | |
TWI603260B (zh) | 過濾儲存避免所有儲存針對快取的所有字元進行窺探檢查之方法、微處理器及電腦系統 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |