KR101820223B1 - 모드에 따라 선택적으로 하나 또는 복수의 셋트를 선택하도록 동적으로 구성가능한 멀티 모드 셋트 연관 캐시 메모리 - Google Patents
모드에 따라 선택적으로 하나 또는 복수의 셋트를 선택하도록 동적으로 구성가능한 멀티 모드 셋트 연관 캐시 메모리 Download PDFInfo
- Publication number
- KR101820223B1 KR101820223B1 KR1020157033313A KR20157033313A KR101820223B1 KR 101820223 B1 KR101820223 B1 KR 101820223B1 KR 1020157033313 A KR1020157033313 A KR 1020157033313A KR 20157033313 A KR20157033313 A KR 20157033313A KR 101820223 B1 KR101820223 B1 KR 101820223B1
- Authority
- KR
- South Korea
- Prior art keywords
- mode
- cache memory
- tag
- block
- cache
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0864—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0895—Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/123—Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/128—Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1021—Hit rate improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/601—Reconfiguration of cache memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6032—Way prediction in set-associative cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
캐시 메모리는 2^J-바이트 캐시 라인을 저장하고, 각각 X 비트인 태그를 보유하는 2^N 셋트의 배열, 태그 MA[(Q-1):(Q-X)]와 인덱스 MA[(Q-X-1):J]를 갖는 Q-비트 메모리 어드레스 MA[(Q-1):0]를 수신하는 입력을 포함한다. Q는 적어도 (N+J+X-1)인 정수이다. 제 1 모드에서: 셋트 선택 로직은 상기 인덱스와 상기 태그의 LSB를 이용하여 하나의 셋트를 선택하고; 비교 로직은 태그의 LSB를 제외한 모두를 상기 선택된 셋트 내의 각각의 태그의 LSB를 제외한 모두와 비교하고, 일치가 있으면 적중을 나타내며; 그렇지 않으면 할당 로직은 상기 선택된 셋트에 할당한다. 제 2 모드에서: 셋트 선택 로직은 인덱스를 이용하여 두 셋트를 선택하고; 비교 로직은 태그를 상기 선택된 두 셋트 내의 각각의 태그와 비교하고, 일치가 있으면 적중을 나타내며; 그리고 그렇지 않으면 상기 선택된 두 셋트 중 하나의 셋트에 할당한다.
Description
현대의 프로세서는 매우 다양한 특성을 갖는 데이터 셋트를 처리하거나 광범위한 다른 방식들의 데이터에 접근하는 프로그램을 실행하기 위하여 불러내진다. 데이터 셋트 특성과 접근 패턴은 프로세서의 캐시 메모리의 효과에 영향을 준다. 효과는 주로 적중율의 관점에서 측정된다.
그 크기에 더하여, 캐시 메모리의 연관성은 그것의 효과에 큰 영향을 미칠 수 있다. 캐시 메모리의 연관성은 그것의 메모리 어드레스에 기초하여 캐시 라인이 배치될 수 있는 캐시의 가능한 위치 또는 항목을 지칭한다. 캐시 라인이 배치되거나 또는 할당되는 가능한 위치의 수가 많을수록, 캐시의 연관성은 커진다. 일부 프로그램은 큰 연관성의 캐시 메모리로부터 혜택을 받으며 일부 프로그램은 낮은 연관성의 캐시 메모리로부터 혜택을 받는다.
그것의 연관성을 정상 모드 연관성보다 크게 그리고 또는 그것의 정상 연관성보다 낮게 변경하기 위하여 캐시 메모리가 프로세서의 동작 동안 동적으로 구성될 수 있도록 실시예가 설명된다.
본 발명의 목적은 모드에 따라 선택적으로 하나 또는 복수의 셋트를 선택하도록 동적으로 구성가능한 멀티 모드 셋트 연관 캐시 메모리를 사용자에게 제공하는 것이다.
일예에서 본 발명은 2^J-바이트 캐시 라인을 저장하기 위한 캐시 메모리를 제공하고, 여기서 J는 3보다 큰 정수이며, 캐시 메모리는 각각 X 비트인 태그를 보유하고, N과 X는 모두 5보다 큰 정수인 2^N 셋트의 배열; Q-비트 메모리 어드레스 MA[(Q-1):0]를 수신하는 입력으로서, Q-비트 메모리 어드레스는: 태그 부분 MA[(Q-1):(Q-X)]; 및 인덱스 부분 MA[(Q-X-1):J];을 가지고, Q는 적어도 (N+J+X-1)인 정수이며; 그리고 제 1 모드로 동작할 때: 셋트 선택 로직은 인덱스 부분과 태그 부분의 최하위 비트를 이용하여 배열 중에서 하나의 셋트를 선택하고; 비교 로직은 태그 부분의 최하위 비트를 제외한 모두를 선택된 하나의 셋트 내의 각각의 태그의 최하위 비트를 제외한 모두와 비교하고, 일치가 있으면 적중을 나타내며; 그리고 그렇지 않으면 할당 로직은 선택된 하나의 셋트에 할당하고; 그리고 제 2 모드로 동작할 때: 셋트 선택 로직은 인덱스 부분을 이용하여 배열 중에서 두 셋트를 선택하고; 비교 로직은 태그 부분을 선택된 두 셋트 내의 각각의 태그와 비교하고, 일치가 있으면 적중을 나타내며; 그리고 그렇지 않으면 할당 로직은 선택된 두 셋트 중 하나의 셋트에 할당한다.
다른 일예에서, 본 발명은 2^J-바이트 캐시 라인을 저장하기 위한 캐시 메모리를 동작시키는 방법을 제공하고, 여기서 J는 3보다 큰 정수이며, 캐시 메모리는 각각 X 비트인 태그를 보유한 2^N 셋트의 배열을 가지고, N과 X는 모두 5보다 큰 정수이며, 방법은: Q-비트 메모리 어드레스 MA[(Q-1):0]를 수신하는 단계로서, Q-비트 메모리 어드레스는: 태그 부분 MA[(Q-1):(Q-X)]; 및 인덱스 부분 MA[(Q-X-1):J];을 가지고, Q는 적어도 (N+J+X-1)인 정수이며; 그리고 제 1 모드로 동작할 때: 인덱스 부분과 태그 부분의 최하위 비트를 이용하여 배열 중에서 하나의 셋트를 선택하는 단계; 태그 부분의 최하위 비트를 제외한 모두를 선택된 하나의 셋트 내의 각각의 태그의 최하위 비트를 제외한 모두와 비교하고, 일치가 있으면 적중을 나타내는 단계; 및 그렇지 않으면 선택된 하나의 셋트에 할당하는 단계;를 포함하고, 그리고
제 2 모드로 동작할 때: 인덱스 부분을 이용하여 배열 중에서 두 셋트를 선택하는 단계; 태그 부분을 선택된 두 셋트 내의 각각의 태그와 비교하고, 일치가 있으면 적중을 나타내는 단계; 및 그렇지 않으면 선택된 두 셋트 중 하나의 셋트에 할당하는 단계;를 포함한다.
또 다른 일예에서, 본 발명은 프로세서를 제공하고, 프로세서는: 2^J-바이트 캐시 라인을 저장하기 위한 캐시 메모리를 포함하고, J는 3보다 큰 정수이며, 캐시 메모리는: 각각 X 비트인 태그를 보유하고, N과 X는 모두 5보다 큰 정수인 2^N 셋트의 배열; Q-비트 메모리 어드레스 MA[(Q-1):0]를 수신하는 입력으로서, Q-비트 메모리 어드레스는: 태그 부분 MA[(Q-1):(Q-X)]; 및 인덱스 부분 MA[(Q-X-1):J];을 가지고, Q는 적어도 (N+J+X-1)인 정수이며; 그리고 제 1 모드로 동작할 때: 셋트 선택 로직은 인덱스 부분과 태그 부분의 최하위 비트를 이용하여 배열 중에서 하나의 셋트를 선택하고; 비교 로직은 태그 부분의 최하위 비트를 제외한 모두를 선택된 하나의 셋트 내의 각각의 태그의 최하위 비트를 제외한 모두와 비교하고, 일치가 있으면 적중을 나타내며; 그리고 그렇지 않으면 할당 로직은 선택된 하나의 셋트에 할당하고; 그리고 제 2 모드로 동작할 때: 셋트 선택 로직은 인덱스 부분을 이용하여 배열 중에서 두 셋트를 선택하고; 비교 로직은 태그 부분을 선택된 두 셋트 내의 각각의 태그와 비교하고, 일치가 있으면 적중을 나타내며; 그리고 그렇지 않으면 할당 로직은 선택된 두 셋트 중 하나의 셋트에 할당한다.
본 발명은 모드에 따라 선택적으로 하나 또는 복수의 셋트를 선택하도록 동적으로 구성가능한 멀티 모드 셋트 연관 캐시 메모리를 사용자에게 제공할 수 있다.
도 1은 캐시 메모리를 도시하는 블록도이다.
도 2는 정상 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리를 도시하는 블록도이다.
도 3은 정상 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리의 동작을 도시하는 흐름도이다.
도 4는 팻 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리를 도시하는 블록도이다.
도 5는 팻 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도이다.
도 6은 팻 모드로부터 전환되도록 명령될 때 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도이다.
도 7은 직접 맵핑된 캐시로 스키니 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)를 도시하는 블록도이다.
도 8은 스키니-DM 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도이다.
도 9는 8-통로 셋트 연관 캐시로서 스키니 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)를 도시하는 블록도이다.
도 10은 스키니-8통로 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도이다.
도 11은 도 1의 캐시 메모리(102)의 실시예를 더욱 상세하게 도시한 블록도이다.
총괄적으로 도 12를 나타내는, 도 12a 및 도 12b는, 도 11의 캐시 메모리(102)의 로직을 가능하게 하는 뱅크를 도시하는 블록도이다.
도 13은 도 11의 캐시 메모리(102)의 적중 생성 논리를 도시하는 블록도이다.
도 14a는 도 1의 캐시 메모리(102)를 포함하는 프로세서를 포함하는 시스템의 동작을 도시하는 흐름도이다.
도 14b는 도 1의 캐시 메모리(102)의 프로세서의 구성을 도시하는 블록도이다.
도 14c는 도 1의 캐시 메모리(102)를 포함하는 도 14b의 프로세서의 동작을 도시하는 흐름도이다.
도 15는 도 1의 캐시 메모리(102)를 포함하는 프로세서를 포함하는 시스템의 동작을 도시하는 흐름도이다.
도 16은 캐시 메모리를 도시하는 블록도이다.
도 17은 도 16의 태그와 할당 모드에 기초하여 캐시 메모리(102)가 할당하는 통로의 부분집합을 선택하는 로직을 도시한 블록도이다.
도 18은 도 16의 캐시 메모리의 동작을 도시하는 흐름도이다.
도 19는 도 16의 캐시 메모리를 포함하는 프로세서를 포함하는 시스템의 동작을 도시하는 흐름도이다.
도 20은 프로그램 및 프로그램 단계를 위한 캐시 메모리 모드 구성의 생성을 도시하는 흐름도이다.
도 21은 메모리 접근 그래프와 그래프에서 추출된 데이터이다.
도 22는 프로그램의 단계 분석을 도시하는 흐름도이다.
도 23은 프로세서의 설정가능한 측면에 대한 좋은 구성을 결정하는 억지 방법을 도시하는 흐름도이다.
도 24는 프로세서를 도시하는 블록도이다.
도 2는 정상 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리를 도시하는 블록도이다.
도 3은 정상 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리의 동작을 도시하는 흐름도이다.
도 4는 팻 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리를 도시하는 블록도이다.
도 5는 팻 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도이다.
도 6은 팻 모드로부터 전환되도록 명령될 때 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도이다.
도 7은 직접 맵핑된 캐시로 스키니 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)를 도시하는 블록도이다.
도 8은 스키니-DM 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도이다.
도 9는 8-통로 셋트 연관 캐시로서 스키니 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)를 도시하는 블록도이다.
도 10은 스키니-8통로 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도이다.
도 11은 도 1의 캐시 메모리(102)의 실시예를 더욱 상세하게 도시한 블록도이다.
총괄적으로 도 12를 나타내는, 도 12a 및 도 12b는, 도 11의 캐시 메모리(102)의 로직을 가능하게 하는 뱅크를 도시하는 블록도이다.
도 13은 도 11의 캐시 메모리(102)의 적중 생성 논리를 도시하는 블록도이다.
도 14a는 도 1의 캐시 메모리(102)를 포함하는 프로세서를 포함하는 시스템의 동작을 도시하는 흐름도이다.
도 14b는 도 1의 캐시 메모리(102)의 프로세서의 구성을 도시하는 블록도이다.
도 14c는 도 1의 캐시 메모리(102)를 포함하는 도 14b의 프로세서의 동작을 도시하는 흐름도이다.
도 15는 도 1의 캐시 메모리(102)를 포함하는 프로세서를 포함하는 시스템의 동작을 도시하는 흐름도이다.
도 16은 캐시 메모리를 도시하는 블록도이다.
도 17은 도 16의 태그와 할당 모드에 기초하여 캐시 메모리(102)가 할당하는 통로의 부분집합을 선택하는 로직을 도시한 블록도이다.
도 18은 도 16의 캐시 메모리의 동작을 도시하는 흐름도이다.
도 19는 도 16의 캐시 메모리를 포함하는 프로세서를 포함하는 시스템의 동작을 도시하는 흐름도이다.
도 20은 프로그램 및 프로그램 단계를 위한 캐시 메모리 모드 구성의 생성을 도시하는 흐름도이다.
도 21은 메모리 접근 그래프와 그래프에서 추출된 데이터이다.
도 22는 프로그램의 단계 분석을 도시하는 흐름도이다.
도 23은 프로세서의 설정가능한 측면에 대한 좋은 구성을 결정하는 억지 방법을 도시하는 흐름도이다.
도 24는 프로세서를 도시하는 블록도이다.
이제 도 1을 참조하면, 캐시 메모리(102)가 도시된 블록도가 도시되어 있다. 캐시 메모리(102)는 입력으로 메모리 어드레스(MA)(104)를 수신하고 다른 입력으로 모드(108)를 수신한다. 모드(108)는 캐시 메모리(102)가 "정상(normal)" 모드, "팻(fat)" 모드 또는 "스키니(skinny)" 모드에서 동작하도록 구성되는지 여부를 특정한다. 이들 모드들 각각은 아래에서 더 상세히 설명된다.
메모리 어드레스(104)는 각각이 복수의 비트를 갖는, 세 부분으로 분해된다: 태그 부분(112), 인덱스 부분(114) 및 오프셋 부분(116). 오프셋(116)은 선택된 캐시 라인에 바이트 오프셋을 특정한다. 태그(112)와 인덱스(114)의 사용은 아래에서 더 상세히 설명된다. 설명의 편의를 위해, 도 1에 도시된 메모리 어드레스(104)의 실시예는 크기가 36 비트이고, 36 비트는 태그(112) = MA[35:16], 인덱스(114) = MA[15:6] 그리고 오프셋(116) = MA[5:0]으로 분해된다. 그러나, 캐시 메모리(102)의 연관성의 동적 변동, 즉 정상, 팻, 스키니 모드 사이의 전환은, 다른 수의 비트를 가지며 그 태그(112), 인덱스(114)와 오프셋(116) 부분에 다른 수의 비트로 분해되는 메모리 어드레스(104)를 수신한 캐시 메모리에서 수행될 수 있다는 것을 이해하여야 한다. 오프셋(116)의 비트의 수는 캐시 라인 크기(예를 들어, 64 바이트)를 특정하고, 후술하는 바와 같이 인덱스(114)는 모드(108)에 따라 캐시 메모리(102)의 하나 또는 두 개의 셋트를 선택한다.
캐시 메모리(102)는 복수의 통로에 따른 복수의 셋트로 설계된다. 설명의 편의를 위해, 도 1에 도시된 캐시 메모리(102)의 실시예는 2048 셋트와 16 통로를 갖는다. 그러나, 여기에서 설명되는 동적 연관성 변동은 다른 개수의 셋트와 다른 개수의 통로를 갖는 캐시 메모리에서 수행될 수 있다는 것을 이해하여야 한다. 각 셋트/통로의 조합은 캐시 라인을 저장하는 캐시 메모리(102) 내의 엔트리를 식별한다. 각 엔트리는 캐시 라인의 상태(예컨대, MESI 상태)와 캐시 라인의 태그(106)를 저장하기 위한 저장소뿐만 아니라 캐시 라인의 데이터를 저장하기 위한 저장소를 포함한다. 태그(106)는 캐시 라인이 존재하는 셋트 번호와 함께, 캐시 라인의 메모리 어드레스를 특정한다. 도 1의 실시예에서, 태그(106)는 메모리 어드레스(104)의 태그(112) 부분의 크기에 대응하는 20 비트이다. 바람직하게는, 캐시 메모리(102)는 캐시 라인의 데이터, 태그(106)와 대체 정보를 저장하기 위한 별도의 저장소 배열을 포함한다.
이하에서 보다 상세하게 설명되는 바와 같이, 팻 모드의 검색에서 인덱스(114)는 캐시 메모리(102)의 다른 두 셋트를 선택하는 데 이용되고, 메모리 어드레스(104)의 전체 태그(112)는 적중을 검출하기 위하여 선택된 두 셋트의 각각의 통로의 전체 태그(106)와 비교된다; 정상 모드와 스키니 모드에서 인덱스(114)와 태그(112)의 최하위 비트는 캐시 메모리(102) 중에서 하나의 셋트를 선택하는 데 이용되고, 메모리 어드레스(104)의 태그(106)의 LSB를 제외한 모두는 적중을 검출하기 위하여 선택된 하나의 셋트 각각의 통로의 태그(106)의 LSB를 제외한 모두와 비교된다. 팻 모드로 동작할 때 이것은 효과적인 연관성을 두 배로 하며 캐시 메모리(102)의 통로의 수를 절반으로 줄인다. 반대로, 스키니 모드에서 동작할 때, 캐시 메모리(102)는 태그(112)의 하위 비트의 하나 이상에 기초하여 캐시 라인에 할당될 수 있는 통로를 전체 통로의 부분집합으로 통로로 한정하며(예를 들어, 16에서 8로, 4로, 2로 또는 1로), 이는 통로의 부분집합을 한정하는 데 사용되는 태그(112)의 비트 숫자 두 배로 효과적인 연관성을 줄인다. 여기에 기술된 것과 같이, 팻 모드에서 벗어나기 위하여 응답과 무효화 연산이 특정한 캐시 라인 상에서 수행되어야 한다. 그러나, 일부 코드 스트림을 위해 팻 모드로 동작하는 것의 이득은 응답과 무효화 연산과 연관된 불이익의 가치가 있다. 스키니 모드로 또는 스키니 모드로부터의 전환은 응답과 무효화 연산을 요구하지 않는다.
이제 도 2를 참조하면, 정상 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리를 도시하는 블록도가 도시되어 있다. 보다 구체적으로, 모드 입력(108)은 정상 모드를 나타내는 값을 특정한다. 정상 모드에서, 캐시 메모리(102)는 하나의 셋트를 선택하고, 인덱스(114)에 의해 선택된 셋트 각각의 통로의 엔트리 태그(106)의 LSB를 제외한 모두를 메모리 어드레스(104) 태그(112)의 LSB를 제외한 모두와 비교하며, 그리고 도 3을 참조해 이하에서 더욱 상세하게 설명될 것과 같이, 선택한 셋트 중 어느 하나의 통로에 할당한다. 도 2의 실시예에서, 정상 모드에서 캐시 메모리(102)는 2048 셋트 x 16 통로 연관 캐시로서 동작한다.
이제 도 3을 참조하면, 도 3은 정상 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리의 동작을 도시하는 흐름도가 도시되어 있다. 흐름은 블록 302에서 시작한다.
블록 302에서, 모드(108) 입력이 정상 모드를 나타내는 동안 캐시 메모리(102)는 프로세싱 코어로부터 로드 요청을 수신한다. 로드 요청은 메모리 어드레스(104)를 포함한다. 흐름은 블록 304로 진행한다.
블록 304에서, 캐시 메모리(102)는 인덱스(114)와 연결된 태그(112)의 LSB를 이용하여 도 3에서 셋트 J로 지칭되는 하나의 셋트를 선택하며, 도 1의 예의 MA[16:6]가 된다. 흐름은 블록 306으로 진행한다.
블록 306에서, 캐시 메모리(102)는 선택된 셋트 J의 모든 16 통로의 각 엔트리에 대해 LSB를 제외한 메모리 어드레스(104) 태그(112)의 모든 비트를 LSB를 제외한 엔트리 태그(106)의 모든 비트와 비교한다. 또한, 상기 비교는 엔트리가 유효한지 여부를 확인한다. 흐름은 블록 308로 진행한다.
결정 블록 308에서, 캐시 메모리(102)는 블록 306에서 수행된 비교가 유효한 일치를 가져올지 여부를 판정한다. 만약 그렇다면, 흐름은 블록 312로 진행하며; 그렇지 않으면, 흐름은 블록 314로 진행한다.
블록 312에서, 캐시 메모리(102)는 적중을 나타낸다. 흐름은 블록 312에서 끝난다.
블록 314에서, 캐시 메모리(102)는 선택된 셋트 J 내에서 엔트리를 할당한다. 랜덤 또는 라운드-로빈(round-robin)과 같은 다른 대체 알고리즘이 사용되더라도, 바람직하게는 캐시 메모리(102)는 최소 최근 사용(LRU) 또는 의사-LRU인 셋트 J 내의 통로로부터 엔트리를 할당한다. 흐름은 블록 314에서 끝난다.
이제 도 4를 참조하면, 팻 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리를 도시하는 블록도가 도시되어 있다. 보다 구체적으로, 모드 입력(108)은 팻 모드를 나타내는 값을 특정한다. 팻 모드에서, 캐시 메모리(102)는 두 셋트를 선택하고, 인덱스(114)에 의해 선택된 셋트 각각의 통로의 엔트리 태그(106)를 메모리 어드레스(104) 태그(112)와 비교하며, 그리고 도 5를 참조해 이하에서 더욱 상세하게 설명될 것과 같이, 선택된 두 셋트 중 어느 하나의 통로 중 어느 하나에 할당한다. 이것은 효과적으로 통로의 수를 두 배로 하고 캐시 메모리(102)의 셋트의 수를 반으로 한다. 도 4의 예에서, 팻 모드에서 캐시 메모리(102)는 1024 셋트 x 32 통로 연관 캐시로서 동작한다.
이제 도 5를 참조하면, 팻 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도가 도시되어 있다. 흐름은 블록 502에서 시작한다.
블록 502에서, 모드 입력(108)이 팻 모드를 나타내는 동안, 캐시 메모리(102)는 프로세싱 코어로부터 로드 요청을 수신한다. 로드 요청은 메모리 어드레스(104)를 포함한다. 흐름은 블록 504로 진행한다.
블록 504에서, 캐시 메모리(102)는 도 5에 셋트 J와 셋트 K로 언급된 두 셋트를 선택한다. 셋트 J는 태그(112)와 연결된 이진 0을 이용하여 선택되고, 도 1의 예에서 MA[15:6]에 연결된 이진 0이 된다. 셋트 K는 태그(112)와 연결된 이진 1을 이용하여 선택되고, 도 1의 예에서 MA[15:6]에 연결된 이진 1이 된다. 흐름은 블록 506으로 진행한다.
블록 506에서, 선택된 셋트 J와 K의 모든 32 통로의 각 엔트리에 대하여 캐시 메모리(102)는 메모리 어드레스(104) 태그(112)를 엔트리 태그(106)과 비교한다. 또한, 상기 비교는 엔트리가 유효한지 여부를 확인한다. 흐름은 블록 508로 진행한다.
결정 블록 508에서, 캐시 메모리(102)는 블록 506에서 수행된 비교가 유효한 일치를 가져올지 여부를 판정한다. 만약 그렇다면, 흐름은 블록 512로 진행하며; 그렇지 않으면, 흐름은 블록 514로 진행한다.
블록 512에서, 캐시 메모리(102)는 적중을 나타낸다. 흐름은 블록 512에서 끝난다.
블록 514에서, 캐시 메모리(102)는 셋트 J 및 K 중 하나를 대체 셋트로 선택한다. 일 실시예에서, 만약 해시가 이진 0을 산출하면 셋트 J가 선택되고 만약 해시가 이진 1을 산출하면 셋트 K가 선택되도록 캐시 메모리(102)는 단일 비트로 메모리 어드레스(104)의 선택된 비트의 해시에 기초하여 대체 셋트를 선택하며, 이는 일반적으로 의사 - 랜덤 방식으로 대체 셋트를 선택하게 한다. 다른 실시예에서, 캐시 메모리(102)는 예를 들면 셋트의 LRU 통로와 같이 선택을 위해 저장된 정보에 부가하여, 각각의 셋트마다 저장된 대체 정보의 여분의 하나 이상의 비트를 이용하여 대체 셋트를 선택한다. 예를 들어, 하나의 여분의 비트는 셋트 J 또는 K가 LRU인지 여부를 특정한다. 흐름은 블록 516으로 진행한다.
블록 516에서, 캐시 메모리(102)는 대체 셋트의 엔트리를 할당한다. 랜덤 또는 라운드-로빈과 같은 다른 대체 알고리즘이 사용되더라도, 바람직하게는 캐시 메모리(102)는 최소 최근 사용(LRU) 또는 의사-LRU 대체 방식에 따라서 대체 셋트의 엔트리를 할당한다.
이제 도 6을 참조하면, 팻 모드로부터 전환되도록 명령될 때 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도가 도시되어 있다. 흐름은 블록 602에서 시작한다.
블록 602에서, 캐시 메모리(102)는 팻 모드로부터 전환되도록 명령을 받는다. 즉, 모드(108)는 팻 모드로부터 정상 모드 또는 스키니 모드로 전환하게 한다. 흐름은 블록 604로 진행한다.
블록 604에서, 캐시 메모리(102)는 캐시 메모리(102)의 각각의 셋트를 철저히 검색하고(즉, 각각의 셋트 번호에 대하여), 셋트 내의 각각의 엔트리에 대하여 태그(106)의 LSB를 셋트 번호의 MSB와 비교한다. 불일치하다면, 캐시 메모리(102)는 엔트리를 무효화한다. 그러나, 엔트리를 무효화하기 전에, 만약 상태가 캐시라인이 더티(dirty)이거나, 또는 수정되었다고 나타내는 경우, 캐시 메모리(102)는 메모리에 캐시 라인의 데이터를 응답한다. 이 연산은 캐시 메모리(102)의 일관성을 유지시키는 역할을 한다. 흐름은 블록 604에서 끝난다.
팻 모드 작동의 잠재적 단점은 태그의 두 셋트 가치를 비교하여야 하기 때문에 비-팻 모드보다 잠재적으로 전력을 더 소비한다는 것이다. 그러나, 부가적인 캐시 효율성을 위한 전력 소비의 트레이드오프는 일부 시스템에서 일부 사용자에게 바람직할 수 있다. 게다가, 멀티-코어 프로세서에서, 전체 코어보다 적게 작동하는 경우, 캐시 메모리(102)에 접근하는 모든 코어의 요구사항을 지원하도록 캐시 메모리(102)가 설계될 수 있기 때문에 부가적인 태그 배열 접근(예를 들어, 도 11의 실시예에서, 부가적인 뱅크 접근)은 허용될 수 있다.
이제 도 7을 참조하면, 직접 맵핑된 캐시로 스키니 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)를 도시하는 블록도가 도시되어 있다. 보다 구체적으로, 모드 입력(108)은 스키니-DM이라고 언급되는 스키니 직접 매핑 모드를 나타내는 값을 특정한다. 스키니 모드에서, 캐시 메모리(102)는 하나의 셋트를 선택하고, 정상 모드와 비슷하게, 인덱스(114)에 의하여 선택된 셋트 각각의 통로의 엔트리 태그(106)의 LSB를 제외한 모두를 메모리 어드레스(104)의 태그(112)의 LSB를 제외한 모두와 비교한다; 그러나, 스키니-DM 모드에서, 캐시 메모리(102)는 선택된 셋트의 하나의 통로에만 할당한다. 그 하나의 통로는 메모리 어드레스(104)의기 설정된 비트에 특정된다. 바람직하게, 상기 기 설정된 비트는 태그(112)의 다음 최하위 log2N 비트이고, 여기서 N은 캐시 메모리(102)의 통로의 수이다. 다르게 말하면, 상기 기 설정된 비트는 LSB, 태그(112)의 log2N 비트를 제외한 최하위이며, 도 8을 참조해 이하에서 더욱 상세하게 설명될 것과 같이, 도 1의 실시예에서 MA[20:17]에 해당한다. 도 7의 예에서, 스키니-DM 모드에서 캐시 메모리(102)는 32768 셋트 직접 매핑 캐시로서 동작한다.
이제 도 8을 참조하면, 스키니-DM 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도가 도시되어 있다. 흐름은 블록 802에서 시작한다.
블록 802에서, 모드(108) 입력이 스키니-DM 모드를 나타내는 경우, 캐시 메모리(102)는 프로세싱 코어로부터 로드 요청을 수신한다. 로드 요청은 메모리 어드레스(104)를 포함한다. 흐름은 블록 804로 진행한다.
블록 804에서, 캐시 메모리(102)는 인덱스(114)와 연결된 태그(112)의 LSB를 이용하여 도 8에 셋트 J로 언급된 하나의 셋트를 선택하며, 도 1의 예의 MA[16:6]가 된다. 흐름은 블록 806으로 진행한다.
블록 806에서, 캐시 메모리(102)는 선택된 셋트 J의 모든 16 통로의 각 엔트리에 대해 LSB를 제외한 메모리 어드레스(104) 태그(112)의 모든 비트를 LSB를 제외한 엔트리 태그(106)의 모든 비트와 비교한다. 또한, 상기 비교는 엔트리가 유효한지 여부를 확인한다. 흐름은 블록 808로 진행한다.
결정 블록 808에서, 캐시 메모리(102)는 블록 806에서 수행된 비교가 유효한 일치를 가져올지 여부를 판정한다. 만약 그렇다면, 흐름은 블록 812로 진행하며; 그렇지 않으면, 흐름은 블록 814로 진행한다.
블록 812에서, 캐시 메모리(102)는 적중을 나타낸다. 흐름은 블록 812에서 끝난다.
블록 814에서, 캐시 메모리(102)는 선택된 셋트 J의 MA[20:17]에 의하여 특정된 통로 내의 엔트리를 할당한다. 이러한 방법으로, 스키니-DM 모드로 구성될 때 캐시 메모리(102)는 직접 매핑 캐시로서 동작한다. 흐름은 블록 814에서 끝난다.
위에서 언급한 바와 같이, 유리하게, 스키니 모드로 또는 스키니 모드로부터의 전환은 응답과 무효 연산을 요구하지 않는다. 하지만, 전환 후 짧은 시간동안 대체 비트 값의 관점에서 약간 불이익이 있음을 주목하여야 한다(예를 들어, LRU 또는 의사-LRU 비트). 예를 들어, 스키니 모드에서 정상 모드로 전환할 때, 대체 비트는 예상되는 정상 모드 LRU 값을 가질 수 없다.
이제 도 9를 참조하면, 8-통로 셋트 연관 캐시로서 스키니 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)를 도시하는 블록도가 도시되어 있다. 보다 상세하게는, 모드 입력(108)은 스키니-8통로라고 지칭되는 스키니 8-통로 모드를 나타내는 값을 특정한다. 스키니 8통로 모드에서, 캐시 메모리(102)는 하나의 셋트를 선택하고, 정상 모드와 유사하게, 인덱스(114)에 의해 선택된 셋트 각각의 통로의 엔트리 태그(106)의 LSB를 제외한 모두를 메모리 어드레스(104)의 태그(112)의 LSB를 제외한 모두와 비교한다. 그러나, 스키니-8통로 모드에서는 캐시 메모리(102)는 선택된 셋트의 16통로의 부분집합 중 어느 하나에 할당한다. 상기 부분집합은 메모리 어드레스(104)의 기 설정된 비트에 의하여 선택된 셋트의 8 홀수 통로, 또는 선택된 셋트의 8 짝수 통로 중 하나로 특정된다. 일 실시예에서, 상기 기 설정된 비트는 태그(112)의 다음 최하위 log2N 비트이다. 다르게 말하면, 기 설정된 비트는 LSB, 태그(112)의 비트를 제외한 최하위이며, 도 10을 참조해 이하에서 더욱 상세하게 설명될 것과 같이, 도 1의 실시예에서 MA[17]에 해당한다. 다른 실시예에서, 기 설정된 비트는 다른 방법을 이용하여 생성된다. 예를 들어, 기 설정된 비트는 태그(112)의 다수의 비트 불린 배타적 OR(XOR)로 생성될 수 있다(바람직하게는 셋트를 선택하기 위하여 사용되는 태그(112)의 비트를 제외하고, 예를 들어, MA[16]). 이것은, 후술하는 바와 같이, 캐시 라인이 병리학적으로 에일리어싱되는 경우에 특히 유리할 수 있다. 또한, XOR 이외의 다른 기능은 태그(112)의 다수의 비트를 하나의 비트에 응축하는 데 사용될 수 있다. 도 9의 예에서, 스키니-8통로 모드에서 캐시 메모리(102)는 4096 셋트 4096 × 8 통로 연관 캐시로서 동작한다.
이제 도 10을 참조하면, 스키니-8통로 모드에서 동작하도록 구성되는 경우 도 1의 캐시 메모리(102)의 동작을 도시하는 흐름도가 도시되어 있다. 흐름도는 블록 1002에서 시작한다.
블록 1002에서, 모드(108) 입력이 스키니-8WAY 모드를 지시하는 동안 캐시 메모리(102)는 프로세싱 코어로부터의 로드 요청을 수신한다. 로드 요청은 메모리 어드레스(104)를 포함한다. 흐름은 블록 1004로 진행한다.
블록 1004에서, 캐시 메모리(102)는 인덱스(114)에 연결된 태그(112)의 LSB를 이용하여 도 10에 셋트 J로 언급된 하나의 셋트를 선택한다. 흐름은 블록 1006으로 진행한다.
블록 1006에서, 선택된 셋트 J의 모든 16 통로의 각 엔트리에 대하여 캐시 메모리(102)는 LSB를 제외한 메모리 어드레스(104) 태그(112)의 모든 비트를 LSB를 제외한 엔트리 태그(106)의 모든 비트와 비교한다. 또한, 상기 비교는 엔트리가 유효한지 여부를 확인한다. 흐름은 블록 1008로 진행한다.
결정 블록 1008에서, 캐시 메모리(102)는 블록 1006에서 수행된 비교가 유효한 일치를 가져올지 여부를 판정한다. 만약 그렇다면, 흐름은 블록 1012로 진행하며; 그렇지 않으면, 흐름은 블록 1014로 진행한다.
블록 1012에서, 캐시 메모리(102)는 적중을 나타낸다. 흐름은 블록 1012에서 끝난다.
결정 블록 1013에서, 캐시 메모리(102)는 비트 MA[17]을 검사한다. 만약 비트 MA[17]이 이진 1이라면, 흐름은 블록 1016으로 진행한다; 만약 비트 MA[17]이 이진 0이라면, 흐름은 블록 1014로 진행한다. 도 9와 관련하여 상술하였듯이, 결정 블록 1013에서 검사된 비트가 MA[17]과 다른 태그(112)의 다른 비트이거나, 또는 태그(112)의 다수의 비트의 기능이 생성된 다른 실시예들이 고려된다.
블록 1014에서, 캐시 메모리(102)는 선택된 셋트 내의 짝수의 통로 중 일부에 엔트리를 할당한다. 랜덤 또는 라운드-로빈과 같은 다른 대체 알고리즘이 사용되더라도, 바람직하게는 캐시 메모리(102)는 최소 최근 사용(LRU) 또는 의사-LRU 대체 방식에 따라서 선택된 셋트 내의 짝수의 통로에 엔트리를 할당한다. 흐름은 블록 1014에서 끝난다.
블록 1016에서, 캐시 메모리(102)는 선택된 셋트 내의 홀수의 통로 중 일부에 엔트리를 할당한다. 랜덤 또는 라운드-로빈과 같은 다른 대체 알고리즘이 사용되더라도, 바람직하게는 캐시 메모리(102)는 최소 최근 사용 또는 의사-LRU 대체 방식에 따라서 선택된 셋트 내의 홀수의 통로에 엔트리를 할당한다. 흐름은 블록 1016에서 끝난다.
두 스키니 모드 실시예, 즉 스키니 직접 매핑 모드와 스키니 8-통로 모드가 설명되었으나, 이것들은 스키니 모드를 도시하기 위하여 설명되었고, 이러한 실시예로 한정되는 것은 아니라는 점을 이해하여야 한다. 예를 들어, 도 1의 도시적인 실시예와 관련하여, 스키니 4-통로 모드는 MA[18:17]가 대체를 위한 네 가지 통로 각각의 네 부분집합을 선택하는 데 이용되도록 구성된다; 스키니 2-통로 모드는 MA[19:17]가 대체를 위한 두 가지 통로 각각의 두 부분집합을 선택하는 데 이용되도록 구성된다. 다른 실시예에서, 상술한 것과 같이, 태그(112)의 다른 비트는 대체를 위한 통로의 부분집합을 선택하는 데 이용될 수 있고, 비트들은 대체를 위한 통로의 부분집합을 선택하기 위하여 이용되는 비트를 생성하는 함수(예를 들어, XOR)에 입력이 될 수 있다.
스키니 모드는 LRU 또는 의사-LRU 대체 방책의 매우 빈약하게 되는 특정 병리학 프로그램에 도움이 될 수 있다. 예를 들어, 프로그램이 메모리에서 움직이고, 로드가 요청될 때 캐시 메모리(102) 내에서 놓치는 병적 에일리어싱 효과를 가지며, 프로그램이 필요로 하는 바로 다음 라인을 걷어찬다고 가정하라. 그러나, 스키니 모드로의 전환으로 인하여 캐시 메모리(102)의 효과적인 연관성이 감소할 때, 그 문제점이 해결된다.
예를 들어, 프로그램은 캐시 메모리(102)의 셋트 내에서 하반부가 상반부로 불리는 메모리의 매우 큰 데이터 구조에 접근할 수 있다. 그러나, 하반부와 상반부가 다른 사용 패턴을 가지며, 이는 LRU 대체를 효과적이지 못하게 만든다. 스키니 모드-8통로를 통하여 캐시 메모리(102)의 효과적인 연동성을 감소시킴으로써 절반의 데이터 구조는 효과적으로 캐시 메모리(102) 내의 나머지 반으로부터 절연된다. 병리학적 사건의 이러한 종류는 프로그램의 오프라인 분석을 이용하여 결정될 수 있으며, 이는 도 14a 내지 도 14c와 관련하여 아래에 설명한 것과 같이, 캐시 메모리(102)를 재구성하는 데 이용될 수 있다.
또 다른 예를 들면, 그 어드레스는 태그(112)의 상위 차수 비트의 차이를 제외하고 동일하기 때문에, 프로그램이 캐시 메모리(102)의 동일한 셋트로 불리는 두 개의 데이터 셋트에 접근하는 것을 가정하라. 이 경우, 데이터 셋트 중 하나의 대체 방책을 다른 것으로부터 절연시키는 것이 유익할 수 있다. 이것은 대체를 위하여 선택되는 통로의 부분집합을 제한하기 위하여 이용된 비트를 생성하는 두 데이터 셋트 중 다른 태그(112)의 상위 차수 비트에 대응하는 태그(112)의 비트를 사용함으로써 얻어질 수 있다. 예를 들어, 이것은 증가된 캐시 메모리(102) 효과가 달성될 때까지 다른 태그(112) 어드레스 비트 선택을 반복하는 도 15을 참조하여 이하에서 설명되는 방법을 이용하여 달성될 수 있거나, 또는 이것은 도 14a 내지 도 14c와 관련된 프로그램의 오프라인 분석을 통하여 달성될 수 있다.
이제 도 11을 참조하면, 도 1의 캐시 메모리(102)의 실시예를 더욱 상세하게 도시한 블록가 도시되어 있다. 특히, 도 11의 실시예는 듀얼 포트 뱅킹된 캐시 메모리(102)이다. 캐시 메모리(102)는 네 개의 뱅크(1106)를 포함하며, 뱅크 0(1106-0), 뱅크 1(1106-1), 뱅크 2(1106-2), 뱅크 3(1106-3)으로 표시된다. 각각의 뱅크(1106)는 캐시 메모리(102)의 1/4 셋트, 즉 512 셋트를 저장할 수 있는 용량을 갖는다. 도 11의 실시예에서, 뱅크 0(1106-0)은 값 모듈로 4 = 0인 셋트를 보유하고, 뱅크 1(1106-1)은 값 모듈로 4 = 1인 셋트를 보유하며, 뱅크 2(1106-2)는 값 모듈로 4 = 2인 셋트를 보유하고, 뱅크 3(1106-3)은 값 모듈로 4 = 3인 셋트를 보유한다.
캐시 메모리(102)는 또한 두 개의 포트(1104)를 포함하며, 포트 A(1104A), 포트 B(1104B)로 표시된다. 각각의 포트(1104)는 각각의 뱅크(1106)와 결합된다. 포트(1106) 각각은 입력으로 모드(108)를 수신한다.
캐시 메모리(102)는 또한 두 개의 태그 파이프라인(1102)를 포함하며, 태그 파이프라인 A(1102A), 태그 파이프라인 B(1102B)로 표시된다. 태그 파이프라인 A(1102A)는 포트 A(1104A)를 통하여 뱅크(1106)에 접근하고, 태그 파이프라인 B(1102B)는 포트 B(1104B)를 통하여 뱅크(1106)에 접근한다. 태그 파이프라인(1102) 각각은 입력으로 모드(108)를 수신한다. 다양한 모드에서 셋트 선택을 위한 뱅크(1106)의 선택 또는 가능하게 함(enablement)은 도 12를 참조하여 이하에서 더 상세하게 설명되며, 다양한 모드에서 캐시 메모리(102)에 의한 적중 생성은 도 13을 참조하여 이하에서 더 상세하게 설명된다. 바람직하게는, 여기의 다양한 실시예에서 설명되는 것과 같이, 태그 파이프라인(1102)은 셋트(팻 모드의 경우 두 개의 셋트)의 선택을 수행하는 선택 로직(미도시); 및 여기의 다양한 실시예에서 설명되는 것과 같이, 배열에 할당하는 할당 로직(미도시);을 포함한다. 나아가 바람직하게는 태그 파이프라인(1102)은 도 16 내지 19의 실시예의 할당 모드 입력에 의하여 특정되는 태그 비트 상의 기능을 수행하는 로직을 포함한다. 바람직하게는, 태그 파이프라인(1102)은 복수의 스테이지를 포함하며, 각각의 스테이지는 여기에서 설명되는 다양한 실시예의 셋트 선택, 태그 비교, 통로 할당과 통로 부분집합 결정을 달성하기 위한 다른 연산을 수행한다.
포트 A(1104A)와 포트 B(1104B)는 그들이 동일한 뱅크(1106)를 선택하지 않는 한 동시에 활성화될 수 있다. 이것은 효과적으로 네 개의 단일-포트 뱅크(1106)로부터 듀얼-포트 캐시 메모리(102)를 제공한다. 바람직하게는, 캐시 메모리(102)의 중재 로직은, 특히 캐시 메모리(102)가 팻 모드일 때, 비충돌 뱅크(1106)에 접근하는 두 태그 파이프라인(1102)으로부터의 중재 요청의 선택을 시도한다.
총괄적으로 도 12를 나타내는, 도 12a 및 도 12b를 참조하면, 도 11의 캐시 메모리(102)의 로직을 가능하게 하는 뱅크를 도시하는 블록도가 도시된다. 도 12a를 참조하면, 뱅크 활성화 로직(1200)은 태그 파이프라인 A(1102A)로부터 팻 모드 인디케이터(1209)와 메모리 어드레스 MA(104-A)를 수신하고, 대응하여 포트 A(1104A)에 대한 뱅크 활성화(ENxA, 여기서 x는 뱅크 숫자)를 생성하는 뱅크 활성화 로직(1200A)을 포함한다. 팻 모드 인디케이터(1209)는 팻 모드로 동작하는 캐시 메모리(102)의 참(true)이고 그렇지 않으면 거짓(false)이며, 모드 인디케이터(108)를 수신하는 로직(미도시)에 의하여 생성된다. 뱅크 활성화 로직(1200)은 또한 태그 파이프라인 B(1102B)로부터 팻 모드 인디케이터(1209)와 메모리 어드레스 MA(104-B)를 수신하고, 대응하여 포트 B(1104B)에 대한 뱅크 활성화(ENxB, 여기서 x는 뱅크 숫자)를 생성하는 뱅크 활성화 로직(1200B)을 포함한다. 포트 A뱅크 활성화 로직(1200A)은 상세하게 설명되고, 그리고 포트 B 뱅크 활성화 로직(1200B)은 상술한 것과 같이 그것의 입력과 출력을 제외하고 동일하다.
뱅크 활성화 로직(1200A)은 MA[7](104-A)를 수신하는 제 1 인버터(1204-0), MA[6](104-A)를 수신하는 제 2 인버터(1208-0), 제 1 인버터(1204-0)의 출력과 팻 모드 인디케이터(1209)를 수신하는 제 1 OR 게이트(1202-0), 그리고 포트 A(1104A)에 대한 뱅크 0(1106-0) 활성화인 EN0A(1212-0A)를 생성하기 위하여 제 1 OR 게이트(1202-0)의 출력과 제 2 인버터(1208-0)의 출력을 수신하는 제 1 AND 게이트(1206-0)를 포함한다.
뱅크 활성화 로직(1200A)은 또한 MA[7](104-A)를 수신하는 제 3 인버터(1204-1), 제 3 인버터(1204-1)의 출력과 팻 모드 인디케이터(1209)를 수신하는 제 2 OR 게이트(1202-1), 그리고 포트 A(1104A)에 대한 뱅크 1(1106-1) 활성화인 EN1A(1212-1A)를 생성하기 위하여 제 2 OR 게이트(1202-1)의 출력과 MA[6](104-A)을 수신하는 제 1 AND 게이트(1206-0)를 포함한다.
뱅크 활성화 로직(1200A)은 또한 MA[6](104-A)를 수신하는 제 4 인버터(1208-2), MA[7](104-A)와 팻 모드 인디케이터(1209)를 수신하는 제 3 OR 게이트(1202-2), 그리고 포트 A(1104A)에 대한 뱅크 2(1106-2) 활성화인 EN2A(1212-2A)를 생성하기 위하여 제 3 OR 게이트(1202-2)의 출력과 제 4 인버터(1208-2)의 출력을 수신하는 제 3 AND 게이트(1206-2)를 포함한다.
뱅크 활성화 로직(1200A)은 또한 MA[7](104-A)와 팻 모드 인디케이터(1209)를 수신하는 제 4 OR 게이트(1202-3), 그리고 포트 A(1104A)에 대한 뱅크 3(1106-3) 활성화인 EN3A(1212-3A)를 생성하기 위하여 제 4 OR 게이트(1202-3)의 출력과 MA[6](104-A)을 수신하는 제 4 AND 게이트(1206-3)를 포함한다.
도 12b를 참조하면, 뱅크 활성화 로직(1200)은 EN0(1216-0)을 생성하기 위하여 포트 A 뱅크 활성화 로직(1200A)으로부터 EN0A(1212-0A)와 포트 B 뱅크 활성화 로직(1200B)으로부터 EN0B(1212-0B)를 수신하는 제 1 OR 게이트(1214-0)를 포함하며, 뱅크 0(1106-0)을 가능하게 하는 뱅크로 제공된다. 뱅크 활성화 로직(1200)은 또한 EN1(1216-1)을 생성하기 위하여 포트 A 뱅크 활성화 로직(1200A)으로부터 EN1A(1212-1A)와 포트 B 뱅크 활성화 로직(1200B)으로부터 EN1B(1212-1B)를 수신하는 제 2 OR 게이트(1214-1)를 포함하며, 뱅크 1(1106-1)을 가능하게 하는 뱅크로 제공된다. 뱅크 활성화 로직(1200)은 또한 EN2(1216-2)을 생성하기 위하여 포트 A 뱅크 활성화 로직(1200A)으로부터 EN2A(1212-2A)와 포트 B 뱅크 활성화 로직(1200B)으로부터 EN2B(1212-2B)를 수신하는 제 3 OR 게이트(1214-2)를 포함하며, 뱅크 2(1106-2)를 가능하게 하는 뱅크로 제공된다. 뱅크 활성화 로직(1200)은 또한 EN3(1216-3)을 생성하기 위하여 포트 A 뱅크 활성화 로직(1200A)으로부터 EN3A(1212-3A)와 포트 B 뱅크 활성화 로직(1200B)으로부터 EN3B(1212-3B)를 수신하는 제 4 OR 게이트(1214-3)를 포함하며, 뱅크 3(1106-3)을 가능하게 하는 뱅크로 제공된다.
이제 도 13을 참조하면, 도 11의 캐시 메모리(102)의 적중 생성 논리를 도시하는 블록도가 도시되어 있다. 저장소 구성은 도 1의 캐시 메모리(102)의 엔트리의 태그(106)를 보유하는 것으로 도시된다. 도 13을 실시예에서, 저장소 구성은 20-비트 태그(106)를 보유한다. 다른 저장소 구성은 엔트리의 유효 인디케이터(1302)를 보유하는 것으로 도시된다. 태그(106) 저장소 구성은 MA[35:16](104)를 수신하고, 할당 신호(1301)가 참일 때 MA[35:16](104) 값이 태그(106)에 기재되고 유효 인디케이터(1302)는 엔트리가 유효한 것을 나타내기 위해 업데이트된다. 반대로, 할당 해제 신호(1303)가 참일 때 유효 인디케이터(1302)는 엔트리가 무효한 것을 나타내기 위해 업데이트된다. 도 3에 도시된 것과 같이, 할당 신호(1301)와 할당 해제 신호(1303)는 도 13의 셋트 J와 통로 0에 나타낸 특정 셋트와 통로에 특정된다. 그러나, 캐시 메모리(102)의 각각의 셋트와 통로에 대하여 할당 신호(1301)와 할당 해제 신호(1303)가 존재한다는 것을 이해하여야 한다.
적중 생성 로직(1300)은 태그(106)와 MA[35:16](104)를 수신하는 비교기(1304)를 포함한다. 비교기(1304)는 또한 도 12의 팻 모드 인디케이터(1209)를 수신한다. 팻 모드 인디케이터(1209)가 참일 때, 도 5의 블록 506과 같이, 비교기(1304)는 일치가 발생하였는지 여부를 나타내는 그것의 출력을 생성하기 위하여 태그(106)의 모든 20 비트를 MA[35:16]과 비교한다. 그러나, 팻 모드 인디케이터(1209)가 거짓일 때, 각각 도 3, 8, 9의 블록 306, 806, 1006과 같이, 비교기(1304)는 그것의 출력을 생성하기 위하여 태그(106)의 상위 19 비트만을 MA[35:17]과 비교한다. AND 게이트(1306)는 셋트 J 통로 0에 대한 일치가 발생하였는지 여부를 나타내는 셋트 J 통로 0 적중 신호(1308-J0)을 생성하기 위하여 비교기(1304)의 출력과 유효 비트(1302)를 수신한다. 도 13에 도시된 것과 같이, 셋트 J 통로 0 적중 신호(1308-J0)는 특정 셋트와 통로에 특정되나, 캐시 메모리(102)의 각각의 셋트와 통로에 대하여 적중 신호가 존재한다는 것을 이해하여야 한다.
적중 생성 로직(1300)은 또한 셋트 J의 각각의 통로에 대한 셋트 J 통로 x 적중 신호(1308-Jx)를 수신하는 제 1 OR 게이트(1312-J)를 포함하며, x는 통로 숫자, 즉 도 13의 0에서 15까지 표시된 16가지 다른 통로이다.
적중 생성 로직(1300)은 또한 셋트 K의 16 통로의 각각에 대한 셋트 K 통로 x 적중 신호(1308-Kx)를 수신하는 제 2 OR 게이트(1312-K)를 포함한다. 셋트 K는 팻 모드일 때 두번째로 선택된 셋트이고, 예를 들어 도 5의 블록 504에 따르면 1:MA[15:6]에 의해 선택된 셋트이다. OR 게이트(1312-K)는 셋트 K 적중 신호(1314-K)를 생성한다.
적중 생성 로직(1300)은 또한 팻 모드 적중 신호(1318)를 생성하기 위하여 셋트 J 적중 신호(1314-J)와 셋트 K 적중 신호(1314-K)를 수신하는 OR 게이트(1316)를 포함한다. 적중 생성 로직(1300)은 또한 셋트 J 적중 신호(1314-J)와 팻 모드 적중 신호(1318)를 수신하고, 각각 도 3, 5, 8, 10의 블록 312, 512, 812, 1012과 같이 캐시 메모리(102)에 적중이 발생하였는지 여부를 나타내는 그것의 출력 적중 신호(1324) 제공을 위하여 팻 모드 신호(1209)가 거짓이면 전자를 선택하고 아니면 후자를 선택하는 mux(1332)를 포함한다.
이제 도 14a를 참조하면, 도 1의 캐시 메모리(102)를 포함하는 프로세서를 포함하는 시스템의 동작을 도시하는 흐름도가 도시되어 있다. 흐름도는 블록 1402에서 시작한다.
블록 1402에서, 시스템은 새로운 프로세스 또는 프로그램이 작동 중인 것을 검출한다. 일 실시예에서, 프로세서(100)에서 작동 중인 시스템 소프트웨어는 새로운 프로세스를 검출하고, 예를 들어 장치 드라이버는 운영 체제 프로세스 테이블을 관찰한다. 시스템 소프트웨어는 도 14b와 관련하여 아래에 설명하는 것과 같이 프로그램이 다른 단계 각각에 들어간 것을 검출하기 위하여 프로세서에 의해 사용될 수 있는 프로세서에 정보를 제공할 수 있으며, 시스템 소프트웨어는 단계의 각각에 대하여 다른 모드를 업데이트할 수 있다. 지시에 응답하여, 프로세서는 모드(108)를 업데이트하고, 제공되는 경우 초기 단계 식별자(도 14b의 1412)와 단계 검출기(도 14b의 1414)를 로딩한다. 일 실시예에서, 프로세서 자체는 새로운 프로세스를 검출하고, 예를 들어 프로세서는 프로세스 컨텍스트 식별자(PCID)의 변화를 검출하며, 예를 들어 새 값이 x86 명령어 셋트 아키텍처의 CR3 레지스터의 PCID 부분에 로드된다. 일 실시예에서, 프로세서는 프로그램 변화 보다는 현제 작동 중인 프로그램의 새로운 단계로의 전환을 검출한다. 흐름은 블록 1404로 진행한다.
블록 1404에서, 캐시 메모리(102)는, 예를 들어 모드 인디케이터(108)를 통하여, 블록 1402에서 검출된 프로세스의 오프라인 분석에 기초한 프로그램 또는 단계를 위한 최고의 성능의 모드로 이전에 결정된 새로운 모드로 전환된다. 일 실시예에서, 프로세서의 마이크로코드는 캐시 메모리(102)의 모드(108)를 변경한다. 만약 캐시 메모리(102)가 팻 모드로부터 전환되면, 모든 메모리 연산이 정지되고 도 6과 관련하여 설명된 연산이 수행되며, 그리고 나서 메모리 연산이 재개된다. 일 실시예에서, 블록 1402에서 그것이 새로운 프로세스가 작동 중인 것을 검출할 때 시스템 소프트웨어는 새로운 모드를 제공한다. 일 실시예에서, PCID 변화 검출 또는 프로그램 단계 전환에 대응하여 프로세서(100)는 메모리에서 새로운 모드를 꺼내고(예를 들어, 프로세서(100) 또는 시스템 메모리의 지역 개인 메모리); 바람직하게는, 프로세서(100)는 PCID 또는 단계 식별자를 이용하여 리스트로부터 새로운 모드를 식별한다. 모드 정보는 오프라인 분석에 의하여 또한 결정된 프로그램의 다른 단계에 대한 다른 모드를 포함할 수 있다. 흐름은 블록 1404에서 끝난다.
이제 도 14b를 참조하면, 도 1의 캐시 메모리(102)의 프로세서의 구성을 도시하는 블록도가 도시되어 있다. 프로세서는 작동 중인 프로그램이 새로운 단계에 진입하는 것을 검출하는 단계 검출기(1414)를 포함한다. 단계 검출기(1414)는 예를 들어, 도 14a와 관련하여 상술한 것과 같은 장치 드라이버에 의해서, 그것에 제공된 단계 식별자(1412)에 기초한 결정을 내린다. 단계 식별자(1412)는 프로그램 명령의 명령 포인터(또는 프로그램 카운터) 값을 포함할 수 있다. 명령은 서브루틴 호출 명령일 수 있으며, 여기서 단계 식별자(1412)는 호출 명령의 타겟 명령의 명령 포인터(또는 프로그램 카운터) 값을 포함할 수 있다. 또한, 단계 식별자(1412)도 예를 들어 리턴 어드레스, 레지스터 값 및/또는 스택 값과 같은 호출 명령의 하나 이상의 매개변수 값을 포함할 수 있다. 여기서 지문 유닛으로 언급되는 단계 검출기의 일예는 미국 특허 출원 번호 14/050,687과 14/050,757에 더욱 자세하게 설명되며, 양자는 10/10/2013에 출원되고, 양자는 09/20/2013에 출원된 미국 가출원 번호 61/880,620에 우선권을 주장하며, 이들 각각은 본문에서 모든 목적을 위해 그 전체가 참고로 인용된다. 프로세서는 또한 새로운 단계가 검출된 것이 단계 검출기(1414)에 의하여 통지되는 모드 업데이트 유닛(1416)을 포함하며, 새로운 단계의 식별자를 수신한다. 모드 업데이트 유닛(1416)은 또한, 예를 들어 도 14a와 관련하여 상술한 장치 드라이버로부터, 모드 정보를 수신한다. 모드 업데이트 유닛(1416)은, 도 14c와 관련하여 이하에서 설명할 것과 같이, 캐시 메모리(102) 내의 모드(108)를 업데이트한다. 일 실시예에서, 모드 업데이트 유닛(1416)은 단계 검출기(1414)에 의하여 작동되는 프로세서의 마이크로코드를 포함한다. 변형예에서, 모드 업데이트 유닛(1416)은 단계 검출기(1414)로부터 새로운 단계를 검출하고 새로운 단계의 식별자를 수신하는 상태 기계를 포함한다. 단계 분석은 아래의 도 22와 관련하여 더욱 상세하게 설명된다.
이제 도 14c를 참조하면, 도 1의 캐시 메모리(102)를 포함하는 도 14b의 프로세서의 동작을 도시하는 흐름도가 도시되고 있다. 흐름은 블록 1422에서 시작한다.
블록 1422에서, 도 14b의 단계 검출기(1414)는 작동 중인 프로그램이 새로운 단계에 진입한 것을 검출한다. 새로운 단계의 검출에 대응하여, 단계 검출기(1414)는 도 14b의 모드 업데이트 유닛(1416)에게 통지한다. 흐름은 블록 1424로 진행한다.
블록 1424에서, 모드 업데이트 유닛(1416)은 모드 정보(1418)(예를 들어, 도 14a의 블록 1404에서 장치 드라이버로부터 수신)에서 단계 검출기(1414)로부터 수신된 새로운 단계의 식별자를 검색하고 검색에서 찾은 모드로 모드(108)를 업데이트한다. 나아가, 모드 업데이트 유닛(1416)은 필요하다면 단계 검출기(1414)를 새로운 단계 식별자(1412)로 업데이트한다. 일 실시예에서, 다음에 찾을 단계는 현재의 단계에 의존한다; 따라서, 단계 검출기(1414)로 로딩될 단계 식별자(1412)는 현재의 단계에 따라 달라진다. 흐름은 블록 1426으로 진행한다.
블록 1426에서, 프로세서는 작동 중인 프로그램을 실행하고 캐시 메모리(102)로 메모리 접근을 생성하며, 블록 1424에서 수행된 것처럼 업데이트된 모드(108)에 따라 캐시 메모리(102)가 동작한다. 흐름은 블록 1426에서 끝난다.
이제 도 15를 참조하면, 도 1의 캐시 메모리(102)를 포함하는 프로세서를 포함하는 시스템의 동작을 도시하는 흐름도가 도시되어 있다. 흐름은 블록 1502에서 시작한다.
블록 1502에서, 프로세서는 캐시 메모리(102)가 현재 모드에서 비효과적으로 수행하는 것을 검출한다. 예를 들어, 성능 카운터는 캐시 메모리(102)가 임계값을 초과하는 미스 비율을 겪고 있을을 나타낼 수 있다. 흐름은 블록 1504로 진행한다.
블록 1504에서, 캐시 메모리(102)는 그것의 현재 모드와 다른 새로운 모드로 전환된다. 일 실시예에서, 프로세서의 마이크로코드는 캐시 메모리(102)의 모드(108)를 변경한다. 만약 캐시 메모리(102)가 팻 모드로부터 전환된다면, 모든 메모리 연산이 정지되고 도 6과 관련하여 설명된 연산이 수행되며, 그리고 나서 메모리 연산이 재개된다. 바람직하게는, 프로세서(예를 들어, 마이크로코드)는, 모드에 관계없이 높은 미스 비율을 빌려주는 프로그램 및/또는 데이터 셋트의 경우처럼, 모드 중 스레싱을 방지하기 위해 이러한 방식으로 만들어진 캐시 메모리(102) 모드로 자동적은 변경을 추적한다. 일 실시예에서, 모든 모드(정상, 팻, 스키니 모드의 다른 가능한 스키니)는 필요에 따라 시도된다. 일 실시예에서, 모드의 부분집합이 시도된다. 예를 들어, 정상 모드와 스키니 모드의 일부 사이의 또는 하나의 스키니 모드와 다른 스키니 모드 사이의 전환에 연관된 응답-무효 불이익은 없기 때문에, 부분집합은 이러한 모드와 제한되고 팻 모드는 제외된다. 다른 스키니 모드는 캐시 라인이 할당하는 통로의 부분집합이 어떻게 제한되는지와 관련된 다른 스키니 모드를 포함할뿐만 아니라, 예를 들어 스키니-8통로 모드 모두의 MA[17], XOR(MA[26], MA[23], 또는 MA[22]의 도 9와 관련하여 상술한 것과 같이, 부분집합의 제한 기준에 따라 선택되는 태그의 비트를 다르게 하는 다른 스키니 모드도 포함한다.
이제 도 16을 참조하면, 캐시 메모리를 도시하는 블록도가 도시되어 있다. 캐시 메모리(1602)는 도 1의 캐시 메모리(102)와 많은 부분에서 유사하다. 도 16의 캐시 메모리(1602)는 할당 모드 입력(1608)에 따라 특정된 다른 할당 모드로 작동되는 동안 유리하게 동적으로 설정된다. 할당 모드(1608)는 메모리 어드레스(104)의 태그의 하나 이상의 비트의 다른 기능을 선택한다. 아래에 더욱 자세하게 설명하는 것과 같이, 할당 모드(1608)는 캐시 메모리(1602)가 할당되는 메모리 어드레스(104)의 인덱스에 의해 선택된 셋트의 통로의 부분집합을 결정하는 메모리 어드레스(104)의 태그의 하나 이상의 비트의 다른 기능을 선택한다.
도 1의 실시예와 유사하게, 도 16의 실시예에서, 메모리 어드레스(104)는 태그 부분(1612), 인덱스 부분(1614), 오프셋 부분(1616)의 세 부분으로 분해되나, 다소 다른 비트를 사용한다. 설명의 편의를 위해, 도 16의 메모리 어드레스(104)의 일예는 크기가 36비트이고 36비트가 태그(1612) = MA[35:17], 인덱스(1614) = MA[16:6] 그리고 오프셋(1616) = MA[5:0]로 분해된다. 그러나, 어드레스 태그 비트에 기초한 동적 통로 선택의 실시예는 태그(1612), 인덱스(1614), 오프셋(1616) 내의 다른 수의 비트로 분해되고 다른 수의 비트를 갖는 메모리 어드레스(104)를 수신하는 캐시 메모리 상에서 수행된다는 점을 이해하여야 한다. 도 1과 도 16의 모식적 예시의 다른 차이점은 도 16의 캐시 메모리(1602)의 엔트리에 저장된 태그(1606)가 19 비트라는 점이다.
이제 도 17을 참조하면, 도 16의 태그(1612)와 할당 모드(1608)에 기초하여 캐시 메모리(102)가 할당하는 통로의 부분집합을 선택하는 로직을 도시한 블록도가 도시되어 있다. 로직(1702)은 태그(1612) 비트(예를 들어, 19)를 수신하고 도 17에서 N 비트(1738)로 표시된 태그(1612) 비트의 하나 이상을 선택하는 mux(1736)를 포함하며, 할당 모드(1608)에 기초하여 N은 1 이상이다. 로직(1702)은 할당 모드(1608)에 기초하여 복수의 기능 중에서 하나의 기능을 선택하는 조합 논리(1732)를 포함하고, 그리고나서 도 18과 관련하여 이하에서 설명할 것과 같이, 캐시 메모리(102)가 할당되는 할당 로직으로 통로(1734)의 셋트를 나타내는 벡터를 생성하기 위하여 mux(1736)에 의하여 출력된 N 비트(1738) 상의 선택된 기능을 수행한다.
선택된 태그(1612) 비트의 일예와 선택된 N 비트(1738) 상에서 수행되는 기능은 다음과 같다. 일예로, 부분집합은 메모리 어드레스(104)의 기 설정된 비트에 의하여 선택된 셋트의 8 홀수 통로 또는 선택된 셋트의 8 짝수 통로로 특정된다. 일예로, 기 설정된 비트는 태그(1612)의 최하위 비트이다. 다른 일예로, 기 설정된 비트는 다른 방법을 이용하여 생성된다. 예를 들어, 기 설정된 비트는 태그(1612)의 다수의 비트의 불린 배타적 OR(XOR)에 따라 생성될 수 있다. 이것은, 상술하는 바와 같이, 캐시 라인이 병리학적으로 에일리어싱되는 경우에 특히 유리할 수 있다. 불린 OR, 불린 AND, 불린 NOT 또는 이들의 다양한 순열과 같은, XOR 이외의 다른 기능은 태그(112)의 다수의 비트를 하나의 비트로 응축하는 데 사용될 수 있다. 두번째 예에서, 태그(1612)의 둘 이상의 비트는 할당 모드(1608)에 의하여 특정되 많은 비트로 회전되고 예를 들어, N 비트(1738)가 각각 2, 3, 또는 4인 경우 16에서 4로, 16에서 2로 또는 16에서 1로, 캐시 라인이 전체 통로 중 부분집합에 할당하는 통로로 제한하는 결과를 갖는다. 게다가, N 비트(1738)가 각각 2, 3, 또는 4인 경우, N 비트(1738) 각각은 태그(1612)의 동일한 또는 다른 비트의 불린 함수에 의하여 별도로 생성된다. 특정 실시예를 설명하였으나, mux(1736)에 의하여 선택된 태그(1612)의 숫자 또는 특정 비트에 대하여 다른 실시예가 고려된다는 것이 이해되어야 하며, 다른 실시예는 통로(1734)의 부분집합을 선택하기 위하여 선택된 N 비트(1738) 상에서 수행되는 특정 함수(1732)에 대하여 고려된다.
이제 도 18을 참조하면, 도 16의 캐시 메모리(1602)의 동작을 도시하는 흐름도가 도시되어 있다. 흐름은 블록 1802에서 시작한다.
블록 1802에서, 할당 모드(1608)가 현재 할당 모드를 나타내는 동안 캐시 메모리(1602)는 프로세싱 코어로부터 로드 요청을 수신한다. 로드 요청은 도 16의 메모리 어드레스(104)를 포함한다. 흐름은 블록 1804로 진행한다.
블록 1804에서, 캐시 메모리(1602)는 인덱스(1614)를 이용하여 도 18에서 셋트 J로 지칭되는 하나의 셋트를 선택한다. 흐름은 블록 1806으로 진행한다.
블록 1806에서, 캐시 메모리(1602)는 선택된 셋트 J의 모든 16 통로의 각 엔트리에 대해 메모리 어드레스(104) 태그(1612)를 엔트리 태그(1606)와 비교한다. 또한, 상기 비교는 엔트리가 유효한지 여부를 확인한다. 흐름은 블록 1608로 진행한다.
결정 블록 1808에서, 캐시 메모리(1602)는 블록 1806에서 수행된 비교가 유효한 일치를 가져올지 여부를 판정한다. 만약 그렇다면, 흐름은 블록 1812로 진행하며; 그렇지 않으면, 흐름은 블록 1814로 진행한다.
블록 1812에서, 캐시 메모리(1602)는 적중을 나타낸다. 흐름은 블록 1812에서 끝난다.
블록 1814에서, 도 17의 로직(1702)은 할당 모드(1608)에 의하여 특정된 함수(1732)와 할당 모드(1608)에 의하여 특정된 하나 이상의 태그(1612)에 기초하여 블록 1804에서 선택된 셋트의 통로(1734)의 부분집합을 결정한다. 흐름은 블록 1816로 진행한다.
블록 1816에서, 캐시 메모리(1602)는 블록 1814에서 결정된 통로의 부분집합 내의 선택된 셋트 J에 어느 한 통로를 할당한다. 바람직하게는, 랜덤 또는 라운드-로빈과 같은 다른 대체 알고리즘이 사용되더라도, 바람직하게는 캐시 메모리(1602)는 최소 최근 사용(LRU) 또는 의사-LRU인 부분집합 내의 통로에 할당한다. 흐름은 블록 1816에서 끝난다.
이제 도 19를 참조하면, 도 16의 캐시 메모리(1602)를 포함하는 프로세서를 포함하는 시스템의 동작을 도시하는 흐름도가 도시되어 있다. 흐름은 블록 1902에서 시작한다.
블록 1902에서, 현재 할당 모드(1608)로 동작하는 동안 프로세서는 캐시 메모리(102)의 효과를 관측한다(예를 들어, 가증 최근 특정 기간동안 캐시 메모리(102)의 적중율). 흐름은 결정 블록 1904로 진행한다.
결정 블록 1904에서, 프로세서는 캐시 메모리(102)의 효과가 임계치 이하인지 여부를 판단한다. 그렇다면, 흐름은 블록 1906으로 진행한다; 그렇지 않으면 흐름은 끝난다. 바람직하게는, 임계치는 예를 들어 시스템 소프트웨어에 의하여 프로그램 작동할 수 있다.
블록 1906에서, 프로세서는 캐시 메모리(102)의 할당 모드(1608)를 현재 할당 모드와 다른 새로운 할당 모드로 업데이트한다. 일 실시예에서, 프로세서의 마이크로코드는 캐시 메모리(102)의 할당 모드(1608)를 업데이트한다. 바람직하게는, 프로세서(예를 들어, 마이크로코드)는, 모드에 관계없이 높은 미스 비율을 빌려주는 프로그램 및/또는 데이터 셋트의 경우처럼, 모드 중 스레싱을 방지하기 위해 이러한 방식으로 만들어진 할당 모드(1608) 업데이트를 추적한다. 일 실시예에서, 할당 모드의 전부는 필요에 따라 시도된다. 다른 실시예에서, 할당 모드의 부분집합이 시도된다. 유리하게도, 다른 할당 모드(1608) 사이의 전환에 연관된 응답-무효 불이익은 없다. 흐름은 블록 1906에서 블록 1902로 되돌아간다.
캐시 메모리 팻 모드, 스키니 모드, 태그 대체 비트의 기능에 의한 할당과 같은 본문에 기재된 다양한 방식의 캐시 메모리 모드의 구성은, 정적 구성에 의하여, 동적 구성에 의하여, 또는 양자에 의할 수 있다. 일반적으로 정적 구성은 프리-실리콘이다. 즉, 설계자는 직관, 바람직하게는 프로세서 디자인의 소프트웨어 시뮬레이션의 도움을 받아, 좋은 구성을 결정하며, 구성은 잠재적으로 일반 프로세서의, 특히 캐시 메모리의 성능을 향상시킨다. 프로세서의 향상된 성능은 프로세서가 실행하는 프로그램의 속도를 향상시키고(예를 들어, 명령 속도에 따라 클럭을 줄이거나 클럭 속도당 명령을 증가), 그리고/또는 전력 소비를 감소시킨다. 프로그램은 운영 체제에서 실행 가능한 프로그램(예를 들어, 응용, 유틸리티, 벤치 마크), 동적 링크 라이브러리 등일 수 있다. 소프트웨어 시뮬레이션은 예를 들어 특히 캐시 메모리 모드 구성에 대해 도 20 내지 22와 관련하여 설명하는 것과 같이, 프로세서의 성능을 향상시키고자 하는 프로그램 실행의 오프라인 분석을 수행하기 위하여 사용될 수 있다. 바람직하게는, 설계자는 대체로 프로그램의 셋트에 대해 좋은 경향을 갖는 정적 구성을 결정한다. 설계자는 그리고나서 좋은 정적 구성을 실리콘으로 제조되는 디자인에 포함시킨다.
반면, 동적 구성을 결정하는 분석은 일반적으로 포스트-실리콘으로 수행된다. 즉, 프로세서가 제조된 후, 설계자는 실리콘으로 제조된 정적 또는 디폴트 구성과 다른 구성으로 프로그램을 실행시켰을 때 프로세서가 어떻게 수행되는지 결정하기 위하여 다른 종류에 대한 오프라인 분석을 수행한다. 포스트-실리콘 테스트는 구성 행렬에 대해 자동화된 성능 저하가 수행되는 엄격한, 아마도 더 폭력적인, 기술을 수반할 것이며, 그리고나서 예를 들어 도 23과 관련하여 아래에 설명하는 것과 같이 저하 성능 데이터가 분석된다. 설계자는 예를 들어 글로벌 최대 아닌 로컬 최대를 방지하는 시도를 위하여 포스트-실리콘 테스트에 대한 초기 시드로 프로그램의 인구에 대한 프리-실리콘 테스트의 결과를 이용할 수 있다.
테스트가 프리-실리콘인지 또는 포스트-실리콘인지에 관계없이, 동적 구성 테스트를 가지고 좋은 구성은 퍼-프로그램에 기초하여, 또는 심지어 퍼-프로그램 단계에 기초하여 결정된다. 그리고나서, 장치 드라이버와 같은 시스템이 알려진 프로그램이 프로세서에 작동중이라는 것을 검출하였을 때(즉, 분석이 수행되는 프로그램과 좋은 구성이 알려짐), 시스템은 프로세서에 좋은 프로그램-특정 구성을 제공하며, 프로세서가 실행되는 동안 프로세서는 캐시 메모리 모드를 동적 방식으로 프로그램-특정 구성으로 업데이트한다. 바람직하게는, 프로그램-특정 구성은 프로그램의 다른 단계에 대하여 다른 구성을 포함하며, 일예로서 도 22와 관련하여 설명되는 단계-특정 구성에 반응하여 프로세서는 단계 변화를 검출하고 구성을 동적으로 업데이트한다.
특성의 주어진 셋트와 관련하여 프로그램 단계는 그들의 특성 중 일관된 행동에 의하여 특징지어지는 컴퓨터 프로그램의 부분집합이다. 예를 들어, 관련된 특성이 분기 예측 속도와 캐시의 적중 비율이고 프로그램의 단계는 분기 예측 속도와 캐시 적중 비율이 일관된 프로그램의 실행 동작의 부분집합이라고 가정한다. 예를 들어, 오프라인 분석은 특정 데이터 압축 프로그램이 두 단계를 갖는다는 것을 결정한다: 사전 시공 단계와 사전 검색 단계. 사전 시공 단계는 상대적으로 낮은 분기 예측 속도와 상대적으로 높은 캐시 적중 비율을 가지고, 스트링의 더 큰 셋트에 공통인 부스트링의 셋트를 건물을 짓는 것에 대응된다; 반면 사전 검색 단계는 상대적으로 높은 분기 예측 속도와 상대적으로 낮은 캐시 적중 비율을 가지고, 캐시의 크기 보다 큰 사전에서 부스트링을 검색하는 것에 대응된다.
일 실시예에서, 미래를 안다는 그 이름에 함축된 것과 같은 "오라클 캐시"의 개념을 이용하여 오프라인 분석이 수행된다. 캐시 메모리 내에 한정된 양의 공간이 주어지면, 오라클 캐시는 어느 시점에서 캐시 내에 있어야 하는 가장 유용한 데이터를 안다. 그것은 가장 높은 적중 비율을 생성할 캐시의 내용의 사이클별 또는 명령별 스냅샷으로 개념화 될 수있다..
먼저, 프로그램 실행을 위한 오라클 캐시 스냅샷의 시퀀스를 생성하고, 스냅샷 내의 각각의 캐시 라인의 할당을 생성하는 메모리 접근을 추적한다. 그리고나서, 프로그램의 다음 실행 순간에, 프로세서는 스냅샷으로부터의 정보를 이용하여 캐시 모드를 계속적으로 업데이트한다.
클럭 사이클 또는 명령의 입도 상의 캐시 모드 업데이트가 비실용적인 때, 예를 들어 전체 프로그램 또는 프로그램 단계, 예를 들어 프로그램 또는 단계의 순서로부터 도움을 받아, 더 긴 시간 기간에 걸쳐 경향을 검사한다.
대체로, 오라클 캐시의 아이디어는 그것이 메모리 접근의 모두를 미리 알기 때문에 그것은 메모리 접근 모두를 먼저 실행시킬 수 있다. 프로그램이 실행되고 나면, 오라클 캐시는 어느 시점에서 캐시 내의 캐시 라인의 최적의 셋트를 에측한다. 예를 들어, 도 21의 그래프에서, 오라클 캐시는 단기간 캐시 라인(위로부터 두 번째 줄에 실선으로 도시 된)이 마지막 접근 후 캐시되지 않는다는 것을 예측한다. 이러한 분석을 이용하여 캐시 모드에 대한 관측을 끌어낼 수 있다.
이제 도 20을 참조하면, 프로그램 및 프로그램 단계를 위한 캐시 메모리 모드 구성의 생성을 도시하는 흐름도가 도시되어 있다. 흐름은 블록 3402에서 시작한다.
블록 3402에서, 설계자는 바람직하게는 자동화된 방법으로 프로그램을 작동하고 그리고 캐시 메모리(예를 들어 프로그램에 의하여 만들어진 102, 1602)에 메모리 접근을 기록한다. 바람직하게는, 할당, 적중 그리고 캐시 라인의 축출이 기록된다. 메모리 어드레스와 메모리 접근의 시간(예를 들어 상대적인 클럭 사이클)이 기록된다. 흐름은 블록 3404로 진행한다.
블록 3404에서, 설계자는, 바람직하게는 자동화된 방식으로, 일정한 시간 간격으로 블록 3402에서 기록된 정보를 분석하고, 예를 들어 도 22와 관련하여 후술하는 바와 같이, 프로그램을 단계들로 구분하는 명확한 경향을 인식한다. 예를 들어, 작업 셋트 크기, 평균 캐시 라인의 수명, 평균 적중 비율의 명확한 경향이 인식된다. 흐름은 블록 3406로 진행한다.
블록 3406에서, 설계자는, 바람직하게는 자동화된 방식으로, 블록 3404에서 수행된 분석에 기초하여 다른 프로그램 단계에 대한 구성을 생성한다. 예를 들어, 구성은 캐시 메모리 모드일 수 있다. 일 실시예에서, 구성을 결정하는 분석은 도 21 내지 도 23과 관련하여 후술하는 바와 유사한 분석을 포함할 수 있다. 몇몇 프로그램은 하나의 구성이 전체 프로그램에 대해 충분할 수 있는 경우 그들은 별개의 단계로 세분화되기 쉬운 명확한 동향을 나타내지 않는다는 것을 이해하여야 한다. 흐름은 블록 3406에서 끝난다.
이제 도 21을 참조하면, 메모리 접근 그래프와 그래프에서 추출된 데이터가 도시되어 있다. 그래프는 점으로 표시된 메모리 접근을 그리며, 시간은 수평축에 도시된 독립 변수이고, 메모리 어드레스는 수직축에 도시된 종속 변수이다. 수평 라인은 특정된 메모리 어드레스에 개별 캐시 라인에 대응한다. 라인의 왼쪽 에지는 캐시 라인의 할당을 의미하고, 라인의 오른쪽 에지는 캐시 메모리로부터 캐시 라인의 축출을 의미한다.
그래프 아래에는 8개의 서로 다른 일정한 시간 간격에서 총 작업 셋트 크기가 도시된다. 시간 간격은 도 22를 참조하여 아래에 설명된 바와 같이 기본 블록 전송과 상관될 수 있으며, 예를 들어 프로그램 단계와 프로그램 단계의 각각에 대한 구성을 결정하는 데 이용될 수 있다.
나아가, 관측은 평균 캐시 라인 수명과 같이 캐시 라인이 얼마나 오래 유용한지에 관하여 만들어질 수 있다. 캐시 라인 평균 수명은 캐시 라인의 개수로 나눈 단계에 대한 모든 캐시 라인의 수명(할당에서 축출까지)의 합으로 계산된다. 이 정보는 캐시 메모리의 동작 모드에 영향을 미치는 데 이용될 수 있다.
만약 오라클 캐시가 캐시 메모리에 포함되어 있는 셋트와 통로의 의도된 수에 해당하는 캐시 라인의 수를 제한한다면, 캐시 모드 및 평균 수명의 관측 정밀도를 높일 수 있다. 캐시 라인 적중과 같은 다른 인디케이터는 또한 수집될 수 있다.
이제 도 22를 참조하면, 프로그램의 단계 분석을 도시하는 흐름도가 도시되어 있다. 단계 분석은 그것의 캐시 메모리 또는 프리 페처로 같은 프로세서 구성의 측면의 좋은 구성을 결정하는데 이용될 수 있는 오프라인 분석의 한 형태이다. 흐름은 블록 3602에서 시작한다.
블록 3602에서, 프로그램을 실행할 때 프로세서에 의하여 성능을 향상시키고자 하는 프로그램이 분석되고 상태 다이어그램을 생성하도록 세분화된다. 상태 다이어그램의 노드는 프로그램의 기본 블록이다. 기본 블록은 프로그램 제어 명령 사이의 명령 순서이다(예를 들어, 브랜치, 점프, 호출, 리턴 등). 상태 다이어그램 내의 각각의 에지는 에지가 유도하는 목표 기본 블록과 아래에 자세하게 설명하는 단계 식별자가 될 수 있는 상태 변화 정보이다. 단계 식별자는 제어 전송 명령의 명령 포인터(IP) 또는 프로그램 카운터(PC), 제어 전송 명령의 목표 어드레스 및/또는 제어 전송 정보의 호출 스택을 포함할 수 있다. 호출 스택은 리턴 어드레스 및 호출의 매개 변수를 포함할 수 있다. 프로그램 단계는 하나 이상의 기본 블록들을 포함하는 프로그램의 일부이다. 흐름은 블록 3604로 진행한다.
블록 3604에서, 프로그램은 캐시 메모리 구성 모드와 같은 프로세서의 구성가능한 측면에 관련된 특성을 분석하기 위하여 계측된다. 특성의 예는 캐시 적중 비율, 브랜치 예측 정확도, 작업 셋트 크기, 평균 캐시 라인 수명, 캐시 오염을 포함한다(예를 들어, 캐시 라인의 수는 프리 페치되지만 사용되지 않는다). 흐름은 블록 3606로 진행한다.
블록 3606에서, 프로그램은 캐시 메모리 및/또는 프리 페처의 주어진 구성으로 실행되며, 프로그램의 단계는 블록 3604의 분석된 특성에 정상 상태의 동작을 관찰하여 식별된다. 예를 들어, 캐시 적중 비율은 관심있는 분석된 특성이라고 가정하고, 캐시 적중 비율은 97%에서 40%까지 변한다고 가정한다. 캐시 적중 비율 변화는 캐시 메모리 구성이 변화 전의 프로그램에 좋게 되고 변화 후의 프로그램에 나쁘게 됨을 나타낼 경향을 보인다. 따라서, 캐시 적중 비율 변화 전의 기본 블록의 순서는 제 1 단계로 식별되고, 캐시 적중 비율 변화 후의 기본 블록의 순서는 제 2 단계로 식별된다. 다른 예로서, 작업 셋트 크기가 관심있는 분석된 특성이라고 가정하면, 작업 셋트 크기에서 훨씬 큰 변화는 단계 변화를 확인하는 프로그램에 바람직한 위치를 시그널링할 수 있다. 흐름은 블록 3608로 진행한다.
블록 3608에서, 단계가 식별되면, 각각의 단계에 대하여 좋은 구성 또는 구성 값이 결정된다. 예를 들어, 도 23과 관련하여 후술하는 또는 도 20 및 21과 관련하여 상술한 방법을과 같은 다양한 오프라인 분석 기술이 이용될 수 있다. 흐름은 블록 3612로 진행한다.
블록 3612에서, 위상 식별자는 위상 변화에 상관 관계가 있다. 분석된 특성에 변화가 발생된 때 상술한 기본 블록 전환의 상태 변화 정보 또는 잠재적 단계 식별자는 프로그램에 대하여 블록 3608에서 결정된 좋은 구성 값과 함께 기록되고, 그래서 그것이 예를 들어 장치 드라이버에 의하여 분석된 프로그램이 작동되려고 한다는 것이 검출되었을 때 그 정보는 프로세서에 제공될 수 있다. 흐름은 블록 3614로 진행한다.
블록 3614에서, 분석된 프로그램에 연관된 정보를 수신한 후, 도 14a 내지 도 14c와 관련하여 상술한 바와 같이 프로세서는 도 14b의 단계 식별자(1412)와 함께 단계 검출기(1414)를 로딩한다. 흐름은 블록 3614에서 끝난다.
이제 도 23을 참조하면, 프로세서, 예를 들어 캐시 메모리나 프리 페처로, 의 설정가능한 측면에 대한 좋은 구성을 결정하는 억지 방법을 도시하는 흐름도가 도시되어 있다. 설명된 방법은 "하강 좌표" 최적화 알고리즘의 측면을 이용한다. 흐름은 블록 3702에서 시작한다.
블록 3702에서, 프로세서의 성능을 향상시키고자 식별된 프로그램 리스트에서 각각의 프로그램 또는 프로그래 단계에 대하여, 좋은 구성이 결정될 때까지(예를 들어, 최적의 현재 구성은 -아래 참조- 상대적으로 긴 시간동안 변화되지 않는다.) 또는 리소스가 만료될 때까지(예를 들어, 타임 및/또는 컴퓨팅 리소스) 상기 방법은 블록 3704 내지 3716을 반복한다. 흐름은 블록 3704로 진행한다.
블록 3704에서, 현재 최적의 구성은 디폴트 구성, 예를 들어 캐시 메모리의 디폴트 모드,로 설정되며, 일 실시예에서 단순히 프로세서가 제조된 구성이다. 흐름은 블록 3706으로 진행한다.
블록 3706에서, 각각의 구성 매개 변수에 대하여 블록 3708 내지 블록 3712가 수행된다. 구성 매개 변수의 일예는, 예를 들어 기능을 온 또는 오프하는, 단일 구성 비트이다. 구성 매개 변수의 다른 일예는, 예를 들어 모드(108)인, 구성 필드이다. 흐름은 블록 3708로 진행한다.
블록 3708에서, 블록 3706의 구성 매개 변수의 값의 타당한 셋트의 각각의 값에 대하여, 블록 3712 내지 3716이 수행된다. 구성 매개 변수의 값의 타당한 셋트는 구성 매개변수의 크기, 매개변수의 간주된 중요성, 그 값을 통하여 반복하ㅓ는데 요구되는 리소스의 양에 의존한다. 예를 들어, 단일의 구성 비트의 경우, 양쪽의 값은 타당한 셋트 안에 있다. 예를 들어, 방법은 16 또는 그보다 낮은 값을 갖는 어느 매개변수에 대하여 모든 가능한 값을 시도한다. 그러나, 예를 들어 32-비트 필드의 상대적으로 큰 필드에 대하여, 2^32의 가능한 모든 값을 모두 시도하는 것은 실행 불가능하다. 이 경우, 설계자는 상기 방법에 값은 타당한 셋트를 제공할 수 있다. 만약 설계자가 값을 공급하지 않고 가능성의 수가 크다면, 방법은 매개변수의 임의의 값의 타당한 수로 블록 3712 내지 3716을 반복할 수 있다. 흐름은 블록 3712로 진행한다.
블록 3712에서, 프로그램, 또는 프로그램 단계,는 블록 3708 당 매개변수의 다음 값으로 수정되는 현재 최적의 구성으로 작동하고, 성능이 측정된다. 흐름은 블록 3714로 진행한다.
결정 블록 3714에서, 방법은 현재 최적의 구성으로 블록 3712에서 측정된 성능을 비교하며, 만약 전자가 나으면 흐름은 블록 3716으로 진행하고; 그렇지 않으면 흐름은 모든 타당한 값들이 시도될 때까지 현재 매개변수의 다음 값을 시도하기 위하여 블록 3712로 돌아가며, 모든 구성 매개변수가 시도될 때까지 다음 구성 매개변수 상에서 반복하기 위하여 흐름은 블록 3708로 돌아가고, 방법이 끝난 경우 프로그램 또는 프로그램 단계에 대한 현재 최적의 구성을 산출한다.
블록 3716에서, 방법은 블록 3712에서 시도된 구성으로 현재 최적의 구성을 업데이트한다. 흐름은 모든 타당한 값들이 시도될 때까지 현재 매개변수의 다음 값을 시도하기 위하여 블록 3712로 돌아가며, 모든 구성 매개변수가 시도될 때까지 다음 구성 매개변수 상에서 반복하기 위하여 흐름은 블록 3708로 돌아가고, 방법이 끝난 경우 프로그램 또는 프로그램 단계에 대한 현재 최적의 구성을 산출한다.
도 23의 방법과 비슷한 방법을 이용하여 찾아낸 좋은 구성은 특정 구성이 왜 좋은 결과를 산출하는지 설계자에 의해 이해되지 않을 수도 그리고 이해될 필요가 없을 수도 있다는 것을 주의하여야 한다.
이제 도 24를 참조하면, 프로세서(3900)를 도시하는 블록도가 도시된다. 프로세서(3900)는 명령을 디코딩하는 명령 디코더(3923)에게 명령을 제공하는 명령 캐시(3922)를 포함하고 실행을 위한 실행 유닛(3926)에 명령을 보내는 명령 디스패처(3924)에 디코딩된 명령을 제공한다. 바람직하게는, 다른 실시예가 고려되더라도 프로세서의 마이크로아키텍처는 슈퍼스칼라이며 명령 디스패쳐는 또한 슈퍼스칼라 비순차적 방법으로 다수의 실행 유닛(3926)에 명령을 보내는 스케줄링을 하는 명령 스케줄러를 포함한다. 바람직하게는, 프로세서(3900)는 또한 비 구조적 레지스터(미도시)뿐만 아니라 프로세서(3900)의 아키텍처 상태를 보유하는 아키텍처 레지스터(미도시)를 포함한다. 바람직하게는, 프로세서(3900)는 레지스터 재명명을 수행하는 데 이용되는 레지스터 앨리어스 테이블(RAT)(미도시)과 프로그램 순서로 명령어를 폐기하는 데 이용되는 재정렬 버퍼(ROB)(미도시)를 포함한다. 바람직하게는, 명령 디스패처는 아키텍처 명령을 실행 유닛(3926)에 의해 실행될 수 있는 프로세서(3900)의 마이크로명령 셋트 아키텍처로 번역하는 명령 변환기(미도시)를 포함한다.
프로세서(3900)는 또한 실행 유닛(3926)으로 메모리 오퍼랜드를 제공하고 실행 유닛(3926)으로부터 메모리 오퍼랜드를 수신하는 메모리 서브 시스템(3928)을 포함한다. 메모리 서브 시스템(3928)은 바람직하게는 하나 이상의 로드 유닛, 하나 이상의 저장 유닛, 로드 큐, 저장 큐, 메모리로부터 캐시 라인을 요청하기 위한 파일 큐, 프로세서(3900)가 통신 중인 메모리 버스의 스누핑과 관련된 스눕 큐, 그리고 다른 관련된 기능적 유닛을 포함한다.
프로세서(3900)는 또한 메모리 서브 시스템(3928)과 통신하는 캐시 메모리 (102)를 포함한다. 바람직하게는, 캐시 메모리(102)는 도 1(그리고 도 16의 1602)과 관하여 설명되는 캐시 메모리와 유사하다. 단일의 캐시 메모리(102)가 도시되어 있으나, 캐시 메모리(102)는, 레벨 1(L1) 명령 캐시, L1 데이터 캐시, L1 캐시를 돕는 통합된 레벨 2(L2) 캐시와 같은, 캐시 메모리의 계층 구조를 포함하는 더 큰 캐시 메모리 서브 시스템의 하나일 수 있다. 일 실시예에서, 캐시 서브 시스템은 또한 레벨 3(L3) 캐시를 포함한다. 프로세서(3900)는 또한 캐시 메모리(102)에 메모리로부터 데이터를 프리 페치하는 하나 이상의 프리 페처를 포함할 수 있다. 일 실시예에서, 프로세서(3900)는 멀티-코어 프로세서이며, 각각의 코어는 상술한 기능적 유닛을 가지고, 캐시 메모리(102)는 코어에 의해 공유된다.
메모리 서브 시스템(3928)은 도 1 내지 23의 실시예에 도시된 것과 같은 캐시 메모리(102)의 메모리 접근을 만든다. 메모리 접근은 접근되는 메모리 위치의 메모리 어드레스(104)를 포함한다.
실시예는 논 뱅키드 구성뿐 아니라, 특정 포트 숫자의 구성과 캐시 메모리의 뱅크와 함께 포함되거나, 캐시 메모리에 다른 수의 포트가 포함되거나 다른 수의 뱅크가 포함되는 다른 실시예도 고려될 수 있다. 본 명세서에서, 청구항을 포함하여, 2^N 표기는 2의 N 승을 의미한다.
본 발명의 다양한 실시예가 여기 설명되는 한편, 그들이 예시에 의해서만 제시되며 한정되지 않는다는 것이 이해될 수 있다. 형식 및 세부사항에서의 다양한 변경이 본 발명의 범위에서 벗어나지 않고 그 안에서 이루어질 수 있다는 것이 관련 컴퓨터 분야의 당업자에게 명백할 것이다. 예를 들어, 소프트웨어는 예를 들어, 기능, 제작, 모델링, 시뮬레이션, 설명 및/또는 여기 설명된 장치 및 방법의 테스팅을 가능하게 할 수 있다. 이것은 일반적인 프로그래밍 언어(예, C, C+++), 베릴로그 HDL을 포함하는 하드웨어 설명 언어(HDL), VHDL 및 등등, 또는 다른 이용가능한 프로그램의 사용을 통해 달성될 수 있다. 그러한 소프트웨어는 자기 테이프, 반도체, 자기 디스크, 또는 광학 디스크(예, CD-ROM, DVD-ROM 등), 네트워크, 유선, 무선 또는 다른 통신 매체와 같은 임의의 공지된 컴퓨터 사용가능한 매체에 배치될 수 있다. 여기 설명된 장치 및 방법의 실시예는 프로세서 코어와 같은 반도체 지적 자산 코어에 포함될 수 있고(예, HDL에 구현되거나 또는 특정됨) 집적 회로의 생산에서 하드웨어로 변환될 수 있다. 부가적으로, 여기 설명된 장치 및 방법은 하드웨어 및 소프트웨어의 조합으로서 구현될 수 있다. 따라서, 본 발명은 여기 설명된 예시적인 실시예 중 어느 하나에 의해 제한되지 않아야 하지만, 다음의 청구항 및 그것의 등가물에 따라서만 정의될 수 있다. 구체적으로, 본 발명은 범용 컴퓨터에 사용될 수 있는 프로세서 디바이스 내에 실행될 수 있다. 최종으로, 해당기술분야의 당업자는 첨부된 청구항에 의해 정의된 바와 같이 본 발명의 범위에서 벗어나지 않고 본 발명의 동일한 목적을 실행하기 위해 다른 구조를 설계하거나 또는 수정하기 위한 토대로서 개시된 개념 및 특정 실시예를 용이하게 사용할 수 있다는 것을 인지한다.
Claims (20)
- 2^J-바이트 캐시 라인을 저장하고, 연관성을 변화시키기 위한 모드 인디케이터를 통해 동적으로 설정 가능한 캐시 메모리로서, J는 3보다 큰 정수인 캐시 메모리에 있어서,
각각 X 비트인 태그를 보유하고, N과 X는 모두 5보다 큰 정수인 2^N 셋트의 배열;
Q-비트 메모리 어드레스 MA[(Q-1):0]를 수신하는 입력으로서, 상기 Q-비트 메모리 어드레스는:
태그 부분 MA[(Q-1):(Q-X)]; 및
인덱스 부분 MA[(Q-X-1):J];을 가지고,
Q는 적어도 (N+J+X-1)인 정수이며; 그리고
상기 모드 인디케이터를 수신하고, 상기 연관성의 정도를 나타내는 제 1 모드 및 제 2 모드 중 적어도 하나에 따라 상기 캐시 메모리의 연관성을 변화시키는 로직에 따라 상기 캐시 메모리는 동작하며,
상기 제 1 모드로 동작할 때:
셋트 선택 로직은 상기 인덱스 부분과 상기 태그 부분의 최하위 비트를 이용하여 상기 배열 중에서 하나의 셋트를 선택하고;
비교 로직은 상기 태그 부분의 상기 최하위 비트를 제외한 모두를 상기 선택된 하나의 셋트 내의 각각의 태그의 상기 최하위 비트를 제외한 모두와 비교하고, 일치가 있으면 적중을 나타내며; 그리고
그렇지 않으면 할당 로직은 상기 선택된 하나의 셋트에 할당하고; 그리고
상기 제 2 모드로 동작할 때:
상기 셋트 선택 로직은 상기 인덱스 부분을 이용하여 상기 배열 중에서 두 셋트를 선택하고;
상기 비교 로직은 상기 태그 부분을 상기 선택된 두 셋트 내의 각각의 태그와 비교하고, 일치가 있으면 적중을 나타내며; 그리고
그렇지 않으면 상기 할당 로직은 상기 선택된 두 셋트 중 하나의 셋트에 할당하는 것을 특징으로 하는 캐시 메모리. - 제 1항에 있어서,
상기 캐시 메모리가 상기 제 2 모드에서 상기 제 1 모드로 전환할 때, 더티이면 상기 캐시 메모리는 답을 하고, 그리고 그 태그의 최하위 비트가 그 셋트의 최상위 비트와 일치하지 않는 상기 캐시 메모리의 각각의 캐시 라인을 무효화하는 것을 특징으로 하는 캐시 메모리. - 제 1항에 있어서,
상기 할당 로직은 상기 태그 부분의 비트의 적어도 일부의 해시에 기초하여 상기 선택된 두 셋트 중 상기 하나의 셋트에 할당하는 것을 특징으로 하는 캐시 메모리. - 제 1항에 있어서,
상기 할당 로직은 상기 캐시 메모리에 저장된 하나 이상의 대체 비트에 기초하여 상기 선택된 두 셋트 중 상기 하나의 셋트에 할당하는 것을 특징으로 하는 캐시 메모리. - 제 1항에 있어서,
상기 배열은 2^W 통로를 갖고;
제 3 모드로 동작할 때:
상기 셋트 선택 로직은 상기 인덱스 부분과 상기 태그 부분의 최하위 비트를 이용하여 상기 배열 중에서 하나의 셋트를 선택하고;
상기 비교 로직은 상기 태그 부분의 상기 최하위 비트를 제외한 모두를 상기 선택된 하나의 셋트 내의 각각의 태그의 상기 최하위 비트를 제외한 모두와 비교하고, 일치가 있으면 적중을 나타내며; 그리고
상기 할당 로직은, 상기 비교 로직이 일치가 없다고 나타냈을 때:
제 1 모드로 동작할 때, 상기 선택된 하나의 셋트의 상기 2^W 통로 중에서 어느 하나에 할당하고; 그리고
제 2 모드로 동작할 때, 상기 선택된 하나의 셋트의 상기 2^W 통로의 부분집합 중에서 하나에 할당하고, 상기 2^W 통로의 부분집합은 MA[(Q-X+W):(Q-X+1)]의 하나 이상에 기초하여 제한되며
상기 W는 1 보다 큰 정수인 것을 특징으로 하는 캐시 메모리. - 제 1항에 있어서,
2^N 셋트의 상기 배열은 복수의 물리적 뱅크를 포함하고, 상기 제 2 모드로 동작할 때, 상기 셋트 선택 로직은 상기 배열 중에서 상기 복수의 물리적 뱅크가 다른 두 셋트를 선택하는 것을 특징으로 하는 캐시 메모리. - 제 1항에 있어서,
새로운 프로세스가 상기 캐시 메모리를 포함하는 프로세서에 작동 중인 것을 검출함에 대응하여 상기 캐시 메모리는 상기 제 1 에서 제 2 모드로 전환하는 것을 특징으로 하는 캐시 메모리. - 제 7항에 있어서,
상기 프로세서가 상기 새로운 프로세스를 작동하고 있을 때, 상기 캐시 메모리는 상기 제 1 모드보다 상기 제 2 모드에서 더 효과적으로 수행된다는 결정이 오프라인 분석에 의하여 이루어지는 것을 특징으로 하는 캐시 메모리. - 제 1항에 있어서,
상기 캐시 메모리가 상기 제 1 모드에 있는 동안 임계값보다 더 높은 미스 비율을 겪는 것을 검출함에 대응하여 상기 캐시 메모리는 상기 제 1 에서 제 2 모드로 전환하는 것을 특징으로 하는 캐시 메모리. - 제 1항에 있어서,
상기 J는 6이고, 상기 N은 11이며, 상기 X는 20이고, 그리고 상기 Q는 36인 것을 특징으로 하는 캐시 메모리. - 제 1항에 있어서,
상기 2^N 셋트의 각각은 W 통로를 포함하고, W는 1보다 큰 정수인 것을 특징으로 하는 캐시 메모리. - 2^J-바이트 캐시 라인을 저장하고, 연관성을 변화시키기 위한 모드 인디케이터를 통해 동적으로 설정 가능한 캐시 메모리를 동작시키는 방법으로서, J는 3보다 큰 정수이고, 상기 캐시 메모리는 각각 X 비트인 태그를 보유한 2^N 셋트의 배열을 가지며, N과 X는 모두 5보다 큰 정수인 캐시 메모리 동작방법으로서,
상기 방법은:
Q-비트 메모리 어드레스 MA[(Q-1):0]를 수신하는 단계로서, 상기 Q-비트 메모리 어드레스는:
태그 부분 MA[(Q-1):(Q-X)]; 및
인덱스 부분 MA[(Q-X-1):J];을 가지고,
Q는 적어도 (N+J+X-1)인 정수이며; 그리고
상기 모드 인디케이터를 수신하고, 상기 연관성의 정도를 나타내는 제 1 모드 및 제 2 모드 중 적어도 하나에 따라 상기 캐시 메모리의 연관성을 변화시키는 로직에 따라 상기 캐시 메모리는 동작하며,
상기 제 1 모드로 동작할 때:
상기 인덱스 부분과 상기 태그 부분의 최하위 비트를 이용하여 상기 배열 중에서 하나의 셋트를 선택하는 단계;
상기 태그 부분의 상기 최하위 비트를 제외한 모두를 상기 선택된 하나의 셋트 내의 각각의 태그의 상기 최하위 비트를 제외한 모두와 비교하고, 일치가 있으면 적중을 나타내는 단계; 및
그렇지 않으면 상기 선택된 하나의 셋트에 할당하는 단계;를 포함하고, 그리고
상기 제 2 모드로 동작할 때:
상기 인덱스 부분을 이용하여 상기 배열 중에서 두 셋트를 선택하는 단계;
상기 태그 부분을 상기 선택된 두 셋트 내의 각각의 태그와 비교하고, 일치가 있으면 적중을 나타내는 단계; 및
그렇지 않으면 상기 선택된 두 셋트 중 하나의 셋트에 할당하는 단계;를 포함하는 것을 특징으로 하는 캐시 메모리 동작방법. - 제 12항에 있어서,
상기 캐시 메모리가 상기 제 2 모드에서 상기 제 1 모드로 전환할 때, 더티이면 답을 하고, 그리고 그 태그의 최하위 비트가 그 셋트의 최상위 비트와 일치하지 않는 상기 캐시 메모리의 각각의 캐시 라인을 무효화하는 단계를 더 포함하는 것을 특징으로 하는 캐시 메모리 동작방법. - 제 12항에 있어서,
상기 선택된 두 셋트 중 하나의 셋트에 할당하는 단계는 상기 태그 부분의 비트의 적어도 일부의 해시에 기초하여 수행되는 것을 특징으로 하는 캐시 메모리 동작방법. - 제 12항에 있어서,
상기 선택된 두 셋트 중 하나의 셋트에 할당하는 단계는 상기 캐시 메모리에 저장된 하나 이상의 대체 비트에 기초하여 수행되는 것을 특징으로 하는 캐시 메모리 동작방법. - 제 12항에 있어서,
상기 배열은 2^W 통로를 갖고;
제 3 모드로 동작할 때:
상기 인덱스 부분과 상기 태그 부분의 최하위 비트를 이용하여 상기 배열 중에서 하나의 셋트를 선택하고;
상기 태그 부분의 상기 최하위 비트를 제외한 모두를 상기 선택된 하나의 셋트 내의 각각의 태그의 상기 최하위 비트를 제외한 모두와 비교하고, 일치가 있으면 적중을 나타내며; 그리고
상기 비교가 일치가 없다고 나타냈을 때:
제 1 모드로 동작할 때, 상기 선택된 하나의 셋트의 상기 2^W 통로 중에서 어느 하나에 할당하고; 그리고
제 2 모드로 동작할 때, 상기 선택된 하나의 셋트의 상기 2^W 통로의 부분집합 중에서 하나에 할당하고, 상기 2^W 통로의 부분집합은 MA[(Q-X+W):(Q-X+1)]의 하나 이상에 기초하여 제한되며,
상기 W는 1 보다 큰 정수인 것을 특징으로 하는 캐시 메모리 동작방법. - 제 12항에 있어서,
새로운 프로세스가 상기 캐시 메모리를 포함하는 프로세서에 작동 중인 것을 검출함에 대응하여 상기 캐시 메모리를 상기 제 1 에서 제 2 모드로 전환하는 단계;를 더 포함하는 것을 특징으로 하는 캐시 메모리 동작방법. - 제 17항에 있어서,
상기 프로세서가 상기 새로운 프로세스를 작동하고 있을 때, 상기 캐시 메모리는 상기 제 1 모드보다 상기 제 2 모드에서 더 효과적으로 수행된다는 결정이 오프라인 분석에 의하여 이루어지는 것을 특징으로 하는 캐시 메모리 동작방법. - 제 12항에 있어서,
상기 캐시 메모리가 상기 제 1 모드에 있는 동안 임계값보다 더 높은 미스 비율을 겪는 것을 검출함에 대응하여 상기 캐시 메모리를 상기 제 1 에서 제 2 모드로 전환하여 상기 캐시 메모리의 연관성을 변화시키는 단계;를 더 포함하는 것을 특징으로 하는 캐시 메모리 동작방법. - 2^J-바이트 캐시 라인을 저장하고, 연관성을 변화시키기 위한 모드 인디케이터를 통해 동적으로 설정 가능한 캐시 메모리를 포함하고, J는 3보다 큰 정수이며, 상기 캐시 메모리는:
각각 X 비트인 태그를 보유하고, N과 X는 모두 5보다 큰 정수인 2^N 셋트의 배열;
Q-비트 메모리 어드레스 MA[(Q-1):0]를 수신하는 입력으로서, 상기 Q-비트 메모리 어드레스는:
태그 부분 MA[(Q-1):(Q-X)]; 및
인덱스 부분 MA[(Q-X-1):J];을 가지고,
Q는 적어도 (N+J+X-1)인 정수이며; 그리고
상기 모드 인디케이터를 수신하고, 상기 연관성의 정도를 나타내는 제 1 모드 및 제 2 모드 중 적어도 하나에 따라 상기 캐시 메모리의 연관성을 변화시키는 로직에 따라 상기 캐시 메모리는 동작하며,
상기 제 1 모드로 동작할 때:
셋트 선택 로직은 상기 인덱스 부분과 상기 태그 부분의 최하위 비트를 이용하여 상기 배열 중에서 하나의 셋트를 선택하고;
비교 로직은 상기 태그 부분의 상기 최하위 비트를 제외한 모두를 상기 선택된 하나의 셋트 내의 각각의 태그의 상기 최하위 비트를 제외한 모두와 비교하고, 일치가 있으면 적중을 나타내며; 그리고
그렇지 않으면 할당 로직은 상기 선택된 하나의 셋트에 할당하고; 그리고
상기 제 2 모드로 동작할 때:
상기 셋트 선택 로직은 상기 인덱스 부분을 이용하여 상기 배열 중에서 두 셋트를 선택하고;
상기 비교 로직은 상기 태그 부분을 상기 선택된 두 셋트 내의 각각의 태그와 비교하고, 일치가 있으면 적중을 나타내며; 그리고
그렇지 않으면 상기 할당 로직은 상기 선택된 두 셋트 중 하나의 셋트에 할당하는 것을 특징으로 하는 프로세서.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/IB2014/003231 WO2016097810A1 (en) | 2014-12-14 | 2014-12-14 | Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon mode |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160086766A KR20160086766A (ko) | 2016-07-20 |
KR101820223B1 true KR101820223B1 (ko) | 2018-01-18 |
Family
ID=56126010
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157033313A KR101820223B1 (ko) | 2014-12-14 | 2014-12-14 | 모드에 따라 선택적으로 하나 또는 복수의 셋트를 선택하도록 동적으로 구성가능한 멀티 모드 셋트 연관 캐시 메모리 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9798668B2 (ko) |
JP (1) | JP6207765B2 (ko) |
KR (1) | KR101820223B1 (ko) |
CN (1) | CN105701033B (ko) |
TW (1) | TWI620065B (ko) |
WO (1) | WO2016097810A1 (ko) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3066571B1 (en) | 2014-12-14 | 2018-06-13 | VIA Alliance Semiconductor Co., Ltd. | Cache memory budgeted by ways on memory access type |
WO2016097807A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Cache replacement policy that considers memory access type |
WO2016097808A1 (en) | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Dynamic cache replacement way selection based on address tag bits |
EP3129890B1 (en) * | 2014-12-14 | 2019-08-14 | VIA Alliance Semiconductor Co., Ltd. | Set associative cache memory with heterogeneous replacement policy |
US9898411B2 (en) * | 2014-12-14 | 2018-02-20 | Via Alliance Semiconductor Co., Ltd. | Cache memory budgeted by chunks based on memory access type |
WO2016097806A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Fully associative cache memory budgeted by memory access type |
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 |
US9846648B2 (en) * | 2015-05-11 | 2017-12-19 | Intel Corporation | Create page locality in cache controller cache allocation |
JP2018005667A (ja) * | 2016-07-05 | 2018-01-11 | 富士通株式会社 | キャッシュ情報出力プログラム、キャッシュ情報出力方法及び情報処理装置 |
JP2018133038A (ja) * | 2017-02-17 | 2018-08-23 | Necプラットフォームズ株式会社 | 情報処理装置、制御装置、制御方法及びプログラム |
US10229061B2 (en) | 2017-07-14 | 2019-03-12 | International Business Machines Corporation | Method and arrangement for saving cache power |
CN107526688B (zh) * | 2017-09-12 | 2020-05-29 | 上海兆芯集成电路有限公司 | 储存装置以及配置方法 |
GB2570299B (en) * | 2018-01-17 | 2020-04-08 | Advanced Risc Mach Ltd | Increasing effective cache associativity |
KR102294108B1 (ko) * | 2018-01-23 | 2021-08-26 | 다다오 나카무라 | 마칭 메모리 및 컴퓨터 시스템 |
GB2572158B (en) * | 2018-03-20 | 2020-11-25 | Advanced Risc Mach Ltd | Random tag setting instruction |
US11467966B2 (en) | 2020-09-02 | 2022-10-11 | Shenzhen GOODIX Technology Co., Ltd. | Cache memory having a programmable number of ways |
US20230089349A1 (en) * | 2021-09-21 | 2023-03-23 | Wisconsin Alumni Research Foundation | Computer Architecture with Register Name Addressing and Dynamic Load Size Adjustment |
GB2627524A (en) * | 2023-02-27 | 2024-08-28 | Imagination Tech Ltd | Flexible cache structure for caching compressed and uncompressed data |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100077153A1 (en) * | 2008-09-23 | 2010-03-25 | International Business Machines Corporation | Optimal Cache Management Scheme |
US20100318742A1 (en) * | 2009-06-11 | 2010-12-16 | Qualcomm Incorporated | Partitioned Replacement For Cache Memory |
Family Cites Families (50)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3259969B2 (ja) | 1991-07-09 | 2002-02-25 | 株式会社東芝 | キャッシュメモリ制御装置 |
JPH0520193A (ja) | 1991-07-15 | 1993-01-29 | Oki Electric Ind Co Ltd | キヤツシユ・メモリ装置 |
US5325504A (en) | 1991-08-30 | 1994-06-28 | Compaq Computer Corporation | Method and apparatus for incorporating cache line replacement and cache write policy information into tag directories in a cache system |
US5367653A (en) * | 1991-12-26 | 1994-11-22 | International Business Machines Corporation | Reconfigurable multi-way associative cache memory |
US5465342A (en) * | 1992-12-22 | 1995-11-07 | International Business Machines Corporation | Dynamically adaptive set associativity for cache memories |
US6223255B1 (en) | 1995-02-03 | 2001-04-24 | Lucent Technologies | Microprocessor with an instruction level reconfigurable n-way cache |
JPH0952582A (ja) * | 1995-08-14 | 1997-02-25 | Suzuki Motor Corp | 車両のトランクルーム構造 |
JPH0962582A (ja) | 1995-08-21 | 1997-03-07 | Toshiba Corp | 疑似セットアソシアティブ方式キャッシュメモリ装置 |
US5809562A (en) | 1996-05-20 | 1998-09-15 | Integrated Device Technology, Inc. | Cache array select logic allowing cache array size to differ from physical page size |
US5974507A (en) | 1997-04-14 | 1999-10-26 | International Business Machines Corporation | Optimizing a cache eviction mechanism by selectively introducing different levels of randomness into a replacement algorithm |
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 |
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 |
US6192458B1 (en) | 1998-03-23 | 2001-02-20 | International Business Machines Corporation | High performance cache directory addressing scheme for variable cache sizes utilizing associativity |
JP2954178B1 (ja) | 1998-06-26 | 1999-09-27 | 甲府日本電気株式会社 | 可変式キャッシュ方式 |
JP3495266B2 (ja) * | 1998-11-13 | 2004-02-09 | Necエレクトロニクス株式会社 | キャッシュロック装置及びキャッシュロック方法 |
US6405287B1 (en) | 1999-11-17 | 2002-06-11 | Hewlett-Packard Company | Cache line replacement using cache status to bias way selection |
US6681295B1 (en) | 2000-08-31 | 2004-01-20 | Hewlett-Packard Development Company, L.P. | Fast lane prefetching |
JP2002236616A (ja) * | 2001-02-13 | 2002-08-23 | Fujitsu Ltd | キャッシュメモリシステム |
US6874056B2 (en) | 2001-10-09 | 2005-03-29 | Agere Systems Inc. | Method and apparatus for reducing cache thrashing |
JP2003131945A (ja) | 2001-10-25 | 2003-05-09 | Hitachi Ltd | キャッシュメモリ装置 |
US7096323B1 (en) | 2002-09-27 | 2006-08-22 | Advanced Micro Devices, Inc. | Computer system with processor cache that stores remote cache presence information |
JP2004171177A (ja) | 2002-11-19 | 2004-06-17 | Renesas Technology Corp | キャッシュシステムおよびキャッシュメモリ制御装置 |
US7191291B2 (en) | 2003-01-16 | 2007-03-13 | Ip-First, Llc | Microprocessor with variable latency stack cache |
JP4036206B2 (ja) | 2004-03-31 | 2008-01-23 | 日本電気株式会社 | セットアソシアティブキャッシュシステム及びキャッシュメモリの制御方法 |
US7543113B2 (en) * | 2004-07-02 | 2009-06-02 | Hewlett-Packard Development Company, L.P. | Cache memory system and method capable of adaptively accommodating various memory line sizes |
US7257678B2 (en) | 2004-10-01 | 2007-08-14 | Advanced Micro Devices, Inc. | Dynamic reconfiguration of cache memory |
US8593474B2 (en) | 2005-12-30 | 2013-11-26 | Intel Corporation | Method and system for symmetric allocation for a shared L2 mapping cache |
JPWO2007096998A1 (ja) | 2006-02-24 | 2009-07-09 | 富士通株式会社 | キャッシュメモリ装置およびキャッシュメモリ制御方法 |
US7689772B2 (en) | 2006-05-04 | 2010-03-30 | Intel Corporation | Power-performance modulation in caches using a smart least recently used scheme |
US8046775B2 (en) | 2006-08-14 | 2011-10-25 | Marvell World Trade Ltd. | Event-based bandwidth allocation mode switching method and apparatus |
US20090006756A1 (en) | 2007-06-29 | 2009-01-01 | Donley Greggory D | Cache memory having configurable associativity |
JP2010026851A (ja) * | 2008-07-22 | 2010-02-04 | Panasonic Corp | コンパイラによる最適化方法 |
US8661179B2 (en) | 2008-10-03 | 2014-02-25 | Agere Systems Llc | Cache memory architecture having reduced tag memory size and method of operation thereof |
US8549208B2 (en) * | 2008-12-08 | 2013-10-01 | Teleputers, Llc | Cache memory having enhanced performance and security features |
JP5435617B2 (ja) | 2009-01-22 | 2014-03-05 | エヌイーシーコンピュータテクノ株式会社 | キャッシュメモリ制御回路およびキャッシュメモリ管理方法 |
US8990506B2 (en) | 2009-12-16 | 2015-03-24 | Intel Corporation | Replacing cache lines in a cache memory based at least in part on cache coherency state information |
US9582431B2 (en) | 2010-03-22 | 2017-02-28 | Seagate Technology Llc | Storage address space to NVM address, span, and length mapping/converting |
US20120096226A1 (en) | 2010-10-18 | 2012-04-19 | Thompson Stephen P | Two level replacement scheme optimizes for performance, power, and area |
US20120290793A1 (en) * | 2011-05-10 | 2012-11-15 | Jaewoong Chung | Efficient tag storage for large data caches |
CN103597545B (zh) | 2011-06-09 | 2016-10-19 | 株式会社半导体能源研究所 | 高速缓冲存储器及其驱动方法 |
CN104011692B (zh) * | 2011-12-26 | 2017-03-01 | 瑞萨电子株式会社 | 数据处理装置 |
US9110830B2 (en) | 2012-01-18 | 2015-08-18 | Qualcomm Incorporated | Determining cache hit/miss of aliased addresses in virtually-tagged cache(s), and related systems and methods |
US9824013B2 (en) * | 2012-05-08 | 2017-11-21 | Qualcomm Incorporated | Per thread cacheline allocation mechanism in shared partitioned caches in multi-threaded processors |
US20140047175A1 (en) | 2012-08-09 | 2014-02-13 | International Business Machines Corporation | Implementing efficient cache tag lookup in very large cache systems |
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 |
CN105814548B (zh) * | 2014-07-14 | 2019-02-12 | 上海兆芯集成电路有限公司 | 具有使用不同编索引方案的主高速缓存器和溢出高速缓存器的高速缓存器系统 |
US9892803B2 (en) * | 2014-09-18 | 2018-02-13 | Via Alliance Semiconductor Co., Ltd | Cache management request fusing |
JP2016091242A (ja) * | 2014-10-31 | 2016-05-23 | 富士通株式会社 | キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム |
WO2016097808A1 (en) | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Dynamic cache replacement way selection based on address tag bits |
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 |
-
2014
- 2014-12-14 US US14/891,333 patent/US9798668B2/en active Active
- 2014-12-14 KR KR1020157033313A patent/KR101820223B1/ko active IP Right Grant
- 2014-12-14 WO PCT/IB2014/003231 patent/WO2016097810A1/en active Application Filing
- 2014-12-14 JP JP2016564433A patent/JP6207765B2/ja active Active
-
2015
- 2015-11-18 CN CN201510796862.4A patent/CN105701033B/zh active Active
- 2015-11-20 TW TW104138634A patent/TWI620065B/zh active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100077153A1 (en) * | 2008-09-23 | 2010-03-25 | International Business Machines Corporation | Optimal Cache Management Scheme |
US20100318742A1 (en) * | 2009-06-11 | 2010-12-16 | Qualcomm Incorporated | Partitioned Replacement For Cache Memory |
Also Published As
Publication number | Publication date |
---|---|
TW201631475A (zh) | 2016-09-01 |
US9798668B2 (en) | 2017-10-24 |
CN105701033A (zh) | 2016-06-22 |
US20160357681A1 (en) | 2016-12-08 |
TWI620065B (zh) | 2018-04-01 |
CN105701033B (zh) | 2019-03-15 |
JP2017503299A (ja) | 2017-01-26 |
WO2016097810A1 (en) | 2016-06-23 |
KR20160086766A (ko) | 2016-07-20 |
JP6207765B2 (ja) | 2017-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101820223B1 (ko) | 모드에 따라 선택적으로 하나 또는 복수의 셋트를 선택하도록 동적으로 구성가능한 멀티 모드 셋트 연관 캐시 메모리 | |
JP6209689B2 (ja) | モードに応じてウェイの全部又はサブセットに選択的に割り当てるように動的に構成可能であるマルチモード・セット・アソシエイティブ・キャッシュ・メモリ | |
JP6218971B2 (ja) | アドレス・タグ・ビットに基づく動的キャッシュ置換ウェイ選択 | |
JP6207766B2 (ja) | ヘテロジニアス置換ポリシーを用いるセット・アソシエイティブ・キャッシュ・メモリ | |
KR101835949B1 (ko) | 메모리 접근 타입을 고려한 캐시 치환 정책 | |
TWI594123B (zh) | 基於記憶體存取類型以組塊來分配的快取記憶體 | |
KR101817847B1 (ko) | 메모리 접근 타입에 기초한 통로에 의해 버짓화된 캐시 메모리 | |
Wang et al. | Computer architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right |