TWI564719B - 具有多個資料預取器的處理器、所述處理器的操作方法及所述處理器操作的電腦程式產品 - Google Patents
具有多個資料預取器的處理器、所述處理器的操作方法及所述處理器操作的電腦程式產品 Download PDFInfo
- Publication number
- TWI564719B TWI564719B TW104139170A TW104139170A TWI564719B TW I564719 B TWI564719 B TW I564719B TW 104139170 A TW104139170 A TW 104139170A TW 104139170 A TW104139170 A TW 104139170A TW I564719 B TWI564719 B TW I564719B
- Authority
- TW
- Taiwan
- Prior art keywords
- memory access
- prefetcher
- memory
- processor
- score
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 59
- 238000004590 computer program Methods 0.000 title claims description 6
- 230000015654 memory Effects 0.000 claims description 466
- 230000008901 benefit Effects 0.000 claims description 17
- 238000007667 floating Methods 0.000 claims description 5
- 239000000463 material Substances 0.000 claims description 3
- 238000012986 modification Methods 0.000 claims description 2
- 230000004048 modification Effects 0.000 claims description 2
- 238000012545 processing Methods 0.000 claims description 2
- 238000011017 operating method Methods 0.000 claims 9
- 230000004927 fusion Effects 0.000 claims 3
- 230000001052 transient effect Effects 0.000 claims 3
- 238000012937 correction Methods 0.000 claims 2
- 238000012546 transfer Methods 0.000 claims 2
- 230000008569 process Effects 0.000 description 28
- 238000010586 diagram Methods 0.000 description 25
- 238000004458 analytical method Methods 0.000 description 24
- 230000008859 change Effects 0.000 description 12
- 238000012360 testing method Methods 0.000 description 7
- 230000003068 static effect Effects 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 238000000926 separation method Methods 0.000 description 4
- 102100040428 Chitobiosyldiphosphodolichol beta-mannosyltransferase Human genes 0.000 description 3
- 101000891557 Homo sapiens Chitobiosyldiphosphodolichol beta-mannosyltransferase Proteins 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 101100495270 Caenorhabditis elegans cdc-26 gene Proteins 0.000 description 2
- 101100076569 Euplotes raikovi MAT3 gene Proteins 0.000 description 2
- 101100237293 Leishmania infantum METK gene Proteins 0.000 description 2
- 101150108651 MAT2 gene Proteins 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
Classifications
-
- 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
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- 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/383—Operand prefetching
-
- 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
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
- G06F12/0848—Partitioned cache, e.g. separate instruction and operand caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- 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/30047—Prefetch instructions; cache control instructions
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- 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/3802—Instruction prefetching
-
- 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
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- 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/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/126—Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
- G06F12/127—Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning using additional replacement algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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; CALCULATING OR 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/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6026—Prefetching based on access pattern detection, e.g. stride based prefetch
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
本發明的一個目的是提供一種處理器。此處理器包括第一預取器以及第二預取器,第一預取器用以根據記憶體存取預取資料,第二預取器用以根據記憶體存取預取資料。每一個記憶體存取與多個預定記憶體存取類型的其中之一記憶體存取類型相關聯。處理器更包括了用以保存第一分數以及第二分數的表格,所述第一分數是用以表明第一預取器以多個預定記憶體存取類型來預取資料的效益,所述第二分數是用以表明第二預取器以多個預定記憶體存取類型來預取資料的效益。第一以及第二預取器根據表格中的個別的分數以及相關聯的記憶體存取的記憶體存取類型而選擇的在預取資料時聽從彼此。
本發明的另一個目的是提供一種處理器的運作方法,所述處理器包括用以根據記憶體存取預取資料的第一預取器以及第二預取器,其中每一記憶體存取與多個預定記憶體存取類型中的其中之一記憶體存取相關聯。所述方法包括維持處理器的表格:第一分數是用以表明第一預取器以多個預定記憶體存取類型來預取資料的效益,第二分數是用以表明第二預取器以多個預定記憶體存取類型來預取資料的效益。第一預取器以及第二預取器根據表格中的個別的分數以及相關聯的記憶體存取的記憶體存取類型而選擇的在預取資料時聽從彼此。所述分數是用以表明預取器以多個預定記憶體存取類型來預取資料的效益,以及預取器根據記憶體存取之積極層級預取資料,積極層級並是以表格中的多個分數以及相關聯的記憶體存取中的記憶體存取類型所得到。
本發明的一個目的是提供一種電腦程式產品被編碼於至少一非暫態電腦可用媒體以使用於計算裝置。電腦程式產品包括實現於所述媒體中的電腦可用程式碼,為了指定一處理器,電腦可用程式碼包括第一程式碼以指定根據記憶體存取預取資料的第一預取器以及第二預取
器,其中每一個記憶體存取與多個預定記憶體存取類型之其中之一相關聯。電腦可用程式碼更包括第二程式碼,第二程式碼用以指定一表格,此表格保存第一分數以及第二分數,第一分數用以表示第一預取器根據多個預定記憶體存取類型預取資料的效益,第二分數用以表示第二預取器根據多個預定記憶體存取類型預取資料的效益,第一以及第二預取器根據表格中的個別的分數以及相關聯的記憶體存取的記憶體存取類型而選擇的在預取資料時聽從彼此。
為讓本發明之上述和其他目的、特徵和優點能更明顯易懂,下文特舉較佳實施例並配合所附圖式做詳細說明如下。
100‧‧‧處理器
122‧‧‧指令快取器
123‧‧‧指令解碼器
124‧‧‧指令分配器
126‧‧‧執行單元
128‧‧‧記憶體子系統
132‧‧‧快取子系統
134‧‧‧記憶體存取
MAT‧‧‧記憶體存取類型
120-0‧‧‧預取器0
102-1‧‧‧預取器1
102‧‧‧預取器
104‧‧‧條目
104-0‧‧‧條目0
104-1‧‧‧條目1
LLC‧‧‧最末級快取記憶體
106‧‧‧記憶體存取類型評分表
108‧‧‧分數
108-0‧‧‧分數0
108-1‧‧‧分數1
222‧‧‧控制邏輯
202‧‧‧MYHIT計數器
204‧‧‧NOTUSED計數器
206‧‧‧OTHERHIT計數器
208‧‧‧當前記憶體存取類型暫存器
212‧‧‧積極層級暫存器
214‧‧‧MAT計數器
216‧‧‧MAT位元遮罩
218‧‧‧附加預取狀態
108‧‧‧分數
1412‧‧‧階段識別符
1414‧‧‧階段偵測器
1416‧‧‧MAT分數更新單元
1418‧‧‧MAT分數
圖1為處理器的方塊圖。
圖2為圖1的條目的方塊圖。
圖3至圖11為圖1的處理器的運作流程圖。
圖12為圖1條目的替換實施例方塊圖。
圖13為包含圖1預取器的處理器元件的方塊圖。
圖14為圖13中包括圖1預取器的處理器的運作流程圖。
圖15為產生配置之流程圖,例如程式或程式階段的
MAT分數。
圖16為記憶體存取示意圖以及從圖中提取的資料。
圖17為程式的階段分析流程圖。
圖18為決定處理器配置方面的較佳配置的蠻力法之流程圖,例如快取記憶體、預取。
圖19為圓餅圖分析結果。
實施例揭露了在處理器中的預取器(Prefetcher)是用以根據記憶體存取(memory access)來預取資料,每一個記憶體存取皆對應隨著其他記憶體存取資訊(例如:記憶體位址)而提供給預取器的記憶體存取類型MAT(Memory Access Type)。在其他實施例中,記憶體存取類型更具有32種不同的類型。預取器會追蹤其預取不同記憶體存取類型的效益,並根據預取不同記憶體存取類型的效益改變預取積極性(Aggressiveness)的等級。在其他實施例中,處理器包括兩個預取器,此兩個預取器個別追蹤預取不同記憶體存取類型MAT的效益,當其中之一的預取器可較另一個預取器更有效率的預取特定記憶體存取類型時,另一個預取器可能因為此特定記憶體存取類型而聽從(Defer to)其中之一的預取器。
記憶體存取類型(MAT)為記憶體存取之特徵,記憶體存取是由記憶體存取所產生的指令的任一特徵中所產生、或是由處理器中用以產生記憶體存取的功能單元所產生、或是當產生記憶體存取時由處理器中的運作模式所產生、或是由記憶體存取得到資料類型時所得到的。
指令的特徵例如是由指令所指定的操作。處理器中不同種類的功能單元例如是載入單元、儲存單元、整數單元、浮點單元、媒體單元、尋訪引擎、指令提取單元以及硬體預取器(例如:指令預取器、串流預取器、方塊預取器、L1D預取器)。處理器的多個運作模式例如是管理者模式(特權模式或x86 ring 0)、系統管理模式(例如:x86 System Management Mode,SMM)、保護模式(例如:x86真實模式、虛擬x86模式、保護模式、長模式)、虛擬機器模式(例如:x86 Vitrual Machine eXtensions,VMX)。資料類型例如是:代碼、描述表(例如:x86指令集架構描述表(GDT)以及中斷描述符表(IDT))、頁表、系統管理模式(例如:x86 SMM)狀態儲存空間、虛擬機器模式(例如:x86 VMX)狀態儲存空間、堆疊、壓縮資料、常數、浮點數、密碼金鑰、加密封包以及連結串列等。
記憶體存取是由指令提取單元所產生稱為代碼提取,記憶體存取是由硬體指令預取器所產生稱為代碼預取所產生。
請參閱圖1,圖1所示為處理器100的方塊圖,處理器100包括指令快取器122(instruction cache),指令快取器122是用以提供指令至指令解碼器123(instruction decoder),指令解碼器123是用以解碼指令並將解碼後的指令提供至指令分配器124(instruction dispatcher),指令分配器124是用以分配指令至執行單元126(execution unit)。較佳的,處理器100的微處理結構(microarchitecture)為超純量(superscalar)及亂序執行(out-of-order execution),其他實施例中,例如指令分配器124可包括指令排程器(instruction scheduler),指令排程器是用以以超純量亂序的方式分配指令至多個執行單元126。較佳的,處理器100包括架構暫存器(architectural registers)(未示於圖中),架構暫存器是用以保存處理器100的架構狀態(architectural state)以及非架構暫存器(non-architectural registers)(未示於圖中)。較佳的,處理器100包括暫存器別名表(register alias table,RAT)(未示於圖中),暫存器別名表是用以執行暫存器更名,處理器100包括重新排序緩衝器(reorder buffer,ROB)(未示於圖中),重新排序緩衝器是用以使指令根據程式的順序被執行。較佳的,指令分配器124包括指令轉換器(instruction translator)(未示於圖中),指令轉換器是用以將架構指令(architectural instructions)轉換為處理器100中的微指令集架構(microinstruction set architecture)所包括的微指令(microinstruction),執行單元126並可執行
上述的微指令。
處理器100更包括記憶體子系統128,記憶體子系統128是用以提供記憶體運算元(memory operands)給執行單元126並從執行單元126接收記憶體運算元。記憶體子系統128更包括至少一個載入單元(load unit)、至少一個儲存單元(store unit)、載入佇列(load queue)、儲存佇列(store queues)、處理器100用以請求訪問快取線(cache lines)的填充佇列(fill queue)、用以偵測記憶體匯流排(memory bus)來判定處理器100正在與誰溝通的偵測佇列(snoop queue)、尋訪引擎(tablewalk engine)以及其他的功能單元(functional unit)。
處理器100包括了快取子系統132與記憶體子系統128進行溝通,較佳地,快取子系統132包括多級(hierarchy)的快取記憶體,例如第L1級的指令快取122、第L1級的資料快取以及較第L1級快取延遲的第L2級快取,其中第L2級快取並為統一架構。在一實施例中,快取子系統132也包括了第L3級的快取。在一實施例中,處理器100是個多核心處理器,每個核心具有上述之功能單元,具有快取記憶體的快取子系統132則共用於多個核心之間。
記憶體子系統128產生快取子系統132的記憶體存取134,記憶體存取134包含了準備存取的記憶體位置的記憶體位址。每一個記憶體存取134包含多個記憶體存取類型MAT其中之一個記憶體存取類型MAT,為了更
詳細說明相關實施例,將會配合表1進行說明。
處理器100包含兩個預取器,預取器0 120-0以及預取器1 102-1,統稱為預取器102並通常分別作為預取器102。在其他實施例中預取器102不限為兩個。預取器102可通過不同的方式預取資料。預取器102可以利用預測取得資料的位置的方式來預取。例如:一簡單方法是,預取器102檢測程式產生的串流所對應記憶體存取的位置,並預測程式將會從下一順序的位置存取資料。(一般來說,所有的快取線是在處理器的快取記憶體內預取。因此,預取器102預取記憶體位址中的一快取線,此快取線臨近一快取線之記憶體位址包含由程式存取所指定的資料)下一順序的快取線可能在記憶體中的程式串流存取的位置的上方或下方。預取器102在同一串流中可能有相鄰的存取來判斷方向是往上還是往下。在其他實施例中,根據一步幅檢測方法(stride detection method),預取器可偵測時間上相鄰的串流記憶體存取的步幅模式(stride pattern)並根據偵測的步幅來預測。也就是預取器102尋找時間上相鄰的記憶體存取彼此之間的間隔距離,並預測下一順序的程式存取將是距離目前位置一個間隔距離遠的位置。例如,預取器得到一串流之存取位置4、8以及12,並偵測到間隔距離為4,因此預測下一存取位置為16。預取器102可通過更複雜的步幅檢測方法偵測在一模式(pattern)中具有不同間隔距離的串流。例如,預取器得到一串流需存取位置4、8、10、14以及16,並偵測到第一間隔距離為4第二間
隔距離為2,因此預取器預測下一存取位置為20以及22。在其他實施例中,預取器102可偵測在一個記憶體區塊(memory block)內的記憶體存取模式,記憶體區塊在存取出現時是相對獨立於時間順序中,相關的實施例是應用於「邊框預取」,其揭露於美國專利第8645631號、美國專利第8719510號、美國專利第8762649號以及美國專利第8880807號,上述之美國專利申請案根據其目的透過引用將所有內容併入本文。
每一個預取器包括條目104,將會配合圖2更詳細說明,是用以保存資訊以及預取器102所使用的邏輯操作以預取資料。在一實施例中,預取器102與處理器100中的快取子系統132的最末級快取記憶體(Last level caches)LLC相關聯。在一實施例中,處理器100具有多個核心,這些核心共用最末級快取記憶體LLC。較佳地,最末級快取記憶體LLC接收由每個核心的記憶子系統128所產生的記憶體存取134或記憶體存取要求134,也接收由其他核心、快取記憶體、包括上述之處理器100的系統的外部裝置(例如:直接記憶體存取)所產生的外部記憶體存取(例如:偵測)。
處理器100更包括記憶體存取類型評分表106。記憶體存取類型評分表106保存分數108,分數108是用以表示預取器102的效益。較佳地,記憶體存取類型評分表106為二維陣列,二維陣列的列與每一預取器102相關,因此,與預取器0 120-0相關聯的分數稱為分數0 108
-0,與預取器1 120-1相關聯的分數稱為分數1 108-1,記憶體存取類型評分表106的每一行對應至不同的記憶體存取類型MAT。表1列出了不同的記憶體存取類型MAT,並根據其來源說明不同的記憶體存取類型MAT。
在表1的實施例中具有32種不同的記憶體存取類型MAT。在其他實施例中也可具有不同數量以及種類的記憶體存取類型MAT。例如,在記憶體存取類型MAT的列表中可包含由一指令提取器或代碼提取產生的記憶體存取,以及由指令預取器或者代碼預取器所產生的記憶體存取。
在一實施例中,指令可以是微指令(microinstructions),微指令是由處理器100中的指令轉換器(instruction translator)所產生,指令轉換器是用以將架構(architectural)(例如:x86指令集架構指令)指令轉換為微指令。
在一實施例中,當在製造時,處理器100配置有分數108,且分數108存在於記憶體存取類型評分表106中。例如,處理器100的設計者可能會執行效能測試(如:利用處理器100的軟體類比模型),此效能測試會測試多個儲存於記憶體存取類型評分表106中的分數108,並判定出具有最佳整體表現的分數108。在一實施例中,當處理器100在運作時,記憶體存取類型評分表106以及分數108維持不變。然而,在其他實施例中,初始的分數108為記憶體存取類型評分表106之系統預設值,當處理器100在運作時,分數108會持續的動態更新,如所述的實施例,可以根據預取器102之處理記憶體存取的效益來更新分數108。在其他實施例中,分數108可隨著處理器100當前所執行的特定程式之程式特定值更新,此特定程式的分數108
可藉由程式搭配不同的記憶體存取類型評分表106的分數108,並分析其效能後決定一最佳效能值來預先得到。
請參閱圖2,圖2為圖1中的條目104的方塊示意圖。條目104包括控制邏輯222,控制邏輯222是用以讀取或寫入數值至記憶體存取類型評分表106。條目104包括MYHIT計數器202、NOTUSED計數器204、OTHERHIT計數器206、當前記憶體存取類型暫存器208、積極層級暫存器212、MAT計數器214、MAT位元遮罩216以及附加預取狀態218並皆與控制邏輯222互相通訊。每一個預取器102與多個條目104相關聯用以追蹤存取一記憶體區域(或可稱為記憶體區塊(block)或串流)的資訊,並利用所述資訊對所述記憶體區域進行預取。例如,所述記憶體區域可對應於實體記憶體(physical memory)的一頁面、其子集合或一群組頁面。每一個預取器102的多個條目104具有不同的可用數量,預取器102並具有不同的替代方案,例如:當需要替換條目104時,可利用不同方式決定更換多個條目104中的其中之一。較佳地,當條目104被替換,計數器202/204/206/214會重置,當前記憶體存取類型208、積極層級暫存器212以及MAT位元遮罩216則根據所述記憶體區域的第一個記憶體存取的記憶體存取類型來初始化。
MYHIT計數器202計算快取線被個別的預取器102成功命中(hit)的預取次數,例如,預取器102與對應的條目104,如條目104與預取器0 102-0對應,快取線
的命中次數為快取線被預取器0 102-0預取的次數。OTHERHIT計數器206是用以計算上述之快取線被其他預取器102成功命中的預取次數,例如預取器102之外的預取器102與其對應的條目104相關聯,如條目104對應於預取器0 102-0,而預取次數為快取線被預取器1102-1成功命中取的次數。在一替代實施例中,OTHERIT計數器206用以計算快取線的命中次數且為即時預取器要求預取的,但實際上是由其他預取器102所預取。例如,即時預取器預取快取線的要求在快取記憶體中成功預取,因為此預取要求已被其他預取器102完成。較佳地,每一個快取線包括代表狀態的位元(例如,在快取記憶體的標記陣列(tag array)中),所述位元是用來判斷是哪個預取器102預取了所述的快取線。NOTUSED計數器204是用來計算快取線被從未使用的預取器102預取之次數,例如,預取器102在預取快取線以及逐出快取之間皆無預取快取線。
當前記憶體存取類型暫存器208存有記憶體存取類型MAT的識別符(identifier),且是表徵與條目104相關的記憶體存取的識別符。例如:請參閱表1,表1中的記憶體存取類型MAT可以具有識別符0至識別符31。接著將說明與條目104相關聯的記憶體存取的特徵。
積極層級暫存器212是用以保存說明預取器102如何進行積極性預取的資訊。在一實施例中,積極層級212指定預取數,如當預取器102決定進行預取時,預取器102預取快取線的次數是對應於記憶體存取。例如:
當積極層級212相對為低時,預取數可能為1;當積極層級212相對為中等時,預取數可能為2;當積極層級212相對為高時,預取數可能為3。
在其他實施例中,積極層級212指定距離目前位置之最大預取距離(如:多條快取線)進行預取。例如:當積極層級212相對為低時,預取距離可以為5;當積極層級暫存器212相對為中等時,預取距離可以為15;當積極層級212相對為高時,預取距離可以為40。在其他實施例中,積極層級212指定預取數以及預取距離的組合。例如:積極層級212指定預取數為3,而在任何情況下預取距離不大於30條快取線,因此若跨距為17條快取線,預取器102將只預取2條快取線,而不是預取數的3。
在其他實施例中,積極層級212指定預取器102如何根據當前預取要求所使用的資源的使用率來進行預取。預取器102的填充佇列為被預取要求所使用的資源的實施例,預取器102接收所述要求並根據要求從記憶體中取得快取線。填充佇列的數量(例如,佇列中的有效數量)可用以提供至預取器102以計算當前資源的使用率。若填充佇列包括了大量的要求,所述要求為執行中的程式需從記憶體需求(memory demanded)中取得快取線,將不再使填充佇列資源負擔預取快取線的需求。例如,假設填充佇列只具有三個可用的項目(例如:填充佇列的16個專案中的13是可用的),在此情況中,若積極層級212低於一第一門檻值(first threshold),預取器102可決定避免產生任何預
取,若積極層級212高於所述第一門檻值但低於一第二門檻值,預取器102可產生一個預取,若積極層級暫存器212高於第二門檻值,預取器102可決定產生三個預取。當程式要求記憶體存取在末級快取錯過了,則需要無效的填充佇列專案來執行分配,前述之前兩種選擇可允許程式要求記憶體存取更進一步來執行。但,較後的選擇可能阻止所要求的記憶體存取當程式要求記憶體存取更進一步來執行,預取器102可因為特定的記憶體存取類型而具有高分數並承擔風險。例如:其他填充佇列專案可與記憶體存取有關,並差點錯過預取器102預取的視窗,然而目前預取器102已具有不錯的存取模式,預取器102可提前並順利預取程式的工作資料集合,因此程式記憶體存取可成功的預取快取而不是預取失敗。在其他實施例中,預取器102可冒險接受填充佇列主要為預取要求而非所需的記憶體存取。
MAT計數器214較佳的可根據記憶體存取類型具有個別的MAT計數器214,當分配了對應的條目104,每一個MAT計數器214計算具有個別記憶體存取類型MAT的記憶體存取次數。例如:如果14 sotre_fp記憶體存取類型記憶體存取已被執行於與被分配的條目104相關之記憶體頁面,sotre_fpMAT計數器214將具有14的數值。MAT計數器214將被利用於表徵與條目104相關聯的當前記憶體存取類型208。MAT計數器214將會配合圖9進一步的說明。
在其他實施例中,當記憶體存取具有記憶體存取類型群組中的其中一個記憶體存取類型MAT時,積極層級暫存器212指定至少一個管理預取器102行為的參數的數值。在一實施例中,預取器102辨認N個不同且映射於單一記憶體存取類型MAT的群組(例如:4個)。每一個群組包括一個32位元暫存器,以及一個位元對應於32個記憶體存取類型的其中之一,上述之位元是用以表示記憶體存取類型包括於與暫存器相關聯的群組中。以這種方式,每一個記憶體存取類型MAT可以動態地分配給一個群組。在一實施例中,每一個記憶體存取類型可以只屬於一個群組。為了動態配置預取器102,將記憶體存取類型群組化是具有優勢的,特別是對於積極層級212。每一個群組具有參數的數值,此數值會以預設值初始化,並隨著運作而改變,例如被處理器的微代碼(microcode)、系統軟體(如:模式指定暫存器(model-specific registers,MSRS))、或其他單元或子處理器,像是對應主處理器的服務處理器。前述的係數可包括以下實施例,多數與邊框預取器(bounding box prefetcher)相關聯:係數M是用以處理器的定義快取記憶體中應該被預取的範圍,其定義為[N,N+M],N為記憶體存取的位置;快取線預取處理器在較低層級快取記憶體的數量;一旗標是用以在下一快取線使預取失能;一旗標是利用單一位置來估測串流的起始點,以控制開始預取的功能;個別的旗標是用以避免從不同週期產生預取(例如1,3,4,5)以及1,3,4,5以外的週期;一旗
標控制記憶體存取要求的數量以鎖定模式;一旗標用以控制鎖定模式當兩個記憶體存取距離為一個快取線;一旗標用以控制鎖定模式當兩個記憶體存取距離大於一個快取線;一旗標用以立即從大於另一模式的模式轉換至兩個記憶體存取一個快取線的模式;一旗標用以忽略資訊當要求的存取大於目前週期,並只進行距離目前建立模式最小距離的存取。
MAT位元遮罩216較佳的包括一個具有多個位元的遮罩,多個位元對應於多個記憶體存取類型MAT。控制邏輯222使在MAT位元遮罩216中的至少一個位元對應於至少一個記憶體存取類型MAT,表徵記憶體存取的記憶體區域(memory region),記憶體區域並與條目104相關,MAT位元遮罩216中的其他位元則保持空白。MAT位元遮罩216更將配合圖12有更詳細的說明。
預取器狀態218包含除了與記憶體存取類型相關的計數器202/204/206/214以及前述之暫存器208/212/216這些預取器102用以產生預取決定的元件的狀態。預取狀態218會因為預取器102使用不同方法預取而相異,如上述之內容。例如:預取狀態218可包括至少一預取步幅長度暫存器。預取狀態218可包括區塊數量暫存器(block number register)或記憶體位址暫存器(memory address register),是用以保存記憶體區域位元址,如實體記憶體頁面。預取狀態218也可包括預取方向暫存器(prefetch direction register)。預取狀態218可包括區塊位
元遮罩暫存器(block bitmask register),是用以保存位元遮罩,位元遮罩是用以表明記憶體區域中被存取的快取線。區塊位元遮罩的每一個位元對應記憶體區域中的一個快取線。在區塊位元遮罩中位元的真值(true value)是用以表示對應的快取線已被存取。當所有位元皆為假值(false)時區塊位元遮罩即被初始化。在一實施例中,一個記憶體區塊(memory block)的大小為4KB(在其他情況下,可等同於一個實體記憶體頁面的大小),而快取線的大小為64byte,因此區塊位元遮罩具有64個位元。然而,在其他實施例中快取線的大小可能會改變。此外,超過位元遮罩所維持的記憶體區域的大小可改變且不需要對應於實體記憶體頁面的大小。相反的,超過位元遮罩所維持的記憶體區域或區塊為任意的大小(較佳為2的次方),只要其包括足夠數量的快取線以致能,並為了有益的預取目的偵測明確的方向以及模式。預取器狀態218可包括最小指標暫存器(min pointer register)和最大指標暫存器(max pointer register),是用以在預取器102開始追蹤存取記憶體區塊且區塊已被存取時,個別維持指向最低和最高的快取線索引(index)。預取器102可包括一min_change計數器以及max_change計數器,是用以計數最小指標與最大指標改變的次數當預取器102開始追蹤記憶體區塊的存取時。預取器102包括一總和計數器(total counter),當預取器102開始追蹤記憶體區塊的存取時用以計數快取線存取的總數量。預取器102可包括一中間指標(middle pointer),是用以在預取器102
開始追蹤存取記憶體區塊且區塊已被存取時,用以指向中間的快取線索引(例如:最小指標與最大指標的平均)。預取器102可包括方向暫存器(direction register)、模式暫存器(pattern register)、模式週期暫存器(pattern period register)、模式位置暫存器(pattern location register)以及搜尋指標暫存器(search pointer register),是用以偵測存取模式以進行預取。預取器102可包括多個週期匹配計數器(period match counters)。每一個週期匹配計數器保留不同週期的計數。在一實施例中,週期為3、4以及5。所述的週期為中間指標的左/右的位元數量。週期匹配計數器會在每一個區塊的記憶體存取後更新。如果區塊位元遮罩表示在期間內中間指標左方的存取符合中間指標右方的存取,預取器102會增加與週期相關聯的週期匹配計數器。關於週期匹配計數器、方向暫存器、模式暫存器、模式週期暫存器、模式位置暫存器以及搜尋指標暫存器的操作以及使用將在關於邊框預取器實施例的美國專利第8645631號、美國專利第8719510號、美國專利第8762649號以及美國專利第8880807號進一步的說明。
請參閱圖3,圖3為處理器100之運作流程示意圖。其開始於步驟302。
在步驟302,在多個預取器102的其中之一,即圖3的預取器X,所有條目104未命中一個新的記憶體存取。例如:在記憶體區域中的記憶體存取並沒有作動於預取器X中,如:其中一條目104沒有被分配。此記憶體
存取有一對應的記憶體存取類型MAT。接著執行步驟304。
在步驟304,預取器X檢查與記憶體存取之記憶體存取類型MAT相關聯的分數,即圖3之分數X,此分數X並在預取器X的表106中。接著執行決策步驟306。
在決策步驟306中,預取器X判斷分數X(於步驟304所檢查之分數)是否少於一門檻值。如果判斷為是,進行步驟308,反之,進行步驟309。被選擇的門檻值是用以當預取器X預取特定的記憶體存取類型MAT具有較差的效能時,避免預取器X根據特定的記憶體存取類型MAT(或至少,第一個存取具有所述記憶體存取類型MAT的記憶體區域)進行預取。
在步驟308,預取器X抑制分配條目104,導致預取器X聽從了其他預取器102(預取器Y)以從記憶體區域預取。抑制分配條目104可避免更換可用的條目104,並有利的致能非替換且可用的條目104以繼續有效率的預取記憶體區域。流程並停止於步驟308。在一實施例,預取器X在預先記憶體存取的基礎上聽從了預取器Y,而不是在預先記憶體區域的基礎上。即,預取器X分配一個條目104在未命中的情況,但每次預取器X遇到了新的記憶體存取(如:在圖4的步驟402)時,預取器X檢測新的記憶體存取之記憶體存取類型MAT的分數108,並作出類似步驟306(及/或步驟302)的決定,即預取或替代以聽從預取器Y替代。在其他實施例中,當新記憶體存取之記憶體存取類型MAT並不符合表徵條目104的至少一個記憶體存取類
型,預取器X藉由未命中於條目104在預先記憶體存取的基礎聽從預取器Y,例如MAT位元遮罩216所示,如以下圖12所述。也就是說,圖12所述之實施例,預取器X聽從預取器Y以進行記憶體區域的預取,更狹義的意義上,為在預先記憶體存取的基礎上聽從,特別是相對於給定的記憶體存取具有一記憶體存取類型MAT對應於表徵條目104的記憶體區域之至少一個記體存取類型MAT。
在步驟309,預取器X檢測分數,此分數與其他預取器102的表106中的記憶體存取的記體存取類型MAT相關聯,請參閱圖3的預取器Y,上述之分數為圖3的分數Y。接著進行步驟312。在一實施例中,預取器X並無執行步驟309以及步驟3012的操作。
在決策步驟312中,預取器X判定分數X是否少於分數Y。若為是,繼續步驟308,反之進行步驟314。分數X必須少於分數Y以抑制分配可能被選上之條目104,當預取器X根據特定記憶體存取類型MAT進行預取之效能較預取器Y根據特定記憶體存取類型MAT進行預取之效能差時,避免預取器X根據特定記體存取類型MAT進行預取。在一實施例中,分數X與分數Y產生一差值,且此差值必須大於門檻值以進行步驟308。
在步驟314中,預取器X分配其中之一的條目104。接著進行步驟316。
在步驟316,預取器X根據新記憶體存取之記憶體存取類型MAT設定被分配的條目104中的當前記憶體
存取類型暫存器208。接著進行步驟318。
在步驟318,預取器X根據分數X設定於被分配的條目104中的積極層級暫存器212。流程結束於步驟318。
請參閱圖4,圖4揭露了處理器100之運作流程示意圖。流程開始於步驟402。
在步驟402,其中之一個預取器102的條目104中的新記憶體存取為命中。例如:記憶體區域中的記憶體存取作動於預取器102中,如一條目104已被分配。記憶體存取具有相關聯的記體存取類型MAT。接著進行步驟404。
在步驟404中,預取器102根據目前積極層級212進行預取。目前積極層級212可能以各種方式設定,像是圖3的步驟318、圖9的步驟912或圖10的步驟1018以及1019。流程結束於步驟404。
在一實施例中,在條目104的所有命中的新記憶體存取,預取器102根據新記憶體存取之記憶體存取類型MAT更新目前的記憶體存取類型MAT 108,根據與新記憶體存取之記憶體存取類型MAT相關的表106中的分數108更新目前積極層級212,若有需要,可根據目前積極層級暫212進行預取。在一實施例中,控制邏輯222從與預取器102相關聯之表106複製分數108至條目104的本地儲存區(local storage)。
請參閱圖5,圖5揭露了處理器100之運作流
程示意圖。其開始於步驟502。
在步驟502中,其中之一的預取器102,即圖5中的預取器X,是用以偵測記憶體存取命中快取線,且是由預取器X所預取。如上述之內容,快取記憶體的標記陣列(tag array)(如LLC)可能包含便於確認預取快取線的預取器102之位元。接著進行步驟504。
在步驟504中,預取器X中對應條目104的MYHIT計數器202會增加。流程結束於步驟504。
請參閱圖6,圖6揭露了處理器100之運作流程示意圖。其開始於步驟602。
在步驟602中,其中之一的預取器102,即圖6中的預取器X,用以偵測被預取器X預取的快取線從快取記憶體中(如LLC)被移除,但快取線在被預取到從快取記憶體中被移除的時間內都未被使用。快取記憶體(如LLC)的標記陣列可能包含便於確認快取線是否被存取之位元。接著進行步驟604。
在步驟604中,預取器X之NOTUSED計數204會增加。流程結束於步驟604。
請參閱圖7,圖7揭露了處理器100之運作流程示意圖。其開始於步驟702。
在步驟702中,其中之一的預取器102,即圖7中的預取器X,用以偵測記憶體存取命中了被其他預取器102預取的一快取線,即圖7中的預取器Y。另外,如以上所述,預取器X偵測記憶體存取命中了快取線且為預取器
X需要的預取,但實際上是由預取器Y所預取。接著進行步驟704。
在步驟704中,預取器X中對應條目104的OTHERHIT計數計數器206會增加。流程結束於步驟704。
請參閱圖8,圖8揭露了處理器100之運作流程示意圖。其開始於步驟802。
在步驟802中,其中之一的預取器102,即圖8中的預取器X,用以偵測時間以取消分配條目104。例如:預取器X可能需要分配條目至其他記憶體區域。或者,預取器X偵測程式不再存取記憶體區域,和/或預取器X已無法有效的存取記憶體區域。接著進行步驟804。
在步驟804中,預取器X為了條目104的當前記憶體存取類型暫存器208產生分數108。較佳的,預取器X根據MYHIT計數器202、NOTUSED計數器204以及OTHERHIT計數器206產生分數108。在一實施例中,控制邏輯202計算做為兩個以上的輸入的加權和的分數,例如MYHIT計數器202、NOTUSED計數器204、以及OTHERHIT計數器206的值。較佳的,MYHIT計數器202的權重為正值,與NOTUSED計數器204以及OTHERHIT計數器206相關聯的權重為負值。接著進行步驟806。
在步驟806中,預取器102以步驟804所計算的分數108更新預取器X的當前記憶體存取類型暫存器208表106中的分數108。在一實施例中,預取器102更新其記憶體存取類型MAT不為0的MAT計數器214,預取
器X之分數108為步驟804所計算並於表106中的分數108。在一實施例中,預取器102更新其記憶體存取類型MAT大於一門檻值的MAT計數器214,預取器X之分數108為步驟804所計算並於表106中的分數108。流程結束於步驟806。
請參閱圖9,圖9揭露了處理器100之運作流程示意圖。其開始於步驟902。
在步驟902中,一個新的記憶體存取命中了其中之一預取器102的條目104,例如:此記憶體存取一運作於預取器102的記憶體區域中,如:被分配的條目104。此記憶體存取具有一個相關聯的記憶體存取類型MAT。接著進行步驟904。
在步驟904中,控制邏輯222增加與新記憶體存取的MAT相關聯的記憶體存取MAT計數器214,接著進行決策步驟906。
在決策步驟906中,控制邏輯222判斷在步驟906中有增加的MAT計數器214是否到達一門檻值。如果是,進行步驟908,反之,進行步驟916。所述門檻值是表示與MAT計數器214相關聯的記憶體存取類型MAT成為記憶體區域中的記憶體存取之主要的記憶體存取類型MAT。
在步驟908中,控制邏輯222以新記憶體存取的記憶體存取類型MAT設定條目104的當前記憶體存取類型暫存器208,也就是與記憶體存取類型MAT相關聯的
MAT計數器214已經溢值。接著進行步驟912。
在步驟912中,控制邏輯222以與記憶體存取類型MAT以及預取器102相關聯的分數108設定已被分配的條目104的積極層級暫存器212。接著進行步驟914
在步驟914,控制邏輯222重置MAT計數器214。接著進行步驟916。
在步驟916中,預取器102根據積極層級212來預取。流程結束於步驟916。
請參閱圖10,圖10揭露了處理器100之運作流程示意圖。圖10介紹了圖3之替代實施例。在圖10實施例中,控制邏輯222不斷為了當前記憶體存取類型暫存器208產生分數(如:每一次計數計數器202/204/206的其中之一更新),而不是當條目104為取消分配(de-allocation)時段時等待圖8的步驟804產生給當前記憶體存取類型暫存器208的分數。不斷產生的分數用於圖10中的步驟1019(以下說明),以更新表106中的分數108。在圖10中,圖3的步驟316的流程是用以決定圖10的步驟10017。
在步驟1017中,預取器X辨認預取器X中是否有其他可用的條目104,且此條目104具有相同的當前記憶體存取類型暫存器208作為新記憶體存取的記憶體存取狀態MAT。如果是,接著進行步驟1019,反之,進行步驟1018。在一實施例中,如果預取器X具有多個可用的條目104且多個條目104具有相同的當前記憶體存取類型暫存器208,預取器X辨認最新的(最近期被分配的)匹配條目
104。
在步驟1018中,預取器X根據分數X設定被分配的條目104的積極層級暫存器212。流程結束於步驟1018。
在步驟1019中,預取器X根據步驟1017中被辨認為其他有效的條目104且不斷被產生的分數設定被分配的條目104的積極層級暫存器212。
可以看出圖9以及圖10之實施例提供了設定條目104的當前記憶體存取類型暫存器208的方法,以表示記憶體區域輪流以記憶體區域的第一記憶體存取來表徵或以每一個個別的記憶體存取來表徵,如上述圖4之敘述。
請參閱圖11,圖11揭露了處理器100之運作流程示意圖。其開始於步驟1102。
在步驟1102中,包含處理器100的系統偵測一新流程或程式正在運作。在一實施例中,運作於處理器100的系統軟體偵測新的流程,如一裝置驅動監控運算的系統流程清單(system process table)。系統軟體可能提供資訊給處理器,處理器可能利用系統軟體來偵測程式已進入了不同的階段(phases),例如以下將配合圖13所進行的說明,系統軟體可能指定每一個階段具有不同的記憶體存取狀態MAT分數。為了回應指令,處理器更新記憶體存取狀態MAT分數108,如果有提供,裝載階段偵測器(phase detectors)(圖13的1414)以及初始階段識別字(initial phase identifiers)(圖13的1412)。在一實施例中,處理器100自
行偵測新的程式,如處理器100偵測處理過程標示符(process context identifier)的變化,如:新的數值被載入處理過程標示符PCID為x86指令集架構CR3暫存器的部分。在一實施例中,處理器100偵測目前運作程式的新階段的轉變而不是程式的改變。接著進行步驟1104。
在步驟1104中,預取器102將分數填入記憶體存取類型評分表106中,所述分數為先前根據在步驟1102中被偵測的程式的離線分析所產生的。在一實施例中,當系統軟體偵測新的程式運作於步驟1102中,系統軟體提供所述分數。在一實施例中,處理器100根據偵測的處理過程標示符PCID的改變或程式階段的轉換從記憶體(如:處理器100的本地專用記憶體(local private memory)或系統記憶體)取得分數,較佳的,處理器100從處理過程標示符PCID或階段識別字辨認所述分數。分數的資訊可包含程式在不同階段由離線分析所決定的不同分數。流程結束於步驟1104。
請參閱圖12,圖12為圖1之條目104之實施例架構示意圖。在圖2的實施例中,控制邏輯222比較新記憶體存取的位址與保存在預取器狀態218的記憶體區域位元址暫存器的記憶體區域位元址,以判定新記憶體存取是否命中或者未命中條目104,也就是說條目104命中單純根據記憶體位元址。然而圖12實施例中,條目104命中是利用當前記憶體存取的記憶體存取類型MAT,如本文所述。
圖12中的條目104實施例包括一比較器1202,比較器1202接收MAT位元遮罩216以及記憶體區域位址218,此記憶體區域位元址218為圖2之預取器狀態218的一部分。比較器1202將MAT位元遮罩216以及記憶體區域位元址218與新記憶體存取狀態MAT1204(新記憶體存取的MAT為獨熱碼向量(one-hot bit vector)格式)以及新記憶體存取位址1206作比較。如果位址218/1206符合且MAT位元遮罩216中對應於新MAT位元1204的位元已經設定,所述比較器1202在一hit/miss指示器1208中表明一命中或表明一未命中,如:在圖3、4以及9中的步驟302、402以及902。
如以上所述,圖12的實施例不只基於記憶體存取,也包括記憶體存取類型MAT來選擇地分割條目104資源。所以,相同的記憶體區域可以擁有多個分配給記憶體區域的條目104,使得每個條目104因為多個不同的特徵記憶體存取類型而被預取。也就是說,預取器102根據新記憶體存取選擇地產生多個預取,此新記憶體存取使用與新記憶體存取的記憶體存取類型MAT相關聯的條目104的積極層級212。記憶體存取所述區域不同於以預取器102有效的預取的能力時,可能對記憶區域特別有效。
較佳的,當分配條目104時,控制邏輯222填寫MAT位元元遮罩216。在一實施例中,控制邏輯222根據被分配的條目104設定MAT位元遮罩216中的位元,此位元對應至新記憶體存取的記憶體存取狀態MAT。在一實
施例中,當預取器102在記憶體區域中預取時,控制邏輯222動態的更新MAT位元遮罩216,如以下所述。
在一實施例中,控制邏輯222設定對應於多個記憶體存取類型的群組的MAT位元遮罩216中的位元,所述群組包括新記憶體存取的記憶體存取類型MAT。例如:一個群組可能包含多個記憶體存取類型,多個記憶體存取類型包括浮點數運算(如:前述表1中的fp_load,fp_store,fused_fp_stroe);其他群組可能包括多個記憶體存取類型MAT,多個記憶體存取類型MAT包括融合運算(fused operations)(如:前述表1中的fused_fp_store,fused_load,fused_store,fused_store_aps,fused_store_update);其他群組可能包括多個記憶體存取類型MAT,多個記憶體存取類型包括載入運算(如:fp_load,fused_load,load,load_aps,load_descr,load_nac,load_nt,load_store,load_supervisor,load_zx);其他群組可能包括多個記憶體存取類型MAT,多個記憶體存取類型MAT包括儲存運算(如:fp_store,fused_fp_store,fused_store,fused_store_aps,fused_store_update,store,store_aps,store_mask,store_nt,store_nt_aps,store_push,store_supervisor,store_update,store_update_nac);其他群組可能包括多個記憶體存取類型MAT,多個記憶體存取類型MAT包括媒體運算(如:load_aps,store_aps,store_nt_aps);其他群組可能包括多個記憶體存取類型MAT,多個記憶體存取類型MAT包括非暫態存取運算(如:load_nt,pf_nt,store_mask,store_nt,
store_nt_aps);其他群組可能包括多個記憶體存取類型MAT,多個記憶體存取類型MAT包括位址修改運算(如:fused_store_update,store_update,store_update_nac);其他群組可能包括多個記憶體存取類型MAT,多個記憶體存取類型MAT包括不對稱檢查運算(如:load_nac,store_update_nac);其他群組可能包括多個記憶體存取類型MAT,多個記憶體存取類型MAT包括預取運算(如:boxpf,gpf,11dpf,pf_11d,pf_s2,pf_nt,pf_w);以及群組可能包括多個記憶體存取類型MAT,多個記憶體存取類型MAT包括堆疊運算(如:fused_store_update,store_push,store_update,store_update_nac)。在一實施例中,記憶體存取類型評分表106保存記憶體存取類型群組的分數108,而不是保存個別的多個記憶體存取類型的分數108,預取器102根據記憶體存取類型群組運作而不是個別的多個記憶體存取類型。
在一實施例中,預取器102限制分配至同一記憶體區域的條目104的數量。例如,當預取器102偵測兩個條目104(或其他預定的門檻值,如:預取器104的一半)被分配於同樣的記憶體區域,利用設定與已被分配的條目104的MAT位元遮罩216中的新記憶體存取MAT相關聯的位元,預取器102將記憶體存取類型MAT(或包括記憶體存取類型MAT的一群組)與已被分配的條目104結合在一起,而不是為了記憶體區域分配其他條目104,或設定與記憶體存取類型MAT群組相關聯的位元,所述記憶體存取
類型MAT包括新記憶體存取記憶體存取類型MAT。因此,記憶體區域的新記憶體存取類型MAT的連續的記憶體存取將命中條目104。以這種方式,預取器102可避免記憶體區域消耗太多的條目104,並可根據不同的記憶體存取類型MAT及/或記憶體存取類型MAT群組有利的將記憶體區域分段。
在一實施例中,多個記憶體存取類型MAT置於多個互斥群組(mutually exclusive groups)(如:四個群組,每個表1中的每一個記憶體存取類型MAT只置於四個群組的其中之一)的其中之一中。每一個群組具有相關聯的預取積極性等級。每一次預取器102遇到一個新記憶體存取時,根據新記憶體存取的記憶體存取類型MAT群組的積極性等級來進行預取。例如:假設fp_store記憶體存取類型MAT已被置於一群組中,此群組具有3的預取計數且預取器102遇到具有fp_store的記憶體存取類型MAT之新的記憶體存取。在此實施例中,預取器102將在預取器102所判斷的記憶體區域內根據先前的存取模式來預取下三個快取線。類似所述之內容,當預取器102運作時,與群組相關聯的積極性等級可能被動態調整。
請參閱圖13,圖13為處理器的架構示意圖,處理器並包括圖1所示之預取器102。處理器包括一階段偵測器1414,階段偵測器1414是用以偵測運作中的程式進入了新的階段。階段偵測器1414使根據階段識別符1412來做決定,如利用圖11所示之裝置驅動器。階段識別符
1412可包含一指令指標(或程式計數)值,指令指標值為程式的指令的指令指標值。所述指令可能是副程式調用指令,在此情況下,階段識別符1412可能包括調用指令的目標指令的一指令指標(或程式計數)值。此外,階段識別符1412也可包括調用指令的至少一參數值,如:回復位址、暫存器數值及/或堆疊數值。在階段偵測器的一實施例中,可稱為指紋單元,並在美國專利申請第14/050,687號以及美國專利申請第14/050,757號中有更詳細的說明,上述申請案皆申請於10/10/2013,並主張於09/20/2013申請的美國專利申請第61/880,602號之優先權,上述之美國專利申請案根據其目的透過引用將所有內容併入本文。處理器並包括一MAT分數更新單元1416,是用以被階段偵測器1414所通知,當新階段被偵測階段偵測器1414將會接收新階段的一識別符。MAT分數更新單元1416也接收記憶體存取類型MAT分數,如:從上述圖11之裝置驅動器。MAT分數更新單元1416更新記憶體存取類型MAT分數108,如以下圖14所述。在一實施例中,MAT分數更新單元1416包含被階段偵測器1414調用的處理器的微代碼。在一替代實施例中,MAT分數更新單元1416包含一狀態機,狀態機從已偵測到新階段的階段偵測器1414接收一指示符以及新階段的一識別符。階段分析將會在圖17有更詳細的說明。
請參閱圖14,圖14為圖13中包括圖1預取器102的處理器之運作流程。流程開始於步驟1422。
在步驟1422中,圖13的階段偵測器1414偵測運作中的程式已進入了新的階段。階段偵測器1414根據偵測到的新階段通知圖13的MAT分數更新單元1416。接著進行步驟1424。
在步驟1424中,MAT分數更新單元1416查找從MAT分數1418中的階段偵測器1414所接收的新階段的識別符(如:從圖11步驟1404的裝置驅動器所接收),並以查找的記憶體存取類型分數更新記憶體存取類型評分表106。另外,有必要的話,MAT分數更新單元1416以新階段識別符1412更新階段偵測器1414。在一實施例中,根據目前階段查找下一階段,因此,根據目前階段被載入階段偵測器1414的階段識別符1412可能不同。接著進行步驟1426。
在步驟1426中,處理器執行運作中的程式且預取器102根據更新的記憶體存取狀態分數108執行預取,如步驟1424。流程結束於步驟1426。
以下說明預取器的多種配置方法。例如關於基於記憶體存取狀態分數108的預取器積極性可能為靜態配置、動態配置或同時靜態配置以及動態配置。一般來說,靜態配置為矽制程前(pre-silicon)。也就是說,設計者利用直覺,最好是通過軟體模擬輔助處理器設計,來決定好的配置,即配置可能改善處理器的效能,特別是預取器。增進處理器的效能即增進處理器執行程式的速度(如:減少每一個指令速率的時脈或增加每個指令的時脈速率)及/或減
少能量消耗。所述程式可能是運作系統、可執行程式(如:應用程式、實用程式、基礎分析程式)、動態連結程式庫與其他類似程式。軟體類比可用以執行程式的離線分析以改善處理器的效能,如以上圖15至圖17所述,特別是關於預取器的配置。較佳的,設計者判斷程式的集合為靜態配置為較佳。設計者使進入矽制程的設計包括較佳的靜態配置。
相反,一般來說,用以判斷動態配置的分析是在矽制程後(post-silicon)被執行。因此,當處理器完成制程之後,設計者執行不同的離線分析來判斷處理器在不同於靜態配置並執行程式的效能,或者為系統預設值,配置於矽制程中。矽後測試可能為更嚴格的,可能更強力的,針對一配置矩陣的自動效能回復技術被執行,回復效能資料並被分析,如以下圖18所說明。設計者可能提供矽制程前測試的結果作為多個程式的矽制程後測試的初始種子,如:試圖避免區域最大值並非全域最大值。
不管矽制程前或者矽制程後的測試,在動態配置測試中,是以前置程式或前致程式階段為基礎來決定較佳的配置,當系統,如:裝置驅動器,判斷一個已知的程式正執行於處理器(如:分析已經被執行的程式且較佳的配置為已知),系統提供較佳的程式特定配置至處理器,且處理器在運作時根據程式特定配置以動態的方式更新預取器。較佳的,程式特定配置根據不同的程式階段包含不同的配置,且處理器偵測階段改變並根據程式特定配置動態
的更新配置,如圖17所述。
關於一組給定的特徵的程式階段,所述一組給定的特徵為具有該些特徵中的相同行為的電腦程式之子集合,例如,假設前述特徵為分支預測率以及快取命中率,一程式的一階段為程式運作行為的子集合,且分支預測率以及快取命中率為其常數。例如,離線分析可能判斷特定資料壓縮程式具有兩個階段:字典建設階段以及字典查找階段。字典建設階段具有低分支預測率以及高快取命中率,以建設一套較大字串組可共用的子字串;而,字典查找階段具有高分支預測率以及低快取命中率,在字典中查找其尺寸大於快取的子字串。離線分析可能判斷預取的功效,可能用以為了配置預取器而判斷程式階段,如更新記憶體存取類型分數108。
在一實施例中,離線分析以oracle快取的概念被執行,正如名稱所暗示,其知道將會發生的內容。在快取記憶體中給定有限的空間,oracle快取知道在快取中的任何時間點應存在的最有用的資料。產生最高命中率的快取的內容可以被概念化為逐週期或逐指令的簡介。
首先,根據程式執行產生連續的oracle快取簡介,並持續追蹤記憶體存取的記憶體存取類型MAT,記憶體存取用以分配在簡介中的快取線。然後,由每一個簡介生成一圓餅圖,對於每個記憶體存取類型MAT或記憶體存取類型MAT的群組,快取線所分配的快取佔用的百分比對應於記憶體存取類型MAT的記憶體存取,一實施例揭露於
圖19。然後,在連續的執行程式後,處理器連續更新預取器的記憶體存取類型MAT分數基於圓餅圖序列的記憶體存取類型MAT百分比。
在一個時脈週期或指令更新記憶體存取類型MAT分數是不能實現的,檢視圓餅圖序列需要更多的時間,例如:一整個程式或程式階段。每個記憶體存取類型MAT會消耗所有圓餅圖序列的平均值(程式或階段),且使平均圓餅圖在合理範圍內。
廣泛來說,oracle快取的概念為,因為oracle快取提前知道所有記憶體存取,oracle快取可以預先執行所有的記憶體存取。當專案程式執行時,oracle快取預測在任何時間內在快取中的快取線最佳集合。例如:在圖16中,oracle快取預測記憶體存取類型MAT1具有短持續時間的快取線應該在完成最後的存取後不再被快取。運用這樣的分析,可以得到基於每個記憶體存取類型的預取的觀察結果。
請參閱圖15,圖15為產生配置的運作流程示意圖,如:記憶體存取類型MAT分數,用以前述之程式以及程式階段。流程開始於步驟3402。
在步驟3402中,設計者較佳的以自動化的方式執行一程式並記錄程式中對快取記憶體132進行的記憶體存取134。較佳的,快取線的分配、命中以及逐出被重新編碼。記憶體存取134的記憶體位址、記憶體存取類型MAT以及時間被紀錄。接著進行步驟3404。
在步驟3404中,設計者較佳的以自動化的方式分析紀錄在步驟3402中以規律的時間間隔的資訊,並辨認明確的狀態以將程式分離成多個階段,如以下圖17所述。例如:記憶體存取類型MAT工作集合尺寸的明確的狀態、記憶體存取類型MAT的平均快取線壽命、記憶體存取類型MAT的平均命中率可被識別。接著進行步驟3406。
在步驟3406,設計者較佳的以自動化的方式,基於步驟3404的分析效能創建不同程式階段的配置。例如:該配置可能為預取積極性記憶體存取類型MAT分數,如:圖1的108。在一實施例中,判斷配置的分析中包括分析類似關於圖16至圖19的敘述。但應當理解的是,一些程式可能沒有表現出明顯的趨勢,以容易被分解成不同的階段,在這種情況下單個配置可滿足整個程式。流程結束於步驟3406。
請參閱圖16,圖16為記憶體存取圖示以及由圖式提取的資料示意圖。記憶體存取在圖中以點表示,其中水準軸為時間且為獨立變數,縱軸為記憶體位元址且為因變數。多個水平線對應於特定記憶體位址的個別的快取線。線的左邊緣標示著快取線的分配,線的右邊緣標示快取線從快取記憶體被驅逐。每一個快取線具有一個相關聯的記憶體存取類型MAT,即圖16的MAT1、MAT2、MAT3以及MAT4。在圖16的例子中,六個快取線繪示於圖中,其中兩個快取線與MAT1相關聯,兩個快取線與MAT2相關聯,一個快取線與MAT3相關聯,一個快取線與MAT4
相關聯。
下面的圖表顯示,在每個八個不同的規則的時間間隔中,每個對應的記憶體存取類型MAT的總工作集合尺寸以及工作集合尺寸。時間間隔可能與基本的區塊轉換相關聯,如以下圖17所述,並用以判斷程式階段以及每一個程式階段的配置。例如:在特定的程式或階段,可能配置更多方法,採用相對大的工作集合尺寸設定記憶體存取類型MAT的群組、區塊或包裹,以及對記憶體存取類型MAT使用較小的工作集合尺寸的較少預算方法,或至少將工作集合尺寸納入考慮,其根據多個記憶體存取類型MAT揭露於在圖16中。
此外,每個記憶體存取類型MAT的快取線的可用時間為多久是可以被觀察的,例如:平均快取線的壽命。平均快取線的壽命可以由記憶體存取類型MAT的所有快取線壽命(從分配到驅逐)的總和除以由記憶體存取類型MAT的快數線數量所劃分的階段被計算。這個資訊可以用來影響預取策略。
如果oracle快取壓抑快取線的數量以對應于包含於快取記憶體中的預期的集合的數量以及方法,預取策略的正確性與平均壽命的觀察可能增加。其他指示符也可以被聚集,例如每個記憶體存取類型MAT的快取線命中。
請參閱圖17,圖17為程式的階段分析流程示意圖。階段分析為一種離線分析,可被用來判斷處理器較佳的配置,例如快取記憶體或者預取器。其開始於步驟
3602。
在步驟3602中,一程式執行時是用以增進處理器效能,此程式並被分析與分解以生成狀態圖。狀態圖中的節點為程式的基本區塊。基本區塊是程式控制指令(例如,分支,跳躍,調用,返回等)之間的指令序列。狀態圖的每個邊緣為目標基本區塊,且所述邊緣導致並表示可能成為階段識別符的改變資訊,如以下所述。階段識別符可能包括控制轉換指令的所述指令指標(IP),或程式計數器(PC),控制轉換指令的目標位元址、及/或控制轉換指令的調用堆疊。調用堆疊可包括回復位址以及調用參數。程式階段是包含至少一基本區塊的程式的一部份。接著進行步驟3604。
在步驟3604中,程式以儀器分析關於處理器配置方面的特徵,如欲取器記憶體存取類型MAT分數。上述特徵的實施例包括快取命中率、分支預測正確率、工作集合尺寸、平均快取線壽命以及快取污染(如:快取線被預取卻從未使用的數量)。接著進行步驟3606。
在步驟3606中,程式(program)在一個給定的配置中被執行,如快取記憶體及/或預取器,程式的階段被步驟3604的分析特徵中的觀察穩態行為識別。例如:假設快取命中率是重要分析特徵,並假設快取命中率從97%變化為40%。快取命中率的改變表示在改變前預取器的配置適合目前程式,在改變後已不適合目前程式。因此,目前基本區塊(basic blocks)序列的快取命中率改變可以被識別
為一個階段,且基本區塊(basic blocks)序列在快取命中率改變後可被識別為第二階段。又例如,假設不同記憶體存取類型MAT的工作集合尺寸為重要分析特徵,然後顯著地大幅改變不同記憶體存取類型MAT或記憶體存取類型MAT群組的工作集合尺寸,可標誌一個程式中的理想位置來識別一階段的改變。接著進行步驟3608。
在步驟3608中,一但階段被識別,會確定每個階段的較佳配置。例如:多種離線分析技術會被使用,例如上述圖15以及圖16或以下圖18所述。接著進行步驟3612。
在步驟3612中,階段識別符與階段的變化相關聯。在分析的特徵出現變化時,程式基本區塊的狀態改變資訊或潛在的階段識別符與較佳配置數值一起在步驟3608被紀錄,所以資訊被檢測到時可以被提供給處理器。例如:藉由裝置驅動分析的程式將準備運作。接著進行步驟3614。
在步驟3614中,在接收與分析的程式相關的資訊後,處理器載入階段偵測器1414與圖14的階段識別符1412,如圖13至圖14所述。流程結束於步驟3614。
請參閱圖18,圖18為用以決定處理器較佳配置的蠻力法(brute force method)運作流程示意圖,如:上述的快取記憶體、預取器。所述方法適用於座標下降(coordinate descent)的優化演算法。流程開始於步驟3702。
在步驟3702中,每個程式或程式階段,在清
單中已被確定的程式是用以增進處理器的效能,此方法執行步驟3704至步驟3716直到較佳的配置被決定(如:目前最好配置-見下文-在一相對長的時間內沒有改變)或資源已經失效(如:時間及/或計算資源)。接著進行步驟3704。
在步驟3704中,當前最佳配置被設定為預設配置,如:預取的預設配置,在一實施例中,處理器的制程中配置是簡單的。接著進行步驟3706。
在步驟3706中,每個配置參數由步驟3708至步驟3712所執行。在配置參數的一實施例中,其為單一的配置位元元,如:用以打開或關閉該特徵。配置參數的其他實施例中,其為一配置欄位元,如:記憶體存取類型分數108。接著進行步驟3708。
在步驟3708中,對步驟3706的配置參數值中的合理集合(reasonable set)中的每個數值,執行步驟3712至步驟3716。配置參數值中的合理集合取決於配置參數的大小、參數的重要性、以及閱歷數值所需要的資源。例如:在單一配置位元元的情況下,兩個數值皆為一合理集合之內。例如:方法會嘗試所有可能的數值用於具有16或更少的參數值。然而,對於相對大的欄位,例如32-bit欄位,是不可能嘗試2^32中所有的數值。在這種情況下,設計者可能提供一個數值的合理集合至方法中。例如:設計者觀察具有類似特徵的記憶體存取類型MAT的群組,並將其群組化,如上所述,來限制可能的數目。若設計者不提供數值且可能的數目較大,方法可藉由步驟3712至3716閱歷
參數中的亂數值的合理數目。接著進行步驟3712。
在步驟3712中,程式或程式階段運作於當前最佳配置,但被每個通過步驟3708的參數的下一數值修改,且效能並被測量。接著進行步驟3714。
在決策步驟3714中,方法包含在步驟3712所測量的效能以及當前最佳效能,當前者為較佳時,進行步驟3716;反之,回到步驟3712並嘗試當前參數的下一個數值直到所有合理數值都被嘗試過,在這種情況下,回到步驟3708並閱歷下一個配置參數直到所有配置參數都被嘗試,在這種情況下,方法結束,得到程式或程式階段的當前最佳配置。
在步驟3716中,方法以步驟3712中嘗試過的配置更新目前最佳配置。流程回到步驟3712以嘗試目前參數的下一數值直到所有合理數值被嘗試,在這種情況下,流程回到步驟3708以閱歷下一配置參數直到所有配置參數都被嘗試,在這情況下,方法結束,得到程式或程式階段的當前最佳配置。
應當指出,利用類似圖18的方法所找出的較佳配置,設計者可不需要理解特定配置如何達到較佳的結果。
請參閱圖19,圖19所示為一圓餅圖3801分析結果。各種分析結果,如根據圖15、17以及18所執行的,可能被概念化為對應每個記憶體存取類型MAT且具有切片的圓餅圖,如每個記憶體存取類型MAT在圓餅圖中的百
分比。圓餅圖3801針對不同的記憶體存取類型MAT群組具有不同的切片。在圖19中,預取群組為42%、代碼群組為19%、浮點數群組為23%、字串資料群組為11%以及堆疊與尋訪群組為5%。
雖然本發明之多個實施例已揭露,應當理解實施例是以舉例的方式提出,而非限制本發明。本領域之通常知識者可在本發明之主旨範圍內進行形式和細節的變化,例如:軟體可以被致能,如本文所述的功能、製造、建模、模擬、描述和/或裝置和方法的測試。其可以通過一般使用的程式語言(如:C,C++)、硬體描述語言(hardware description languages,HDL)包括Verilog HDL語言、VHDL語言等或其他可用的程式。所述軟體可以置於任何已知的計算機媒介,如磁帶,半導體,磁盤,或光碟(如:CD-ROM,DVD-ROM等)、網路、有線、無線或其他通訊媒介。本文所述的裝置以及方法實施例可包含於半導體知識產權核中,例如處理器核心(如:具體的,在HDL中)。並由集成電路的產生轉化為硬體。此外,本案所述之裝置與方法可與硬體及軟體結合的方式實現。因此,揭露於本文之實施例並非用以限制本案之發明,本發明以請求項項定義發明內容以及其同等之內容。具體地,本發明可在一個通用計算機中使用的處理器設備內實現。最後,本領域的技術人員應該理解,他們可以容易地使用公開的概念和具體實施例
作為設計或修改其它結構以實施本發明的相同目的,而不脫離本發明的範圍的基礎所界定所附的請求項。
100‧‧‧處理器
122‧‧‧指令快取器
123‧‧‧指令解碼器
124‧‧‧指令分配器
126‧‧‧執行單元
128‧‧‧記憶體子系統
132‧‧‧快取子系統
134‧‧‧記憶體存取
MAT‧‧‧記憶體存取類型
120-0‧‧‧預取器0
102-1‧‧‧預取器1
102‧‧‧預取器
104‧‧‧條目
104-0‧‧‧條目0
104-1‧‧‧條目1
106‧‧‧記憶體存取類型評分表
108‧‧‧分數
108-0‧‧‧分數0
108-1‧‧‧分數1
Claims (21)
- 一種處理器,其包括:一第一預取器,用以根據記憶體存取預取資料;一第二預取器,用以根據該記憶體存取預取資料;其中每一該記憶體存取與多個預定記憶體存取類型的其中之一記憶體存取類型相關聯;以及一表格,用以保存:第一分數,是用以表明該第一預取器根據該多個預定記憶體存取類型預取該資料之效益;以及第二分數,是用以表明該第二預取器根據該多個預定記憶體存取類型預取該資料之效益;其中,該第一預取器以及該第二預取器根據該表格中的個別的該分數以及相關聯的該記憶體存取的該記憶體存取類型而選擇的在預取該資料時聽從彼此。
- 如請求項1所述的處理器,其中當與該記憶體存取類型相關聯的該第一分數少於門檻值,該第一預取器選擇的聽從該第二預取器。
- 如請求項1所述的處理器,其中當與該記憶體存取類型相關聯的該第一分數少於與該記憶體存取類型相關聯的該第二分數,該第一預取器選擇的聽從該第二預取器。
- 如請求項1所述的處理器,其中當與記憶體存取類型相關聯的該第一分數與該第二分數之間的差值大於門檻值,該第一預取器選擇的聽從該第二預取器。
- 如請求項1所述的處理器,其更包括:其中該第一預取器根據在第一積極層級的該記憶體存取預取資料,該第一積極層級是基於該第一分數以及該記憶體存取相關聯的該記憶體存取類型所得到;以及其中該第二預取器根據在第二積極層級的該記憶體存取預取資料,該第二積極層級是基於該第二分數以及該記憶體存取相關聯的該記憶體存取類型所得到。
- 如請求項1所述的處理器,其中,該第一以及第二預取器基於預定記憶體存取選擇的聽從彼此。
- 如請求項1所述的處理器,其中該第一以及第二預取器基於預定記憶體區域選擇的聽從彼此。
- 如請求項1所述的處理器,其中該多個記憶體存取類型包括浮點數運算、融合運算、載入運算、儲存運算、媒體運算、非暫態存取運算、位址修改運算、不對稱檢查運算、預取運算及堆疊運算。
- 如請求項1所述的處理器,該多個記憶體存取類型與記憶體存取的來源相關聯。
- 如請求項9所述的處理器,與該多個記憶體存取類型相關聯的該記憶體存取的該來源至少包括以下該的其中三種:整數指令、符點數指令、尋訪、融合指令、載入指令、儲存指令、段描述符負載、媒體指令、非暫態存取指令、堆疊存取指令、多個不同來源的預取、位元址修正載入/儲存指令、具有多個不同處理器特權級別的指令、不對稱檢查載入指令、零填充載入指令以及由遮罩傳送指令產生的非暫態儲存指令。
- 如請求項10所述的處理器,其中該多個不同來源的預取至少包括以下該的其中兩種:架構預取指令、硬體預取器以及非架構保證預取指令。
- 一種處理器運作方法,該處理器包括用以根據記憶體存取預取資料的第一預取器以及第二預取器,其中每一該記憶體存取與多個預定記憶體存取類型的其中之一記憶體存取類型相關聯,該方法包括:維持該處理器的一表格;第一分數用以表示該第一預取器根據該多個預定記憶體存取類型預取資料的效益;以及第二分數用以表示該第二預取器根據該多個預定記憶體存取類型預取資料的效益;其中,該第一以及該第二預取器根據該表格中的個別的該分數以及相關聯的該記憶體存取的該記憶體存取類型而選擇的在預取該資料時聽從彼此。
- 如請求項12所述的處理器運作方法,其中當該記憶體存取類型相關聯的該第一分數少於門檻值,該第一預取器選擇的聽從該第二預取器。
- 如請求項12所述的處理器運作方法,其中當與該記憶體存取類型相關聯的該第一分數少於與該記憶體存取類型相關聯的該第二分數,該第一預取器選擇的聽從該第二預取器。
- 如請求項12所述的處理器運作方法,其中當與記憶體存取類型相關聯的該第一分數與該第二分數之間的差值大於門檻值,該第一預取器選擇的聽從該第二預取器。
- 如請求項12所述的處理器運作方法,更包括:其中該第一預取器根據在第一積極層級的該記憶體存取預取資料,該第一積極層級是基於該第一分數以及該記憶體存取相關聯的該記憶體存取類型所得到;以及其中該第二預取器根據在第二積極層級的該記憶體存取預取資料,該第二積極層級是基於該第二分數以及該記憶體存取相關聯的該記憶體存取類型所得到。
- 如請求項12所述的處理器運作方法,其中,該第一以及第二預取器基於預定記憶體存取選擇的聽從彼此。
- 如請求項12所述的處理器運作方法,其中該第一以及第二預取器基於預定記憶體區域選擇的聽從彼此。
- 如請求項12所述的處理器運作方法,與該多個記憶體存取類型相關聯的記憶體存取的來源至少包括以下該的其中三種:整數指令、符點數指令、尋訪、融合指令、 載入指令、儲存指令、段描述符負載、媒體指令、非暫態存取指令、堆疊存取指令、多個不同來源的預取、位元址修正載入/儲存指令、具有多個不同處理器特權級別的指令、不對稱檢查載入指令、零填充載入指令以及由遮罩傳送指令產生的非暫態儲存指令。
- 如請求項19所述的處理器運作方法,其中該多個不同來源的預取至少包括以下該的其中兩種:架構預取指令、硬體預取器以及非架構保證預取指令。
- 一種電腦程式產品,被編碼於至少一非暫態電腦可用媒體以使用於計算裝置,該電腦程式產品包括:實現於該媒體中的電腦可用程式碼,為了指定一處理器,該電腦可用程式碼包括:第一程式碼以指定根據記憶體存取預取資料的第一預取器以及第二預取器,其中每一該記憶體存取與多個預定記憶體存取類型之其中之一相關聯;以及第二程式碼用以指定一表格,此表格保存:第一分數用以表示第一預取器根據多個預定記憶體存取類型預取資料的效益;以及第二分數用以表示第二預取器根據多個預定記憶體存取類型預取資料的效益;以及 其中第一以及第二預取器根據表格中的個別的分數以及相關聯的記憶體存取的記憶體存取類型而選擇的在預取資料時聽從彼此。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/IB2014/003226 WO2016097809A1 (en) | 2014-12-14 | 2014-12-14 | Multiple data prefetchers that defer to one another based on prefetch effectiveness by memory access type |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201631479A TW201631479A (zh) | 2016-09-01 |
TWI564719B true TWI564719B (zh) | 2017-01-01 |
Family
ID=56126009
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW104139170A TWI564719B (zh) | 2014-12-14 | 2015-11-25 | 具有多個資料預取器的處理器、所述處理器的操作方法及所述處理器操作的電腦程式產品 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9817764B2 (zh) |
EP (1) | EP3129887B1 (zh) |
CN (1) | CN105700857B (zh) |
TW (1) | TWI564719B (zh) |
WO (1) | WO2016097809A1 (zh) |
Families Citing this family (52)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10459892B2 (en) | 2014-04-23 | 2019-10-29 | Qumulo, Inc. | Filesystem hierarchical aggregate metrics |
US10387318B2 (en) * | 2014-12-14 | 2019-08-20 | Via Alliance Semiconductor Co., Ltd | Prefetching with level of aggressiveness based on effectiveness by memory access type |
US9836480B2 (en) | 2015-01-12 | 2017-12-05 | Qumulo, Inc. | Filesystem capacity and performance metrics and visualizations |
US11132336B2 (en) | 2015-01-12 | 2021-09-28 | Qumulo, Inc. | Filesystem hierarchical capacity quantity and aggregate metrics |
US9747215B2 (en) * | 2015-12-14 | 2017-08-29 | Via Alliance Semiconductor Co., Ltd. | Stride reference prefetcher |
US10218811B1 (en) * | 2016-06-29 | 2019-02-26 | Oath (Ameericas) Inc. | Systems and methods for utilizing unused network capacity for prefetch requests |
US10095729B2 (en) | 2016-12-09 | 2018-10-09 | Qumulo, Inc. | Managing storage quotas in a shared storage system |
US10387320B2 (en) * | 2017-05-12 | 2019-08-20 | Samsung Electronics Co., Ltd. | Integrated confirmation queues |
US10453547B2 (en) * | 2017-06-16 | 2019-10-22 | Seagate Technologies Llc | Monitoring a memory for retirement |
US10713053B2 (en) * | 2018-04-06 | 2020-07-14 | Intel Corporation | Adaptive spatial access prefetcher apparatus and method |
US10073856B1 (en) | 2018-04-30 | 2018-09-11 | Qumulo, Inc. | Continuous replication for secure distributed filesystems |
US10942854B2 (en) | 2018-05-09 | 2021-03-09 | Micron Technology, Inc. | Prefetch management for memory |
US11010092B2 (en) | 2018-05-09 | 2021-05-18 | Micron Technology, Inc. | Prefetch signaling in memory system or sub-system |
US10754578B2 (en) | 2018-05-09 | 2020-08-25 | Micron Technology, Inc. | Memory buffer management and bypass |
US10714159B2 (en) | 2018-05-09 | 2020-07-14 | Micron Technology, Inc. | Indication in memory system or sub-system of latency associated with performing an access command |
US11360936B2 (en) | 2018-06-08 | 2022-06-14 | Qumulo, Inc. | Managing per object snapshot coverage in filesystems |
US11481250B2 (en) * | 2018-06-29 | 2022-10-25 | Advanced Micro Devices, Inc. | Cooperative workgroup scheduling and context prefetching based on predicted modification of signal values |
US10621099B2 (en) * | 2018-06-29 | 2020-04-14 | Intel Corporation | Apparatus, method, and system for enhanced data prefetching based on non-uniform memory access (NUMA) characteristics |
US10621147B1 (en) | 2018-12-19 | 2020-04-14 | Qumulo, Inc. | Replicating file system objects in distributed file systems |
US10534758B1 (en) | 2018-12-20 | 2020-01-14 | Qumulo, Inc. | File system cache tiers |
US10474635B1 (en) * | 2018-12-21 | 2019-11-12 | Qumulo, Inc. | Dynamic evaluation and selection of file system pre-fetch policy |
US11151092B2 (en) | 2019-01-30 | 2021-10-19 | Qumulo, Inc. | Data replication in distributed file systems |
US10614033B1 (en) * | 2019-01-30 | 2020-04-07 | Qumulo, Inc. | Client aware pre-fetch policy scoring system |
TWI697779B (zh) * | 2019-02-20 | 2020-07-01 | 慧榮科技股份有限公司 | 資料儲存裝置與資料處理方法 |
CN110308920B (zh) * | 2019-05-31 | 2023-05-12 | 北京控制工程研究所 | 一种不影响正常运行的在轨修改星上产品软件的方法 |
US11455252B2 (en) * | 2019-06-26 | 2022-09-27 | Advanced Micro Devices, Inc. | Multi-class multi-label classification using clustered singular decision trees for hardware adaptation |
US10725977B1 (en) | 2019-10-21 | 2020-07-28 | Qumulo, Inc. | Managing file system state during replication jobs |
US10860372B1 (en) | 2020-01-24 | 2020-12-08 | Qumulo, Inc. | Managing throughput fairness and quality of service in file systems |
US10795796B1 (en) | 2020-01-24 | 2020-10-06 | Qumulo, Inc. | Predictive performance analysis for file systems |
US11151001B2 (en) | 2020-01-28 | 2021-10-19 | Qumulo, Inc. | Recovery checkpoints for distributed file systems |
US10860414B1 (en) | 2020-01-31 | 2020-12-08 | Qumulo, Inc. | Change notification in distributed file systems |
US10936538B1 (en) | 2020-03-30 | 2021-03-02 | Qumulo, Inc. | Fair sampling of alternate data stream metrics for file systems |
US10936551B1 (en) | 2020-03-30 | 2021-03-02 | Qumulo, Inc. | Aggregating alternate data stream metrics for file systems |
US11775481B2 (en) | 2020-09-30 | 2023-10-03 | Qumulo, Inc. | User interfaces for managing distributed file systems |
CN112256205B (zh) * | 2020-10-28 | 2024-06-25 | 中国科学院微电子研究所 | 非易失缓存数据预取方法、装置、电子设备及存储介质 |
US11567776B2 (en) * | 2020-11-03 | 2023-01-31 | Centaur Technology, Inc. | Branch density detection for prefetcher |
US12045169B2 (en) | 2020-12-23 | 2024-07-23 | Advanced Micro Devices, Inc. | Hardware configuration selection using machine learning model |
US11157458B1 (en) | 2021-01-28 | 2021-10-26 | Qumulo, Inc. | Replicating files in distributed file systems using object-based data storage |
US11461241B2 (en) | 2021-03-03 | 2022-10-04 | Qumulo, Inc. | Storage tier management for file systems |
US11132126B1 (en) | 2021-03-16 | 2021-09-28 | Qumulo, Inc. | Backup services for distributed file systems in cloud computing environments |
US11567660B2 (en) | 2021-03-16 | 2023-01-31 | Qumulo, Inc. | Managing cloud storage for distributed file systems |
US11669255B2 (en) | 2021-06-30 | 2023-06-06 | Qumulo, Inc. | Distributed resource caching by reallocation of storage caching using tokens and agents with non-depleted cache allocations |
US11294604B1 (en) | 2021-10-22 | 2022-04-05 | Qumulo, Inc. | Serverless disk drives based on cloud storage |
US11354273B1 (en) | 2021-11-18 | 2022-06-07 | Qumulo, Inc. | Managing usable storage space in distributed file systems |
US20230236985A1 (en) * | 2022-01-21 | 2023-07-27 | Centaur Technology, Inc. | Memory controller zero cache |
US11599508B1 (en) | 2022-01-31 | 2023-03-07 | Qumulo, Inc. | Integrating distributed file systems with object stores |
US11722150B1 (en) | 2022-09-28 | 2023-08-08 | Qumulo, Inc. | Error resistant write-ahead log |
US11729269B1 (en) | 2022-10-26 | 2023-08-15 | Qumulo, Inc. | Bandwidth management in distributed file systems |
US11966592B1 (en) | 2022-11-29 | 2024-04-23 | Qumulo, Inc. | In-place erasure code transcoding for distributed file systems |
TWI826216B (zh) * | 2022-12-29 | 2023-12-11 | 瑞昱半導體股份有限公司 | 記憶體控制系統與記憶體控制方法 |
US11934660B1 (en) | 2023-11-07 | 2024-03-19 | Qumulo, Inc. | Tiered data storage with ephemeral and persistent tiers |
US11921677B1 (en) | 2023-11-07 | 2024-03-05 | Qumulo, Inc. | Sharing namespaces across file system clusters |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW201224923A (en) * | 2010-06-23 | 2012-06-16 | Intel Corp | Region based technique for accurately predicting memory accesses |
TW201346556A (zh) * | 2012-03-20 | 2013-11-16 | Apple Inc | 於階層式快取處理器中之協調預取 |
US20140052927A1 (en) * | 2012-08-17 | 2014-02-20 | Advanced Micro Devices, Inc. | Data cache prefetch hints |
US20140149678A1 (en) * | 2012-11-27 | 2014-05-29 | Nvidia Corporation | Using cache hit information to manage prefetches |
US20140149668A1 (en) * | 2012-11-27 | 2014-05-29 | Nvidia Corporation | Prefetching according to attributes of access requests |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6985999B2 (en) * | 2001-10-23 | 2006-01-10 | Ip-First, Llc | Microprocessor and method for utilizing disparity between bus clock and core clock frequencies to prioritize cache line fill bus access requests |
US20040243767A1 (en) | 2003-06-02 | 2004-12-02 | Cierniak Michal J. | Method and apparatus for prefetching based upon type identifier tags |
KR100987832B1 (ko) | 2004-08-17 | 2010-10-13 | 엔비디아 코포레이션 | 캐시 메모리에 연결된 메모리로의 다양한 액세스 유형의예측을 관리하는 시스템, 장치 및 방법 |
US8079031B2 (en) | 2005-10-21 | 2011-12-13 | Intel Corporation | Method, apparatus, and a system for dynamically configuring a prefetcher based on a thread specific latency metric |
US20070204267A1 (en) | 2006-02-28 | 2007-08-30 | Cole Michael F | Throttling prefetching in a processor |
US7657729B2 (en) * | 2006-07-13 | 2010-02-02 | International Business Machines Corporation | Efficient multiple-table reference prediction mechanism |
US8667225B2 (en) * | 2009-09-11 | 2014-03-04 | Advanced Micro Devices, Inc. | Store aware prefetching for a datastream |
US8327077B2 (en) * | 2009-11-13 | 2012-12-04 | International Business Machines Corporation | Method and apparatus of parallel computing with simultaneously operating stream prefetching and list prefetching engines |
US8762649B2 (en) | 2010-03-29 | 2014-06-24 | Via Technologies, Inc. | Bounding box prefetcher |
CN102214146B (zh) | 2011-07-28 | 2013-04-10 | 中国人民解放军国防科学技术大学 | 步长自适应的Cache预取方法及其系统 |
US20130208796A1 (en) | 2012-02-15 | 2013-08-15 | Amichay Amitay | Cache prefetch during a hierarchical motion estimation |
US9176878B2 (en) | 2012-03-15 | 2015-11-03 | Oracle International Corporation | Filtering pre-fetch requests to reduce pre-fetching overhead |
US9304927B2 (en) * | 2012-08-27 | 2016-04-05 | Oracle International Corporation | Adaptive stride prefetcher |
US20140108766A1 (en) | 2012-10-17 | 2014-04-17 | Advanced Micro Devices, Inc. | Prefetching tablewalk address translations |
US9483406B2 (en) * | 2013-03-11 | 2016-11-01 | Via Technologies, Inc. | Communicating prefetchers that throttle one another |
CN103235764B (zh) | 2013-04-11 | 2016-01-20 | 浙江大学 | 线程感知多核数据预取自调方法 |
US10387318B2 (en) * | 2014-12-14 | 2019-08-20 | Via Alliance Semiconductor Co., Ltd | Prefetching with level of aggressiveness based on effectiveness by memory access type |
-
2014
- 2014-12-14 WO PCT/IB2014/003226 patent/WO2016097809A1/en active Application Filing
- 2014-12-14 EP EP14891605.9A patent/EP3129887B1/en active Active
- 2014-12-14 US US14/891,331 patent/US9817764B2/en active Active
-
2015
- 2015-11-20 CN CN201510810507.8A patent/CN105700857B/zh active Active
- 2015-11-25 TW TW104139170A patent/TWI564719B/zh active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW201224923A (en) * | 2010-06-23 | 2012-06-16 | Intel Corp | Region based technique for accurately predicting memory accesses |
TW201346556A (zh) * | 2012-03-20 | 2013-11-16 | Apple Inc | 於階層式快取處理器中之協調預取 |
US20140052927A1 (en) * | 2012-08-17 | 2014-02-20 | Advanced Micro Devices, Inc. | Data cache prefetch hints |
US20140149678A1 (en) * | 2012-11-27 | 2014-05-29 | Nvidia Corporation | Using cache hit information to manage prefetches |
US20140149668A1 (en) * | 2012-11-27 | 2014-05-29 | Nvidia Corporation | Prefetching according to attributes of access requests |
Also Published As
Publication number | Publication date |
---|---|
EP3129887B1 (en) | 2018-08-15 |
US20160357677A1 (en) | 2016-12-08 |
EP3129887A1 (en) | 2017-02-15 |
CN105700857A (zh) | 2016-06-22 |
CN105700857B (zh) | 2019-01-29 |
TW201631479A (zh) | 2016-09-01 |
EP3129887A4 (en) | 2017-07-26 |
WO2016097809A1 (en) | 2016-06-23 |
US9817764B2 (en) | 2017-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI564719B (zh) | 具有多個資料預取器的處理器、所述處理器的操作方法及所述處理器操作的電腦程式產品 | |
TWI596479B (zh) | 具有資料預取器的處理器及其運作方法 | |
EP3066572B1 (en) | Cache memory budgeted by chunks based on memory access type | |
JP6207766B2 (ja) | ヘテロジニアス置換ポリシーを用いるセット・アソシエイティブ・キャッシュ・メモリ | |
EP3129886B1 (en) | Dynamic cache replacement way selection based on address tag bits | |
EP3055775B1 (en) | Cache replacement policy that considers memory access type | |
US10719434B2 (en) | Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or a subset of its ways depending on the mode | |
US9798668B2 (en) | Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon the mode | |
EP3066571B1 (en) | Cache memory budgeted by ways on memory access type | |
TWI606338B (zh) | 以記憶體存取類型來分配的全關聯快取記憶體及其操作方法 |