TWI606338B - 以記憶體存取類型來分配的全關聯快取記憶體及其操作方法 - Google Patents
以記憶體存取類型來分配的全關聯快取記憶體及其操作方法 Download PDFInfo
- Publication number
- TWI606338B TWI606338B TW104139179A TW104139179A TWI606338B TW I606338 B TWI606338 B TW I606338B TW 104139179 A TW104139179 A TW 104139179A TW 104139179 A TW104139179 A TW 104139179A TW I606338 B TWI606338 B TW I606338B
- Authority
- TW
- Taiwan
- Prior art keywords
- mat
- memory
- cache memory
- array
- allocation unit
- Prior art date
Links
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/0893—Caches characterised by their organisation or structure
-
- 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/0877—Cache access modes
-
- 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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- 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/0864—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
-
- 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/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0873—Mapping of cache memory to specific storage devices or parts thereof
-
- 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/0877—Cache access modes
- G06F12/0882—Page mode
-
- 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/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- 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
-
- 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/122—Replacement control using replacement algorithms of the least frequently used [LFU] type, e.g. with individual count value
-
- 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/123—Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
-
- 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
- G06F2212/1021—Hit rate 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/604—Details relating to cache allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
本發明是有關於一種快取記憶體,尤其是有關於一種以記憶體存取類型來分配的全關聯快取記憶體。
本發明的一方面提出了一種全關聯快取記憶體,包括:具有存儲元件的陣列以及分配單元。分配單元用以分配陣列的存儲元件以因應於在快取記憶體中未命中的記憶體存取。每個記憶體存取具有多個預定記憶體存取類型(MAT)其中一個相關聯的MAT。MAT由快取記憶體所接收。陣列的每一個有效存儲元件具有該多個預定MAT其中一個相關聯的MAT。對於多個預定MAT中的每一個MAT來說,分配單元保持:計數器,用以計數關聯於MAT的陣列的有效存儲元件的數目;以及對應的閾值。分配單元分配陣列的任何一個存儲元件以因應於在快取記憶體中未命中的記憶體存取,除非記憶體存取的MAT的計數已達到對應的閾值,在此情況下,分配單元替換關聯於快取記憶體的MAT的有效存儲元件的其中一個。
本發明的另一方面提出了一種用於操作全關聯快取記憶體的方法。全關聯快取記憶體包括具有存儲元件的陣列和分配單元。分配單
元用以分配陣列的存儲元件以因應於在快取記憶體中未命中的記憶體存取。每個記憶體存取具有多個預定記憶體存取類型(MAT)其中一個相關聯的MAT。方法包括:為陣列的有效存儲元件的每一個,保持多個預定MAT中其中一個相關聯的MAT;為陣列的有效存儲元件的每一個保持:計數器,用以計數關聯於MAT的陣列的有效存儲元件的數目;以及對應的閾值;以及分配陣列的任何一個存儲元件以因應於在快取記憶體中未命中的記憶體存取,除非記憶體存取的MAT的計數已達到對應的閾值,在此情況下,替換關聯於快取記憶體的MAT的有效存儲元件的其中一個。
本發明的再一方面提出了一種全關聯快取記憶體,包括:具有存儲元件的陣列、分配單元以及映射。分配單元用以分配陣列的存儲元件以因應於在快取記憶體中未命中的記憶體存取。每個記憶體存取具有多個預定記憶體存取類型(MAT)其中一個相關聯的MAT。MAT由快取記憶體所接收。陣列的每一個有效存儲元件具有多個預定MAT其中一個相關聯的MAT。映射用以將多個預定MAT映射到兩個或兩個以上的MAT群組。對於多個MAT群組中的每一個MAT群組來說,分配單元保持:計數器,用以計數關聯於該MAT群組的陣列的有效存儲元件的數目;以及對應的閾值。分配單元分配陣列的任何一個存儲元件以因應於在快取記憶體中未命中的記憶體存取,除非記憶體存取的MAT群組的計數已達到對應的閾值,在此情況下,分配單元替換關聯於快取記憶體的MAT群組的有效存儲元件的其中一個。
本發明的再一方面提出了一種用於操作全關聯快取記憶體的方法。全關聯快取記憶體包括具有存儲元件的陣列和分配單元。分配單元用以分配陣列的存儲元件以因應於在快取記憶體中未命中的記憶體存
取。每個記憶體存取具有多個預定記憶體存取類型(MAT)其中一個相關聯的MAT。方法包括:為陣列的有效存儲元件的每一個,保持多個預定MAT中其中一個相關聯的MAT;為多個預定MAT中的每一個MAT保持:計數器,用以計數關聯於MAT的陣列的有效存儲元件的數目;以及對應的閾值;以及因應於在快取記憶體中未命中的記憶體存取:將多記憶體存取的MAT映射到兩個或兩個以上的MAT群組;以及分配陣列的任何一個存儲元件,除非記憶體存取的MAT群組的計數已達到對應的閾值,在此情況下,替換關聯於快取記憶體的MAT群組的有效存儲元件的其中一個。
05‧‧‧分路
1001、1401、1501、1701、1909、2909‧‧‧群組
101、2314、3114‧‧‧記憶體存取類型(MAT)
102、1002、1402、1502、1702、1902、2302、3102‧‧‧集合關聯快取記憶體
104‧‧‧陣列
106‧‧‧分配單元
108、1008、1508、1708、1908、2308、2908、3108‧‧‧映射
1104、2104‧‧‧集合群組編號
1106‧‧‧群組選取邏輯
112‧‧‧存儲元件
114、1914‧‧‧替換信息、或替換策略位元、或替換位元
116‧‧‧替換分路指定符
122、1002、1402、1502、1702、1902、2302、3102‧‧‧記憶體存取
124‧‧‧命中信號
126‧‧‧更新輸入
1500‧‧‧索引
1503、1703‧‧‧組塊
1901‧‧‧包裹
2001‧‧‧包裹指定符
2002‧‧‧有效位元
2008‧‧‧替換方案
2012‧‧‧替換位元指標符
2021‧‧‧三重包裹指定符
2291‧‧‧集合群組
2304‧‧‧指標符
2306‧‧‧計數器
2308、2911‧‧‧閾值
2316‧‧‧替換索引
2407‧‧‧集合
302、1102、2502‧‧‧多功器(MUX)
304、2004、2006‧‧‧向量
3377‧‧‧MAT優先順序
3900‧‧‧處理器
3922‧‧‧指令快取
3923‧‧‧指令解碼器
3924‧‧‧指令調度器
3926‧‧‧執行單元
3928‧‧‧記憶體子系統
402、404、502、504、602、606、702、704、902、904、906、1202、1204、1302、1304、1602、1604、1606、1608、1612、1812、2202、2204、2212、2214、2216、2218、2222、2602、2604、2702、2704、2706、2708、2712、2308、2714、2716、2718、2802、2804、3002、3004、3006、308、3012、3014、3016、3018、3302、3304、3306、3308、3312、3314、3316、3318、3322、3324、3326、3402、3404、3406、3602、3604、3606、3608、3612、3614、3702、3704、
3706、3708、3712、3714、3716‧‧‧方塊
802‧‧‧階段識別字
804‧‧‧階段檢測器
806‧‧‧映射更新單元
808‧‧‧映射信息
圖1為一種集合關聯快取記憶體的方塊示意圖。
圖2為映射108,所述映射108將MAT映射到圖1的快取記憶體102的分路子集。
圖3為圖1的快取記憶體102其部分之更詳細方塊示意圖。
圖4為一種處理器其運作流程圖,所述處理器具有圖1的快取記憶體102。
圖5為圖1的快取記憶體102其運作流程圖。
圖6為根據本發明一實施例之圖5的方塊504其運作流程圖。
圖7為一種系統其運作流程圖,所述系統具有一種處理器,所述處理器具有圖1的快取記憶體102。
圖8為一種處理器的元件示意圖,所述處理器包括圖1的快取記憶體102。
圖9為圖8的處理器其運作流程圖,所述處理器具有圖1的快取記憶體102。
圖10為集合關聯快取記憶體1002之方塊示意圖。
圖11為圖10的快取記憶體1002其部分之更詳細方塊示意圖。
圖12為一種處理器其運作流程圖,所述處理器具有圖1之快取記憶體1002。
圖13為圖10的快取記憶體1002其運作流程圖。
圖14為根據本發明之一替代實施例之集合關聯快取記憶體1402之方塊示意圖。
圖15為根據本發明之一替代實施例之集合關聯快取記憶體1502之方塊示意圖。
圖16為圖15的快取記憶體1502其運作流程圖。
圖17為根據本發明之一替代實施例之集合關聯快取記憶體1702之方塊示意圖。
圖18為圖17的快取記憶體1702其運作流程圖。
圖19為集合關聯快取記憶體1902之方塊示意圖。
圖20為根據本發明之一實施例之包裹指定符2001和三重包裹指定符2021之方塊示意圖。
圖21為圖19的快取記憶體1902其部份更詳細之方塊示意圖。
圖22A為一種處理器其運作流程圖,所述處理器具有圖19的快取記憶體1902。
圖22B為根據本發明之一實施例之圖19的快取記憶體1902其運作流程圖。
圖22C為圖19的快取記憶體1902其方塊示意圖,所述快取記憶體1902採用異質替換策略。
圖22D為根據本發明之一實施例之圖19的快取記憶體1902其方塊示意圖,所述快取記憶體1902其採用異質替換策略。
圖22E為根據本發明之一實施例之圖19的快取記憶體1902其方塊示意圖,所述快取記憶體1902其採用異質替換策略。
圖23為全關聯快取記憶體2302之方塊示意圖。
圖24為根據本發明之一實施例之從MATs之一者到圖23的閾值2308其映射之示意圖。
圖25為圖1的快取記憶體102其部分之更詳細之方塊示意圖。
圖26為一種處理器其運作流程圖,所述處理器具有圖23的快取記憶體2302。
圖27為圖23的快取記憶體2302其運作流程圖。
圖28為圖23之全關聯快取記憶體2302其運作流程圖。
圖29為根據本發明一實施例之從MATs之一者到MAT群組2909的映射2908與從MAT群組2909到閾值2911的映射之示意圖。
圖30為圖23的快取記憶體2302其運作流程圖。
圖31為集合關聯快取記憶體3102之方塊示意圖。
圖32為根據本發明之一實施例之從MATs之一者到圖31的優先順序3108其映射之示意圖。
圖33為考慮到快取線其MAT的快取線替換策略流程圖。
圖34為用於程式和程式階段的映射其生成流程圖。
圖35為快取存取圖形和從此圖形提取的資料示意圖。
圖36為程式其階段分析之流程圖。
圖37為蠻力方法之流程圖,所述蠻力方法用於判定處理器其可配置方面(例如,其快取記憶體或預取器)的好的配置或映射。
圖38為分析結果之圓形分格統計圖表3801。
圖39為處理器3900之方塊示意圖。
請參考圖1,其所繪示為一集合關聯快取記憶體(set associative cache memory)102之方塊示意圖。快取記憶體102包括由存儲元件(storage element)112所形成的陣列(array)104。陣列104具有多個分路(way)。在圖1的例子中,陣列104具有16個分路,其分別為分路0-15。陣列104亦具有多個集合(set)。快取記憶體102用以接收記憶體存取(memory access)122。記憶體存取122包括記憶體位址(memory address)和記憶體存取類型(memory access type(MAT))101。快取記憶體102配置於處理器(processor)內,例如處理器3900,其相關說明請參照圖39。
記憶體存取類型(MAT)是指記憶體存取的特徵(characteristic),其衍生於生成此記憶體存取的指令(instruction)之特徵、或是生成此記憶體存取的處理器的功能單元(functional unit)之類型(type)、或是當此記憶體存取生成時,此時處理器的操作模式(operating mode)、或是正被記憶體存取所存取的資料類型(data type)。
所述指令的特徵例如是被指令所指定的操作(operation)。所述處理器的功能單元其類型例如是加載單元(load unit)、存儲單元(store unit)、整數單元(integer unit)、浮點單元(floating point unit)、媒體單元(media unit)、分頁表尋訪引擎(tablewalk engine)、指令獲取單元(instruction fetch unit)和硬體預取器(hardware prefetcher)(例如,指令預取器(instruction prefetcher)、資料流程預取器(stream prefetcher)、框預取器(box prefetcher)、L1D預取器(L1D prefetcher))。所述處理器的操作模式例如是監控模式(supervisor
mode)(或特權模式(privileged mode),或x86 ring 0),系統管理模式(system management mode)(例如,x86的系統管理模式(SMM)、保護模式(protected mode)(例如,x86真實模式(x86 Real Mode)、虛擬x86模式(Virtual x86 mode)、保護模式、長模式(long mode))、虛擬機器模式(virtual machine mode)(例如,x86 Virtual Machine eXtensions(VMX))。所述被存取的資料類型例如是代碼(code)、描述符表(descriptor table)(例如,x86指令集架構全域描述符表(x86 instruction set architecture global descriptor table(GDT))和中斷描述符表(interrupt descriptor table,IDT))、頁符表(page table)、系統管理模式(例如,x86 SMM)狀態保存空間(state save space)、虛擬機器模式(例如,x86 VMX)、狀態保存空間、堆疊(stack)、壓縮資料(compressed data)、常數(constant)、浮點、加密金鑰(cryptographic key)、加密有效載荷(cryptographic payload)和連結表(linked list)。
由指令獲取單元所生成的記憶體存取可被稱為代碼獲取(code fetch),而由硬體指令預取器(hardware instruction prefetcher)所生成的記憶體存取可被稱為代碼預獲取(code prefetch)。
在一實施例中,指令包括由處理器的指令解譯器(instruction transistor)所生成的微指令(microinstruction)。指令解譯器用以將結構指令(architectural instruction)(例如,x86指令集結構指令(x86 instruction set architecture instruction))解譯成微指令。
記憶體存取102內位址的一部分,例如索引(index),其用以選擇多個集合的其中之一。每一集合都包括存儲空間(storage),其用以持有(hold)替換信息(replacement information)114、或替換策略位元(replacement policy bits)114、或替換位元(replacement bits)114。當提供至分配單元(allocation unit)106的命中信號(hit signal)124其具有偽值(false value)而指出記憶體存取122在快取記憶體102中未能命中(miss)時,分配單元106使用替換資訊114、替換策略位元114或替換位元114來判定所選定集合(selected set)中那一個分路會被替換(replace)或分配(allocate into)。具體的,分配單元106在替換分路指定符(replacement way indicator)116中指出那一個分路會被替換。在不同的實施例中,替換位元114可以具有不同數目的位元以指示不同的資訊。舉例來說,
在一實施例中,替換位元114具有15位元,其用於指出集合的pLRU(pseudo-least recently used)分路。在另一實施例中,替換位元114具有16位元,其為獨熱向量(one-hot vector)而用以指出最後被取代的分路。所述最後被取代的分路可用於輪叫替換策略(round-robin replacement policy)或替換方案(replacement scheme)。在另一實施例中,替換位元114用以指出集合的真LRU分路。在另一實施例中,替換位元114可被用於修改後pLRU替換方案(modified pLRU replacement scheme);當在更新替換位元114時,所述方案還考慮到那一個核(core)(在多核處理器(multi-core processor)中)擁有快取線(cache line)。在另一實施例中,替換位元114可被用於修改後pLRU替換方案(modified pLRU replacement scheme);當在更新替換位元114時,所述方案還考慮到記憶體存取122的MAT 101,舉例來說,如果MAT 101是已知(例如,通過離線分析(offline analysis))而趨向於非必要的,則替換方案更新替換位元114,以使得被替換的分路被插入於較中間位置而非最近較常用的某個位置。
陣列104中的每個存儲元件112用以持有(hold)快取線數據(data)、快取線標籤(tag)、和快取線狀態(status),例如,MESI狀態。每個集合包括對應於每個分路(例如,共16個分路)的一個存儲元件112。在一實施例中,快取線是64位元組(byte)的數據,但本發明不以此為限。如上所述,每個集合包括替換位元114。在一實施例中,陣列104是一個單一陣列(single array),其用以持有快取線資料、標籤、狀態以及替換位元114。在另一實施例中,陣列104具有兩個陣列,第一陣列用以持有快取線資料(數據陣列(data array))而第二陣列用以持有標籤、狀態以及替換位元114(標籤陣列(tag array))。在另一實施例中,第三陣列(替換陣列(replacement array))用以持有替換位114
而非標籤陣列。
在一實施例中,分配單元106是快取記憶體102其一個或多個標籤管線(tag pipeline)的一部份。所述標籤管線用以從,例如處理核心(processing core)(例如是從一處理核心的記憶體子系統(memory subsystem),例如是載入/存儲列(load/store queue)或專用快取記憶體(private cache memories)),接收記憶體存取並存取陣列104以進行記憶體存取,例如是從陣列104讀取資料或將資料寫入到陣列104。優選地,標籤管線是一種多級(stage)的管線,非常類似於處理器的管道級(pipeline stage)。每一級的管道用以進行記憶體存取的子操作(sub-operation)。所述子操作例如是使具有指定集合和分路的條目(entry)無效;為位址的狀態詢問(query)標籤陣列;如果位址不存在,基於所選定集合其替換位元來判定那個分路來做分配;更新指定集合和分路其狀態;如果位址存在,生成用以從資料陣列中讀取資料的請求;如果位址存在,生成用以寫入資料至資料陣列中的請求等等。記憶體存取的全部操作可由所述多個子操作一起完成。有益地,通過具有多級的管線,當有需要時分配單元106可以執行一系列的子操作以完成相對複雜的替換方案。優選地,分配單元106更包括轉發網路(forwarding network),其用以轉發較後級管道的結果至較前級管道。
快取記憶體102還包括映射(mapping)108,其用以將MAT映射到分路子集(way subset)。當記憶體存取122在快取記憶體102中未能命中時,映射108被提供至分配單元106以用於判定所選定集合的那一個分路來做分配。一般來說,分配單元106會嘗試分配快取記憶體102內無效(invalid)的分路;然而,有時也會替換有效(valid)的分路來做分配,因此這類的分配也被稱為替換。更具體地,對於多個MAT中的每一個來說,映射106將MAT關聯到陣列104其分路的
一個子集。每個MAT可具有不同的關聯子集;然而,多個MAT也可以關聯到相同子集。當記憶體存取122在快取記憶體102中未能命中時,分配單元106分配與記憶體存取122其MAT 101相關聯的分路子集。相較於習知的快取記憶體採用的分配方法,例如,分配LRU分路而不考慮到記憶體存取的MAT,本發明的快取記憶體102更有效,例如,具有較高的命中率。具體地,映射108可以增加將較不太需要的快取線作替換的可能性。在一實施例中,有益地,映射108可以藉由執行程式(program)的離線分析、或在程式階段(program phase))的特別需求而決定子集合、或是與每個MAT相關的快取記憶體102安排方式,使得當具有MAT 101的記憶體存取122在快取記憶體102中未能命中時,分配單元106僅需要分配所選定組的分路,而所述選定組的分路存在於與MAT 101相關聯的子集中。映射108可通過更新輸入(update input)126而被更新。
請參照圖10、11、14、15、17、19、23和25,其為介紹快取記憶體的多個實施例之示意圖。為避免重複上述冗長的描述,此處值得理解的是,圖10、11、14、15、17、19、23和25所介紹的快取記憶體在多個方面與圖1的快取記憶體102相似,相關實施例將只介紹其中的不同處。類似的,具有圖10、11、14、15、17、19、23和25的快取記憶體的處理器與具有圖1的快取記憶體102的處理器其說明類似。
優選地,具有快取記憶體102的處理器是多核處理器,而在多核處理器中,多個核心共用快取記憶體102。然而,本發明亦適用於單核處理器。此外,快取記憶體102可以是處理器的快取層次(cache hierarchy)的任何層級(level)。然而,優選地,快取記憶體102是處理器的末級快取(last-level cache,LLC)。優選地,處理器包括指令
快取(instruction cache),其用以提供指令至指令解碼器(instruction decoder)。指令解碼器用以解碼(decode)指令並將解碼後的指令提供至指令調度器(instruction dispatcher)。指令調度器用以將指令調度給執行單元(execution unit)來執行。優選地,處理器的微結構(microarchitecture)是超純量(superscalar)和非循序執行(out-of-order execution),然而本發明並不以此為限。在另一實施例中,指令調度器還包括指令調度器(instruction scheduler),其用以以超純量和非循序方式將指令調度(scheduling)給多個執行單元。優選地,處理器還包括結構暫存器(architectural registers)與非結構暫存器(non-architectural registers)。結構暫存器用以持有處理器的結構狀態(architectural state)。優選地,處理器還包括暫存器別名表(register alias table)(RAT)和排序緩衝器(reorder buffer)(ROB)。暫存器別名表(RAT)用以執行暫存器重命名(register renaming)。排序緩衝器(ROB)以程式順序(program order)來引退指令(retire instruction)。優選地,指令調度器包括指令解譯器(instruction translator),其用以將結構指令解譯為可被執行單元所執行的處理器的微指令集結構的微指令。處理器還包括記憶體子系統,其用以提供記憶體操作元(memory operand)至執行單元並從執行單元接收記憶體操作元。優選地,記憶體子系統包括一個或多個載入單元,一個或多個存儲單元,載入列,存儲列,用於向記憶體請求快取線的填充列(fill queue),用於窺探(snooping)與處理器相互通信(in communication)的記憶體匯流排(memory bus)的窺探列(snoop queue),和其他相關的功能單元。記憶體子系統生成快取記憶體102的記憶體存取122。
請參照圖2,其所繪示為根據本發明一實施例之映射108,所述映射108將MAT映射到圖1的快取記憶體102的分路子集。圖2所例示的映射108包括32個MAT,其對應於表1。圖2所例示
的映射108轉載於下方的表2。
以圖2為例子,當MAT 101為store_nt的記憶體存取122在快取記憶體102中未能命中時,分配單元106僅分配所選定集合的分路0、4或8,亦即,僅分配經由映射108而關聯於store_nt MAT的分路子集內的分路。在另一個例子中,當MAT 101為load_descr的記憶體存取122在快取記憶體102中未能命中時,分配單元106僅分配所選定集合的分路15,亦即,僅分配經由映射108而關聯於load_descr MAT的分路子集內的分路。
在一實施例中,映射108包括具16位元向量(16-bit vector)的陣列。所述向量的每一位元對應於快取記憶體102其16個分路之一。優選地,當對應的分路包含於子集時,位元為1;而當對應的分路不包含於子集時,位元為0。所述陣列包括32個向量,每一向
量用於一個MAT,且所述32個向量以MAT編號來索引。然而,本發明並不以此為限。在其他實施例中,映射108可具有其它形式,其相關說明請參照圖3和6。
此處值得理解的是,雖然圖2(和表2)描述了一組特定的MAT以及將MAT關聯到其對應分路子集的特定映射,但前述的實施例僅用於示例之目的,本發明亦適用於具不同MAT組合和不同的映射。事實上,在一實施例中,當處理器在運作時,映射可基於正在運行的程式或程式階段而動態地被更新(例如,通過圖1的更新輸入126),其更詳細的相關內容請參照圖7-9。
請參照圖3,其所繪示為圖1的快取記憶體102其部分之更詳細方塊示意圖。在圖3的實施例中,圖1的映射108包括向量304,其用於32個MAT中的每一個。多功器(MUX)302用以接收32個向量304並基於記憶體存取122其MAT指定符101的值來選取32個向量304的其中之一,選定的向量304被提供至圖1的分配單元106。分配單元106還接收圖1中選定集合的替換位元114,所述選定集合是指在快取記憶體102中由記憶體存取122記憶體位址的索引所選取的集合。基於選定的向量304和替換位元114,分配單元106生成圖1的替換分路116。分配單元106還基於替換分路116的值來更新替換位元114。舉例來說,在一實施方案中,替換位元114是pLRU向量,其用以指示選定集合裡所有分路中的pLRU分路。在其它例子中,替換位元114是真LRU向量或輪叫(round-robin)向量。
在一實施例中,向量304為位元向量(bit vector),其包括一個相應位元用於快取記憶體102的每一分路(例如,16個分路)。當位元值為真,代表其對應的分路包含於相關聯MAT的子集;當位元值為偽,代表其對應的分路不包含於相關聯MAT的子集。在一替
代實施例中,向量304包括一對遮照(mask),其對pLRU向量的替換位元114進行布耳運算,相關說明請參照圖6。
在一替代實施例中,快取記憶體102可以包括邏輯(logic),其用以將具有較大數目(例如32)的MAT映射到具有較小數目(例如4)的MAT群組(MAT group)。舉例來說,在圖3的實施例中,MAT分組邏輯(MAT grouping logic,未示出)接收MAT 101且輸出MAT群組編號。MAT群組編號可作為選取輸入(selection input)而被提供至多功器(MUX)302(而非MAT 101)。MAT分組邏輯將這32個MAT的每一個映射到這4個MAT群組之一。MAT分組邏輯可以隨著映射108而被更新。映射108僅包括四個向量304(而非32個),且多功器(MUX)302選取這四個向量304的其中之一並提供給分配單元。本實施例中可有益地減少硬體成本。MAT數目的減少可能以可接受效率做交換,特別是對那些記憶體存取特徵為聚集於不同MAT群組的程式而言更是如此。MAT分組邏輯可適用於本發明的各種實施例,因而減少所需的硬體數目。再者,MAT數目的減少與實施例所包含群組呈倍數相關,如圖10-22所示。而將MAT映射到MAT群組的實施例請參考圖29-30。
請參照圖4,其所繪示為一處理器其運作流程圖,所述處理器具有圖1的快取記憶體102。所述流程開始於方塊402。
在方塊402中,處理器接收映射。所述映射將多個MAT(例如表1)中的每一個關聯到快取記憶體102之一個分路子集(例如,圖2與表2所示的映射)。優選地,快取記憶體102於製造時即具有預設(default)映射108。優選地,默認映射108用於多種程式使得快取記憶體102具有更高的操作效能,或至少為了有可能被具有快取記憶體102之處理器所執行的程式而製造。所述流程接著進行至方塊
404。
在方塊404中,通過圖1的更新輸入126,處理器以在方塊402所接收的映射來更新快取記憶體102的映射108。優選地,映射108是在系統初始化(system initialization)且/或作業系統(operating system)開機(boot)時,由系統軟體(例如,BIOS或作業系統)所更新。再者,優選地,映射108是以每個程式基礎(per program basis)和/或每個程式階段基礎(per program phase basis)被更新,其相關說明請參照圖7-9。所述流程結束於方塊404。
請參照圖5,其所繪示為圖1的快取記憶體102其運作流程圖。所述流程開始於方塊502。
在方塊502中,快取記憶體102接收在快取記憶體102中未能命中的記憶體存取122。記憶體存取122索引選取陣列104的一個集合。記憶體存取122指定MAT 101。所述流程接著進行至方塊504。
在方塊504中,快取記憶體102分配選定集合的一個分路。更具體地,分配單元106分配分路子集中的一個分路,所述分路子集經由映射108關聯於記憶體存取122的MAT 101。其相關更詳細的內容請參照圖6。所述流程結束於方塊504。
請參照圖6,其所繪示為根據本發明一實施例之圖5的方塊504其運作流程圖。所述流程開始於方塊602。
在方塊602中,分配單元106基於目前的替換位元114和記憶體存取122其MAT 101來判定替換分路116及對替換位元114產生一新的值。在一實施例中,分配單元106判定替換分路116並對替換位元114產生一新的值的方式請照圖3的實施例,亦即,利用了由MAT 101所選定的向量304。在一實施例中,替換位元114是pLRU
向量,且向量304包括第一部分(AND_MASK)與第二部分(OR_MASK)。第一部分(AND_MASK)為布林ANDed運算。布林ANDed運算與pLRU向量114產生第一結果。第二部分(AND_MASK)為布林ORed運算。布林ORed運算與第一結果產生第二結果。第二結果被用於判定替換分路116且生成所述新的值以更新pLRU向量114。AND_MASK與OR_MASK的使用其相關更詳細的內容請參照方塊606。所述流程接著進行至方塊604。
在方塊604中,快取記憶體102分配替換分路116,其中替換分路116在方塊602中由分配單元106所指示出來。所述流程接著進行至方塊606。
在方塊606中,快取記憶體102以在方塊602所生成的新的值來更新替換位元114。所述流程結束於方塊606。
在一實施例中,用於具有16個分路的pLRU方案包括:每集合15個pLRU替換位元114、用於從替換位元114解碼出LRU分路的邏輯、用於在新的分配中更新替換位元114的邏輯、以及在記憶體存取122命中情況下,用於更新替換位元114的邏輯。雖然分配在語意上與快取命中不同,分配更新邏輯可以LRU分路饋入命中途徑的方式而有效地成為命中邏輯。
替換位元114是一個15位元向量(15-bit vector),其本質地描述了一個二進位樹(binary tree)且其每一位元可視為一個內部節點(internal node,所述15個節點分成4階(level),每一葉(leaf)可視為一個分路。舉例來說,如果所述15位元被標記為A-O,所述pLRU樹可以定義為如下:
由pLRU向量來判定LRU分路之邏輯可經由pLRU樹中各個節點位元(node bit)A-O的方向來確定。從根節點(root node)A開始,節點位元A-O的值指出LRU的“方向”,其中0表示“左轉”而1表示“右轉”。例如在如下的例子中:ABCDEFGHIJKLMNO
000000010000000
LRU分路是01(A=0、B=0、D=0、H=1)。
此處應當值得注意是,在上述特定的例子中,LRU分路僅由四個節點位元決定:A、B、D和H。其他節點仍然存在並且存
儲有用的資訊,但是它們此處在這個000000010000000例子中,並沒有對LRU的判定作出貢獻。
當因為命中或分配而使得pLRU陣列需要被更新時,此時需以當前狀態與指定的分路函數來算出pLRU位元的下一個狀態。所述更新是一個包括兩個步驟的過程。首先,判定pLRU節點位元A-O中中的四個節點位元{a、b、c、d},節點位元{a、b、c、d}指向最近使用(the most recently used)(MRU)位置。第二,對於pLRU節點位元A-O中的每一個節點位元X來說,如果X在{a、b、c、d}中的話,此節點位元被更新為指向遠離所考慮的分路。
舉例來說,在上述例子中,在分路05中命中的載入會更新節點{A=>1、B=>0、E=>1、J=>0},使得這四個節點位元中的每一個指向分路05的相反的方向。
以下將更詳細地描述上述方塊602中所提到的向量304的第一部分(AND_MASK)和第二部分(Or_Mask)的使用。假設分路子集中需要被分配的分路是分路{0、5、6、7}。首先,將分路子集基於樹狀圖(tree diagram)轉換成如下所示的AND_MASK和OR_Mask。
ABCDEFGHIJKLMNO
AND_MASK=01-01--0-11----
Or_Mask的=00-00--0-10----
此處虛線代表“無需注意”(“don’t cares”)的位元位置(bit position),因為遮照會避開他們。舉例來說,結點位元C是無需注意的,因為AND_MASK的節點位元A為0,這意味著左邊的分枝(branch)將會一直被用來決定LRU。
因命中或分配而更新LRU的方式與正常情況下pLRU的更新一樣。然而,因為相對於LRU的行為,pLRU是較不完善
(imperfect)的,因此,由於共用更換位元114的性質,用於兩個相互排斥(mutually exclusive)的子集的pLRU更新會相互影響。但是在大多數的情況,相互干擾(crosstalk)是可容忍的。
請參照圖7,其所繪示為一系統其運作流程圖,所述系統具有一種處理器,所述處理器具有圖1的快取記憶體102。所述流程開始於方塊702。
方塊702中,裝置驅動程式(device driver)(或系統軟體的其它部件)判定正在運行的程式(或正準備運行,例如,在作業系統的進程表(process table)中指出的程式),並且所述程式是在裝置驅動程式所知道的程式表裡而用於更新圖1其映射108的映射或配置(configuration)存在。舉例來說,用於對處理器上運行的程式的離線分析(通過處理器的軟體模擬(software simulation)或處理器的實際一部份)已被執行來判定用於改善快取記憶體102效率的映射。應當理解的是,所述映射並不提供100%的命中率;然而,所述映射可以提高快取記憶體102的效率。此外,此處應當理解的是,某些程式並不會從其相應的映射中獲得顯著的效率提升;然而,一些程式的分析顯示,其確具有從映射中獲益的傾向。所述流程接著進行至方塊704。
在方塊704中,處理器執行指令(例如,寫入到模組指定暫存器(model specific register,MSR),例如,X86 WRMSR指令),其用以指示(instruct)處理器以指令所提供的映射來更新快取記憶體102的映射108。在一實施例中,映射位於記憶體,而映射的位置其記憶體位址由指令提供。優選地,指令是設備驅動程式代碼(device driver code)的一部分。裝置驅動程式還可以提供資訊,其可被用於處理器去檢測(detect)程式是否已進入各個不同階段,其相關說明請參照圖8。裝置驅動程式可以為每個階段提供不同的映射。因應於指令,
處理器更新映射108並且將初始階段識別字(initial phase identifier)(如果提供的話)載入於階段檢測器(phase detector)(圖8的804)。所述流程結束於方塊704。
請參考圖8,其所繪示為一處理器的組件示意圖,所述處理器包括圖1的快取記憶體102。所述處理器包括階段檢測器804,其用以檢測正在運行的程式是否已經進入一個新的階段。階段檢測器804是基於其所接收的階段識別字(phase identifier)802來做上述之檢測,而階段識別字802例如通過圖7的元件驅動器所提供。階段識別字802可包括程式指令的指令指標符(instruction pointer)(或程式計數器(program counter))值。指令可以是副程式調用指令(subroutine call instruction),在這種情況下,階段識別字802還可以包括調用指令的目標指令(target instruction)之指令指標符(或程式計數器)值。此外,階段識別字802還可以包括一個或多個調用指令的參數值,例如,返回位址,暫存器值和/或堆疊(stack)值。一個階段檢測器例子為指紋單元(fingerprint unit),其更詳細的說明請參考美國專利申請號14/050687和14/050757,二者提交於2013年10月10日,這兩個專利皆主張美國臨時申請號61/880620,提交於2013年9月20日之優先權,而這兩個專利的全部內容在此皆做為參考之用。處理器還包括映射更新單元(mapping update unit)806。當階段檢測器804檢測出已有新的階段時,階段檢測器804即通知映射更新單元806接收所述新的階段時的識別字(identifier)。映射更新單元806還接收映射資訊(mapping information),例如,從圖7的元件驅動器而來的資訊。映射更新單元806用以更新位於快取記憶體102的映射108,其相關說明請參照圖9。在一實施例中,映射更新單元806包括所述處理器其被階段檢測器804所調用的微碼(microcode)。在一替代實施例中,映射更新單元
806包括狀態機(state machine)。當階段檢測器804檢測出已有新的階段時,階段檢測器804即通知狀態機接收所述新的階段時的識別字。階段分析其相關說明請參照圖36。
請參照圖9,其所繪示為圖8的處理器其運作流程圖,所述處理器具有圖1的快取記憶體102。所述流程開始於方塊902。
在方塊902中,圖8的階段檢測器804檢測正在運行的程式已經進入一個新的階段。因應於檢測到新的階段,階段檢測器804通知圖8的映射更新單元806。所述流程接著進行至方塊904。
在方塊904中,映射更新單元806在映射信息808(例如,從圖7的方塊704中裝置驅動程式所接收)中查找(look up)從階段檢測器804所接收的所述新階段的識別字,並以所述查找中所發現的映射來更新快取記憶體102的映射108。此外,如果需要的話,映射更新單元806以新的階段識別字802來更新階段檢測器804。在一實施例中,下一個需要被檢視的階段取決於目前的階段;因此,即將被載入到階段檢測器804的階段識別字802會取決於當前的階段而有所不同。所述流程接著進行至方塊906。
在方塊906中,所述處理器執行正在運行的程式且生成記憶體存取到快取記憶體102,以因應於使得快取記憶體102基於方塊904中更新的映射108,並用相關於圖5-6所描述的方式來分配分路子集。所述流程結束於方塊906。
此處應當理解的是,儘管本發明實施例所揭露的快取記憶體其具有特定數目和大小的分路、集合、記憶體線、標籤、狀態協定(status protocols)等等,但本發明不以此為限。在其它實施例中,快取記憶體可具有其它數目和大小的的分路、集合、記憶體線、標籤、狀態協定等等。
請參照圖10,其所繪示為一集合關聯快取記憶體1002之方塊示意圖。圖10的快取記憶體1002在許多方面與圖1的快取記憶體102相似,此外,其具有類似編號的元件亦相似。然而,圖10的快取記憶體1002其所包括的映射1008與圖1的映射108不同。在圖10的快取記憶體1002中,每一個集合屬於多個彼此互斥的L個群組(group)1001其中之一。更具體地說,圖10的映射1008用以將每一個MAT關聯到陣列104中多個分路的一個子集(更關聯至L個群組中的一個群組1001)。亦即,對L個群組中的每個群組1001而言,可視為圖2的映射108有效地包含於圖10的映射1008中。因此,圖2的映射108可被MAT 101編號以一維方式來索引,而圖10的映射1008可被MAT 101編號以二維方式來索引。
在圖10的例子中,其具有四個集合群組(set group),分別表示為群組0 1001-0,其包括集合0-511;群組1 1001-1,其包括集合512-1023;群組2 1001-2,其包括集合1024-1535;以及群組3 1001-3,其包括集合1536-2047。因此,對此四個群組1001的每一個來說,映射1008用以將每一個MAT關聯到陣列104中16個分路的其中一個子集。也就是說,圖10的映射1008不僅將MAT映射到分路子集,更以集合群組為基礎做所述的映射,而不是如圖1所示實施例中以整個快取記憶體102為基礎做所述的映射。因此,分配單元106將依據記憶體存取122的MAT以及所選定集合和所屬的群組1001來分配分路子集。
前述的分配對那些可能會聚集記憶體存取於快取記憶體1002特定集合合群組之某幾個MATs的程式來說是特別有利的。舉例來說,對於給定程式來說,具與堆疊操作(stack operation)相關的MAT的記憶體存取傾向於聚集於快取記憶體1002其最初幾個集合。
在此情況下的,映射1008可使相關於MATs(其相關於包含快取記憶體1002的第一少數集合群組的堆疊操作)的子集包括具有極大數目分路。所述傾向可以在程式執行時,通過程式和程式執行緒(program thrend)的離線分析觀察到,而判定出一種有效的映射並提供給快取記憶體1002,其用於更新映射1008使得快取記憶體1002更有效率,其相關詳細說明請參照圖7-9。
此處應當理解的是,儘管本發明實施例所揭露的群組其具有特定數目(例如,如圖10的4個群組),但本發明不以此為限。在其它實施例中,群組1001可具有其它數目。此外,此處應當理解的是,群組1001的數目愈大,映射1008的尺寸也愈大。在一實施例中,群組的數目可以小到相等於快取記憶體1002其集合的數目。
請參照圖11,其所繪示為圖10的快取記憶體1002其部分之更詳細方塊示意圖。圖10所繪示的快取記憶體1002的所述部分在許多方面與圖3相類似。圖10的快取記憶體1002還包括群組選取邏輯(group selection logic)1106,其用以將記憶體存取122映射到群組1001。更具體地,群組選取邏輯1106接收記憶體存取122(或更具體的,接收記憶體位址的索引)且生成集合群組編號(set group number)1104,以因應於具有被記憶體存取122索引所選定集合的群組1001所指定的數目。集合群組編號1104作為一個選取輸入而被提供到多功器(mux)1102。多功器(mux)1102為每個集合組群(例如,圖11的四個組群)接收向量304(例如,每一個向量304用於一個MAT,類似於圖3)並選取與群組1001相關聯的向量304並提供給多功器302,其中群組1001由集合群組編號1104所指定。多功器302選取此32個被選取的向量304其一個並提供給分配單元106。分配單元106基於選定的向量304和選定的集合之替換位元114以生成替換分路
116,此部份類似於圖3之相關描述。分配單元106還基於替換分路116的值來更新替換位元114,此部份類似於圖3之相關描述。
請參照圖12,其所繪示為一處理器其運作流程圖,所述處理器具有圖1之快取記憶體1002。流程開始於方塊1202。
在方塊1202中,處理器接收映射,其用以,為快取記憶體1002的L個群組1001中的每一個,將多個MAT(例如表1)中的每一個關聯到快取記憶體1002的分路子集。對於某些MAT,其可能關聯到包括所有分路的子集。所述流程接著進行至方塊1204。
在方塊1204中,處理器以在方塊1202所接收的映射通過圖10的更新輸入126來更新快取記憶體1002的映射1008。所述流程結束於方塊1204。
請參照圖13,其所繪示為圖10的快取記憶體1002其運作流程圖。所述流程開始於方塊1302。
在方塊1302中,快取記憶體1002接收在快取記憶體1002中未能命中的記憶體存取122。記憶體存取122索引選取陣列104的一個集合。記憶體存取122指定MAT 101。所述流程接著進行至方塊1304。
在方塊1304中,快取記憶體1002分配所選定的集合其中一個分路。更具體地,分配單元106分配分路子集的其中一個分路,所述分路子集系對應屬於所選取集合群組的映射1008,而關連於記憶體存取122的MAT 101。優選地,分配單元106選取所述分路並使用用於所選定集合的所有分路的替換位元114和替換策略來執行分配。舉例來說,如果替換策略是LRU,則分配單元106選取LRU分路子集。優選地,分配單元106通過將被替換的分路作為最近使用的分路並老化(aging)所有其他分路來更新替換位元114。在另一個例子中,
如果替換策略是pLRU,分配單元106選取近似(approximate)pLRU分路子集。在一實施例中,分配單元106以類似圖6方塊602所描述的方法來更新替換位元114。在另一例子中,如果替換策略是輪叫(round-robin),分配單元106所選定的分路子集其具有的分路編號是以輪叫指標符模數(modulo)子集內的分路數並將輪叫指標符施轉1。在另一個例子中,如果替換策略是隨機的,分配單元106隨機選取子集中任個分路。所述流程結束於方塊1304。
請參照圖14,其所繪示為根據本發明之一替代實施例之一集合關聯快取記憶體1402之方塊示意圖。圖14的快取記憶體1402在許多方面類似於圖10的快取記憶體1002。然而,圖14的快取記憶體1402的集合其分組與圖10不同。特別的,圖10中群組1001的群組其具有相鄰編號的集合,而圖14中快取記憶體1402中群組的群組編號,與其內的集合利用一模數在其集合數量之模數運算(modulo operation)上所產生的結果相同,其中所述模數為群組數量。在圖14的例子中,共有四個群組1401。群組0 1401-0,其包括所有集合編號模數(modulo)4為零的集合,即集合0、4、8、12、...2044;群組1 1401-1,其包括所有集合編號模數(modulo)4為1的集合,即集合1、5、9、13、...2045;群組2 1401-2,其包括所有集合編號模數(modulo)4為2的集合,即集合2、6、10、14、...2046;以及群組3 1401-3,其包括所有集合編號模數(modulo)4為3的集合,即集合3、7、11、15、...2047。圖14的實施例其邏輯類似於圖11,除了群組選取邏輯1106是以如上描述來生成群組編號,亦即,通過對集合編號並使用模數運算來生成。圖14的實施例可能是有利於一些程式,特別是其表現與所述模數相關,並對某幾個MATs具記憶體存取聚集傾向的程式。圖14的實施方式可以與堆快取記憶體(banked cache memory)之實施例共同使
用。在堆快取記憶體中,其堆的數目對應於群組的數目,而每一堆的集合對應於所述群組的集合。
優選地,群組選取邏輯1106是可更新的,使得它可以根據所需的映射1008而生成集合群組編號(set group number)1104。映射1008可用於如圖10所示的連續集合分組(consecutive set grouping),或是如圖14所示的以模數為基礎的集合分組(modulus-based set grouping),或不同的分組方案(grouping scheme),例如散列(hash)集合編號、散列記憶體存取122的記憶體位址之標籤位元(tag bit)、或其組合。此外,優選地,群組選取邏輯1106是可更新的,以支援不同數目的群組。群組選取邏輯1106的更新可隨著映射1008更新而執行,其相關說明請參照圖12。群組選取邏輯1106的可更新性(updatability)會增加使用數值更新映射1008的可能性,這將提高快取記憶體1002/1402的效率,使得其可更廣泛的運用在各種程式和程式階段上。
請參照圖15,其所繪示為根據本發明之一替代實施例之一集合關聯快取記憶體1502之方塊示意圖。圖15的快取記憶體1502在許多方面類似於圖10的快取記憶體1002。圖15的快取記憶體1502包括映射1508,其用以指定多個相互排斥的集合群組。在圖15的實施例中具有四個群組1501,其類似於圖10的實施例(雖然可具有其它的集合分組(set grouping),例如圖14的分組)。此外,圖15的映射1508進一步指定陣列104的存儲元件112其多個組塊(chunk)。一般來說,假設陣列104具有N個分路和L個相互排斥的群組1501,則組塊1503所包括存儲元件112為L個相互排斥的群組1501其中一個和陣列104N個分路其中一個或多個的邏輯交集(logic intersection)。在圖15所示例中,其具有11個不同的組塊1503。舉例來說,組塊2 1503-2是指位於群組0 1501-0和分路6-9的存儲元件112;組塊8 1503-8是
指位於群組2 1501-2和分路10的存儲元件112;而組塊11 1503-11是指位於群組3 1501-3和分路7-12的存儲元件112。在圖15的實施例中,每個存儲元件112包括於一個組塊1503,而相比之下在圖17的實施例中,某些群組中其一些分路並未被映射到組塊,以下將更詳細地描述。類似於圖20-21的映射結構被採用以指定組塊1501,所述映射結構亦從圖22D觀察出。然而,如果相同的替換方案被用於在整個集合以及所有替換位元114被用於所述集合的所有分路,則包裹指定符(parcel specifier)2001不必包括替換位元指標符(replacement bits pointer)2012。
圖15的實施例其另一個特徵是,映射1508用以將MAT關聯到組塊1503。更具體地,對於一給定的群組1501,可能有一些MAT並未被映射1508關聯到任何群組1501的組塊1503。
請參照圖16,其所繪示為圖15的快取記憶體1502其運作流程圖。所述流程開始於方塊1602。
在方塊1602中,快取記憶體1002接收在快取記憶體1002中未能命中的記憶體存取122。快取存取122索引選取陣列104的一個集合。快取存取122指定MAT 101。所述流程接著進行至方塊1604。
在方塊1604中,快取記憶體1502判定MAT 101相關的映射1508是否與選定集合有組塊1503的交集。所述流程接著進行至判定方塊1606。
在判定方塊1606中,如果在方塊1604中快取記憶體1502判定MAT 101相關的映射1508與選定集合有組塊1503之交集時,所述流程接著進行至方塊1608;否則,所述流程接著進行至方塊1612。
在方塊1608中,分配單元106分配所選集合的一個分路。更具體地說,分配單元106分配所選定集合其交集的組塊1503的一個分路,其相關說明請參照圖13的方塊1304。如果MAT 101相關的映射1508將與選定集合的交集為多個組塊1503時,則分配單元106為多個組塊1503其聯集中的任一個分路進行分配。所述流程結束於方塊1608。
在方塊1612中,分配單元106分配所選集合的任何一個分路。舉例來說,替換位元114可包括用以為整個集合保持(maintain)pLRU資訊的位元,因此分配單元106可以分配所選定集合的pLRU分路;可替代地,分配單元106可以以真LRU、輪叫、隨機或其它在此處所敘述的替換策略(例如以MAT做輸入至替代方案而運用優先順序的方式)分配所選定的集合。所述流程結束於方塊1612。
下面的示例映射旨在示出圖15和16其實施例的一種使用方式。假設程式具有以下特徵。第一,所述程式具有非常大量的調用/返回(call/return)特性並產生了大量的記憶體存取,例如fused_store_update、store_push、store_update和store_update_nac MAT(一般來說,與堆疊存取(stack access)關聯的MAT組),而這些記憶體存取趨向於索引快取記憶體1902的上半四個組塊。第二,伴隨MAT boxpf、fused_store_aps、load_aps、store_aps和store_nt_ap(一般來說,與媒體資料(media data)關聯的MAT組)一同產生的記憶體存取趨向於主宰記憶體流量(memory traffic)。第三,所述程式趨向於從具有專門用於tablewalk MAT記憶體存取的分路中受益,並且它們趨向於索引快取記憶體1902的下半四個。根據離線分析可發現,所述程式將受益於映射1008,其建立:組塊0,其交集包括快取記憶體1902的上半四個的第一集合群組且將媒體MAT群組關聯到分路0-13;組
塊1,其交集第一集合組群且將堆疊MAT群組關聯到分路0-13;組塊2,其交集包括快取記憶體1902的下半四個的第二集合組群且將媒體資料MAT群組關聯到分路0-14;以及組塊3,其交集第二集合群組且將堆疊存取MAT群組關聯到分路0-13。在這種情況下,因為媒體資料和相關boxpf預取傾向於主控(dominate)(且傾向於需要快取記憶體1902的所有的分路),因此快取記憶體1902其中間部分的集合並未與組塊映射,也就沒有必要去將他們隔絕於分頁表尋訪或堆疊記憶體存取。
請參照圖17,其所繪示為根據本發明之一替代實施例之一集合關聯快取記憶體1702之方塊示意圖。圖17的快取記憶體1702在許多方面類似於圖15的快取記憶體1502。圖17的快取記憶體1702包括映射1708,其不同於圖15的映射1508。不同處是對於一些群組1701來說,映射1708可以不包括群組1701的組塊1703其所有的分路。也就是說,有可能某些分路未映射到任何群組1701的組塊1703。在圖17的示例中,群組0 1701-0的分路0-1、群組1 1701-1的分路0以及群組2 1701-2的分路0-2未被映射1708映射到組塊1703。
請參照圖18,其所繪示為圖17的快取記憶體1702其運作流程圖。圖18類似於圖16,並且其具有相似編號的方塊亦是相似的。然而,若方塊1606判定為“否”,則所述流程接著進行至方塊1812而非如圖16所示的到方塊1612。
在方塊1812中,分配單元106分配所選集合其任何一個未被映射的分路,其相關說明請參照圖13的方塊1304。舉例來說,如果選定集合屬於群組2 1701-2,則分配單元106分配分路0-2的其中之一,所述分路0-2在圖17中的例子中未被映射。所述流程結束於方塊1812。
在不同的實施例中,可具有不同數目的組塊。舉例來說,在圖10、14、15和17的實施例中,集合被分配在四個彼此互斥群組中,從而允許多達64個組塊(4個集合群組×16個分路)。然而,本發明不以此為限。在一實施例中,每個集合可以是其自身的互斥群組,使得快取記憶體中的每個存儲元件或條目即是一個組塊。此處值得注意的是,群組的數目愈多,則快取記憶體對其具有更精細(fine-grained)的規劃也越大,使得其符合所分析程式的需求。相反的,群組的數目愈少,需要來描述組塊特性的控制位元愈少。
請參照圖19,其所繪示為一集合關聯快取記憶體1902之方塊示意圖。圖19的快取記憶體1902在許多方面類似於圖1的快取記憶體102,並且其具有相似編號的元件亦是相似的。然而,圖19的快取記憶體1902包括映射1908,其不同於圖1的映射108。此外,替換位元1914也不同於圖1的替換位元114。圖19的映射1908和替換位元1914使得快取記憶體1902能夠採用異構替換方案(heterogeneous replacement scheme)。亦即,每個集合具有多個分路子集,被稱為包裹(parcel),而每個包裹都有其自己的替換方案。也就是說,集合的每個包裹可包括不同數目的分路,並且可以使用所述組其替換位元1914的不同部分,並且可以採用不同的替代方案來替換包裹內的分路,其更詳細的描述請參考如下。根據離線分析可能會發現,一些程式能受益於將MAT群組成包裹,然後再針對這些包裹使用不同的替換方案。
在圖19中,選定集合的索引1500包括三個包裹1901。包裹0 1901-0包括所述集合的分路0-4;包裹1 1901-1包括集合5-12;以及包裹2 1901-2包括集合13-15。更換位元1914包括用於每個包裹1901彼此分開的部分,其更詳細的描述請參照圖20。在一實施例中,
包裹1901對快取記憶體1902的所有集合來說是全域的(global),亦即,陣列104的每一個集合被包裹成相同的,如圖22C所示。本實施例與圖1的實施例相容。在另一實施例中,包裹1901關聯於集合群組,亦即,每一集合群組2291被包裹成相同的,如圖22D所示。本實施例與圖10-18的實施例相容。在另一實施例中,包裹1901關聯於各自的集合,亦即,每一個集合有其自己的包裹,如圖22E所示。
請參照圖20,其所繪示為根據本發明之一實施例之一包裹指定符(parcel specifier)2001和一三重包裹指定符(parcel specifier triplet)2021之方塊示意圖。包裹指定符2001包括有效位元(V)2002、MAT向量2004、分路向量2006、替換方案2008和替代位元指標符2012。有效位元(V)2002用以表示包裹指定符2001是否有效。三重包裹指定符2021其真有效位元(true valid bit)2002的數量用以判定選定集合其包裹1901的數量,其更詳細的描述請參考如下。
MAT向量2004具有用於多個MAT(例如,表1中的32個MAT)中的每一個其對應的位元。MAT向量2004其集合位元(set bit)用以表示其對應的MAT是否關聯於包裹1901。在一替代實施例中,包裹指定符2001包括MAT群組向量(MAT group vector)而非MAT向量2004。MAT群組向量具有用於多個MAT群組(例如,4個MMAT群組)中的每一個其對應的位元。在本實施例中,映射1908包括MAT到MAT群組映射(MAT to MAT group mapping),其相關說明請參照圖29。分配單元106將記憶體存取122的MAT 101作為MAT到MAT群組映射的一個輸入,並使用輸出至所述包裹的包裹指定符2001的MAT群組來做分配。相比於MAT向量2004,MAT群組向量需要的位元更少,如果包裹指定符2001的數量比較大,MAT群組向量是特別有利的。
分路向量2006具有對應的位元,其用於對陣列104其N個分路(例如,16個分路)中的每一個。分路向量2006的集合位元(set bit)用以表示相應的分路是否包含於包裹1901。亦即,分路向量2006指定包含於包裹1901的分路子集。在一替代實施例中,分路向量2006包括第一部分和第二部分。第一部分和第二部分與關聯於包裹1901的一部份替換位元1914進行布林(Boolean)操作以生成一新的值(例如,pLRU向量),其用以更新替換位元1914,相關說明請參照圖6的一替代實施例。在本實施例中,包含於包裹1901的分路子集是被間接地指定,由分配單元106從分路向量2006匯出所包含的分路子集。在另一替代實施例中,包裹指定符2001包括分路指標符而非分路向量2006。分路指標符用以指出包裹1901的第一個分路。在本實施例中,包裹裡的所有分路是相鄰的。指標符還可以指定分路的數目;或者,第一個包裹1901必須在其分路指標符指定分路0,然後分配單元106再算出分路的數目。
替換方案2008指定替換策略(replacement policy)。所述替換策略用以替換或分配關聯的包裹1901。在一實施例中,不同的替換方案(例如,真LRU、pLRU、輪叫、隨機、MAT優先順序、包括MAT優先順序的各種混合(hybrid)等等)被編號且替換方案2008持有所述替換方案的編碼值。
替換位元指標符2012指定替換位元1914的一部份,所述部份用以作為關聯的包裹1901的替換策略位元。優選地,替換位元指標符2012指向替換位元1914的所述部份的第一個位元,其用以作為用於關聯的包裹1901的替換策略位元。用於包裹1901所需替換位元1914的數目取決於所述包裹1901其分路的數目和方案2008。在一實施例中,用於指標符2012的位元並不包括在內,但分配單元
106可以從有效包裹1901的數目,包裹1901其分路的數目以及方案2008計算出來。
在包裹1901僅包括單一分路的情況下,由於所述單一分路將一直被替換,因此包裹1901也沒有必要消耗任何的替換位元1914。在一包裹1901其包括兩個分路且具有LRU替換方案2008的情況下,替換位元1914其單一個位元可被用於表示所述兩個分路中的LRU分路。另外,在另一例子中,包裹1901包括四個分路且具有基於MAT優先順序的替換方案2008,例如,MAT向量2004將5個不同的MAT關聯到所述包裹,而其中的兩個(例如,load_supervisor 和store_supervisor)其優先順序高於另外3個MAT。在這個情況下,將具有4個替換位元1914(等於所述包裹其分路的數目),並且如果其一替換位元1914為真,則代表所述分路已被分配,以因應於具有較高優先順序load_supervisor或store_supervisor的記憶體存取,否則此替換位元1914為偽;分配單元106嘗試以偽替代位元1914來替換分路並避免以真替代位元1914來替換分路。方才所述之替換方案2008其多出來的替換位元1914用以指出關聯於具較高優先順序的MAT的所有分路中的LRU分路。因此,舉例來說,如果包裹1901其四個分路皆關聯於具較高優先順序的MAT,分配單元106依據包裹1901的LRU相關替代位元1914之指示而分配此4個分路中的LRU分路。其它納入MAT優先順序的替換方案亦可用於本實施例。所述其他替換方案2008包括輪叫,在輪叫中,替換位元1914的所述部分指定包裹1901中最後一個被分配的分路。
三重包裹指定符(parcel specifier triplet)(PST)2021包括三個包裹指定符2001,其為包裹指定符1 2001-1、包裹指定符2 2001-2和包裹指定符32001-3。由於PST 2021,圖20的實施例限制了每個集合
僅能包括三個包裹1901,然而在其他實施例裡每個集合所包括的包裹1901其最大值可不同於三個,但是至少兩個。在一實施例中,包裹1901對快取記憶體1902(例如,圖22C)裡所有的集合來說為全域(global)時,其具有用於快取記憶體1902的單一PST 2021。在一實施例中,包裹1901關聯於集合群組(例如,圖22D),每個集合群組2291具有PST 2021。在一實施例中,包裹1901關聯於個別的集合(例如,圖22E),每個集合具有PST 2021。
請參照圖21,其所繪示為圖19的快取記憶體1902其部份更詳細之方塊示意圖。在圖21所描述的實施例中,包裹1901關聯於集合群組(例如,圖22D)。圖19的映射1908包括PST 2021,每個PST 2021用於L個群組中的其中一個,如圖21所示。多功器(MUX)302接收所述L個PST 2021並且選取其一以提供給分配單元106。所述選取是基於集合群組編號(set group number)2104的值。集合群組編號2014由集合群組選取邏輯2106因應於記憶體存取122(特別地,記憶體存取122的索引部分)而生成。記憶體存取122的MAT指定符101被提供給分配單元106。在一實施例中,分配單元106基於MAT 101和PST 2021來選取關聯於記憶體存取122的包裹1901。然而,在其他實施例中,分配單元106基於記憶體存取122的記憶體位址和PST 2021來選取關聯於記憶體存取122的包裹1901,而所述選取並未用到MAT 101。亦即,異構替換方案可被用那些不接收MAT的快取記憶體所運用。分配單元106還接收圖19中選定集合的替換位元1914,所述選定集合由記憶體存取122記憶體位址的索引來選取。基於選定的PST 2021以及被包裹指定符2001所指定的替換位元1914的一部份,在其它實施例中,分配單元106亦基於MAT 101生成圖19的替換分路116。分配單元106還更新替換位元1914的所述
部份,所述部份由包裹指定符2001基於替換分路116的值來指定。
請參照圖22A,其所繪示為一處理器其運作流程圖,所述處理器具有圖19的快取記憶體1902。所述流程開始於方塊2202。
在方塊2202中,處理器接收映射,其包括圖20的三重包裹指定符2021。所述流程接著進行至方塊2204。
在方塊2204中,處理器以在方塊2202所接收的映射(通過圖19的更新輸入126而來)以更新快取記憶體1902的映射1908。所述流程結束於方塊2204。
請參照圖22B,其所繪示為根據本發明之一實施例之圖19的快取記憶體1902其運作流程圖。所述流程開始於方塊2212。
在方塊2212中,快取記憶體1902接收在快取記憶體1902中未能命中的記憶體存取122。記憶體存取122索引選取陣列104的一個集合。記憶體存取122指定MAT 101。記憶體存取122的記憶體位址還被用於判定與選定集合相關聯的集合群組,例如,集合群組選取邏輯2106生成圖21的集合群組編號2104以因應於記憶體存取122的記憶體位址。在全域包裹(global parcel)的實施例中(例如,圖22C),因為其只有單一的PST 2021,因此沒有必要去對PST 2021作選取。在每集合包裹(parcel-per-set)的實施例中(例如,圖22E),對集合的選取亦選取了PST 2021,因為PST 2021關聯於選定的集合。所述流程接著進行至方塊2214。
在方塊2214中,分配單元106判定記憶體存取122關聯於那一個包裹1901並且選取所述關聯的包裹1901其包裹指定符2001。在圖21的實施例中,分配單元106檢視選定的PST 2021並從中判定將選取那一個包裹指定符2001。分配單元106檢視每個包裹指定符2001的MAT向量2004以判定其中那一個指定MAT 101。分配
單元106選取指定的MAT 101的包裹指定符2001。在一實施例中,如果MAT 101沒有被任何的包裹指定符2001其MAT向量2004所指定,則分配單元106分配選定集合其任一個分路。
在一替代實施例中,分配單元106從記憶體存取122的記憶體位址判定包裹1901。所述判定並未參考MAT 101而是藉由比較所述記憶體位址和提供給分配單元106的一集合或一範圍的記憶體位址。在一實施例中,處理器的抖動檢測器(thrashing detector)(例如,布林篩檢程式(bloom filter))監控那些匹配最近引退的快取線分配。舉例來說,因程式對大的資料結構產生隨機記憶體器存取,抖動可能而發生。如果程式呈現這種行為,例如,程式通過記憶體而遍歷(traverse)連結清單而為目前的替換方案(例如,pLRU)建立一個最壞的情況,此較差的時間和空間局部性可能會導致快取記憶體1902產生非常低的命中率。抖動檢測器判定正產生抖動的一組記憶體位址並提供分配單元106。PST 2021被更新以對關聯於所述記憶體位址的集合建立不同的包裹1901,因此分配單元106利用一隨機替代方案,並以由抖動檢測器所指出之落入所述記憶體位址集合之記憶體位址122來為所述集合進行分配。切換至隨機替換策略不見得能提高記憶體存取的命中率;然而,除了新的替換策略外,為其指定一包裹1901並藉由將程式其餘部分與這些行為不佳的記憶體存取相關區域予以隔離,可以提高程式的整體性能。
在另一實施例中,一流資料檢測器(streaming data detector)用以檢測流資料快取存取(streaming data memory access)122。所述流資料檢測器例如配置在處理器的預取器,例如邊界框預取器(bounding box prefetcher)。流資料快取存取122是在記憶體位址的一範圍內,所述記憶體位址應被隔離為快取記憶體1902的一
個小的分路子集和/或其可從不同替換方案獲益。舉例來說,假設一程式正以一規則的方式運行在記憶體的一個大型資料結構(例如,所述程式包括重複(iterating over)一多維的對象陣列(multidimensional array of object)的嵌套迴圈(nested loops)),此規律性可能對記憶體層級(memory hierarchy)有不的良影響,其取決於陣列的大小、快取記憶體1902和/或替換策略。如果在所述資料結構中的物件是壓縮的(compact)並且如果快取線是以常規的大範圍(stride)被存取時,則對快取記憶體1902的影響是,當潛在有用的資料因其並非資料結構的一部分而被踢出時,能有效地以基本上為使用一次(use-once)的數據來填充(fill up)快取記憶體1902。此處應當指出的是,所述資料實際上可能並非僅使用一次,但如果所述資料結構是大到足以別名(alias)多次(如,大於快取記憶體1902其分路的數目,例如16)而到同一集合時,因為在快取記憶體1902被強迫去踢出第N個快取線以騰出空間給第N+16快取線前,所述第N個快取線不可能被再次存取,因此所述資料可能也僅被使用一次。在這種情形下,預取器確認這些提供給快取記憶體1902的數據流與信號(其係由預取器所產生且落入記憶體位址範圍中的預取,並由預取器提供給分配單元106之記憶體存取122),應被區隔為不同的且具有快取記憶體1902的小分路子集之包裹1901。在區隔新分配之外(或可能是以其他方式替代之),預取器會依據分配被導向的方式,將所述分路之快取記憶體1902做導向而使用不同的替代策略(例如輪叫/FIFO或隨機),PSTs 2021因此被更新並透過適當的替代策略而建立所需的包裹1902。
所述流程接著從方塊2214進行至方塊2216。
在方塊2216中,分配單元106使用在方塊2214中選定的包裹指定符2001來判定分路子集,替換方案,和與包裹1901相
關聯的替換位元1914的一部份。所述流程接著進行至方塊2218。
在方塊2218中,分配單元106使用所述相關聯的替換方案和所述替換位元1914的一部份來分配分路子集,所述分路子集關聯於所選定集合的包裹1901,例如依據替換分路指定符116之指示。所述流程接著進行至方塊2222。
在方塊2222中,分配單元106基於在方塊2218中被分配的分路來更新替換位元1914的一部份。所述替換位1914的一部份關聯於包裹1901。所述流程結束於方塊2222。
請參照圖22C,其所繪示為圖19的快取記憶體1902其方塊示意圖,所述快取記憶體1902採用異質替換策略。在圖22C的實施例中,包裹1901對快取記憶體1902其所有的集合(即,陣列104的每個集合被以相同方式進行包裹)來說為全域的(global)。在圖22C中,對陣列104的所有集合來說,分路0-5的子集其包含於包裹0且被包裹指定符0所指定,如圖中由右上到左下的對角陰影線區域所示;分路6-9的子集其包含於包裹1且被包裹指定符1所指定,如圖中由左上到右下的對角陰影線區域所示;以及分路10-15的子集其包含於包裹2且被包裹指定符2所指定,如圖中的交叉陰影線區域所示。
請參照圖22D,其所繪示為根據本發明之一實施例之圖19的快取記憶體1902其方塊示意圖,所述快取記憶體1902其採用異質替換策略。在圖22D的實施例中,包裹1901關聯於集合群組2291,亦即每一個集合群組2291被以相同的方式進行包裹。在圖22D中,對陣列104的集合群組0 2291-0(即,集合0-511)來說:分路0-5的子集其包含於包裹A且被包裹指定符1所指定;分路6-9的子集其包含於包裹B且被包裹指定符2所指定;以及分路10-15的子集其包含於包裹C且被包裹指定符3所指定。對陣列104的集合群組1 2291-1(即,
集合512-1023)來說:分路0-3的子集其包含於包裹D且被包裹指定符4所指定;分路4-11的子集其包含於包裹E且被包裹指定符5所指定;以及分路12-15的子集其包含於包裹F且被包裹指定符6所指定。對陣列104的集合群組2 2291-2(即,集合1024-1535)來說:分路0-9的子集其包含於包裹G且被包裹指定符7所指定;以及分路10-15的子集其包含於包裹H且被包裹指定符8所指定。也就是說,群組2 2291-2只包括兩個包裹1901。對陣列104的集合群組3 2291-3(即,集合1536-2047)來說:所有的分路0-15其包含於包裹J且被包裹指定符9所指定。也就是說,群組3 2291-3只包括一個包裹1901。
請參照圖22E,其所繪示為根據本發明之一實施例之圖19的快取記憶體1902其方塊示意圖,所述快取記憶體1902其採用異質替換策略。在圖22E的實施例中,包裹1901關聯於個別的集合,即,每一集合被有其自己的包裹。在圖22E中,對集合0來說:分路0-5的子集其包含於包裹A且被包裹指定符1所指定;分路6-9的子集其包含於包裹B且被包裹指定符2所指定;以及分路10-15的子集其包含於包裹C且被包裹指定符3所指定。對陣列104的集合1來說:分路0-3的子集其包含於包裹D且被包裹指定符4所指定;分路4-11的子集其包含於包裹E且被包裹指定符5所指定;以及分路12-15的子集其包含於包裹F且被包裹指定符6所指定。對陣列104的集合2來說:分路0-9的子集其包含於包裹G且被包裹指定符7所指定;以及分路10-15的子集其包含於包裹H且被包裹指定符8所指定。對陣列104的集合2047來說:分路0-3的子集其包含於包裹J且被包裹指定符9所指定;分路4-7的子集其包含於包裹K且被包裹指定符10所指定;以及分路8-15的子集其包含於包裹L且被包裹指定符11所指定。在圖22E中,僅以包裹1901為代表,為簡潔之故,並非陣列
104其所有的包裹1901被示出。
通過程式和程式執行緒的離線分析可觀察到各種不同的傾向,並且當程式正在運行時,可以判定出一個高效的映射且提供到快取記憶體1902以更新映射1908而增加快取記憶體1902的效率。其方式類似於圖7-9。
請參照圖23,其所繪示為全關聯快取記憶體(fully associative cache memory)2302之方塊示意圖。全關聯快取記憶體2302包括由存儲元件112所佈置的陣列104。每個存儲元件(storage element)112具有索引。在圖23的示例中,索引是從0-511。在其它實施例中,存儲元件112可具有不同的數目。優選地,全關聯快取記憶體2302是一個相對小的快取記憶體,用以實現可接受的時序(timing)。全關聯快取記憶體2302接收記憶體存取122,所述記憶體存取122具有關聯的MAT 101。全關聯快取記憶體2302包括分配單元106,其從陣列104接收命中指示(hit indication)124。存儲元件112,記憶體存取122和分配單元106類似於之前所述,除非另有說明。陣列104中的每個存儲元件112包括相應的MAT 2314,所述MAT 2314指定記憶體存取的MAT,所述MAT促成存儲元件112的分配。
全關聯快取記憶體2302還包括計數器2306,其每一關聯於MAT且與分配單元106相通信。每個計數器2306用以保持(maintain)陣列104的有效條目(存儲元件112)其數目的計數,所述陣列104其MAT 2314是來自與計數器2306相關聯的MAT。
全關聯快取記憶體2302還包括閾值(threshold)2308,其每一關聯於MAT且與分配單元106相通信。每個閾值2308用以指定陣列104中可被分配至記憶體存取122的有效條目的最大值,所述記憶體存取122具有關聯於閾值2308的MAT。閾值2308可通過更新輸
入126而動態地被更新,閾值2308其相關說明請參照圖24。
優選地,全關聯快取記憶體2302還包指標符2304,其每一關聯於MAT且與分配單元106相通信。在一實施例中,每個指標符2304用以指定陣列104中最近被替換的有效條目的索引。當所述MAT的計數2306已達到閾值2308,指標符2304對相關於具有MAT之有效條目以輪叫方式做分配。在另一實施例中,當所述MAT的計數2306已達到閾值2308時,每個指指標符2304指定與MAT相關之陣列104中有效條目的LRU或pLRU的索引。在另一實施例中,每個指標符2304被用於指示與MAT相關之陣列104中,其有效條目LRU或pLRU之一者的索引。所述指標符2304在當所述MAT的計數2306已達到閾值2308時,被用於對與MAT相關之陣列104的有效條目,以LRU或pLRU的方式進行分配。在一實施例中,部分MAT可以在一替換策略中採用指標符2304而其它的MAT可以在另一替換策略中採用指標符2304,其可透過離線分析而決定具有最高效的策略。指標符2304可以包括一個或多個位元,其用以指示所期望採取的替換策略。
因應於未能在全關聯快取記憶體2302中命中的記憶體存取122,分配單元106基於MAT 101,計數器2306,閾值2308和指標符2304生成替換索引(replacement index)2316。替換索引2316用以指定將被分配或取代的存儲元件112的索引,其更詳細描述請參考如下。
請參照圖24,其所繪示為根據本發明之一實施例之從MAT到圖23的閾值2308其映射之示意圖。圖24示例的映射包括對應於表1的32個MAT。圖24的示例映射轉載於表3。
此處應當理解的是,雖然圖24(和表3)描述了一組特定的MAT和從MAT到閾值的特定映射,但前述的實施例僅用於示例之目的,本發明亦適用於具不同MAT組合和從MAT到閾值的不同映射。事實上,在一實施例中,當處理器在運作時,所述映射可根據正在運行程式或程式階段而動態地被更新(例如通過圖1的更新輸入126),其相關詳細內容請參照圖7-9。
請參照圖25,其所繪示為圖1的快取記憶體102其一部分之更詳細之方塊示意圖。在圖25的實施例中,用於32個MAT之指標符2304和閾值2308成對的被提供至多工器302。多工器302基於記憶體存取122的MAT指定符101的值來選取其中的一對,這對選定的指標符2304和閾值2308被提供給圖23的分配單元106。
另外,用於32個MAT之每一的計數器2306被提供至第二多工器2502。第二多工器2502基於MAT 101的值來選取計數器
2306其中之一。基於選定的指標符2304、計數器2306和閾值2308,分配單元106生成圖23的替換索引2316。分配單元106基於替換索引2316的值還更新圖23的MAT 2314、計數器2306和指標符2304,其更詳細的相關說明請參照圖27和30。
類似於圖3的描述,在一替代實施例中,快取記憶體102可以包括邏輯,其用以將具有較大數目(例如,32個)的MAT映射到具有較小數目(例如,2個)的MAT群組,其相關說明請參照圖29-30。舉例來說,在圖25的實施例中,MAT分組邏輯(MAT grouping logic,未示出)接收MAT 101且輸MAT群組編號。MAT群組編號可作為選取輸入而被提至供至多功器(MUX)302與2502(而非MAT 101)。在本實施例中,經由降低計數器2306、閾值2308和指標符2304的數目,可有益地減少硬體成本以及MAT 2314存儲元件的尺寸。
請參照圖26,其所繪示為一處理器其運作流程圖,所述處理器具有圖23的快取記憶體2302。所述流程開始於方塊2602。
在方塊2602中,處理器接收映射。所述映射將多個MAT(例如表1)中的每一個關聯到閾值(例如,圖24與表3所示的映射)。優選地,快取記憶體102於製造時即具有預設閾值2308的映射。優選地,默認閾值2308的映射用於多種不同程式使得快取記憶體102具有更高的操作效能,或至少為了被認為具特定需求、及/或有可能被具有快取記憶體102之處理器所執行的大多數程式而製造。所述流程接著進行至方塊2604。
在方塊2604中,通過圖23的更新輸入126,處理器以在方塊2602所接收的映射來更新快取記憶體2302的閾值2308其映射。優選地,映射2308是在系統初始化(system initialization)且/或作業系統(operating system)開機(boot)時,由系統軟體(例如,BIOS或作
業系統)所更新。再者,優選地,映射2308是以每個程式基礎(per program basis)和/或每個程式階段基礎(per program phase basis)被更新,其相關詳細說明請參照圖7-9。所述流程結束於方塊2604。
請參照圖27,其所繪示為圖23的快取記憶體2302其運作流程圖。所述流程開始於方塊2702。
在方塊2702中,快取記憶體102接收未能在快取記憶體102中命中的記憶體存取122。記憶體存取122索引選取陣列104中的一個條目112。記憶體存取122指定MAT 101。所述流程接著進行至方塊2704。
在方塊2704中,分配單元106判定與快取存取122的MAT 101相關聯的計數器2306是否已達到與MAT 101相關聯的閾值2308。所述流程接著進行至判定方塊2706。
在判定方塊2706中,如果與快取存取122的MAT 101相關聯的計數器2306已達到與MAT 101相關聯的閾值2308,所述流程接著進行至方塊2708;否則,所述流程接著進行至方塊2712。
在方塊2708中,分配單元106替換陣列104其中一個有效條目(valid entry)112,所述有效條目112其MAT 2314匹配於快取存取122的MAT 101。如圖23所述,將被替換的條目112可以是通過各種不同的替換策略來選取,採用關聯於MAT 101的指標符2304為優選者。所述流程結束於方塊2308。
在方塊2712中,分配單元106分配陣列104中的任何一個條目112。此處所採用的替換策略可以是任何本案所述的任何替換策略。在一實施例中,全關聯快取記憶體2302維持(maintain)全域指標符(global pointer,未示出),其用以指向陣列104中與MAT無關的最近被取代的有效條目的索引。優選地,在指出條目112後,分配單
元106經由無效或不具記憶體存取122的MAT 101的指標符找到下一個條目112。所述流程接著進行至方塊2714。
在方塊2714中,分配單元106遞增(increment)關聯於記憶體存取122其MAT 101的計數器2306。所述流程進行至判定方塊2716。
在判定方塊2716中,分配單元106判定被替換的條目112否有效。如果是,所述流程接著進行至方塊2718;否則,所述流程結束。
在方塊2718中,分配單元106遞減(decrement)關聯於被替換條目112其MAT 2314的計數器2306。所述流程結束於方塊2718。
請參照圖28,其所繪示為圖23之全關聯快取記憶體2302其運作流程圖。所述流程開始於方塊2802。
在方塊2802中,全關聯快取記憶體2302使某一條目112無效,以因應於快取線從全關聯快取記憶體2302中被引退(eviction)。所述流程接著進行至方塊2804。
在方塊2804中,全關聯快取記憶體2302遞減關聯於被無效的條目112其MAT 2314的計數器2306。所述流程結束於方塊2804。
請參照圖29,其所繪示為根據本發明一實施例之從MAT到MAT群組2909的映射2908與從MAT群組2909到閾值2911的映射之示意圖。在圖29的示例中,其具有四個MAT群組,分別表示為MAT群組0,MAT群組1,MAT群組2和MAT群組3。圖29的閾值2911類似於圖23的閾值2308,但其對應於四個MAT群組2909,而非對應於32個MAT。為了說明之故,圖29之MATs至MAT群組2909
的映射實例包含32個與表1相關的MATs。圖29的示例映射轉載於表4。
從MAT群組到閾值2911的映射其用以將MAT群組0映射到400條目112的閾值2911,將MAT群組0映射到400條目112的閾值2911,將MAT群組0映射到400條目112的閾值2911,以及將MAT群組0映射到400條目112的閾值2911。此處應該理解的是,雖然圖29(和表4)描述了一組特定的MAT集合以及從MAT到MAT群組與從MAT群組到閾值的特定映射,但前述的實施例僅用於示例之目的,本發明亦適用於具不同MAT組和不同的從MAT到MAT群組以及從MAT群組到閾值的映射。事實上,在一實施例中,當處理器在運作時,所述映射可基於正在運行程式或程式階段而動態地被更新(例如通過圖1的更新輸入126),其相關詳細內容請參照圖7-9。此
外,具不同的數目的MAT群組2909亦可以被採用。
如圖25中所描述的,全關聯快取記憶體2302可以另包括邏輯,其用以提供MAT群組2909的使用,可有益地減少硬體數量(其系在所需的交換上以潛在較少的配置與有效運用全關聯快取記憶體2302的方式來達成)。例如,優選地,全關聯快取記憶體2302僅具有對計數器2306有用的MAT群組2909的數量、閾值2308和指標符2304,且每個條目的MAT 2314持有條目112的MAT群組。
請參照圖30,其所繪示為圖23的快取記憶體2302其運作流程圖。所述流程開始於方塊3002。
在方塊3002中,快取記憶體2302接收未能在快取記憶體202中命中的記憶體存取122。記憶體存取122索引選取陣列104中的一個條目112。記憶體存取122指定MAT 101。分配單元106將MAT 101映射到MAT群組2909。所述流程接著進行至方塊3004。
在方塊3004中,分配單元106判定與MAT群組2909相關聯的計數器2306是否已達到與MAT群組2909相關聯的閾值2911。所述流程進行至判定方塊3006。
在判定方塊3006中,如果與MAT群組2909相關聯的計數器2306已達到與MAT群組2909相關聯的閾值2911,所述流程接著進行至方塊3008;否則,所述流程接著進行至方塊3012。
在方塊3008中,分配單元106替換陣列104其中一個有效條目112,所述有效條目112其MAT 2314匹配於快取存取122的MAT群組2909。如圖23所述,被替換的條目112可以是通過各種不同的替換策略來選取,而採用關聯於MAT群組2909的指標符2304為優選者。所述流程結束於方塊3008。
在方塊3012中,分配單元106分配陣列104中的任何
一個條目112,其類似於圖27的方塊2712所描述。所述流程接著進行至方塊3014。
在方塊3014中,分配單元106遞增關聯於記憶體存取122其MAT群組2909的計數器2306。所述流程接著進行至判定方塊3016。
在判定方塊3016中,分配單元106判定被替換的條目112否有效。如果是,所述流程接著進行至方塊3018;否則,所述流程結束。
在方塊3018中,分配單元106遞減關聯於被替換條目112其MAT 2314的計數器2306。所述流程結束於方塊3018。
當某一特定階層的快取其被規劃為具有兩個MAT群組且其中的第一MAT群組僅能分配至多全關聯快取記憶體2302其閾值的數量(例如,80%),則圖29和30的實施例可用來對所述特定階的快取來提高其效率。所述第一MAT群組可以包括所有與資料相關(data-realted)的MAT,而第二MAT群組可以包括所有與代碼相關(code-realted)的MAT(例如,代碼獲取與代碼預取),限制全關聯快取記憶體2302中包含代碼的快取線,可有效地在專用指令快取(private instruction cache)中防止與資料(例如,流資料)間的爭用情形發生。
請參照圖31,其所繪示為一集合關聯快取記憶體3102之方塊示意圖。圖31的快取記憶體3102在許多方面類似於圖1的快取記憶體102,並且其具有相似編號的元件亦是相似的。然而,圖31的快取記憶體3102包括映射3108,其不同於圖1的映射108。圖31的映射3108可以包括任何圖1-22E所示的不同的映射;然而,圖31的映射3108還包括將不同的多個MAT映射到MAT優先順序的映射3108,圖32為其中一個例子。另外,用於每個有效的快取線的MAT
3114其存儲在陣列104中。亦即,當存儲元件112被分配給快取線時,使所述分配加速的記憶體存取122其MAT 101則是儲存在存儲元件112。有利地,MAT 3114連同MAT到MAT優先順序映射3108的儲存,能夠使快取記憶體3102將陣列104的一選定集合的有效快取線的MAT 3114包含於替換策略中,以選取所選定集合其一個分路來作分配,其更詳細的描述請參考如下,特別是參考圖33。
請參照圖32,其所繪示為根據本發明之一實施例之從MAT到圖31的優先順序3108其映射之示意圖。圖32示例的映射包括對應於表1的32個MAT。圖32的示例映射轉載於表5。
此處應當理解的是,雖然圖32(和表5)描述了特定的MAT集合和從MAT到MAT優先順序的特定映射,但前述的實施例僅用於示例之目的,本發明亦適用於具不同MAT集合和從MAT到MAT
優先順序的不同映射。事實上,在一實施例中,當處理器在運作時,所述映射可根據正在運行程式或程式階段而動態地被更新(例如通過圖1的更新輸入126),其相關詳細內容請參照圖7-9。
請參照圖33,其所繪示為一考慮到快取線其MAT的快取線替換策略流程圖。所述流程開始於方塊3302。
在方塊3302中,快取記憶體3102接收在快取記憶體3102中未能命中的記憶體存取122。記憶體存取122索引選取陣列104中的一個集合。記憶體存取122指定MAT 101。所述流程接著進行至方塊3304。
在方塊3304中,分配單元106根據用於所選定集合的替換策略來決定最符合的替換分路與第二符合的替換分路。例如,如果替換策略是LRU/pLRU,分配單元106根據替換位元114來決定所選定集合的LRU分路和第二符合的LRU分路。在另一例子中,如果替換策略是輪叫,分配單元106藉由替換位元114的輪叫指標符來決定所指向的分路,並以輪叫順序(round-robin order)方向的下一個分路。在另一例子中,如果替換策略是是隨機的,分配單元106隨機地決定其中兩個分路。此處應當理解的是,在一實施例裡快取記憶體3102其分路、集合群組、組塊或包裹的分配是有限的話,則分配單元106僅考慮所選取集合的一個分路子集,再檢視所述分路子集裡最符合和第二符合的分路的MAT優先順序(MAT priority)。所述流程接著進行至方塊3306。
在方塊3306中,分配單元106檢視在方塊3304所決定之最符合分路的MAT 3114和第二符合分路的MAT 3114,然後比較此兩個MAT 3114其相對之MAT優先順序3277。所述流程接著進行至判定方塊3308。
在判定方塊3308中,如果最符合分路的MAT優先順序3377高於第二符合分路的MAT優先順序3377,所述流程接著進行至方塊3312;否則,所述流程接著進行至方塊3314。在一實施例中,分配單元106計算最符合分路的MAT優先順序3377與第二符合分路的MAT優先順序3377之間的差值並判定此差值是否大於閾值,而不是僅測試最符合分路的MAT優先順序3377是否高於第二符合分路的MAT優先順序3377。此處應當注意的是,如果在選定集合(或其相關子集)具有無效的分路,則分配單元106分配此無效分路而不是替換最符合和第二符合的分路。
在方塊3312中,分配單元106替換第二符合分路而非最符合分路。所述流程接著進行至方塊3316。
在方塊3314中,分配單元106替換最符合分路。所述流程接著進行至方塊3316。
在方塊3316中,分配單元106以快取存取122的MAT 101來更新被替換分路的MAT 3114。在這種方式下,陣列104的條目其MAT 3114被保持。所述流程接著進行至方塊3318。
在方塊3318中,分配單元106檢視快取存取122的MAT 1011且判定其是否具有相對低的優先順序,例如,低於閾值。舉例來說,在圖32的實施例中,分配單元106可判定快取存取122的MAT 1011是否低於3。所述流程接著進行至判定方塊3322。
在判定方塊3322中,如果快取存取122的MAT 1011具有相對低的優先順序,所述流程接著進行至方塊3326;否則,所述流程接著進行至方塊3324。
在方塊3324中,分配單元106根據替換方案將被替換的分路插入替換位元114中最不適合的位置。舉例來說,在LRU/pLRU
方案下,分配單元106將被替換的分路插入最近使用位置。另一個例子,在輪叫方案下,分配單元106以剛剛超過(past)被替換分路者來更新輪叫指標符。所述流程結束於方塊3324。
在方塊3326中,分配單元106根據替換方案將被替換分路插入替換位元114中適度(moderately)的位置,前述的分配基於快取存取122的MAT優先順序3277有多低為優選者。舉例來說,在LRU/pLRU方案下,分配單元106將被替換分路插入一中間位置。優選地,MAT優先順序3277愈低,分配單元106將被替換分路插入愈接近中間位置。相反地,MAT優先順序3277愈高,分配單元106將被替換分路插入愈遠離中間位置且愈接近最近使用的位置。在一實施例中,對那些非常低的MAT優先順序3277(例如,優先順序為0的預取)來說,分配單元106將被替換分路插入在LRU或次於LRU(next-to-LRU)的位置。另一個例子,在輪叫方案下,分配單元106依據MAT優先順序3327有多低,來以更多超過(past)被替換分路的位置來更新輪叫指標符。在一實施例中,當決定要將被替換分路插入於那個位置時,分配單元106還考慮到相對的MAT優先順序3327,其關聯於與最不適合位置之鄰近的一個或多個分路其MAT 3114。所述流程結束於方塊3326。
雖然在前述實施例中是以兩個最符合分路作考慮,但在其他實施例可以以更多的最符合分路來作考慮,例如,如果第三最符合分路其MAT優先順序小於最符合分路和第二符合分路,則分配單元106取代第三最符合分路。
在本案所述快取記憶體的各種配置,例如基於分路、集合群組、組塊、MAT群組閾值、或具不同替換策略的包裹的映射,其可以分類為靜態配置(static configuration)、動態配置(dynamic
configuration)或同時具備此兩者之配置。一般來說,靜態配置是矽前(pre-silicon)的規劃工作。也就是說,設計者使用直覺,優選地通過處理器設計的軟體模擬(software simulation)的輔助以判好的配置。所謂好的配置指其能潛在地改善處理器的性能,特別是快取記憶體的性能。處理器性能的改進能提高處理器執行程式的速度(例如,降低每個指令比率的時鐘數量或增加每個時鐘比率的指令數量)和/或減少功率的消耗。所述程式可以是作業系統、可執行的程式(例如,應用程式(application)、工具程式(utility)、標準檢查程式(benchmark))、動態連結程式庫(dynamic link libraries)等。所述軟體模擬可用於進行程式的離線分析,進而去提高處理器的性能,其相關說明請參照圖34-36(特別是相關於快取記憶體配置的敘述)。優選地,設計者可決定對大量程式集合有說明的靜態配置,而設計者可將靜態配置加入至用於晶片製造的設計中。
相反的,一般而言,矽後(post-silicon)規劃則是用來分析動態配置。亦即,在處理器被製造後,當處理器正在執行具不同於製造在矽晶片中靜態配置(或是默認分配)的程式時,設計者執行不同種類的離線分析以判定處理器的效能。矽後測試可涉及更嚴謹(也許更蠻力(brute force))的技術,在此技術中用於進行相對於配置矩陣(configuration matrix)的自動性能回歸(automated performance regression),然後進行回歸性能資料(regression performance data)分析,其相關說明請參照圖37。設計者可以採用矽前測試的結果作為對矽後(post-silicon)測試的初始種子(initial seed),例如,以試圖避免局部最大值(local maxima)並非全域最大值(global maxima)的情況。
無論測試是矽前或矽後,經由動態配置測試(dynamic configuration testing),在程式基礎(per-program basis)或甚至在程式階段
基礎(per-program phase basis)上即可判定出好的配置。然後,當系統(例如,裝置驅動程式)檢測到已知程式正在處理器上運行(即,為所述程式的分析已被執行且已得知一個好的配置),所述系統提供此好的程式專用(program-specific)配置到所述處理器,並且當處理器運行時,所述處理器用動態方式以程式專用配置來更新快取記憶體。優選地,所述程式專用配置包括用於在程式不同階段的不同配置。此外,因應於程式專用配置,所述處理器還檢測階段變化且動態更新配置,其相關說明請參照圖36。
程式階段是相對於一組給定特性,其是一種計算器程式的子集,且具有一致行為的特徵。舉例來說,假定相關特徵是分支預測率(branch prediction rate)和快取命中率(cache hit rate),則程式階段則是指那些具有執行時間(runtime)行為的程式子集,在此程式子集裡分支預測率和快取命中率是一致的。例如,離線分析可確定某一特定資料壓縮程式(data compression program)有兩個階段:字典結構階段(dictionary construction phase)和字典查找階段(dictionary lookup phase)。字典結構階段(dictionary construction phase)具有相對低的分支預測率(branch prediction rate)和相對高的快取命中率(cache hit rate),與建立子字串集合的方式一致(亦與建立字串大量集合的方式一致);而,字典查找階段(dictionary lookup phase)具有相對高的分支預測率(branch prediction rate)和相對低的快取命中率(cache hit rate),與在字典中查找子字串的方式一致(其查找範圍較快取尺寸為大)。
在一實施例中,可使用“預言快取”(“oracle cache”)來進行離線分析,其中“預言快取”正如其名稱所暗示的是對未來的預測。在快取記憶體有限的空間裡,預言快取知道在任何時間點都應該在快取記憶體中的存在最有用的資料。預言快取可以被概念化為快取內容
的逐週期(cycle-by-cycle)或逐指令(instruction-by-instruction)快照(snapshot),以產生最高命中率。
首先,為程式執行(program execution)生成一系列的(sequence)預言記憶體快照(oracle cache snapshot)和持續追蹤記憶體存取的MAT,所述記憶體存取係在所述快照裡產生快取線的分配者。然後,為每一個所述快照產生圓形分格統計圖表(pie chart)。其中,對於每個MAT或MAT群組來說,所述圓形分格統計圖表示出快取記憶體被快取線佔據的百分比,所述快取線因應於MAT的記憶體存取而被分配,其中的一個例子示於圖38。然後,在所述程式的後續執行中,處理器不斷利用一系列的圓形分格統計圖表所示的MAT百分比來重新分配(re-budget)快取(或分路、集合群組、組塊、包裹、閾值、MAT優先順序,等等)。
當重新規劃細緻到頻率週期(clock cycle)或指令是不切實際的情形時,可傾向以更長的持續時間來檢視圓形分格統計圖表系列,例如,完整的程式或程式階段。然後,為每一個MAT算出所有圓形分格統計圖表系列(程式或程式階段)的平均值以根據平均圓形分格統計圖表作分配。
從廣義上說,預言快取的想法是因為預先知道所有的記憶體存取,預言快取可以預先執行(pre-execute)所有的記憶體存取。然後隨著程式的執行,預言快取預測出在任何特定的時間點裡快取中最好的快取線集合。舉例來說,在圖35中,預言快取將預測出MAT 1的短持續時間快取線(上面數來第二條實線)在其最後被存取後將不會再被快取。使用這樣的分析,可在每個MAT為基礎之上得出對快取分配和替換策略的觀察。
請參照圖34,其所繪示為用於程式和程式階段的一映
射其生成流程圖。所述流程開始於方塊3402。
在方塊3402中,設計者,優選地以自動方式,運行程式且記錄由程式所生成並對快取記憶體122,例如由程式所生成之對102、1002、1402、1502、1702、1902、2302、3102存取的記憶體存取122。優選地,快取線的分配、命中和引退(eviction)被紀錄下來。記憶體存取122的記憶體位址、MAT 101和時間(例如,相對時序週期)被紀錄下來。所述流程接著進行至方塊3404。
在方塊3404中,設計者,優選地以自動方式,定時地分析記錄在方塊3402的資訊以及識別出明顯的趨勢以將程式分離成不同階段,其相關說明請參照圖36。舉例來說,所述明顯的趨勢例如是識別MAT 101的工作集合尺寸(working set size)、MAT 101的平均快取線壽命(average cache line lifetime)、MAT 101的平均命中率。所述流程接著進行至方塊3406。
在方塊3406中,設計者,優選地以自動方式,基於在方塊3404所進行的分析為不同的程式階段來建立(create)映射或配置。舉例來說,所述映射或配置是利用分路的快取分配映射(cache budget mapping),例如,圖2的108;利用集合群組的快取分配映射,例如,圖10、14或15的1008;利用組塊的快取分配映射,例如,圖15或17的1508或1708;支援異構替換策略的快取分配映射,例如,圖19-22E的1908;基於MAT的條目分配閾值(MAT-based entry allocation threshold),例如,圖23-24的2308;MAT至MAT群組和MAT群組至閾值的映射,例如,圖29的2908;和MAT優先順序映射,例如,圖31-32的3108。在一實施例中,所述用於判定映射或配置的分析可以包括類似於圖35-38所描述的分析。此處應當理解的是,一些程式可能不會表現出明顯的趨勢,使得它們在被分解成不同的階段有不良影
響,在這種情況下,單一的映射或配置對整個程式來說已是足夠的。所述流程結束於方塊3406。
請參照圖35,其所繪示為一快取存取圖形和從此圖形提取的資料示意圖。所述圖形之記憶體存取由點(dot)來表示。在圖中,水準軸為時間,其為獨立變數(indapendent variable);而縱軸為記憶體位址,其為因變數(dependent variable)。在指定的記憶體位址,水平線對應於個別的快取線。線的左邊緣表示快取線的分配,而線的右邊緣表示快取線從快取記憶體中被引退。每一個快取線有一個相關聯的MAT,即如圖35所示的MAT 1,MAT 2,MAT 3和MAT 4.。在圖35的例子中示出了6條快取線,其中兩個具有關聯的MAT 1,兩個具有關聯的MAT 2,一個具有關聯的MAT 3,以及一個具有關聯的MAT 4。
在圖形下方所示出的是八個具一定間隔的時間間隔,總的工作集合尺寸(total working set size)和相應於每一個MAT的工作集合尺寸。所述時間間隔可以是與基本塊傳輸(basic block transfer)相關(其相關說明請參照圖36)和用於為每一個程式階段來判定其程式階段和配置或者映射。舉例來說,在一特定的程式或階段期間,其配置或映射可根據具有相對較大工作組尺寸的MAT而分配更多的分路,集合群組,組塊,或包裹;或者根據具有相對較小工作組尺寸的MAT而分配更少的分路;或者至少將工作集合尺寸列入考慮,如圖35每個MAT所示。
另外,從圖35的圖形中亦可觀察出每個個別的MAT其快取線其有用的長度,例如平均快取線壽命。平均快取線壽命可依據在程式階段之個別MAT中,計算所有快取線其壽命(從分配到引退)的總合除以快取線的數目之值。這個資訊可以被用來影響快取記憶體
的替換策略。
如果預言快取所預測被快取的線其數目可以對應於集合和分路其在快取記憶體中的預期數目,則快取分配與平均壽命觀測的準確性可能會增加。其它指標也可以被收集,例如每一MAT的快取線命中情形。
請參照圖36,其所繪示為一程式其階段分析之流程圖。所述階段分析是離線分析的一種形式,其可用於判定處理器的可配置方面(例如,其快取記憶體或預取器)其好的配置或映射。所述流程開始於方塊3602。
在方塊3602中,一程式其欲藉由處理器來改善其性能。首先,所述程式被進行分析且被分解以生成狀態圖(state diagram)。狀態圖的節點(node)是所述程式的基本塊(basic block)。基本塊是程序控制指令(program control instruction)(例如,分支(branch)、跳轉(jump)、調用(call)、返回(return)等等)之間的指令系列(sequence of instruction)。在所述狀態圖中的每個邊緣(edge)是一個由邊緣所指引的目標基本塊(target basic block)狀態改變資訊,如下所述,其可成為一階段識別字。階段識別字可包括控制轉移指令(control transfer instruction)的指令指標符(instruction pointer,IP)或程式計數器(program counter,PC)、所述控制轉移指令(control transfer instruction)的目標位址(target address)、和/或控制轉移指令的調用堆疊(call stack)。所述調用堆疊(call stack)可包括調用的返回地址(returen address)和參數。程式階段是具有一個或多個基本塊的程式其一部分。所述流程接著進行至方塊3604。
在方塊3604中,所述程式用以分析某些特徵。所述特徵關於處理器其可配置的方面,例如,快取記憶體映射、預取器MAT分數(prefetcher MAT score)、和快取配置模式(cache configuration mode)。
所述特徵例如包括快取命中率、分支預測準確性(branch prediction accuracy)、工作集合尺寸、平均快取線壽命、和快取污染(cache pollution)(例如,被預取但從未使用的快取線數目)。所述流程接著進行至方塊3606。
在方塊3606中,所述程式以一給定的配置(例如,給定的快取記憶體和/或預取器配置)而被執行,並且通過觀察方塊3604所分析出的特徵中的穩態行為(steady state behavior)來確定所述程式的階段。舉例來說,假設快取命中率是分析出的感興趣特徵之一,並假設所述快取命中率從97%變為40%。所述快取命中率變化的趨向指出快取記憶體配置對所述程式來說之前是好的但是現在並不好。因此,在快取命中率變化之前的基本塊系列可以被識別為第一階段,而在快取命中率變化之後的基本塊系列可以被識別為第二階段。在另一個例子中,假設不同MAT其工作組尺寸是分析出的感興趣特徵之一,則工作組尺寸顯著的大位移(shift)可表示出在程式中的一個理想位置以識別出階段改變。所述流程接著進行至方塊3608。
在方塊3608中,一旦所述階段被識別,用於每個階段的好的配置、或映射、或配置值則可被決定。舉例來說,各種不同的離線分析技術可以被使用,其相關說明請參照圖34、35和37。所述流程接著進行至方塊3612。
在方塊3612中,將階段識別字關聯於階段的變化。上述基本塊切換(basic block transition)的狀態改變資訊(state change information)或潛在階段識別字(potential phase identifier)(如上所述,在特性分析時發生狀態改變)會隨著方塊3608所判定的好的配置一起被紀錄,而所述資訊會在程式被測得即將執行時,由裝置驅動程式(例如是)提供給處理器。所述流程接著進行至方塊3614。
在方塊3614中,在接收到與所被分析的程式相關聯的資訊之後,處理器將如圖8的階段識別字802載入(load)到階段檢測器804,其相關詳細說明請參照圖7-9。所述流程結束於方塊3614。
請參照圖37,其所繪示為一蠻力方法(brute force method)之流程圖,所述蠻力方法用於判定處理器其可配置方面(例如,其快取記憶體或預取器)的好的配置或映射。所述方法使用“座標下降”(“coordinate descent”)優化演算法(optimization algorithm)。所述流程開始於方塊3702。
在方塊3702中,一程式或一程式階段其欲藉由處理器來改善其性能。所述方法重複執行方塊3704-3716直到一好的配置被判定(例如,在一個相對長的時間中沒有改變的目前最好配置)或資源已經過期(例如,時間和/或計算資源)。所述流程接著進行至方塊3704。
在方塊3704中,所述目前最好的配置被設置為預設配置(default configuration),例如,快取記憶體或預取器的默認映射。在一實施例中,預設配置簡單的就是處理器被製造時的配置。所述流程接著進行至方塊3706。
在方塊3706中,為每一個配置參數(configuration parameter)來進行方塊3708-3712。所述配置參數的一個例子是單一配置位元(single configuration bit),其用以例如開啟或關閉特徵(feature)。所述配置參數的另一個例子是配置域(configuration field),例如:向量304、集合群組選取邏輯1106/2106、包裹指定符2001、閾值2308、MAT到MAT集合群組及MAT組群組到閾值映射2908、及MAT到MAT優先順序映射3108。所述流程接著進行至方塊3708。
在方塊3708中,為方塊3706配置參數其合理集合值中的每一個來進行方塊3712-3716。所述配置參數其合理的集合值取決於配置
參數的尺寸、參數的重要性、以及重複計算其值所需資源的量。舉例來說,在單一配置位元的情況下,單一配置位元的兩個值都在合理集合(reasonable set)內。舉例來說,對於只有或少於16個參數,所述方法可以去嘗試所有可能的值。然而,對於相對大的域,例如32位元的域,嘗試所有2^32個可能的值是不可行的。在此情況下,設計者可以提供一個包括多個值的合理集合給所述方法。舉例來說,如上所述,設計者可以觀察具有類似特性的MAT群組並將它們組合在一起,以限制可能的數量。如果設計者不能提供所述的值而可能的數量是相對較大,所述方法會用合理數目的參數隨機值來重複執行方塊3712-3716。所述流程接著進行至方塊3712。
在方塊3712中,所述程式或程式階段以目前最好但被方塊3708所得到的下一個參數值所修改的配置來運行,並且測量其性能。所述流程接著進行至判定方塊3714。
在判定方塊3714中,所述方法將方塊3712所測量的性能與目前最好性能進行比較,如果前者比較好,所述流程接著進行至方塊3716;否則流程接著進行至方塊3712,以測試下一個參數值直到所有合理的數值都測試過,在此情況下,所述流程接著進行至方塊3708,以重複下一個配置參數直到所有的配置參數都測試過,在此情況下,所述方法結束,而最終為所述程式或程式階段生成目前最好配置。
在方塊3716中,所述方法以在方塊3712測試的配置來更新最好的配置。所述流程返回至方塊3712,以測試目前參數的下一個數值直到合理的數值都測試過,在此情況下,所述流程返回至方塊3708,以重複執行下一個配置參數直到所有的配置參數都測試過,在此情況下,所述方法結束,而最終為所述程式或程式階段產生目前最好配置。
此處應當注意的是,設計者也許並不理解並且也不需要
去理解為什麼使用類似於圖37的方法所生成的配置能產生好的結果。
請參照圖38,其所繪示為一分析結果之圓形分格統計圖表3801。根據圖34、36和37所示不同的分析所得的結果,可以被概念化為一圓形分格統計圖表,每個MAT具有一分片(slice),即每個MAT具有其百分比。在通過以分路來分配快取的情況下,每個MAT其分路子集大致對應其百分比。可替代地,如上所述,MAT可以被分組而每個MAT群組其分路子集大致對應在此群組內所有MAT其百分比的總合。圖38示出了一個例子。在以集合群組、組塊或包裹來分配快取的情況下,一圓形分格統計圖表為每個組群,組塊或包裹而被構造,然後以一類似的技術被應用。所述圓形分格統計圖表(pie chart)3801包括用於每個不同MAT群組的一個分片。在圖38的例子中,一預取群組(prefetch group)是42%,一代碼群組(code group)是19%,一浮點群組(floating point group)是23%,一流數據群組(floating data group)是11%,以及一堆疊和分頁表群組(stack andtablewalk groip)是5%。
請參照圖39,其所繪示為一處理器3900之方塊示意圖。處理器3900包括指令快取3922,其用以提供指令給指令解碼器3923。指令解碼器3923用以解碼所述指令且提供解碼指令給指令調度器3924。指令調度器3924用以將所述指令調度給執行單元3926來執行。優選地,處理器3900的微結構是超純量和非循序執行,然而本發明並不以此為限。在另一實施例中,指令調度器3924還包括指令調度程式,其用以以超純量和非循序方式將所述指令調度(scheduling)給多個執行單元。優選地,處理器3900還包括結構暫存器(未示出)與非結構暫存器(未示出)。結構暫存器用以持有處理器3900的結構狀態。優選地,處理器3900還包括暫存器別名表(RAT,
未示出)和排序緩衝器(ROB,未示出)。所述暫存器別名表(RAT)用以進行暫存器重命名。所述排序緩衝器(ROB)以程式順序來引退指令。優選地,所述指令調度器包括指令解譯器(未示出),其用以將結構指令解譯為可被執行單元3926所執行的處理器3900的微指令集結構的微指令。
處理器3900還包括記憶體子系統3928,其用以提供記憶體操作元至執行單元3926並從執行單元3926接收記憶體操作元。優選地,記憶體子系統3928包括一個或多個載入單元、一個或多個存儲單元、載入列、存儲列、用於向記憶體請求快取線的填充列、用於窺探與處理器3900相通信的記憶體匯流排的窺探列、分頁表尋訪引擎和其他相關的功能單元。
處理器3900還包括與記憶體子系統3928相通信的快取記憶體102。優選地,快取記憶體102類似於圖1-38的快取記憶體。雖然圖中僅繪出單一個快取記憶體102,快取記憶體102可以是較大的快取記憶體子系統其多個快取記憶體級之一,例如level-1(L1)指令快取、L1資料快取、與統一level-2(L2)快取,其用以支持L1快取。在一實施例中,快取子系統還包括level-3(L3)快取。處理器3900還可以包括一個或多個預取器,其用以將資料從記憶體預取至快取記憶體102。在一個實施例中,處理器3900是一多核處理器,每一個核都具有上述的功能單元,並且這些核共用快取記憶體102。
記憶體子系統3928生成快取記憶體102的記憶體存取122,其相關說明請參照圖1-38的實施例。記憶體存取122包括記憶體位址,其為記憶體被存取的位置。每個記憶體存取122還包括記憶體存取類型(memory access type(MAT))101,如上所述。
雖然本發明的各種實施例已在本文中描述,但是此處
應當理解的是,它們僅用於示例而不能以此限定本發明實施之範圍,即大凡依本發明申請專利範圍及發明說明內容所作之簡單的等效變化與修飾,皆仍屬本發明專利涵蓋之計算器領域範圍內。舉例來說,軟體可以啟用本案說明書所描述的裝置和方法其功能、製造、建模(modeling)、模擬、描述和/或測試。其可以通過使用通用程式設計語言(general programming langiage)來實現(例如,C、C ++),硬體描述語言(HDL)其包括Verilog HDL、VHDL等,或其他可用的程式。所述的軟體可以設置在任何已知的計算器可用介質,諸如磁帶、半導體,磁片、或光碟(例如,CD-ROM、DVD-ROM等)、網路、有線線路、無線或其它通信介質。本案的裝置和方法實施例可以被包括在一半導體智慧財產權核心,諸如處理器核心(例如,具體或者指定的HDL)和轉化為積體電路的硬體。另外,所述裝置和方法可以被實施為硬體和軟體的組合。因此,本發明不應當由本案描述的任何示例性實施例限制,但應當僅根據下面的權利要求及其等同物限定。具體地,本發明可以在通用計算器中使用的處理器裝置所實現。最後,本領域的技術人員應該理解,他們可以容易地使用公開的概念和具體的實施例作為設計或修改其它結構以實施本發明的相同目的,而不脫離本發明的範圍的基礎所界定所附的權利要求。
雖然本發明已以較佳實施例揭露如上,然其並非用以限定本發明,任何熟習此技藝者,在不脫離本發明之精神和範圍內,當可作些許之更動與潤飾,因此本發明之保護範圍當視後附之申請專利範圍所界定者為準。
101‧‧‧記憶體存取類型(MAT)
102‧‧‧集合關聯快取記憶體
104‧‧‧陣列
106‧‧‧分配單元
108‧‧‧映射
112‧‧‧存儲元件
114‧‧‧替換位元
116‧‧‧替換分路
122‧‧‧記憶體存取
124‧‧‧命中信號
126‧‧‧更新輸入
Claims (21)
- 一種全關聯快取記憶體,包括:一具有存儲元件的陣列;一分配單元,用以分配該陣列的存儲元件以因應於在該快取記憶體中未命中的一記憶體存取;其中每個該記憶體存取具有多個預定記憶體存取類型(MAT)其中一個相關聯的MAT,其中該MAT由該快取記憶體所接收;其中該陣列的每一個有效存儲元件具有該多個預定MAT其中一個相關聯的MAT;其中對於該多個預定MAT中的每一個MAT來說,該分配單元保持:一計數器,用以計數關聯於該MAT的陣列的有效存儲元件的數目;以及一對應的閾值;以及其中該分配單元分配該陣列的任何一個存儲元件以因應於在該快取記憶體中未命中的該記憶體存取,除非該記憶體存取的MAT的計數已達到對應的閾值,在此情況下,該分配單元替換關聯於該快取記憶體的MAT的有效存儲元件的其中一個。
- 如申請專利範圍第1項所述之全關聯快取記憶體,其中當該分配單元分配該陣列的一個有效存儲元件其所關聯的MAT並非該記憶體存取的MAT,該分配單元遞增關聯於記憶體存取其MAT的該計數器且遞減關聯於該陣列的有效存儲元件的MAT的該計數器。
- 如申請專利範圍第1項所述之全關聯快取記憶體,其中當該分配單元分配該陣列的一個無效存儲元件,該分配單元遞增關聯於該記憶體存取其 MAT的該計數器。
- 如申請專利範圍第1項所述之全關聯快取記憶體,更包括:用於該多個MAT中的每一個MAT的一指標符,該指標符用以指向關聯於MAT的有效存儲元件其最近被替換的一個;以及其中當該記憶體存取的MAT的計數已達到對應的閾值,該分配單元以輪叫方式替換關聯於MAT的有效存儲元件其下一個。
- 如申請專利範圍第1項所述之全關聯快取記憶體,更包括:其中當該記憶體存取的MAT的計數已達到對應的閾值,該分配單元以隨機方式替換關聯於MAT的有效存儲元件其中一個。
- 如申請專利範圍第1項所述之全關聯快取記憶體,更包括:用於該多個MAT中的每一個MAT的一指標符,該指標符用以指向關聯於MAT的有效存儲元件其最近被替換的一個;以及其中當該記憶體存取的MAT的計數已達到對應的閾值,該分配單元替換關聯於MAT的有效存儲元件中最近被使用的一個。
- 如申請專利範圍第1項所述之全關聯快取記憶體,其中該多個預定MAT包括以下列表中的至少三個:由一處理器的一硬體預取器所生成的一記憶體存取;由一浮點指令所生成的一記憶體存取;由一融合微指令所生成的一記憶體存取;由一媒體指令所生成的一記憶體存取;由一用以修改一記憶體位址的指令所生成的一記憶體存取; 由一軟體預取指令所生成的一記憶體存取;一用以載入一結構描述符的記憶體存取;由一用以指定一非暫時資料的指令所生成的一記憶體存取;由一用以進行非對齊檢查的指令所生成的一記憶體存取;由一監控特權級別指令所生成的一記憶體存取;由一零擴展產指令所生成的一記憶體存取;由一遮照移動指令所生成的一記憶體存取;由一堆疊推入指令所生成的一記憶體存取;以及由該處理器的一硬體分頁表尋訪引擎所生成的一記憶體存取。
- 一種用於操作一全關聯快取記憶體的方法,該全關聯快取記憶體包括一具有存儲元件的陣列和一分配單元,用以分配該陣列的存儲元件以因應於在該快取記憶體中未命中的一記憶體存取,其中每個該記憶體存取具有多個預定記憶體存取類型(MAT)其中一個相關聯的MAT,該方法包括:為該陣列的有效存儲元件的每一個,保持該多個預定MAT中其中一個相關聯的MAT;為該陣列的有效存儲元件的每一個保持:一計數器,用以計數關聯於該MAT的陣列的有效存儲元件的數目;以及一對應的閾值;以及分配該陣列的任何一個存儲元件以因應於在該快取記憶體中未命中的該記憶體存取,除非該記憶體存取的MAT的計數已達到對應的閾值,在此情況下,替換關聯於該快取記憶體的MAT的有效存儲元件的其中一個。
- 如申請專利範圍第8項所述之方法,更包括: 判定一處理器上正在運行的一程式,其中該映射是由該程式的離線分析所判定;以及更新該閾值以因應於當判定該處理器上正在運行程式。
- 如申請專利範圍第8項所述之方法,更包括:因應分配該陣列的一個有效存儲元件其所關聯的MAT是該記憶體存取的MAT,遞增關聯於記憶體存取其MAT的該計數器且遞減關聯於該陣列的有效存儲元件的MAT的該計數器。
- 如申請專利範圍第8項所述之方法,更包括:因應分配該陣列的一個無效存儲元件,遞增關聯於該記憶體存取其MAT的該計數器。
- 如申請專利範圍第8項所述之方法,更包括:為該多個MAT中的每一個MAT,保持一指標符,該指標符用以指向關聯於MAT的有效存儲元件其最近被替換的一個;以及當該記憶體存取的MAT的計數已達到對應的閾值,以輪叫方式替換關聯於MAT的有效存儲元件其下一個。
- 如申請專利範圍第8項所述之方法,更包括:當該記憶體存取的MAT的計數已達到對應的閾值,以隨機方式替換關聯於MAT的有效存儲元件其中一個。
- 如申請專利範圍第8項所述之方法,更包括:為該多個MAT中的每一個MAT,保持一指標符,該指標符用以指向 關聯於MAT的有效存儲元件其最近被替換的一個;以及當該記憶體存取的MAT的計數已達到對應的閾值,替換關聯於MAT的有效存儲元件中最近被使用的一個。
- 一種全關聯快取記憶體,包括:一具有存儲元件的陣列;一分配單元,用以分配該陣列的存儲元件以因應於在該快取記憶體中未命中的一記憶體存取;其中每個該記憶體存取具有多個預定記憶體存取類型(MAT)其中一個相關聯的MAT,其中該MAT由該快取記憶體所接收;其中該陣列的每一個有效存儲元件具有該多個預定MAT其中一個相關聯的MAT;一映射,用以將該多個預定MAT映射到兩個或兩個以上的MAT群組;其中對於該多個MAT群組中的每一個MAT群組來說,該分配單元保持:一計數器,用以計數關聯於該MAT群組的陣列的有效存儲元件的數目;以及一對應的閾值;以及其中該分配單元分配該陣列的任何一個存儲元件以因應於在該快取記憶體中未命中的該記憶體存取,除非該記憶體存取的MAT群組的計數已達到對應的閾值,在此情況下,該分配單元替換關聯於該快取記憶體的MAT群組的有效存儲元件的其中一個。
- 如申請專利範圍第15項所述之全關聯快取記憶體,其中當該分配單元分配該陣列的一個有效存儲元件其所關聯的MAT群組並非該記憶體存取的MAT群組,該分配單元遞增關聯於記憶體存取其MAT群組的該計數器且 遞減關聯於該陣列的有效存儲元件的MAT群組的該計數器。
- 如申請專利範圍第15項所述之全關聯快取記憶體,其中當該分配單元分配該陣列的一個無效存儲元件,該分配單元遞增關聯於該記憶體存取其MAT群組的該計數器。
- 如權申請專利範圍第15項所述之全關聯快取記憶體,更包括:用於該多個MAT群組中的每一個MAT群組的一指標符,該指標符用以指向關聯於MAT群組的有效存儲元件其最近被替換的一個,以及其中當該記憶體存取的MAT群組的計數已達到對應的閾值,該分配單元以輪叫方式替換關聯於MAT群組的有效存儲元件其下一個。
- 如申請專利範圍第15項所述之全關聯快取記憶體,更包括:其中當該記憶體存取的MAT群組的計數已達到對應的閾值,該分配單元以隨機方式替換關聯於MAT群組的有效存儲元件其中一個。
- 如申請專利範圍第15項所述之全關聯快取記憶體,更包括:用於該多個MAT群組中的每一個MAT群組的一指標符,該指標符用以指向關聯於MAT群組的有效存儲元件其最近被替換的一個;以及其中當該記憶體存取的MAT群組的計數已達到對應的閾值,該分配單元替換關聯於MAT群組的有效存儲元件中最近被使用的一個。
- 一種用於操作一全關聯快取記憶體的方法,該全關聯快取記憶體包括一具有存儲元件的陣列和一分配單元,用以分配該陣列的存儲元件以因應於在該快取記憶體中未命中的一記憶體存取,其中每個該記憶體存取具有多 個預定記憶體存取類型(MAT)其中一個相關聯的MAT,該方法包括:為該陣列的有效存儲元件的每一個,保持該多個預定MAT中其中一個相關聯的MAT;為該多個預定MAT中的每一個MAT保持:一計數器,用以計數關聯於該MAT的陣列的有效存儲元件的數目;以及一對應的閾值;以及因應於在該快取記憶體中未命中的該記憶體存取:將該多記憶體存取的MAT映射到兩個或兩個以上的MAT群組;以及分配該陣列的任何一個存儲元件,除非該記憶體存取的MAT群組的計數已達到對應的閾值,在此情況下,替換關聯於該快取記憶體的MAT群組的有效存儲元件的其中一個。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/IB2014/003220 WO2016097806A1 (en) | 2014-12-14 | 2014-12-14 | Fully associative cache memory budgeted by memory access type |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201631481A TW201631481A (zh) | 2016-09-01 |
TWI606338B true TWI606338B (zh) | 2017-11-21 |
Family
ID=56126006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW104139179A TWI606338B (zh) | 2014-12-14 | 2015-11-25 | 以記憶體存取類型來分配的全關聯快取記憶體及其操作方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9652400B2 (zh) |
EP (1) | EP3230874B1 (zh) |
CN (1) | CN106569958B (zh) |
TW (1) | TWI606338B (zh) |
WO (1) | WO2016097806A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI764311B (zh) * | 2020-10-08 | 2022-05-11 | 大陸商星宸科技股份有限公司 | 記憶體存取方法及智慧處理裝置 |
TWI820951B (zh) * | 2021-10-28 | 2023-11-01 | 慧榮科技股份有限公司 | 藉助於預定命令來進行記憶體裝置的資料存取控制的方法及設備 |
US11977783B2 (en) | 2021-10-28 | 2024-05-07 | Silicon Motion, Inc. | Method and apparatus for performing data access control of memory device with aid of predetermined command |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3055775B1 (en) * | 2014-12-14 | 2019-08-21 | VIA Alliance Semiconductor Co., Ltd. | Cache replacement policy that considers memory access type |
EP3066571B1 (en) | 2014-12-14 | 2018-06-13 | VIA Alliance Semiconductor Co., Ltd. | Cache memory budgeted by ways on memory access type |
WO2016097812A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Cache memory budgeted by chunks based on memory access type |
WO2016097806A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Fully associative cache memory budgeted by memory access type |
US9811468B2 (en) * | 2014-12-14 | 2017-11-07 | Via Alliance Semiconductor Co., Ltd. | Set associative cache memory with heterogeneous replacement policy |
US10037283B2 (en) * | 2016-08-12 | 2018-07-31 | Advanced Micro Devices, Inc. | Updating least-recently-used data for greater persistence of higher generality cache entries |
US10424040B2 (en) * | 2017-04-21 | 2019-09-24 | Intel Corporation | Dynamic allocation of cache based on instantaneous bandwidth consumption at computing devices |
US10474587B1 (en) | 2017-04-27 | 2019-11-12 | EMC IP Holding Company LLC | Smart weighted container data cache eviction |
US10423533B1 (en) * | 2017-04-28 | 2019-09-24 | EMC IP Holding Company LLC | Filtered data cache eviction |
US11119927B2 (en) | 2018-04-03 | 2021-09-14 | International Business Machines Corporation | Coordination of cache memory operations |
WO2024058801A1 (en) * | 2022-09-12 | 2024-03-21 | Google Llc | Time-efficient implementation of cache replacement policy |
Family Cites Families (77)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5255384A (en) * | 1985-02-22 | 1993-10-19 | Intergraph Corporation | Memory address translation system having modifiable and non-modifiable translation mechanisms |
US5353425A (en) * | 1992-04-29 | 1994-10-04 | Sun Microsystems, Inc. | Methods and apparatus for implementing a pseudo-LRU cache memory replacement scheme with a locking feature |
US6272595B1 (en) | 1994-08-05 | 2001-08-07 | Intel Corporation | N-way set-associative cache memory which includes a store hit buffer for improved data access |
US5732242A (en) * | 1995-03-24 | 1998-03-24 | Silicon Graphics, Inc. | Consistently specifying way destinations through prefetching hints |
GB2311880A (en) | 1996-04-03 | 1997-10-08 | Advanced Risc Mach Ltd | Partitioned cache memory |
US6092149A (en) | 1997-05-28 | 2000-07-18 | Western Digital Corporation | Disk drive cache system using a dynamic priority sequential stream of data segments continuously adapted according to prefetched sequential random, and repeating types of accesses |
US6223256B1 (en) | 1997-07-22 | 2001-04-24 | Hewlett-Packard Company | Computer cache memory with classes and dynamic selection of replacement algorithms |
US6138209A (en) * | 1997-09-05 | 2000-10-24 | International Business Machines Corporation | Data processing system and multi-way set associative cache utilizing class predict data structure and method thereof |
US6055605A (en) | 1997-10-24 | 2000-04-25 | Compaq Computer Corporation | Technique for reducing latency of inter-reference ordering using commit signals in a multiprocessor system having shared caches |
US6047358A (en) * | 1997-10-31 | 2000-04-04 | Philips Electronics North America Corporation | Computer system, cache memory and process for cache entry replacement with selective locking of elements in different ways and groups |
US6370622B1 (en) * | 1998-11-20 | 2002-04-09 | Massachusetts Institute Of Technology | Method and apparatus for curious and column caching |
US6629206B1 (en) | 1999-12-31 | 2003-09-30 | Koninklijke Philips Electronics N.V. | Set-associative cache-management using parallel reads and serial reads initiated during a wait state |
US6889291B1 (en) | 2000-06-30 | 2005-05-03 | Intel Corporation | Method and apparatus for cache replacement for a multiple variable-way associative cache |
US6681295B1 (en) | 2000-08-31 | 2004-01-20 | Hewlett-Packard Development Company, L.P. | Fast lane prefetching |
US7707397B2 (en) * | 2001-05-04 | 2010-04-27 | Via Technologies, Inc. | Variable group associativity branch target address cache delivering multiple target addresses per cache line |
JP3620473B2 (ja) * | 2001-06-14 | 2005-02-16 | 日本電気株式会社 | 共有キャッシュメモリのリプレイスメント制御方法及びその装置 |
JP2003131946A (ja) * | 2001-10-19 | 2003-05-09 | Nec Corp | キャッシュメモリ制御装置及び方法 |
US7266587B2 (en) * | 2002-05-15 | 2007-09-04 | Broadcom Corporation | System having interfaces, switch, and memory bridge for CC-NUMA operation |
US6912623B2 (en) * | 2002-06-04 | 2005-06-28 | Sandbridge Technologies, Inc. | Method and apparatus for multithreaded cache with simplified implementation of cache replacement policy |
US6944713B2 (en) | 2002-06-18 | 2005-09-13 | Intel Corporation | Low power set associative cache |
JP3989312B2 (ja) | 2002-07-05 | 2007-10-10 | 富士通株式会社 | キャッシュメモリ装置およびメモリ割付方法 |
US7076609B2 (en) * | 2002-09-20 | 2006-07-11 | Intel Corporation | Cache sharing for a chip multiprocessor or multiprocessing system |
US7290093B2 (en) * | 2003-01-07 | 2007-10-30 | Intel Corporation | Cache memory to support a processor's power mode of operation |
US7020748B2 (en) * | 2003-01-21 | 2006-03-28 | Sun Microsystems, Inc. | Cache replacement policy to mitigate pollution in multicore processors |
US7711901B2 (en) * | 2004-02-13 | 2010-05-04 | Intel Corporation | Method, system, and apparatus for an hierarchical cache line replacement |
US20050198442A1 (en) * | 2004-03-02 | 2005-09-08 | Mandler Alberto R. | Conditionally accessible cache memory |
JP4036206B2 (ja) * | 2004-03-31 | 2008-01-23 | 日本電気株式会社 | セットアソシアティブキャッシュシステム及びキャッシュメモリの制御方法 |
US7558920B2 (en) * | 2004-06-30 | 2009-07-07 | Intel Corporation | Apparatus and method for partitioning a shared cache of a chip multi-processor |
US7930484B2 (en) * | 2005-02-07 | 2011-04-19 | Advanced Micro Devices, Inc. | System for restricted cache access during data transfers and method thereof |
CN1746865A (zh) | 2005-10-13 | 2006-03-15 | 上海交通大学 | 数字信号处理器可重构指令高速缓存部分的实现方法 |
WO2007068122A1 (en) * | 2005-12-16 | 2007-06-21 | Univ Western Ontario | System and method for cache management |
US7689772B2 (en) * | 2006-05-04 | 2010-03-30 | Intel Corporation | Power-performance modulation in caches using a smart least recently used scheme |
CN100495362C (zh) | 2006-07-18 | 2009-06-03 | 威盛电子股份有限公司 | 可锁定码的快取及其处理器、控制器与控制方法 |
JP4299848B2 (ja) | 2006-08-09 | 2009-07-22 | エルピーダメモリ株式会社 | 半導体記憶装置 |
JP2008102733A (ja) | 2006-10-19 | 2008-05-01 | Hitachi Ltd | コード生成方法およびコンパイラ |
US9104599B2 (en) * | 2007-12-06 | 2015-08-11 | Intelligent Intellectual Property Holdings 2 Llc | Apparatus, system, and method for destaging cached data |
US7917701B2 (en) | 2007-03-12 | 2011-03-29 | Arm Limited | Cache circuitry, data processing apparatus and method for prefetching data by selecting one of a first prefetch linefill operation and a second prefetch linefill operation |
US7921260B2 (en) * | 2007-10-24 | 2011-04-05 | International Business Machines Corporation | Preferred write-mostly data cache replacement policies |
US8335122B2 (en) * | 2007-11-21 | 2012-12-18 | The Regents Of The University Of Michigan | Cache memory system for a data processing apparatus |
US7962695B2 (en) * | 2007-12-04 | 2011-06-14 | International Business Machines Corporation | Method and system for integrating SRAM and DRAM architecture in set associative cache |
JP5217432B2 (ja) * | 2007-12-28 | 2013-06-19 | 富士通株式会社 | セクタ機能付きキャッシュメモリ |
US8145985B2 (en) | 2008-09-05 | 2012-03-27 | Freescale Semiconductor, Inc. | Error detection schemes for a unified cache in a data processing system |
US8195884B2 (en) * | 2008-09-18 | 2012-06-05 | International Business Machines Corporation | Network on chip with caching restrictions for pages of computer memory |
US8352684B2 (en) | 2008-09-23 | 2013-01-08 | International Business Machines Corporation | Optimal cache replacement scheme using a training operation |
US8364898B2 (en) * | 2009-01-23 | 2013-01-29 | International Business Machines Corporation | Optimizing a cache back invalidation policy |
JP2010244435A (ja) | 2009-04-08 | 2010-10-28 | Panasonic Corp | キャッシュ制御装置及びキャッシュ制御方法 |
US8171220B2 (en) * | 2009-04-24 | 2012-05-01 | International Business Machines Corporation | Cache architecture with distributed state bits |
US8291169B2 (en) * | 2009-05-28 | 2012-10-16 | International Business Machines Corporation | Cache line use history based done bit modification to D-cache replacement scheme |
US8250332B2 (en) | 2009-06-11 | 2012-08-21 | Qualcomm Incorporated | Partitioned replacement for cache memory |
JP5413001B2 (ja) * | 2009-07-09 | 2014-02-12 | 富士通株式会社 | キャッシュメモリ |
US8392658B2 (en) * | 2009-07-10 | 2013-03-05 | Apple Inc. | Cache implementing multiple replacement policies |
US8745618B2 (en) | 2009-08-25 | 2014-06-03 | International Business Machines Corporation | Cache partitioning with a partition table to effect allocation of ways and rows of the cache to virtual machine in virtualized environments |
US8301842B2 (en) * | 2009-08-26 | 2012-10-30 | Via Technologies, Inc. | Efficient pseudo-LRU for colliding accesses |
US8412885B2 (en) | 2009-11-12 | 2013-04-02 | Intel Corporation | Searching a shared cache by using search hints and masked ways |
CN101763316B (zh) | 2009-12-25 | 2011-06-29 | 东南大学 | 基于虚存机制的指令片上异构存储资源动态分配的方法 |
US8677071B2 (en) * | 2010-03-26 | 2014-03-18 | Virtualmetrix, Inc. | Control of processor cache memory occupancy |
EP2553573A4 (en) * | 2010-03-26 | 2014-02-19 | Virtualmetrix Inc | FINANCIAL PERFORMANCE RESOURCE MANAGEMENT OF COMPUTER SYSTEMS |
US8838901B2 (en) * | 2010-05-07 | 2014-09-16 | International Business Machines Corporation | Coordinated writeback of dirty cachelines |
US9183135B2 (en) * | 2011-01-21 | 2015-11-10 | Micron Technology, Inc. | Preparation of memory device for access using memory access type indicator signal |
US20130219125A1 (en) | 2012-02-21 | 2013-08-22 | Microsoft Corporation | Cache employing multiple page replacement algorithms |
IN2014DN09685A (zh) | 2012-04-17 | 2015-07-31 | Zte Corp | |
US9767025B2 (en) | 2012-04-18 | 2017-09-19 | Qualcomm Incorporated | Write-only dataless state for maintaining cache coherency |
US10019381B2 (en) * | 2012-05-01 | 2018-07-10 | Nvidia Corporation | Cache control to reduce transaction roll back |
US9043570B2 (en) * | 2012-09-11 | 2015-05-26 | Apple Inc. | System cache with quota-based control |
US10140219B2 (en) * | 2012-11-02 | 2018-11-27 | Blackberry Limited | Multi-port shared cache apparatus |
US9734059B2 (en) * | 2012-11-21 | 2017-08-15 | Advanced Micro Devices, Inc. | Methods and apparatus for data cache way prediction based on classification as stack data |
US9075730B2 (en) * | 2012-12-21 | 2015-07-07 | Advanced Micro Devices, Inc. | Mechanisms to bound the presence of cache blocks with specific properties in caches |
US20140189244A1 (en) * | 2013-01-02 | 2014-07-03 | Brian C. Grayson | Suppression of redundant cache status updates |
US9911508B2 (en) * | 2014-09-18 | 2018-03-06 | Via Alliance Semiconductor Co., Ltd | Cache memory diagnostic writeback |
US9275714B1 (en) * | 2014-09-26 | 2016-03-01 | Qualcomm Incorporated | Read operation of MRAM using a dummy word line |
EP3055775B1 (en) * | 2014-12-14 | 2019-08-21 | VIA Alliance Semiconductor Co., Ltd. | Cache replacement policy that considers memory access type |
WO2016097806A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Fully associative cache memory budgeted by memory access type |
US9811468B2 (en) * | 2014-12-14 | 2017-11-07 | Via Alliance Semiconductor Co., Ltd. | Set associative cache memory with heterogeneous replacement policy |
WO2016097812A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Cache memory budgeted by chunks based on memory access type |
US10698827B2 (en) * | 2014-12-14 | 2020-06-30 | Via Alliance Semiconductor Co., Ltd. | Dynamic cache replacement way selection based on address tag bits |
WO2016097795A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or subset or tis ways depending on mode |
WO2016097810A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon mode |
-
2014
- 2014-12-14 WO PCT/IB2014/003220 patent/WO2016097806A1/en active Application Filing
- 2014-12-14 US US14/890,902 patent/US9652400B2/en active Active
- 2014-12-14 EP EP14891608.3A patent/EP3230874B1/en active Active
-
2015
- 2015-11-18 CN CN201510796823.4A patent/CN106569958B/zh active Active
- 2015-11-25 TW TW104139179A patent/TWI606338B/zh active
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI764311B (zh) * | 2020-10-08 | 2022-05-11 | 大陸商星宸科技股份有限公司 | 記憶體存取方法及智慧處理裝置 |
TWI820951B (zh) * | 2021-10-28 | 2023-11-01 | 慧榮科技股份有限公司 | 藉助於預定命令來進行記憶體裝置的資料存取控制的方法及設備 |
US11977783B2 (en) | 2021-10-28 | 2024-05-07 | Silicon Motion, Inc. | Method and apparatus for performing data access control of memory device with aid of predetermined command |
US12061800B2 (en) | 2021-10-28 | 2024-08-13 | Silicon Motion, Inc. | Method and apparatus for performing data access control of memory device with aid of predetermined command |
Also Published As
Publication number | Publication date |
---|---|
WO2016097806A1 (en) | 2016-06-23 |
TW201631481A (zh) | 2016-09-01 |
EP3230874A1 (en) | 2017-10-18 |
US20160196214A1 (en) | 2016-07-07 |
CN106569958A (zh) | 2017-04-19 |
CN106569958B (zh) | 2020-08-04 |
US9652400B2 (en) | 2017-05-16 |
EP3230874B1 (en) | 2021-04-28 |
EP3230874A4 (en) | 2018-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI594123B (zh) | 基於記憶體存取類型以組塊來分配的快取記憶體 | |
TWI559143B (zh) | 具多樣替換策略的集合關聯快取記憶體 | |
TWI582591B (zh) | 考慮到記憶體訪問類型的集合關聯快取記憶體及方法 | |
TWI606338B (zh) | 以記憶體存取類型來分配的全關聯快取記憶體及其操作方法 | |
TWI553482B (zh) | 基於記憶體訪問類型以分路來分配的快取記憶體 | |
TWI564719B (zh) | 具有多個資料預取器的處理器、所述處理器的操作方法及所述處理器操作的電腦程式產品 | |
TW201631478A (zh) | 根據記憶體存取類型的效益並配合積極層級的預取 | |
WO2016097810A1 (en) | Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon mode |