TWI882324B - 用於向量載入-儲存管線選擇的積體電路及方法 - Google Patents
用於向量載入-儲存管線選擇的積體電路及方法 Download PDFInfo
- Publication number
- TWI882324B TWI882324B TW112115841A TW112115841A TWI882324B TW I882324 B TWI882324 B TW I882324B TW 112115841 A TW112115841 A TW 112115841A TW 112115841 A TW112115841 A TW 112115841A TW I882324 B TWI882324 B TW I882324B
- Authority
- TW
- Taiwan
- Prior art keywords
- instruction
- storage unit
- storage
- cache
- store
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0855—Overlapped cache accessing, e.g. pipeline
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
- G06F12/0888—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/50—Control mechanisms for virtual memory, cache or TLB
- G06F2212/502—Control mechanisms for virtual memory, cache or TLB using adaptive policy
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Human Computer Interaction (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
向量的載入-儲存管線選擇的系統與方法被揭露。舉例而言,用於執行指令的一積體電路(例如處理器)包括提供至一記憶體系統的一介面的一L1快取;連接至該L1快取的一L2快取,其與該L1快取執行一快取同調協定;配置以透過該L1快取將資料寫入至該記憶體系統的一第一儲存單元;配置以略過該L1快取及透過該L2快取將資料寫入至該記憶體系統的一第二儲存單元;以及一儲存管線選擇電路,其配置以使用一向量引數識別與一儲存指令的一第一拍相關聯的一位址;基於與該儲存指令的該第一拍相關聯的該位址,在該第一儲存單元和該第二儲存單元之間選擇;以及發送該儲存指令至所選擇儲存單元。
Description
相關申請案的交叉引用
本申請案要求2022年05月12日申請的美國臨時專利申請案序號63/341,051的優先權和權益,該申請案的全部揭露內容藉由引用併入本文。
本揭露相關於向量的載入-儲存管線選擇。
處理器可被配置以執行向量指令,該向量指令操作於長於在單一時脈週期間可以被寫入至記憶體系統的數字位元的引數。向量的儲存指令可在多個時脈週期內於一連串的拍中被儲存單元或管線執行。
本文揭露了向量的載入-儲存管線選擇的實施方式。一些實施方式可被用以比先前已知方法更有效率地從處理器中的處理器核心(例如,CPU,像是x86、ARM、及/或RISC-V CPU)增加記憶體頻寬。
配置以執行向量指令(例如,使用具有向量暫存器檔案的向量單元)的處理器核心可包括配置以並行地執行儲存指令以增加處理器核心的記憶體頻寬的多個儲存單元(例如載入/儲存管線)。處理器核心的第一儲存單元可經由L1快取(例如L1資料快取)存取記憶體系統,而處理器核心的第二儲存單元可略過L1快取。舉例而言,第二儲存單元可經由與L1快取執行快取同調協定的L2快取而存取記憶體系統。略過L1快取可以增加在處理器核心與記憶體系統間的可用頻寬,但是,可藉由引起在L1資料快取中的快取無效事件而招致性能損失,其中被略過的寫入不經意地使在L1快取中的項目陳舊。
儲存單元中的哪一個被用以執行指定的儲存指令可能為了改善性能而被動態地確定。對於向量的儲存指令可使用各種定址模式,包括跨步定址或索引定址。在儲存指令的發送時間,有可能並非所有與寫入指令相關聯的位址已被解析。於一些實施方式中,與儲存指令的第一拍相關聯的位址被識別並用以選擇哪一個儲存單元將用於該儲存指令。舉例而言,相關聯位址可為元素的目標位址,其在儲存指令的第一拍期間要被儲存。此相關聯位址可提供預期與儲存指令相關聯的位址的範圍的合理指示。
舉例而言,與第一拍相關聯的位址可被用以針對匹配相關聯位址的標籤檢查L1快取。若匹配標籤被發現於L1快取中,那麼第一儲存單元可被用以執行儲存指令。若匹配標籤沒有被發現於L1快取中,那麼第二儲存單元可被用以執行儲存指令以及L1快取可被略過。
於一些實施方式中,預測器被用以在第一儲存單元和第二儲存單元間選擇。各種預測器技術可被使用,例如使用飽和計數器維持預測器項目,當相應的寫入指令引起快取無效或在不引起快取無效的情況下執行的時候,飽和計數器被更新。舉例而言,預測項目可藉著程式計數器值的雜湊和儲存指令的目標位址被編入索引。
強制寫入記憶體映射輸入/輸出(MMIO)以通過L1快取可為有利的。於一些實施方式中,與儲存指令的第一拍相關聯的位址被檢查以確定其是否相應於MMIO。若它真的相應於MMIO,那麼寫入指令被發送至第一儲存單元。
指令間的相依性可複雜化兩個儲存單元的並行使用。這可能引起錯誤而在以一位址為目標的程序次序中的較早指令被執行之前,在相同位址執行儲存指令。舉例而言,會有寫後寫(WAW)衝突或讀後寫(WAR)衝突。若一寫入指令被發送至與正執行程序次序中的較早指令的單元的一不同儲存單元且與一較晚寫入指令共享目標位址,那麼有較晚寫入指令將於較早指令前被執行的風險。防止此問題的一個解決方法是偵測相依性並強制較晚寫入指令被發送至與較早指令相同的單元以至於較晚指令在先進先出(FIFO)佇列中的較早指令後被執行。防止此問題的另一解決方法是偵測相依性並延遲較晚寫入指令的發送直到較早指令完成執行且接著基於其他準則選擇較晚寫入指令的執行單元。
本文所述之實施方式可提供相對於傳統處理器的優勢,例如,舉例而言,增加處理器核心的記憶體頻寬同時降低快取無效事件的可能性及/或改善處理器核心性能。
本文所用詞彙「電路」意指建構以執行一或多功能的電子元件(例如,電晶體、電阻器、電容器、及/或電感器)的設置。舉例而言,電路可包括一或多個互相連接的電晶體以形成集體執行一邏輯功能的邏輯閘。
本文所用詞彙「微架構狀態」意指積體電路(例如處理器或微控制器)狀態的一部份(例如資料的位元),其非被積體電路所執行的軟體直接存取。舉例而言,微架構狀態可包括儲存於快取的資料及/或用以預測控制流執行的控制流預測器所儲存的資料。
詳述
圖1是用於使用向量的載入-儲存管線選擇執行指令的積體電路110的實例的方塊圖。舉例而言,積體電路110可為處理器、微處理器、微控制器、或IP核心。積體電路110包括處理器核心120,其配置以執行針對向量引數進行操作的向量指令。於此實例中,處理器核心120包括具有向量暫存器檔案132的向量單元130,其被配置以執行針對向量引數進行操作的向量指令。於一些實施方式中,處理器核心120可能亦包括用於執行純量指令的純量單元以及共用處理器管線(圖1未示出),共用處理器管線具有針對指令抓取、解碼、及發送的階段。積體電路110包括L1快取150,L1快取150提供至積體電路110的記憶體系統的介面。積體電路110包括連接至L1快取150的L2快取152,L2快取152與L1快取150執行快取同調協定。於此實例中,L1快取150是處理器核心120的一部份,以及L2快取152在處理器核心120之外且是積體電路110的外部記憶體系統154的一部份。於一些實施方式(圖1未示出)中,L2快取152可為處理器核心120的一部份。處理器核心120包括第一儲存單元140,其被配置以執行記憶體存取指令(例如,儲存及/或載入指令)。第一儲存單元140被配置以透過L1快取150將資料寫入至記憶體系統。處理器核心120包括第二儲存單元142,第二儲存單元142配置以略過L1快取150且透過L2快取152將資料寫入至記憶體系統。第一儲存單元140和第二儲存單元142可提供在向量單元130和外部記憶體系統154之間另外的資料路徑,其可以被並行地使用以增加寫入資料至記憶體的通量。處理器核心120包括儲存管線選擇電路160,儲存管線選擇電路160配置以針對向量儲存指令在第一儲存單元140和第二儲存單元142之間選擇,以及發送那些向量儲存指令至用於執行的所選擇儲存單元。舉例而言,積體電路110可被用以執行圖3的技術300。舉例而言,積體電路110可被用以執行圖4的技術400。舉例而言,積體電路110可被用以執行圖5的技術500。舉例而言,積體電路110可被用以執行圖6的技術600。舉例而言,積體電路110可被用以執行圖7的技術700。舉例而言,積體電路110可被用以執行圖8的技術800。
積體電路110包括第一儲存單元140以及第二儲存單元142,第一儲存單元140配置以透過L1快取150將資料寫入至記憶體系統,第二儲存單元142配置以略過L1快取150且透過L2快取152將資料寫入至記憶體系統。於某些實施方式中,第一儲存單元140是載入/儲存管線以及第二儲存單元142是只儲存管線。舉例而言,L1快取150可為L1資料快取。
積體電路110包括儲存管線選擇電路160。舉例而言,儲存管線選擇電路160可為處理器管線的發送階段的一部分,其共用在向量單元130和純量單元(圖1未示出)間。儲存管線選擇電路160可被配置以使用向量引數識別與儲存指令的第一拍相關聯的位址。舉例而言,儲存指令可被跨過或編入索引。儲存指令可被串聯化並執行於在多個時脈週期期間的多個拍中。於一些實施方式中,與儲存指令的第一拍相關聯的位址可為向量元素的目的地位址,向量元素將在儲存指令的第一拍期間被儲存。儲存管線選擇電路160可被配置為基於與儲存指令的第一拍相關聯的位址而在第一儲存單元140和第二儲存單元142之間進行選擇。例如,儲存管線選擇電路160可被配置以針對匹配與儲存指令的第一拍相關聯的位址的標籤搜索L1快取150。若找到匹配標籤,那麼儲存管線選擇電路160可回應於在L1快取150中找到匹配標籤,而選擇第一儲存單元140。若未找到匹配標籤,那麼儲存管線選擇電路160可回應於未在L1快取150中找到匹配標籤,而選擇第二儲存單元142。當使用第二儲存單元142而略過L1快取150時,這種策略可降低引發快取一致性事件(例如快取無效)的可能性。儲存管線選擇電路160可被配置以發送儲存指令至所選擇儲存單元(即第一儲存單元140或第二儲存單元142)。
舉例而言,儲存管線選擇電路160可偵測儲存指令間的相依性(例如寫後寫衝突)並基於所偵測的相依性在第一儲存單元140和第二儲存單元142間選擇。於一些實施方式中,儲存指令可為第一儲存指令,以及儲存管線選擇電路160可被配置以針對具有與第二儲存指令的目標位址匹配的目標位址的指令檢查所選擇儲存單元,並回應於針對正被匹配第二儲存指令的目標位址之所選擇儲存單元執行的第一儲存指令的目標位址,而發送第二儲存指令至所選擇儲存單元(即第一儲存單元140或第二儲存單元142)。於一些實施方式中,儲存管線選擇電路160可被配置以針對具有與第二儲存指令的目標位址匹配的目標位址的指令檢查所選擇儲存單元,並回應於針對正被匹配第二儲存指令的目標位址之所選擇儲存單元執行的第一儲存指令的目標位址,而延遲第二儲存指令的發送直到第一儲存指令的執行被完成後。
於一些實施方式中,儲存管線選擇電路160包括預測器(例如圖2的預測器電路210)。儲存管線選擇電路160可被配置以輸入與儲存指令的第一拍相關聯的位址和程式計數器值至預測器,以獲得表明第一儲存單元140還是第二儲存單元142應該用於儲存指令的預測。儲存管線選擇電路160可被配置以基於預測在第一儲存單元140和第二儲存單元142間選擇。舉例而言,預測器可儲存被程式計數器值的雜湊和目標位址編入索引的項目。舉例而言,基於快取同調協定的快取無效事件(該快取一致性協定回應於第二儲存單元142對指令的執行而使L1快取150的項目無效),預測器的項目可被更新。舉例而言,預測器的項目可儲存計數器,該計數器當儲存指令退役的時候被更新。
圖2是用於向量的載入-儲存管線選擇的預測器電路210的實例的方塊圖。預測器電路210包括預測確定電路230,其拿程式計數器值和目標位址作為輸入並輸出所得到的預測260,所得到的預測260表明對於相應的儲存指令,第一儲存單元還是第二儲存單元可能是較佳的。預測器電路210包括具有預測項目240的預測資料表。預測確定電路230可讀取來自具有預測項目240的預測資料表的一項目並使用回傳資料以產生預測260。舉例而言,具有預測項目240的預測資料表可儲存在SRAM或一些其他資料儲存電路中。在一些實施方式中,項目240由程式計數器值和目標位址的雜湊索引。舉例而言,儲存於預測資料表的項目240中的預測資料可表明使用第二儲存單元142執行相應的儲存指令以略過L1快取150導致快取無效的可能性。舉例而言,預測器電路210可被用於執行圖5的技術500。
預測器電路210包括預測更新電路250。舉例而言,預測更新電路250可被配置以基於快取同調協定的快取無效事件(其回應於第二儲存單元142對指令的執行而使L1快取150的項目無效)而更新預測器的項目。於一些實施方式中,預測資料表的項目240儲存計數器(例如,二位元飽和計數器),該計數器當儲存指令退役的時候被更新。舉例而言,在預測資料表的項目240中的計數器可以當快取無效事件發生的時候被減縮,以及當儲存指令在沒有觸發快取無效事件的情況下退役的時候被增量。
圖3是用於使用向量的載入-儲存管線選擇執行指令的技術300的實例的流程圖。技術300包括使用向量引數識別310與儲存指令的第一拍相關聯的位址;基於與儲存指令的第一拍相關聯的位址,在第一儲存單元和第二儲存單元之間選擇320,其中第一儲存單元透過L1快取介接至記憶體系統,以及第二儲存單元當存取記憶體系統時略過L1快取;以及發送330儲存指令至所選擇儲存單元。舉例而言,技術300可使用圖1的積體電路110執行。舉例而言,技術300可使用圖2的預測器210執行。
技術300包括使用向量引數識別310與儲存指令的第一拍相關聯的位址。舉例而言,儲存指令可被跨過或編入索引(例如分散指令)。儲存指令可能被串聯化並執行於在多個時脈週期期間的多個拍中。舉例而言,用以執行儲存指令的拍的數目可視向量大小、向量的元素大小、資料路徑寬度而定。於一些實施方式中,與儲存指令的第一拍相關聯的位址可為向量元素的目的地位址,其將在儲存指令的第一拍期間被儲存。雖然不保證用於所有類型的儲存指令,但是與第一拍相關聯的位址可能相似於儲存指令的隨後拍的相應位址。
技術300包括基於與儲存指令的第一拍相關聯的位址,在第一儲存單元(例如,第一儲存單元140)和第二儲存單元(例如,第二儲存單元142)之間選擇320,其中第一儲存單元透過L1快取介接至記憶體系統,以及第二儲存單元當存取記憶體系統時略過L1快取。舉例而言,第一儲存單元可為載入/儲存管線,以及第二儲存單元可為只儲存管線。於一些實施方式中,可基於檢查與儲存指令的第一拍相關聯的位址是否匹配在L1快取中的標籤而選擇320儲存單元。舉例而言,可執行圖4的技術400以在第一儲存單元和第二儲存單元之間選擇320。於一些實施方式中,可基於來自預測器的預測而選擇320儲存單元。舉例而言,可執行圖5的技術500以在第一儲存單元和第二儲存單元之間選擇320。於一些實施方式中,可基於與儲存指令的第一拍相關聯的位址是否對應於記憶體映射的輸入/輸出而選擇320儲存單元。舉例而言,可能執行圖6的技術600以在第一儲存單元和第二儲存單元之間選擇320。於一些實施方式中,可基於所偵測的儲存指令間相依性(例如寫後寫衝突)而選擇320儲存單元。舉例而言,可執行圖7的技術700以在第一儲存單元和第二儲存單元之間選擇320。於一些實施方式中,在一連串的優先檢查上。舉例而言,首先可檢查相依性,以及若相依性被偵測到,那麼相依性可以確定選擇320哪一個儲存單元。若無相依性被偵測到,那麼可以檢查位址類型以確定位址是否對應於記憶體映射的輸入/輸出,以及若位址對應於記憶體映射的輸入/輸出,那麼可基於位址類型選擇320儲存單元。若位址類型並非記憶體映射的輸入/輸出,那麼可為了與儲存指令的第一拍相關聯的位址的匹配而檢查L1快取,以及可基於在L1快取中是否有匹配而選擇320儲存單元。
技術300包括發送330儲存指令至所選擇的儲存單元。於一些實施方式中,改變發送時間以避免可能由並行地使用多個儲存單元所引起的相依性衝突。舉例而言,引起寫後寫衝突的較早儲存指令正於並行儲存單元的其中之一中執行時,可執行圖8的技術800以延遲發送330儲存指令至所選擇的儲存單元。
圖4是用於藉著針對匹配與向量指令的第一拍相關聯的位址的標籤檢查內部快取而選擇載入-儲存管線的技術400的實例的流程圖。技術400包括針對匹配與儲存指令的第一拍相關聯的位址的標籤而搜索410該L1快取。在415,若找到匹配標籤,那麼技術400包括回應於在L1快取中找到匹配標籤,而選擇420第一儲存單元(例如第一儲存單元140)。在415,若未找到匹配標籤,那麼技術400包括回應於未在L1快取中找到匹配標籤,而選擇430第二儲存單元(例如第二儲存單元142)。當使用第二儲存單元而略過L1快取的時候,技術400可降低引發快取一致性事件(例如快取無效)的可能性。舉例而言,可使用圖1的積體電路110執行技術400。
圖5是用於使用預測器來選擇載入-儲存管線的技術500的實例的流程圖。技術500包括輸入510與儲存指令的第一拍相關聯的位址以及程式計數器值至一預測器,以獲得表明第一儲存單元還是第二儲存單元應該用於儲存指令的預測;以及基於預測在第一儲存單元和第二儲存單元之間選擇520。舉例而言,可能使用圖1的積體電路110執行技術500。舉例而言,可能使用圖2的預測器電路210執行技術500。
技術500包括輸入510與儲存指令的第一拍相關聯的位址以及程式計數器值至一預測器(例如預測器電路210),以獲得指明第一儲存單元還是第二儲存單元應該用於儲存指令的預測。舉例而言,與儲存指令的第一拍相關聯的位址可為向量元素的目標位址,其將在第一拍期間被儲存。舉例而言,預測器可儲存藉著程式計數器值的雜湊和目標位址被編入索引的項目。於一些實施方式中,預測器的項目可儲存計數器(例如二位元飽和計數器),該計數器可基於與項目相關聯的儲存指令是否引起快取無效發生而被更新。舉例而言,預測器的項目是基於快取同調協定的快取無效事件(其回應於第二儲存單元對指令的執行而使L1快取的項目無效)而被更新(例如減縮)。舉例而言,預測器的項目可儲存當儲存指令退役時被更新(例如增量)的計數器。於一些實施方式中,若在預測器狀態中沒有儲存指令的匹配項目,預設預測(例如,表明第二儲存單元應該被選擇)被回傳。
技術500包括基於預測在第一儲存單元和第二儲存單元間選擇520。舉例而言,預測器所輸出的預測可為識別哪一個儲存單元應該被選擇520的二進位旗標。於另一實例中,預測器所輸出的預測可為儲存於預測器的項目中的計數器的值,其可能表明對於儲存指令略過L1快取的可能性將引起快取無效事件。於一些實施方式中,若儲存於預測器的對應項目中的計數器值低於臨界值,則第一儲存單元被選擇520,以及若儲存於預測器的對應項目中的計數器值高於臨界值,則第二儲存單元被選擇520。
圖6是用於基於位址是否被映射至輸入/輸出而選擇載入-儲存管線的技術600的實例的流程圖。經由L1快取(例如L1快取150)路由至記憶體映射的輸入/輸出的寫入可為有利的。技術600包括檢查610與儲存指令的第一拍相關聯的位址是否對應於記憶體映射的輸入/輸出;以及回應於確定與儲存指令的第一拍相關聯的位址對應於記憶體映射的輸入/輸出,而選擇620第一儲存單元。舉例而言,在記憶體系統(例如外部記憶體系統154)中的一些位址範圍可能與記憶體映射的輸入/輸出(例如序列埠的位址)相關聯。舉例而言,可能使用圖1的積體電路110執行技術600。
指令間的相依性(其可能包括寫後寫(WAW)衝突或讀後寫(WAR)衝突)可能損害並行地使用兩個儲存單位的系統的性能。防止此問題的一個解決方法是偵測相依性並強制較晚寫入指令被發送至與較早指令相同的單元以至於較晚指令在先進先出(FIFO)佇列中的較早指令後被執行。防止此問題的另一解決方法是偵測相依性並延遲較晚寫入指令的發送直到較早指令完成執行且接著基於其他準則針對較晚寫入指令選擇執行單元。圖7和圖8描述兩個這樣的解決方法。
圖7是用於基於在載入-儲存管線中的匹配標籤位址而選擇載入-儲存管線的技術700的實例的流程圖。技術700包括針對具有與第二儲存指令的目標位址匹配的目標位址的指令檢查710所選擇儲存單元。舉例而言,在程式次序中,第二儲存指令可在第一儲存指令之後。所選擇儲存單元可在第一指令已被發送後被檢查710,同時它在所選擇儲存單元中仍在執行或等待被執行。舉例而言,所選擇儲存單元(例如第一儲存單元140或第二儲存單元142)可包括指令的FIFO佇列,FIFO佇列為執行已被發送。技術700包括回應於正被匹配第二儲存指令的目標位址之所選擇儲存單元執行的第一儲存指令的目標位址,而發送720第二儲存指令至所選擇儲存單元。發送720第二儲存指令至所選擇儲存單元可用來防止第二儲存指令於第一儲存指令前被執行,而因此避免寫後寫衝突。舉例而言,可使用圖1的積體電路110執行技術700。
圖8是用於基於在載入-儲存管線中的匹配標籤位址而延遲指令發送的技術800的實例的流程圖。技術800包括針對具有與第二儲存指令的目標位址匹配的目標位址的指令檢查810所選擇儲存單元。舉例而言,在程式次序中,第二儲存指令可在第一儲存指令之後。所選擇儲存單元可在第一儲存指令已被發送後被檢查810,同時它在所選擇儲存單元中仍在執行或等待被執行。舉例而言,所選擇儲存單元(例如第一儲存單元140或第二儲存單元142)可包括指令的FIFO佇列,FIFO佇列為執行已被發送。技術800包括回應於正被匹配第二儲存指令的目標位址之所選擇儲存單元執行的第一儲存指令的目標位址,而延遲820第二儲存指令的發送直到第一儲存指令的執行被完成後。延遲820第二儲存指令至所選擇儲存單元的發送可用來防止第二儲存指令被執行於第一儲存指令前而因此避免寫後寫衝突,同時允許第二寫入指令被發送至基於其他考量(例如,與第二寫入指令的第一拍相關聯的位址是否匹配在L1快取中的標籤或基於與第二寫入指令相關聯的預測)而偏好的儲存單元。 舉例而言,可能使用圖1的積體電路110執行技術800。
圖9是用於積體電路的產生及製造的系統900的實例的方塊圖。系統900包括網路906、積體電路設計服務基礎設施910、現場可程式邏輯閘陣列(FPGA)/模擬伺服器920、以及製造商伺服器930。舉例而言,使用者可使用網路客戶端或腳本API客戶端以命令積體電路設計服務基礎設施910自動基於使用者針對一或多個模板積體電路設計選擇的一組設計參數值產生積體電路設計。於一些實施方式中,積體電路設計服務基礎設施可被配置以產生包括圖1或圖2所示及所述的電路的積體電路設計。
積體電路設計服務基礎設施910可包括暫存器轉移層次(RTL)服務模組,其被配置以基於設計參數資料結構產生積體電路的RTL資料結構。舉例而言,RTL服務模組可能被以Scala程式碼執行。舉例而言,RTL服務模組可使用Chisel被執行。舉例而言,RTL服務模組可使用暫存器轉移層次的靈活中間表示(FIRRTL)及/或FIRRTL編譯器被執行。舉例而言,RTL服務模組可使用Diplomacy被執行。舉例而言,RTL服務模組可使良好設計的晶片能夠使用Diplomacy、Chisel、以及FIRRTL的混合自動從組態設定的高階集合開發。RTL服務模組可將設計參數資料結構(例如,Java腳本物件表示法(JSON)檔案)作為輸入及輸出晶片的RTL資料結構(例如,Verilog檔案)。
於一些實施方式中,積體電路設計服務基礎設施910可(例如,透過網路906上的網路通訊)調用正運行一或多個FPGA或其他種類的硬體或軟體模擬器的FPGA/模擬伺服器920所實行的所造成設計的測試。舉例而言,積體電路設計服務基礎設施910可使用現場可程式閘陣列來調用測試,該現場可程式閘陣列是基於現場可程式閘陣列模擬資料結構編程,以獲得模擬結果。現場可程式閘陣列可於FPGA/模擬伺服器920(其可為雲端伺服器)上運行。測試結果可被FPGA/模擬伺服器920回傳到積體電路設計服務基礎設施910,並以有用格式(例如,透過網路客戶端或腳本API客戶端)轉發到使用者。
積體電路設計服務基礎設施910亦可使用與製造商伺服器930相關聯的製造設施中的積體電路設計來促進積體電路製造。於一些實施方式中,基於積體電路的實體設計資料結構的實體設計規格(例如,圖形資料系統(GDS)檔案,像是GDSII檔案)被傳送至製造商伺服器930以(例如,使用相關製造商的製造設備)調用積體電路的製造。舉例而言,製造商伺服器930可託管被配置以接收實體設計規格(例如,GDSII檔案或開放原圖系統互換標準(OASIS)檔案)的晶圓代工廠下線網站,以排程或以其他方式促進積體電路的製造。於一些實施方式中,積體電路設計服務基礎設施910支援多租戶以讓(例如,來自一或更多個使用者的)多個積體電路設計分擔製造的固定成本(例如,網線/光罩產生及/或穿梭晶圓測試(shuttles wafer test))。舉例而言,積體電路設計服務基礎設施910可使用固定封裝(例如準標準化封裝),其被定義為降低固定成本和促進網線/光罩、晶圓測試、以及其他固定製造成本的分擔。舉例而言,為了促進多租戶製造,實體設計規格可包括來自一或更多個各自實體設計資料結構的一或更多個實體設計。
回應於實體設計規格的傳送,與製造商伺服器930相關聯的製造商可基於積體電路設計製造及/或測試積體電路。舉例而言,相關聯的製造商(例如,晶圓代工廠)可能實行光學接近修正(OPC)和相似的下線後/生產前加工、製造一或多個積體電路932、(例如,透過與控制器或網路應用伺服器的通訊)週期性地或異步地針對製造過程狀態更新積體電路設計服務基礎設施910、實行合適測試(例如,晶圓測試)、以及發送至封裝廠以封裝。封裝廠可接收來自製造商和測試材料的完成晶圓或晶粒並週期性地或異步地針對封裝和遞送過程狀態更新積體電路設計服務基礎設施910。於一些實施方式中,當使用者使用網路介面登記的時候,狀態更新可被轉發至使用者,及/或控制器可以電子郵件通知使用者有可用更新。
於一些實施方式中,最終的積體電路932(例如實體晶片)被(透過電郵)傳送至與矽測試伺服器940相關聯的矽測試服務提供者。於一些實施方式中,最終的積體電路932(例如,實體晶片)被安裝於矽測試伺服器940(例如,雲端伺服器)所控制的系統中,讓其可使用網路通訊快速存取而被遠端執行且測試以控制積體電路932的操作。舉例而言,向控制所製造的積體電路932的矽測試伺服器940的登入可被發送至積體電路設計服務基礎設施910並(例如透過網路客戶端)轉發給使用者。舉例而言,積體電路設計服務基礎設施910可控制可基於RTL資料結構被建構的一或更多積體電路932的測試。
圖10是用於促進積體電路的產生、用於促進積體電路的電路表示的產生、及/或用於編程或製造積體電路的系統1000的實例的方塊圖。系統1000是計算裝置的內部配置的實例。系統1000可被用以執行積體電路設計服務基礎設施910及/或產生檔案,該檔案產生包括如圖1或圖2所示和所描述的電路的積體電路設計的電路表示。系統1000可以包括元件或單元,例如,處理器1002、匯流排1004、記憶體1006、週邊設備1014、電源1016、網路通訊介面1018、使用者介面、其他合適的元件或其組合。
處理器1002可以是中央處理單元(CPU),例如微處理器,以及可以包括具有單顆或多顆處理核心的單個或多個處理器。或者,處理器1002可以包括現存或之後開發的、有能力操作或處理資訊的另一種類型的 一個裝置或多個裝置。舉例而言,處理器1002可以包括以任何方式(包括有線連接或網路方式(其包括無線網路的方式))互相連接的多個處理器。於一些實施方式中,處理器1002的操作可以被分散在多個實體裝置或單元上,該多個實體裝置或單元可以直接耦接或在區域網路或其他合適種類的網路上耦接。於一些實施方式中,處理器1002可以包括快取、或快取記憶體,以用於操作資料或指令的局部儲存。
記憶體1006可以包括揮發性記憶體、非揮發性記憶體、或其組合。舉例而言,記憶體1006可以包括揮發性記憶體,例如,一或更多個DRAM模組(例如雙倍資料速率(DDR))同步動態隨機存取記憶體(SDRAM);以及非揮發性記憶體,例如磁碟機、固態硬碟、快閃記憶體、相變化記憶體(PCM)、或有持久電子資訊儲存能力的任何形式(例如在沒有主動電源供應的情況下)的非揮發性記憶體。記憶體1006可以包括現存或之後開發的、有能力儲存資料或指令以供處理器1002處理的另一種類型的裝置或多個裝置。處理器1002可以透過匯排流1004存取或操作在記憶體1006中的資料。雖然在圖10中顯示為單一方塊,記憶體1006可以被實施為多個單元。舉例而言,系統1000可以包括揮發性記憶體(例如RAM)以及永久性記憶體(例如硬碟或其他儲存裝置)。
記憶體1006可以包括可執行指令1008、資料(例如應用程式資料1010)、作業系統1012、或其組合,以被處理器1002立即存取。可執行指令1008可以包括例如一或更多個應用程式,其可以從非揮發性記憶體至揮發性記憶體整體或部分地被載入或複製,以被處理器1002執行。可執行指令1008可以被組織成可程式化模組或演算法、功能程式、程式碼、碼段、或其組合以實行於此所述的多種功能。舉例而言,可執行指令1008可以包括可由處理器1002執行以使系統1000回應於命令而自動地產生積體電路設計及基於設計參數資料結構的相關聯測試結果的指令。應用資料1010可以包括例如使用者檔案、資料庫目錄或字典、配置資訊或功能程式,例如,網頁瀏覽器、網頁伺服器、資料庫伺服器、或其組合。作業系統1012可以是,舉例而言,Microsoft Windows®、macOS®、或Linux®;小型裝置(例如,智慧型手機或平板電腦)的作業系統;或用於大型裝置(例如大型電腦)的作業系統。記憶體1006可以包括一或更多個裝置以及可以使用一或更多種類型的儲存裝置,例如,固態或磁儲存裝置。
週邊設備1014可以透過匯排線1004耦接至處理器1002。週邊設備1014可以是感測器或偵測器、或包含任何數目的感測器或偵測器的裝置,其可以監測系統1000本身或在系統1000附近的環境。舉例而言,系統1000可以包含用以量測系統1000的元件(例如處理器1002)的溫度的溫度感測器。如可預期地,其他感測器或偵測器可以配合系統使用。於一些實施方式中,電源1016可以是電池以及系統可以獨立於外部電源分配系統操作。系統1000的元件的其中任何一個,例如週邊設備1014或電源1016,可以透過匯排流1004與處理器1002通訊。
網路通訊介面1018亦可以透過匯排流1004耦接至處理器1002。於一些實施方式中,網路通訊介面1018可以包括一或更多個收發器。舉例而言,網路通訊介面1018可以透過網路介面(其可以是有線網路介面(例如乙太網)或無線網路介面)提供至網路的連接或鏈路,例如,圖9所示的網路906。舉例而言,系統1000可以透過網路通訊介面1018以及使用一或多個網路協定的網路介面與其他裝置通訊,例如乙太網路、傳輸控制協定(TCP)、網際網路協定(IP)、電力線通訊(PLC)、無線相容性(Wi-Fi)、紅外線、通用封包無線電服務(GPRS)、全球行動通訊系統(GSM)、分碼多重存取(CDMA)、或其他合適的協定。
使用者介面1020可以包括顯示器;定位輸入裝置,例如,滑鼠、觸控板、觸控螢幕、或諸如此類;鍵盤;或其他合適的人類或機器介面裝置。使用者介面1020可以透過匯流排1004被耦接至處理器1002。除了顯示器之外或作為其替代,可以提供讓使用者編程或以其他方式使用系統1000的其他介面裝置。於一些實施方式中,使用者介面1020可以包括顯示器,其可以是液晶顯示器(LCD)、陰極射線管(CRT)、發光二極體(LED)顯示器(例如,有機發光二極體(OLED)顯示器)、或其他合適的顯示器。於一些實施方式中,客戶端或伺服器可以省略週邊設備1014。處理器1002的操作可能分散在多個客戶端或伺服器上,這些客戶端或伺服器可以被直接耦接或在區域網路或其他合適種類的網路上被耦接。記憶體1006可以分散在多個客戶端或伺服器上,例如,基於網路的記憶體或執行客戶端或伺服器的操作的多個客戶端或伺服器中的記憶體。雖然於此所述為單一匯流排,匯流排1004可能由多個可以透過多種橋接器、控制器、或配接器彼此連接的匯流排組成。
當被電腦處理時,非暫態電腦可讀取媒體可儲存電路表示,該電路表示被用以編程或製造積體電路。舉例而言,電路表示可能描述使用電腦可讀取語法指定的積體電路。電腦可讀取語法可具體指定積體電路的架構或功能或其組合。於一些實施方式中,電路表示可能採取硬體描述語言(HDL)程式、暫存器轉移層次(RTL)資料結構、暫存器轉移層次的靈活中間表示(FIRRTL)資料結構、圖形設計系統II(GDSII)資料結構、網路連線表、或其組合的形式。於一些實施方式中,積體電路可能採取現場可程式閘陣列(FPGA)、特殊應用積體電路(ASIC)、單晶片系統(SoC)、或其某些組合的形式。電腦可為了編程或製造積體電路而處理電路表示,其可包括編程現場可程式閘陣列(FPGA)或製造特殊應用積體電路(ASIC)或單晶片系統(SoC)。於一些實施方式中,當被電腦處理的時候,電路表示可包括檔案,該檔案可產生積體電路的新描述。舉例而言,電路表示能以例如Chisel(嵌入Scala的HDL,Scala是支援物件導向編程和功能編程兩者的靜態類型通用目的程式語言)的語言編寫。
於一實例中,電路表示可為Chisel語言程式,其可被電腦執行以產生以FIRRTL資料結構表示的電路表示。於一些實施方式中,處理步驟的設計流程可被用以將電路表示處理成一或更多個中間電路表示,隨後為接著被用以編程或製造積體電路的最終電路表示。於一實例中,Chisel程式形式的電路表示可被儲存於非暫態電腦可讀取媒體上以及可被電腦處理以產生FIRRTL電路表示。該FIRRTL電路表示可被電腦處理以產生RTL電路表示。該RTL電路表示可被電腦處理以產生網路連線表電路表示。該網路連線表電路表示可被電腦處理以產生GDSII電路表示。該GDSII電路表示可被電腦處理以產生積體電路。
於另一實例中,Verilog或VHDL形式的電路表示可被儲存於非暫態電腦可讀取媒體上以及可被電腦處理以產生RTL電路表示。該RTL電路表示可被電腦處理以產生網路連接表電路表示。該網路連接表電路表示可被電腦處理以產生GDSII電路表示。該GDSII電路表示可被電腦處理以產生積體電路。視實施方式而定,前述步驟可能被相同電腦、不同電腦、或其某些組合執行。
於第一態樣中,此說明書所述標的可以體現於用於執行指令的積體電路,其包括配置以執行操作於向量引數的向量指令的處理器核心;L1快取,提供至積體電路的記憶體系統的介面;連接至L1快取的L2快取,其與L1快取執行快取同調協定;配置以透過L1快取將資料寫入至記憶體系統的第一儲存單元;配置以略過L1快取及透過L2快取將資料寫入至記憶體系統的第二儲存單元;以及儲存管線選擇電路,其配置以﹕使用向量引數識別與儲存指令的第一拍相關聯的位址;基於與儲存指令的第一拍相關聯的位址,在第一儲存單元和第二儲存單元之間選擇;以及發送儲存指令至所選擇儲存單元。
於第一態樣中,儲存管線選擇電路可被配置以針對匹配與儲存指令的第一拍相關聯的位址的標籤而搜索L1快取;以及回應於在L1快取中找到匹配標籤,而選擇第一儲存單元。於第一態樣中,儲存管線選擇電路可被配置以針對匹配與儲存指令的第一拍相關聯的位址的標籤而搜索L1快取;以及回應於未在L1快取中找到匹配標籤,而選擇第二儲存單元。於第一態樣中,儲存指令可為第一儲存指令以及儲存管線選擇電路可被配置以針對具有與第二儲存指令的目標位址匹配的目標位址的指令而檢查所選擇儲存單元,並回應於針對正被匹配第二儲存指令的目標位址之所選擇儲存單元執行的第一儲存指令的目標位址,而發送第二儲存指令至所選擇儲存單元。於第一態樣中,儲存指令可為第一儲存指令以及儲存管線選擇電路可被配置以針對具有與第二儲存指令的目標位址匹配的目標位址的指令而檢查所選擇儲存單元,並回應於針對正被匹配第二儲存指令的目標位址之所選擇儲存單元執行的第一儲存指令的目標位址,而延遲第二儲存指令的發送直到第一儲存指令的執行被完成後。於第一態樣中,第一儲存單元可為載入/儲存管線以及第二儲存單元可為只儲存管線。於第一態樣中,儲存管線選擇電路可包括預測器且儲存管線選擇電路可被配置以輸入與儲存指令的第一拍相關聯的位址和程式計數器值至預測器,以獲得表明第一儲存單元還是第二儲存單元應該用於儲存指令的預測;以及基於預測在第一儲存單元和第二儲存單元之間選擇。舉例而言,預測器可儲存被程式計數器值的雜湊和目標位址編入索引的項目。於一些實施方式中,基於快取同調協定的快取無效事件(其回應於第二儲存單元對指令的執行使L1快取的項目無效),預測器的項目可被更新。舉例而言,預測器的項目可能儲存計數器,當儲存指令退役時該計數器被更新。於第一態樣中,儲存管線選擇電路可被配置以檢查與儲存指令的第一拍相關聯的位址是否對應於記憶體映射的輸入/輸出;以及回應於確定與儲存指令的第一拍相關聯的位址對應於記憶體映射的輸入/輸出,而選擇第一儲存單元。
於第二態樣中,此說明書所述標的可以體現於方法,其包括以向量引數識別與儲存指令的第一拍相關聯的位址;基於與儲存指令的第一拍相關聯的位址,在第一儲存單元和第二儲存指令之間選擇,其中第一儲存單元透過L1快取介接至記憶體系統,以及第二儲存單元當存取記憶體系統時,略過L1快取;以及發送儲存指令至所選擇儲存單元。
於第二態樣中,方法可包括針對匹配與儲存指令的第一拍相關聯的位址的標籤而搜索L1快取;以及回應於在該L1快取中找到匹配標籤,而選擇第一儲存單元。於第二態樣中,方法可包括針對匹配與儲存指令的第一拍相關聯的位址的標籤而搜索L1快取;以及回應於未在L1快取中找到匹配標籤,而選擇第二儲存單元。於第二態樣中,儲存指令可為第一儲存指令以及方法可包括針對具有與第二儲存指令的目標位址匹配的目標位址的指令而檢查所選擇儲存單元;以及回應於針對正被匹配第二儲存指令的目標位址之所選擇儲存單元執行的第一儲存指令的目標位址,而發送第二儲存指令至所選擇儲存單元。於第二態樣中,儲存指令可為第一儲存指令以及方法可包括針對具有與第二儲存指令的目標位址匹配的目標位址的指令而檢查所選擇儲存單元;以及回應於針對正被匹配第二儲存指令的目標位址之所選擇儲存單元執行的第一儲存指令的目標位址,而延遲第二儲存指令的發送直到第一儲存指令的執行被完成後。於第二態樣中,第一儲存單元可為載入/儲存管線以及第二儲存單元可為只儲存管線。於第二態樣中,方法可包括輸入與儲存指令的第一拍相關聯的位址和程式計數器值至預測器,以獲得表明第一儲存單元還是第二儲存單元應該用於儲存指令的預測;以及基於預測在第一儲存單元和第二儲存單元之間選擇。舉例而言,預測器可儲存被程式計數器值的雜湊和目標位址編入索引的項目。於一些實施方式中,基於快取同調協定的快取無效事件(其回應於第二儲存單元對指令的執行而使L1快取的項目無效),預測器的項目可被更新。於一些實施方式中,預測器的項目可儲存計數器,當儲存指令退役時該計數器被更新。於第二態樣中,方法可包括檢查與儲存指令的第一拍相關聯的位址是否對應於記憶體映射的輸入/輸出;以及回應於確定與儲存指令的第一拍相關聯的位址對應於記憶體映射的輸入/輸出,而選擇第一儲存單元。
儘管本揭露內容已結合某些實施例被描述,應當理解,本揭露內容不限制於被揭露的實施例,相反地,旨在涵蓋所附申請專利範圍的範疇內包含的各種修改以及均等設置,其範疇應給予最廣解釋以至於包含所有這類的修改及均等結構。
110:積體電路
120:處理器核心
130:向量單元
132:向量暫存器檔案
140:第一儲存單元
142:第二儲存單元
150:L1快取
152:L2快取
154:外部記憶體系統
160:儲存管線選擇電路
210:預測器電路
230:預測確定電路
240:預測項目
250:預測更新電路
260:預測
300、400、500、600、700、800:技術
900、1000:系統
906:網路
910:積體電路設計服務基礎設施
920:現場可程式邏輯閘陣列(FPGA)/模擬伺服器
930:製造商伺服器
1002:處理器
1004:匯流排
1006:記憶體
1008:可執行指令
1010:積體電路設計服務基礎設施
1012:作業系統
1014:週邊設備
1016:電源
1018:網路通訊介面
1020:使用者介面
當結合所附圖式閱讀時,本揭露內容藉由下列詳細說明被最佳理解。根據一般實務,應強調圖式的各種特徵不是按照比例的。相反的,各種特徵的尺度為了清晰被任意延伸或縮小。
圖1是用於使用向量的載入-儲存管線選擇來執行指令的積體電路的實例的方塊圖。
圖2是用於向量的載入-儲存管線選擇的預測器電路的實例的方塊圖。
圖3是用於使用向量的載入-儲存管線選擇來執行指令的技術的實例的流程圖。
圖4是用於藉著檢查對於匹配與向量指令的第一拍相關聯的位址的標籤的內部快取來選擇向量的載入-儲存管線的技術的實例的流程圖。
圖5是用於使用預測器選擇載入-儲存管線的技術的實例的流程圖。
圖6是用於基於位址是否被映射至輸入/輸出而選擇載入-儲存管線的技術的實例的流程圖。
圖7是用於基於在載入-儲存管線中的匹配目標位址而選擇載入-儲存管線的技術的實例的流程圖。
圖8是用於基於在載入-儲存管線中的匹配目標位址而延遲指令發送的技術的實例的流程圖。
圖9是用於促進積體電路的產生及製造的系統的實例的方塊圖。
圖10是用於促進積體電路的產生的系統的實例的方塊圖。
110:積體電路
120:處理器核心
130:向量單元
132:向量暫存器檔案
140:第一儲存單元
142:第二儲存單元
150:L1快取
152:L2快取
154:外部記憶體系統
160:儲存管線選擇電路
Claims (22)
- 一種用於向量載入-儲存管線選擇的積體電路,包括: 一處理器核心,配置以執行針對向量引數進行操作的向量指令; 一L1快取,提供至該積體電路的一記憶體系統的一介面; 連接至該L1快取的一L2快取,該L2快取與該L1快取執行一快取同調協定; 一第一儲存單元,配置以透過該L1快取將資料寫入至該記憶體系統; 一第二儲存單元,配置以略過該L1快取及透過該L2快取將資料寫入至該記憶體系統;以及 一儲存管線選擇電路,配置以﹕ 使用一向量引數識別與一儲存指令的一第一拍相關聯的一位址; 基於與該儲存指令的該第一拍相關聯的該位址,在該第一儲存單元和該第二儲存單元之間選擇;以及 發送該儲存指令至所選擇儲存單元。
- 如請求項1所述的積體電路,其中該儲存管線選擇電路配置以﹕ 針對匹配與該儲存指令的該第一拍相關聯的該位址的一標籤而搜索該L1快取;以及 回應於在該L1快取中找到一匹配標籤,而選擇該第一儲存單元。
- 如請求項1所述的積體電路,其中該儲存管線選擇電路配置以﹕ 針對匹配與該儲存指令的該第一拍相關聯的該位址的一標籤而搜索該L1快取;以及 回應於未在該L1快取中找到一匹配標籤,而選擇該第二儲存單元。
- 如請求項1所述的積體電路,其中該儲存指令是一第一儲存指令以及該儲存管線選擇電路配置以﹕ 針對具有與一第二儲存指令的一目標位址匹配的一目標位址的一指令而檢查所選擇儲存單元;以及 回應於針對正被匹配該第二儲存指令的該目標位址之所選擇儲存單元執行的該第一儲存指令的一目標位址,而發送該第二儲存指令至所選擇儲存單元。
- 如請求項1所述的積體電路,其中該儲存指令是一第一儲存指令以及該儲存管線選擇電路配置以﹕ 針對具有與一第二儲存指令的一目標位址匹配的一目標位址的一指令而檢查所選擇儲存單元;以及 回應於針對正被匹配該第二儲存指令的該目標位址之所選擇儲存單元執行的該第一儲存指令的一目標位址,而延遲該第二儲存指令的發送直到該第一儲存指令的執行被完成後。
- 如請求項1所述的積體電路,其中該第一儲存單元是一載入/儲存管線以及該第二儲存單元是一只儲存管線。
- 如請求項1所述的積體電路,其中該儲存管線選擇電路包括一預測器以及該儲存管線選擇電路配置以﹕ 輸入與該儲存指令的該第一拍相關聯的該位址和一程式計數器值至該預測器,以獲得表明該第一儲存單元還是該第二儲存單元應該用於該儲存指令的一預測;以及 基於該預測在該第一儲存單元和該第二儲存單元之間選擇。
- 如請求項7所述的積體電路,其中該預測器儲存被一程式計數器值的一雜湊和一目標位址編入索引的項目。
- 如請求項7所述的積體電路,其中基於該快取同調協定的一快取無效事件,該預測器的一項目被更新,該快取一致性協定回應於該第二儲存單元對一指令的執行而使該L1快取的一項目無效。
- 如請求項7所述的積體電路,其中該預測器的一項目儲存一計數器,當儲存指令退役時該計數器被更新。
- 如請求項1所述的積體電路,其中該儲存管線選擇電路配置以﹕ 檢查與該儲存指令的該第一拍相關聯的該位址是否對應於記憶體映射的輸入/輸出;以及 回應於確定與該儲存指令的該第一拍相關聯的該位址對應於記憶體映射的輸入/輸出,而選擇該第一儲存單元。
- 一種用於向量載入-儲存管線選擇的方法,包括﹕ 以一向量引數識別與一儲存指令的一第一拍相關聯的一位址; 基於與該儲存指令的該第一拍相關聯的該位址,在一第一儲存單元和一第二儲存單元之間選擇,其中該第一儲存單元透過一L1快取介接至一記憶體系統,以及該第二儲存單元當存取該記憶體系統時,略過該L1快取;以及 發送該儲存指令至所選擇儲存單元。
- 如請求項12所述的方法,包括﹕ 針對匹配與該儲存指令的該第一拍相關聯的該位址的一標籤而搜索該L1快取;以及 回應於在該L1快取中找到一匹配標籤,而選擇該第一儲存單元。
- 如請求項12所述的方法,包括﹕ 針對匹配與該儲存指令的該第一拍相關聯的該位址的一標籤而搜索該L1快取;以及 回應於未在該L1快取中找到一匹配標籤,而選擇該第二儲存單元。
- 如請求項12所述的方法,其中該儲存指令是一第一儲存指令,該方法包括﹕ 針對具有與一第二儲存指令的一目標位址匹配的一目標位址的一指令而檢查所選擇儲存單元;以及 回應於針對正被匹配該第二儲存指令的該目標位址之所選擇儲存單元執行的該第一儲存指令的一目標位址,而發送該第二儲存指令至所選擇儲存單元。
- 如請求項12所述的方法,其中該儲存指令是一第一儲存指令,包括﹕ 針對具有與一第二儲存指令的一目標位址匹配的一目標位址的一指令而檢查所選擇儲存單元;以及 回應於針對正被匹配該第二儲存指令的該目標位址之所選擇儲存單元執行的該第一儲存指令的一目標位址,而延遲該第二儲存指令的發送直到該第一儲存指令的執行被完成後。
- 如請求項12所述的方法,其中該第一儲存單元是一載入/儲存管線以及該第二儲存單元是一只儲存管線。
- 如請求項12所述的方法,包括﹕ 輸入與該儲存指令的該第一拍相關聯的該位址和一程式計數器值至一預測器,以獲得表明該第一儲存單元還是該第二儲存單元應該用於該儲存指令的一預測;以及 基於該預測在該第一儲存單元和該第二儲存單元之間選擇。
- 如請求項18所述的方法,其中該預測器儲存被一程式計數器值的一雜湊和一目標位址編入索引的項目。
- 如請求項18所述的方法,其中基於一快取同調協定的一快取無效事件,該預測器的一項目被更新,該快取一致性協定回應於該第二儲存單元對一指令的執行而使該L1快取的一項目無效。
- 如請求項18所述的方法,其中該預測器的一項目儲存一計數器,當該儲存指令退役時該計數器被更新。
- 如請求項12所述的方法,包括﹕ 檢查與該儲存指令的該第一拍相關聯的位址是否對應於記憶體映射的輸入/輸出;以及 回應於確定與該儲存指令的該第一拍相關聯的該位址對應於記憶體映射的輸入/輸出,而選擇該第一儲存單元。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US202263341051P | 2022-05-12 | 2022-05-12 | |
| US63/341,051 | 2022-05-12 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW202344986A TW202344986A (zh) | 2023-11-16 |
| TWI882324B true TWI882324B (zh) | 2025-05-01 |
Family
ID=88666878
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW112115841A TWI882324B (zh) | 2022-05-12 | 2023-04-27 | 用於向量載入-儲存管線選擇的積體電路及方法 |
Country Status (3)
| Country | Link |
|---|---|
| US (1) | US12086067B2 (zh) |
| CN (1) | CN117056242B (zh) |
| TW (1) | TWI882324B (zh) |
Families Citing this family (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20240103897A1 (en) * | 2022-09-27 | 2024-03-28 | Advanced Micro Devices, Inc. | Diversified virtual memory |
| US20250306799A1 (en) * | 2024-03-28 | 2025-10-02 | Advanced Micro Devices, Inc. | Low latency scratch memory path |
Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| TW202121169A (zh) * | 2016-12-31 | 2021-06-01 | 美商英特爾股份有限公司 | 用於異質計算之系統,方法,及設備 |
| TW202122993A (zh) * | 2019-08-13 | 2021-06-16 | 埃利亞德 希勒爾 | 記憶體式處理器 |
| TW202123253A (zh) * | 2017-04-28 | 2021-06-16 | 美商英特爾股份有限公司 | 用以針對機器學習執行浮點及整數運算之指令及邏輯 |
Family Cites Families (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP3435267B2 (ja) * | 1995-11-07 | 2003-08-11 | 株式会社東芝 | マイクロプロセッサ及びそのロードアドレス予想方法 |
| KR100486240B1 (ko) * | 1998-09-21 | 2005-06-08 | 삼성전자주식회사 | 분리된 캐쉬 메모리를 구비한 마이크로프로세서 및 메모리 액세스 방법 |
| US20060236033A1 (en) * | 2005-04-18 | 2006-10-19 | Dell Products L.P. | System and method for the implementation of an adaptive cache policy in a storage controller |
| US8904153B2 (en) * | 2010-09-07 | 2014-12-02 | International Business Machines Corporation | Vector loads with multiple vector elements from a same cache line in a scattered load operation |
| US20130262780A1 (en) * | 2012-03-30 | 2013-10-03 | Srilatha Manne | Apparatus and Method for Fast Cache Shutdown |
| CN105446777B (zh) * | 2015-11-18 | 2019-06-04 | 上海兆芯集成电路有限公司 | 高速缓存行的非对齐加载指令的推测并行执行方法 |
| US10261791B2 (en) * | 2017-02-24 | 2019-04-16 | International Business Machines Corporation | Bypassing memory access for a load instruction using instruction address mapping |
-
2023
- 2023-04-27 TW TW112115841A patent/TWI882324B/zh active
- 2023-04-30 US US18/141,463 patent/US12086067B2/en active Active
- 2023-05-11 CN CN202310531204.7A patent/CN117056242B/zh active Active
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| TW202121169A (zh) * | 2016-12-31 | 2021-06-01 | 美商英特爾股份有限公司 | 用於異質計算之系統,方法,及設備 |
| TW202123253A (zh) * | 2017-04-28 | 2021-06-16 | 美商英特爾股份有限公司 | 用以針對機器學習執行浮點及整數運算之指令及邏輯 |
| TW202141513A (zh) * | 2017-04-28 | 2021-11-01 | 美商英特爾股份有限公司 | 用以針對機器學習執行浮點及整數運算之指令及邏輯 |
| TW202122993A (zh) * | 2019-08-13 | 2021-06-16 | 埃利亞德 希勒爾 | 記憶體式處理器 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN117056242A (zh) | 2023-11-14 |
| US12086067B2 (en) | 2024-09-10 |
| CN117056242B (zh) | 2025-10-14 |
| TW202344986A (zh) | 2023-11-16 |
| US20230367715A1 (en) | 2023-11-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US20230367599A1 (en) | Vector Gather with a Narrow Datapath | |
| TWI882324B (zh) | 用於向量載入-儲存管線選擇的積體電路及方法 | |
| US20240338321A1 (en) | Store-to-load forwarding for processor pipelines | |
| US20240184581A1 (en) | Bit pattern matching hardware prefetcher | |
| US12430132B2 (en) | Technologies for interconnect address remapper with event recognition and register management | |
| US20250251935A1 (en) | Using renamed registers to support multiple vset{i}vl{i} instructions | |
| US20240338219A1 (en) | Configuring a prefetcher associated with a processor core | |
| US20230333861A1 (en) | Configuring a component of a processor core based on an attribute of an operating system process | |
| US12367154B2 (en) | Logging guest physical address for memory access faults | |
| US12210874B2 (en) | Processing for vector load or store micro-operation with inactive mask elements | |
| US12314718B2 (en) | Stalling issue queue entries until consecutive allocated entries are available for segmented stores | |
| US12223323B2 (en) | Out-of-order vector iota calculations | |
| US12373210B2 (en) | Transfer buffer between a scalar pipeline and vector pipeline | |
| US12204458B1 (en) | Translation lookaside buffer probing prevention | |
| US12265829B2 (en) | Re-triggering wake-up to handle time skew between scalar and vector sides | |
| US12367047B2 (en) | Debug trace circuitry configured to generate a record including an address pair and a counter value | |
| US12524352B2 (en) | Cache replacement policy state structure with extra states for prefetch and non-temporal loads | |
| US20250181355A1 (en) | Dependency tracking and chaining for vector instructions | |
| US12530197B2 (en) | Vector instruction processing after primary decode | |
| US20240160446A1 (en) | Predicting a Vector Length Associated with a Configuration Instruction | |
| US12314715B2 (en) | Tracking of store operations | |
| US20240184663A1 (en) | Variable Depth Pipeline for Error Correction |