TWI805435B - 預取指方法和微處理器 - Google Patents
預取指方法和微處理器 Download PDFInfo
- Publication number
- TWI805435B TWI805435B TW111125355A TW111125355A TWI805435B TW I805435 B TWI805435 B TW I805435B TW 111125355 A TW111125355 A TW 111125355A TW 111125355 A TW111125355 A TW 111125355A TW I805435 B TWI805435 B TW I805435B
- Authority
- TW
- Taiwan
- Prior art keywords
- cache
- prefetch
- memory
- prefetching
- bounding box
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 230000015654 memory Effects 0.000 claims abstract description 196
- 238000012544 monitoring process Methods 0.000 claims description 4
- 238000004891 communication Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 11
- 230000008569 process Effects 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 6
- 239000000463 material Substances 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000007429 general method Methods 0.000 description 3
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 230000001747 exhibiting effect Effects 0.000 description 1
- 230000037406 food intake Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 235000012431 wafers Nutrition 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/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
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/602—Details relating to cache prefetching
-
- 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/6022—Using a prefetch buffer or dedicated prefetch cache
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
本申請公開了預取指方法和微處理器。一種在微處理器中實現的預取指方法包括:基於條件集合發出針對記憶體塊的所有剩餘預取指作為L3預取指;以及在到達所述記憶體塊的末尾時,發出針對與所述L3預取指相對應的快取記憶體行的L2預取指。
Description
本發明是有關於一種微處理器,且特別是有關於一種微處理器中的預取指。
大多數現代電腦系統包括進行執行軟體程式所需的計算的微處理器。電腦系統還包括連接到微處理器(或在微處理器內部)的其他裝置,諸如記憶體等。記憶體存儲要由微處理器執行的軟體程式指令。記憶體還存儲程式指令操縱以實現程式的期望功能的資料。
電腦系統中在微處理器外部(或在處理器核外部)的裝置(諸如記憶體等)透過處理器匯流排直接或間接地連接到微處理器(或核)。處理器匯流排包括使得微處理器能夠以相對大的塊傳輸資料的信號集合。當微處理器執行對存儲在記憶體中的資料進行計算的程式指令時,微處理器使用處理器匯流排將資料從記憶體取指到微處理器中。類似地,微處理器使用處理器匯流排將計算結果寫回到記憶體。
從記憶體取指數據或將資料寫入記憶體所需的時間比微處理器對資料進行計算所需的時間大許多倍。因此,微處理器無效地等待從記憶體中取指數據。為了減少這個問題,現代微處理器包括至少一個快取記憶體。快取記憶體或快取記憶體是微處理器(或處理器核)內部的記憶體--通常比系統記憶體小得多--其將資料的子集存儲在系統記憶體中。當微處理器執行引用資料的指令時,微處理器檢查資料是否存在於快取記憶體中並且是有效的。如果是,則可以比必須從系統記憶體檢索資料的情況更快地執行指令,這是因為資料已經存在於快取記憶體中。也就是說,當使用處理器匯流排將資料從記憶體取指到快取記憶體時,微處理器不必等待。微處理器檢測到資料存在於快取記憶體中並且有效的情況通常被稱為快取記憶體命中。所引用的資料不存在於快取記憶體中的情況通常被稱為快取記憶體未命中。當所引用的資料已經在快取記憶體中時,透過避免從外部記憶體檢索資料所需的額外時鐘週期,實現了顯著的時間節省。
經由預取指單元(也稱為預取指器)的快取記憶體預取指是由微處理器使用以透過在處理器實際需要資料或指令之前將指令或資料從外部記憶體取指到快取記憶體中來進一步提升運行性能的技術。成功地預取指數據避免了當必須從外部記憶體檢索資料時遇到的等待時間。
在預取指中存在基本的折衷。如上所述,預取指可以透過減少等待時間(透過在實際需要資料之前已經將資料取指到快取記憶體中)來改善性能。另一方面,如果預取指太多資訊(例如,太多快取記憶體行),則預取指單元的效率降低,並且其他系統資源和頻寬可能負擔過重。此外,如果快取記憶體已滿,則將新的快取記憶體行預取指到該快取記憶體中將導致從快取記憶體中驅逐另一快取記憶體行。因此,快取記憶體中的因為先前需要而在快取記憶體中的行可能被僅將來可能需要的行驅逐。
在一些微處理器中,快取記憶體實際上由多個快取記憶體組成。多個快取記憶體被佈置在多個級的層級結構中。例如,微處理器可以具有兩個快取記憶體,稱為第一級(L1)快取記憶體和第二級(L2)快取記憶體。L1快取記憶體比L2快取記憶體更靠近微處理器的計算元件。也就是說,L1快取記憶體能夠比L2快取記憶體更快地向計算元件提供資料。L2快取記憶體通常比L1快取記憶體更大並且具有更多的存儲資源。一些微處理器可以具有第三快取記憶體(L3),其可以大於L2快取記憶體。
基於快取記憶體未命中,取指時間隨著從L1、L2、L3快取記憶體和系統記憶體進行取指而增加(例如,來自L2的10-20個時鐘週期,來自L3的20-30個時鐘週期),因此從等待時間的角度來看,期望不僅智慧地將資料存儲在適當的快取記憶體中,而且智慧地預取指數據。
在一個實施例中,一種在微處理器中實現的預取指方法,所述預取指方法包括:基於條件集合發出記憶體塊的所有剩餘預取指作為L3預取指;以及在到達所述記憶體塊的末尾時,針對與所述L3預取指相對應的快取記憶體行發出L2預取指。
透過審查以下附圖和詳細描述,本發明的其它系統、方法、特徵和優點對於本領域技術人員將是或者將變得明顯。所有這些附加系統、方法、特徵和優點旨在包括在本說明書內、在本發明的範圍內,並且受到所附申請專利範圍的保護。
公開了微處理器的邊界框預取指單元和相關聯的方法的某些實施例,其在激進預取指條件下智慧地管理快取記憶體層級結構之間的預取指,以確保合適的填充佇列頻寬來有效地應對預取指和載入/存儲需求請求。在一個實施例中,邊界框預取指單元駐留在第二級(L2)快取記憶體中,並且快取記憶體的層級結構包括第一級(L1)快取記憶體、L2快取記憶體和第三級(L3)快取記憶體。在訪問非常密集的應用中,即使是非週期性的,檢測(訪問的)模式以實現智慧預取指也是具有挑戰性的。例如,密集訪問模式包括展現高空間局部性的訪問,其中被訪問的大多數快取記憶體行靠近被訪問的其他快取記憶體行。因此,邊界框預取指單元的某些實施例可以暫停模式匹配,以代替一個或多於一個記憶體塊之間的更激進的預取指。如已知的,記憶體塊對應於物理記憶體(例如,系統記憶體,諸如DRAM等),但是在一些實施例中可以對應於虛擬記憶體。記憶體塊可以對應於一個或多個虛擬頁,因此下文中對記憶體塊訪問的引用還可以包括對相應頁訪問的引用。邊界框預取指單元維持多個預取指器頁條目(有時稱為流條目或狀態條目)。
繼續,在激進預取指下,L2快取記憶體可以生成比任何合理大小的L2填充佇列(在行業中也稱為填充緩衝器或未命中狀態保持暫存器,其針對各個L2快取記憶體未命中分配條目)能夠應對的預取指多得多的預取指。在一個實施例中,鑒於L2填充佇列達到(例如,包括超過)給定容量閾值,L2預取指被有效地轉換為L3預取指(也稱為末級快取記憶體或LLC預取指),其中實現將快取記憶體行從系統記憶體引入L3快取記憶體的快取記憶體行的激進預取指,並且經由訪問位元遮罩(也稱為塊位元遮罩)記錄(例如,從系統記憶體)引入L3快取記憶體的所有快取記憶體行。L3預取指部分地基於L2快取記憶體中的預取指請求中的特殊屬性(例如,位元設置),如下所述。當邊界框預取指單元已經完成將(例如,記憶體塊的)所有快取記憶體行引入L3快取記憶體時(例如,在到達記憶體塊的末尾時),邊界框預取指單元發出L2預取指(例如,以順序地將這些快取記憶體行從L3快取記憶體引入L2快取記憶體)。在一個實施例中,邊界框預取指發出L2預取指(例如,部分地基於L2快取記憶體中的預取指請求中的位設置,如下所述),並且返回到由最小或最大指針(取決於所確定的訪問的趨勢方向)指向的記憶體塊的位置,以針對最初旨在L2快取記憶體但是由於L2填充佇列約束而引入L3快取記憶體的先前L3預取指的快取記憶體行開始L2預取指。如果快取記憶體行不在先前的L3預取指之中,或者如果快取記憶體行隨後已經經由L1快取記憶體訪問被請求,則跳過預取指。透過這種操作方法,在密集訪問條件下被引入L3快取記憶體中的預取指是非常激進的,這將盡可能多的快取記憶體行引入快取記憶體層級結構中以防止對系統記憶體(例如,DRAM)的昂貴的需求訪問,同時還利用L3預取指已經完成之後的剩餘的L2填充佇列頻寬來將否則將是L3需求請求命中的內容轉到L2需求請求命中。
注意,本文對L3預取指的引用通常是指L2快取記憶體生成的對(例如,從系統記憶體)被引入L3快取記憶體中的一個或多個快取記憶體行的預取指,並且L2預取指通常是指L2快取記憶體生成的、對(例如,從L3快取記憶體或系統記憶體)被引入L2快取記憶體中的一個或多個快取記憶體行的預取指。
已經總結了本發明的邊界框預取指單元的某些特徵,現在將詳細參考如附圖中所例示的邊界框預取指單元的描述。雖然將結合這些附圖來描述邊界框預取指單元,但並不意在將其限制於這裡所公開的實施例。也就是說,雖然本發明易於進行各種修改和替代形式,但是其特定實施例在附圖中透過示例的方式示出,並且這裡將被詳細描述成足以使本領域技術人員理解。然而,應該理解,附圖及其詳細描述不意在將本發明限制於所公開的特定形式。相反,意圖是覆蓋落入如所附申請專利範圍所限定的本發明的精神和範圍內的所有修改、等同項和替代。如在本申請中所使用的,單詞“可以”以允許的意義(即,意味著有可能)而不是強制的意義(即,意味著必須)被使用。類似地,單詞“包括”意味著包括但不限於。
各種單元、模組、電路、邏輯或其它元件可被描述為“被配置為”進行一個或多個任務。在這樣的上下文中,“被配置為”是對結構的廣泛敘述,其一般意味著“具有在操作期間進行或能夠進行一個或多個任務的電路或其它物理結構”。電路可以是專用電路、或在編碼指令的控制下操作的更通用處理電路。也就是說,在描述本發明的各種實現的某些方面或特徵時,這裡可以使用諸如“單元”、“模組”、“電路”、“邏輯”和“元件”等的術語。本領域技術人員將理解,利用電路實現相應的特徵,無論該電路是專用電路還是在微編碼指令控制下操作的更通用電路。
另外,單元/模組/電路/邏輯/元件可被配置為即使在單元/模組/電路/邏輯/元件當前不處於操作中的情況下也進行任務。敘述被配置為進行一個或多於一個任務的單元/模組/電路/邏輯/元件明確不旨在針對該單元/模組/電路/邏輯/元件進行功能性限定。在這方面,本領域技術人員將理解,電路元件的特定結構或互連通常將由設計自動化工具的編譯器(諸如暫存器傳送語言(RTL)編譯器)確定。RTL編譯器在與組合語言代碼非常相似的腳本上運行,以將該腳本編譯成用於最終電路的佈局或製造的形式。
也就是說,使用更高級的軟體工具來設計(諸如本發明的那些)積體電路以對電路的期望功能操作進行建模。眾所周知,“電子設計自動化”(或EDA)是一類用於設計諸如積體電路等的電子系統的軟體工具。EDA工具還用於將設計功能程式設計到現場可程式設計閘陣列(FPGA)中。使用諸如Verilog和超高速積體電路(例如VHDL)等的硬體描述符語言(HDL)來創建電路的高級表示,其中根據該高級表示可以推斷出較低級表示和最終實際佈線。實際上,由於現代半導體晶片可以具有數十億個元件,因此EDA工具被認為是對於其設計而言必不可少的。在實踐中,電路設計者使用諸如C/C++等的程式設計語言來指定操作功能。EDA軟體工具將該指定功能轉換為RTL。然後,硬體描述符語言(例如Verilog)將RTL轉換為門的離散網表。該網表定義了由例如代工廠等生產的實際電路。實際上,這些工具因其在促進電子和數位系統的設計過程中的作用和用途而被眾所周知並理解,因此這裡無需描述。
圖1是示出實現邊界框預取指單元的實施例的示例微處理器的方塊圖。如本文將描述的,本發明涉及一種用於在包括激進預取指的條件(其中訪問是密集的,例如,表現出高空間局部性,但是模式匹配難以預測並且存在L2填充佇列約束)下將資料預取指到快取記憶體中的改進機制。然而,在描述該預取指機制之前,描述一個示例架構,其中可以利用本發明的邊界框預取指單元。就此而言,現在參考圖1,圖1是示出多核微處理器100的圖。如本領域普通技術人員從本文提供的描述將理解的,本發明可以以各種電路配置和架構來實現,並且圖1所示的架構僅僅是許多合適的架構中的一種。具體地,在圖1所示的實施例中,微處理器100是八核處理器,其中核被枚舉為核0 110_0至核7 110_7。
在所示實施例中,省略了許多電路元件和細節,這些元件和細節與理解本發明沒有密切關係。如本領域普通技術人員將理解的,各個處理核(110_0至110_7)包括在整個微處理器100中複製的某些相關或伴隨電路。各個這樣的相關子電路在所示實施例中表示為片。在八個處理核110_0至110_7的情況下,相應地存在八個片102_0至102_7。本文未描述的其他電路僅表示為“其他片邏輯”140_0至140_7。
在所示實施例中,採用三級快取記憶體系統,其包括一級(L1)快取記憶體、二級(L2)快取記憶體和三級(L3)快取記憶體。L1快取記憶體被分成資料快取記憶體和指令快取記憶體這兩者,分別表示為L1D和L1I。L2快取記憶體也駐留在核上,這意味著L1快取記憶體和L2快取記憶體這兩者都與各個片的核在相同的電路中。也就是說,各個片的各個核具有其自己的專用L1D、L1I和L2快取記憶體。在核外部,但在各個片內是L3快取記憶體。在一個實施例中,L3快取記憶體130_0至130_7(在本文中也統稱為130)是分散式快取記憶體,這意味著在該示例八核架構中,L3快取記憶體的1/8駐留在片0 102_0中,L3快取記憶體的1/8駐留在片1 102_1中,等等。在一個實施例中,各個L1快取記憶體的大小為32k,各個L2快取記憶體的大小為256k,並且L3快取記憶體的各個片的大小為2百萬位元組。因此,L3快取記憶體的總大小是16百萬位元組。注意,在一些實施例中可以使用其他單獨或聚合快取記憶體大小。
在各個片中提供匯流排界面120_0至120_7,以管理來自不同片之間的各種電路元件的通信。如圖1所示,虛線190用於允許各種電路片之間以及與非核電路160的通信。非核電路160僅表示在處理器晶片上的附加電路,但不是與各個片相關聯的核電路的一部分。與各個所示的片一樣,非核電路160包括非核匯流排界面162。還示出了用於與處理器外(晶片外)記憶體180交互的記憶體控制器164。最後,其他非核邏輯166由塊廣義地表示,其表示可以被包括作為非核處理器電路的一部分的其他電路(並且再次,為了理解本發明,不需要對其進行描述)。
為了更好地說明一些電路元件的某些內部和外部通信,將呈現以下示例。該示例示出了與核6快取記憶體中的假設的載入未命中相關聯的通信。也就是說,該假設假定處理核6 110_6正在執行請求在假設位址1000處載入資料的代碼。當遇到這樣的載入請求時,系統首先在L1D 114_6中進行查找以查看該資料是否存在於L1D快取記憶體中。假定資料不在L1D快取記憶體中,則在L2快取記憶體112_6中進行查找。再次,假定資料不在L2快取記憶體中,則進行查找以查看資料是否存在於L3快取記憶體中。如上所述,L3快取記憶體是分散式快取記憶體,因此如果資料實際上駐留在L3快取記憶體中,則系統首先需要確定資料應該駐留在L3快取記憶體的哪個片中。如已知的,可以使用散列函數(其僅僅是位元的異或)來進行該處理,以獲得三位元位址(足以識別資料存儲在哪個片-片0至片7中)。
與該示例一致,假定該散列函數導致指示為資料(如果存在於L3快取記憶體中)將存在於L3快取記憶體的駐留在片7中的該部分中。然後,透過匯流排界面120_6和120_7從片6 102_6的L2快取記憶體到存在於片7 102_7中的L3快取記憶體進行通信。該通信在圖中由帶圓圈的數位1表示。如果資料存在於L3快取記憶體中,則其將從L3快取記憶體130_7通信回L2快取記憶體112_6。然而,並且在該示例中,假定資料也不在L3快取記憶體中,從而導致快取記憶體未命中。因此,透過記憶體控制器164,從L3快取記憶體130_7透過匯流排界面7 120_7透過非核匯流排界面162到晶片外記憶體180進行通信。該通信在圖中由帶圓圈的數位2表示。然後,將包括駐留在位址1000處的資料的快取記憶體行從晶片外記憶體180透過記憶體控制器164和非核匯流排界面162通信回L3快取記憶體130_7中。該通信在圖中由帶圓圈的數位3表示。在將該資料寫入L3快取記憶體之後,然後透過匯流排界面120_7和120_6將其通信到請求核,即核6 110_6。該通信在圖中由帶圓圈的數位4表示。
在這一點上,在一個實施例中,一旦載入請求已經完成,該資料將駐留在快取記憶體L3、L2和L1D各自中。本發明涉及一種改進的邊界框預取指單元,其駐留在L2快取記憶體112_0至112_7各自中。在所示實施例中,如上所述,L1快取記憶體是相對小的大小的快取記憶體。因此,對於過於激進地預取指到L1快取記憶體中可能存在性能和頻寬後果。在這方面,更複雜或激進的預取指器通常消耗晶片中更多的矽基板面,以及更多的功率和其他資源。此外,從上述示例中,過度預取指到L1快取記憶體中通常可能導致更多的未命中和驅逐;這消耗了附加的電路資源,以及用於將資料預取指到相應的L1快取記憶體中所需的通信的頻寬資源。更具體地,由於所示實施例共用由虛線190表示的片上通信匯流排,因此過多的通信消耗附加的頻寬,潛在地不必要地延遲微處理器100的其他部分所需的其他通信或資源。
在一個實施例中,L1I和L1D快取記憶體這兩者都小於L2快取記憶體,並且需要能夠更快地滿足資料請求。因此,在各個片的L1I和L1D快取記憶體中實現的預取指器優選地是相對簡單的預取指器。此外,L1D快取記憶體需要能夠流水線化請求。因此,在L1D中放置附加的預取指電路可能是相對繁重的。此外,複雜的預取指器可能會妨礙其他必要的電路。關於各個L1快取記憶體的快取記憶體行,在一個實施例中,快取記憶體行是64位元組。因此,每個時鐘週期可以載入64位元組的載入資料。
如上所述,在一個實施例中,L2快取記憶體的大小優選地為256KB。具有比在L1快取記憶體中實現的預取指單元更大的面積,在L2快取記憶體中實現的邊界框預取指單元可能更複雜和激進。通常,在L2快取記憶體中實現更複雜的預取指器導致針對推測性地引入資料的較少的性能損失(例如,與L1預取指器相比)。因此,本發明的邊界框預取指單元在L2快取記憶體中實現。
在描述本發明的邊界框預取指單元的細節之前,首先參考圖2,圖2是示出實現邊界框預取指單元232的實施例的示例L2快取記憶體112的方塊圖。具體地,圖2中所示的組件描繪了邊界框預取指單元232和促進L2快取記憶體112內以及與圖1中所示的系統中的其他元件的通信的結構的其他基本特徵。如圖所示,存在四個主框210、220、230和240,其示出了L1D介面210、L1I介面220、預取指介面230和外部介面240。總的來說,這些框表示透過L2快取記憶體112對事務或請求進行排隊和跟蹤的電路。如圖1所示,在各個核中,存在L1D和L1I快取記憶體這兩者,以及更高級的L2快取記憶體。L1D介面210和L1I介面220使L2快取記憶體與L1快取記憶體交互。例如,這些介面將載入佇列、驅逐佇列和查詢佇列實現為促進該通信的機制。預取指介面230是促進與本發明的邊界框預取指單元232相關聯的通信的電路,這將在下面更詳細地描述。在一個實施例中,預取指介面230實現邊界框預取指單元232和流預取指器這兩者,並且可以基於它們的相關聯演算法的結果進行預取指確定。如已知的,預取指器的設計通常涉及預取指器可以多快地預熱(例如,在生成預取指之前需要建立多少狀態)與預取指器多麼激進地做出請求之間的折衷。作為說明,邊界框預取指器在模式被建立之前可能花費相對長的時間來預熱(例如,5-8個請求),然而一旦模式被建立,就存在關於模式是預取指所基於的良好模式的相對良好的置信度,並且因此可以相對激進地進行預取指。另一方面,流預取指器的複雜程度低得多,由此在生成預取指之前可能僅需要3個訪問來預熱(例如,建立狀態)。實際上,流預取指器基本上尋找循序存取之間的重複步幅,並根據該步幅生成預取指。此外,在新請求進入當前未被跟蹤的新頁的情況下,流預取指器可以進行下一行預取指。總的來說,這樣的特徵使得流預取指器能夠在開始新頁時非常早地開始預取指,儘管預取指具有較低的置信度,並且因此不那麼激進地發出。存在可用於流預取指單元的許多已知的流預取指演算法,在此省略對其的討論,因為對於描述作為本公開的主題的邊界框預取指單元是不必要的。在U.S.8,880,807中描述了邊界框預取指器的一般結構和操作,其透過引用整體併入本文,並且下面描述了邊界框預取指器的選擇特徵的一般描述。
如本領域普通技術人員將理解的,由邊界框預取指單元232 (和流預取指單元)使用的預取指演算法部分地透過監視來自與給定核相關聯的L1I和L1D快取記憶體的載入請求來進行。因此,這些被示出為預取指介面230的輸入。預取指介面230的輸出是標籤流水線250的仲裁請求的形式,本領域普通技術人員將理解在此簡要描述的其相關功能。最後,外部介面240提供到L2快取記憶體外部並且實際上在處理器核外部的元件的介面,並且包括如下所述的L2填充佇列242和外部監聽佇列。如結合圖1所描述的,這樣的通信(特別是片外通信)透過匯流排界面120來路由。
如圖2所示,電路塊210、220、230和240各自具有表示為標籤流水線仲裁(arb)請求的輸出。標籤流水線250被提供為中心點,幾乎所有L2快取記憶體業務都透過該中心點行進。在所示的實施例中,存在兩個標籤流水線,表示為A和B。提供兩個這樣的標籤流水線僅僅用於負載平衡,並且再次基於負載平衡,從電路210、220、230和240(各種介面電路)輸出的標籤流水線請求可以被引導到標籤流水線A或標籤流水線B。在一個實施例中,標籤流水線是四階段流水線,其中階段由字母A、B、C和D表示,但是在一些實施例中,可以使用其他數量的階段。訪問快取記憶體的事務(在本文中有時被稱為“標籤流水線arb”)前進透過標籤流水線250的階段。在A階段期間,事務請求進入標籤流水線。該事務具有對應於L2和L3預取指的兩個屬性:ForcePrefetchL2和ForcePrefetchL3。
在B階段期間,標籤被發送到陣列(標籤陣列260和資料陣列270)。此外,在B階段中,進行有效填充佇列條目的數量與閾值的比較。如果有效填充佇列條目的數量超過閾值並且未設置ForcePrefetchL2,則將預取指請求轉為L3預取指。如果ForcePrefetchL2或ForcePrefetchL3位中的任一個被設置,則預取指忽略閾值計算並且(分別)作為L2或L3預取指繼續。ForcePrefetchL2/L3位是互斥的。在C階段期間,從陣列接收MESI資訊和LLC中的標籤命中還是未命中的指示,並且鑒於從陣列接收的資訊做出關於採取什麼動作的確定。在D階段期間,動作決策(完成/重放、分配填充佇列條目等)的階段回到請求佇列。
外部介面240包括外部填充佇列242 (或在本文中也簡稱為填充佇列或L2填充佇列)和外部監聽佇列。如下面將進一步描述的,每當L2快取記憶體中存在未命中時,就將條目分配給填充佇列242。填充佇列限制未完成的L2到L3的未命中的總數。填充佇列242包括跟蹤諸如物理位址、記憶體樹、操作碼的某些特徵(例如,其是否被讀取、驗證、快取記憶體行刷新、常規載入請求、I/O請求、其是否針對加速器等)等的資訊的狀態暫存器集合。此外,填充佇列242包括控制邏輯(例如,每個條目的有限狀態機),其跟蹤包括是否存在要驅逐的快取記憶體行的資訊、以及本領域普通技術人員應當理解的其他功能。
最後,圖2示出了標籤陣列260和資料陣列270。標籤陣列260有效地或基本上包括中繼資料,而資料陣列270是包括資料的實際快取記憶體行的記憶體空間。標籤陣列260中的中繼資料包括MESI狀態以及L1I和L1D有效位。如已知的,MESI狀態定義存儲在資料陣列270中的資料是否處於修改(“M”)、獨佔(“E”)、共用(“S”)或無效(“I”)狀態之一。
已經描述了可以實現邊界框預取指單元的某些實施例的示例環境,注意圖3A-3B,其是一般地示出邊界框預取指的繪圖。廣義地說,邊界框預取指可以解釋如下。如果在圖形上表示了對記憶體塊的所有訪問,則所有訪問的集合可以由邊界框包圍(例如,在圖3A-3B中用虛線框示意性地示出)。如果在同一圖上表示附加請求,則還可以透過調整邊界框的大小來包圍這些請求。在圖3A所示的第一示意圖300A中,表示了對記憶體塊的兩個訪問。x軸反映訪問的時間順序。y軸表示訪問的4千位元組(KB)塊內的64位元組快取記憶體行索引。最初,繪製前兩個訪問:第一個是針對快取記憶體行5,第二個是針對快取記憶體行6。繪製了包圍這兩個點的框,並且在示意圖300A的右手側示出了指示最小(例如,min=5)和最大(例如,max=6)訪問位置的指針。
現在,針對快取記憶體行7進行第三個(新)訪問,如圖3B的示意圖300B所示,並且框被增長以包圍新點。當總是具有新資料點時,框沿x軸增長。然而,框的上邊緣也沿y軸(在這種情況下向上)生長。方向和對指向最小和最大訪問的指標反映的這種改變反映在示意圖300B的右手側。框的下邊緣和上邊緣的移動用於確定訪問模式是向上趨勢、向下趨勢還是兩者都不是。
除了跟蹤邊界框的下邊緣和上邊緣的趨勢以確定方向趨勢之外,還跟蹤各個訪問,這是因為通常情況是訪問模式跳過一個或多於一個快取記憶體行。因此,為了防止浪費對可能被跳過的快取記憶體行的預取指,一旦檢測到向上或向下趨勢,邊界框預取指器(包括本公開的邊界框預取指單元)就使用附加標準來確定要預取指哪些快取記憶體行。由於訪問趨勢被重新排序,邊界框預取指器表示時間排序方面被剝離的訪問歷史。這是透過標記訪問位元遮罩中的位元來完成的,其中各個位對應於記憶體塊內的一個快取記憶體行。對於到達特定記憶體塊的各個訪問,設置訪問位元遮罩中的相應位。一旦已經對記憶體塊進行了足夠數量的訪問,預取指器就使用訪問位元遮罩(其不具有訪問的時間順序的指示)基於對整個塊的訪問的大視圖來做出預取指決策(例如,預測),而不是像常規預取指器那樣基於訪問的非常小的視圖並且嚴格地根據發生的時間來做出預取指決策。
一般地透過對邊界框預取指器的這種一般描述,現在將注意力轉到圖4,圖4是示出用於邊界框預取指單元的實施例的存儲和控制邏輯的方塊圖。如上所述,圖4中描繪的大部分硬體和控制邏輯的描述至少部分地基於美國專利8,880,807(下文稱為‘807專利),其全部內容透過引用併入本文,其中進一步描述了增強以有效地應對密集訪問模式不僅難以建立模式匹配而且導致L2填充佇列的頻寬減少的應用。參考圖4,示出了邊界框預取指單元400,其包括針對(由邊界框預取指單元維持的多個預取指器頁條目中的)各個預取指器頁條目的存儲402 (例如,多個暫存器)和控制邏輯404(例如,其可被實施為控制單元,包括有限狀態機)。換句話說,邊界框預取指單元400維持多個預取指器頁條目,以使得能夠跟蹤對多個記憶體塊的訪問(經由狀態資訊,或簡單地,狀態)、以及通常針對多個記憶體塊的模式匹配,其中各個預取指器頁(例如,4KB頁)的存儲和控制邏輯的組合以實現預取指生成。注意,邊界框預取指單元232 (圖2)可以使用結合圖4示出和描述的邊界框預取指單元400來實現。
存儲402包括訪問位元遮罩暫存器406 (也稱為塊位元遮罩暫存器)。訪問位元遮罩406中的各個位元對應於塊號存儲在塊號暫存器408中的記憶體塊內的一個快取記憶體行。也就是說,塊號暫存器408存儲記憶體塊的高位址位。訪問位元遮罩406中的位的真值指示相應的快取記憶體行已被訪問。訪問位元遮罩406被初始化,使得所有位都為假。在一個實施例中,記憶體塊的大小是4KB (其在一些實例中可以等於物理記憶體頁的大小),並且快取記憶體行的大小是64位元組;因此,在訪問位元遮罩406中存在64位。然而,在其他實施例中,快取記憶體行的大小可以變化。此外,維持訪問位元遮罩406的記憶體區域的大小可以變化,並且不一定對應於物理記憶體頁的大小。而是,維持訪問位元遮罩406的記憶體區域或塊的大小可以是任意的(優選地為2的冪),只要其包含足夠大數量的快取記憶體行以使得能夠檢測明確的方向和模式以用於有益的預取指目的即可。在下面的描述中,為了簡潔和便於理解本發明,將記憶體塊描述為對應於頁(預取指器頁或預取指器頁條目)。
存儲402還包括最小(min)指針暫存器410和最大(max)指標暫存器412,其被維持為分別指向自邊界框預取指單元400開始跟蹤對記憶體塊的訪問以來已經被訪問的該記憶體塊內的最低和最高快取記憶體行索引。存儲402還包括min_change計數器414和max_change計數器416,其分別對自邊界框預取指單元400開始跟蹤對該記憶體塊的訪問以來對min指針410和max指針412的改變次數進行計數。存儲402還包括總計數器418,其對自邊界框預取指單元400開始跟蹤對該記憶體塊的訪問以來被訪問的快取記憶體行的總數進行計數。在一些實施例中,可以使用其他機制來對訪問進行計數,包括使用存取遮罩的總體計數(例如,64位總體計數)。存儲402還包括中間指標420,其指向自邊界框預取指單元400開始跟蹤對記憶體塊的訪問以來已經被訪問的該記憶體塊內的中間快取記憶體行索引(即,最小指標410和最大指針412的平均值)。存儲402還包括方向暫存器424、模式暫存器426、模式時段暫存器428、模式位置暫存器430和搜索指標暫存器432,下面將更詳細地描述其使用。
存儲402還包括多個時段匹配計數器422。時段匹配計數器422各自維持針對不同時段的計數。在一個實施例中,時段是3、4和5,但是在一些實施例中可以使用其他時段值。時段是中間指針420的左/右的位數。在每次記憶體訪問塊之後更新時段匹配計數器422。如果訪問位元遮罩406指示在該時段內對中間指針420左側的訪問與在該時段內對中間指針420右側的訪問匹配,則邊界框預取指單元400遞增與該時段相關聯的時段匹配計數器422。下面更詳細地描述時段匹配計數器422的操作和使用。
在預取指的上下文中描述上述存儲402,如上所述並在圖2中示出,預取指介面230由來自L1D和L1I的傳入載入請求饋送。L1快取記憶體正在向L2快取記憶體112發送對L1快取記憶體中未命中的訪問的載入請求。例如,在L1快取記憶體接收到載入或存儲指令時,搜索L1D中要載入或存儲的位址。更具體地,搜索L1D標籤陣列260以查看是否存在快取記憶體行,由此直接滿足請求,否則在快取記憶體未命中時,將請求轉發到L2快取記憶體112,其大於L1D因此在那裡請求更可能命中。然而,L2快取記憶體112也更慢並且更遠離執行單元,從而導致更高的訪問等待時間。如果L2快取記憶體112中存在未命中,則將請求轉發到L3快取記憶體130(或者如果不存在L3快取記憶體,則轉發到系統記憶體)。預取指介面230的邊界框預取指單元232(也稱為400)監視從L1D(和L1I)進入的載入請求(載入和存儲)流並嘗試預測模式。通常,從L1D(和L1I)進入的載入請求被接收到預取指輸入佇列中,並在後續時鐘週期中被移除。存在與被移除的載入相關聯的物理位址,並且物理位址被截斷以指向4KB位址記憶體區域(例如,對應於該請求的4KB頁),並且進行比較以確定與對應於邊界框預取指單元正在監視的相應4KB記憶體區域的任何頁的匹配(例如,位址匹配)(例如,以確定是否存在針對該頁分配的邊界框預取指單元存儲和控制邏輯)。注意,各個4KB頁通常具有與其相關聯的一個流。
假定存在匹配,邊界框預取指單元更新與記憶體塊相關聯的狀態資訊,確定到記憶體區域中的偏移,並將其解碼成相應的快取記憶體行(例如,64位向量)。在一個實施例中,訪問位元遮罩406對應於記憶體區域的頁條目,其中針對在監視記憶體區域期間訪問的各個快取記憶體行設置位。如果該位尚未被設置,則這是新的訪問,在這種情況下,總計數器418(對應於頁內已經被訪問的快取記憶體行的數量)被遞增。被更新的其他狀態資訊包括相應的4KB頁位址區域或記憶體區域的塊號408。最小指針410或最大指針412針對每次訪問被更新。也就是說,對於每次訪問,確定該訪問是否低於當前最小值或高於當前最大值,如果是,則相應地調整指針。另外,計數器min_change計數器414和max_change計數器416遞增。調整中間指針420,並且基於min_change計數器414與max_change計數器416來調整方向424(例如,以確定流是向上還是向下)。例如,在min_change計數器414與max_change計數器416改變的次數之間進行比較。
簡要地說,由於記憶體請求可能不按順序發生(例如,如已知的,在保留站與記憶體順序緩衝器之間重新排序),因此狀態資訊有助於確定訪問模式中的方向。例如,如果min_change計數器414被更新兩次,而max_change計數器416被更新比如十次,則流很有可能趨向于向上。注意,在一些實施例中,可以使用其他或附加機制來建立方向。例如,可以使用頁訪問的子採樣(例如,使用頁的下四分位數或上四分位數中的前兩次訪問等)來建立方向。包括時段匹配計數器422、模式426、模式時段428、模式位置430和搜索指標432的存儲402由控制邏輯404(也稱為預測邏輯)直接使用以確定訪問中的模式,然後使用這些訪問模式來預測要預取指的快取記憶體行。
存儲402還包括L3位元遮罩434,如下所述,L3位元遮罩434用於在填充佇列已經達到或超過閾值容量並且L2預取指被禁止的密集訪問的實例期間跟蹤L3預取指。簡而言之,在已經完成針對記憶體塊的L3預取指之後(例如,當已經到達記憶體塊的末尾時)訪問L3位元遮罩434,並且然後根據L2快取記憶體標籤流水線250中識別的特殊屬性(例如,如上文結合圖2所述的位設置)重新發出預取指,以迫使預取指根據L3位元遮罩434分配到L2快取記憶體中。
存儲402還包括預取指請求佇列436(輸出佇列)。預取指請求佇列436包括條目的迴圈佇列,各個條目存儲由邊界框預取指單元400的操作生成的預取指請求。在一個實施例中,選擇預取指請求佇列436的大小以允許將請求完全流水線化到L2快取記憶體標籤流水線250(圖2)中,使得預取指請求佇列436中的條目的數量至少與L2快取記憶體標籤流水線250中的階段的數量一樣多。預取指請求被維持直到L2快取記憶體標籤流水線250結束,此時請求具有三種結果之一,即:L2快取記憶體112中的命中、重放或者填充佇列條目的分配以從系統記憶體預取指期望的資料。注意,邊界框預取指單元400還包括輸入預取指請求佇列(未示出),其接收來自L1D的進入L2快取記憶體的請求。
邊界框預取指單元400還包括控制邏輯404,其控制邊界框預取指單元400的元件以進行本文描述的各種功能。實際上,控制邏輯404包括用於基於存儲402中的狀態資訊進行預取指的預測邏輯。
圖5是示出邊界框預取指單元(諸如邊界框預取指單元400(和232)等)的實施例的操作500的一般方法的流程圖。一般方法500涉及基於使用針對各個活躍記憶體塊在相應存儲402中維持的值的模式匹配來預測快取記憶體行的預取指。在方塊502處,邊界框預取指單元接收對記憶體位址的載入/存儲記憶體訪問。在一個實施例中,邊界框預取指單元在確定要預取指哪些快取記憶體行時在載入和存儲之間進行區分;在另一實施例中,邊界框預取指單元在確定要預取指哪些快取記憶體行時不在載入和存儲之間進行區分。在一個實施例中,邊界框預取指單元從微處理器中的載入/存儲單元接收記憶體訪問。邊界框預取指單元可以從各種源接收記憶體訪問,各種源包括但不限於載入/存儲單元、L1資料快取記憶體114(例如,由於在L1資料快取記憶體114中未命中的載入/存儲單元記憶體訪問而由L1資料快取記憶體114生成的分配請求)和/或其他源,諸如微處理器的採用與邊界框預取指單元不同的預取指演算法來預取指數據的其他預取指單元(未示出)等。
在決策方塊504處,控制邏輯404透過將記憶體訪問位址與各個塊號暫存器408值進行比較來確定記憶體訪問是否是針對活躍塊的。也就是說,控制邏輯404確定預取指器頁條目(具有相應的存儲和控制邏輯)是否已被分配用於由記憶體訪問指定的記憶體位址所涉及的記憶體塊。如果是,流程進入方塊508;否則,流程進入方塊506。
在方塊506處,控制邏輯404針對所涉及的記憶體塊分配預取指器頁條目。例如,邊界框預取指單元接收記憶體訪問,並且如果不存在針對相應頁的活躍條目,則產生實體針對新頁的新預取指器頁條目(包括啟動相應的存儲和控制邏輯)。注意,預取指器頁條目彼此完全獨立,這是因為各個預取指器頁條目對應於唯一的4KB記憶體區域。例如,預取指器頁條目包括具有在4KB區域內的位址的各個訪問流的狀態資訊。在一個實施例中,以迴圈方式實現分配。在另一實施例中,維持存儲和控制邏輯的最近最少使用的資訊,並且基於最近最少使用進行分配。特別地,控制邏輯404透過清除訪問位元遮罩406的所有位,用記憶體訪問位址的高位填充塊號暫存器408,並且將最小指針410、最大指針412、min_change計數器414、max_change計數器416、總計數器418和時段匹配計數器422清除為零來啟動。流程進入方塊508。
在方塊508處,控制邏輯404基於記憶體訪問位址來更新存儲402。例如,控制邏輯404遞增總計數器418,並且確定當前記憶體訪問位址是否大於最大指針412或小於最小指針410。更具體地,對於最大指標412的確定,控制邏輯404確定當前記憶體訪問位址(即,當前記憶體訪問位址所涉及的快取記憶體行的在記憶體塊內的索引)是否大於最大指標412值。如果是,則控制邏輯404用當前記憶體訪問位址所涉及的快取記憶體行的在記憶體塊內的索引來更新最大指標412,並且遞增max_change計數器416,然後進入中間指標420的確定。如果不是,則繼續進行最小指針410的比較的確定。也就是說,控制邏輯404確定當前記憶體訪問位址所涉及的快取記憶體行的在記憶體塊內的索引是否小於最小指標410值。如果是,則控制邏輯404用當前記憶體訪問位址所涉及的快取記憶體行的在記憶體塊內的索引來更新min指標410,並且遞增min_change計數器414。在更新之後,控制邏輯404計算最小指標410和最大指標412的平均值,並且用計算的平均值更新中間指標420。然後,控制邏輯404檢查訪問位元遮罩406並且隔離中間指標420的左側和右側的N位,其中N是與各個相應的時段匹配計數器422相關聯的位數。然後,控制邏輯404確定中間指標420左側的N位是否與中間指針420右側的N位匹配。如果是,則控制邏輯404使具有時段N的相關時段匹配計數器422遞增,否則更新結束。
在決策方塊510處,控制邏輯404檢查總計數器418以確定程式是否已經對記憶體塊進行了足夠的訪問以檢測訪問模式。在一個實施例中,控制邏輯404確定總計數器418的值是否大於預定量,該預定量在一個實施例中為10,但是預定量可以變化。如果已經進行了足夠的訪問,則流程進入決策方塊514;否則,流程完成512。
在決策方塊514處,控制邏輯404確定在訪問位元遮罩406中指定的訪問之間是否存在明確的方向趨勢。也就是說,控制邏輯404確定訪問是明確呈上升趨勢(增加訪問位址)還是呈下降趨勢(減少訪問位址)。在一個實施例中,控制邏輯404透過確定min_change計數器414和max_change計數器416之間的差是否大於預定量來確定是否存在明確的方向趨勢,在一個實施例中,該預定量為2,但是預定量可以變化。如果min_change計數器414比max_change計數器416大預定量,則明確的趨勢是向下的;然而,如果max_change計數器416比min_change計數器414大預定量,則明確的趨勢是向上的。如果存在明確的方向趨勢,則流程進入決策方塊516;否則,流程結束512。
在方塊516處,控制邏輯404確定在訪問位元遮罩406中指定的訪問之中是否存在明確的模式時段獲勝者。在一個實施例中,控制邏輯404透過確定時段匹配計數器422中的一個與所有其他時段匹配計數器422之間的差是否大於預定量來確定是否存在明確的模式時段獲勝者,在一個實施例中,該預定量是2,但是預定量可以變化。如果存在明確的模式時段獲勝者,則流程進入方塊518;否則,流程結束512。
在方塊518處,控制邏輯404填充方向暫存器424以指示在決策方塊514處確定的明確的方向趨勢。另外,控制邏輯404用在決策方塊516處檢測到的明確獲勝模式時段(N)填充模式時段暫存器428。最後,控制邏輯404用在決策方塊516處檢測到的明確獲勝模式填充模式暫存器426。也就是說,控制邏輯404用中間指標420的右側或左側N位元訪問位元遮罩406填充模式暫存器426(根據上文針對方塊508中的更新的描述,其將匹配)。流程進入方塊520。
在方塊520處,控制邏輯404啟動對記憶體塊內的未取指的快取記憶體行的預取指。作為用於對未取指的快取記憶體行進行預取指的一種方法的說明,控制邏輯404在一個模式時段428處在檢測到的方向上遠離中間指標420處初始化搜索指標432和模式位置430。也就是說,控制邏輯404將搜索指標432和模式位置430初始化為中間指標420值和檢測到的模式的時段(N)值的和/差。例如,如果中間指標420的值為16且N為5且方向424向上,則控制邏輯404將搜索指標432和模式位置430初始化為21。因此,在該示例中,出於比較的目的,模式426的五個位將相對於訪問位元遮罩406的位21至25定位。控制邏輯404檢查搜索指標432處的在訪問位元遮罩406中的位元和模式426中的相應位元(其相對於模式位置430處的訪問位元遮罩406定位),以確定是否預取指記憶體塊內的相應快取記憶體行。控制邏輯404預測是否需要所檢查的快取記憶體行。如果模式426中的位元為真(即,模式預測程式將訪問快取記憶體行),則控制邏輯404預測需要快取記憶體行。如果需要快取記憶體行,則流程繼續以確定快取記憶體行是否已經被取指。否則,控制邏輯404透過確定搜索指標432是否已經到達訪問位元遮罩406的末尾來確定記憶體塊中是否有更多任何未檢查的快取記憶體行,並且如果沒有更多的快取記憶體行,則流程結束,否則,流程以控制邏輯404遞增/遞減搜索指標432繼續。另外,如果搜索指標432已經超過模式426的最後一位元,則控制邏輯404用搜索指標432的新值更新模式位置430 (即,將模式426移位元到新的搜索指標432位置),然後流程返回到如上所述的檢查訪問位元遮罩406中的位。
繼續,控制邏輯404確定是否已經取指了所需的快取記憶體行。如果訪問位元遮罩406中的位為真,則控制邏輯404確定為已經取指了所需的快取記憶體行。如果已經取指了所需的快取記憶體行,則流程繼續如上所述確定記憶體塊中是否有更多任何未檢查的快取記憶體行,否則,則控制邏輯404確定所考慮的快取記憶體行是否大於相對於最小指針410(如果方向424向下)的預定量(在一個實施例中為十六),或者控制邏輯404確定所考慮的快取記憶體行是否大於相對於最大指針412(如果方向424向上)的預定量。如果是,則流程結束;否則,流程繼續確定請求佇列是否已滿。應注意,如果快取記憶體行離最小指針410/最大指針412太遠而使得流程結束,則這並不意味著邊界框預取指單元後續將不預取指方塊內的附加快取記憶體行,這是因為對方塊內的快取記憶體行的後續訪問可能觸發方塊內的更多預取指。繼續,控制邏輯404確定預取指請求佇列436是否已滿。如果是,則控制邏輯404停止,直到預取指請求佇列436變為非滿流為止,然後繼續分配如下所述的條目。否則,控制邏輯404將條目分配到預取指請求佇列436中以預取指快取記憶體行。
注意,可以實現上述操作方法的變型,如‘807專利中部分描述的,並且因此變型預期在本公開的範圍內。
在一個實施例中,本文所述的預定量中的一個或多於一個是透過作業系統(諸如經由模型特定暫存器(MSR))或者經由微處理器100的熔絲可程式設計的,該熔絲在製造微處理器100時可能被熔斷。
已經描述了邊界框預取指單元400(圖4)的一般操作,現在將注意力轉向如上所述的模式匹配是挑戰的特定條件下的操作。也就是說,在下面的描述中,說明了邊界框預取指單元400發出預取指作為L3預取指並且然後引入L3預取指的快取記憶體行作為L2預取指的條件集合。簡而言之,已經觀察到,對於某些基準和應用,預取指性能很差,儘管訪問模式非常密集(表現出高空間局部性)。例如,正在檢索許多快取記憶體行,並且所有訪問都集中在記憶體區域,這表明預取指的良好條件。然而,在如上所述的正常操作中,搜尋引擎邏輯正在查看中點周圍的兩個連續訪問區域(例如,在中點周圍的訪問將對前端重新排序最不敏感的前提下)並確定是否存在匹配(例如,使用多個時段,包括2、3、4個等)。確定為大約十三個的時段匹配(例如,匹配十三個快取記憶體行模式)應該在激進預取指期間(例如,當激進預取指的條件成熟時)在預取指中實現良好的預取指性能。然而,較長的時段匹配不僅需要顯著的硬體增加,而且考慮到使用兩個連續區域進行匹配,導致在建立時段匹配之前透過頁的顯著進展(例如,透過頁的三分之一或一半)(並且因此需要新的流或頁來訓練)。此外,較長的模式匹配可能由於無法以任何置信度建立較低的模式匹配而受到阻礙。通常,置信度通常在模式匹配中的幾個成功之後建立,並且如果不能成功地進行模式匹配,則可能導致差的預取指性能。差的預取指(例如,在低置信度或可靠性方面)具有其成本,包括功耗和記憶體頻寬。此外,由於預取指快取記憶體行導致其它快取記憶體行的驅逐,因此存在以滿足需求請求所需的快取記憶體行為代價引入具有特殊優點的快取記憶體行的風險。
為了確定這些條件,邊界框預取指單元400(例如,控制邏輯404)評估由存儲暫存器402指示的狀態資訊。如果訪問位元遮罩406是密集的(例如,從最小指針410到最大指針412),其中設置了閾值數量的位(例如,從最小指針410到最大指針412的位的至少四分之三),並且已經檢測到至少最小數量的訪問(例如,8-10次訪問),並且沒有建立時段(例如,時段2、時段5等),然後,邊界框預取指單元400在假定訪問非常密集並且無法或難以建立良好的時段匹配的條件的前提下操作。因此,在一些實施例中,邊界框預取指單元400進行激進預取指,其中暫停模式匹配並且預取指頁(例如,記憶體塊)的剩餘部分的快取記憶體行。在一些實施例中,在對要引入的快取記憶體行的數量有約束的情況下進行激進預取指。作為約束的示例,可以在不超過最近訪問之前(例如,取決於方向)的8行或12行的情況下實現預取指。作為說明,暫停模式匹配,並且下一個例如八(8)個後續快取記憶體行被預取指,同時嘗試保持在最近訪問之前的8個快取記憶體行。因此,如果存在訪問A、B,則預取指可以由C、D、E、F、G、H、I和J組成。如果下一次訪問是針對C,則預取指K。如果下一次訪問是針對E,則預取指L和M,依此類推。在一些實施例中,如果模式被建立(並且是可持續的),則模式匹配繼續並且用於取消這種激進預取指。在一些實施例中,在建立模式之後繼續激進預取指,但是僅根據新模式預取指快取記憶體行。
進一步描述,最初,邊界框預取指單元400跟蹤對應於訪問且展現高置信度的條目的數量。也就是說,邊界框預取指單元400跟蹤針對各個記憶體塊的這些條目,同時基於與已經預取指的快取記憶體行匹配的傳入載入請求來確定置信度。如果傳入載入請求匹配到已經預取指的快取記憶體行上,則置信度增加,且對於未匹配(例如,對於未預取指的快取記憶體行,或如果快取記憶體行經預取指但尚未訪問),置信度降低。透過在這些條件下建立多個高置信度頁(例如,8個中的5個),則邊界框預取指單元400在假定應用涉及具有低預測機會的記憶體的資料流的情況下增加了激進預取指。因此,當接收到對新頁的載入請求並且該請求在頁的最低或最高區域中時,立即開始激進預取指(例如,不等待最小數量的訪問或訪問位元遮罩406的四分之三位的設置)。換句話說,在假定性能度量(例如,高置信度、密集訪問)被維持且因而新條目看起來是相同軟體流或軟體模式的繼續的情況下,激進預取指繼續,因此證明激進預取指直到置信度開始下降(例如,較低置信度)為止是合理的。
在預取指期間,如上所述,邊界框預取指單元400為了訪問L2標籤陣列260的目的生成進入L2標籤流水線250的請求,以將期望預取指的位址與L2標籤陣列260進行比較。如果存在匹配(例如,如果位址已經在那裡),則實際上沒有更多關於該特定預取指的事情(例如,操作被處理成有點像NOP)。然而,如果快取記憶體行不在L2快取記憶體中(L2標籤陣列260中沒有匹配),則產生L2未命中,並且將請求轉發到L3快取記憶體130)以引入所請求的快取記憶體行。L2快取記憶體未命中導致在外部介面240的L2填充佇列242中的條目的分配。L2填充佇列242限制未完成的L2至L3未命中的總數,並且其確實填充。L2填充佇列242對於性能是重要的。如果L2填充佇列242填充有預取指,則可能不允許在L2快取記憶體112中未命中的來自L1快取記憶體(例如,L1D)的需求訪問分配到L2填充佇列242中,這由於相對更推測性的預取指而導致需求請求的備份。如果L2填充佇列242超過閾值容量(例如,一半、四分之三等),則基於預取指請求中的特殊屬性或位元設置(例如,未設置ForcePrefetchL2,如上所述),迫使所有預取指分配到L3快取記憶體中(例如,有效地轉換為L3預取指,其中預取指從系統記憶體引入L3快取記憶體130)。進行L3預取指而不是L2預取指的一個益處是用於L3預取指的L2填充佇列242條目僅需要在L2填充佇列242中保留足夠長的時間以將請求發送到L3快取記憶體130並接收請求已被接受的確認(即,無需等待實際資料)。換句話說,代替該請求必須潛在地存活例如20-30個時鐘(L3中的命中),或者如果進入系統記憶體則數百個時鐘,用於L3預取指的該L2填充佇列242條目僅需要在L2填充佇列242中保留大約5-10個時鐘,這取決於L3快取記憶體130的等待時間。因此,預取指可以非常快速地翻轉L2填充佇列242條目(這減少了滿足需求請求的障礙),並且不存在核總記憶體頻寬上的這種耗盡。另一個益處是不需要(從L2快取記憶體)驅逐快取記憶體行來為引入L3快取記憶體的新行騰出空間。
當邊界框預取指單元400正在執行激進預取指時,容量問題是重要的,這是因為大量的預取指可以快速填充L2填充佇列242。在激進預取指期間管理L2填充佇列242的一個機制是節流預取指的快取記憶體行的量。預取指量的選擇是從前面的單個快取記憶體行到所有剩餘的快取記憶體行直到頁的末尾的任何地方。例如,單個預取指雖然允許L2填充佇列資源的良好管理,但是提供了較差的命中率性能。另一方面,對於記憶體塊的所有剩餘快取記憶體行的預取指,儘管快取記憶體命中率可以提高,但是考慮到L2填充佇列242的較少條目與快取記憶體行的量(例如,16個條目與50個快取記憶體行),L2填充佇列242對於預取指流的多次反覆運算將是滿的,從而導致消耗所有晶片的記憶體頻寬,直到所有其他快取記憶體行被引入為止。如行業中已知的,就時鐘週期而言,在L3快取記憶體中命中比在系統記憶體中命中更好(例如,數百個時鐘的改進)。但是,在L2快取記憶體中命中甚至比在L3快取記憶體中命中更好(例如,從L1D未命中請求L2快取記憶體提供資料的L2命中等待時間僅為大約5-6個時鐘)。如上所述,一個權衡是如果過不允許預取指向前運行很遠,不存在生成的足夠的預取指來實現許多益處。另一方面,如果預取指被允許在快取記憶體行的量方面進一步前進,則記憶體頻寬占首要地位或者犧牲了某個局部性(例如,只有小百分比的預取指進入L2快取記憶體)。
邊界框預取指單元400的某些實施例透過在預取指請求中使用L3位元遮罩434和特殊屬性(例如,位元設置)來解決上述問題/挑戰中的一個或多於一個。L3位元遮罩434包括存儲402的附加位元遮罩,該附加位元遮罩具有針對最初旨在被引入L2快取記憶體112中但由於L2填充佇列242達到特定閾值容量而被約束為僅被引入L3快取記憶體130中的各個預取指設置的位。在一個實施例中,在L3位元遮罩434中針對旨在L2快取記憶體112但被引入L3快取記憶體130的各個快取記憶體行設置位。如果存在對給定快取記憶體行的需求訪問,則清除L3位元遮罩434中的相應位。因此,維持最初旨在L2快取記憶體112但是由於L2填充佇列242太滿而被禁止進入L2快取記憶體112的被預取指到L3快取記憶體130中的快取記憶體行的運行記帳。在L3預取指到達頁或相關聯的記憶體塊的末尾(並且沒有要生成的新穎預取指)時,透過使用L3位元遮罩434,預取指處理返回在最小指針410或最大指針412(取決於方向424)處開始,並且對於僅引入L3快取記憶體130的每個快取記憶體行(如L3位元遮罩434的位設置所指示的),順序地發出新的預取指(請求),一次一個快取記憶體行,以生成針對L3位元遮罩434中的相應位被設置的下一個快取記憶體行的預取指。換句話說,針對這些快取記憶體行(在L3位元遮罩434中設置了位)中的每個,以特殊屬性發出新的預取指,該特殊屬性工作表示將該快取記憶體行引入L2快取記憶體112(例如,其忽略通常將該預取指轉為L3預取指的任何L2填充佇列滿試探法,代替將該快取記憶體行引入L2快取記憶體112)。特殊屬性是如上所述的新發出的預取指請求中的位設置(例如,如果ForcePrefetchL2位被設置,則預取指忽略閾值計算並作為L2預取指繼續)。如已知的,當各種佇列正在請求並在其之間仲裁以進入L2標籤流水線250時,它們都提供某一組資訊(例如,它們的ID、事務類型、物理位址、哪個快取記憶體路是目的地(如果已知)、特性等)。換句話說,位元設置是同一預取指請求結構中的另一屬性或位元。L2標籤流水線250中添加的位忽略將所有預取指轉為L3預取指的填充佇列滿試探法。
在一個實施例中,被引入L2快取記憶體112中(最初被引入L3快取記憶體130中)的預取指根據約束或束縛被引入。在一個實施例中,可以基於物理位址方面的指定最大距離來確定約束。例如,預取指可以多達N個快取記憶體行,其中N可以是8、16或獲得良好性能的某個其他值。在一些實施例中,約束可以涉及在多達N個附加預取指的意義上的預取指距離,其中預取指間隔開,例如,快取記憶體行。作為使用間隔三(3)的說明性示例,前面八(8)個預取指對應於遠離8×3或二十四(24)個快取記憶體行。注意,在一些實施例中,N的選擇可以使用軟體來實現。在一些實施例中,可以基於置信度來修改N。例如,對於極低置信度流,所生成的預取指可為更保守的(例如,前面的一個或兩個快取記憶體行),而對於極高置信度流,實施更激進的方法(例如,前面的六個快取記憶體行)。
如果新的載入請求進入並且分配了邊界框預取指器頁(新記憶體塊)中的新的預取指器頁條目,(如果只是相同軟體模式、相同軟體流的繼續)則這樣的請求通常將用於對頁的最低四分之一或上四分之一的一次或兩次訪問。邊界框預取指單元400立即(例如,零個附加訪問)或幾乎立即(例如,在1或2次訪問之後)生成一系列預取指,所有或大多數預取指被轉換為L3預取指。並且如上面針對記憶體塊之一的L3預取指類似地描述的,一旦頁的最後一行的預取指已經發生(記憶體塊的末尾),就存在具有特殊屬性並且在最小指標410或最大指標412(例如,取決於方向424)處開始的對預取指的新發出,在一些實施例中,根據相應記憶體塊的L3位元遮罩434的設置位,具有對將引入到L3快取記憶體130中的快取記憶體行引入到L2快取記憶體112中的預取指量的給定約束或束縛。
重要的是盡可能快地生成L3預取指,因為L3快取記憶體130具有比L2快取記憶體更多的可用於從系統記憶體引入快取記憶體行的資源。例如,L2快取記憶體可以僅具有管理十六(16)個未完成的請求的能力(如果十六(16)個未完成的請求都返回到L2快取記憶體112),如果系統記憶體等待時間是數百個週期,則這顯然不會接近流水線處理。在一個實施例中,存在八個L3快取記憶體(用於服務所有8個核),並且根據設計,各個L3快取記憶體具有16或32個未完成的請求資源,因此一個核基本上可以跨越分佈在所有八個L3快取記憶體上的整個頁值的L3預取指。換句話說,這些L3快取記憶體各自可以在系統記憶體訪問下開始,並且這些佇列都不會被填充。然後,一旦預取指在開始處以L2預取指開始,則更可能僅從L3快取記憶體引入快取記憶體行。透過在L2填充佇列達到滿容量的一定百分比(例如,¾滿)時發出所有預取指作為L3預取指,減輕了記憶體頻寬問題。
鑒於以上描述,本領域普通技術人員應當理解,包括邊界框預取指單元400的微處理器的實施例的示例操作方法的一個實施例(如圖6中表示為方法600)包括針對記憶體塊的初始模式匹配預取指(步驟610)。例如,上面結合圖5描述了模式匹配。方法600還包括確定第一條件集合,其包括訪問位元遮罩406是否密集以及是否存在最小訪問數量(步驟620)。如果不是,則模式匹配繼續(步驟610);否則,方法600包括暫停模式匹配並增加預取指的激進性(步驟630)。例如,邊界框預取指單元400進行L2預取指。在一個實施例中,L2預取指可以受到前面N個快取記憶體行的束縛或約束的約束,其中N可以等於前面的一個或多個快取記憶體行,如上所述。方法600評估另一條件,即,L2填充佇列是否至少超過閾值容量(步驟640)。如果不是,則方法600繼續L2預取指(步驟650)並評估預取指的置信度(步驟620)。例如,如果置信度下降,則激進的預取指變得生產力較低,並且可以抑制或暫停激進性以有利於經由模式匹配進行預取指。如果L2填充佇列至少超過閾值容量(步驟640),則方法600進行記憶體塊的所有剩餘預取指作為L3預取指(例如,基於請求中的特殊屬性,如上所述)。在一些實施例中,在對前面預取指的快取記憶體行的量具有約束的情況下進行L3預取指,L3預取指可以如針對L2預取指所進行的那樣或者被修改為適合於性能(步驟660),並且設置L3位元遮罩434的各個位對應於各個L3預取指(步驟670)。在到達記憶體塊的末尾時,方法600包括根據訪問的趨勢或方向返回到最小指標或最大指標(步驟680),並且基於作為L3預取指引入的各個快取記憶體行的特殊屬性發出L2預取指(步驟690)。例如,要作為L2預取指引入的快取記憶體行對應於L3位元遮罩434的設置位。
此外,鑒於以上描述,本領域普通技術人員應當理解,示例邊界框預取指方法的一個實施例(如圖7中表示為方法700)包括:基於條件集合發出記憶體塊的所有剩餘預取指作為L3預取指(步驟702);以及在到達記憶體塊的末尾時,針對與L3預取指相對應的快取記憶體行發出L2預取指(步驟704)。例如,可以設置與L3預取指中的各個L3預取指相對應的L3位元遮罩的各個位,並且針對與L3位元遮罩中設置的位相對應的快取記憶體行發出L2預取指。請求中的特殊屬性(例如,位元設置)啟用L2預取指和L3預取指。
流程圖中的任何過程描述或塊應理解為表示代碼的模組、段、邏輯或部分(其包括用於在過程中實現特定邏輯功能或步驟的一個或多於一個可執行指令),並且替代實現包括在實施例的範圍內,其中如本發明領域技術人員將理解的,功能可以不按所示或討論的順序地執行(包括基本上同時執行或以不同循序執行),或者可以省略一個或多於一個方塊,這取決於所涉及的功能。
雖然在附圖和前面的描述中示出並詳細描述了本發明,但這樣的圖和描述應被認為是例示性或示例性的,而不是限制性的;本發明不限於所公開的實施例。透過研究附圖、公開內容和所附申請專利範圍,本領域技術人員在實踐所要求保護的發明時可以理解並實現所公開的實施例的其它變形。
注意,可以使用所公開的實施例的各種組合,因此參考實施例或一個實施例並不意味著從其它實施例的特徵的使用中排除該實施例的特徵。在申請專利範圍中,單詞“包括”不排除其它元件或步驟。
100:微處理器
102_0、102_6、102_7:片
110_0、110_6、110_7:核
112、112_0、112_6、112_7:L2快取記憶體
114_0、114_6:L1D快取記憶體
120、120_0、120_6、120_7:匯流排界面
130_0、130_7:L3快取記憶體
140_0、140_7:其他片邏輯
160:非核電路
162:非核匯流排界面
164:記憶體控制器
180:晶片外記憶體
190:虛線
210:L1d界面
220:L1i界面
230:預取指界面
232:邊界框預取指單元
240:外部界面
242:外部填充佇列
250:標籤流水線
260:標籤陣列
270:資料陣列
300A:示意圖
300B:示意圖
400:邊界框預取指單元
402:記憶體
404:控制邏輯
406:訪問位元遮罩
408:塊號
410:最小指針
412:最大指針
414:min_change計數器
416:max_change計數器
418:總計數器
420:中間指針
422:時段匹配計數器
424:方向
426:模式
428:模式時段
430:模式位置
432:搜索指針
434:L3位元遮罩
436:預取指請求佇列
500:方法
502、506、508、512、518、520:方塊
504、510、514、516:決策方塊
600:方法
610、620、630、640、650:步驟
660、670、680、690:步驟
700:方法
702、704:步驟
參考以下附圖,可以更好地理解本發明的各個方面。不必按比例繪製附圖中的組件,而是將重點放在清楚地例示本發明的原理上。此外,在附圖中,相同的附圖標記在多個視圖中表示相應部件。
圖1是示出實現邊界框預取指單元的實施例的示例微處理器的方塊圖。
圖2是示出實現邊界框預取指單元的實施例的示例L2快取記憶體的方塊圖。
圖3A-3B是示出邊界框預取指的繪圖。
圖4是示出用於邊界框預取指單元的實施例的預取指器頁條目的存儲和控制邏輯的實施例的方塊圖。
圖5是示出邊界框預取指單元的操作的一般方法的流程圖。
圖6是示出在用於邊界框預取指單元的實施例的激進預取指期間使用的示例方法的實施例的流程圖。
圖7是示出示例邊界框預取指方法的實施例的流程圖。
700:方法
702:步驟
704:步驟
Claims (20)
- 一種微處理器,包括: L1快取記憶體; L2快取記憶體,其包括邊界框預取指單元和L2填充佇列,所述邊界框預取指單元被配置為基於所述L2快取記憶體中的未命中來分配所述L2填充佇列中的條目;以及 L3快取記憶體; 其中,所述邊界框預取指單元被配置為: 基於條件集合發出記憶體塊的所有剩餘預取指作為L3預取指;以及 在到達所述記憶體塊的末尾時,針對與所述L3預取指相對應的多個快取記憶體行發出L2預取指。
- 如請求項1所述的微處理器,其中所述邊界框預取指單元維持多個預取指器頁條目,所述多個預取指器頁條目中的各預取指器頁條目對應於存儲和控制邏輯,其中,所述存儲包括多個暫存器。
- 如請求項2所述的微處理器,其中所述多個暫存器還包括最大指針、最小指針和方向,其中,所述邊界框預取指單元被配置為基於所述方向在所述多個快取記憶體行中與所述最大指針或所述最小指針相對應的快取記憶體行處開始發出所述L2預取指。
- 如請求項2所述的微處理器,其中所述多個暫存器還包括與包括所述多個快取記憶體行的所述記憶體塊相關聯的訪問位元遮罩和L3位元遮罩,其中,所述邊界框預取指單元還被配置為設置所述L3位元遮罩的與所述L3預取指中的各L3預取指相對應的各個位。
- 如請求項4所述的微處理器,其中所述條件集合包括第一條件和第二條件,所述第一條件包括所述訪問位元遮罩中的設置位的閾值數量和最小訪問數量,所述第二條件包括所述L2填充佇列中已經被超過的閾值容量。
- 如請求項5所述的微處理器,其中基於所述第一條件,所述邊界框預取指單元暫停模式匹配。
- 如請求項6所述的微處理器,其中所述邊界框預取指單元基於後續的第二記憶體塊的最低或最高區域中的對所述第二記憶體塊的第一訪問來暫停針對所述第二記憶體塊的模式匹配。
- 如請求項5所述的微處理器,其中所述L3位元遮罩包括旨在針對所述L2快取記憶體但是基於所述L2填充佇列中已經被超過的所述閾值容量而被預取指到所述L3快取記憶體的預取指。
- 如請求項5所述的微處理器,其中所述多個暫存器還包括最大指針和最小指針,其中,在針對所述記憶體塊的所述最小指針和所述最大指標之間確定所述訪問位元遮罩中的設置位的所述閾值數量。
- 如請求項1所述的微處理器,其中所述L2填充佇列包括基於在L2標籤陣列中未命中的L2流水線預取指訪問和在所述L2標籤陣列中未命中的L2流水線需求請求訪問而分配的條目。
- 如請求項1所述的微處理器,其中,所述L2快取記憶體包括啟用所述L2預取指和所述L3預取指的位條目。
- 如請求項1所述的微處理器,其中在所述條件集合下,所述邊界框預取指單元繼續監視模式匹配。
- 一種在微處理器中實現的預取指方法,所述預取指方法包括: 基於條件集合發出記憶體塊的所有剩餘預取指作為L3預取指;以及 在到達所述記憶體塊的末尾時,針對與所述L3預取指相對應的快取記憶體行發出L2預取指。
- 如請求項13所述的預取指方法,其中發出所述L2預取指基於訪問方向在所述快取記憶體行中與最大指針或最小指針相對應的快取記憶體行處開始。
- 如請求項13所述的預取指方法,其中發出所有剩餘預取指包括將L2預取指轉換為L3預取指。
- 如請求項13所述的預取指方法,其中所述條件集合包括第一條件和第二條件,所述第一條件包括訪問位元遮罩中的設置位的閾值數量和最小訪問數量,所述第二條件包括L2填充佇列中已經被超過的閾值容量。
- 如請求項16所述的預取指方法,更包括基於所述第一條件暫停模式匹配。
- 如請求項17所述的預取指方法,更包括基於後續的第二記憶體塊的最低或最高區域中的對所述第二記憶體塊的第一訪問,暫停所述第二記憶體塊的模式匹配。
- 如請求項13所述的預取指方法,更包括在所述條件集合下監視模式匹配。
- 如請求項13所述的預取指方法,更包括基於所述L2快取記憶體中的位設置來啟用所述L2預取指和所述L3預取指。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/570,452 US11940921B2 (en) | 2022-01-07 | 2022-01-07 | Bounding box prefetcher |
US17/570,452 | 2022-01-07 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI805435B true TWI805435B (zh) | 2023-06-11 |
TW202328923A TW202328923A (zh) | 2023-07-16 |
Family
ID=83125588
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW111125355A TWI805435B (zh) | 2022-01-07 | 2022-07-06 | 預取指方法和微處理器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11940921B2 (zh) |
CN (1) | CN115033291A (zh) |
TW (1) | TWI805435B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI545435B (zh) * | 2012-03-20 | 2016-08-11 | 蘋果公司 | 於階層式快取處理器中之協調預取 |
US11003581B2 (en) * | 2018-07-19 | 2021-05-11 | Fujitsu Limited | Arithmetic processing device and arithmetic processing method of controlling prefetch of cache memory |
CN113760783A (zh) * | 2021-09-09 | 2021-12-07 | 海光信息技术股份有限公司 | 联合偏移预取方法、装置、计算设备和可读存储介质 |
CN113778520A (zh) * | 2021-09-09 | 2021-12-10 | 海光信息技术股份有限公司 | 偏移预取方法、执行偏移预取的装置、计算设备和介质 |
CN113892090A (zh) * | 2019-05-24 | 2022-01-04 | 德州仪器公司 | 多级高速缓存安全性 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8762649B2 (en) * | 2010-03-29 | 2014-06-24 | Via Technologies, Inc. | Bounding box prefetcher |
US20160041914A1 (en) * | 2014-08-05 | 2016-02-11 | Advanced Micro Devices, Inc. | Cache Bypassing Policy Based on Prefetch Streams |
US9558127B2 (en) * | 2014-09-09 | 2017-01-31 | Intel Corporation | Instruction and logic for a cache prefetcher and dataless fill buffer |
US20200301840A1 (en) * | 2019-03-20 | 2020-09-24 | Shanghai Zhaoxin Semiconductor Co., Ltd. | Prefetch apparatus and method using confidence metric for processor cache |
-
2022
- 2022-01-07 US US17/570,452 patent/US11940921B2/en active Active
- 2022-06-16 CN CN202210684087.3A patent/CN115033291A/zh active Pending
- 2022-07-06 TW TW111125355A patent/TWI805435B/zh active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI545435B (zh) * | 2012-03-20 | 2016-08-11 | 蘋果公司 | 於階層式快取處理器中之協調預取 |
US11003581B2 (en) * | 2018-07-19 | 2021-05-11 | Fujitsu Limited | Arithmetic processing device and arithmetic processing method of controlling prefetch of cache memory |
CN113892090A (zh) * | 2019-05-24 | 2022-01-04 | 德州仪器公司 | 多级高速缓存安全性 |
CN113760783A (zh) * | 2021-09-09 | 2021-12-07 | 海光信息技术股份有限公司 | 联合偏移预取方法、装置、计算设备和可读存储介质 |
CN113778520A (zh) * | 2021-09-09 | 2021-12-10 | 海光信息技术股份有限公司 | 偏移预取方法、执行偏移预取的装置、计算设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
TW202328923A (zh) | 2023-07-16 |
CN115033291A (zh) | 2022-09-09 |
US11940921B2 (en) | 2024-03-26 |
US20230222064A1 (en) | 2023-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101614867B1 (ko) | 데이터 스트림에 대한 저장 인식 프리페치 | |
US6766419B1 (en) | Optimization of cache evictions through software hints | |
US8621157B2 (en) | Cache prefetching from non-uniform memories | |
EP3129886B1 (en) | Dynamic cache replacement way selection based on address tag bits | |
CN110362506B (zh) | 高速缓存存储器及其中实现的方法 | |
EP3676713B1 (en) | Utilization-based throttling of hardware prefetchers | |
US20080133844A1 (en) | Method and apparatus for extending local caches in a multiprocessor system | |
US20080320228A1 (en) | Method and apparatus for efficient replacement algorithm for pre-fetcher oriented data cache | |
US9367466B2 (en) | Conditional prefetching | |
TWI793812B (zh) | 微處理器、快取記憶體存儲器系統及其中實現的方法 | |
CN114661357A (zh) | 用于在处理器中预取物理页的系统、装置和方法 | |
TW202219745A (zh) | 微處理器和預取指調整方法 | |
TWI805435B (zh) | 預取指方法和微處理器 | |
TW202311966A (zh) | 關鍵性通知之快取原則 | |
US12013784B2 (en) | Prefetch state cache (PSC) | |
KR20230069943A (ko) | 로컬리티가 결여된 데이터를 타겟으로 하는 메모리 요청의 프리페치 디스에이블 | |
TWI855437B (zh) | 用於多核處理器的方法和多核處理器 | |
US11775440B2 (en) | Producer prefetch filter | |
Lee et al. | Improving bandwidth utilization using eager writeback | |
Kumr et al. | An Overview of Hardware Based Cache Optimization Techniques | |
TW202331502A (zh) | 用於多核處理器的方法和多核處理器 | |
Mathew et al. | Low-Power L2 Cache Architecture for Multiprocessor System on Chip Design |