KR101835949B1 - 메모리 접근 타입을 고려한 캐시 치환 정책 - Google Patents

메모리 접근 타입을 고려한 캐시 치환 정책 Download PDF

Info

Publication number
KR101835949B1
KR101835949B1 KR1020157033071A KR20157033071A KR101835949B1 KR 101835949 B1 KR101835949 B1 KR 101835949B1 KR 1020157033071 A KR1020157033071 A KR 1020157033071A KR 20157033071 A KR20157033071 A KR 20157033071A KR 101835949 B1 KR101835949 B1 KR 101835949B1
Authority
KR
South Korea
Prior art keywords
mat
memory access
memory
mapping
cache memory
Prior art date
Application number
KR1020157033071A
Other languages
English (en)
Other versions
KR20160086763A (ko
Inventor
로드니 이. 후커
콜린 에디
더글라스 알. 리드
존 마이클 그리어
테리 파크스
Original Assignee
비아 얼라이언스 세미컨덕터 씨오., 엘티디.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 비아 얼라이언스 세미컨덕터 씨오., 엘티디. filed Critical 비아 얼라이언스 세미컨덕터 씨오., 엘티디.
Publication of KR20160086763A publication Critical patent/KR20160086763A/ko
Application granted granted Critical
Publication of KR101835949B1 publication Critical patent/KR101835949B1/ko

Links

Images

Classifications

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

Abstract

연관 캐시 메모리는, M개의 셋트가 N개의 통로 만큼 배치된 기억 요소로 이루어진 어레이; 및 캐시 메모리에서 미스하는 메모리 접근에 따라, 어레이의 기억 요소를 할당하는 할당 유닛을 구비한다. 각각의 메모리 접근은 셋트를 선택한다. 각각의 메모리 접근은 복수의 미리결정된 메모리 접근 타입(memory access type: MAT)의 연관된 MAT를 갖는다. 각각의 유효 기억 요소는 연상된 MAT와, 각각의 MAT에 대해 MAT 우선순위를 포함하는 매핑을 갖는다. 어레이에서 미스하는 메모리 접근에 따라, 할당 유닛은 치환 정책에 기초하여 치환을 위해 선택된 셋트의 가장 적격인 통로 및 두 번째로 가장 적격인 통로를 판단하고, 가장 적격인 통로의 MAT 우선순위가 두 번째로 가장 적격인 통로의 MAT 우선순위보다 큰 경우, 가장 적격인 통로가 아닌 두 번째로 가장 적격인 통로를 치환한다.

Description

메모리 접근 타입을 고려한 캐시 치환 정책{CACHE REPLACEMENT POLICY THAT CONSIDERS MEMORY ACCESS TYPE}
본 발명은 메모리 접근 타입을 고려한 캐시 치환 정책에 관한 것이다.
[관련 출원의 상호참조]
본 출원은 각각이 전체로 참조에 의해 이로써 병합된, 각각이 2014년 12월 14일에 출원된 대응하게 지시된 국제 출원의 35 U.S.C. 371하의 국내 단계 출원인, 여기에 동시에 출원된 다음의 미국 일반출원에 관련된다.
Figure 112016057566718-pct00045
하나의 관점에서, 본 발명은, 연관 캐시 메모리를 제공한다. 연관 캐시 메모리는 M개의 셋트가 N개의 통로만큼 배치된 기억 요소로 이루어진 어레이; 및 캐시 메모리에서 미스하는 메모리 접근에 따라, 어레이의 기억 요소를 할당하는 할당 유닛을 포함하고, 메모리 접근은 각각 M개의 셋트 중의 하나를 선택하며, 메모리 접근은, 복수의 미리결정된 메모리 접근 타입(memory access type: MAT)의 연관된 MAT를 가지며, MAT는 캐시 메모리에 의해 수신되고, 어레이의 각각의 유효 기억 요소는 복수의 미리결정된 MAT의 연관된 MAT를 가지며, 연관 캐시 메모리는, 복수의 미리결정된 MAT의 각각의 MAT에 대하여, MAT 우선순위를 포함하는 매핑을 구비하며, 할당 유닛은, 어레이에서 미스하는 메모리 접근에 따라, 치환 정책에 기초하여 치환을 위해 선택된 셋트의 가장 적격인 통로 및 두 번째로 가장 적격인 통로를 판단하고, 가장 적격인 통로의 MAT 우선순위가 두 번째로 가장 적격인 통로의 MAT 우선순위보다 큰 경우, 가장 적격인 통로가 아닌 두 번째로 가장 적격인 통로로 치환한다.
다른 관점으로서, 본 발명은 연관 캐시 메모리를 동작시키는 방법을 제공한다. 연관 캐시 메모리는, M개의 셋트가 N개의 통로만큼 배치된 기억 요소로 이루어진 어레이와, 캐시 메모리에서 미스하는 메모리 접근에 따라, 어레이의 기억 요소를 할당하는 할당 유닛을 구비하며, 메모리 접근이 각각 상기 M개의 셋트 중의 하나를 선택하고, 메모리 접근은 복수의 미리결정된 메모리 접근 타입(MAT)의 연관된 MAT를 가지며, MAT는 캐시 메모리에 의해 수신되고, 본 방법은, 어레이의 각각의 유효 기억 요소에 대하여, 복수의 미리결정된 MAT의 연관된 MAT를 기억하는 단계; 복수의 미리결정된 MAT의 각각의 MAT에 대하여, MAT 우선순위를 포함하는 매핑을 기억하는 단계; 어레이에서 미스하는 메모리 접근에 따라, 치환 정책에 기초하여 치환을 위해 선택된 셋트의 가장 적격인 통로 및 두 번째로 가장 적격인 통로를 판단하는 단계; 및 어레이에서 미스하는 메모리 접근에 따라, 가장 적격인 통로의 MAT 우선순위가 두 번째로 가장 적격인 통로의 MAT 우선순위보다 큰 경우, 가장 적격인 통로가 아닌 두 번째로 가장 적격인 통로로 치환하는 단계를 포함한다.
또 다른 관점으로서, 본 발명은 연관 캐시 메모리를 제공한다. 연관 캐시 메모리는, M개의 셋트가 N개의 통로 만큼 배치된 기억 요소로 이루어진 어레이; 및 캐시 메모리에서 미스하는 메모리 접근에 따라, 어레이의 기억 요소를 할당하는 할당 유닛을 구비하며, 메모리 접근은 각각 M개의 셋트 중의 하나를 선택하며, N개의 셋트 중의 각각의 셋트에 대하여, 선택된 셋트의 통로가 서로에 대해 상대적으로 사용된 빈도를 나타내도록 할당 유닛의 치환 정책에 의해 사용되는 치환 비트가 연관되며, 메모리 접근은 각각 복수의 미리정해진 메모리 접근 타입(MAT)의 연관된 MAT를 가지며, MAT는 캐시 메모리에 의해 수신되고, 연관 캐시 메모리는, 다수의 미리 정해진 MAT의 각각의 MAT에 대하여, MAT 우선순위를 포함하는 매핑을 구비하며, 할당 유닛은, 어레이에서 미스하는 메모리 접근에 따라, 선택된 셋트의 치환 통로에 할당하고, 메모리 접근의 MAT 우선순위가 임계값 보다 작은 경우, 치환 비트의 가장 최근에 사용된 위치 이외의 위치에, 치환 통로를 삽입한다.
또 다른 관점으로서, 본 발명은 연관 캐시 메모리를 동작시키는 방법을 제공한다. 연관 캐시 메모리는, M개의 셋트가 N개의 통로 만큼 배치된 기억 요소로 이루어진 어레이와, 캐시 메모리에서 미스하는 메모리 접근에 따라, 어레이의 기억 요소를 할당하는 할당 유닛을 구비하며, 메모리 접근은 각각 M개의 셋트 중의 하나를 선택하고, 메모리 접근은 복수의 미리결정된 메모리 접근 타입(MAT)의 연관된 MAT를 가지며, MAT는 캐시 메모리에 의해 수신되고, 캐시 메모리는 N개의 셋트 중의 각각의 셋트에 대하여, 선택된 셋트의 통로가 서로에 대해 상대적으로 사용된 빈도를 나타내도록 할당 유닛의 치환 정책에 의해 사용되는 치환 비트가 연관되며, 본 방법은, 복수의 미리결정된 MAT의 각각의 MAT에 대하여 MAT 우선순위를 포함하는 매핑을 기억하는 단계; 어레이에서 미스하는 메모리 접근에 따라, 선택된 셋트의 치환 통로에 할당하는 단계; 및 어레이에서 미스하는 메모리 접근에 따라, 메모리 접근의 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)를 나타내는 블록도이다.
도 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 트리는 다음과 같이 정의할 수 있다.
Figure 112015112902320-pct00001
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 (18)

  1. 연관 캐시 메모리에 있어서,
    M개의 셋트가 N개의 통로 만큼 배치된 기억 요소로 이루어진 어레이; 및
    상기 캐시 메모리에서 미스하는 메모리 접근에 따라, 상기 어레이의 기억 요소를 할당하는 할당 유닛으로서, 상기 메모리 접근이 각각 상기 M개의 셋트 중의 하나를 선택하는, 할당 유닛을 구비하며,
    상기 메모리 접근은, 복수의 미리결정된 메모리 접근 타입(MAT)의 연관된 MAT를 가지며, 상기 MAT는 상기 캐시 메모리에 의해 수신되고,
    상기 어레이의 각각의 유효 기억 요소는 상기 복수의 미리결정된 MAT의 연관된 MAT를 가지며,
    상기 연관 캐시 메모리는, 상기 복수의 미리결정된 MAT의 각각의 MAT에 대하여, MAT 우선순위를 포함하는 매핑을 구비하며, 그리고
    상기 할당 유닛은,
    상기 어레이에서 미스하는 메모리 접근에 따라, 치환 정책에 기초하여 치환을 위해 선택된 셋트의 가장 적격인 통로 및 두 번째로 가장 적격인 통로를 판단하고, 그리고
    상기 가장 적격인 통로의 MAT 우선순위가 상기 두 번째로 가장 적격인 통로의 MAT 우선순위보다 큰 경우, 상기 가장 적격인 통로가 아닌 상기 두 번째로 가장 적격인 통로로 치환하며; 그리고
    상기 MAT는, 상기 메모리 접근의 생성에 관한 명령어의 특성, 혹은 상기 메모리 접근을 생성한 프로세서의 기능 유닛의 타입, 혹은 상기 메모리 접근이 생성될 때 상기 프로세서의 동작 모드, 혹은 상기 메모리 접근에 의해 접근되는 데이터 타입중 하나로부터 유래하는 메모리 접근의 특성인 것을 특징으로 하는 연관 캐시 메모리.
  2. 제1항에 있어서,
    상기 매핑은 상기 복수의 MAT의 각각의 MAT를 복수의 상호배타적 MAT 그룹 중의 하나에 매핑하고, 상기 매핑은 상기 MAT 그룹의 각각에 대한 우선순위를 더 포함하며, 각각의 MAT의 상기 MAT 우선순위는 해당 MAT 그룹의 우선순위인 것을 특징으로 하는 연관 캐시 메모리.
  3. 제1항에 있어서,
    상기 복수의 미리결정된 MAT는,
    프로세서의 하드웨어 프리페처에 의해 생성되는 메모리 접근;
    부동소수점 명령어에 의해 생성되는 메모리 접근;
    융합된 마이크로명령어에 의해 생성되는 메모리 접근;
    미디어 명령어에 의해 생성되는 메모리접근;
    메모리 어드레스를 수정하는 명령어에 의해 생성되는 메모리 접근;
    소프트웨어 프리페치 명령어에 의해 생성되는 메모리 접근;
    구조적 기술자를 로드하는 메모리 접근;
    비일시적 데이터를 특정하는 명령어에 의해 생성되는 메모리 접근;
    정렬 체크를 수행하지 않는 명령어에 의해 생성되는 메모리 접근;
    슈퍼바이저 특권 레벨 명령어에 의해 생성되는 메모리 접근;
    제로 확장 명령어에 의해 생성되는 메모리 접근;
    마스크된 이동 명령어에 의해 생성되는 메모리 접근;
    스택 푸시 명령어에 의해 생성되는 메모리 접근; 및
    상기 프로세서의 하드웨어 테이블워크 엔진에 의해 생성되는 메모리 접근, 중의 적어도 3개를 포함하는 것을 특징으로 하는 연관 캐시 메모리.
  4. 연관 캐시 메모리를 동작시키는 방법에 있어서,
    상기 연관 캐시 메모리는, M개의 셋트가 N개의 통로 만큼 배치된 기억 요소로 이루어진 어레이와, 상기 캐시 메모리에서 미스하는 메모리 접근에 따라, 상기 어레이의 기억 요소를 할당하는 할당 유닛을 구비하며, 상기 메모리 접근이 각각 상기 M개의 셋트 중의 하나를 선택하고, 상기 메모리 접근은 복수의 미리결정된 메모리 접근 타입(MAT)의 연관된 MAT를 가지며, 상기 MAT는 상기 캐시 메모리에 의해 수신되고,
    상기 방법은,
    상기 어레이의 각각의 유효 기억 요소에 대하여, 상기 복수의 미리결정된 MAT의 연관된 MAT를 기억하는 단계;
    상기 복수의 미리결정된 MAT의 각각의 MAT에 대하여, MAT 우선순위를 포함하는 매핑을 기억하는 단계를 포함하며, 그리고
    상기 어레이에서 미스하는 메모리 접근에 따라, 치환 정책에 기초하여 치환을 위해 선택된 셋트의 가장 적격인 통로 및 두 번째로 가장 적격인 통로를 판단하는 단계; 및 상기 가장 적격인 통로의 MAT 우선순위가 상기 두 번째로 가장 적격인 통로의 MAT 우선순위보다 큰 경우, 상기 가장 적격인 통로가 아닌 상기 두 번째로 가장 적격인 통로로 치환하는 단계를 포함하고,
    상기 MAT는, 상기 메모리 접근의 생성에 관한 명령어의 특성, 혹은 상기 메모리 접근을 생성한 프로세서의 기능 유닛의 타입, 혹은 상기 메모리 접근이 생성될 때 상기 프로세서의 동작 모드, 혹은 상기 메모리 접근에 의해 접근되는 데이터 타입중 하나로부터 유래하는 메모리 접근의 특성인 것을 특징으로 하는 방법.
  5. 제4항에 있어서,
    상기 캐시 메모리의 동작 중에 상기 매핑을 갱신하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  6. 제5항에 있어서,
    프로세서상에서 프로그램이 실행되고 있다고 판단하는 단계를 더 포함하며,
    상기 갱신하는 단계는 상기 프로그램이 상기 프로세서상에서 실행되고 있다는 상기 판단에 따라 상기 매핑을 갱신하는 것을 특징으로 하는 방법.
  7. 제6항에 있어서,
    상기 매핑은 상기 프로그램의 오프라인 분석에 의해 판단되는 것을 특징으로 하는 방법.
  8. 제7항에 있어서,
    상기 복수의 미리결정된 MAT의 각각의 MAT에 대하여, 상기 MAT에 대한 매핑에 포함된 우선순위가 상기 오프라인 분석에 의해 판단된 MAT를 갖는 메모리 접근에 따라 할당된 캐시 라인의 평균 캐시 라인 수명에 기초하는 것을 특징으로 하는 방법.
  9. 제7항에 있어서,
    상기 복수의 미리결정된 MAT의 각각의 MAT에 대하여, 상기 MAT에 대한 매핑에 포함된 우선순위가 상기 오프라인 분석에 의해 판단된 MAT를 갖는 메모리 접근에 따라 할당된 캐시 라인의 평균 히트율에 기초하는 것을 특징으로 하는 방법.
  10. 연관 캐시 메모리에 있어서,
    M개의 셋트가 N개의 통로 만큼 배치된 기억 요소로 이루어진 어레이; 및
    상기 캐시 메모리에서 미스하는 메모리 접근에 따라, 상기 어레이의 기억 요소를 할당하는 할당 유닛으로서, 상기 메모리 접근이 각각 상기 M개의 셋트 중의 하나를 선택하는, 할당 유닛을 구비하며,
    N개의 셋트 중의 각각의 셋트에 대하여, 상기 선택된 셋트의 통로가 서로에 대해 상대적으로 사용된 빈도를 나타내도록 상기 할당 유닛의 치환 정책에 의해 사용되는 치환 비트가 연관되며,
    상기 메모리 접근은 각각 복수의 미리결정된 메모리 접근 타입(MAT)의 연관된 MAT를 가지며, 상기 MAT는 상기 캐시 메모리에 의해 수신되고,
    상기 연관 캐시 메모리는, 상기 복수의 미리결정된 MAT의 각각의 MAT에 대하여, MAT 우선순위를 포함하는 매핑을 구비하며, 그리고
    상기 할당 유닛은,
    상기 어레이에서 미스하는 메모리 접근에 따라, 상기 선택된 셋트의 치환 통로에 할당하고, 그리고
    상기 메모리 접근의 MAT 우선순위가 임계값 보다 작은 경우, 상기 치환 비트의 가장 최근에 사용된 위치 이외의 위치에, 상기 치환 통로를 삽입하며; 그리고
    상기 MAT는, 상기 메모리 접근의 생성에 관한 명령어의 특성, 혹은 상기 메모리 접근을 생성한 프로세서의 기능 유닛의 타입, 혹은 상기 메모리 접근이 생성될 때 상기 프로세서의 동작 모드, 혹은 상기 메모리 접근에 의해 접근되는 데이터 타입중 하나로부터 유래하는 메모리 접근의 특성인 것을 특징으로 하는 연관 캐시 메모리.
  11. 제10항에 있어서,
    상기 매핑은 상기 복수의 MAT의 각각의 MAT를 복수의 상호배타적 MAT 그룹 중의 하나에 매핑하고, 상기 매핑은 상기 MAT 그룹의 각각에 대한 우선순위를 더 포함하며, 각각의 MAT의 MAT 우선순위는 해당 MAT가 속한 MAT 그룹의 우선순위인 것을 특징으로 하는 연관 캐시 메모리.
  12. 제11항에 있어서,
    상기 복수의 미리결정된 MAT는,
    프로세서의 하드웨어 프리페처에 의해 생성되는 메모리 접근;
    부동소수점 명령어에 의해 생성되는 메모리 접근;
    융합된 마이크로명령어에 의해 생성되는 메모리 접근;
    미디어 명령어에 의해 생성되는 메모리접근;
    메모리 어드레스를 수정하는 명령어에 의해 생성되는 메모리 접근;
    소프트웨어 프리페치 명령어에 의해 생성되는 메모리 접근;
    구조적 기술자를 로드하는 메모리 접근;
    비일시적 데이터를 특정하는 명령어에 의해 생성되는 메모리 접근;
    정렬 체크를 수행하지 않는 명령어에 의해 생성되는 메모리 접근;
    슈퍼바이저 특권 레벨 명령어에 의해 생성되는 메모리 접근;
    제로 확장 명령어에 의해 생성되는 메모리 접근;
    마스크된 이동 명령어에 의해 생성되는 메모리 접근;
    스택 푸시 명령어에 의해 생성되는 메모리 접근; 및
    상기 프로세서의 하드웨어 테이블워크 엔진에 의해 생성되는 메모리 접근, 중의 적어도 3개를 포함하는 것을 특징으로 하는 연관 캐시 메모리.
  13. 연관 캐시 메모리를 동작시키는 방법에 있어서,
    상기 연관 캐시 메모리는, M개의 셋트가 N개의 통로 만큼 배치된 기억 요소로 이루어진 어레이와, 상기 캐시 메모리에서 미스하는 메모리 접근에 따라, 상기 어레이의 기억 요소를 할당하는 할당 유닛을 구비하며, 상기 메모리 접근이 각각 상기 M개의 셋트 중의 하나를 선택하고, 상기 메모리 접근은 복수의 미리결정된 메모리 접근 타입(MAT)의 연관된 MAT를 가지며, 상기 MAT는 상기 캐시 메모리에 의해 수신되고, 상기 캐시 메모리는 N개의 셋트 중의 각각의 셋트에 대하여, 상기 선택된 셋트의 통로가 서로에 대해 상대적으로 사용된 빈도를 나타내도록 상기 할당 유닛의 치환 정책에 의해 사용되는 치환 비트가 연관되며,
    상기 방법은,
    상기 복수의 미리결정된 MAT의 각각의 MAT에 대하여 MAT 우선순위를 포함하는 매핑을 기억하는 단계;
    상기 어레이에서 미스하는 메모리 접근에 따라,
    상기 선택된 셋트의 치환 통로에 할당하는 단계; 및
    상기 메모리 접근의 MAT 우선순위가 임계값보다 작은 경우에, 상기 치환 비트의 가장 최근에 사용된 위치가 아닌 위치에 상기 치환 통로를 삽입하는 단계를 포함하고, 그리고
    상기 MAT는, 상기 메모리 접근의 생성에 관한 명령어의 특성, 혹은 상기 메모리 접근을 생성한 프로세서의 기능 유닛의 타입, 혹은 상기 메모리 접근이 생성될 때 상기 프로세서의 동작 모드, 혹은 상기 메모리 접근에 의해 접근되는 데이터 타입중 하나로부터 유래하는 메모리 접근의 특성인 것을 특징으로 하는 방법.
  14. 제13항에 있어서,
    상기 캐시 메모리의 동작 중에 상기 매핑을 갱신하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  15. 제14항에 있어서,
    프로세서상에서 프로그램이 실행되고 있다고 판단하는 단계를 더 포함하며,
    상기 갱신하는 단계는 상기 프로그램이 상기 프로세서상에서 실행되고 있다는 상기 판단에 따라 상기 매핑을 갱신하는 것을 특징으로 하는 방법.
  16. 제15항에 있어서,
    상기 매핑은 상기 프로그램의 오프라인 분석에 의해 판단되는 것을 특징으로 하는 방법.
  17. 제16항에 있어서,
    상기 복수의 미리결정된 MAT의 각각의 MAT에 대하여, 상기 MAT에 대한 매핑에 포함된 우선순위가 상기 오프라인 분석에 의해 판단된 MAT를 갖는 메모리 접근에 따라 할당된 캐시 라인의 평균 캐시 라인 수명에 기초하는 것을 특징으로 하는 방법.
  18. 제17항에 있어서,
    상기 복수의 미리 결정된 MAT의 각각의 MAT에 대하여, 상기 MAT에 대한 매핑에 포함된 우선순위가 상기 오프라인 분석에 의해 판단된 MAT를 갖는 메모리 접근에 따라 할당된 캐시 라인의 평균 히트율에 기초하는 것을 특징으로 하는 방법.
KR1020157033071A 2014-12-14 2014-12-14 메모리 접근 타입을 고려한 캐시 치환 정책 KR101835949B1 (ko)

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
KR20160086763A KR20160086763A (ko) 2016-07-20
KR101835949B1 true KR101835949B1 (ko) 2018-03-08

Family

ID=56126007

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157033071A KR101835949B1 (ko) 2014-12-14 2014-12-14 메모리 접근 타입을 고려한 캐시 치환 정책

Country Status (6)

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

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016097806A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Fully associative cache memory budgeted by memory access type
WO2016097805A1 (en) 2014-12-14 2016-06-23 Via Alliance Semicoductor Co., Ltd. Cache memory budgeted by ways on memory access type
EP3055775B1 (en) * 2014-12-14 2019-08-21 VIA Alliance Semiconductor Co., Ltd. Cache replacement policy that considers memory access type
US9898411B2 (en) * 2014-12-14 2018-02-20 Via Alliance Semiconductor Co., Ltd. Cache memory budgeted by chunks based on memory access type
WO2016097813A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Set associative cache memory with heterogeneous replacement policy
US11106599B2 (en) * 2016-09-30 2021-08-31 Intel Corporation System and method for replacement in associative memories using weighted PLRU trees
US11080810B2 (en) * 2017-04-21 2021-08-03 Intel Corporation Dynamically reconfigurable memory subsystem for graphics processors
US10424040B2 (en) * 2017-04-21 2019-09-24 Intel Corporation Dynamic allocation of cache based on instantaneous bandwidth consumption at computing devices
US10303608B2 (en) * 2017-08-22 2019-05-28 Qualcomm Incorporated Intelligent data prefetching using address delta prediction
US10509721B2 (en) * 2017-11-09 2019-12-17 Microsoft Technology Licensing, Llc Performance counters for computer memory
US11030109B2 (en) * 2019-06-06 2021-06-08 Samsung Electronics Co., Ltd. Mechanisms for a contention free lookup in a cache with concurrent insertions and deletions
TWI697778B (zh) * 2019-06-17 2020-07-01 慧榮科技股份有限公司 資料儲存裝置與資料處理方法
US11403103B2 (en) 2020-04-14 2022-08-02 Shanghai Zhaoxin Semiconductor Co., Ltd. Microprocessor with multi-step ahead branch predictor and having a fetch-target queue between the branch predictor and instruction cache
CN111459550B (zh) * 2020-04-14 2022-06-21 上海兆芯集成电路有限公司 具高度领先分支预测器的微处理器
TWI764311B (zh) * 2020-10-08 2022-05-11 大陸商星宸科技股份有限公司 記憶體存取方法及智慧處理裝置
US11556472B1 (en) 2021-08-04 2023-01-17 International Business Machines Corporation Data processing system having masters that adapt to agents with differing retry behaviors
CN113778936A (zh) * 2021-08-17 2021-12-10 华东计算技术研究所(中国电子科技集团公司第三十二研究所) 国产嵌入式dsp操作系统的性能优化方法
CN114138685B (zh) * 2021-12-06 2023-03-10 海光信息技术股份有限公司 缓存的资源分配方法及装置、电子装置和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
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 (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5255384A (en) * 1985-02-22 1993-10-19 Intergraph Corporation Memory address translation system having modifiable and non-modifiable translation mechanisms
US5353425A (en) * 1992-04-29 1994-10-04 Sun Microsystems, Inc. Methods and apparatus for implementing a pseudo-LRU cache memory replacement scheme with a locking feature
US6272595B1 (en) 1994-08-05 2001-08-07 Intel Corporation N-way set-associative cache memory which includes a store hit buffer for improved data access
US5732242A (en) * 1995-03-24 1998-03-24 Silicon Graphics, Inc. Consistently specifying way destinations through prefetching hints
GB2311880A (en) 1996-04-03 1997-10-08 Advanced Risc Mach Ltd Partitioned cache memory
US6092149A (en) * 1997-05-28 2000-07-18 Western Digital Corporation Disk drive cache system using a dynamic priority sequential stream of data segments continuously adapted according to prefetched sequential random, and repeating types of accesses
US6223256B1 (en) 1997-07-22 2001-04-24 Hewlett-Packard Company Computer cache memory with classes and dynamic selection of replacement algorithms
US6138209A (en) * 1997-09-05 2000-10-24 International Business Machines Corporation Data processing system and multi-way set associative cache utilizing class predict data structure and method thereof
US6055605A (en) 1997-10-24 2000-04-25 Compaq Computer Corporation Technique for reducing latency of inter-reference ordering using commit signals in a multiprocessor system having shared caches
US6047358A (en) * 1997-10-31 2000-04-04 Philips Electronics North America Corporation Computer system, cache memory and process for cache entry replacement with selective locking of elements in different ways and groups
US6370622B1 (en) * 1998-11-20 2002-04-09 Massachusetts Institute Of Technology Method and apparatus for curious and column caching
US6629206B1 (en) 1999-12-31 2003-09-30 Koninklijke Philips Electronics N.V. Set-associative cache-management using parallel reads and serial reads initiated during a wait state
US6889291B1 (en) 2000-06-30 2005-05-03 Intel Corporation Method and apparatus for cache replacement for a multiple variable-way associative cache
US6681295B1 (en) 2000-08-31 2004-01-20 Hewlett-Packard Development Company, L.P. Fast lane prefetching
US7707397B2 (en) * 2001-05-04 2010-04-27 Via Technologies, Inc. Variable group associativity branch target address cache delivering multiple target addresses per cache line
JP3620473B2 (ja) * 2001-06-14 2005-02-16 日本電気株式会社 共有キャッシュメモリのリプレイスメント制御方法及びその装置
JP2003131946A (ja) 2001-10-19 2003-05-09 Nec Corp キャッシュメモリ制御装置及び方法
US7266587B2 (en) * 2002-05-15 2007-09-04 Broadcom Corporation System having interfaces, switch, and memory bridge for CC-NUMA operation
US6912623B2 (en) * 2002-06-04 2005-06-28 Sandbridge Technologies, Inc. Method and apparatus for multithreaded cache with simplified implementation of cache replacement policy
US6944713B2 (en) 2002-06-18 2005-09-13 Intel Corporation Low power set associative cache
JP3989312B2 (ja) 2002-07-05 2007-10-10 富士通株式会社 キャッシュメモリ装置およびメモリ割付方法
US7076609B2 (en) * 2002-09-20 2006-07-11 Intel Corporation Cache sharing for a chip multiprocessor or multiprocessing system
US7290093B2 (en) * 2003-01-07 2007-10-30 Intel Corporation Cache memory to support a processor's power mode of operation
US7020748B2 (en) * 2003-01-21 2006-03-28 Sun Microsystems, Inc. Cache replacement policy to mitigate pollution in multicore processors
US7711901B2 (en) * 2004-02-13 2010-05-04 Intel Corporation Method, system, and apparatus for an hierarchical cache line replacement
US20050198442A1 (en) * 2004-03-02 2005-09-08 Mandler Alberto R. Conditionally accessible cache memory
JP4036206B2 (ja) * 2004-03-31 2008-01-23 日本電気株式会社 セットアソシアティブキャッシュシステム及びキャッシュメモリの制御方法
US7558920B2 (en) * 2004-06-30 2009-07-07 Intel Corporation Apparatus and method for partitioning a shared cache of a chip multi-processor
US7284095B2 (en) * 2004-08-18 2007-10-16 International Business Machines Corporation Latency-aware replacement system and method for cache memories
US7930484B2 (en) * 2005-02-07 2011-04-19 Advanced Micro Devices, Inc. System for restricted cache access during data transfers and method thereof
CN100437522C (zh) * 2005-09-09 2008-11-26 中国科学院计算技术研究所 一种远程内存服务器及其实现方法
CN1746865A (zh) 2005-10-13 2006-03-15 上海交通大学 数字信号处理器可重构指令高速缓存部分的实现方法
WO2007068122A1 (en) * 2005-12-16 2007-06-21 Univ Western Ontario System and method for cache management
US7689772B2 (en) * 2006-05-04 2010-03-30 Intel Corporation Power-performance modulation in caches using a smart least recently used scheme
CN100495362C (zh) * 2006-07-18 2009-06-03 威盛电子股份有限公司 可锁定码的快取及其处理器、控制器与控制方法
US7676632B2 (en) * 2006-07-18 2010-03-09 Via Technologies, Inc. Partial cache way locking
JP4299848B2 (ja) 2006-08-09 2009-07-22 エルピーダメモリ株式会社 半導体記憶装置
JP2008102733A (ja) * 2006-10-19 2008-05-01 Hitachi Ltd コード生成方法およびコンパイラ
US9104599B2 (en) * 2007-12-06 2015-08-11 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for destaging cached data
US7917701B2 (en) * 2007-03-12 2011-03-29 Arm Limited Cache circuitry, data processing apparatus and method for prefetching data by selecting one of a first prefetch linefill operation and a second prefetch linefill operation
US7921260B2 (en) * 2007-10-24 2011-04-05 International Business Machines Corporation Preferred write-mostly data cache replacement policies
US8335122B2 (en) * 2007-11-21 2012-12-18 The Regents Of The University Of Michigan Cache memory system for a data processing apparatus
US7962695B2 (en) * 2007-12-04 2011-06-14 International Business Machines Corporation Method and system for integrating SRAM and DRAM architecture in set associative cache
JP5217432B2 (ja) * 2007-12-28 2013-06-19 富士通株式会社 セクタ機能付きキャッシュメモリ
US8145985B2 (en) 2008-09-05 2012-03-27 Freescale Semiconductor, Inc. Error detection schemes for a unified cache in a data processing system
US8195884B2 (en) * 2008-09-18 2012-06-05 International Business Machines Corporation Network on chip with caching restrictions for pages of computer memory
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
US9183135B2 (en) 2011-01-21 2015-11-10 Micron Technology, Inc. Preparation of memory device for access using memory access type indicator signal
US20130219125A1 (en) 2012-02-21 2013-08-22 Microsoft Corporation Cache employing multiple page replacement algorithms
WO2013155673A1 (zh) 2012-04-17 2013-10-24 中兴通讯股份有限公司 片内共享缓存的管理方法及装置
US9767025B2 (en) 2012-04-18 2017-09-19 Qualcomm Incorporated Write-only dataless state for maintaining cache coherency
US10019381B2 (en) * 2012-05-01 2018-07-10 Nvidia Corporation Cache control to reduce transaction roll back
US10140219B2 (en) * 2012-11-02 2018-11-27 Blackberry Limited Multi-port shared cache apparatus
US9734059B2 (en) * 2012-11-21 2017-08-15 Advanced Micro Devices, Inc. Methods and apparatus for data cache way prediction based on classification as stack data
US9075730B2 (en) * 2012-12-21 2015-07-07 Advanced Micro Devices, Inc. Mechanisms to bound the presence of cache blocks with specific properties in caches
US20140189244A1 (en) * 2013-01-02 2014-07-03 Brian C. Grayson Suppression of redundant cache status updates
CN105793833B (zh) * 2014-09-18 2019-08-06 上海兆芯集成电路有限公司 处理器及其操作方法、计算机可读存储介质
US9275714B1 (en) * 2014-09-26 2016-03-01 Qualcomm Incorporated Read operation of MRAM using a dummy word line
EP3129886B1 (en) * 2014-12-14 2019-10-02 VIA Alliance Semiconductor Co., Ltd. Dynamic cache replacement way selection based on address tag bits
US9898411B2 (en) * 2014-12-14 2018-02-20 Via Alliance Semiconductor Co., Ltd. Cache memory budgeted by chunks based on memory access type
US10719434B2 (en) * 2014-12-14 2020-07-21 Via Alliance Semiconductors 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
EP3055775B1 (en) * 2014-12-14 2019-08-21 VIA Alliance Semiconductor Co., Ltd. Cache replacement policy that considers memory access type
WO2016097810A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon mode
WO2016097813A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Set associative cache memory with heterogeneous replacement policy
WO2016097806A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Fully associative cache memory budgeted by memory access type

Patent Citations (2)

* Cited by examiner, † Cited by third party
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
WO2016097807A1 (en) 2016-06-23
EP3055775A4 (en) 2017-07-19
KR20160086763A (ko) 2016-07-20
EP3055775B1 (en) 2019-08-21
TWI582591B (zh) 2017-05-11
US20160350228A1 (en) 2016-12-01
US9652398B2 (en) 2017-05-16
EP3055775A1 (en) 2016-08-17
TW201631482A (zh) 2016-09-01
CN105701023B (zh) 2019-04-16
CN105701023A (zh) 2016-06-22

Similar Documents

Publication Publication Date Title
KR101867143B1 (ko) 이종 치환 정책을 가진 셋트 연관 캐시 메모리
KR101835949B1 (ko) 메모리 접근 타입을 고려한 캐시 치환 정책
KR101817847B1 (ko) 메모리 접근 타입에 기초한 통로에 의해 버짓화된 캐시 메모리
US9898411B2 (en) Cache memory budgeted by chunks based on memory access type
EP3129887B1 (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
EP3049915B1 (en) Prefetching with level of aggressiveness based on effectiveness by memory access type
EP3055774A1 (en) Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or subset or tis ways depending on mode

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal