KR101817847B1 - 메모리 접근 타입에 기초한 통로에 의해 버짓화된 캐시 메모리 - Google Patents
메모리 접근 타입에 기초한 통로에 의해 버짓화된 캐시 메모리 Download PDFInfo
- Publication number
- KR101817847B1 KR101817847B1 KR1020157033019A KR20157033019A KR101817847B1 KR 101817847 B1 KR101817847 B1 KR 101817847B1 KR 1020157033019 A KR1020157033019 A KR 1020157033019A KR 20157033019 A KR20157033019 A KR 20157033019A KR 101817847 B1 KR101817847 B1 KR 101817847B1
- Authority
- KR
- South Korea
- Prior art keywords
- memory access
- mat
- memory
- processor
- mapping
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0873—Mapping of cache memory to specific storage devices or parts thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0864—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0895—Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0882—Page mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/123—Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/128—Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1021—Hit rate improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1028—Power efficiency
-
- 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)
Abstract
셋트 연관 캐시 메모리는, N개의 통로가 배치된 기억 요소로 이루어진 어레이; 및 캐시 메모리에서 미스하는 메모리 접근에 따라, 어레이의 기억 요소를 할당하는 할당 유닛을 구비하며, 메모리 접근은, 복수의 미리결정된 메모리 접근 타입(memory access type: MAT)의 연관된 MAT를 포함하고, MAT는 캐시 메모리에 의해 수신되고, 셋트 연관 캐시 메모리는, 복수의 미리결정된 MAT의 각각에 대해, MAT를 N개의 통로 중의 하나 이상의 통로의 서브셋트와 연관시키는 매핑을 구비하며, 할당 유닛은 메모리 접근의 각각에 대해, 매핑이 메모리 접근의 MAT와 연관시키는 하나 이상의 통로의 서브셋트의 통로를 할당하고, 매핑은 캐시 메모리의 동작 동안에 동적으로 갱신 가능하다.
Description
하나의 관점에서, 본 발명이 제공하는 셋트 연관 캐시 메모리는, N개의 통로가 배치된 기억 요소로 이루어진 어레이; 및 캐시 메모리에서 미스하는 메모리 접근에 따라, 어레이의 기억 요소를 할당하는 할당 유닛을 구비하며, 메모리 접근은, 복수의 미리결정된 메모리 접근 타입(memory access type: MAT)의 연관된 MAT를 포함하고, MAT는 캐시 메모리에 의해 수신되고, 셋트 연관 캐시 메모리는, 복수의 미리결정된 MAT의 각각에 대해, MAT를 N개의 통로 중의 하나 이상의 통로의 서브셋트와 연관시키는 매핑을 구비하며, 할당 유닛은 메모리 접근의 각각에 대해, 매핑이 메모리 접근의 MAT와 연관시키는 하나 이상의 통로의 서브셋트의 통로를 할당하고, 매핑은 캐시 메모리의 동작 동안에 동적으로 갱신 가능하다.
다른 관점에서, 본 발명은 N개의 통로가 배치된 셋트 연관 캐시 메모리를 포함하는 프로세서를 동작시키는 방법을 제공한다. 본 방법은, 복수의 미리결정된 메모리 접근 타입의 각각에 대하여, MAT를 캐시 메모리의 N개의 통로 중의 하나 이상의 통로의 서브셋트와 연관시키는 매핑을, 프로세서가 유지하는 단계; 연관된 MAT를 각각 갖는 메모리 접근을 캐시 메모리가 수신하는 단계; 메모리 접근의 각각에 대하여, 캐시 메모리에서의 메모리 접근의 미스에 따라, 매핑이 메모리 접근의 MAT와 연관하는 서브셋트의 통로를 할당하는 단계; 및 캐시 메모리의 동작 동안 매핑을 동적으로 갱신하는 단계를 포함한다.
또 다른 관점에서, 본 발명은 프로세서를 제공하며, 본 발명의 프로세서는, N개의 통로가 배치된 기억 요소로 이루어진 어레이를 구비하는 셋트 연관 캐시 메모리로서, 캐시 메모리에서 미스하는 메모리 접근에 따라, 캐시 메모리가 어레이의 기억 요소를 할당하며, 메모리 접근은, 복수의 미리결정된 메모리 접근 타입의 연관된 MAT를 포함하고, MAT는 캐시 메모리에 의해 수신되고, 프로세서는, 복수의 미리결정된 MAT의 각각에 대해, MAT를 N개의 통로 중의 하나 이상의 통로의 서브셋트와 연관시키는 매핑을 구비하며, 메모리 접근의 각각에 대해, 매핑이 메모리 접근의 MAT와 연관시키는 서브셋트의 통로를, 캐시 메모리가 할당하고, 매핑은 캐시 메모리의 동작 동안에 동적으로 갱신 가능하다.
도 1은 셋트 연관 캐시 메모리를 나타내는 블록도이다.
도 2는 도 1의 캐시 메모리(102)의 통로의 각각의 서브셋트에 대한 MAT의 매핑(108)이다.
도 3은 도 1의 캐시 메모리(102)의 일부를 더 상세하게 나타내는 블록도이다.
도 4는 도 1의 캐시 메모리(102)를 포함하는 프로세서의 동작을 나타내는 흐름도이다.
도 5는 도 1의 캐시 메모리(102)의 동작을 나타내는 흐름도이다.
도 6은 일실시예에 따른 도 5의 블록(504)의 동작을 나타내는 흐름도이다.
도 7은 도 1의 캐시 메모리(102)를 포함하는 프로세서를 구비하는 시스템의 동작을 나타내는 흐름도이다.
도 8은 도 1의 캐시 메모리(102)를 포함하는 프로세서의 요소를 나타내는 블록도이다.
도 9는 도 1의 캐시 메모리(102)를 포함하는 도 8의 프로세서의 동작을 나타내는 흐름도이다.
도 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)의 실시예를 나타내는 블록도이다.
도 22D는 이종의 치환 정책을 채택하는 도 19의 캐시 메모리(1902)의 실시예를 나타내는 블록도이다.
도 22E는 이종의 치환 정책을 채택하는 도 19의 캐시 메모리(1902)의 실시예를 나타내는 블록도이다.
도 23은 완전 연관 캐시 메모리(2302)를 나타내는 블록도이다.
도 24는 일실시예에 따른 도 23의 MAT의 각각의 임계값(2308)에 대한 MAT의 매핑이다.
도 25는 도 1의 캐시 메모리(102)의 일부를 보다 상세하게 나타내는 블록도이다.
도 26은 도 23의 캐시 메모리(2302)를 포함하는 프로세서의 연산을 나타내는 흐름도이다.
도 27은 도 23의 캐시 메모리(2302)의 동작을 나타내는 흐름도이다.
도 28은 도 23의 완전 연관 캐시 메모리(2302)의 동작을 나타내는 흐름도이다.
도 29는 일실시예에 따른, MAT 그룹(2909)에 대한 MAT의 매핑(2908)과 임계값(2911)에 대한 MAT 그룹(2909)의 매핑을 나타내는 블록도이다.
도 30은 도 23의 캐시 메모리(2302)의 동작을 나타내는 흐름도이다.
도 31은 셋트 연관 캐시 메모리(3102)를 나타내는 블록도이다.
도 32는 일실시예에 따른 도 31의 MAT의 각각의 우선순위(3108)에 대한 MAT의 매핑이다.
도 33은 캐시 라인의 MAT를 고려한 캐시 라인 치환 정책을 나타내는 흐름도이다.
도 34는 프로그램 및 프로그램 위상에 대한 매핑의 생성을 나타내는 흐름도이다.
도 35는 메모리 접근 그래프 및 그래프로부터 추출한 데이터이다.
도 36은 프로그램의 위상 분석을 나타내는 흐름도이다.
도 37은 캐시 메모리 또는 프리페처 등의 프로세서의 설정 가능한 특성에 대한 양호한 설정 또는 매핑을 판단하는 브루트 포스 방법(brute force method)을 나타내는 흐름도다.
도 38은 분석 결과를 나타내는 파이 차트(3801)이다.
도 39는 프로세서(3900)를 나타내는 블록도이다.
도 2는 도 1의 캐시 메모리(102)의 통로의 각각의 서브셋트에 대한 MAT의 매핑(108)이다.
도 3은 도 1의 캐시 메모리(102)의 일부를 더 상세하게 나타내는 블록도이다.
도 4는 도 1의 캐시 메모리(102)를 포함하는 프로세서의 동작을 나타내는 흐름도이다.
도 5는 도 1의 캐시 메모리(102)의 동작을 나타내는 흐름도이다.
도 6은 일실시예에 따른 도 5의 블록(504)의 동작을 나타내는 흐름도이다.
도 7은 도 1의 캐시 메모리(102)를 포함하는 프로세서를 구비하는 시스템의 동작을 나타내는 흐름도이다.
도 8은 도 1의 캐시 메모리(102)를 포함하는 프로세서의 요소를 나타내는 블록도이다.
도 9는 도 1의 캐시 메모리(102)를 포함하는 도 8의 프로세서의 동작을 나타내는 흐름도이다.
도 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)의 실시예를 나타내는 블록도이다.
도 22D는 이종의 치환 정책을 채택하는 도 19의 캐시 메모리(1902)의 실시예를 나타내는 블록도이다.
도 22E는 이종의 치환 정책을 채택하는 도 19의 캐시 메모리(1902)의 실시예를 나타내는 블록도이다.
도 23은 완전 연관 캐시 메모리(2302)를 나타내는 블록도이다.
도 24는 일실시예에 따른 도 23의 MAT의 각각의 임계값(2308)에 대한 MAT의 매핑이다.
도 25는 도 1의 캐시 메모리(102)의 일부를 보다 상세하게 나타내는 블록도이다.
도 26은 도 23의 캐시 메모리(2302)를 포함하는 프로세서의 연산을 나타내는 흐름도이다.
도 27은 도 23의 캐시 메모리(2302)의 동작을 나타내는 흐름도이다.
도 28은 도 23의 완전 연관 캐시 메모리(2302)의 동작을 나타내는 흐름도이다.
도 29는 일실시예에 따른, MAT 그룹(2909)에 대한 MAT의 매핑(2908)과 임계값(2911)에 대한 MAT 그룹(2909)의 매핑을 나타내는 블록도이다.
도 30은 도 23의 캐시 메모리(2302)의 동작을 나타내는 흐름도이다.
도 31은 셋트 연관 캐시 메모리(3102)를 나타내는 블록도이다.
도 32는 일실시예에 따른 도 31의 MAT의 각각의 우선순위(3108)에 대한 MAT의 매핑이다.
도 33은 캐시 라인의 MAT를 고려한 캐시 라인 치환 정책을 나타내는 흐름도이다.
도 34는 프로그램 및 프로그램 위상에 대한 매핑의 생성을 나타내는 흐름도이다.
도 35는 메모리 접근 그래프 및 그래프로부터 추출한 데이터이다.
도 36은 프로그램의 위상 분석을 나타내는 흐름도이다.
도 37은 캐시 메모리 또는 프리페처 등의 프로세서의 설정 가능한 특성에 대한 양호한 설정 또는 매핑을 판단하는 브루트 포스 방법(brute force method)을 나타내는 흐름도다.
도 38은 분석 결과를 나타내는 파이 차트(3801)이다.
도 39는 프로세서(3900)를 나타내는 블록도이다.
도 1을 참조하면, 셋트 연관 방식의 캐시 메모리(102)를 예시하는 블록도가 도시되어 있다. 캐시 메모리(102)는 기억 요소(112)로 이루어진 어레이(104)를 포함한다. 어레이(104)에는 복수개의 통로가 배치되어 있다. 도 1에 나타낸 예에서, 어레이(104)는 0 통로부터 15 통로의 16개의 통로로 이루어져 있다. 어레이(104)에는 또한 복수개의 셋트가 배치되어 있다. 캐시 메모리(102)는 메모리 접근(122)을 수신한다. 메모리 접근(122)은 메모리 어드레스 및 메모리 접근 타입(memory access type: MAT)(101)을 포함한다. 캐시 메모리(102)는 이하의 도 39와 관련해서 설명된 프로세서(3900) 등의 프로세서 내에 포함된다.
메모리 접근 타입(MAT)은 메모리 접근의 생성에 관한 명령어의 특징, 메모리 접근을 생성한 프로세서의 기능 유닛의 타입, 메모리 접근이 생성될 때의 프로세서의 동작 모드, 또는 메모리 접근에 의해 접근되는 데이터 타입으로부터 유래한 메모리 접근의 특징이다.
명령어에 의해 특정된 동작은, 예를 들어, 명령어의 특징이다. 로드 유닛, 기억 유닛, 정수 유닛, 부동소수점 유닛, 미디어 유닛, 테이블워크 엔진(tablewalk engine), 명령어 페치 유닛, 및 하드웨어 프리페처 (예컨대, 명령어 프리페처, 스트림 프리페처, 박스 프리페처, L1D 프리페처)는, 예를 들어, 명령어의 기능 유닛의 타입들이다. 슈퍼바이저 모드 (즉, 권한 모드 또는 x86 ring 0), 시스템 관리 모드 (예컨대, x86 시스템 관리 모드(SSM)), 보호 모드 (예컨대, x86 리얼 모드, 가상 x86 모드, 보호 모드, 롱 모드), 및 가상 머신 모드 (예컨대, x86 가상 머신 확장(VMS))는, 예를 들어, 프로세서의 동작 모드이다. 코드, 기술자 테이블 (예컨대, x86 명령어 셋트 아키텍쳐 글로벌 기술자 테이블 (GDT) 및 인터럽트 기술자 테이블 (IDT)), 페이지 테이블, 시스템 관리 모드 (예컨대, x86 SMM) 상태 보존 공간, 가상 머신 모드 (예컨대, x86 VMX) 상태 보존 공간, 스택, 압축 데이터, 상수, 부동소수점, 암호 키, 암호 페이로드, 및 연계된 리스트는, 예를 들어, 접근되는 데이터의 타입이다.
명령어 페치 유닛에 의해 생성되는 메모리 접근을 코드 페치(code fetch)라고도 하며, 하드웨어 명령어 프리페처에 의해 생성되는 메모리 접근을 코드 프리페치라고도 한다.
메모리 접근 타입(MAT) | 설명 |
Boxpf | 프로세서의 바운딩 박스 하드웨어 프리페처에 의해 생성되는 로드 |
fp_load | 부동소수점 명령어에 의해 생성되는 로드 |
fp_store | 부동소수점 명령어에 의해 생성되는 저장 |
fused_fp_store | 부동소수점 명령어가 변환되는 융합된 마이크로명령어에 의해 생성되는 저장 |
fused_load | 로드 명령어가 변환되는 융합된 마이크로명령어에 의해 생성되는 로드 |
fused_store | 저장 명령어가 변환되는 융합된 마이크로명령어에 의해 생성되는 저장 |
fused_store_aps | 미디어 명령어가 변환되는 융합된 마이크로명령어에 의해 생성되는 로드 |
fused_store_update | 어드레스(예를 들어, x86 PUSH 또는 POP에 내포된 스택 포인터 레지스터 또는 x86 REP MOVS에 내포된 스트링 어드레스 레지스터 내의)를 수정하는 명령어가 변환되는 융합된 마이크로명령어에 의해 생성되는 저장 |
gpf | 보장된 프리페치 명령어에 의해 생성되는 로드 |
l1dpf | 프로세서의 L1 데이터 캐시 하드웨어 프리페처에 의해 생성되는 로드 |
load | 로드(기본) |
load_aps | 미디어 명령어에 의해 생성되는 로드 |
load_descr | 기술자(예를 들어, x86 ISA 기술자)의 로드 |
load_nac | 정렬 체크(예를 들어, x86 #AC 예외를 발생시키지 않음)를 수행하지 않는 로드 |
load_nt | 비일시적 데이터의 로드 |
load_store | 로드 및 저장 |
load_supervisor | 슈퍼바이저 특권 레벨에서 명령어에 의해 생성되는 로드 |
load_zx | 제로 확장 명령어(예를 들어, x86 MOVZX) |
pf_l1d | 소프트웨어 프리페치 명령어(예컨대, x86 PREFETCHT0/T1)에 의해 생성되는 L1 데이터 캐시에 로드 |
pf_l2 | 소프트웨어 프리페치 명령어(예컨대, x86 PREFETCHT2)에 의해 생성되는 L2 데이터 캐시에 로드 |
pf_nt | 소프트웨어 프리페치 명령어(예컨대, x86 PREFETCHNTA)에 의해 생성되는 비일시적 캐시에 로드 |
pf_w | 소프트웨어 프리페치 명령어(예컨대, x86 PREFETCHW)에 의해 생성되는 쓰기의 예상에서의 캐시에 로드 |
store | 기억(기본) |
store_aps | 미디어 명령어에 의해 생성되는 저장 |
store_mask | 마스크된 이동 명령어(예컨대, x86 MASKMOVQ)에 의해 생성되는 비일시적 데이터의 저장 |
store_nt | 비일시적 데이터의 저장 |
store_nt_aps | 미디어 명령어에 의해 생성되는 비일시적 데이터의 저장 |
store_push | 메모리의 스택에 데이터를 저장하는 푸시 명령어(예컨대, x86 PUSH)에 의해 생성되는 저장(예컨대, x86 스택 포인터 레지스터 값에 의해 특정됨) |
store_supervisor | 슈퍼바이저 특권 레벨에서의 명령어에 의해 생성되는 저장 |
store_update | 어드레스((스택 포인터 레지스터 또는 스트링 어드레스 레지스터 내)를 수정하는 명령어에 의해 생성되는 저장 |
store_update_nac | 어드레스(예컨대, 스택 어드레스 또는 스트링 어드레스)를 수정하고 정렬 체크(예를 들어, x86 #AC 예외를 발생시키지 않음)를 수행하지 않는 명령어에 의해 생성되는 저장 |
tablewalk | 프로세서의 하드웨어 테이블워크에 의해 생성되는 로드 또는 저장 |
일실시예에서, 명령어는 구조적 명령어(예컨대, x86 명령어 셋트 아키텍쳐명령어)를 마이크로 명령어로 변환하는 프로세서의 명령어 변환기에 의해 생성되는 마이크로 명령어를 포함한다.
메모리 접근(122) 메모리 어드레스의 일부인 인덱스는 셋트 중의 하나를 선택한다. 셋트의 각각은, 할당 유닛(106)에 제공된 히트 신호(124) 상에서의 거짓 값으로 나타낸 바와 같이, 메모리 접근(122)가 캐시 메모리(102) 내에서 미스한 경우에, 선택된 셋트 중의 어느 통로가 치환되는지 또는 어느 통로가 할당되는지를 판단하는 할당 유닛(106)에 의해 사용되는, 치환 정보(114), 치환 정책 비트(114), 또는 치환 비트(114)를 유지하는 기억장소를 포함한다. 할당 유닛(106)은 치환 통로 인디케이터(116)에서의 치환 방법을 나타낸다. 다른 실시예의 경우, 치환 비트(114)는 다른 수의 비트가 될 수 있으며, 다른 정보를 나타낼 수 있다. 예를 들어, 일실시예에서, 치환 비트(114)는 셋트의 의사-최근최소사용(pLRU: pseudo-least recently used) 통로를 나타내는 15개의 비트이다. 다른 실시예에서, 치환 비트(114)는 셋트의 통로 중의 하나가 최근에 치환된 것을 나타내는 원핫 벡터(one-hot vector)인 16개의 비트이며, 이것은 라운드 로빈(round-robin) 치환 정책이나 치환 방식에 의해 사용될 수 있다. 다른 실시예에서, 치환 비트(114)는 셋트의 참(true) LRU 통로를 나타낸다. 다른 실시예에서, 치환 비트(114)는 코어(멀티코어 프로세서 내)가 치환 비트(114)를 갱신할 때의 캐시 라인을 소유하는 것을 추가로 고려한 변형된 pLRU 치환 방식에 사용된다. 다른 실시예에서, 치환 비트(114)는 치환 비트(114)를 갱신할 때, 예를 들어, MAT(101)가, 예를 들어, 오프라인 분석을 통해, 필요성이 작을 가능성이 있는 것으로 알려진 것이면, 메모리 접근(122)의 MAT(101)를 추가로 고려하는 변형된 pLRU 치환 방식에서 사용되며, 이 치환 방식은, 치환된 통로가 최근최소사용의 위치가 아닌 어느 정도 중간에서 삽입되도록 치환 비트(114)를 갱신한다.
어레이(104)의 각각의 기억요소(112)는 데이터의 캐시 라인, 캐시 라인의 태그, 및 캐리 라인의 상태, 예를 들어, MESI 상태를 유지한다. 각각의 셋트는 해당 셋트의 각각의 통로(예컨대, 16개의 통로)를 위한 기억 요소(112)를 포함한다. 일실시예에서, 캐시 라인은 64바이트의 데이터이지만, 다른 실시예도 가능하다. 앞서 언급한 바와 같이, 각각의 셋트는 치환 비트(114)를 포함한다. 일실시예에서, 어레이(104)는 데이터의 캐시 라인, 태그, 상태, 및 치환 비트(114)를 유지하는 단일의 어레이이다. 다른 실시예에서, 어레이(104)는 2개의 어레이로서, 그중 하나는 데이터의 캐시 라인을 유지하는 어레이(데이터 어레이)이며, 다른 어레이는 태그, 상태, 및 치환 비트(114)를 유지하는 어레이(태그 어레이)이다. 다른 실시예에서, 또 다른 어레이는 태그 어레이가 아닌 치환 비트(114)를 유지하는 어레이(치환 어레이)이다.
일실시예에서, 할당 유닛(106)은 캐시 메모리(102)의 하나 이상의 태그 파이프라인의 일부이다. 태그 파이프라인은 메모리 접근을, 예를 들어, 처리 코어로부터(예컨대, 처리 코어의 메모리 서브시스템, 예를 들어, 로드/스토어 큐 또는 비밀 캐시 메모리로부터) 수신하고, 어레이(104)에 접근하여, 메모리를 접근한다. 예를 들어, 어레이(104)로부터 데이터를 판독하거나 어레이(104)에 데이터를 기록할 수 있다. 바람직하게는, 태그 파이프라인은, 각 단계가 메모리 접근의 서브동작, 예를 들어, 특정된 셋트 및 통로를 가진 엔트리의 무효화, 어드레스 상태에 대한 쿼리 태그 어레이, 어드레스가 존재하지 않은 경우에 선택된 셋트의 치환 비트에 기초하여 어느 통로가 할당되는지에 대한 판단, 특정된 셋트 및 통로 상태의 갱신, 어드레스가 존재하는 경우에 데이터 어레이로부터 데이터를 판독하라는 요청의 생성, 어드레스가 존재하는 경우에 데이터 어레이에 데이터를 기록하라는 요청의 생성 등을 수행하는, 프로세서의 파이프라인 단계와 유사한, 단계의 파이프라인이다. 서브동작이 모여 메모리 접근의 전체 동작을 이룬다. 바람직하게는, 여러 단계로 이루어진 파이프라인을 구비함으로써, 할당 유닛(106)은 일련의 서브동작을 수행하여, 필요한 경우, 본 명세서에 개시된 바와 같은, 상대적으로 복잡한 치환 방식을 달성할 수 있다. 파이프라인의 후속하는 단계의 결과를 이전 단계로 다시 전달하는 포워딩 네트워크가 포함되는 것이 바람직하다.
캐시 메모리(102)는 또한 메모리 접근(122)가 캐시 메모리(102) 내에서 미스한 경우에 선택된 셋트 중의 어느 통로가 할당되는지를 판단하는 데에 사용되는 할당 유닛(106)에 제공되는, MAT의 통로 서브셋트에의 매핑(108)을 포함한다. 일반적으로, 할당 유닛(106)은 캐시 메모리(102)의 무효 통로의 할당을 시도한다. 하지만, 이러한 할당은 유효한 통로를 치환하여야 하고 따라서 "치환"이라고도 한다. 구체적으로 말하면, 복수의 MAT의 각각에 대하여, 매핑(106)은 MAT를 어레이(104)의 통로의 서브셋트와 연관시킨다. 서브셋트는 MAT마다 상이해도 되지만, MAT 중에는 동일한 서브셋트와 연관된 것도 있다. 메모리 접근(122)가 캐시 메모리(102) 내에서 미스하는 경우, 할당 유닛(106)은 메모리 접근(122)의 MAT(101)와 연관된 통로의 서브셋트를 할당한다. 이에 의해, 바람직하게는, 캐시 메모리(102)가 더 효율적으로 되는데, 예를 들면, 할당을 행한 메모리 접근의 MAT를 고려하지 않고 최근최소사용(LRU) 통로를 할당하는 종래의 캐시 메모리보다, 히트율이 높아진다. 특히, 매핑(108)은 필요 가능성이 많은 캐시 라인이 아닌 필요 가능성이 적은 캐시 라인을 치환할 가능성이 높도록 조정될 수 있다. 일실시예에서, 바람직하게는, 매핑(108)은 MAT(101)를 갖는 메모리 접근(122)가 캐시 메모리(102)에서 미스한 경우에 할당 유닛(106)이 MAT(101)와 연관된 서브셋트 내에 있는 선택된 셋트의 통로만을 할당하도록, 특히 관련된 프로그램 또는 프로그램 위상의 오프라인 분석을 수행하고, 각각의 MAT와 연관된 캐시 메모리(102)의 통로의 서브셋트 또는 "버짓"을 판단하는 것에 의해, 캐시 메모리(102)의 효율을 증가시키도록 조정될 수 있다. 매핑(108)은 갱신 입력(126)을 통해 갱신될 수 있다.
캐시 메모리의 수많은 실시예를, 도 10, 11, 14, 15, 17, 19, 23, 및 25를 참조하여 본 명세서에서 개시하고 있다. 설명의 중복을 피하기 위해, 이들 캐시 메모리는 도 1의 캐시 메모리(102)와 많은 점에서 유사하므로, 도 1의 캐시 메모리(102)와의 차이점에 대해서는 다른 실시예에서 설명한다. 마찬가지로, 다른 실시예의 캐시 메모리를 포함하는 프로세서는 도 1의 캐시 메모리(102)를 포함하는 프로세서에 대한 설명과 유사하다.
바람직하게는, 캐시 메모리(102)를 포함하는 프로세서는 캐시 메모리(102)를 공유하는 코어를 포함하는 멀티코어 프로세서이다. 그러나, 싱글코어 실시예도 고려될 수 있다. 추가로, 캐시 메모리(102)는 프로세서의 임의의 레벨의 캐시 계층이 가능하다. 그러나 캐시 메모리(102)는 프로세서의 최종레벨 캐시(last-level cache: LLC)인 것이 바람직하다. 프로세서는 명령어를 해독하는 명령어 디코더에 명령어를 제공하고 명령어 실행을 위한 실행 유닛에 디스패치하는 명령어 디스패처에 해독된 명령어를 제공하는 명령어 캐시를 포함하는 것이 바람직하다. 프로세서의 마이크로구조는 슈퍼스칼라이며 비순차적인 실행인 것이 바람직하지만, 다른 실시예도 가능하다. 즉, 명령어 디스패처는 복수의 실행 유닛에 명령어의 디스패치를 슈퍼스칼라 비순차 방식으로 스케줄링하기 위한 명령어 스케줄러를 포함할 수 있다. 프로세서는 프로세서의 구조적 상태를 유지하는 구조적 레지스터뿐만 아니라 비-아키텍쳐 레지스터를 포함하는 것이 바람직하다. 프로세서는 레지스터 재명명을 수행하는 데에 사용되는 레지스터 변경 테이블(register alias table: RAT)과, 명령어를 프로그램 순서로 되돌리기 위해 사용되는 리오더 버퍼(reorder buffer: ROB)를 포함하는 것이 바람직하다. 명령어 디스패처는, 구조적 명령어를, 실행 유닛에 의해 실행 가능한 프로세서의 마이크로명령어 셋트 구조의 마이크로명령어로 변환하는 명령어 변환기를 포함하는 것이 바람직하다. 프로세서는 메모리 오퍼랜드를 실행 유닛에 제공하고, 메모리 오퍼랜드를 실행 유닛으로부터 수신하는 메모리 서브시스템을 포함한다. 메모리 서브시스템은 하나 이상의 로드 유닛, 하나 이상의 스토어 유닛, 로드 큐, 스토어 큐, 메모리로부터 캐시 라인을 요청하는 필 큐(fill queue), 프로세서가 통신을 행하는 메모리 버스의 스누핑에 관련된 스누프 큐, 및 그 외 관련된 기능 유닛을 포함하는 것이 바람직하다. 메모리 서브시스템 의해, 캐시 메모리(102)의 메모리 접근(122)이 이루어진다.
도 2를 참조하면, 일실시예에 따른 도 1의 캐시 메모리(102)의 통로의 각각의 서브셋트에 대한 MAT의 매핑(108)이 도시되어 있다. 도 2의 예로 든 매핑(108)은, 설명을 위한, [표 1]에 대응하는 32개의 MAT를 포함한다. 도 2에 나타낸 예의 매핑(108)은 [표 2]에서 이하와 같이 재현된다.
인덱스 | 메모리 접근 타입 (MAT) | 통로의 서브셋트 |
0 | boxpf | 15 |
1 | fp_load | 0-8 |
2 | fp_store | 0-8 |
3 | fused_fp_store | 0-8 |
4 | fused_load | 0-12 |
5 | fused_store | 0-12 |
6 | fused_store_aps | 6-10 |
7 | fused_store_update | 0-3 |
8 | gpf | 15 |
9 | l1dpf | 14 |
10 | load | 0-15 |
11 | load_aps | 6-10 |
12 | load_descr | 15 |
13 | load_nac | 1, 2, 4 |
14 | load_nt | 0, 4, 8 |
15 | load_store | 6-12 |
16 | load_supervisor | 5 |
17 | load_zx | 7 |
18 | pf_l1d | 13 |
19 | pf_l2 | 12 |
20 | pf_nt | 11 |
21 | pf_w | 10 |
22 | store | 0-15 |
23 | store_aps | 6-10 |
24 | store_mask | 9 |
25 | store_nt | 0, 4, 8 |
26 | store_nt_aps | 6-10 |
27 | store_push | 15 |
28 | store_supervisor | 5 |
29 | store_update | 0-3 |
30 | store_update_nac | 3 |
31 | tablewalk | 15 |
도 2를 예로 들면, store_nt의 MAT(101)를 가진 메모리 접근(122)가 캐시 메모리(102)에서 미스하는 경우, 할당 유닛(106)은 선택된 셋트의 통로 0, 4 또는 8만을 할당, 즉 매핑(108)이 store_nt MAT와 연관하는 서브셋트의 통로만을 할당한다. 다른 예를 들면, load_descr의 MAT(101)을 가진 메모리 접근(122)가 캐시 메모리(102)에서 미스하는 경우, 할당 유닛(106)은 선택된 셋트의 통로 15를 할당, 즉 매핑(108)이 load_descr MAT와 연관하는 서브셋트의 통로만 할당한다.
일실시예에서, 매핑(108)은 16비트 벡터로 이루어진 어레이를 포함한다. 벡터의 각각의 비트는 캐시 메모리(102)의 16개의 통로의 각각의 통로에 대응하지만, 바람직하게는, 각각의 통로가 서브셋트에 포함되면 비트는 1이 되고, 각각의 통로가 서브셋트로부터 제외되면 비트는 0이 된다. 어레이는 각각의 MAT에 대해 하나씩 32개의 벡터를 포함하며, MAT 번호로 색인된다. 그러나 매핑(108)이 도 3 및 도 6에서 설명하는 다른 실시예와 같은, 다른 형태로 구현되는 다른 실시예도 가능하다.
도 2(표 2)는 특정 셋트의 MAT와 이들 각각의 통로의 서브셋트에 대한 MAT의 특정의 매핑에 대하여 설명하고 있지만, 다른 실시예에서는 다른 셋트의 MAT와 서브셋트의 다른 MAT의 다른 매핑도 가능한 실시예도 가능하다. 일실시예에서, 매핑이, 도 7 내지 9를 참조하여 이하에 설명하는 바와 같이, 어느 프로그램 또는 프로그램 위상이 현재 실행되고 있는지에 기초한 프로세서의 동작 동안, 동적으로(예컨대, 도 1의 갱신 입력(126)을 통해) 갱신된다.
도 3을 참조하면, 도 1의 캐시 메모리(102)의 일부를 나타내는 블록도에 대해 보다 구체적으로 예시하고 있다. 도 3의 일실시예에서, 도 1의 매핑(108)은 벡터(304)를 32개의 MAT마다 포함한다. 다중화기(mux)(302)는 32개의 벡터(304)를 수신하고, 이들 중 하나를 메모리 접근(122)의 MAT 인디케이터(101)의 값에 기초해서 선택하며, 선택된 벡터(304)는 도 1의 할당 유닛(106)에 제공된다. 할당 유닛(106)은 또한 선택된 셋트, 즉 메모리 접근(122) 메모리 어드레스의 인덱스에 의해 선택된 캐시 메모리(102)의 셋트의 도 1의 치환 비트(114)를 수신한다. 선택된 벡터(304)와 치환 비트(114)에 기초하여, 할당 유닛(106)은 도 1의 치환 통로(116)를 생성한다. 또한, 할당 유닛(106)은 치환 통로(116)의 값에 기초하여 치환 비트(114)를 갱신한다. 예를 들어, 일실시예에서, 치환 비트(114)는 선택된 셋트의 통로의 의사-최근최소사용 통로를 나타내는 의사-LRU 벡터이다. 다른 예로서, 치환 비트(114)는 참 LRU 벡터 또는 라운드 로빈 벡터이다.
일실시예에서, 벡터(304)는 캐시 메모리(102)의 통로, 예를 들면 16개의 통로 각각에 해당하는 비트를 포함하는 비트 벡터이다. 참 비트는 각각의 통로가 연관된 MAT의 서브셋트 내에 포함되는 것을 나타내며, 거짓 비트는 각각의 통로가 서브셋트로부터 제외된 것을 나타낸다. 다른 예로서, 벡터(304)는, 도 6과 관련해서 이하에 설명하는 바와 같이, 불 대수(Boolean)가 pLRU 벡터인 치환 비트(114)에 대해 작용하는 한 쌍의 마스크를 포함한다.
다른 실시예에서, 캐시 메모리(102)는 다수(예를 들어, 32개)의 MAT를 더 적은 수의 MAT 그룹(예를 들어, 4개)으로 매핑하는 로직을 포함해도 된다. 예를 들어, 도 3의 실시예에서, MAT 그룹화 로직(도시 안됨)은 MAT(101)를 수신하고, 선택 입력으로서 제공되는 MAT 그룹 번호를, 다중화기(302)(MAT(101)가 아닌)에 출력한다. MAT 그룹화 로직은 32개의 MAT의 각각을 4개의 MAT 그룹 중의 하나에 매핑한다. MAT 그룹화 로직은 매핑(108)과 함께 갱신 가능하다. 매핑(108)은 4개(32개가 아닌)의 벡터(304)만을 포함하며, 다중화기(302)는 4개의 벡터(304) 중의 하나를 선택해서 할당 유닛에 제공한다. 이 실시예는 하드웨어 비용을 절감한다는 점에서 바람직할 수 있다. MAT 분해 정도(granularity)가 감소하는 대신, 특히 메모리 접근 특성이 다양한 MAT에 대해 함께 그룹화되는 경향을 갖는 프로그램에 대한 효율이 허용가능한 수준이 될 수 있다. MAT 그룹화 로직은 요구되는 하드웨어의 수를 감소시키기 위해 본 명세서에 개시된 다양한 실시예에서 채택될 수 있으며, 상기 설명한 감소는 도 10 내지 도 22의 실시예에서와 같이, 그룹을 포함하는 실시예에서 크게 증가될 수 있고, MAT 그룹에 MAT를 매핑하는 실시예에 대해서는 도 29 및 도 30에서 설명한다.
도 4를 참조하면, 도 1의 캐시 메모리(102)를 포함하는 프로세서의 동작을 나타내는 흐름도가 도시되어 있다. 처리 과정은 블록(402)부터 시작한다.
블록(402)에서, 프로세서는 복수의 MAT의 각각의 MAT(예컨대, 표 1의 MAT)를 캐시 메모리(102)의 통로의 서브셋트에 연관시키는 매핑(예컨대, 도 2 및 표 2의 매핑)을 수신한다. 캐시 메모리(102)는 디폴트 매핑(108)으로 제조되는 것이 바람직하다. 디폴트 매핑(108)은 복수의 프로그램, 또는 적어도 특별히 관련된 것으로 간주되는 프로그램의 집단 및/또는 캐시 메모리(102)를 포함하는 프로세서에서 실행될 가능성이 있는 캐시 메모리(102)의 효율적인 동작을 용이하게 하도록 조정된다. 처리 과정은 블록(404)으로 진행한다.
블록(404)에서, 프로세서는 블록(402)에서 수신한 매핑에 의해 캐시 메모리(102)의 매핑(108)을, 도 1의 갱신 입력(126)을 통해 갱신한다. 매핑(108)은 시스템 초기화 및/또는 운영체제를 부팅할 때에 시스템 소프트웨어(예컨대, BIOS 또는 운영체제)에 의해 갱신되는 것이 바람직하다. 또한, 매핑(108)은, 도 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)은 치환 통로(116)를 판단하고, 현재의 치환 비트(114)와 메모리 접근(122)의 MAT(101)에 기초하여 치환 비트(114)의 신규 값을 생성한다. 일실시예에서, 할당 유닛(106)은 치환 통로(116)를 판단하고, 예를 들어, MAT(101)에 의해 선택된 벡터(304)를 이용하여, 상기 도 3의 실시예에 대하여 설명한 바와 같은 치환 비트(114)의 신규 값을 생성한다. 일실시예에서, 치환 비트(114)는 pLRU 벡터이며, 벡터(304)는 pLRU 벡터(114)와 불 대수 논리곱 연산되어 제1 결과를 생성하는 제1 부분(AND_MASK)과, 제1 결과와 불 대수 논리합 연산되어 제2 결과를 생성하는 제2 부분(OR_MASK)을 포함한다. 제2 결과는 치환 통로(116)를 판단하고 pLRU 벡터(114)를 갱신하는 신규 값을 생성하는 데에 사용된다. AND_MASK 및 OR_MASK의 사용에 대해서는, 블록(606)을 설명한 후에, 보다 상세하게 설명한다. 처리 과정은 블록(604)으로 진행한다.
블록(604)에서, 캐시 메모리(102)는 블록(602)에서 할당 유닛(106)에 의해 지시되는 치환 통로(116)를 할당한다. 처리 과정은 블록(606)으로 진행한다.
블록(606)에서, 캐시 메모리(102)는 치환 비트(114)를 블록(602)에서 생성된 신규 값으로 갱신한다. 처리 과정은 블록(606)에서 종료한다.
일실시예에서, 16-통로 실시시예에 대한 pLRU 방식은, 셋트당 15개의 pLRU 치환 비트(114), 치환 비트(114)로부터 LRU 통로를 해독하는 로직, 신규의 할당에 대해 치환 비트(114)를 갱신하는 로직, 및 히트하는 메모리 접근(122)에 대해 치환 비트(114)를 갱신하는 로직을 포함한다. 할당은 캐시 히트와는 시맨틱의 관점에서 상이하지만, 할당 갱신 로직은 히트 통로로서 공급되는 LRU 통로를 가진 히트 로직인 것이 효과적이다.
치환 비트(114)는 이진 트리를 필수적으로 기술하는 15-비트 벡터이다. 이러한 이진 트리는 각각의 비트가 내부 노드(4개 레벨의 노드를 완전히 특정)이며, 각각의 리프(leaf)는 통로이다. 예를 들어, 비트가 A에서 O까지 레이블화되어 있다면, pLRU 트리는 다음과 같이 정의할 수 있다.
pLRU 벡터로부터 LRU 통로를 판단하는 로직은 노드 비트 A-0에 의해 특정된 방향으로 pLRU 트리를 이동한다. 루트 노드 A부터 시작하는 노드 비트 A-O의 값은 항상 LRU의 "방향"을 가리키며, 여기서 0은 "좌측 방향"을 의미하고, 1은 "우측 방향"을 의미한다. 예를 들어, 아래와 같은 경우에,
ABCDEFGHIJKLMNO
000000010000000
LRU 통로는 01(A=0, B=0, D=0, H=1)이다.
특히, 이러한 경우에, LRU 통로는 A, B, C, 및 D의 4개의 노드 비트에 의해서만 정해진다. 그 외의 노드들은 그 상태를 유지하며, 유용한 정보를 기억하고는 있지만, 이들은 000000010000000인 경우에서의 LRU 판단에 기여하지는 않는다.
pLRU 어레이가 히트 또는 할당 때문에 갱신될 필요가 있는 경우, pLRU 비트의 다음 상태가 현재 상태와 특정된 통로의 함수로서 계산된다. 갱신은 2단계의 과정이다. 첫 번째 단계로서, 최근최대사용(MRU)) 위치로 승급되어 있는 통로로 지시하는 pLRU 노드 비트 A-O의 4개의 노드 비트 {a,b,c,d}를 결정한다. 두 번째 단계로서, pLRU 노드 비트 A-O에서의 노드 비트 X마다, X가 {a,b,c,d}에 있으면, 이 노드 비트는 해당 통로로부터 멀어지는 방향을 향하도록 갱신된다.
예를 들어, 이전 경우에서, 통로 05에서 히트하는 로드는, 4개의 노드 비트의 각각이 통로 05의 반대 방향으로 향하도록 노드 {A=>1, B=>0, E=>1, J=>0}를 갱신한다.
블록(602)에서 언급한 바와 같이, 벡터(304)의 제1 부분(AND_MASK) 및 제2 부분(OR_MASK)의 2개의 부분의 사용에 대하여 이하 더 상세하게 설명한다. 할당하고자 하는 통로의 서브셋트가 통로 {0,5,6,7}이라고 가정한다. 먼저, 통로 서브셋트는, 이하에 나타내는 바와 같이, 트리 도표에 기초하여 AND_MASK 및 OR_MASK로 변환된다.
ABCDEFGHIJKLMNO
AND_MASK = 01-01--0-11----
OR_MASK = 00-00--0-10----
대시 기호는 마스크가 이들을 제거하기 때문에 "돈케어"(don't care)인 비트 위치를 나타낸다. 예를 들어, 노드 비트 C는 AND_MASK의 노드 비트 A가 0이기 때문에 돈케어이며, 이것은 좌측 분기가 LRU를 판단하는 것에 항상 추종되는 것을 의미한다.
히트 또는 할당에서의 LRU의 갱신은 통상적인 pLRU의 경우에서와 동일하게 수행된다. 그러나 pLRU는 LRU 행동에 대해 불완전하기 때문에, 치환 비트(114)의 공유의 특성에 의해, 통로의 상호배타적 서브셋트에 대한 pLRU 갱신은 상호 영향을 미친다. 그러나 누화는 대부분의 상황에서 허용 가능한 수준이 될 것이다.
도 7을 참조하면, 도 1의 캐시 메모리(102)를 포함하는 프로세서를 포함하는 시스템의 동작을 나타내는 흐름도를 예시하고 있다. 처리 과정은 블록(702)에서 개시한다.
블록(702)에서, 장치 드라이버(또는 시스템 소프트웨어의 다른 구성요소)는 프로그램이 실행중인지(또는 실행할 준비가 되었는지, 예를 들어, 운영체제의 처리 테이블에서 지시되는 실행중인 프로그램인지) 여부를 판단하고, 매핑 또는 도 1의 매핑(108)을 갱신하기 위한 설정이 존재하는 장치 드라이버에 의해 알려진 프로그램의 리스트 내에 있는지를 판단한다. 예를 들어, 프로세서에서 실행중인 프로그램의 오프라인 분석(또는 프로세서의 소프트웨어 시뮬레이션을 통해 또는 실제의 프로세서 부분을 통해)을 실행하여, 캐시 메모리(102)의 효율을 향상시키는 매핑을 판단한다. 이 매핑은 100% 히트율 제공하지는 않지만, 이 매핑은 캐시 메모리(102)의 효율을 향상시킬 수 있다. 또한, 프로그램 중에는 매핑으로부터 이득을 얻기에 충분히 중요한 MAT에 대한 경향을 갖지 않는 프로그램도 있지만, 일부 프로그램의 분석에 의해 매핑으로부터 이용될 수 있고 이득을 얻을 수 있는 경향을 나타낼 수 있다. 처리 과정은 블록(704)으로 진행한다.
블록(704)에서, 프로세서는, 이 프로세서로 하여금 캐시 메모리(102)의 매핑(108)을 명령에 의해 제공된 매핑으로 갱신하라는 지시를 하는 명령어(예컨대, 모델 특정 레지스터(model specific register: MSR)에 대한 기록, 예를 들어, x86 WRMSR 명령어)를 실행한다. 일실시예에서, 매핑은 메모리 내에 위치하며, 매핑 위치의 메모리 어드레스는 명령어에 의해 제공된다. 바람직하게는, 명령어는 장치 드라이버 코드의 일부이다. 장치 드라이버는, 도 8과 관련해서 이하에 설명하는 바와 같이, 프로그램이 여러 위상의 각각에서 입력되었다는 것을 검출하도록 프로세서에 의해 사용될 수 있는 정보를 제공할 수도 있으며, 장치 드라이버는 각각의 위상에 대해 상이한 매핑을 제공할 수 있다. 명령어에 따라, 프로세서는 매핑(108)을 갱신하고, 초기 위상 식별자(도 8의 802)가 제공된 경우, 위상 검출기(도 8의 804)를 로드한다. 처리 과정은 블록(704)에서 종료한다.
도 8을 참조하면, 도 1의 캐시 메모리(102)를 포함하는 프로세서의 요소를 나타내는 블록도가 도시되어 있다. 이 프로세서는 새로운 위상을 입력한 실행중인 프로그램을 검출하는 위상 검출기(804)를 포함한다. 이 위상 검출기(804)에 의해, 예를 들어, 도 7을 참조하여 상기 설명한 바와 같은 장치 드라이버에 의해, 위상 검출기에 제공된 위상 식별자(802)에 기초한 판단이 이루어진다. 위상 식별자(802)는 프로그램의 명령어의 명령어 포인터(또는 프로그램 카운터) 값을 포함할 수 있다. 이 명령어는 서브루틴 호출 명령어가 될 수 있다. 이 경우, 위상 식별자(802)는 호출 명령어의 타겟 명령어의 명령어 포인터(또는 프로그램 카운터) 값을 포함해도 된다. 또한, 위상 식별자(802)는 호출 명령어의 하나 이상의 파라미터 값, 예를 들어, 리턴 어드레스, 레지스터 값 및/또는 스택 값 등을 포함해도 된다. 위상 검출기의 예는, 미국특허출원 14/050,687호 및 14/050,757호에 더 상세하게 개시되어 있으며, 여기서는 지문 유닛(fingerprint unit)으로 개시되어 있다. 상기 2개의 특허출원문헌은 2013년 9월 20일에 출원된 미국가특허출원 61/880,620에 대해 우선권을 주장하여 2013년 10월 10일에 출원되었으며, 이들을 그 내용 전체를 모든 목적을 위해 참조에 의해 본 명세서에 원용되는 것으로 한다. 이 프로세서는, 또한 새로운 위상이 검출되었다는 것이 위상 검출기(804)에 의해 통지되며 새로운 위상의 식별자를 수신하는 매핑 갱신 유닛(806)을 포함한다. 매핑 갱신 유닛(806)은, 예를 들어, 도 7을 참조하여 상기 설명한 바와 같은 장치 드라이버로부터, 매핑 정보를 수신한다. 매핑 갱신 유닛(806)은, 도 9를 참조하여 이하에 설명하는 바와 같이, 캐시 메모리(102) 내의 매핑(108)을 갱신한다. 일실시예에서, 매핑 갱신 유닛(806)은 위상 검출기(804)에 의해 호출되는 프로세서의 마이크로코드를 포함한다. 다른 실시예에서, 매핑 갱신 유닛(806)은 새로운 위상이 검출된 위상 검출기(804)로부터 인디케이터를 수신하고 새로운 위상의 식별자를 수신하는 상태 머신을 포함한다. 위상 분석에 대하여, 나중에, 도 36을 참조하여 더 상세하게 설명한다.
도 9를 참조하면, 도 1의 캐시 메모리(102)를 포함하는 도 8의 프로세서의 동작을 나타내는 흐름도가 도시되어 있다. 처리 과정은 블록(902)에서 개시한다.
블록(902)에서, 도 8의 위상 검출기(804)는 새로운 위상이 입력된 실행중인 프로그램을 검출한다. 새로운 위상의 검출에 따라, 위상 검출기(804)는 도 8의 매핑 갱신 유닛(806)에 통지한다. 처리 과정은 블록(904)으로 진행한다.
블록(904)에서, 매핑 갱신 유닛(806)은 위상 검출기(804)로부터 수신된 새로운 위상의 식별자를, 매핑 정보(808)(예를 들어, 도 7의 블록(704)에서 장치 드라이버로부터 수신)에서 조사하고, 캐시 메모리(102)의 매핑(108)을 룩업에서 발견된 매핑으로 갱신한다. 추가로, 매핑 갱신 유닛(806)은 위상 검출기(804)를 필요에 따라 새로운 위상 식별자(802)로 갱신한다. 일실시예에서, 다음에 조사할 위상은 현재의 위상에 따라 달라지기 때문에, 위상 검출기(804)에 로드할 위상 식별자(802)는 현재의 위상에 따라 달라질 수 있다. 처리 과정은 블록(906)으로 진행한다.
블록(906)에서, 프로세서는, 어느 캐시 메모리(102)가 블록(904)에서 수행되는 갱신된 매핑(108)에 기초하여, 도 5 및 6을 참조하여 설명한 것과 같은 통로의 서브셋트를 할당하는지에 따라, 가동 프로그램을 실행하고 캐시 메모리(102)로의 메모리 접근을 생성한다. 처리 과정은 블록(906)에서 종료한다.
본 명세서에 개시된 캐시 메모리의 실시예는 특정 개수의 통로, 셋트, 캐시 라인 사이즈, 태그 사이즈, 상태 프로토콜 등을 갖지만, 캐시 메모리가 상이한 개수의 이러한 구조 또는 특성을 갖는 실시예도 가능하다는 것은 당연하다.
도 10을 참조하면, 셋트 연관 캐시 메모리(1002)를 나타내는 블록도가 도시되어 있다. 도 10에 나타낸 캐시 메모리(1002)는 도 1의 캐시 메모리(102)와 많은 점에서 유사하기 때문에, 유사한 요소에는 유사한 도면부호를 사용한다. 도 10의 캐시 메모리(1002)는 도 1의 매핑(108)과는 다른 매핑(1008)을 포함한다. 도 10의 캐시 메모리(1002)에 대하여, 셋트는 각각 본 명세서에서 L 그룹이라고 하는 복수의 상호배타 그룹(1001) 중의 하나의 속한다. 구체적으로 말하면, 도 10의 매핑(1008)은, 각각의 MAT에 대하여, MAT를 어레이(104)의 복수의 통로의 서브셋트와 연관시키지만, L 그룹의 각각의 그룹(1001)에 대해서도 이러한 연관을 수행한다. 따라서, 예를 들어, 도 10의 매핑(1008)은 L 그룹(1001)의 각각에 대하여, 도 2와 유사한 매핑(108)을 포함하는 것이 효과적이다. 따라서, 도 2의 매핑(108)은 MAT(101) 번호에 의해 1차원적으로 색인화되는 것이 효과적이지만, 도 10의 매핑(1008)은 MAT(101) 번호 및 그룹(1001) 번호에 의해 2차원적으로 색인화되는 것이 효과적이다.
도 10에서는, 셋트 0 내지 셋트 511을 포함하는 그룹 0(1001-0), 셋트 512 내지 셋트 1023을 포함하는 그룹 1(1001-1), 셋트 1024 내지 셋트 1535를 포함하는 그룹 2(1001-2), 및 셋트 1536 내지 셋트 2047을 포함하는 그룹 3(1001-3)의 4개의 셋트 그룹을 예시하고 있다. 따라서, 매핑(1008)은, 4개의 그룹(1001)의 각각에 대하여, 각각의 MAT를 어레이(104)의 16개의 통로의 서브셋트와 연관시킨다. 즉, 도 10의 매핑(1008)은 MAT를 통로의 서브셋트에 매핑하며, 도 1의 실시예에서와 같이 캐시 메모리(1002) 전체를 단위로 하는 매핑이 아니라, 셋트 그룹 단위로 매핑을 행한다. 결론적으로, 할당 유닛(106)은, 메모리 접근(122)의 MAT와 선택된 셋트가 속하는 그룹(1001)을 고려해서, 매핑(1008)에 의해 특정된 통로의 서브셋트를 할당한다.
이것은 캐시 메모리(1002)의 특정 셋트 그룹에서 미리결정된 MAT와 연관된, 프로그램의 메모리 접근을 집단화하는 경향을 가진 프로그램의 경우에 특히 유용할 것이다. 예를 들어, 미리결정된 프로그램의 경우를 가정하면, 스택 동작과 관련된 MAT를 가진 메모리 접근은 캐시 메모리(1002)의 처음 몇 개의 셋트 부근에서 집단화되는 경향이 있다. 이 경우, 매핑(1008)은 캐시 메모리(1002)의 처음 몇 개의 셋트를 포함하는 그룹 내의 스택 동작에 관련된 MAT와 연관된 서브셋트 내에 복수의 통로를 포함해도 된다. 이러한 경향은 프로그램 및 프로그램 스레드의 오프라인 분석에 의해 관측될 수 있으며, 이들에 대해 효율적인 매핑이 결정될 수 있으며, 캐시 메모리(1002)에 제공되어 매핑(1008)을 갱신함으로써, 도 7 내지 도 9를 참조하여 설명한 것과 마찬가지로, 프로그램이 실행중인 경우, 캐시 메모리(1002)의 효율을 향상시킨다.
특정 개수의 그룹(예를 들어, 도 10에서는 4개)을 가진 실시예에 대하여 설명하였지만, 그룹(1001)의 개수는 이보다 커도(작아도) 된다. 그룹의 개수가 많을수록 매핑(1008)의 사이즈가 커진다. 일실시예에서, 그룹의 분해 정도는 캐시 메모리(1002)의 각각의 셋트까지 매우 미세하다.
도 11을 참조하면, 도 10의 캐시 메모리(1002)의 일부분을 보다 상세하게 나타낸 블록도가 도시되어 있다. 도 10의 캐시 메모리(1002)의 일부분은 도 3의 부분과 많은 점에서 유사하다. 하지만, 도 10의 캐시 메모리(1002)는 그룹(1001)에 메모리 접근(122)을 매핑하는 그룹 선택 로직(1106)이 포함되어 있다. 구체적으로 말하면, 그룹 선택 로직(1106)은 메모리 접근(122), 보다 특정적으로는, 메모리 어드레스의 인덱스를 수신하고, 메모리 접근(122)의 인덱스에 의해 선택된 셋트를 포함하는 그룹(1001)의 개수를 특정하는 것에 따라 셋트 그룹 번호(1104)를 생성한다. 셋트 그룹 번호(1104)는 셋트 그룹(예를 들어, 도 11의 예에서는 4개)마다(즉, 도 3과 유사한 각각의 MAT에 대해 하나씩) 벡터(304)를 수신하는 다중화기(1102)에 대한 선택 입력으로서 제공되며, 셋트 그룹 번호(1104)에 의해 특정된 그룹(1001)과 연관된 벡터(304)를 선택해서 다중화기(302)에 제공한다. 다중화기(302)는 32개의 선택된 벡터(304) 중의 하나의 벡터(304)를 선택해서 할당 유닛(106)에 제공한다. 할당 유닛(106)은, 도 3을 참조하여 설명한 것과 유사하게, 선택된 셋트 중의 선택된 벡터(304)와 치환 비트(114)에 기초하여 치환 통로(116)를 생성한다. 할당 유닛(106)은, 도 3을 참조하여 설명한 것과 유사하게, 치환 통로(116)의 값에 기초하여, 치환 비트(114)를 갱신한다.
도 12를 참조하면, 도 1의 캐시 메모리(1002)를 포함하는 프로세서의 동작을 나타내는 흐름도가 도시되어 있다. 처리 과정은 블록(1202)에서 개시한다.
블록(1202)에서, 프로세서는 캐시 메모리(1002)의 L개의 셋트 그룹(1001)의 각각에 대하여, 복수의 MAT(예를 들어, 표 1) 중의 각각의 MAT를 캐시 메모리(1002)의 통로의 서브셋트에 연관시키는 매핑을 수신한다. MAT 중에는, 셋트 중의 모든 통로를 포함하도록 서브셋트를 특정하는 것이 바람직할 수 있다. 처리 과정은 블록(1204)으로 진행한다.
블록(1204)에서, 프로세서는 도 10의 갱신 입력(126)을 통해, 캐시 메모리(1002)의 매핑(1008)을 블록(1202)에서 수신된 매핑으로 갱신한다. 처리 과정은 블록(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)은 치환된 통로를 모든 다른 통로에 대해 최근최대사용 및 에이징함으로써, 치환 비트(114)를 갱신한다. 다른 예로서, 치환 정책이 pLRU이면, 할당 유닛(106)은 서브셋트 중의 근사의 pLRU 통로를 선택한다. 일실시예에서, 할당 유닛(106)은, 도 6의 블록(602)에 대해 설명한 것과 유사한 방식으로, 치환 비트(114)를 갱신한다. 다른 예로서, 치환 정책이 라운드 로빈인 경우, 할당 유닛(106)은 서브셋트에서 통로의 개수를 모듈로 연산한 라운드 로빈 포인터의 통로 번호인 서브셋트의 통로를 선택하고, 라운드 로빈 포인터를 하나씩 순환시킨다. 다른 예로서, 치환 정책이 랜덤인 경우에는, 할당 유닛(106)은 서브셋트의 랜덤 통로를 선택한다. 처리 과정은 블록(1304)에서 종료한다.
도 14를 참조하면, 다른 실시예에 따른 셋트 연관 캐시 메모리(1402)를 나타내는 블록도가 도시되어 있다. 도 14에 나타낸 캐시 메모리(1402)는 도 10에 나타낸 캐시 메모리(1002)와 유사한 점이 많다. 그러나 도 14에 나타낸 캐시 메모리(1402)의 셋트는 도 10의 셋트와는 그룹화하는 방식이 다르다. 구체적으로, 도 10의 그룹(1001)은 번호가 인접한 셋트를 포함하지만, 도 14에 나타낸 그룹(1401)은 모듈러스에 의한 그룹의 셋트 번호의 모듈로 연산의 동일한 결과를 갖는 그룹 번호를 갖는 그룹을 포함하며, 여기서 모듈러스는 그룹의 개수이다. 도 14에 나타낸 예에는, 4개의 그룹(1401)이 도시되어 있다. 그룹 0(1401-0)은 셋트 번호 모듈로 4가 0인 모든 셋트, 즉 0, 4, 8, 12,…., 2044인 셋트를 포함한다. 그룹 1(1401-1)은 셋트 번호 모듈로 4가 1인 모든 셋트, 즉 1, 5, 9, 13,…., 2045인 셋트를 포함한다. 그룹 2(1401-2)는 셋트 번호 모듈로 4가 2인 모든 셋트, 즉 2, 6, 10, 14,…., 2046인 셋트를 포함한다. 그룹 3(1401-3)은 셋트 번호 모듈로 4가 3인 모든 셋트, 즉 3, 7, 11, 15,…., 2047인 셋트를 포함한다. 도 14의 실시예는, 그룹 선택 로직(1106)이, 설명한 바와 같이, 즉 그룹의 개수인 모듈러스를 사용하여 셋트 번호에 대해 모듈로 연산을 수행함으로써, 그룹 번호를 생성하는 것을 제외하고는, 도 11을 참조하여 설명한 것과 유사한 로직을 포함한다. 도 14의 실시예는 모듈러스와의 상관성을 나타내는 방식으로 미리결정된 MAT에 대한, 프로그램의 메모리 접근을 집단화하는 경향이 있는 일부 프로그램에 대해 장점을 가질 수 있다. 도 14의 실시예는 뱅크의 개수가 그룹의 개수에 대응하고 각 뱅크의 셋트가 그룹의 셋트에 대응하는 뱅크화된 캐시 메모리 실시예와 시너지 효과를 가질 수 있다.
바람직하게는, 그룹 선택 로직(1106)은 도 10에 나타낸 것과 같은 연속하는 셋트 그룹화, 도 14에 나타낸 것과 같은 모듈러스 방식의 세그 그룹화, 셋트 번호의 해시 등의 상이한 그룹화 방식, 메모리 접근(122)의 메모리 어드레스의 태그 비트의 해시, 또는 이들의 조합에 바람직한 매핑(1008)을 선택하기 위한 셋트 그룹 번호(1104)를 생성할 수 있도록 갱신 가능하다. 또한, 바람직하게는, 그룹 선택 로직(1106)은 상이한 개수의 그룹을 지원하도록 갱신 가능하다. 그룹 선택 로직(1106)의 갱신은, 도 12를 참조하여 설명한 바와 같이, 매핑(1008)이 갱신될 때에 수행되어도 된다. 이러한 그룹 선택 로직(1106)의 갱신 능력에 의해, 매우 다양한 프로그램 및 프로그램 위상에 대한 캐시 메모리(1002/1402)의 효율을 향상시키는 값을 가진 매핑(1008)을 갱신할 가능성이 높아질 수 있다.
도 15를 참조하면, 다른 실시예에 따른 셋트 연관 캐시 메모리(1502)를 나타내는 블록도가 도시되어 있다. 도 15에 나타낸 캐시 메모리(1502)는 도 10에 나타낸 캐시 메모리(1002)와 유사한 점이 많다. 도 15에 나타낸 캐시 메모리(1502)는 복수의 상호배타 셋트 그룹을 특정하는 매핑(1508)을 포함하는데, 도 15의 예에서는, 도 10의 실시예와 유사한 4개의 그룹(1501)이다(예를 들어, 도 14의 그룹화와 같은, 다른 셋트 그룹화도 가능하다). 그러나, 도 15의 매핑(1508)은 어레이(104)의 기억 요소(112)의 복수의 청크(1503)를 추가로 특정한다. 일반적으로 말해서, 어레이(104)가 N개의 통로와 L개의 상호배타 그룹(1501)을 갖는다고 가정하면, 청크(1503)는 L 상호배타 그룹 중의 하나와 어레이(104)의 N개의 통로 중의 하나 이상의 통로와의 논리적 교차점인, 어레이(104)의 기억 요소(112)를 포함한다. 도 15의 예는 11개의 서로 다른 청크(1503)를 나타낸다. 예를 들어, 청크 2(1503-2)는 그룹 0(1501-0) 및 통로 6 내지 통로 9 내의 기억 요소(112)이다. 청크 8(1503-8)은 그룹 2(1501-2) 및 통로 10 내지 통로 15 내의 기억 요소(112)이다. 청크 11(1503-11)은 그룹 3(1501-3) 및 통로 7 내지 통로 12 내의 기억 요소(112)이다. 도 15의 실시예에서, 모든 기억 요소(112)는 청크(1503) 내에 포함되는데, 이는 하나 이상의 셋트 그룹에 대하여, 해당 그룹의 일부의 통로가 청크로 매핑되지 않은 도 17의 실시예와는 다르며, 이하에 상세하게 설명한다. 도 20 및 21을 참조하여 이하에 설명하는 것과 유사한 매핑 구조를 채택하여, 도 22D로부터 관측될 수 있는, 청크(1501)를 특정할 수 있다. 그러나 구획 지정자(parcel specifier)(2001)는, 동일한 치환 방식이 셋트 전체에 사용되고 모든 치환 비트(114)가 셋트의 모든 통로에 대해 사용되는 경우에, 치환 비트 포인터(2012)를 포함하지 않아도 된다.
도 15의 실시예의 다른 특징은, 매핑(1508)이 MAT를 청크(1503)와 연관시킨다는 것이다. 구체적으로 말하면, 미리결정된 그룹(1501)의 경우, 매핑(1508)이 그룹(1501)의 모든 청크(1503)와 연관시키지 않는 MAT가 있을 수 있다.
도 16을 참조하면, 도 15의 캐시 메모리(1502)의 동작을 나타내는 흐름도가 도시되어 있다. 처리 과정은 블록(1602)에서 개시한다.
블록(1602)에서, 캐시 메모리(1502)는 캐시 메모리(1502) 내에서 미스하는 메모리 접근(122)을 수신한다. 메모리 접근(122) 인덱스는 일련의 어레이(104)를 선택한다. 메모리 접근(122)은 MAT(101)를 특정한다. 처리 과정은 블록(1604)으로 진행한다.
블록(1604)에서, 캐시 메모리(1502)는 매핑(1508)이 MAT(101)를 선택된 셋트와 교차하는 청크(1503)과 연관시키는지 여부를 판단한다. 처리 과정은 결정 블록(1606)으로 진행한다.
결정 블록(1606)에서, 캐시 메모리(1502)에 의해 블록(1604)에서 매핑(1508)이 MAT(101)를 선택된 셋트와 교차하는 청크(1503)와 연관시킨다고 판단한 경우에는, 처리 과정은 블록(1608)으로 진행하고, 그렇지 않은 경우에는, 처리 과정은 블록(1612)으로 진행한다.
블록(1608)에서, 할당 유닛(106)은 선택된 셋트의 통로를 할당한다. 구체적으로 말해서, 할당 유닛(106)은, 예를 들어, 도 13의 블록(1304)에서 설명한 것과 같이, 선택된 셋트에 의해 교차되는 청크(1503)의 통로를 할당한다. 매핑(1508)이 MAT(101)를 선택된 셋트에 의해 교차되는 청크(1503)와 연관시키는 경우, 할당 유닛(106)은 교차된 청크(1503)의 통로의 집합 중의 모든 통로를 할당한다. 처리 과정은 블록(1608)에서 종료한다.
블록(1612)에서, 할당 유닛(106)은 선택된 셋트의 모든 통로를 할당한다. 예를 들어, 치환 비트(114)는 셋트 전체, 즉 셋트의 모든 비트에 대한 pLRU 정보를 유지하는 비트를 포함해도 되며, 할당 유닛(106)은 선택된 셋트의 pLRU를 할당할 수 있다. 이와 달리, 할당 유닛(106)은, 치환 방식에의 입력으로서의 MAT에 기초하여 우선순위를 부여하는 것에 수반하는 등, 본 명세서에 개시된 치환 방식 중에서, 참 LRU, 라운드 로빈, 또는 랜덤 방식 등에서 선택된 셋트를 할당할 수 있다. 처리 과정은 블록(1612)에서 종료한다.
이하의 예로 든 매핑은 도 15 및 도 16의 실시예의 사용을 예시하기 위한 것이다. 이하의 특성을 가진 프로그램을 고려한다. 첫째로, 프로그램은 호출/리턴이 빈번하며, fused_store_update, store_push, store_update 및 store_update_nac MAT (일반적으로 말해서, 스택 접근와 연관된 MAT 그룹)를 갖는 복수의 메모리 접근을 생성하며, 이들은 캐시 메모리(1902)의 상위 4번째에 색인되는 경향이 있다. 두 번째로, MATs boxpf, fused_store_aps, load_aps, store_aps 및 store_nt_aps MAT(일반적으로, 미디어 데이터와 연관된 MAT 그룹)와 연관된 메모리 접근은 메모리 트래픽을 지배하는 경향이 있다. 세 번째로, 프로그램은 테이블워크 MAT 메모리 접근을 위한 전용의 통로를 갖는 것에서 장점이 있으며, 캐시 메모리(1902)의 하위 4번째에 색인화되는 경향이 있다. 오프라인 분석은 프로그램이 매핑(1008)으로부터 장점을 갖는 것을 나타낼 수 있다. 이 매핑(1008)은, 캐시 메모리(1902)의 상단 4번째를 포함하는 제1 셋트 그룹과 교차하며 미디어 MAT 그룹을 통로 0 내지 통로 13과 연관시키는 청크 0, 제1 셋트 그룹과 교차하며 스택 MAT 그룹을 통로 0 내지 통로 13과 연관시키는 청크 1, 캐시 메모리(1902)의 하단 4번째를 포함하는 제2 셋트 그룹과 교차하며 미디어 데이터 MAT 그룹을 통로 0 내지 통로 14와 연관시키는 청크 2, 및 제2 셋트 그룹과 교차하며 스택 접근 MAT 그룹을 통로 0 내지 통로 13과 연관시키는 청크 3을 작성한다. 이 경우, 캐시 메모리(1902)의 셋트 중의 중간 절반은 청크와 매핑해제되는데, 이는 미디어 데이터 및 이와 관련된 boxpf 프리페치가 우세한 경향이 있고(캐시 메모리(1902)의 모든 통로를 요구하는 경향), 테이블워크 또는 스택 메모리 접근을 이들로부터 분리시키는 데에 필요하지 않기 때문이다.
도 17을 참조하면, 다른 실시에에 따른 셋트 연관 캐시 메모리(1702)를 나타내는 블록도가 도시되어 있다. 도 17에 나타낸 캐시 메모리(1702)는 도 15에 나타낸 캐시 메모리(1502)와 유사한 점이 많다. 도 17에 나타낸 캐시 메모리(1702)는, 일부의 그룹(1701)의 경우, 매핑은 그룹(1701)의 청크(1703) 내의 모든 통로를 포함하지 않아도 된다는 점에서, 도 15의 매핑(1508)과는 다른 매핑(1708)을 포함한다. 다시 말해서, 그룹(1701)의 임의의 청크(1703)에 매핑 해제된 통로가 일부 있을 수 있다. 도 17의 예에서, 그룹 0(1701-0)의 통로 0 내지 통로 1, 그룹 1(1701-1)의 통로 0, 및 그룹 2(1701-2)의 통로 0 내지 통로 2는 매핑(1708)에 의해 청크(1703)에 매핑해제 된다.
도 18을 참조하면, 도 17의 캐시 메모리(1702)의 동작을 나타내는 흐름도가 도시되어 있다. 도 18은 도 16과 유사하기 때문에, 유사한 도면부호는 유사한 구성을 나타낸다. 그러나, 처리 과정은, 도 16과 같이 블록(1612)으로 진행하는 것이 아니라, 결정 블록(1606)의 "NO"를 따라 블록(1812)으로 진행한다.
블록(1812)에서, 할당 유닛(106)은, 예를 들어, 도 13의 블록(1304)을 참조하여 설명한 바와 같이, 선택된 셋트의 임의의 매핑 해제 통로를 할당한다. 예를 들어, 선택된 셋트가 그룹 2(1701-2)에 속한 경우, 할당 유닛(106)은 도 17의 예에서 매핑 해제된 통로 0 내지 통로 2 중의 하나를 할당한다. 처리는 블록(1812)에서 종료한다.
청크의 분해 정도가 변화하는 다양한 실시예를 고려한다. 예를 들어, 도 10, 14, 15 및 17의 실시예에서, 셋트는 4개의 상호배타적 그룹으로 그룹화됨으로써, 최대 64개의 청크 (셋트의 4개 그룹 x 16개의 통로)가 가능하다. 그러나, 그 이상 또는 그 이하의 개수를 가진 청크가 가능하도록 상이한 개수의 상호배타적 그룹이 있는 다른 실시예도 가능하다. 일실시예에서, 각각의 셋트는 캐시 메모리 내의 각각의 기억 요소 또는 엔트리가 청크가 되도록 각자의 상호배타적 그룹이 될 수 있다. 그룹의 개수가 많아질수록, 분석된 프로그램의 필요에 의해 조정하도록, 더 세분화되는 캐시 메모리가 버짓화될 수 있는 반면에, 그룹의 개수가 적을수록, 청크 특성을 기술하는 데에, 더 적은 개수의 제어 비트가 필요하게 된다.
도 19를 참조하면, 셋트 연관 캐시 메모리(1902)를 나타내는 블록도가 도시되어 있다. 도 19의 캐시 메모리(1902)는 도 1의 캐시 메모리(102)와 많은 점에서 유사하기 때문에, 유사한 참조부호도 유사하다. 그러나, 도 19의 캐시 메모리(1902)는 도 1의 매핑(108)과는 상이한 매핑(1908)을 포함한다. 또한, 치환 비트(1914)는 도 1의 치환 비트(114)와 상이하다. 도 19의 매핑(1908) 및 치환 비트(1914)에 의해, 캐시 메모리(1902)는 이종의 치환 방식을 채택할 수 있다. 즉, 각각의 셋트는 구획(parcel)이라고 하는 통로의 서브셋트를 구비하며, 각각의 구획은 자신의 치환 방식을 갖는다. 즉, 셋트의 각각의 구획은 상이한 개수의 통로를 포함하고, 셋트의 치환 비트(1914)의 상이한 부분을 사용할 수 있고, 구획 내에서 통로를 치환하기 위한 상이한 치환 방식을 채택해도 되는데, 이에 대해서는 이하에 상세하게 설명한다. 오프라인 분석은, 예를 들어, 일부 프로그램은 MAT를 구획으로 그룹화하는 것 및 구획에 대해 상이한 치환 방식을 채택하는 것으로부터의 장점을 갖는다.
도 19에는, 예를 들어, 선택된 셋트 내에서 인덱스(1500)에 3개의 구획(1901)이 도시되어 있다. 구획 0(1901-0)은 해당 셋트의 통로 0 내지 통로 4를 포함하고, 구획 1(1901-1)은 셋트 5 내지 셋트 12를 포함하고, 구획 2(1901-2)은 셋트 13 내지 셋트 15를 포함한다. 치환 비트(1914)는, 도 20을 참조하여 더 상세하게 설명하는 바와 같이, 구획(1901)의 각각에 대해 개별의 부분을 포함한다. 일실시예에서, 구획(1901)은 캐시 메모리(1902)의 모든 셋트에 대해 전역적(global), 즉 도 22C에 예시되어 있는 바와 같이, 예를 들어 어레이(104)의 모든 셋트가 동일하게 구획되어 있다. 다른 실시예에서, 구획(1901)은 셋트의 그룹과 연관되어 있다. 즉, 도 22D에 예시되어 있는 바와 같이, 모든 셋트 그룹(2291)이 동일하게 구획되어 있다. 본 실시예는, 예를 들어 도 10 내지 도 18의 실시예에 대응한다. 다른 실시예에서, 구획(1901)은 각각의 셋트와 연관되어 있다. 즉, 도 22E에 예시되어 있는 바와 같이, 모든 셋트는 각자의 구획을 갖는다.
도 20을 참조하면, 일실시예에 따른 구획 지정자(2001)와 구획 지정자 트리플렛(2021)을 나타내는 블록도가 도시되어 있다. 구획 지정자(2001)는 유효 비트(2002), MAT 벡터(2004), 통로 벡터(2006), 치환 방식(2006), 및 치환 비트 포인터(2012)를 포함한다. 유효 비트(2002)는 구획 지정자(2001)가 유효한지를 나타낸다. 선택된 셋트에 대한 구획(1901)의 개수는 구획 지정자 트리플렛(2021) 내의 참 유효 비트(2002)의 개수에 의해 정해지며, 이에 대해서는 이하에서 더 상세하게 설명한다.
MAT 벡터(2004)는 복수의 MAT (예컨대, 표 1의 32개의 MAT)의 각각의 MAT에 대해 대응하는 비트를 갖는다. MAT 벡터(2004) 내의 셋트 비트는 대응하는 MAT가 구획(1901)에 연관되는 것을 나타낸다. 다른 실시예에서, 구획 지정자(2001)는 MAT 벡터(2004)가 아닌, MAT 그룹 벡터를 포함한다. MAT 그룹 벡터는 각각의 MAT 그룹 (예컨대, 4개의 MAT 그룹)에 대해 대응하는 비트를 갖는다. 본 실시예에서, 매핑(1908)은, 예를 들어, 도 29에서 설명하는 바와 같이, MAT 대 MAT 그룹 매핑을 포함한다. 할당 유닛(106)은 MAT 대 MAT 그룹 매핑에 대한 입력으로서 메모리 접근(122)의 MAT(101)를 사용하고, 할당할 구획의 구획 지정자(2001)에 대한 MAT 그룹 출력을 사용한다. MAT 그룹 벡터는 MAT 벡터(2004)보다 적은 수의 비트를 필요로 할 수 있으며, 이것은 구획 지정자(2001)의 개수가 상대적으로 큰 경우에 특히 바람직하다.
통로 벡터(2006)는 어레이(104)의 N개의 통로예컨대, 16개의 통로)의 각각에 대해 대응하는 비트를 갖는다. 통로 벡터(2006) 내의 셋트 비트는 대응하는 통로가 구획(1901) 내에 포함되는 것을 나타낸다. 즉, 통로 벡터(2006)는 구획(1901) 내에 포함된 통로의 서브셋트를 특정한다. 다른 실시예에서, 통로 벡터(2006)는 치환 비트(1914)의 구획(1901)과 연관된 부분과 불 대수 연산되는 제1 및 제2 부분을 포함하여, 도 6의 다른 실시예를 참조하여 설명한 것과 유사하게, 치환 비트(1914)를 갱신하는 데에 사용될 새로운 비트(예컨대, pLRU 벡터)를 생성한다. 본 실시예에서, 구획(1901)에 포함된 통로의 서브셋트는 간접적으로 특정되며, 할당 유닛(106)은 통로 벡터(2006)로부터 포함된 통로의 서브셋트를 유도한다. 또 다른 실시예에서, 구획 지정자(2001)는 통로 벡터(2006)가 아닌 통로 포인터를 포함한다. 통로 포인터는 구획(1901) 내의 제1 통로를 지시한다. 본 실시예에서, 구획 내에 포함된 통로는 모두 인접한다. 이 포인터는 통로의 개수를 특정할 수도 있으며, 이와 달리, 제1 구획(1901)은 그 통로 포인터에서 통로 0을 특정해야 하며, 할당 유닛(106)은 통로의 개수를 인접한 통로 포인터의 차이로서 계산한다.
치환 방식(2008)은 연관된 구획(1901)을 치환하거나 할당하는 데에 사용되는 치환 정책을 특정한다. 일실시예에서, 여러 치환 방식(예컨대, 참 LRU, pLRU, 라운드 로빈, 랜덤, MAT에 의한 우선순위, MAT 우선순위를 포함하는 다양한 조합 등)에 번호가 매겨지며, 치환 방식 필드(2008)는 치환 방식의 부호화된 값을 유지한다.
치환 비트 포인터(2012)는 치환 비트(1914)의, 연관된 구획(1901)에 대한 치환 정책 비트로서 사용되는 부분을 특정한다. 바람직하게는, 치환 비트 포인터(2012)는 치환 비트(1914)의 연관된 구획(1901)에 대한 치환 정책 비트로서 사용되는 부분의 제1 비트를 지시한다. 구획(1901)에 요구되는 치환 비트(1914)의 개수는 구획(1901) 내의 통로의 개수와 방식(2008)에 따라 달라진다. 일실시예에서, 포인터(2012)에 대한 비트는 포함되지 않지만, 대신에 유효 구획(1901)의 개수, 해당 구획(1901)의 통로의 개수, 및 방식(2008), 즉 미리결정된 방식(2008) 및 이와 연관된 통로의 개수에 요구되는 비트의 개수로부터 할당 유닛(106)에 의해 계산된다.
단일의 통로를 포함하는 구획(1901)의 경우에, 구획(1901)의 하나의 통로는 항상 치환되기 때문에, 해당 구획(1901)에 의해 소비될 치환 비트(1914)에 대한 필요가 없다. 2개의 통로와 LRU 치환 방식(2008)을 갖는 구획(1901)의 경우, 치환 비트(1914)의 단일 비트가, 예를 들어, 2개의 통로 중의 LRU 통로를 나타내기 위해 사용될 수 있다. 이와 달리, MAT 우선순위에 기초한 치환 방식(2008)을 가진 4개의 통로가 있는 구획(1901)을 가정하면, MAT 벡터(2004)는 5개의 상이한 MAT를 해당 구획과 연관시키고, 그들 중 2개(예컨대, load_supervisor 및 store_supervisor)는 다른 3개의 MAT보다 우선순위가 높다. 이 경우, 치환 비트(1914)는 4개가 있으며(해당 구획의 통로의 개수와 같다), 치환 비트(1914)가 참인 경우, 해당 통로는 더 높은 우선순위의 load_supervisor 및 store_supervisor MAT를 가진 메모리 접근에 따라 할당된 것을 나타내며, 그렇지 않고 치환 비트(1914)가 거짓인 경우, 할당 유닛(106)은 통로를 거짓 치환 비트(1914)로의 치환을 시도하고, 통로를 참 치환 비트(1914)로의 치환을 피한다. 직전에 개시한 치환 방식(2008)의 확장은 통로 중에서 더 높은 우선순위를 갖는 MAT와 연관된 LRU 통로를 나타내는 각각의 구획에 대해 추가의 치환 비트(1914)를 갖는 것이다. 따라서, 예를 들어, 구획(1901)의 모두 4개의 통로가 높은 우선순위의 MAT와 연관된 경우, 할당 유닛(106)은 구획(1901)의 LRU에 관련된 치환 비트(1914)에 의해 지시된 바와 같은 4개의 통로 중의 LRU 통로에의 할당을 행한다. MAT에 대하여 우선순위를 포함시키는 다른 치환 방식도 가능하다. 다른 치환 방식(2008)의 예로는 라운드 로빈이 있는데, 라운드 로빈에서는, 치환 비트(1914)의 일부가 구획(1901) 내에 할당된 마지막 통로를 특정한다.
구획 지정자 트리플리케이트(parcel specifier triplicate: PST)(2021)는 3개의 구획 지정자(2001), 즉 구획 지정자 1(2001-1), 구획 지정자 2(2001-2), 및 구획 지정자 3(2001-3)을 포함한다. PST(2021)를 갖는 도 20의 실시예에서는, 셋트당 구획(1901)의 개수를 3개로 제한하고 있다. 다른 실시예에서는 셋트당 구획(1901)(즉, 구획 지정자(2001))의 개수가 최대 3개 이상으로 할 수 있지만, 최소한 2개로 가능하다. 구획(1901)이 캐시 메모리(1902)의 모든 셋트에 대하여 전역적인 실시예(예컨대, 도 22C)에서, 캐시 메모리(1902)에 대해 단일의 PST(2021)가 존재한다. 구획(1901)이 셋트의 그룹과 연관되어 있는 실시예(예컨대, 도 22D)에서는, 셋트 그룹(2291)당 하나의 PST(2021)가 존재한다. 구획(1901)이 개별의 셋트와 연관되어 있는 실시예(예컨대, 도 22E)에서는, 셋트당 하나의 PST(2021)가 존재한다.
도 21을 참조하면, 도 19의 캐시 메모리(1902)의 일부를 더 상세하게 나타내는 블록도가 도시되어 있다. 도 21은 구획(1901)이 셋트의 그룹과 연관되어 있는 실시예(예컨대, 도 22D)를 설명한다. 도 21의 실시예에서, 도 19의 매핑(1908)은 복수의 그룹의 각각에 대해 PST(2021)를 포함하는데, 도 21에서는 L로 나타낸다. 다중화기(302)는 L개의 PST(2021)를 수신하고, 이들 중 하나를, 메모리 접근(122), 특히, 메모리 접근(122)의 인덱스 부분에 대한 응답으로서 셋트 그룹 선택 로직(2106)에 의해 선택되는 셋트 그룹 번호(2104)의 값에 기초하여, 할당 유닛(106)에 제공한다. 메모리 접근(122)의 MAT 인디케이터(101)가 할당 유닛(106)에 제공된다. 일실시예에서, 할당 유닛(106)은 MAT(101) 및 PST(2021)에 기초하여 메모리 접근(122)과 연관된 구획(1901)을 선택한다. 다른 일실시예에서, 할당 유닛(106)은 MAT(101)를 사용하지 않고, 메모리 접근(122)의 메모리 어드레스와 PST(2021)에 기초하여 메모리 접근(122)과 연관된 구획(1901)을 선택한다. 즉, 캐시 메모리에서 이종 치환 정책을 채택함으로써, MAT를 수신하지 않는 캐시 메모리의 사용이 가능하게 된다. 할당 유닛(106)은 또한, 도 19에서 선택된 셋트, 즉 메모리 접근(122)의 메모리 어드레스의 인덱스에 의해 선택되는 캐시 메모리(102)의 셋트의 치환 비트(1914)를 수신한다. 선택된 PST(2021) 및 구획 지정자(2001)에 의해 특정된 치환 비트(1914)의 일부에 기초하여, 그리고 MAT(101)에 기초하는 일부 실시예에서, 할당 유닛(106)은 도 19의 치환 통로(116)를 생성한다. 할당 유닛(106)은 또한 치환 통로(116)의 값에 기초하여 구획 지정자(2001)에 의해 특정된 치환 비트(1914)의 일부를 갱신한다.
도 22A를 참조하며, 도 19의 캐시 메모리(1902)를 포함하는 프로세서의 동작을 나타내는 흐름도가 도시되어 있다. 처리는 블록(2202)에서 개시한다.
블록(2202)에서, 프로세서는 도 20의 구획 지정자 트리플렛(2021)을 포함하는 매핑을 수신한다. 처리는 블록(2204)으로 진행한다.
블록(2204)에서, 프로세서는 캐시 메모리(1902)의 매핑(1908)을, 도 19의 갱신 입력을 통해, 블록(2202)에서 수신된 매핑으로 갱신한다. 처리는 블록(2204)에서 종료한다.
도 22B를 참조하면, 일실시예에 따른 도 19의 캐시 메모리(1902)의 동작을 나타내는 흐름도가 도시되어 있다. 처리는 블록(2212)에서 개시한다.
블록(2212)에서, 캐시 메모리(1902)는 캐시 메모리(1902)에서 미스한 메모리 접근(122)을 수신한다. 메모리 접근(122) 인덱스는 일련의 어레이(104)를 선택한다. 메모리 접근(122)의 메모리 어드레스는 또한, 선택된 셋트와 연관된 셋트 그룹을 판단하는 데에 사용된다. 즉, 셋트 그룹 선택 로직(2106)은 메모리 접근(122)의 메모리 어드레스에 따라 도 21의 셋트 그룹 번호(2104)를 작성한다. 구획이 전역적인 실시예(예컨대, 도 22C)에서는, PST(2021)를 선택하지 않아도 되는데, PST(2021)가 하나만 존재하기 때문이다. 구획이 셋트당 존재하는 실시예(예컨대, 도 22E)에서는, 셋트의 선택에 의해 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)은 MAT(101)를 참조하지 않고 대신에 할당 유닛(106)에 제공된 메모리 어드레스의 셋트 또는 범위와 메모리 어드레스를 비교함으로써, 메모리 접근(122)의 메모리 어드레스로부터 구획(1901)을 판단한다. 일실시예에서, 프로세서의 스래싱 검출기(thrashing detector)(예컨대, 블룸 필터는 최근의 축출에 일치하는 캐시 라인 할당을 모니터링한다. 스래싱은, 예를 들어, 프로그램이 대규모 데이터 구조에의 랜덤한 메모리 접근을 생성하기 때문에 이루어지기도 한다. 프로그램이 이러한 행동을 나타내는 경우, 예를 들어, 프로그램이 현재의 치환 방식, 예를 들어, pLRU에 대해 최악의 시나리오를 만드는 방식으로 메모리를 통한 링크된 리스트를 스캔하는 경우, 그 행동의 시간적 공간적 국소성이 불량하게 되어, 캐시 메모리(1902)에서의 히트율이 매우 낮아지게 될 수 있다. 스래싱 검출기는 스래싱이 이루어지고 있는 메모리 어드레스 셋트를 판단하고, 이 메모리 어드레스 셋트를 할당 유닛(106)에 제공한다. PST(2021)는 메모리 어드레스 셋트와 연관된 개별의 구획(1901)을 작성하도록 갱신되는데, 할당 유닛(106)이 스래싱 검출기에 의해 특정된 메모리 어드레스 셋트에 속하는 메모리 접근(122)에 의해 관련된 셋트에의 할당을 위한 랜덤 치환 방식을 채택하도록 갱신된다. 랜덤 치환 정책으로 변경하면, 메모리 접근에 대한 캐시의 히트 레이트를 높이는 데에 도움이 될 수도 있고 도움이 되지 않을 수도 있다. 하지만, 새로운 치환 정책에 추가로 이들에 대해 구획(1901)을 특정하게 되면, 행동이 양호하지 못한 랜덤 접근로부터 프로그램의 잔여 데이터를 분리시킴으로써 프로그램 전체의 성능을 향상시킬 수 있다.
다른 실시예에서, 예를 들어, 경계 박스 프리페처(bounding box prefetcher) 등의 프로세서의 프리페처 내의 스트리밍 데이터 검출기는 캐시 메모리(1902)의 통로의 소규모 서브셋트로 격리되어야 하는 및 또는 상이한 치환 방식이 장점을 가지는 메모리 어드레스의 범위 내에서 스트리밍 데이터 메모리 접근(122)을 검출한다. 예를 들어, 프로그램이 메모리 내의 대규모 데이터 구조에서 규칙적으로 동작(예컨대, 프로그램이 오브젝트의 다차원 어레이 전체를 통해 내포 루프(nested loop)로 구성되어 있다)한다고 가정한다. 이러한 규칙성은 어레이 및 캐시 메모리(1902)의 상대적 크기에 따라 및/또는 치환 정책에 따라 메모리 계층에 악영향을 미칠 수 있다. 데이터 구조 내의 오브젝트가 소규모이고, 캐시 라인이 규칙적인 스트라이드로 접근되면, 캐시 메모리(1902)에 대한 영향은 필수적으로 일회용 데이터로 캐시 메모리(1902)를 효과적으로 채울 수 있으며, 반면에 데이터 구조의 일부분인 아닌 유용할 수 있는 데이터가 배제될 수 있다. 데이터는 반드시 실제로 기사용된 것이 아니어도 되지만, 데이터 구조가 동일 셋트에 여러 번 변경하기에 충분히 대규모(예컨대, 16번 이상, 캐시 메모리(1902)의 통로의 개수)이면, 데이터는 일회용으로 될 수 있는데, 이는 캐시 메모리(1902)가 N+16번째 캐시 라인에 대한 공간을 만들기 위해 강제로 배제되기 전에, N번째 캐시 라인이 다시 접근될 가능성이 적기 때문이다. 이 경우, 프리페처는, 할당 유닛(106)에 프리페처에 의해 제공되는 메모리 어드레스의 범위 내에서 프리페처에 의해 생성되는 프리페치인 메모리 접근(122)이 캐시 메모리(1902)의 통로의 소규모 서브셋트를 갖는 구획(1901)으로 격리되어야 하는 캐시 메모리(1902)에 대한 스트림과 신호를 식별한다. 새로운 할당을 격리하는 것에 추가로(또는 그 대신에), 프리페처는, 캐시 메모리(1902)로 하여금, 할당이 지시되는 통로에 대해 상이한 치환 정책(예컨대, 라운드 로빈/FIFO 또는 랜덤)을 채택하도록 한다. 이에 따라, PST(2021)는 적절한 치환 방식으로 필요한 구획(1901)을 작성하도록 갱신된다.
처리는 블록(2214)에서 블록(2216)으로 진행한다.
블록(2216)에서, 할당 유닛(106)은 블록(2214)에서 선택된 구획 지정자(2001)를 사용하여, 통로의 서브셋트, 치환 방식, 및 치환 비트(1914)의 구획(1901)과 연관된 부분을 판단한다. 처리는 블록(2218)으로 진행한다.
블록(2218)에서, 할당 유닛(106)은 연관된 치환 방식 및 치환 비트(1914)의 일부를 사용하여, 선택된 셋트의 구획(1901)과 연관된, 예를 들어 치환 통로(116) 상에 지시된, 통로의 서브셋트로 할당한다. 처리는 블록(2222)으로 진행한다.
블록(2222)에서, 할당 유닛(106)은 블록(2218)에서 할당된 통로에 기초하여 치환 비트(1914)의 구획(1901)과 연관된 부분을 갱신한다.
도 22C를 참조하면, 이종 치환 정책을 채택하는 도 19의 캐시 메모리(1902)의 실시예를 나타내는 블록도가 도시되어 있다. 도 22C의 실시예에서, 구획(1901)은 캐시 메모리(1902)의 모든 셋트에 대해 전역적이다. 즉, 어레이(104)의 모든 셋트가 동일하게 구획된다. 도 22C에서, 어레이(104)의 모든 셋트에 대하여, 통로 0 내지 통로 5의 서브셋트는, 아래에서 위로 대각선 음영으로 나타낸 바와 같이, 구획 0에 포함되고 구획 지정자 0에 의해 특정되며, 통로 6 내지 통로 9의 서브셋트는, 위에서 아래로 대각선 음영으로 나타낸 바와 같이, 구획 1에 포함되고 구획 지정자 1에 의해 특정되며, 통로 10 내지 통로 15의 서브셋트는, 크로스 해칭된 음영으로 나타낸 바와 같이, 구획 2에 포함되고 구획 지정자 2에 의해 특정된다.
도 22D를 참조하면, 이종 치환 정책을 채택하는 도 19의 캐시 메모리(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)는 2개의 구획(1901)만을 포함한다. 어레이(104)의 셋트 그룹 3(2291-3)(셋트 1536 내지 셋트 2047)의 경우, 통로 0 내지 통로 15의 모든 서브셋트는 구획 J에 포함되고 구획 지정자 9에 의해 특정된다. 즉, 그룹 3(2291-3)은 하나의 구획(1901)만을 포함한다.
도 22E를 참조하면, 이종 치환 정책을 채택하는 도 19의 캐시 메모리(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)의 셋트 3의 경우, 통로 0 내지 통로 3의 서브셋트는 구획 J에 포함되고 구획 지정자 9에 의해 특정되며, 통로 4 내지 통로 7의 서브셋트는 구획 K에 포함되고 구획 지정자 10에 의해 특정되고, 통로 8 내지 통로 15의 서브셋트는 구획 L에 포함되고 구획 지정자 11에 의해 특정된다. 예시한 구획(1901)은 대표적인 것이며, 간략하게 나타내기 위해, 어레이(104)의 모든 구획(1901)을 나타내지는 않았다.
프로그램 및 프로그램 스레드의 오프라인 분석에 의해 다양한 경향이 관측될 수 있으며, 이들에 대해 효과적인 매핑이 판단될 수 있고, 캐시 메모리(1902)에 제공되어 매핑(1908)을 갱신함으로써, 프로그램이 실행 중일 때의 캐시 메모리(1902)의 효율을 증가시킬 수 있다. 이것은 도 7 내지 9를 참조하여 상기 설명한 것과 유사하다.
도 23을 참조하면, 완전 연관 캐시 메모리(2302)를 나타내는 블록도가 도시되어 있다. 이 완전 연관 캐시 메모리(2302)는, 도 23에서는 인덱스 0 내지 인덱스 511로 나타낸 인덱스를 각각 구비하는 기억 요소(112)로 이루어진 어레이(104)를 포함하지만, 다른 실시예에서는 다른 개수의 기억 요소(112)를 포함해도 된다. 바람직하게는, 완전 연관 캐시 메모리(2302)는 상대적으로 소규모의 캐시 메모리로서 허용가능한 타이밍을 달성할 수 있다. 완전 연관 캐시 메모리(2302)는 연관된 MAT(101)를 갖는 메모리 접근(122)을 수신한다. 완전 연관 캐시 메모리(2302)는 어레이(104)로부터 히트 표시를 수신하는 할당 유닛(106)을 포함한다. 기억 요소(112), 메모리 접근(122), 및 할당 유닛(106)은 특히 언급되는 것을 제외하고는 상기 설명한 것과 유사하다. 어레이(104)의 각각의 기억 요소(112)는 기억 요소(112)의 할당을 촉발하는 메모리 접근의 MAT를 특정하는 대응하는 MAT(2314)를 포함한다.
완전 연관 캐시 메모리(2302)는 또한, MAT와 각각 연관된 카운터(2306)를 포함하며, 이 카운터는 할당 유닛(106)과 통신한다. 각각의 카운터(2306)는 이 카운터(2306)와 연관된 MAT의 MAT(2314)를 갖는 어레이(104)의 유효 엔트리(기억 요소(112))의 개수의 카운트를 유지한다.
완전 연관 캐시 메모리(2302)는 또한, 임계값(2308)을 포함하며, 임계값(2308)은 MAT와 각각 연관되며, 할당 유닛(106)과 통신한다. 각각의 임계값(2308)은 임계값(2308)과 연관된 MAT를 갖는 메모리 접근(122)에 할당될 수 있는 어레이(104)의 유효 엔트리의 최대 개수를 특정한다. 임계값(2308)은 상기 설명한 갱신 입력(126)과 유사한 갱신 입력(126)을 통해 동적으로 갱신 가능하다. 임계값(2308)의 예에 대하여 도 24를 참조하여 이하에 설명한다.
바람직하게는, 완전 연관 캐시 메모리(2302)는 또한, 포인터(2304)를 포함하며, 포인터(2304)는 MAT와 각각 연관되고 할당 유닛(106)과 통신한다. 일실시예에서, 각각의 포인터(2304)는 어레이(104)의 유효 엔트리 중에서 MAT와 연관된 가장 최근에 치환된 엔트리의 인덱스를 특정한다. 이 포인터(2304)는 MAT의 카운트(2306)가 MAT의 임계값(2308)에 도달한 경우에 MAT를 갖는 유효 엔트리에 대하여 라운드 로빈 방식으로 할당을 행하는 데에 사용된다. 다른 실시예에서, 각각의 포인터(2304)는 MAT와 연관된 어레이(104)의 유효 엔트리 중에서 LRU 또는 pLRU의 인덱스를 특정한다. 포인터(2304)는 MAT의 카운트(2306)가 MAT의 임계값(2308)에 도달한 경우에 MAT를 갖는 유효 엔트리에 대하여 LRU 또는 pLRU 방식으로 할당을 행하는 데에 사용된다. 일실시예에서, 일부의 MAT는 포인터(2304)를 하나의 치환 정책에서 사용할 수 있으며, 그 외의 MAT는 포인터(2304)를 다른 치환 정책에서, 바람직하게는 오프라인 분석에 의해 정해지는 것과 같은 가장 효과적인 것을 사용해도 된다. 포인터(2304)는 소망하는 치환 정책을 나타내는 하나 이상의 비트를 포함해도 된다.
할당 유닛(106)은, 완전 연관 캐시 메모리(2302)에서 미스하는 메모리 접근(122)에 따라, MAT(101), 카운터(2306), 임계값(2308), 및 포인터(2304)에 기초하여 치환 인덱스(2316)를 생성한다. 치환 인덱스(2316)는, 이하에 더 상세하게 설명하는 바와 같이, 할당 또는 치환할 기억 요소(112)의 인덱스를 특정한다.
도 24를 참조하면, 일실시예에 따른 도 23의 MAT의 각각의 임계값(2308)에 대한 MAT의 매핑을 도시하고 있다. 도 24에 나타낸 매핑의 예는, 예시를 위해, 표 1에 대응하는 32개의 MAT를 포함하고 있다. 도 24에 나타낸 매핑의 예는 이하의 [표 3]과 같이 재현된다.
메모리 접근 타입 ( MAT ) | 임계값 |
boxpf | 50 |
fp_load | 70 |
fp_store | 70 |
fused_fp_store | 70 |
fused_load | 90 |
fused_store | 90 |
fused_store_aps | 300 |
fused_store_update | 30 |
gpf | 45 |
l1dpf | 35 |
Load | 150 |
load_aps | 44 |
load_descr | 73 |
load_nac | 99 |
load_nt | 90 |
load_store | 786 |
load_supervisor | 321 |
load_zx | 67 |
pf_l1d | 21 |
pf_l2 | 59 |
pf_nt | 102 |
pf_w | 115 |
store | 450 |
store_aps | 33 |
store_mask | 90 |
store_nt | 5 |
store_nt_aps | 45 |
store_push | 56 |
store_supervisor | 88 |
store_update | 98 |
store_update_nac | 33 |
tablewalk | 100 |
도 24(표 3)는 특정 셋트의 MAT 및 각 MAT의 임계값에 대한 MAT의 특정의 매핑을 설명하고 있지만, 본 실시예는 예시적으로만 제시할 뿐이며, 다른 실시예에서는 상이한 셋트의 MAT 및 임계값에 대한 MAT의 상이한 매핑이 가능하다. 실제로, 일실시예에서, 매핑은 도 7 내지 도 9를 참조하여 이하에 설명하는 바와 같이, 현재 실행 중인 프로그램 또는 프로그램 위상에 기초하여, 프로세서의 동작 동안, 동적으로 갱신(예컨대, 도 1의 갱신 입력(126)을 통해)된다.
도 25를 참조하면, 도 1의 캐시 메모리(102)의 일부를 더 상세하게 나타내는 블록도가 도시되어 있다. 도 25의 실시예에서, 32개의 MAT의 각각에 대한 포인터(2304) 및 임계값(2308)의 쌍이 메모리 접근(122)의 MAT 인디케이터(101)의 값에 기초하여 상기 쌍 중의 하나를 선택하는 다중화기(302)에 제공되며, 선택된 포인터(2304) 및 임계값(2308) 쌍은 도 23의 할당 유닛(106)에 제공된다.
또한, 32개의 MAT의 각각의 대한 카운터(2306)가 MAT(101)의 값에 기초하여 카운터(2306) 중의 하나를 선택하는 제2 다중화기(2502)에 제공된다. 선택된 카운터(2304), 카운터(2306), 및 임계값(2308)에 기초하여, 할당 유닛(106)은 도 23의 치환 인덱스(2316)를 생성한다. 할당 유닛(106)은, 또한 예를 들어, 도 27 및 도 30을 참조하여 이하에 더 상세하게 설명하는 바와 같이, 치환 인덱스(2316)의 값에 기초하여, 도 23의 MAT(2314), 카운터(2306), 및 포인터(2304)를 갱신한다.
도 3을 참조하여 상기 설명한 것과 유사하게, 다른 실시예에서는, 도 29 및 도 30을 참조하여 이하에 더 상세하게 설명하는 바와 같이, 캐시 메모리(102)는 많은 개수의 MAT(예컨대, 32개)를 이보다 적은 개수의 MAT 그룹(예컨대, 2개)에 매핑하는 로직을 포함할 수 있다. 예를 들어, 도 25에 나타낸 실시예에서, MAT 그룹 로직(도시 안 됨)은 MAT(101)를 수신하고, 다중화기(302) 및 다중화기(2502)에 대한 선택 입력으로서 제공되는 MAT 그룹 번호를 출력한다. 이것은 카운터(2306), 임계값(2308), 및 포인터(2304)의 개수를 감소시킴으로써 하드웨어 비용을 절감하는 장점이 있으며, MAT(2314)의 기억 요소의 크기를 감소시킬 수 있다.
도 26을 참조하면, 도 23의 캐시 메모리(2302)를 포함하는 프로세서의 동작을 나타내는 흐름도가 도시되어 있다. 처리는 블록(2602)에서 개시한다.
블록(2602)에서, 프로세서는 복수의 MAT(예컨대, 표 1)의 각각을 임계값(예컨대, 도 24의 매핑 및 표 3)에 연관시키는 매핑을 수신한다. 캐시 메모리(102)는 임계값(2308)의 디폴트 매핑으로 제조되는 것이 바람직하다. 임계값(2308)의 디폴트 매핑은 다양한 프로그램을 위해 또는 특히 관심을 갖는 것으로 추정되는 및/또는 캐시 메모리(2302)를 포함하는 프로세서에서 실행될 가능성이 있는 프로그램의 집단을 위한, 캐시 메모리(2302)의 효과적인 동작을 용이하게 하도록 조정된다. 처리는 블록(2604)으로 진행한다.
블록(2604)에서, 프로세서는 도 23의 갱신 입력(126)을 통해 캐시 메모리(2302)의 임계값(2308)을 블록(2602)에서 수신된 매핑과의 매핑을 갱신한다. 바람직하게는, 매핑(2308)은 시스템 초기화 단계에서 또는 운영 체제를 부팅할 때에 시스템 소프트웨어(예컨대, BIOS 또는 운영체제)에 의해 갱신된다. 또한, 바람직하게는, 매핑(2308)은 도 7 내지 도 9를 참조하여 앞서 설명한 바와 같은, 프로그램 유닛 및/또는 프로그램 위상 유닛으로 갱신된다. 처리는 블록(2604)으로 진행한다.
도 27을 참조하면, 도 23의 캐시 메모리(2302)의 동작을 나타내는 흐름도가 도시되어 있다. 처리는 블록(2702)으로 진행한다.
블록(2702)에서, 캐시 메모리(2302)는 이 캐시 메모리(2302)에서 미스하는 메모리 접근(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)은 메모리 접근(122)의 MAT(101)와 일치하는 MAT(2314)를 가진 어레이(104)의 유효 엔트리(112)를 수신한다. 도 23을 참조하여 앞서 설명한 바와 같이, 치환할 엔트리(112)는 다양한 치환 정책에 의해, 바람직하게는 MAT(101)와 연관된 포인터(2304)를 사용하여 선택될 수 있다. 처리는 블록(2708)으로 진행한다.
블록(2712)에서, 할당 유닛(106)은 어레이(104)의 임의의 엔트리(112)에 할당한다. 사용되는 치환 정책은 본 명세서에 개시된 것들 중 임의의 것이 될 수 있다. 일실시예에서, 완전 연관 캐시 메모리(2302)는 MAT와 상관없이 어레이(104)의 유효 엔트리 중에서 가장 최근에 치환된 엔트리의 인덱스를 지시하는 전역적 포인터(도시 안 됨)를 유지한다. 바람직하게는, 할당 유닛(106)은 무효이거나 또는 메모리 접근(122)의 MAT(101)을 갖지 않는다고 포인터에 의해 지시된 이후에, 다음 엔트리(112)를 찾는다.
블록(2714)에서, 할당 유닛(106)은 메모리 접근(122)의 MAT(101)와 연관된 카운터(2306)를 증가시킨다. 처리는 블록(2716)으로 진행한다.
블록(2716)에서, 할당 유닛(106)은 치환된 엔트리(112)가 유효한지를 판단하여, 유효한 경우에는, 처리는 블록(2718)으로 진행하고, 그렇지 않은 경우에는, 처리는 종료한다.
블록(2718)에서, 할당 유닛(106)은 치환된 엔트리(112)의 MAT(2314)와 연관된 카운터(2306)를 감소시킨다. 처리는 블록(2718)에서 종료한다.
도 28을 참조하면, 도 23의 완전 연관 캐시 메모리(2302)의 동작을 나타내는 흐름도가 도시되어 있다. 처리는 블록(2802)에서 개시한다.
블록(2802)에서, 완전 연관 캐시 메모리(2302)는, 예를 들어, 완전 연관 캐시 메모리(2302)로부터 캐시 라인의 축출 또는 스누프에 따라, 엔트리(112)를 무효화한다. 처리는 블록(2804)으로 진행한다.
블록(2804)에서, 완전 연관 캐시 메모리(2302)는 무효화된 엔트리(112)의 MAT(2314)와 연관된 카운터(2306)를 감소시킨다. 처리는 블록(2804)에서 종료한다.
도 29를 참조하면, 일실시예에 따른, MAT의 MAT 그룹(2909)에 대한 매핑(2908)과 MAT 그룹(2909)의 임계값(2911)에 대한 매핑을 나타내는 블록도가 도시되어 있다. 도 29의 예에는, 4개의 MAT 그룹 0 내지 3이 있다. 도 29의 임계값(2911)은 도 23의 임계값(2308)과 유사하지만, 32개의 MAT가 아닌, 4개의 MAT 그룹(2909)이 대응한다는 점이 상이하다. 도 29에 나타낸 MAT 그룹(2909)에 대한 MAT의 매핑의 예는, [표 1]에 대응하는 32개의 MAT를 포함하는데, 설명을 위한 것이다. 도 29의 매핑의 예를 이하의 [표 4]에 재현한다.
메모리 접근 타입 ( MAT ) | MAT 그룹 2909 |
Boxpf | 0 |
fp_load | 1 |
fp_store | 1 |
fused_fp_store | 1 |
fused_load | 1 |
fused_store | 1 |
fused_store_aps | 0 |
fused_store_update | 2 |
gpf | 3 |
l1dpf | 0 |
Load | 1 |
load_aps | 0 |
load_descr | 3 |
load_nac | 3 |
load_nt | 3 |
load_store | 1 |
load_supervisor | 2 |
load_zx | 1 |
pf_l1d | 1 |
pf_l2 | 1 |
pf_nt | 1 |
pf_w | 1 |
store | 1 |
store_aps | 0 |
store_mask | 3 |
store_nt | 3 |
store_nt_aps | 3 |
store_push | 2 |
store_supervisor | 2 |
store_update | 2 |
store_update_nac | 3 |
tablewalk | 3 |
임계값(2911)에 대한 MAT 그룹의 매핑에 의해, 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 그룹의 임계값에 대한 상이한 매핑이 가능하다. 실제로, 일실시예에서, 매핑은 도 7 내지 도 9를 참조하여 이하에 설명하는 바와 같이, 현재 실행 중인 프로그램 또는 프로그램 위상에 기초하여, 프로세서의 동작 동안, 동적으로 갱신(예컨대, 도 1의 갱신 입력(126)을 통해)된다. 또한, 상이한 개수의 MAT 그룹(2909)을 채택해도 된다.
도 25를 참조하여 앞서 설명한 바와 같이, MAT 그룹(2909)을 사용하기 위해 완전 연관 캐시 메모리(2302)에 추가의 로직이 포함됨으로써, 완전 연관 캐시 메모리(2302)의 적은 환경설정과 효율을 위한 교환에 요구되는 하드웨어의 양을 감소시키는 장점을 가질 수 있다. 예를 들어, 바람직하게는, 완전 연관 캐시 메모리(2302)는 카운터(2306), 임계값(2308), 및 포인터(2304)의 가치가 있는 개수의 MAT 그룹(2909)만을 포함하고, 각 엔트리의 MAT(2314)는 엔트리(112)의 MAT 그룹을 유지한다.
도 30을 참조하면, 도 23의 캐시 메모리(2302)의 동작을 나타내는 흐름도가 도시되어 있다. 처리는 블록(3002)에서 개시한다.
블록(3002)에서, 캐시 메모리(2302)는 캐시 메모리(2302)에서 미스하는 메모리 접근(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)은 메모리 접근(122)의 MAT 그룹(2909)과 일치하는 MAT 그룹(2314)을 갖는 어레이(104)의 유효 엔트리(112)를 치환한다. 도 23을 참조하여 앞서 설명한 바와 같이, 치환될 엔트리(112)는 다양한 치환 정책, 바람직하게는 MAT 그룹(2909)과 연관된 포인터(2304)를 사용하여 선택될 수 있다. 처리는 블록(3008)에서 종료한다.
블록(3012)에서, 할당 유닛(106)은 도 27의 블록(2712)을 참조하여 앞서 설명한 것과 유사하게, 어레이(104)의 임의의 엔트리(112)에 할당한다. 처리는 블록(3014)으로 진행한다.
블록(3014)에서, 할당 유닛(106)은 메모리 접근(122)의 MAT 그룹(2909)과 연관된 카운터(2306)의 값을 증가시킨다. 처리는 판단 블록(3016)으로 진행한다.
판단 블록(3016)에서, 할당 유닛(106)은 치환된 엔트리(112)가 유효한지를 판단한다. 유효하다고 판단되면, 처리는 블록(3018)으로 진행하고, 그렇지 않으면, 처리는 종료한다.
블록(3018)에서, 할당 유닛(106)은 치환된 엔트리(112)의 MAT 그룹(2909)과 연관된 카운터(2306)의 값을 감소시킨다. 처리는 블록(3018)에서 종료한다.
도 29 및 도 30의 실시예는 캐시의 특정 레벨에 대한 효율을 높이기 위해 채택될 수 있는데, 2개의 MAT 그룹 중의 제1 MAT 그룹이 완전 연관 캐시 메모리(2302)의 적어도 임계값을 할당(예컨대, 80%)하는 것이 가능하도록 버짓될 수 있기 때문이다. 제1 MAT 그룹은 모든 데이터 관련 MAT를 포함할 수 있으며, 제2 MAT 그룹은 모든 코드 관련 MAT(예컨대, 코드 페치 및 코드 프리페치)를 포함할 수 있다. 이것은, 데이터, 예를 들어, 스트리밍 데이터가 개인 명령 캐시와 경쟁하지 않도록 함으로써, 완전 연관 캐시 메모리(2302) 내에 코드를 갖는 캐시 라인을 고정시키는 데에 유용할 수 있다.
도 31을 참조하면, 셋트 연관 캐시 메모리(3102)를 나타내는 블록도가 도시되어 있다. 도 31의 캐시 메모리(3002)는 도 1의 캐시 메모리(102)와 유사하므로, 유사한 도면 부호가 붙은 구성요소도 유사하다. 도 31의 캐시 메모리(3002)는 도 1의 매핑(108)과는 다른 매핑(3108)을 포함한다. 도 31의 매핑(3108)은 도 1 내지 도 22E에 관련된 실시예의 다양한 매핑 중의 임의의 것을 포함할 수 있지만, 도 31의 매핑(3108)은 여러 복수의 MAT의 MAT 우선순위에의 매핑(3108)을 포함하며, 그 예를 도 32에 나타낸다. 또한, 각각의 유효 캐시 라인에 대한 MAT(3114)는 어레이(104)에 저장된다. 즉, 기억 요소(112)가 캐시 라인에 대해 할당된 경우, 할당을 촉발한 메모리 접근(122)의 MAT 그룹(101)이 캐시 라인에 대한 기억 요소(112)에 기억된다. 유리하게는, MAT 우선순위에 대한 MAT의 매핑(3108)에 따른 MAT(3114)의 기억에 의해, 캐시 메모리(3102)는 특히, 도 33을 참조하여, 이하에 더 상세하게 설명하는 바와 같이, 할당할 선택된 셋트의 통로를 선택하는 치환 정책에서 어레이(104)의 선택된 셋트의 유효 캐시 라인의 MAT(3114)를 포함할 수 있다.
도 32를 참조하면, 일실시예에 따른 도 31의 MAT의 MAT 각각의 우선순위(3108)에 대한 매핑이 도시되어 있다. 도 32에 나타낸 매핑의 예는, 설명을 위한, [표 1]에 대응하는 32개의 MAT를 포함한다. 도 32의 매핑의 예를 이하의 [표 5]에 재현되어 있다.
메모리 접근 타입 (MAT) | MAT 우선순위 |
boxpf | 6 |
fp_load | 1 |
fp_store | 1 |
fused_fp_store | 1 |
fused_load | 3 |
fused_store | 1 |
fused_store_aps | 0 |
fused_store_update | 4 |
gpf | 3 |
l1dpf | 5 |
Load | 1 |
load_aps | 3 |
load_descr | 3 |
load_nac | 4 |
load_nt | 3 |
load_store | 1 |
load_supervisor | 2 |
load_zx | 1 |
pf_l1d | 7 |
pf_l2 | 1 |
pf_nt | 6 |
pf_w | 1 |
store | 1 |
store_aps | 0 |
store_mask | 3 |
store_nt | 2 |
store_nt_aps | 3 |
store_push | 2 |
store_supervisor | 7 |
store_update | 2 |
store_update_nac | 3 |
tablewalk | 3 |
도 32(표 5)는 특정 셋트의 MAT 및 MAT의 이들 MAT 각각의 MAT 우선순위에 대한 특정의 매핑을 설명하고 있지만, 본 실시예는 설명을 위한 예로서 제공되어 있으며, 상이한 셋트의 MAT 및 MAT의 MAT 우선순위에 대한 상이한 매핑을 가진 다른 실시예도 가능하다. 실제로, 일실시예에서, 매핑은 도 7 내지 도 9를 참조하여 이하에 설명하는 바와 같이, 현재 실행 중인 프로그램 또는 프로그램 위상에 기초하여, 프로세서의 동작 동안, 동적으로 갱신(예컨대, 도 1의 갱신 입력(126)을 통해)된다. 또한, 상이한 개수의 MAT 그룹(2909)을 채택해도 된다.
도 33을 참조하면, 캐시 라인의 MAT를 고려한 캐시 라인 치환 정책을 나타내는 흐름도가 도시되어 있다. 처리는 블록(3302)에서 개시한다.
블록(3302)에서, 캐시 메모리(3012)는 캐시 메모리(3102)에서 미스하는 메모리 접근(122)을 수신한다. 메모리 접근(122) 인덱스는 어레이(104)의 엔트리(112)를 선택한다. 메모리 접근(122)은 MAT(101)를 특정한다. 처리는 블록(3304)으로 진행한다.
블록(3304)에서, 할당 유닛(106)은 선택된 셋트에 대한 치환 정책에 따라 선택된 셋트에서 통로의 치환할 가장 적격인 통로 및 두 번째로 적격인 통로를 판단한다. 예를 들어, 치환 정책이 LRU/pLRU이면, 할당 유닛(106)은 치환 비트(114)에 따라 선택된 셋트의 LRU 통로 및 두 번째로 적격인 LRU 통로를 판단한다. 다른 예로서, 치환 정책이 라운드 로빈인 경우, 할당 유닛(106)은 치환 비트(114) 내의 라운드 로빈 포인터에 의해 지시된 통로 및 라운드 로빈 순서 방향에서 다음 통로를 판단한다. 다른 예로서, 치환 정책이 랜덤인 경우, 할당 유닛(106)은 2개의 통로를 랜덤으로 판단한다. 캐시 메모리(3012)가 통로, 셋트 그룹, 청크, 또는 구획에 의해 버짓되는 실시예에서, 할당 유닛(106)이 선택된 셋트의 통로의 서브셋트만을 고려하도록 하면, 할당 유닛(106)은 통로의 서브셋트 내의 가장 적격인 및 두 번째로 적격인 통로의 MAT 우선순위를 검사한다. 처리는 블록(3306)으로 진행한다.
블록(3306)에서, 할당 유닛(106)은 블록(3304)에서 가장 적격인 통로의 MAT(3114)와 두 번째로 가장 적격인 통로의 MAT(3114)를 검사하고, 2개의 MAT(3114)의 상대적 MAT 우선순위(3277)를 비교한다. 처리는 판단 블록(3308)으로 진행한다.
판단 블록(3308)에서, 가장 적격인 통로의 MAT 우선순위(3327)가 두 번째로 가장 적격인 통로보다 높다면, 처리는 블록(3312)으로 진행하고, 그렇지 않다면, 처리는 블록(3314)으로 진행한다. 일실시예에서, 할당 유닛(106)은, 단지 가장 적격인 통로의 MAT 우선순위(3327)가 두 번째로 가장 적격인 통로보다 큰지를 검사하는 것이 아니라, 가장 적격 및 두 번째로 가장 적격인 통로의 MAT 우선순위(3327) 간의 차이를 계산하고, 그 차이가 임계값보다 큰지 여부를 판단한다. 선택된 셋트(또는 그 관련 서브셋트)에 무효 통로가 있으면, 할당 유닛(106)은 가장 또는 두 번째로 가장 적격인 통로를 치환하는 것이 아니라, 무효 통로를 할당한다.
블록(3312)에서, 할당 유닛(106)은 가장 적격인 통로가 아닌 두 번째로 가장 적격인 통로를 치환한다. 처리는 블록(3316)으로 진행한다.
블록(3314)에서, 할당 유닛(106)은 가장 적격인 통로를 치환한다. 처리는 블록(3316)으로 진행한다.
블록(3316)에서, 할당 유닛(106)은 치환된 통로 내의 MAT(3114)를 메모리 접근(122)의 MAT(101)로 갱신한다. 이에 의하면, 어레이(104)의 엔트리의 MAT(3114)가 유지된다. 처리는 블록(3318)으로 진행한다.
블록(3318)에서, 할당 유닛(106)은 메모리 접근(122)의 MAT(101)를 검사하고, MAT(101)이 상대적으로 낮은 우선순위를 가졌는지, 예를 들어 임계값보다 작은지 여부를 판단한다. 예를 들어, 도 32의 실시예에서, 할당 유닛(106)은 메모리 접근(122)의 MAT(101)가 3보다 작은지 여부를 판단할 수 있다. 처리는 판단 블록(3322)으로 진행한다.
판단 블록(3322)에서, 메모리 접근(122)의 MAT(101)가 상대적으로 낮은 우선순위를 가졌다면, 처리는 블록(3326)으로 진행하고, 그렇지 않다면, 블록(3324)으로 진행한다.
블록(3324)에서, 할당 유닛(106)은 치환 방식에 따라 치환 비트(114)의 최소 적격 위치(least eligible position)에서 치환된 통로를 삽입한다. 예를 들어, LRU/pLRU 방식의 경우, 할당 유닛(106)은 치환된 통로를 가장 최근에 사용된 위치에 삽입한다. 다른 예로서, 라운드 로빈 방식의 경우, 할당 유닛(106)은 치환된 통로 직전의 라운드 로빈 포인터를 갱신한다.
블록(3326)에서, 할당 유닛(106)은 치환된 통로를, 치환 방식에 따른, 바람직하게는 메모리 접근(122)의 MAT 우선순위(3277)가 얼마나 낮은지에 기초하여, 치환 비트(114)의 적절하게 적격인 위치에 삽입한다. 예를 들어, LRU/pLRU 방식의 경우, 할당 유닛(106)은 치환된 통로를 중간 위치에 삽입한다. 바람직하게는, MAT 우선순위(3277)가 낮을수록, 할당 유닛(106)은 치환된 통로를 중간 위치에 더 가깝게 삽입하고, MAT 우선순위(3277)가 높을수록, 할당 유닛(106)은 치환된 통로를 중간 위치에서 더 멀리 그리고 가장 최근에 사용된 위치에 더 가깝게 삽입한다. 일실시예에서, 매우 낮은 MAT 우선순위(3277)의 경우(예컨대, 0의 우선순위를 갖는 매우 낮은 신뢰도를 가진 프리페치), 할당 유닛(106)은 치환된 통로를 LRU 위치 또는 그 다음 LRU 위치에 삽입한다. 다른 예로서, 라운드 로빈 방식의 경우, 할당 유닛(106)은 MAT 우선순위(3327)가 얼마나 낮은지에 따라, 치환된 통로에서 더 먼 위치의 라운드 로빈 포인터를 갱신한다. 일실시예에서, 할당 유닛(106)은, 치환된 통로를 삽입할 위치를 결정할 때의 최소 적격 위치 부근의 하나 이상의 다른 통로의 MAT(3114)와 연관된 상대적 MAT 우선순위(3327)를 고려한다. 처리는 블록(3326)에서 종료한다.
2개의 가장 적격인 통로를 고려한 실시예에 대하여 설명하였지만, 더 많은 수의 가장 적격인 통로를 고려한 실시예도 가능하다. 예를 들어, 세 번째로 가장 적격인 통로의 MAT 우선순위가 두 번째로 가장 적격인 통로보다 작다면, 할당 유닛(106)은 그 세 번째로 가장 적격인 통로를 치환한다.
캐시 메모리를 여러 치환 정책을 가진 통로, 셋트 그룹, 청크, MAT 그룹 임계값, 구획 등에 의해 버짓하기 위한 매핑 등의 본 명세서에 개시된 다양한 방식의 캐시 메모리는 정적 구성, 동적 구성, 또는 이들의 조합에 의해 구성될 수 있다. 일반적으로 말해서, 정적 구성은 프리실리콘이다. 즉, 설계자는, 양호한 구성, 즉 일반적으로 프로세서, 특히 캐시 메모리의 성능을 잠재적으로 향상시키는 구성을 결정하기 위해, 바람직하게는, 프로세서 설계의 소프트웨어 시뮬레이션에 의한 도움을 받는 직관을 채택한다. 프로세서의 성능 향상에 의해, 프로세서가 프로그램을 실행하는 속도가 향상(예컨대, 명령어 레이트당 클록의 감소 클록 레이트당 명령어 수의 증가)되거나 및/또는 소비 전력이 감소한다. 프로그램은 운영체제, 실행 가능한 프로그램(예컨대, 애플리케이션, 유틸리티, 벤치마크), 동적 링크 라이브러리 등이 될 수 있다. 소프트웨어 시뮬레이션은, 예를 들어, 도 34 내지 36을 참조하여 이하에 설명하는 바와 같이, 특히 캐시 메모리 구성을 참조하여, 프로세서의 성능을 향상시키는 것이 바람직한 프로그램의 실행의 오프라인 분석을 수행하도록 채택될 수 있다. 바람직하게는, 설계자는 일반적으로 프로그램의 셋트 전체가 양호하게 되는 경향이 있는 정적 구성을 결정한다. 이어서, 설계자는 양호한 정적 구성을 실리콘으로 제조되는 설계에 포함시킨다.
이에 대하여, 동적 구성을 결정하기 위한 분석은 포스트실리콘으로 이루어진다. 즉, 프로세서를 제조한 후, 설계자는 정적이 아닌 구성 또는 실리콘으로 제조되는 디폴트 구성으로 프로그램을 실행할 때에 프로세서의 수행 방법을 결정하기 위해 여러 종류의 오프라인 분석을 수행한다. 포스트실리콘 검사는, 예를 들어, 도 37을 참조하여 이하에 설명하는 바와 같이, 구성 매트릭스에 대한 자동화 성능 회귀를 수행하고 회귀 성능 데이터를 분석하는, 보다 엄격해서 강제적이기까지 한 기법을 포함할 수 있다. 설계자는, 예를 들어, 전역적 최대치가 아닌 국부적 최대치를 피하도록 시도하기 위해, 포스트실리콘 검사에 대한 초기 시드로서 프로그램의 집단에 대한 프리실리콘 검사의 결과를 채택해도 된다.
검사가 프리실리콘인지 아니면 포스트실리콘인지 여부에 상관없이, 동적 구성 검사에 의해, 프로그램 유닛 또는 프로그램 위상 유닛으로 양호한 구성이 결정된다. 이어서, 시스템, 예를 들어, 장치 드라이버가 공지의 프로그램이 프로세서상에서 실행(즉, 분석이 이루어졌으며 양호한 구성이 알려져 있는 프로그램)되고 있는 것을 검출하면, 시스템은 양호함 프로그램 특정 구성을 프로세서에 제공하고, 프로세서는 프로세서의 실행 중에 캐시 메모리를 프로그램 특정 구성에 의해 동적으로 갱신한다. 바람직하게는, 프로그램 특정 구성은 프로그램의 여러 위상에 대한 상이한 구성을 포함하며, 프로세서는 위상이 변화하는 것을 검출하고, 위상 특정 구성에 따라 구성을 동적으로 갱신한다. 이에 대해서는, 예를 들어, 도 36을 참조하여 설명한다.
미리결정된 일련의 특성에 대한 프로그램 위상은 이들 특성 중에서 일관된 행동의 특성을 갖는 컴퓨터 프로그램의 서브셋트이다. 예를 들어, 관련 특징이 분기 예측률 및 캐시 히트율이라고 가정하면, 프로그램의 위상은 분기 예측률 및 캐시 히트율이 일관되는 프로그램의 실행시간 행동의 서브셋트이다. 예를 들어, 오프라인 분석은 특정의 데이터 압축 프로그램이 2개의 위상, 즉 사전 구성 위상과 사전 조회 위상을 갖는다. 사전 구성 위상은 상대적으로 낮은 분기 예측률과 상대적으로 높은 캐시 히트율을 가지며, 이것은 더 많은 스트링 셋트에 공통인 서브스트링 셋트의 구축에 부합하는 반면에, 사전 조회 위상은 상대적으로 높은 분기 예측률과 상대적으로 낮은 캐시 히트율을 가지며, 이것은 캐시의 크기보다 더 큰 사전에서 서브스트링을 조회하는 것에 부합한다.
일실시예에서, 오프라인 분석은 그 이름이 의미하는 바와 같이, 미래를 예측하는 "오라클 캐시"(oracle cache)의 개념을 이용해서 수행된다. 캐시 메모리의 공간이 제한되어 있다면, 오라클 캐시는 어느 시점에서 캐시 내에 있어야 하는 가장 유용한 데이터를 예측한다. 히트율이 가장 높은 캐시의 콘텐츠의 사이클 유닛 또는 명령어 유닛의 스냅샷(snapshot)으로 개념화될 수 있다.
먼저, 프로그램 실행을 위한 오라클 캐시 스냅샷의 시퀀스를 생성하고, 이 스냅샷 내의 각각의 캐시의 할당을 생성하는 메모리 접근의 MAT를 유지한다. 이어서, 각각의 MAT 또는 MAT 그룹에 대해, 도 38에 나타낸 예에서, MAT의 메모리 접근에 따라 할당된 캐시 라인에 의해 점유되는 캐시의 비율을 나타내는 각각의 스냅샷에 대한 파이 차트를 작성한다. 이어서, 프로그램의 다음 실행에서, 프로세서는 파이 차트의 시퀀스로부터 MAT 백분율을 사용하여 캐시를 연속적으로 재버짓화(통로, 셋트 그룹, 청크, 구획, 임계값, MAT 우선순위 등에 관하여)한다.
클록 사이클 또는 명령어의 분해정도에 대한 재버짓화가 불가능한 경우, 훨씬 더 긴 시간 동안, 예를 들어, 프로그램 전체 또는 프로그램 위상 전체 동안, 경향에 대한 파이 차트 시퀀스를 검사한다. 각각의 MAT에 대한 시퀀스(프로그램 또는 위상의 시퀀스)에서의 모든 파이 차트의 평균을 구하고, 평균을 구한 파이 차트를 버짓화한다.
대체로, 오라클 캐시의 개념은 모든 메모리 접근을 미리 실행할 수 있다는 것으로서, 모든 메모리 접근을 미리 알 수 있기 때문이다. 프로그램을 실행하게 되면, 오라클 캐시는 임의의 시점에서 캐시 내에 있어야 할 최적의 캐시 라인 셋트를 예측한다. 예를 들어, 도 35에 나타낸 그래프에서, 오라클 캐시는 최종 접근 이후에 캐시되지 않은 MAT 1의 캐시 라인(실선으로 나타낸 상단에서 두 번째 라인)을 단 기간에 예측한다. 이러한 분석을 이용하여, MAT 유닛으로 캐시 버짓화 및 치환 정책에 대한 관측을 유도한다.
도 34를 참조하면, 프로그램 및 프로그램 위상에 대한 매핑의 생성을 나타내는 흐름도가 도시되어 있다. 처리는 블록(3402)에서 개시한다.
블록(3402)에서, 설계자는, 바람직하게는 자동으로, 프로그램을 실행하고, 메모리 접근(122)을 캐시 메모리(예컨대, 102, 1002, 1402, 1502, 1702, 1902, 2302, 3102)에 기록한다. 이것은 프로그램에 의해 이루어진다. 바람직하게는, 캐시 라인의 할당, 히트 및 축출이 기록된다. 메모리 접근(122)의 메모리 어드레스, MAT(101), 및 시간(예를 들어, 상대적 클록 사이클)이 기록된다. 처리는 블록(3404)으로 진행한다.
블록(3404)에서, 설계자는, 바람직하게는 자동으로, 블록(3402)에서 기록된 정보를, 정규적으로 분석하고, 예를 들어, 도 36을 참조하여 이하에 설명하는 바와 같이, 프로그램을 위상으로 분리시키는 명백한 트렌드를 인식한다. 예를 들어, MAT(101)에 의한 작업 셋트 크기, MAT(101)에 의한 평균 캐시 라인 수명, 및 MAT(101)에 의한 평균 히트율에 대한 명백한 트랜드가 인식될 수 있다. 처리는 블록(3406)으로 진행한다.
블록(3406)에서, 설계자는, 바람직하게는 자동으로, 블록(3404)에서 수행된 분석에 기초하여 상이한 프로그램 위상에 대한 매핑 또는 구성을 작성한다. 예를 들어, 매핑 또는 구성은, 통로에 의한 캐시 버짓 매핑(예를 들어, 도 2의 108), 셋트 그룹에 의한 캐시 버짓 매핑(예를 들어, 도 10, 14 또는 15의 1008), 청크에 의한 캐시 버짓 매핑(예를 들어, 도 15 또는 17의 1508 또는 1708), 이종 치환 정책을 지원하는 캐시 버짓 매핑(예를 들어, 도 19-22E의 1908), MAT 기반의 엔트리 할당 임계값(예를 들어, 도 23 내지 24의 2308), MAT 대 MAT 그룹 및 MAT 그룹 대 임계값 매핑(예를 들어, 도 29의 2908), MAT 우선순위 매핑(예를 들어, 도 31 및 32의 3108)이 될 수 있다. 일실시예에서, 매핑 또는 구성을 판단하기 위한 분석은, 도 35 내지 38을 참조하여 이하에 설명하는 것과 유사한 분석을 포함할 수 있다. 일부 프로그램은 구별 가능한 위상로 분리될 가능성이 높은 명백한 트랜드를 나타내지 않는 경우가 있는데, 단일의 매핑 또는 구성이 전체 프로그램에 대해 충분한 경우에 그렇다. 처리는 블록(3406)에서 종료한다.
도 35를 참조하면, 메모리 접근 그래프 및 이 그래프로부터 추출된 데이터를 나타내고 있다. 그래프는 도트로 나타낸 메모리 접근을 표시하고 있으며, 여기서 시간은 수평축상에 나타낸 독립 변수이고, 메모리 어드레스는 수직축상에 나타낸 종속 변수이다. 수평 라인은 특정된 메모리 어드레스의 개별의 캐시 라인에 대응한다. 해당 라인의 좌측 에지는 캐시 라인의 캐시 메모리로부터의 축출을 나타내며, 라인의 우측 에지는 캐시 라인의 캐시 메모리로부터의 축출을 나타낸다. 각각의 캐시 라인은 연관된 MAT를 가지며, 도 35의 예에서는, MAT 1, MAT 2, MAT 3, 및 MAT 4로 표시한다. 도 35의 예에서는, 6개의 캐시 라인을 나타내고 있으며, 이 중 2개는 연관된 MAT 1을 가지며, 2개의 연관된 MAT 2를 가지며, 하나는 연관된 MAT 3을 가지며, 하나는 연관된 MAT 4를 갖는다.
그래프의 아래에는, 8개의 상이한 일정한 시간 간격마다, 총 작업 셋트 크기 및 MAT의 각각의 작업 셋트 크기를 나타내고 있다. 시간 간격은, 도 36을 참조하여 이하에 설명하는 바와 같은 기본적인 블록 전송과 상관될 수 있으며, 프로그램 위상, 및 프로그램 위상의 각각에 대한 구성 또는 매핑을 판단하는 데에 사용될 수 있다. 예를 들어, 특정의 프로그램 또는 위상 동안, 구성 또는 매핑은 MAT에 대한 많은 통로, 셋트 그룹, 청크, 또는 구획을 상대적으로 더 큰 작업 셋트 크기로 버짓화하거나, MAT에 대한 더 적은 수의 통로를 상대적으로 더 작은 작업 셋트 크기로 버짓화하거나, 최소한 작업 셋트 크기를 고려할 수 있다. 이에 대해서는, 도 35의 각각의 MAT에 나타내고 있다.
또한, 평균 캐시 라인 수명 등과 같이 개별의 MAT당 얼마나 긴 캐시 라인이 사용되는 경향이 있는지에 대한 관측이 이루어질 수 있다. 평균 캐시 라인 수명은 해당 위상에 대한 각각의 MAT의 모든 캐시 라인을, MAT의 캐시 라인의 개수로 나눈 수명(할당부터 시작해서 축출까지)의 합계로서 산출된다. 이 정보는 캐시 메모리의 치환 정책에 영향을 주도록 사용될 수 있다.
오라클 캐시에 의해 캐시 메모리에 포함되는 의도한 셋트 및 통로의 개수에 대응하도록 캐시된 라인의 개수가 제한되면, 캐시 버짓화 및 평균 수명 관측의 정확도가 증가할 수 있다. MAT당 캐시 라인 히트 등의 다른 지표를 수집하는 것도 가능하다.
도 36을 참조하면, 프로그램의 위상 분석을 나타내는 흐름도가 도시되어 있다. 위상 분석은 프로세서의 캐시 메모리 또는 프리페처 등의 프로세서의 구성 가능한 특징의 양호한 구성 또는 매핑을 판단하기 위해 사용될 수 있는 오프라인 분석의 일종이다. 처리는 블록(3602)에서 개시한다.
블록(3602)에서, 프로그램을 실행할 때에 프로세서에 의해 성능을 향상시키는 것이 바람직한 프로그램이 분석되고 분리되어 상태도를 생성한다. 상태도의 노드는 프로그램의 기본 블록이다. 기본 블록은 프로그램 제어 명령어(예컨대, 분기, 점프, 호출, 리턴) 사이의 명령어 시퀀스이다. 상태도의 양 에지는 각각, 이하에 설명하는 바와 같이, 에지가 안내하는 타겟이 되는 기본 블록 및 위상 식별자가 될 수 있는 상태 변경 정보이다. 위상 식별자는 명령어 포인터(instruction pointer: IP), 제어 전송 명령어의 프로그램 카운터(PC), 제어 전송 명령어의 타겟 어드레스, 및/또는 제어 전송 명령어의 호출 스택을 포함할 수 있다. 호출 스택은 호출의 리턴 어드레스 및 파라미터를 포함할 수 있다. 프로그램 위상은 프로그램의 하나 이상의 기본 블록을 구비하는 부분이다. 처리는 블록(3604)으로 진행한다.
블록(3604)에서, 프로그램은 캐시 메모리 매핑, 프리페처 MAT 스코어, 및 캐시 구성 모드 등의, 프로세서의 구성 가능한 특징에 관련된 특성을 분석하도록 계측된다. 이러한 특성의 예로는, 캐시 히트율, 분기 예측 정확도, 작업 셋트 크기, 평균 캐시 라인 수명, 및 캐시 오염(예컨대, 프리페치되었지만 사용된 적은 없는 캐시 라인의 수) 등을 예로 들 수 있다. 처리는 블록(3606)으로 진행한다.
블록(3606)에서, 프로그램은, 예를 들어, 캐시 메모리 및/또는 프리페처의 미리결정된 구성으로 실행되며, 프로그램의 위상은 블록(3604)의 분석된 특성에서의 정상적인 상태 동작을 관측함으로써 식별된다. 예를 들어, 캐시 히트율이 분석된 관심 특성이고, 캐시 히트율이 97% 내지 40%의 범위에서 변화한다고 가정한다. 캐시 히트율의 변경은 캐시 메모리 구성이, 상기 변경에 앞서, 프로그램에 대해 양호했다는 것을 나타내며, 변경 후에는 프로그램에 대해 양호하지 않았다는 것을 나타내는 경향을 가진다. 따라서, 캐시 히트율의 변경에 앞서 기본 블록의 시퀀스는 하나의 위상으로 식별될 수 있으며, 캐시 히트율의 변경 이후의 기본 블록의 시퀀스는 제2 위상으로서 식별될 수 있다. 다른 예로서, 상이한 MAT의 작업 셋트 크기가 관련있는 분석된 특성이라고 가정하면, 상이한 MAT 또는 MAT 그룹에 대한 작업 셋트 크기가 상당히 크게 변이하는 것에 의해, 프로그램 내의 바람직한 위치를 시그널링하여 위상 변화를 식별할 수 있다. 처리는 블록(3608)으로 진행한다.
블록(3608)에서, 일단 위상이 식별되면, 각각의 위상에 대하여, 양호한 구성, 매핑 또는 구성값이 결정된다. 예를 들어, 도 34 및 35를 참조하여 앞서 설명한 바와 같이 또는 도 37을 참조하여 이하에 설명하는 방법 등 다양한 오프라인 분석 기법이 사용될 수 있다. 처리는 블록(3612)으로 진행한다.
블록(3612)에서, 위상 식별자는 위상 변경에 상관된다. 분석된 특성에서의 변경이 발생하는, 앞서 설명한 기본적인 블록 전이의 상태 변경 정보 또는 잠재 위상 식별자는 프로그램에 대해 블록(3608)에서 판단된 양호한 구성값과 함께 기록됨으로써, 정보는, 예를 들어 장치 드라이버에 의해 분석된 프로그램이 실행할 준비가 되었다고 검출될 때에 프로세서에 제공될 수 있다. 처리는 블록(3614)으로 진행한다.
블록(3614)에서, 분석된 프로그램과 연관된 정보를 수신한 이후, 프로세서는 도 7 내지 9를 참조하여 앞서 설명한 바와 같이 도 8의 위상 식별자(802)를 위상 검출기(804)에 로드한다. 처리는 블록(3614)에서 종료한다.
도 37을 참조하면, 프로세서, 예를 들어, 캐시 메모리 및 프리페처의 구성 가능한 특징에 대한 양호한 구성 또는 매핑을 판단하기 위한 강제 방법을 나타내는 흐름도가 도시되어 있다. 개시한 방법은 "좌표 하강" 최적화 알고리즘의 특징을 채택한다. 처리는 블록(3702)에서 개시한다.
블록(3702)에서, 각각의 프로그램 또는 프로그램 위상에 대하여, 프로세서의 성능을 향상시키는 것이 바람직하고 이를 위해 식별된 프로그램의 리스트에서, 본 방법은 양호한 구성이 판단(예컨대, 최적의 현재 구성(이하 참조)이 상대적으로 긴 시간 동안 변경되지 않았다)될 때까지 또는 리소스가 만료(예컨대, 시간 및/또는 컴퓨팅 리소스)될 때까지 블록(3704-3716)을 반복한다. 처리는 블록(3704)으로 진행한다.
블록(3704)에서, 현재의 최적 구성은 디폴트 구성, 예를 들어, 캐시 메모리 또는 프리페처의 디폴트 매핑으로 설정되는데, 디폴트 구성은, 일실시예에서, 단순히 프로세서가 제조되는 구성이다. 처리는 블록(3706)으로 진행한다.
블록(3706)에서, 각각의 구성 파라미터에 대하여, 블록(3708-3712)이 수행된다. 구성 파라미터의 예로는, 피처(feature)를 온 또는 오프로 하는 단일의 구성 비트가 있다. 구성 파라미터의 다른 예로는, 예를 들어, 벡터(304), 셋트 그룹 선택 로직(1106/2106), 구획 지정자(2001), 임계값(2308), MAT 대 MAT 그룹 및 MAT 그룹 대 임계값 매핑(2908), MAT 대 MAT 우선순위 매핑(3108) 등의 구성 필드가 있다. 처리는 블록(3708)으로 진행한다.
블록(3708)에서, 블록(3706)의 구성 파라미터 값의 합리적인 셋트의 각각의 값에 대하여, 블록(3712-3716)을 수행한다. 구성 파라미터의 값의 합리적인 셋트는 구성 파라미터의 크기, 파라미터의 간주된 중요성, 및 그 값을 반복하는데 요구되는 리소스의 양에 따라 달라진다. 예를 들어, 단일 구성 비트의 경우, 합리적인 셋트 내에 값이 2개 존재한다. 예를 들어, 본 방법은 16개 또는 그 이하의 값을 갖는 임의의 파라미터에 대해 모든 가능한 값을 시도할 수 있다. 그러나, 상대적으로 대규모의 필드, 예를 들어 32 비트 필드의 경우, 2^32의 모든 가능한 값을 시도하는 것은 불가능할 수 있다. 이 경우, 설계자는 값들의 합리적인 셋트를 본 방법에 제공할 수 있다. 예를 들어, 설계자는 유사한 특성을 가진 MAT의 그룹을 관측하고, 상기 설명한 바와 같이, 가능성의 수를 제한하도록 이들을 서로 그룹화할 수 있다. 설계자가 값을 공급하지 않고 가능성의 수가 크면, 본 방법은 파라미터의 랜덤 값의 합리적인 수로서 블록(3712-3716)을 반복할 수 있다. 처리는 블록(3712)으로 진행한다.
블록(3712)에서, 프로그램 또는 프로그램 위상은 현재의 최적 구성으로 실행되지만, 블록(3708)에 대한 파라미터의 다음 값에 의해 수정되며, 성능이 측정된다. 처리는 판단 블록(3714)으로 진행한다.
판단 블록(3714)에서, 본 방법은 블록(3712)에서 측정한 성능과 현재의 최적 성능을 비교해서, 전자가 양호하면, 처리는 블록(3716)으로 진행하고, 그렇지 않다면, 처리는 블록(3712)으로 진행하여, 모든 합리적인 값들이 시도될 때까지 현재 파라미터의 다음 값을 시도하고, 이 경우, 처리는 블록(3718)으로 되돌아가서, 모든 구성 파라미터가 시도될 때까지 다음 구성 파라미터에 대한 반복을 행하며, 이 경우, 본 방법은 종료하고, 프로그램 또는 프로그램 위상에 대한 현재의 최적 구성을 생성한다.
블록(3716)에서, 본 방법은 블록(3712)에서 시도된 구성으로 현재의 최적 구성을 갱신한다. 처리는 블록(3712)으로 복귀하여, 모든 합리적인 값들이 시도될 때까지 현재의 파라미터의 다음 값을 시도하고, 이 경우, 처리는 블록(3708)으로 복귀해서, 모든 구성 파라미터가 시도될 때까지 다음 구성 파라미터에 대한 반복을 행하고, 이 경우, 본 방법은 종료하고, 프로그램 또는 프로그램 위상에 대하여 현재의 최적 구성을 생성한다.
도 37과 유사한 방법을 이용하여 발견된 양호한 구성은, 특정의 구성이 양호한 결과를 생성하는 이유에 대해 설계자가 이해하고 있지 않아도 되고 그럴 필요도 없다.
도 38을 참조하면, 분석 결과를 나타내는 파이 차트(3801)가 도시되어 있다. 도 34, 36 및 37에 따라 수행된 것 등의 다양한 분석의 결과가 각각의 MAT에 대한 슬라이스, 즉 각 MAT에 대한 파이의 백분율을 갖는 파이 차트로서 개념화될 수 있다. 캐시를 통로에 의해 버짓화하는 경우, 예를 들어, 각 MAT에 대한 통로의 서브셋트는 파이의 해당 백분율에 대략적으로 대응한다. 이와 달리, 앞서 설명한 바와 같이, MAT는 그룹화될 수 있으며, 각 MAT 그룹에 대한 통로의 서브셋트는 해당 그룹에 포함된 MAT의 파이의 백분율의 합계에 대략적으로 대응한다. 도 38은 예를 나타낸다. 셋트 그룹, 청크, 또는 구획에 의해 캐시를 버짓화하는 경우, 파이 그래프는 각 셋트 그룹, 청크, 또는 구획에 대해 구성되고, 이후 유사한 기법이 적용된다. 파이 차트(3801)는 MAT 그룹마다 슬라이스를 포함한다. 도 38의 예에서, 프리페치 그룹은 42%, 코드 그룹은 19%, 부동소수점 그룹은 23%, 스트리밍 데이터 그룹은 11%, 스택 및 테이블워크 그룹은 5%이다.
도 39를 참조하면, 프로세서(3900)를 나타내는 블록도가 도시되어 있다. 프로세서(3900)는, 명령어를 명령어 디코더(3923)에 제공하는 명령어 캐시(3922)를 포함한다. 명령어 디코더(3923)는 명령어를 해독하고 해독한 명령어를 명령어 디스패처(3924)에 제공한다. 명령어 디스패처(3924)는 명령어를 실행 유닛(3926)에 디스패치하여 실행시킨다. 바람직하게는, 프로세서(3900)의 마이크로아키텍쳐는 슈퍼스칼라이며 비순차적인 실행인 것이 바람직하지만, 다른 실시예도 가능하다. 즉, 명령어 디스패처(3924)는 복수의 실행 유닛(3926)에 명령어의 디스패치를 슈퍼스칼라 비순차 방식으로 스케줄링하기 위한 명령어 스케줄러를 포함할 수 있다. 프로세서(3900)는 프로세서(3900)의 구조적 상태를 유지하는 구조적 레지스터(도시 안 됨)뿐만 아니라 비-아키텍쳐 레지스터(도시 안 됨)를 포함하는 것이 바람직하다. 프로세서(3900)는 레지스터 재명명을 수행하는 데에 사용되는 레지스터 변경 테이블(RAT)(도시 안 됨)과, 명령어를 프로그램 순서로 되돌리기 위해 사용되는 리오더 버퍼(ROB)(도시 안 됨)를 포함하는 것이 바람직하다. 명령어 디스패처는, 구조적 명령어를, 실행 유닛(3926)에 의해 실행 가능한 프로세서(3900)의 마이크로명령어 셋트 아키텍쳐의 마이크로명령어로 변환하는 명령어 변환기(도시 안 됨)를 포함하는 것이 바람직하다.
프로세서(3900)는 메모리 오퍼랜드를 실행 유닛(3926)에 제공하고, 메모리 오퍼랜드를 실행 유닛(3926)으로부터 수신하는 메모리 서브시스템(3928)을 포함한다. 메모리 서브시스템(3928)은 하나 이상의 로드 유닛, 하나 이상의 스토어 유닛, 로드 큐, 스토어 큐, 메모리로부터 캐시 라인을 요청하는 필 큐, 프로세서(3900)가 통신을 행하는 메모리 버스의 스누핑에 관련된 스누프 큐, 테이블워크 엔진 및 그 외 관련된 기능 유닛을 포함하는 것이 바람직하다.
프로세서(3900)는 또한 메모리 서브시스템(3928)과 통신하는 캐시 메모리(102)를 포함한다. 바람직하게는, 캐시 메모리(102)는 도 1 내지 38을 참조하여 설명한 캐시 메모리와 유사하다. 캐시 메모리(102)가 하나만 도시되어 있지만, 캐시 메모리(102)는 레벨-1(L1) 명령어 캐시, L1 데이터 캐시, 및 L1 캐시를 지원하는 통합된 레벨-2(L2) 캐시 등의 캐시 메모리의 계층을 포함하는 더 큰 캐시 메모리 서브시스템 중의 하나가 될 수 있다. 일실시예에서, 캐시 버스시스템은 레벨-3(L3) 캐시를 포함한다. 프로세서(3900)는 메모리로부터의 데이터를 캐시 메모리(102)에 디스패치하는 하나 이상의 프리페처를 포함할 수 있다. 일실시예에서, 프로세서(3900)는 멀티코어 프로세서이며, 이 멀티코어 프로세서는 각각의 코어가 상기 설명한 기능 유닛을 갖는다. 여기서, 캐시 메모리(102)는 코어에 의해 공유된다.
메모리 서브시스템(3928)이 도 1 내지 38의 실시예에서 설명한 바와 같은 캐시 메모리(102)의 메모리 접근(122)을 구성한다. 메모리 접근(122)은 접근할 메모리 위치의 메모리 어드레스를 포함한다. 메모리 접근(122)의 각각은 메모리 접근 타입(MAT)(101)을 포함하며, 그 실시예는 상기에 설명되어 있다.
본 발명의 다양한 실시예에 대하여 본 명세서에 개시하고 있지만, 본 명세서의 실시예는 예시의 방법으로 제시된 것이며, 제한하기 위한 것이 아니다. 본 발명의 범위를 벗어남이 없이 형식 및 상세의 다양한 변경이 이루어질 수 있다는 것이 당업자에게 명백하다. 예를 들어, 소프트웨어를 사용해서, 본 명세서에 개시된 장치 및 방법의 기능, 제조, 모델화, 시뮬레이션, 기술 및/또는 검사가 가능하다. 이것은, 일반적인 프로그래밍 언어(예컨대, C, C++), Verilog HDL, VHDL 등의 하드웨어 기술 언어(HDL), 또는, 그 외 이용가능한 프로그램을 사용하여 달성될 수 있다. 이러한 소프트웨어는 자기테이프, 반도체, 자기 디스크, 또는 광 디스크(예컨대, CD-ROM, DVD-ROM 등), 네트워크, 유선, 무선, 또는 그 외 다른 통신 매체 등의 임의의 공지된 컴퓨터에서 사용 가능한 매체에 포함될 수 있다. 본 명세서에 개시된 장치 및 방법의 실시예는, 프로세서 코어 등의 반도체 지적 재산 코어 내에 포함(예컨대, HDL로 구현되거나 구체화)되고, 집적회로의 생산에서 하드웨어로 변형될 수 있다. 또한, 본 명세서에 개시된 장치 및 방법은 하드웨어와 소프트웨어의 조합으로 구현될 수 있다. 따라서, 본 발명은 본 명세서에 개시된 임의의 예시적 실시예에 의해 제한되어서는 안되며, 이하의 청구범위와 그 등가표현에 의해서만 한정되어야 한다. 구체적으로, 본 발명은 범용 컴퓨터 내에서 사용될 수 있는 프로세서 장치 내에서 구현될 수 있다. 마지막으로, 당업자는, 첨부된 청구범위에 의해 정의되는 본 발명의 범위를 벗어남이 없이 본 발명의 동일한 목적을 수행하기 위한 다른 구조를 설계 또는 수정하기 위한 기초로서 개시된 개념 및 구체적인 실시예를 용이하게 이용할 수 있다.
Claims (21)
- 셋트 연관 캐시 메모리에 있어서,
N개의 통로가 배치된 기억 요소의 어레이; 및
상기 캐시 메모리에서 미스하는 메모리 접근에 따라, 상기 어레이의 기억 요소를 할당하는 할당 유닛을 구비하며,
상기 메모리 접근은, 복수의 미리결정된 메모리 접근 타입의 연관된 MAT를 포함하고, 상기 MAT는 상기 캐시 메모리에 의해 수신되고;
상기 복수의 미리결정된 MAT의 각각에 대해, 상기 MAT를 상기 N개의 통로 중의 하나 이상의 통로의 서브셋트와 연관시키는 매핑을 구비하며;
상기 할당 유닛은, 상기 메모리 접근의 각각에 대해, 상기 매핑이 상기 메모리 접근의 MAT와 연관시키는 하나 이상의 통로의 서브셋트의 통로를 할당하고;
상기 매핑은 상기 캐시 메모리의 동작 동안에 동적으로 갱신 가능하고;
상기 MAT는 메모리 접근이 생성되거나 데이터 유형이 상기 메모리 접근에 의해 액세스될 때, 상기 메모리 접근이 생성된 명령의 특성, 또는 상기 메모리 접근을 생성한 프로세서의 기능 유닛의 유형, 또는 프로세서의 동작 모드로부터 유도되는 메모리 접근의 특성인 것을 특징으로 하는 셋트 연관 캐시 메모리. - 제1항에 있어서,
상기 어레이에는 추가로 복수의 셋트가 배치되며,
상기 어레이는, 상기 복수의 셋트의 각각에 대해, 치환 정책에 따른 치환 정보를 포함하고, 상기 할당 유닛은 상기 셋트의 치환 정보를, 상기 서브셋트의 어느 통로를 할당할지를 판단하도록 상기 매핑과 조합하여 사용하는 것을 특징으로 하는셋트 연관 캐시 메모리. - 제1항에 있어서,
상기 매핑은 상기 복수의 미리결정된 MAT의 각각에 대하여 각각의 비트 벡터를 포함하는 것을 특징으로 하는 셋트 연관 캐시 메모리. - 제3항에 있어서,
상기 복수의 미리결정된 MAT의 각각에 대한 상기 각각의 비트 벡터는 상기 MAT와 연관된 하나 이상의 통로의 서브셋트를 나타내는 것을 특징으로 하는 셋트 연관 캐시 메모리. - 제1항에 있어서,
상기 복수의 미리결정된 MAT는,
프로세서의 하드웨어 프리페처에 의해 생성되는 메모리 접근;
부동소수점 명령어에 의해 생성되는 메모리 접근;
융합된 마이크로명령어에 의해 생성되는 메모리 접근;
미디어 명령어에 의해 생성되는 메모리 접근;
메모리 어드레스를 변경하는 명령어에 의해 생성되는 메모리 접근;
소프트웨어 프리페치 명령어에 의해 생성되는 메모리 접근;
구조적 기술자를 로드하는 메모리 접근;
비일시적 데이터를 특정하는 명령어에 의해 생성되는 메모리 접근;
정렬 체크를 수행하지 않는 명령어에 의해 생성되는 메모리 접근;
슈퍼바이저 특권 레벨 명령어에 의해 생성되는 메모리 접근;
제로 확장 명령어에 의해 생성되는 메모리 접근;
마스크된 이동 명령어에 의해 생성되는 메모리 접근;
스택 푸시 명령어에 의해 생성되는 메모리 접근; 및
상기 프로세서의 하드웨어 테이블워크 엔진에 의해 생성되는 메모리 접근, 중의 적어도 3개를 포함하는 것을 특징으로 하는 셋트 연관 캐시 메모리. - N개의 통로가 배치된 기억 요소의 어레이; 및 캐시 메모리에서 미스하는 메모리 접근에 따라, 상기 어레이의 기억 요소를 할당하는 할당 유닛을 구비한 셋트 연관 캐시 메모리를 포함하는 프로세서의 동작방법에 있어서,
복수의 미리결정된 메모리 접근 타입(MAT)의 각각에 대하여, 상기 MAT를 캐시 메모리의 N개의 통로 중의 하나 이상의 통로의 서브셋트와 연관시키는 매핑을, 상기 프로세서가 유지하는 단계;
연관된 MAT를 각각 갖는 메모리 접근을 캐시 메모리가 수신하는 단계;
상기 메모리 접근의 각각에 대하여, 캐시 메모리에서의 메모리 접근의 미스에 따라, 상기 매핑이 상기 메모리 접근의 MAT와 연관하는 상기 서브셋트의 통로를 할당하는 단계; 및
캐시 메모리의 동작 동안 상기 매핑을 동적으로 갱신하는 단계;를 포함하고,
상기 MAT는 메모리 접근이 생성되거나 데이터 유형이 상기 메모리 접근에 의해 액세스될 때, 상기 메모리 접근이 생성된 명령의 특성, 또는 상기 메모리 접근을 생성한 프로세서의 기능 유닛의 유형, 또는 프로세서의 동작 모드로부터 유도되는 메모리 접근의 특성인 것을 특징으로 하는 프로세서의 동작방법. - 제6항에 있어서,
상기 프로세서상에서 프로그램이 실행되고 있다고 판단하는 단계; 및
상기 프로세서상에서 상기 프로그램이 실행되고 있다고 판단하는 단계에 따라 상기 매핑을 동적으로 갱신하는 단계를 추가로 포함하는 것을 특징으로 하는 프로세서의 동작방법. - 제7항에 있어서,
상기 프로세서상에서 상기 프로그램이 실행되고 있다고 판단하는 단계는 상기 프로세서에 의해 실행되는 장치 드라이버에 의해 수행되는 것을 특징으로 하는 프로세서의 동작방법. - 제7항에 있어서,
상기 매핑은 상기 프로그램의 오프라인 해석에 의해 정해지는 것을 특징으로 하는 프로세서의 동작방법. - 제6항에 있어서,
상기 매핑을 갱신하는 단계가 수행되는 것에 따라, 상기 프로세서의 명령어 셋트 구성의 설정 명령어를 실행하는 단계를 추가로 포함하는 것을 특징으로 하는 프로세서의 동작방법. - 제6항에 있어서,
상기 프로세서상에서 실행되는 프로그램에 새로운 위상이 입력된 것을 검출하는 단계; 및
상기 프로세서상에서 실행되는 프로그램에 새로운 위상이 입력된 것을 검출하는 단계에 따라 상기 매핑을 동적으로 갱신하는 단계를 추가로 포함하는 것을 특징으로 하는 프로세서의 동작방법. - 제11항에 있어서,
상기 프로세서상에서 실행되는 프로그램에 새로운 위상이 입력된 것을 검출하는 단계는 상기 프로세서에 의해 수행되는 것을 특징으로 하는 프로세서의 동작방법. - 제11항에 있어서,
상기 프로세서상에서 실행되는 프로그램에 새로운 위상이 입력된 것을 검출하는 단계를 수행하기 위해 사용되는 위상 식별자를 상기 프로세서가 수신하는 단계; 및
상기 위상 식별자에 기초하여, 상기 프로세서상에서 실행되는 프로그램에 새로운 위상이 입력된 것을 검출하는 단계를 추가로 포함하는 것을 특징으로 하는 프로세서의 동작방법. - 제6항에 있어서,
상기 복수의 미리결정된 MAT는,
상기 프로세서의 하드웨어 프리페처에 의해 생성되는 메모리 접근;
부동소수점 명령어에 의해 생성되는 메모리 접근;
융합된 마이크로명령어에 의해 생성되는 메모리 접근;
미디어 명령어에 의해 생성되는 메모리 접근;
메모리 어드레스를 변경하는 명령어에 의해 생성되는 메모리 접근;
소프트웨어 프리페치 명령어에 의해 생성되는 메모리 접근;
구조적 기술자를 로드하는 메모리 접근;
비일시적 데이터를 특정하는 명령어에 의해 생성되는 메모리 접근;
정렬 체크를 수행하지 않는 명령어에 의해 생성되는 메모리 접근;
슈퍼바이저 특권 레벨 명령어에 의해 생성되는 메모리 접근;
제로 확장 명령어에 의해 생성되는 메모리 접근;
마스크된 이동 명령어에 의해 생성되는 메모리 접근;
스택 푸시 명령어에 의해 생성되는 메모리 접근; 및
상기 프로세서의 하드웨어 테이블워크 엔진에 의해 생성되는 메모리 접근, 중의 적어도 3개를 포함하는 것을 특징으로 하는 프로세서의 동작방법. - 제6항에 있어서,
상기 어레이에는 추가로 복수의 셋트가 배치되며, 각각의 셋트는 치환 정책에 따른 치환 정보를 포함하고,
상기 매핑이 상기 메모리 접근의 MAT와 연관하는 상기 서브셋트의 통로를 할당하는 단계는, 상기 메모리 접근에 의해 선택된 상기 복수의 셋트 중의 하나의 셋트의 상기 치환 정보에 추가로 기초하여, 상기 서브셋트의 통로를 선택하는 단계를 포함하는 것을 특징으로 하는 프로세서의 동작방법. - 프로세서에 있어서,
N개의 통로가 배치된 기억 요소로 이루어진 어레이를 구비하는 셋트 연관 캐시 메모리로서, 상기 캐시 메모리에서 미스하는 메모리 접근에 따라, 상기 캐시 메모리가 상기 어레이의 기억 요소를 할당하며,
상기 메모리 접근은, 복수의 미리결정된 메모리 접근 타입(MAT)의 연관된 MAT를 포함하고, 상기 MAT는 상기 캐시 메모리에 의해 수신되고,
상기 프로세서는, 상기 복수의 미리결정된 MAT의 각각에 대해, 상기 MAT를 상기 N개의 통로 중의 하나 이상의 통로의 서브셋트와 연관시키는 매핑을 구비하며,
상기 메모리 접근의 각각에 대해, 상기 매핑이 상기 메모리 접근의 MAT와 연관시키는 상기 서브셋트의 통로를, 상기 캐시 메모리가 할당하고,
상기 매핑은 상기 캐시 메모리의 동작 동안에 동적으로 갱신 가능하고,
상기 MAT는 메모리 접근이 생성되거나 데이터 유형이 상기 메모리 접근에 의해 액세스될 때, 상기 메모리 접근이 생성된 명령의 특성, 또는 상기 메모리 접근을 생성한 프로세서의 기능 유닛의 유형, 또는 프로세서의 동작 모드로부터 유도되는 메모리 접근의 특성인 것을 특징으로 하는 프로세서. - 제16항에 있어서,
상기 프로세서의 명령어 셋트 아키텍쳐의 설정 명령어를 추가로 구비하며,
상기 설정 명령어는 상기 프로세서가 상기 캐시 메모리 내에서 상기 매핑을 동적으로 갱신하도록 지시하는 것을 특징으로 하는 프로세서. - 제16항에 있어서,
상기 프로세서상에서 실행되는 프로그램에 새로운 위상을 입력된 것을 검출하도록 구성된 위상 검출기를 추가로 구비하며,
상기 프로세서는, 상기 새로운 위상의 검출에 따라, 상기 캐시 메모리에서의 매핑을 갱신하고, 상기 캐시 메모리는 갱신된 매핑에 기초하여 상기 N개의 통로를 할당하는 것을 특징으로 하는 프로세서. - 제18항에 있어서,
상기 위상 검출기는, 상기 프로세서에 의해 실행되는 장치 드라이버로부터 상기 프로세서에 의해 수신된 위상 식별자에 기초하여, 상기 프로세서상에서 실행되는 프로그램에 새로운 위상이 입력된 것을 검출하는 것을 특징으로 하는 프로세서. - 제16항에 있어서,
상기 매핑은 명령어를 포함하는 프로그램의 오프라인 해석에 의해 결정되며, 상기 프로세서는 상기 프로그램의 명령어를 실행하는 것에 따라 상기 메모리 접근을 생성하는 것을 특징으로 하는 프로세서. - 제16항에 있어서,
상기 복수의 미리결정된 MAT는,
상기 프로세서의 하드웨어 프리페처에 의해 생성되는 메모리 접근;
부동소수점 명령어에 의해 생성되는 메모리 접근;
융합된 마이크로명령어에 의해 생성되는 메모리 접근;
미디어 명령어에 의해 생성되는 메모리 접근;
메모리 어드레스를 변경하는 명령어에 의해 생성되는 메모리 접근;
소프트웨어 프리페치 명령어에 의해 생성되는 메모리 접근;
구조적 기술자를 로드하는 메모리 접근;
비일시적 데이터를 특정하는 명령어에 의해 생성되는 메모리 접근;
정렬 체크를 수행하지 않는 명령어에 의해 생성되는 메모리 접근;
슈퍼바이저 특권 레벨 명령어에 의해 생성되는 메모리 접근;
제로 확장 명령어에 의해 생성되는 메모리 접근;
마스크된 이동 명령어에 의해 생성되는 메모리 접근;
스택 푸시 명령어에 의해 생성되는 메모리 접근; 및
상기 프로세서의 하드웨어 테이블워크 엔진에 의해 생성되는 메모리 접근, 중의 적어도 3개를 포함하는 것을 특징으로 하는 프로세서.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/IB2014/003219 WO2016097805A1 (en) | 2014-12-14 | 2014-12-14 | Cache memory budgeted by ways on memory access type |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160087750A KR20160087750A (ko) | 2016-07-22 |
KR101817847B1 true KR101817847B1 (ko) | 2018-02-21 |
Family
ID=56126005
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157033019A KR101817847B1 (ko) | 2014-12-14 | 2014-12-14 | 메모리 접근 타입에 기초한 통로에 의해 버짓화된 캐시 메모리 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9910785B2 (ko) |
EP (1) | EP3066571B1 (ko) |
KR (1) | KR101817847B1 (ko) |
CN (1) | CN105701034B (ko) |
TW (1) | TWI553482B (ko) |
WO (1) | WO2016097805A1 (ko) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2547191B (en) * | 2016-02-05 | 2020-01-08 | Advanced Risc Mach Ltd | An apparatus and method for supporting multiple cache features |
US10489306B2 (en) * | 2016-05-17 | 2019-11-26 | Arm Limited | Apparatus and method for processing data, including cache entry replacement performed based upon content data read from candidates selected using victim selection |
US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
US10509721B2 (en) | 2017-11-09 | 2019-12-17 | Microsoft Technology Licensing, Llc | Performance counters for computer memory |
GB2578574B (en) * | 2018-10-30 | 2021-03-10 | Advanced Risc Mach Ltd | Circuitry and method |
JP7423644B2 (ja) | 2019-03-15 | 2024-01-29 | インテル コーポレイション | 行列アクセラレータアーキテクチャのためのスパース最適化 |
CN113424148A (zh) | 2019-03-15 | 2021-09-21 | 英特尔公司 | 用于检测跨分片访问、提供多分片推理缩放和提供最佳页迁移的多分片存储器管理 |
CN110083525A (zh) * | 2019-03-15 | 2019-08-02 | 平安普惠企业管理有限公司 | 内存泄露的定位方法、装置、计算机设备及存储介质 |
US11934342B2 (en) | 2019-03-15 | 2024-03-19 | Intel Corporation | Assistance for hardware prefetch in cache access |
US11327891B2 (en) | 2019-09-20 | 2022-05-10 | Samsung Electronics Co., Ltd. | Prefetching operations in storage devices |
TWI719745B (zh) * | 2019-12-09 | 2021-02-21 | 瑞昱半導體股份有限公司 | 記憶體資料存取裝置及其方法 |
US11604733B1 (en) * | 2021-11-01 | 2023-03-14 | Arm Limited | Limiting allocation of ways in a cache based on cache maximum associativity value |
US11934310B2 (en) * | 2022-01-21 | 2024-03-19 | Centaur Technology, Inc. | Zero bits in L3 tags |
WO2024058801A1 (en) * | 2022-09-12 | 2024-03-21 | Google Llc | Time-efficient implementation of cache replacement policy |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100077153A1 (en) * | 2008-09-23 | 2010-03-25 | International Business Machines Corporation | Optimal Cache Management Scheme |
US20100318742A1 (en) * | 2009-06-11 | 2010-12-16 | Qualcomm Incorporated | Partitioned Replacement For Cache Memory |
Family Cites Families (86)
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 |
US5584014A (en) | 1994-12-20 | 1996-12-10 | Sun Microsystems, Inc. | Apparatus and method to preserve data in a set associative memory device |
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 |
US5793693A (en) * | 1996-11-04 | 1998-08-11 | Compaq Computer Corporation | Cache memory using unique burst counter circuitry and asynchronous interleaved RAM banks for zero wait state operation |
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 |
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 |
US7911474B2 (en) * | 2006-04-03 | 2011-03-22 | Siemens Medical Solutions Usa, Inc. | Memory management system and method for GPU-based volume rendering |
US7689772B2 (en) | 2006-05-04 | 2010-03-30 | Intel Corporation | Power-performance modulation in caches using a smart least recently used scheme |
CN100495362C (zh) | 2006-07-18 | 2009-06-03 | 威盛电子股份有限公司 | 可锁定码的快取及其处理器、控制器与控制方法 |
JP4299848B2 (ja) * | 2006-08-09 | 2009-07-22 | エルピーダメモリ株式会社 | 半導体記憶装置 |
JP2008102733A (ja) * | 2006-10-19 | 2008-05-01 | Hitachi Ltd | コード生成方法およびコンパイラ |
US9104599B2 (en) | 2007-12-06 | 2015-08-11 | Intelligent Intellectual Property Holdings 2 Llc | Apparatus, system, and method for destaging cached data |
US7917701B2 (en) | 2007-03-12 | 2011-03-29 | Arm Limited | Cache circuitry, data processing apparatus and method for prefetching data by selecting one of a first prefetch linefill operation and a second prefetch linefill operation |
US7921260B2 (en) | 2007-10-24 | 2011-04-05 | International Business Machines Corporation | Preferred write-mostly data cache replacement policies |
US8335122B2 (en) | 2007-11-21 | 2012-12-18 | The Regents Of The University Of Michigan | Cache memory system for a data processing apparatus |
US7962695B2 (en) | 2007-12-04 | 2011-06-14 | International Business Machines Corporation | Method and system for integrating SRAM and DRAM architecture in set associative cache |
JP5217432B2 (ja) | 2007-12-28 | 2013-06-19 | 富士通株式会社 | セクタ機能付きキャッシュメモリ |
US8145985B2 (en) * | 2008-09-05 | 2012-03-27 | Freescale Semiconductor, Inc. | Error detection schemes for a unified cache in a data processing system |
US8195884B2 (en) | 2008-09-18 | 2012-06-05 | International Business Machines Corporation | Network on chip with caching restrictions for pages of computer memory |
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 |
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 |
US8909867B2 (en) * | 2010-08-24 | 2014-12-09 | Advanced Micro Devices, Inc. | Method and apparatus for allocating instruction and data for a unified cache |
US9183135B2 (en) | 2011-01-21 | 2015-11-10 | Micron Technology, Inc. | Preparation of memory device for access using memory access type indicator signal |
US20120197773A1 (en) * | 2011-01-31 | 2012-08-02 | Bank Of America Corporation | Systems and methods for providing position-based budgeting information |
CN102521140B (zh) * | 2011-12-01 | 2015-04-29 | 瑞斯康达科技发展股份有限公司 | 一种获取活动的描述符集合的方法及装置 |
US8688915B2 (en) | 2011-12-09 | 2014-04-01 | International Business Machines Corporation | Weighted history allocation predictor algorithm in a hybrid cache |
US20130219125A1 (en) | 2012-02-21 | 2013-08-22 | Microsoft Corporation | Cache employing multiple page replacement algorithms |
CN104246723B (zh) | 2012-04-17 | 2018-08-10 | 深圳市中兴微电子技术有限公司 | 片内共享缓存的管理方法及装置 |
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 |
US20130346672A1 (en) * | 2012-06-22 | 2013-12-26 | Microsoft Corporation | Multi-Tiered Cache with Storage Medium Awareness |
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 |
US20140189302A1 (en) * | 2012-12-28 | 2014-07-03 | Intel Corporation | Optimal logical processor count and type selection for a given workload based on platform thermals and power budgeting constraints |
US20140189244A1 (en) | 2013-01-02 | 2014-07-03 | Brian C. Grayson | Suppression of redundant cache status updates |
CN103092677A (zh) * | 2013-01-10 | 2013-05-08 | 华中科技大学 | 一种适用于虚拟化平台的内存节能***和方法 |
US9223710B2 (en) * | 2013-03-16 | 2015-12-29 | Intel Corporation | Read-write partitioning of cache memory |
US10425314B2 (en) * | 2013-12-05 | 2019-09-24 | Nxp Usa, Inc. | Bandwidth estimation circuit, computer system, method for estimating and predicting the bandwidth and computer readable program product |
WO2016042353A1 (en) | 2014-09-18 | 2016-03-24 | Via Alliance Semiconductor Co., Ltd. | Cache management request fusing |
US9275714B1 (en) | 2014-09-26 | 2016-03-01 | Qualcomm Incorporated | Read operation of MRAM using a dummy word line |
US9652398B2 (en) | 2014-12-14 | 2017-05-16 | Via Alliance Semiconductor Co., Ltd. | Cache replacement policy that considers memory access type |
JP6207766B2 (ja) | 2014-12-14 | 2017-10-04 | ヴィア アライアンス セミコンダクター カンパニー リミテッド | ヘテロジニアス置換ポリシーを用いるセット・アソシエイティブ・キャッシュ・メモリ |
US9798668B2 (en) | 2014-12-14 | 2017-10-24 | 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 the mode |
EP3055774B1 (en) | 2014-12-14 | 2019-07-17 | VIA Alliance Semiconductor Co., Ltd. | Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or a subset of its ways depending on the mode |
WO2016097812A1 (en) | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Cache memory budgeted by chunks based on memory access type |
EP3230874B1 (en) | 2014-12-14 | 2021-04-28 | VIA Alliance Semiconductor Co., Ltd. | Fully associative cache memory budgeted by memory access type |
US10698827B2 (en) | 2014-12-14 | 2020-06-30 | Via Alliance Semiconductor Co., Ltd. | Dynamic cache replacement way selection based on address tag bits |
-
2014
- 2014-12-14 KR KR1020157033019A patent/KR101817847B1/ko active IP Right Grant
- 2014-12-14 US US14/890,893 patent/US9910785B2/en active Active
- 2014-12-14 WO PCT/IB2014/003219 patent/WO2016097805A1/en active Application Filing
- 2014-12-14 EP EP14891606.7A patent/EP3066571B1/en active Active
-
2015
- 2015-11-18 CN CN201510795191.XA patent/CN105701034B/zh active Active
- 2015-11-25 TW TW104139173A patent/TWI553482B/zh active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100077153A1 (en) * | 2008-09-23 | 2010-03-25 | International Business Machines Corporation | Optimal Cache Management Scheme |
US20100318742A1 (en) * | 2009-06-11 | 2010-12-16 | Qualcomm Incorporated | Partitioned Replacement For Cache Memory |
Also Published As
Publication number | Publication date |
---|---|
TW201633150A (zh) | 2016-09-16 |
EP3066571B1 (en) | 2018-06-13 |
US9910785B2 (en) | 2018-03-06 |
CN105701034A (zh) | 2016-06-22 |
EP3066571A4 (en) | 2017-04-19 |
KR20160087750A (ko) | 2016-07-22 |
CN105701034B (zh) | 2019-06-11 |
WO2016097805A1 (en) | 2016-06-23 |
EP3066571A1 (en) | 2016-09-14 |
TWI553482B (zh) | 2016-10-11 |
US20170315921A1 (en) | 2017-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101867143B1 (ko) | 이종 치환 정책을 가진 셋트 연관 캐시 메모리 | |
KR101835949B1 (ko) | 메모리 접근 타입을 고려한 캐시 치환 정책 | |
KR101817847B1 (ko) | 메모리 접근 타입에 기초한 통로에 의해 버짓화된 캐시 메모리 | |
US9898411B2 (en) | Cache memory budgeted by chunks based on memory access type | |
US9817764B2 (en) | Multiple data prefetchers that defer to one another based on prefetch effectiveness by memory access type | |
EP3230874B1 (en) | Fully associative cache memory budgeted by memory access type | |
KR101820223B1 (ko) | 모드에 따라 선택적으로 하나 또는 복수의 셋트를 선택하도록 동적으로 구성가능한 멀티 모드 셋트 연관 캐시 메모리 | |
EP3129886B1 (en) | Dynamic cache replacement way selection based on address tag bits | |
EP3055774B1 (en) | Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or a subset of its ways depending on the mode | |
EP3049915B1 (en) | Prefetching with level of aggressiveness based on effectiveness by memory access type |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |