TW201631482A - 考慮到記憶體訪問類型的快取記憶體替換策略 - Google Patents

考慮到記憶體訪問類型的快取記憶體替換策略 Download PDF

Info

Publication number
TW201631482A
TW201631482A TW104139185A TW104139185A TW201631482A TW 201631482 A TW201631482 A TW 201631482A TW 104139185 A TW104139185 A TW 104139185A TW 104139185 A TW104139185 A TW 104139185A TW 201631482 A TW201631482 A TW 201631482A
Authority
TW
Taiwan
Prior art keywords
mat
memory
memory access
cache
cache memory
Prior art date
Application number
TW104139185A
Other languages
English (en)
Other versions
TWI582591B (zh
Inventor
羅德尼E 虎克
柯林 艾迪
道格拉斯R 瑞德
約翰 麥可 吉爾
Original Assignee
上海兆芯集成電路有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 上海兆芯集成電路有限公司 filed Critical 上海兆芯集成電路有限公司
Publication of TW201631482A publication Critical patent/TW201631482A/zh
Application granted granted Critical
Publication of TWI582591B publication Critical patent/TWI582591B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing 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/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • G06F12/127Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning using additional replacement algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/123Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1021Hit rate improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/604Details relating to cache allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/608Details relating to cache mapping

Abstract

一種集合關聯快取記憶體,包括:具有存儲元件的陣列,佈置為M集合與N分路;分配單元,分配陣列的存儲元件以因應於在快取記憶體中未命中的記憶體訪問。每個記憶體訪問具有一個相關聯的MAT。陣列的每個有效存儲元件具有該多個預定MAT其中一個相關聯的MAT。用於多個預定MAT中的每一個MAT的映射,其包括MAT優先順序。其中因應於在快取記憶體中未命中的記憶體訪問,分配單元:判定出所選定集合的最符合分路和第二符合分路以基於替換策略來做替換;以及當最符合分路的MAT優先順序高於第二符合分路的MAT優先順序,替換第二符合分路而非最符合分路。

Description

考慮到記憶體訪問類型的快取記憶體替換策略
本發明是有關於一種快取記憶體,尤其是有關於一種考慮到記憶體訪問類型的快取記憶體替換策略。
本發明的一方面提出了一種集合關聯快取記憶體,包括:具有存儲元件的陣列,其被佈置為M個集合與N個分路;分配單元,用以分配陣列的存儲元件以因應於在快取記憶體中未命中的記憶體訪問。記憶體訪問的每一個選取M個集合中的一個集合。每個記憶體訪問具有多個預定記憶體訪問類型(MAT)其中一個相關聯的MAT。MAT由快取記憶體所接收。陣列的每個有效存儲元件具有該多個預定MAT其中一個相關聯的MAT。用於多個預定MAT中的每一個MAT的映射,其包括MAT優先順序。其中因應於在快取記憶體中未命中的記憶體訪問,分配單元:判定出所選定集合的最符合分路和第二符合分路以基於替換策略來做替換;以及當最符合分路的MAT優先順序高於第二符合分路的MAT優先順序,替換第二符合分路而非最符合分路。
本發明的另一方面提出了一種用於操作集合關聯快取記憶體的方法。集合關聯快取記憶體包括具有存儲元件的陣列,其被佈置為M個集合與N個分路,以及分配單元,用以分配陣列的存儲元件以因應於在 快取記憶體中未命中的記憶體訪問。記憶體訪問的每一個選取所述M個集合中的一個集合。每個記憶體訪問具有多個預定記憶體訪問類型(MAT)其中一個相關聯的MAT。MAT由快取記憶體所接收。方法包括:為陣列的每一個有效的存儲元件,存儲多個預定MAT中的一個關聯的MAT;為多個預定MAT中的每一個MAT,存儲具有MAT優先順序的映射;因應於在快取記憶體中未命中的記憶體訪問:判定出所選定集合的最符合分路和第二符合分路以基於替換策略來做替換;以及當最符合分路的MAT優先順序高於第二符合分路的MAT優先順序,替換第二符合分路而非最符合分路。
本發明的再一方面提出了一種集合關聯快取記憶體,包括:具有存儲元件的陣列,其被佈置為M個集合與N個分路;分配單元,用以分配陣列的存儲元件以因應於在快取記憶體中未命中的記憶體訪問。記憶體訪問的每一個選取M個集合中的一個集合;用於N個集合中的每個集合的關聯的替換位元,其被分配單元的替換策略所使用以指出彼此間所選定的組的分路最近的使用情況。每個記憶體訪問具有多個預定記憶體訪問類型(MAT)其中一個相關聯的MAT。MAT由快取記憶體所接收。用於多個預定MAT中的每一個MAT的具有MAT優先順序的映射。因應於在快取記憶體中未命中的記憶體訪問,分配單元:分配所選定集合的替換分路;以及當內存訪問的優先順序低於閾值,將替換分路插入替換位元的非最近常用的位置。
本發明的再一方面提出了一種用於操作集合關聯快取記憶體的方法。集合關聯快取記憶體包括具有存儲元件的陣列,其被佈置為M個集合與N個分路,以及分配單元,用以分配陣列的存儲元件以因應於在快取記憶體中未命中的記憶體訪問。記憶體訪問的每一個選取所述M個集 合中的一個集合。每個記憶體訪問具有多個預定記憶體訪問類型(MAT)其中一個相關聯的MAT。MAT由快取記憶體所接收。快取記憶體還包括用於N個集合中的每個集合的關聯的替換位元。替換位元被分配單元的替換策略所使用以指出彼此間所選定集合的分路最近的使用情況。方法包括:為多個預定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)的數據來填充(till 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)來表示。在圖中,水準軸為時間,其為獨立變數(independent 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 (18)

  1. 一種集合關聯快取記憶體,包括:一具有存儲元件的陣列,其被佈置為M個集合與N個分路;一分配單元,用以分配該陣列的存儲元件以因應於在該快取記憶體中未命中的一記憶體訪問,其中該記憶體訪問的每一個選取該M個集合中的一個集合;其中每個該記憶體訪問具有多個預定記憶體訪問類型(MAT)其中一個相關聯的MAT,其中該MAT由該快取記憶體所接收;該陣列的每個有效存儲元件具有該多個預定MAT其中一個相關聯的MAT;用於該多個預定MAT中的每一個MAT的一映射,該映射包括MAT優先順序;其中因應於在該快取記憶體中未命中的該記憶體訪問,該分配單元:判定出所選定集合的一最符合分路和一第二符合分路以基於一替換策略來做替換;以及當該最符合分路的MAT優先順序高於該第二符合分路的MAT優先順序,替換該第二符合分路而非該最符合分路。
  2. 如申請專利範圍第1項所述之集合關聯快取記憶體,其中該映射將該多個MAT中的每一個MAT映射到多個相互排斥的MAT群組中的一個,其中該映射更包括用於每個MAT群組的優先順序,其中每個MAT的MAT優先順序是其MAT群組的優先順序。
  3. 如申請專利範圍第1項所述之集合關聯快取記憶體,其中該多個預定MAT 包括以下列表中的至少三個:由該處理器的一硬體預取器所生成的一記憶體訪問;由一浮點指令所生成的一記憶體訪問;由一融合微指令所生成的一記憶體訪問;由一媒體指令所生成的一記憶體訪問;由一用以修改一記憶體位址的指令所生成的一記憶體訪問;由一軟體預取指令所生成的一記憶體訪問;一用以載入一結構描述符的記憶體訪問;由一用以指定一非暫時資料的指令所生成的一記憶體訪問;由一用以進行非對齊檢查的指令所生成的一記憶體訪問;由一監控特權級別指令所生成的一記憶體訪問;由一零擴展產指令所生成的一記憶體訪問;由一遮照移動指令所生成的一記憶體訪問;由一堆疊推入指令所生成的一記憶體訪問;以及由該處理器的一硬體分頁表尋訪引擎所生成的一記憶體訪問。
  4. 一種用於操作一集合關聯快取記憶體的方法,該集合關聯快取記憶體包括一具有存儲元件的陣列,其被佈置為M個集合與N個分路,以及一分配單元,用以分配該陣列的存儲元件以因應於在該快取記憶體中未命中的一記憶體訪問,其中該記憶體訪問的每一個選取所述M個集合中的一個集合,其中每個該記憶體訪問具有多個預定記憶體訪問類型(MAT)其中一個相關聯的MAT,其中該MAT由該快取記憶體所接收,該方法包括:為該陣列的每一個有效的存儲元件,存儲該多個預定MAT中的一個關聯的MAT; 為該多個預定MAT中的每一個MAT,存儲具有MAT優先順序的映射;因應於在該快取記憶體中未命中的該記憶體訪問;判定出所選定集合的一最符合分路和一第二符合分路以基於一替換策略來做替換;以及當該最符合分路的MAT優先順序高於該第二符合分路的MAT優先順序,替換該第二符合分路而非該最符合分路。
  5. 如申請專利範圍第4項所述之方法,更包括:在該快取記憶體的操作期間,更新該映射。
  6. 如申請專利範圍第5項所述之方法,更包括:判定該處理器上正在運行的一程式;以及更新該映射以因應於當判定該處理器上正在運行程式。
  7. 如申請專利範圍第6項所述之方法,其中該映射是由該程式的離線分析所判定。
  8. 如申請專利範圍第7項所述之方法,其中對該多個預定MAT中的每一個MAT來說,包含於該映射的優先順序是基於因應於內存訪問而被分配的快取線的平均快取線壽命。
  9. 如申請專利範圍第8項所述之方法,其中對該多個預定MAT中的每一個MAT來說,包含於該映射的優先順序是基於因應於內存訪問而被分配的快取線的平均命中率。
  10. 一種集合關聯快取記憶體,包括:一具有存儲元件的陣列,其被佈置為M個集合與N個分路;一分配單元,用以分配該陣列的存儲元件以因應於在該快取記憶體中未命中的一記憶體訪問,其中該記憶體訪問的每一個選取所述M個集合中的一個集合;用於該N個集合中的每個集合的關聯的一替換位元,該替換位元被該分配單元的該替換策略所使用以指出彼此間所選定的組的分路最近的使用情況;其中每個該記憶體訪問具有多個預定記憶體訪問類型(MAT)其中一個相關聯的MAT,其中該MAT由該快取記憶體所接收;用於該多個預定MAT中的每一個MAT的具有MAT優先順序的一映射;其中因應於在該快取記憶體中未命中的該記憶體訪問,該分配單元:分配所選定集合的替換分路;以及當該內存訪問的優先順序低於一閾值,將替換分路插入該替換位元的非最近常用的位置。
  11. 如申請專利範圍第10項所述之集合關聯快取記憶體,其中該映射將該多個MAT中的每一個MAT映射到多個相互排斥的MAT群組中的一個,其中該映射更包括用於每個MAT群組的優先順序,其中每個MAT的MAT優先順序是其MAT群組的優先順序。
  12. 如申請專利範圍第11項所述之集合關聯快取記憶體,其中該多個預定MAT包括以下列表中的至少三個: 由該處理器的一硬體預取器所生成的一記憶體訪問;由一浮點指令所生成的一記憶體訪問;由一融合微指令所生成的一記憶體訪問;由一媒體指令所生成的一記憶體訪問;由一用以修改一記憶體位址的指令所生成的一記憶體訪問;由一軟體預取指令所生成的一記憶體訪問;一用以載入一結構描述符的記憶體訪問;由一用以指定一非暫時資料的指令所生成的一記憶體訪問;由一用以進行非對齊檢查的指令所生成的一記憶體訪問;由一監控特權級別指令所生成的一記憶體訪問;由一零擴展產指令所生成的一記憶體訪問;由一遮照移動指令所生成的一記憶體訪問;由一堆疊推入指令所生成的一記憶體訪問;以及由該處理器的一硬體分頁表尋訪引擎所生成的一記憶體訪問。
  13. 一種用於操作一集合關聯快取記憶體的方法,該集合關聯快取記憶體包括一具有存儲元件的陣列,其被佈置為M個集合與N個分路,以及一分配單元,用以分配該陣列的存儲元件以因應於在該快取記憶體中未命中的一記憶體訪問,其中該記憶體訪問的每一個選取該M個集合中的一個集合,其中每個該記憶體訪問具有多個預定記憶體訪問類型(MAT)其中一個相關聯的MAT,其中該MAT由該快取記憶體所接收,其中該快取記憶體還包括用於該N個集合中的每個集合的關聯的一替換位元,該替換位元被該分配單元的一替換策略所使用以指出彼此間所選定集合的分路最近的使用情況,該方法包括: 為該多個預定MAT中的每一個MAT,存儲具有MAT優先順序的一映射;以及因應於在該快取記憶體中未命中的該記憶體訪問:分配所選定集合的替換分路;以及當該內存訪問的優先順序低於一閾值,將替換分路插入該替換位元的非最近常用的位置。
  14. 如申請專利範圍第13項所述之方法,更包括:在該快取記憶體的操作期間,更新該映射。
  15. 如申請專利範圍第14項所述之方法,更包括:判定該處理器上正在運行的一程式;以及更新該映射以因應於當判定該處理器上正在運行程式。
  16. 如申請專利範圍第15項所述之方法,其中該映射是由該程式的離線分析所判定。
  17. 如申請專利範圍第16項所述之方法,其中對該多個預定MAT中的每一個MAT來說,包含於該映射的優先順序是基於因應於內存訪問而被分配的快取線的平均快取線壽命。
  18. 如申請專利範圍第17項所述之方法,其中對該多個預定MAT中的每一個MAT來說,包含於該映射的優先順序是基於因應於內存訪問而被分配的快取線的平均命中率。
TW104139185A 2014-12-14 2015-11-25 考慮到記憶體訪問類型的集合關聯快取記憶體及方法 TWI582591B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/IB2014/003221 WO2016097807A1 (en) 2014-12-14 2014-12-14 Cache replacement policy that considers memory access type

Publications (2)

Publication Number Publication Date
TW201631482A true TW201631482A (zh) 2016-09-01
TWI582591B TWI582591B (zh) 2017-05-11

Family

ID=56126007

Family Applications (1)

Application Number Title Priority Date Filing Date
TW104139185A TWI582591B (zh) 2014-12-14 2015-11-25 考慮到記憶體訪問類型的集合關聯快取記憶體及方法

Country Status (6)

Country Link
US (1) US9652398B2 (zh)
EP (1) EP3055775B1 (zh)
KR (1) KR101835949B1 (zh)
CN (1) CN105701023B (zh)
TW (1) TWI582591B (zh)
WO (1) WO2016097807A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11625322B2 (en) 2017-11-09 2023-04-11 Microsoft Technology Licensing, Llc Performance counters for computer memory
TWI812862B (zh) * 2019-06-06 2023-08-21 南韓商三星電子股份有限公司 無爭用查找的方法、物件儲存器和非暫時性電腦可讀媒體

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016097813A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Set associative cache memory with heterogeneous replacement policy
US9652400B2 (en) * 2014-12-14 2017-05-16 Via Alliance Semiconductor Co., Ltd. Fully associative cache memory budgeted by memory access type
KR101835949B1 (ko) * 2014-12-14 2018-03-08 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 메모리 접근 타입을 고려한 캐시 치환 정책
EP3066572B1 (en) * 2014-12-14 2020-02-19 VIA Alliance Semiconductor Co., Ltd. Cache memory budgeted by chunks based on memory access type
US9910785B2 (en) 2014-12-14 2018-03-06 Via Alliance Semiconductor Co., Ltd Cache memory budgeted by ways based on memory access type
US11106599B2 (en) * 2016-09-30 2021-08-31 Intel Corporation System and method for replacement in associative memories using weighted PLRU trees
US10424040B2 (en) * 2017-04-21 2019-09-24 Intel Corporation Dynamic allocation of cache based on instantaneous bandwidth consumption at computing devices
US11080810B2 (en) * 2017-04-21 2021-08-03 Intel Corporation Dynamically reconfigurable memory subsystem for graphics processors
US10303608B2 (en) * 2017-08-22 2019-05-28 Qualcomm Incorporated Intelligent data prefetching using address delta prediction
TWI697778B (zh) * 2019-06-17 2020-07-01 慧榮科技股份有限公司 資料儲存裝置與資料處理方法
CN111459550B (zh) * 2020-04-14 2022-06-21 上海兆芯集成电路有限公司 具高度领先分支预测器的微处理器
US11403103B2 (en) 2020-04-14 2022-08-02 Shanghai Zhaoxin Semiconductor Co., Ltd. Microprocessor with multi-step ahead branch predictor and having a fetch-target queue between the branch predictor and instruction cache
TWI764311B (zh) * 2020-10-08 2022-05-11 大陸商星宸科技股份有限公司 記憶體存取方法及智慧處理裝置
US11556472B1 (en) 2021-08-04 2023-01-17 International Business Machines Corporation Data processing system having masters that adapt to agents with differing retry behaviors
CN113778936A (zh) * 2021-08-17 2021-12-10 华东计算技术研究所(中国电子科技集团公司第三十二研究所) 国产嵌入式dsp操作系统的性能优化方法
CN114138685B (zh) * 2021-12-06 2023-03-10 海光信息技术股份有限公司 缓存的资源分配方法及装置、电子装置和存储介质

Family Cites Families (78)

* Cited by examiner, † Cited by third party
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
US7284095B2 (en) * 2004-08-18 2007-10-16 International Business Machines Corporation Latency-aware replacement system and method for cache memories
US7930484B2 (en) * 2005-02-07 2011-04-19 Advanced Micro Devices, Inc. System for restricted cache access during data transfers and method thereof
CN100437522C (zh) * 2005-09-09 2008-11-26 中国科学院计算技术研究所 一种远程内存服务器及其实现方法
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 威盛电子股份有限公司 可锁定码的快取及其处理器、控制器与控制方法
US7676632B2 (en) * 2006-07-18 2010-03-09 Via Technologies, Inc. Partial cache way locking
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
US20110072218A1 (en) * 2009-09-24 2011-03-24 Srilatha Manne Prefetch promotion mechanism to reduce cache pollution
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 东南大学 基于虚存机制的指令片上异构存储资源动态分配的方法
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
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
CN105793832B (zh) * 2014-09-18 2018-12-18 上海兆芯集成电路有限公司 处理器及其操作方法、以及计算机可读存储介质
US9275714B1 (en) * 2014-09-26 2016-03-01 Qualcomm Incorporated Read operation of MRAM using a dummy word line
WO2016097808A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Dynamic cache replacement way selection based on address tag bits
KR101835949B1 (ko) * 2014-12-14 2018-03-08 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 메모리 접근 타입을 고려한 캐시 치환 정책
JP6209689B2 (ja) * 2014-12-14 2017-10-04 ヴィア アライアンス セミコンダクター カンパニー リミテッド モードに応じてウェイの全部又はサブセットに選択的に割り当てるように動的に構成可能であるマルチモード・セット・アソシエイティブ・キャッシュ・メモリ
WO2016097813A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Set associative cache memory with heterogeneous replacement policy
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
EP3066572B1 (en) * 2014-12-14 2020-02-19 VIA Alliance Semiconductor Co., Ltd. Cache memory budgeted by chunks based on memory access type
US9652400B2 (en) * 2014-12-14 2017-05-16 Via Alliance Semiconductor Co., Ltd. Fully associative cache memory budgeted by memory access type

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11625322B2 (en) 2017-11-09 2023-04-11 Microsoft Technology Licensing, Llc Performance counters for computer memory
TWI804321B (zh) * 2017-11-09 2023-06-01 美商微軟技術授權有限責任公司 用於電腦記憶體的效能計數器的設備、方法與電腦可讀取媒體
TWI812862B (zh) * 2019-06-06 2023-08-21 南韓商三星電子股份有限公司 無爭用查找的方法、物件儲存器和非暫時性電腦可讀媒體

Also Published As

Publication number Publication date
EP3055775A4 (en) 2017-07-19
CN105701023B (zh) 2019-04-16
TWI582591B (zh) 2017-05-11
US20160350228A1 (en) 2016-12-01
EP3055775A1 (en) 2016-08-17
KR101835949B1 (ko) 2018-03-08
WO2016097807A1 (en) 2016-06-23
EP3055775B1 (en) 2019-08-21
US9652398B2 (en) 2017-05-16
KR20160086763A (ko) 2016-07-20
CN105701023A (zh) 2016-06-22

Similar Documents

Publication Publication Date Title
TWI582591B (zh) 考慮到記憶體訪問類型的集合關聯快取記憶體及方法
TWI559143B (zh) 具多樣替換策略的集合關聯快取記憶體
TWI594123B (zh) 基於記憶體存取類型以組塊來分配的快取記憶體
TWI606338B (zh) 以記憶體存取類型來分配的全關聯快取記憶體及其操作方法
TWI553482B (zh) 基於記憶體訪問類型以分路來分配的快取記憶體
TWI564719B (zh) 具有多個資料預取器的處理器、所述處理器的操作方法及所述處理器操作的電腦程式產品
TWI596479B (zh) 具有資料預取器的處理器及其運作方法
TW201631476A (zh) 根據位址標籤位元的動態快取記憶體置換路選擇
WO2016097810A1 (en) Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon mode
TW201636852A (zh) 取決於模式而可動態配置以選擇分配至全部或是一個組的多模式組相聯快取記憶體