KR101569160B1 - 캐시에서의 웨이 할당 및 웨이 로킹 방법 - Google Patents
캐시에서의 웨이 할당 및 웨이 로킹 방법 Download PDFInfo
- Publication number
- KR101569160B1 KR101569160B1 KR1020117025021A KR20117025021A KR101569160B1 KR 101569160 B1 KR101569160 B1 KR 101569160B1 KR 1020117025021 A KR1020117025021 A KR 1020117025021A KR 20117025021 A KR20117025021 A KR 20117025021A KR 101569160 B1 KR101569160 B1 KR 101569160B1
- Authority
- KR
- South Korea
- Prior art keywords
- source
- cache
- shared cache
- allowed
- data
- 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/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/126—Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- 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
- 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/0888—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
-
- 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
컴퓨팅 시스템의 공유 캐시 메모리에의 데이터 할당을 위한 시스템 및 방법이 고려된다. 공유된 세트-어소시에이티브 캐시의 각각의 캐시 웨이는, 하나 이상의 프로세서 코어들, 그래픽 프로세싱 유닛(GPU), 입출력(I/O) 디바이스, 또는 복수의 서로 다른 소프트웨어 쓰레드들과 같은 복수의 소스들에 의해 액세스가능하다. 공유 캐시 제어기는 수신된 메모리 요청의 대응 소스에 근거하여 캐시 웨이들 각각에 대해 개별적으로 액세스를 인에이블 또는 디스에이블한다. 하나 이상의 구성 및 상태 레지스터들(CSR들)이 공유 캐시 웨이들 각각에 대한 액세스가능성을 변경하기 위하여 사용되는 엔코딩 값들을 저장한다. CSR에 저장된 값들의 변경을 통한 공유 캐시 웨이들의 액세스가능성에 대한 제어는 공유 캐시 내에서 의사-RAM 구조를 생성하고 그리고 공유 캐시가 동작을 계속하는 중에 파워-다운 시퀀스 동안 공유 캐시의 사이즈를 점진적으로 줄이는데 사용될 수 있다.
Description
본 발명은 컴퓨팅 시스템에 관한 것이며, 보다 구체적으로는 컴퓨팅 시스템의 공유 캐시 메모리에서의 데이터 할당에 관한 것이다.
현대의 마이크로프로세서들은 하나 이상의 프로세서 코어들, 또는 프로세서들을 포함할 수 있으며, 각각의 프로세서는 소프트웨어 애플리케이션의 명령들을 실행할 수 있다. 이 프로세서들은 일반적으로 파이프라인되는바, 상기 프로세서들은 하나 이상의 데이터 프로세싱 스테이지들을 포함하고, 상기 하나 이상의 데이터 프로세싱 스테이지들은 상기 스테이지들 사이에 놓인 저장 소자들(예를 들어, 레지스터들 및 어레이들)과 직렬로 연결된다. 파이프라인은 명령 프로세싱 부분들이 수행되는 임의의 개수의 스테이지들로 분할될 수 있지만, 명령 프로세싱은 일반적으로 명령을 페치하는 단계, 명령을 디코딩하는 단계, 명령을 실행하는 단계, 및 명령에 의해 식별된 목적지에 실행 결과들을 저장하는 단계를 포함한다.
이상적으로, 매 클럭 사이클은 파이프라인의 각 단계에서 명령에 대한 유용한 실행을 생성한다. 그러나, 파이프라인에서의 스톨(stall)이 그 특정 파이프라인 스테이지 동안 어떠한 유용한 작업도 수행되지 않게 할 수 있다. 스톨의 일례(상기 스톨은 일반적으로 멀티-사이클 스톨임)는 데이터 캐시 미스 또는 명령 캐시 미스이다. 성능 손실을 줄이기 위한 벙법은 멀티-사이클 스톨들의 발생을 줄이는 것이다.
마이크로프로세서는 판독 또는 기록 동작을 위한 메모리 내의 데이터에 대한 마이크로프로세서의 요청의 지연(latency)를 줄이기 위하여 캐시 계층구조의 하나 이상의 레벨들에 결합될 수 있다. 일반적으로, 캐시는 하나 이상의 블록들을 저장할 수 있으며, 각각의 블록은 시스템 메모리 내의 대응하는 어드레스에 저장된 데이터의 사본이다. 본 명세서에서, "블록"은 연속적인 메모리 위치에 저장된 바이트들의 세트이고, 코히어런시(coherency) 목적을 위한 단위(unit)로 취급된다. 본 명세서에서, 용어 "캐시 블록", "블록", "캐시 라인" 및 "라인"은 상호교환가능하다. 일부 실시예들에서, 블록은 또한 캐시 내의 할당 및 할당해제의 단위일 수 있다. 블록 내의 바이트들의 수는 설계상의 선택에 따라 달라질 수 있고 임의의 사이즈일 수 있다. 예를 들어, 32 바이트 및 64 바이트 블록들이 종종 사용된다.
충돌(conflict, or collision), 미스들(misses)은, 세트-어소시에이티브(set-associative) 매핑 또는 직접 매핑된(direct-mapped) 캐시에서, 너무 많은 블록들이 동일한 세트에 매핑되고 그에 따라 그 세트 내에서 하나 이상의 블록들이 폐기될 필요가 있을 때 발생한다. 특정한 캐시는 데이터 저장을 위하여 캐시를 사용하는 두개 이상의 소스들을 가질 수 있다. 예를 들어, 하나 이상의 프로세서 코어들, 하나 이상의 그래픽 프로세싱 유닛들(GPUs), 하나 이상의 입출력(I/O) 디바이스들, 또는 다른 것들이 특정 캐시를 액세스할 수 있다. 이 소스들은 캐시의 저장 자원들을 동일하게 공유하지 않을 수 있다. 소스의 증가된 평균 메모리 지연으로부터 겪는 시스템 성능 저하가 각각의 소스에 대해 동일하지 않을 수 있다.
예를 들어, 메모리 계층에서 L2 또는 L3 캐시일 수 있는 세트-어소시에이티브 공유 캐시(set-associative shared cache)는 두개의 온-다이 프로세서 코어들, 또는 코어들, 그래픽 프로세서 유닛(GPU), 및 다중 입출력(I/O) 디바이스들에 의해 데이터 저장을 위하여 사용될 수 있다. 이 캐시 내에 저장될 새로운 데이터를 위한 공간을 할당(예를 들어, 캐시 미스 후의 필 캐시 라인 채우기(fill cache line))하기 위하여, 일반적인 캐시 구현법은 선택된 세트 내에서 LRU(Least Recently Used) 웨이가 대체되는 것을 허용한다. 이 할당 기법(allocation strategy)은 서로 다른 소스들로부터의 요청들을 구분하지 않기 때문에, I/O 소스와 같은 일 소스가 캐시 내의 웨이들의 상당 부분(significant portion)을 점유할 수 있게 하는바, 이는 바람직하지 않은 현상이다. 코어의 데이터 블록들은 이제 이 선택된 세트 내에서 퇴거(eviction)될 수 있으며, 이는 시스템 내의 코어에 의해 보여지는 평균 메모리 지연을 줄여준다.
위의 관점에서, 컴퓨팅 시스템의 메모리에서의 데이터 할당을 위한 효율적인 방법 및 메커니즘이 요구된다.
컴퓨팅 시스템의 공유 캐시 메모리 내에 데이터를 할당하는 시스템 및 방법이 고려된다. 일 실시예에서, 컴퓨팅 시스템은 하나 이상의 프로세서 코어들 및 공유된 세트-어소시에이티브 캐시를 포함한다. 공유 캐시의 각각의 캐시 웨이는 복수의 소스들에 의해 엑세스가능하고, 상기 복수의 소스들은 메모리 요청들을 발생시키도록 되어 있다. 공유 캐시 제어기(shared cache controller)는 수신된 메모리 요청의 대응 소스에 근거하여 각각의 캐시 웨이들에 대해 개별적으로(separately) 캐시 필 라인 할당을 인에이블 또는 디스에이블하도록 구성된다. 복수의 소스들 각각은, 프로세서 코어, 그래픽 프로세싱 유닛(GPU), 및 입력/출력(I/O) 디바이스 중 적어도 하나일 수 있다.
공유 캐시 웨이들 각각에 대해 개별적으로 상기 할당을 인에이블 및 디스에이블하기 위해 사용되는 인코딩 값들을 저장하기 위하여 하나 이상의 구성 및 상태 레지스터들(configuration and status register; CSR)이 공유 캐시 제어기에 결합된다. CSR들 내에 저장된 값들의 프로그래밍은, 하나 이상의 선-선택된(preselected) 소스들에 의한 캐시 미스에 후속하는 할당에 대해 공유 캐시 웨이들 각각을 사용할 수 있게 만들 수 있다. 따라서, 프로세서 코어와 같은 제2 소스의 데이터에 대한 원치 않은 퇴거를 방지하기 위하여, I/O 디바이스와 같은 특정한 제1 소스는 캐시 미스에 후속하는 특정 캐시 웨이에 대한 할당 성능(allocation availibility)을 가지지 않을 수 있다. 하나 이상의 CSR들에 저장된 값들을 변경하는 것을 통해 공유 캐시 웨이들의 할당 가능성을 제어하는 것은 또한, 공유 캐시가 동작을 계속하는 동안에, 공유 캐시 내에 의사-RAM 구조(pseudo-RAM structure)를 생성하고 파워-다운 시퀀스 동안 공유 캐시의 사이즈를 계속해서 줄이기 위하여 사용될 수 있다.
이러한 실시예들 및 다른 실시예들은 하기의 설명 및 첨부의 도면을 참조로 명확해질 것이다.
도 1은 컴퓨팅 시스템의 일 실시예를 도시하는 간략화된 블록도이다.
도 2는 예시적인 프로세싱 노드의 일 실시예를 도시하는 간략화된 블록도이다.
도 3은 세트-어소시에이티브 캐시 저장 배열의 일 실시예를 도시하는 간략화된 블록도이다.
도 4는 공유 자원에서 데이터의 효율적인 할당 방법의 일 실시예의 흐름도이다.
도 5는 효율적인 캐시 라인 로킹(locking) 메커니즘을 위한 방법의 일 실시예의 흐름도이다.
도 6은 효율적인 캐시 섹터 파워-다운 시퀀스 방법의 일 실시예의 흐름도이다.
도 7은 효율적인 캐시 섹터 파워-업 시퀀스 방법의 일 실시예의 흐름도이다.
본 발명은 다양한 수정 및 대안적인 형태들이 가능하지만, 구체적인 실시예들이 도면들에 예로서 도시되었고 여기에서 상세히 설명된다. 그러나, 도면들 및 상기 도면들에 대한 상세한 설명은 본 발명을 개시된 특정 형태로 제한하려 의도된 것이 아니라, 오히려 반대로, 본 발명은 첨부의 청구항들에 정의된 것과 같은 본 발명의 정신 및 범주 내에 속하는 모든 수정, 등가 및 대안들을 포함하는 것으로 이해되어야 한다.
도 2는 예시적인 프로세싱 노드의 일 실시예를 도시하는 간략화된 블록도이다.
도 3은 세트-어소시에이티브 캐시 저장 배열의 일 실시예를 도시하는 간략화된 블록도이다.
도 4는 공유 자원에서 데이터의 효율적인 할당 방법의 일 실시예의 흐름도이다.
도 5는 효율적인 캐시 라인 로킹(locking) 메커니즘을 위한 방법의 일 실시예의 흐름도이다.
도 6은 효율적인 캐시 섹터 파워-다운 시퀀스 방법의 일 실시예의 흐름도이다.
도 7은 효율적인 캐시 섹터 파워-업 시퀀스 방법의 일 실시예의 흐름도이다.
본 발명은 다양한 수정 및 대안적인 형태들이 가능하지만, 구체적인 실시예들이 도면들에 예로서 도시되었고 여기에서 상세히 설명된다. 그러나, 도면들 및 상기 도면들에 대한 상세한 설명은 본 발명을 개시된 특정 형태로 제한하려 의도된 것이 아니라, 오히려 반대로, 본 발명은 첨부의 청구항들에 정의된 것과 같은 본 발명의 정신 및 범주 내에 속하는 모든 수정, 등가 및 대안들을 포함하는 것으로 이해되어야 한다.
하기의 설명에서, 본 발명의 완전한 이해를 제공하기 위하여 다양한 구체적인 세부사항들이 제시되었다. 그러나, 본 기술 분야의 통상적인 기술자는 본 발명이 이러한 구체적인 세부사항들 없이도 실시될 수 있음을 이해해야 한다. 본 발명을 모호하게 하는 것을 방지하기 위하여, 몇몇 예들에서, 잘 알려진 회로들, 구조들, 및 기법들은 자세히 설명되지 않는다.
도 1을 참조로, 컴퓨팅 시스템(100)의 일 실시예가 도시된다. 일반적으로, 컴퓨팅 시스템(100)은 복수의 프로세싱 노드들(110a-110d)을 포함한다. 본 명세서에서, 문자 뒤에 오는 참조 번호를 참조하는 구성요소들은 집합적으로 그 번호 단독으로 참조될 수 있다. 예를 들어, 프로세싱 노드들(110a-110d)은 프로세싱 노드들(110), 또는 노드들(110)으로서 집합적으로 참조될 수 있다. 도 1에 4개의 노드들이 도시되나, 다른 실시예들은, 1, 2, 6, 또는 임의의 다른 개수의 노드들을 포함할 수 있고, 각각의 노드(110)는 하나 이상의 프로세서 코어들을 포함한다.
각각의 노드(110)는 각각의 메모리 제어기(120)를 통해 각각의 메모리(130)에 연결될 수 있다. 또한, 각각의 프로세싱 노드(110)는 다른 프로세싱 노드들(110)과 통신하는데 사용되는 인터페이스 로직(140)을 포함할 수 있다. 예를 들어, 프로세싱 노드(110a)는 프로세싱 노드들(110b, 110c)과 통신하기 위한 인터페이스 로직(140a)을 포함한다. 마찬가지로, 프로세싱 노드(110b)는 프로세싱 노드들(110a, 110b)과 통신하기 위한 인터페이스 로직(140b)을 포함한다. 도 1의 실시예에서, 프로세싱 노드(110d)는 인터페이스 로직(140d)을 통해 입력/출력(I/O) 디바이스(160a)와 통신하도록 연결된 것으로 도시된다. I/O 디바이스(160a)는 제2 I/O 디바이스(160b)에 더 연결된다. 또한, 프로세싱 노드(110d)는 그래픽 프로세싱 유닛(GPU)(170)과 통신하도록 연결된 것으로 도시된다. 다른 프로세싱 노드들은 다른 I/O 디바이스들, 다른 GPU들, 또는 다른 컴포넌트들과 유사한 방식으로 통신할 수 있다. 대안적으로, 프로세싱 노드(110)는 I/O 버스에 연결되는 I/O 브리지와 통신할 수 있다.
일 실시예에서, 컴퓨팅 시스템(100)은, I/O 디바이스들(160) 및 GPU(170)에 연결된 것으로 도시된 노드(110d)와 같은 하나의 프로세싱 노드(110)만을 가질 수 있다. 그러한 실시예의 예들은 모바일 랩탑 시스템, 데스크탑, 엔트리-레벨 서버 시스템, 중범위(mid-range) 워크스테이션 등을 포함할 수 있다. 그러한 실시예에서, 단일 프로세싱 노드(110)는 내부적으로 통신을 위한 시스템 버스 제어기를 사용할 수 있다. 시스템 버스 제어기의 일 예는 AMD-762TM 노스브리지 시스템 버스 제어기이다.
또 다른 실시예에서, 컴퓨팅 시스템(100)은 복수의 프로세싱 노드들(110)을 포함할 수 있다. 그러한 실시예에서, 컴퓨팅 시스템(100)은 내부-노드 통신을 위한 패킷-기반 링크를 구현할 수 있다. 도시된 실시예에서, 링크는 단방향 라인들의 세트들을 구현된다.(예를 들어, 라인들(150a)은 프로세싱 노드(110a)로부터 프로세싱 노드(110b)로 패킷들을 전송하는데 사용되고, 라인들(150b)는 프로세싱 노드(110b)로부터 프로세싱 노드(110a)로 패킷들을 전송하는데 사용된다.) 라인들의 다른 세트들(150c-150g)은 도 1에 도시된 것과는 다른 프로세싱 노드들 사이에서 패킷들을 전송하는데 사용된다.
링크들(150)은 프로세싱 노드들 사이의 통신을 위하여 캐시 코히어런트 방식(cache coherent fashion)으로 동작하거나 I/O 디바이스들(160a-160b) (및, 필요에 따라, 추가적인 I/O 디바이스들) 사이의 데이지 체인 구조로서 논-코히어런트 방식으로 동작될 수 있다. 일 프로세싱 노드(110)로부터 또 다른 프로세싱 노드로 전송될 패킷은 하나 이상의 중간 노드들을 통과할 수 있음에 주목하여야 한다. 예를 들어, 프로세싱 노드(110A)에 의해 프로세싱 노드(110d)로 전송되는 패킷은, 도 1에 도시된 바와 같이, 프로세싱 노드(110b) 또는 프로세싱 노드(110c)를 통과할 수 있다. 임의의 적절한 라우팅 알고리즘이 사용될 수 있다. 컴퓨팅 시스템(100)의 다른 실시예들은 도 1에 도시된 실시예보다 더 많은 또는 더 적은 프로세싱 노드들을 포함할 수 있다. 또한, 각각의 프로세싱 노드가 점대점(point-to-point) 네트워크를 통해 하나 걸러 하나의 다른 프로세싱 노드(every other processing node)에 연결되는 다른 실시예들이 가능하다.
도시된 메모리 제어기 및 인터페이스 로직에 부가하여, 각각의 프로세싱 노드(110)는, 하기에 설명되는 바와 같이, 하나 이상의 프로세서들 및 관련된 캐시들을 포함할 수 있다. 대체로, 프로세싱 노드(110)는 적어도 하나의 프로세서를 포함하며, 필요에 따라, 메모리 및 다른 로직과 통신하기 위한 메모리 제어기를 선택적으로 포함할 수 있다.
메모리들(130)은 임의의 적절한 메모리 디바이스들을 포함할 수 있다. 예를 들어, 메모리(130)는 하나 이상의 RAMBUS 동적 랜덤 액세스 메모리들(DRAM들), 동기화 DRAM(SDRAM들), DRAM, 정적 RAM 등을 포함할 수 있다. 컴퓨팅 시스템(100)의 어드레스 공간은 메모리들(130) 간에 분할된다. 각각의 프로세싱 노드(110)는 어떤 어드레스들이 어떤 메모리들(130)에 매핑되는지, 그리고 그에 따라 특정 어드레스에 대한 메모리 요청이 어떤 프로세싱 노드(110)에 라우팅되어야 하는지를 결정하기 위해 사용되는 메모리 맵을 포함할 수 있다. 일 실시예에서, 컴퓨팅 시스템(100) 내에서 어드레스에 대한 코히어런시 포인트(coherency point)는 그 어드레스에 대응하는 바이트들을 저장하는 메모리에 결합된 메모리 제어기이다. 메모리 제어기들(120)은 메모리들(130)과 인터페이스하기 위한 제어 회로를 포함한다. 또한, 메모리 제어기들(120)은 메모리 요청들을 적재(queuing)하기 위한 요청 큐들(request queues)을 포함할 수 있다.
일반적으로, 인터페이스 로직(140)은 링크로부터 패킷들을 수신하기 위한 그리고 상기 링크 상에서 전송될 패킷들을 버퍼링하기 위한 버퍼들을 포함할 수 있다. 컴퓨팅 시스템(100)은 패킷들을 전송하기 위한 임의의 적절한 흐름 제어 메커니즘을 사용할 수 있다. I/O 디바이스들(160)은 임의의 바람직한 주변 장치들의 예이다. 예를 들어, I/O 디바이스들(160)은 네트워크 인터페이스 카드, 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이브들 또는 드라이브 제어기들, SCSI(Small Computer Systems Interface) 어댑터들 및 전화 카드, 모뎀, 사운드 카드, 및 범용 인터페이스 버스(GPIB) 또는 필드 버스 인터페이스 카드들과 같은 다양한 데이터 획득 카드를 포함할 수 있다.
도 2는 예시적인 프로세싱 노드(110)의 일 실시예의 블록도이다. 도 1의 회로 부분에 대응하는 회로 부분들은 동일한 번호로 표시된다. 프로세싱 노드(110)는 메모리 제어기(120), 인터페이스 로직(140), 프로세서 코어들(112) 및 대응하는 캐시 메모리 서브시스템들(114)을 포함하는 하나 이상의 프로세싱 유닛들(115), 시스템 통신 로직(116), 및 공유 캐시 메모리 서브시스템(118)을 포함할 수 있다. 일 실시예에서, 프로세싱 노드(110)의 도시된 기능은 단일 집적 회로에 통합된다. 또 다른 실시예에서, 도시된 기능은 컴퓨터 마더보드의 칩셋에 통합된다.
일 실시예에서, 프로세싱 노드(110)는 모바일 컴퓨터, 데스크탑, 등 내의 독립형 시스템(stand-alone system)이다. 일 실시예에서, 시스템 통신 로직(116)은 시스템 버스이다. 또 다른 실시예에서, 프로세싱 노드(110)는 유닛들(115)을 메모리(130), I/O 디바이스들(160), GPU(170) 등에 연결하기 위하여 로직(116) 내의 노스브리지 시스템 버스 제어기를 포함한다. 그러한 실시예에서, 시스템 통신 로직(116)은 메모리 제어기(120) 및 인터페이스 로직(140)의 기능을 대체하거나 포함할 수 있다. 일 실시예에서, 로직(116)은 노스브리지 및 사우스브리지 시스템 버스 제어기 모두를 포함할 수 있다. 노스브리지 프로토콜은 유닛들(115)을 메모리(130) 및 GPU(170)에 연결하는데 사용될 수 있다. 사우스브리지 프로토콜은 유닛들(115)을 I/O 디바이스들(160), 실시간 클록, 전력 관리 유닛 등에 연결하는데 사용될 수 있다. 로직(116)의 그러한 실시예의 일례는 AMD-762TM 노스브리지 시스템 제어기 및 AMD-768TM 사우스브리지 주변 버스 제어기를 포함할 수 있다.
또 다른 실시예에서, 프로세싱 노드(110)는 멀티 소켓 시스템의 일 소켓이다. 그러한 실시예에서 시스템 통신 로직(116)은 패킷 프로세싱 로직을 포함할 수 있다. 일반적으로, 시스템 통신 로직(116)은
프로세싱 노드(110)가 연결된 링크들에서 수신된 제어 패킷들에 응답하고, 프로세서 코어들(112) 및/또는 캐시 메모리 서브시스템들(114)에 응답하여 제어 패킷들을 발생시키고, 메모리 제어기(120)에 의해 선택된 트랜잭션들에 응답하여 서비스를 위한 프로브 명령들 및 응답 패킷들을 발생시키고, 그리고 패킷의 노드(110)가 다른 노드들에 대한 중간 노드인 패킷들을 인터페이스 로직(140)을 통해 라우팅하도록 구성될 수 있다. 인터페이스 로직(140)은 패킷들을 수신하고 그리고 상기 패킷들을 로직(116) 내의 패킷 프로세싱 로직에 의해 사용되느 내부 클럭에 동기화하는 로직을 포함할 수 있다.
프로세서 코어들(112)은 미리 정의된 명령 세트에 따라 명령들을 실행하기 위한 회로를 포함한다. 예를 들어, x86 명령 세트 구조(ISA)가 선택될 수 있다. 대안적으로, 알파, 파워PC, 또는 임의의 다른 명령 세트 구조가 선택될 수 있다. 일반적으로, 프로세서 코어(112)는 데이터 및 명령들 각각을 위하여 캐시 메모리 서브시스템들(114)에 액세스한다. 본 명세서에서 사용되는 캐시 메모리 서브시스템에 관한 용어 "엑세스"는 대응하는 요청 어드레스의 요청된 데이터가 캐시 내에 존재하면 캐시 히트를, 캐시 내에 존재하지 않으면 캐시 미스를 야기할 수 있는 판독 또는 기록 요청 동작을 수행하는 것을 지칭한다.
요청된 블록이 캐시 메모리 서브시스템(114) 또는 공유 캐시 메모리 서브시스템(118)에서 발견되지 않는 것과 같은 캐시 미스가 발생하면, 판독 요청이 발생되어 미싱 블록이 매핑되는 노드 내의 메모리 제어기로 전송될 수 있다. 요청된 블록을 가진 대응하는 캐시 필 라인은 본래의 판독 또는 기록 요청을 완료하기 위하여 대응하는 캐시로 전달될 수 있다. 또한, 캐시 필 라인은 캐시 내에서 대응 세트 내에 위치될 수 있다. 대응하는 세트 내에 사용가능한 웨이들이 없는 경우에는, 일반적으로, LRU(Least Recently Used) 알고리즘이 세트 내에서 어떤 웨이가 그것의 데이터를 퇴거시키고 캐시 필 라인 데이터로 대체했는지를 결정한다. 본 명세서에서, 용어 "할당"은 캐시 계층구조의 하위 레벨로부터 페치된 캐시 필 라인을 저장하는 것을 지칭한다.
캐시 서브시스템들(114, 118)은 데이터의 블록들을 저장하도록된 고속 캐시 메모리들을 포함할 수 있다. 캐시 메모리 서브시스템들(114)은 각각의 프로세서 코어들(112) 내에 통합될 수 있다. 대안적으로, 캐시 메모리 서브시스템들(114)은, 필요에 따라, 백사이드 캐시 구성 또는 인라인 구성으로 프로세서 코어들(112)에 연결될 수 있다. 또한, 캐시 메모리 서브시스템들(114)은 캐시들의 계층구조로서 구현될 수 있다. (계층구조 내에서) 프로세서 코어들(112)에 더 가까이 위치된 캐시들은, 필요에 따라 프로세서 코어들(112) 내에 통합될 수 있다. 일 실시예에서, 캐시 메모리 서브시스템들(114) 각각은 L2 캐시 구조들을 나타내며, 공유 캐시 서브시스템(118)은 L3 캐시 구조를 나타낸다. 또 다른 실시예에서, 캐시 메모리 서브시스템들(114) 각각은 L1 캐시 구조를 나타내며, 공유 캐시 서브시스템(118)은 L2 캐시 구조를 나타낸다. 다른 실시예들이 가능하고 고려된다.
캐시 메모리 서브시스템(114) 및 공유 캐시 메모리 서브시스템(118)은 대응하는 캐시 제어기에 연결된 캐시 메모리, 또는 캐시 어레이를 포함할 수 있다. 일 실시예에서, 세트 어쏘시에이티브 공유 캐시 메모리 서브시스템(118)의 캐시 제어기는 프로그램가능 구성 및 상태 레지스터들(CSR들) 및 로직을 포함할 수 있다. 같은 이유로, CSR들 및 대응하는 로직은, 서브시스템(118)을 사용하는 다양한 소스들이 캐시 필 라인과 같이, 캐시 미스에 후속하여 데이터를 할당하는 것을 방지하기 위하여 서브시스템(118)의 캐시 어레이를 복수의 독립적인 섹션들로 분할하는데 사용될 수 있다.
캐시에 기저장된 데이터는 CSR들에 저장된 값들에도 불구하고 임의의 소스에 의해 판독 또는 기록 엑세스에 대하여 히트될 수 있다. 예를 들어, 캐시는 수정된 데이터(modified data)를 가질 수 있으며, 따라서, 메모리 계층구조의 하위 레벨들은 대응하는 스테일 데이터(stale data)를 가질 수 있다. 요청 소스는 요청된 캐시 라인의 갱신된 사본을 수신해야 한다. 따라서, 공유 캐시의 특정 세트 내의 특정 웨이에 대해, 임의의 소스로부터의 액세스가 더 허용되나, 캐시 미스로인한 할당은 CSR들에 저장된 값들에 의해 결정된다. 그러한 기법은 유용한 데이터의 퇴거, 또는 유용하지 않은 데이터에 의한 공유 캐시의 오염(pollution)을 제한할 수 있다. 액세스는 임의의 소스에 의해 허용되지만, 액세스를 위한 어드레스의 범위는 각각의 소스에 대해 미리 정해질 수 있다.
데이터는 다양한 방식으로 공유 캐시 메모리(118)의 어레이 내에 저장될 수 있다. 예를 들어, 도 3은 16-웨이 세트 어쏘시에이티브 캐시 구성을 사용하여 데이터가 저장되는 저장 방식(storage arrangement)(300)의 일 실시예를 도시한다. 세트 어쏘시에이티브 캐시 내에서 4 웨이, 8 웨이, 등과 같은 서로 다른 수의 웨이들이 선택될 수 있다. 주어진 캐시 세트(332)는 공유 캐시 메모리 서브시스템(118)과 같은 세트 어쏘시에이티브 캐시에 액세스하는데 사용되는 어드레스(310)의 블록 인덱스(318) 부분에 의해 다른 세트들로부터 선택될 수 있다. 캐시 블록 히트는, 블록 태그들(312, 336)이 동일한 값을 포함하고 대응하는 블록 상태(334)가 유효 캐시 블록(valid cache block)과 같은 소정의 매치 값들(match values)을 지정할 때 발생할 수 있다.
일 실시예에서, 캐시(330) 내의 캐시 라인의 데이터 부분(338), 또는 캐시 블록은 64 바이트들을 저장하도록 구성된다. 다른 사이즈들 또한 가능하며 고려된다. 캐시(330)의 16 웨이들 각각은 또한 상태 정보(334)를 저장할 수 있다. 이 블록 상태(334)는, 유효 비트(valid bit), 대응하는 캐시 블록을 소유하는 소스를 나타내는 캐시 블록 오너 엔코딩, 캐시 제어기에 의해 사용되는 캐시 교체 알고리즘(cache replacement algorithm)과 공동으로 사용된 최근 최소 사용된(Least Recentrly Used) 퇴거(eviction) 정보, 수정, 배타, 소유, 공유, 무효, 등과 같은 캐시 코히어런스 상태를 지정하는 표시(indication) 중 적어도 하나 이상을 포함할 수 있다. 다른 상태 정보가 포함되는 것이 가능하고 고려된다. 블록 태그(336)는 16 캐시 라인들 중 어느것이 주어진 캐시 세트(32) 내에서 엑세스되는지를 결정하는데 사용될 수 있다. 또한, 어드레스(310)의 오프셋(320)은 캐시 라인 내의 특정 바이트 또는 워드를 나타내는데 사용될 수 있다.
캐시 세트(332)가 어드레스(310)의 블록 인덱스(318)에 의해 선택될 수 있다. 각각의 캐시 웨이 내에서 블록 상태(334) 및 블록 태그(336)가 데이터(338)와 연속적인 비트들에 저장될 수 있고, 일 실시예에서, 블록 상태(334) 및 블록 태그(336)는 데이터(338)와 동일한 어레이 내에 저장되지 않고 별도의 어레이에 저장될 수 있다.
캐시 어레이 내에서 캐시 미스 후에 메모리 요청들에 대한 데이터 저장의 할당을 제어하는 것이 유용할 수 있다. 특정 캐시의 대응 세트 내에 사용가능한 웨이가 없으면, 대응하는 세트 내에서 현재 저장된 캐시 라인이 퇴거되어야 한다. 일반적으로, 퇴거를 위하여 현재 저장된 캐시 라인을 선택하기 위하여 LRU(Least Recently Used) 기법이 사용된다. 예를 들어, 코어(112a) 및 코어(112b)는 공유 캐시(118)의 특정 섹션들에만 할당하도록 허용될 수 있고, I/O 디바이스는 별도의 섹션을 할당하도록 제한될 수 있으며, 그래픽 프로세싱 유닛(GPU)는 또 다른 별도의 섹션만을 할당하도록 제한될 수 있다.
예를 들어, 캐시(330) 내의 저장소 배열(storage arrangement)과 관련하여, 코어(112a)는 웨이 15 내지 12에만 할당하도록 허용될 수 있고, 코어(112b)는 웨이 11 내지 8에만 할당하도록 허용될 수 있고, GPU는 웨이 7 및 6에만 할당하도록 허용될 수 있고, 세개의 별도의 I/O 디바이스들은 각각, 웨이 5 및 4, 웨이 3 및 2, 그리고 웨이 1 및 0 과 같은 2개의 웨이들에만 할당하도록 하용될 수 있다. 그러므로, 코어들(112a, 112b) 각각은 공유 캐시의 1/4을 할당할 수 있고, GPU(170) 및 세개의 I/O 디바이스들(160) 각각은 각각 동일한 공유 캐시의 1/8을 할당할 수 있다. 할당을 위한 소정의 허용(predertermined permissions)을 제공하는 메커니즘이 간략하게 설명될 것이다. 이러한 방식으로, 이 소스들은 각각의 소스와 관련된 비-공유된 독립 데이터 저장소를 별개의 섹션들에 유지함으로써 서브시스템(118)의 캐시 어레이를 효율적으로 공유할 수 있다. 일 실시예에서, 예에서 설명된 바와 같이, 코어들(112)은 GPU(170) 및 임의의 다른 I/O 디바이스들(160)보다 데이터 할당을 위해 공유 캐시(118)의 더 큰 섹션들을 가질 수 있다.
주목할 점은 할당 허용(permission)을 가지지 않은 소스에 의한 특정 웨이로의 기록 오퍼레이션 캐시 히트가 여전히 종전과 같이 수행된다는 것이다. 위의 예를 사용하여, I/O 디바이스(160)는 웨이(15)로의 할당 허용을 가지지 않을 수 있다. I/O 디바이스(160)가 특정 세트 내에서 캐시 라인의 판독 동작을 수행하고 캐시 미스가 발생하면, 요청된 캐시 라인을 포함하는 캐시 필 라인이 메모리 계층구조의 하위 레벨로부터 페치된다. 이 캐시 필 라인은 판독 동작을 완료하는데 사용된다. 후속적으로 또는 동시에, 최근 최소(LRU) 알고리즘과 같은 메커니즘은, 캐시 세트 내의 전체 캐시 웨이들 중에서 교체될 캐시 웨이를 선택하기 보다는, 대응하는 캐시 세트 내의 소정 수의 웨이들 내에서 교체될 캐시 웨이를 선택하기 위하여 확장될 수 있다. 대응하는 CSR에 저장된 엔코딩 값은 캐시 웨이들 1 및 0이 이 I/O 디바이스(160)를 위한 할당에만 사용될 수 있음을 결정하기 위하여 사용될 수 있다. 후속적인 퇴거(eviction)는 캐시 웨이 1 및 0에서만 발생할 수 있으며, 이 두개의 캐시 웨이들 중 최근 최소 사용 캐시 웨이가 선택될 수 있다. 일 실시예에서, 디바이스(160)이 특정 세트로의 기록 오퍼레이션을 수행하고 캐시 히트가 웨이 15 에 대해 발생하면, I/O 디바이스(160)는 웨이(15)에서 데이터를 수정할 수 있다.
또 다른 실시예에서, 코어들(112a, 112b)이 데이터를 공유할 수 있으나, 이 데이터는 GPU(170) 또는 세개의 개별적인 I/O 디바이스들(160)과 공유되지 않을 수 있다. 코어들(112a 및 112b)은 모두 웨이 15 내지 8만을 할당하도록 허용될 수 있고, GPU(170)는 웨이 7 및 6만을 할당하도록 허용될 수 있고, 세개의 별개의 I/O 디바이스들(160)은 각각, 웨이 5 및 4, 웨이 3 및 2, 그리고 웨이 1 및 0과 같은 각각 2개의 웨이들만을 할당하도록 허용될 수 있다. 그러므로, 코어들(112a 및 112b) 각각은 공유 캐시의 1/2를 할당하는 것이 허용되고, GPU(170) 및 세개의 I/O 디바이스들(160) 각각은, 각각 동일한 공유 캐시의 1/8을 할당하는 것이 허용된다.
일 실시예에서, 캐시 메모리 서브시스템(118)과 같은 시스템 내의 지정된 캐시를 사용하는 코어(112a), I/O 디바이스(160), GPU(170), 등과 같은 각각의 소스를 위한 할당 공간을 제어하기 위하여 엔코딩된 값들을 저장하는데 구성 및 상태 레지스터들(CSR들)이 사용될 수 있다. 예를 들어, 메모리 요청의 소스에 근거한 16-웨이 세트-어소시에이티브 지정 캐시(set-associative designated cache)의 파티셔닝(partitioning)은 5-비트 마스크 엔코딩을 사용할 수 있다. 엔코딩 값들의 일례는 표 1에서 보여진다.
테이블 엔트리 | 엔코딩 | 의미(Significance) |
1 | 00111 | 모든 웨이들이 인에이블됨 |
2 | 0x011 | 8개의 웨이들이 인에이블됨. 비트 3은 어떤 1/2이 인에이블되는지를 지정. |
3 | 0xx01 | 4개의 웨이들이 인에이블됨. 비트 3:2는 어떤 1/4이 인에이블되는지를 지정. |
4 | 0xxx0 | 2개의 웨이들이 인에이블됨. 비트 3:1은 어떤 1/8이 인에이블되는지를 지정. |
5 | 1xx01 | 4개의 웨이들이 디스에이블됨. 비트 3:2는 어떤 1/4이 인에이블되는지를 지정. |
6 | 1xxx0 | 2개의 웨이들이 디스에이블됨. 비트 3:1은 어떤 1/8이 인에이블되는지를 지정함. |
7 | 10111 | 모든 웨이들이 디스에이블됨. |
위의 표 1에 도시된 엔코딩은 시스템 내에서 지정된 캐시를 공유하는 각각의 소스를 위한 할당 공간을 제어할 수 있다. 일 실시예에서, 코어(112a)를 위한 5 비트 CSR은, 표 1의 테이블 엔트리 2와 같은 값 '00011'을 저장하도록 프로그래밍될 수 있으며, 이는 코어 112a가 캐시(118)의 16 웨이들 중 1/2에 데이터를 할당할 수 있게 해준다. 이러한 특정한 웨이들은 지정된 웨이들 7 내지 0일 수 있으며, 상기 웨이들은, 도 3의 캐시(330)의 예시적인 저장소 배열과 유사한 캐시의 세트 내에서 좌측에서 우측으로, 15에서 0으로 번호 표기되어 있다. 다른 라벨링 기법들이 가능하고 고려된다.
마찬가지로, GPU(170)을 위한 5 비트 CSR은 표 1의 테이블 엔트리 3과 같은, 값 '01001'을 저장할 수 있으며, 이는 GPU가 캐시(118)의 16웨이들 중 4개에 데이터를 할당할 수 있게 해준다. 이러한 특정한 웨이들은 지정된 웨이 11 내지 8일 수 있다. 제1 I/O 디바이스(160)를 위한 제3의 5-비트 CSR은 표 1의 테이블 엔트리 2와 같은 값 '01100'을 저장할 수 있으며, 이는 제1 I/O 디바이스가 캐시(118)의 웨이들 중 2개에 데이터를 할당할 수 있게 해준다.이러한 특정 웨이들은 지정된 웨이 13 내지 12일 수 있다. 최종적으로, 제2 I/O 디바이스(160)를 위한 4번째 5비트 CSR은 표 1의 테이블 엔트리 4와 같은 값 '01110'을 저장할 수 있으며, 이는 제2 I/O 디바이스가 캐시(118)의 웨이들 중 2개의 웨이들에 데이터를 할당할 수 있게 해준다. 이러한 특정 웨이들은 지정된 웨이 15 내지 14일 수 있다. 또한, 캐시(118)는 상이한 수의 웨이들을 사용할 수 있고, 표 1의 엔코딩은, 4-웨이, 8-웨이, 또는 다른 세트-어소시에이티브 선택과 같은 상이한 수의 웨이들을 수용하도록 변경될 수 있다.
웨이 1 및 0, 또는 16 웨이 세트 어소시에이티브 캐시의 1/8과 같은 캐시의 임의의 영역은 전체 소스들에 의한 할당에 대해서 디스에이블될 수 있고, 이는 동시에 전체 소스들에 의한 할당에 대해 캐시의 다른 영역들을 인에이블할 수 있다. 일 실시예에서, 각각의 소스가 대응하는 개별 CSR을 사용하는 것에 부가하여, 전역 CSR(global CSR)이 모든 소스들에 의해 사용될 수 있다. 전역 CSR에 저장된 엔코딩된 값은 개별 CSR들에 저장된 엔코딩된 값들에 우선할 수 있다. 예를 들어, 일 실시예에서, 전역 CSR은 표 1의 테이블 엔트리 6과 같은, 값 '10000'을 저장하도록 프로그래밍될 수 있다. 표 1에 따른 이 값은 임의의 소스에 의한 대응 세트-어소시에이티브 캐시의 웨이 1 및 0의 할당을 디스에이블 한다. 캐시의, 웨이 1 및 0 외의 추가적인 웨이들은, 대응하는 개별 CSR에 따라, 특정 소스에 의한 할당에 대해 디스에이블될 수 있으나, 웨이 1 및 0 은 개별 CSR의 저장된 엔코딩된 값과 상관없이 디스에이블될 것이 보장된다. 또 다른 실시예에서, 전역 CSR을 사용하는 것보다 오히려, 특정 소스에 대한 각각의 개별적인 CSR이 웨이들 1 및 0을 디스에이블하기 위하여 그것의 내용을 수정했을 수 있다. 웨이 1 및 0에 저장된 정보는 나중의 필 트랜잭션에 의해 희생되는 것이 방지된다. 이러한 특정 웨이들(이 경우에는 웨이 1 및 0)은 전에 할당을 위하여 사용되었을 수 있다. 그러한 사용에 대한 보다 상세한 내용은 나중에 제공된다.
일 실시예에서, 프로세싱 노드(110) 내에서 캐시(118)를 위한 캐시 제어기는 특정 캐시 액세스 요청의 소스를 알고 있으며, 따라서, 캐시 제어기 및 대응하는 로직은 캐시 웨이-인에이블 및 웨이-디스에이블 제어를 위하여 어떤 CSR을 액세스할지를 인지한다. 일 실시예에서, 특정 소스에 대한 특정 CSR의 할당 및 특정 CSR의 저장 값은 시스템의 부트-업 중에 BIOS(basic input output software)에 의해 설정된다. 따라서, BIOS가 추후에 변경 또는 업데이트된다 하더라도, 상기 할당 및 값들은 한번만 설정되며, 이러한 설정은 보안 상의 이유로 인한 것이다. 또 다른 실시예에서, 디바이스 드라이버에 의해 동적으로 로딩되고 운영 시스템 업데이트 메커니즘들을 통해 투명하게(transparently) 업데이트된 펌웨어는, 만약 CSR의 할당 및 저장 값을 둘다 변경하는 것에 대해 허용되었다면, CSR의 할당 및 저장 값을 둘다 변경하는데 사용될 수 있다. 또 다른 실시예에서, 소프트웨어 프로그래머에게 특정 어플리케이션들에 대한 제어를 제공하는 것과 같이, CSR들의 할당 및 저장 값들을 프로그래밍 및 재-프로그래밍하기 위하여, 다른 소프트웨어 메커니즘들이 사용될 수 있다. 또한, 그러한 제어는 보안상의 이유로 제한될 수 있다.
하기의 표 2는 표 1에 도시된 엔코딩을 확장한다. 표 2와 관련하여, 일 실시예에서, 벡터[15:0]의 로직 '1'은 지정된 세트-어소시에이티브 캐시 내의 인에이블된 웨이를 정의할 수 있고, 로직 '0'은 디스에이블된 웨이를 정의할 수 있다.
테이블 엔트리 | 엔코딩 | 벡터[15:0] |
1 | 00000 | 0000 0000 0000 0011 |
2 | 00001 | 0000 0000 0000 1111 |
3 | 00010 | 0000 0000 0000 1100 |
4 | 00011 | 0000 0000 1111 1111 |
5 | 00100 | 0000 0000 0011 0000 |
6 | 00101 | 0000 0000 1111 0000 |
7 | 00110 | 0000 0000 1100 0000 |
8 | 00111 | 1111 1111 1111 1111 |
9 | 01000 | 0000 0011 0000 0000 |
10 | 01001 | 0000 1111 0000 0000 |
11 | 01010 | 0000 1100 0000 0000 |
12 | 01011 | 1111 1111 0000 0000 |
13 | 01100 | 0011 0000 0000 0000 |
14 | 01101 | 1111 0000 0000 0000 |
15 | 01110 | 1100 0000 0000 0000 |
16 | 01111 | Reserved |
17 | 10000 | 1111 1111 1111 1100 |
18 | 10001 | 1111 1111 1111 0000 |
19 | 10010 | 1111 1111 1111 0011 |
20 | 10011 | 1111 1111 0000 0000 |
21 | 10100 | 1111 1111 1100 1111 |
22 | 10101 | 1111 1111 0000 1111 |
23 | 10110 | 1111 1111 0011 1111 |
24 | 10111 | 0000 0000 0000 0000 |
25 | 11000 | 1111 1100 1111 1111 |
26 | 11001 | 1111 0000 1111 1111 |
27 | 11010 | 1111 0011 1111 1111 |
28 | 11011 | 0000 0000 1111 1111 |
29 | 11100 | 1100 1111 1111 1111 |
30 | 11101 | 0000 1111 1111 1111 |
31 | 11110 | 0011 1111 1111 1111 |
32 | 11111 | Reserved |
앞에서 언급된 바와 같이, 구성 및 상태 레지스터들(CSRs)은, 각각의 소스를 위한 공유 자원 내에서 할당 공간을 제어하기 위하여 표 1 또는 표 2에 도시된 값들과 같은 엔코딩된 값들을 저장하는데 사용될 수 있다. 예를 들어, 위에서 논의된 바와 같이, I/O 요청 소스는 16 웨이 세트-어소시에이티브 캐시 중, 예를 들어 캐시의 웨이 15 및 14 와 같은 단지 2개의 웨이들만을 할당하도록 프로그래밍될 수 있다. 이는 이 I/O 요청들에 대응하는 CSR을 5 비트 값 '0111'을 저장하도록 프로그래밍함으로써 달성될 수 있다. 모두 5 비트 값 '01110'에 대응하는, 표 1의 테이블 엔트리 4와 표 2의 테이블 엔트리 15는 웨이 15 및 14가 이 엔코딩에 대해 인에이블된다는 것을 보여준다. 위의 실시예의 그러한 엔코딩은 I/O 요청들이 공유 캐시 내의 저장소의 1/8 이상을 할당하는 것을 허용하지 않을 수 있다.
세트-어소시에이티브 캐시와 같은 공유 자원의 할당을 위하여 메모리 요청의 소스를 이용하는 것에 부가하여, 메모리 요청 타입이 또한 이용될 수 있다. 메모리 요청이 공유 캐시의 특정 웨이의 대응 캐시 라인을 할당하는 것이 허용되지 않는지를 결정하기 위하여, 메모리 요청 타입이 캐시 제어기 내의 제어 로직과 같은 로직에 의해 이용될 수 있다. 오피코드에서 엔코딩될 수 있는 메모리 요청의 타입 및 CSR에 저장된 값은 모두, 캐시 미스로부터 기인된 캐시 필 트랜잭션 동안에 캐시 라인을 할당할지 여부 및 대응 세트의 어떤 웨이에 캐시 필 라인이 할당되는지 둘 모두를 결정하기 위하여 제어 로직에 의해 이용될 수 있다. 추가의 세부사항들이 간락히 제공된다. 일반적으로, 캐시를 히트하는 판독 요청에 대해, 대응하는 캐시 라인의 데이터 부분은 수정되지 않는다. 그러나, 코히어런시 상태, LRU 정보 등과 같은 상태 정보는 갱신될 수 있다. 캐시를 미스하는 판독 요청에 대하여, 대응하는 요청된 캐시 라인의 데이터 부분은, 상태 정보가 업데이트될 수 있다하더라도, 수정되지 않는다. 미싱 대응 캐시 라인은 메모리 계층구조의 하위 레벨로부터 페치되었을 수 있다. 이 대응하는 캐시 라인은 소정의 캐시 라인 필 요구사항들에 따라 공유 캐시 내에 저장 또는 할당되거나, 저장 또는 할당되지 않을 수 있다.
또한, 일반적으로, 캐시를 히트하는 기록 요청에 대해, 캐시 코히어런시, 소유권 상태 등과 같은 다른 요구조건들이 만족되면 대응하는 캐시 라인의 데이터 부분이 수정된다. 또한, 대응하는 상태 정보에 대해 업데이트가 발생할 수 있다. 공유 캐시를 미싱하는 기록 요청은, 다른 요구조건들이 만족되면, 페치된 캐시 필 라인의 데이터 부분이 수정될 수 있게 해준다. 판독 요청 미스와 유사하게, 기록 미스에 대하여 대응하는 캐시 라인이 메모리 계층구조의 하위 레벨로부터 페치되었을 수 있다. 이 대응하는 캐시 라인은 소정의 캐시 라인 필 요구조건들에 따라 공유 캐시에 저장 또는 할당되거나, 저장 또는 할당되지 않을 수 있다.
캐시 라인 필 요구조건을 결정하는 제어 로직은, 표 1 및 2에 도시된 예와 같은 소스에 근거한 엔코딩 정보에 부가하여, 유입 메모리 요청(incoming memory request)의 명령 타입을 이용할 수 있다. 공유가능 캐시는 복수의 서로 다른 요청 타입들을 지원할 수 있다. 공유가능 캐시에 의해 지원되는 메모리 요청들의 몇가지 예가 표 3에 도시된다.
요청 오피코드 기호 (Request Opcode Mneumonic) |
소스 | 의미 |
RDBLKM | 코어 | 라인을 홀딩하고 있는 다른 캐시 에이전트들을 무효화한 후 이 라인을 수정하고자하는 판독 요청을 의미하는 프로세서 코어 저장 오퍼레이션과 관련된 필 요청 |
RDBLK | 코어 | 시스템 내에서 라인을 홀딩하는 다른 캐시 에이전트들이 없음에 따라 요청 코어가 "E" 또는 "독점(Exclusive)" 상태의 캐시 라인을 수신할 경우에만 변경 또는 수정 없이 상기 라인을 사용하고자 하는 판독 요청을 의미하는 프로세서 코어 로드 오퍼레이션과 관련된 필 요청 |
RDBLKS | 코어 | 수정의 의도가 없는 판독 요청을 의미하는 프로세서 코어 명령 캐시 미스와 관련된 필 요청 |
CH2DIRTY | 코어 | 코어가 캐시 라인의 공유된 사본을 가지며 시스템 내의 다른 공유된 사본들을 무효화한 후 상기 라인을 수정하기를 원한다는 것을 나타내는 더티 요청으로의 변경 |
CLVICBLK | 코어 | 소정의 계층구조 레벨 아래의 캐시들에 대해 코어 캐시들로부터 클린 라인을 퇴거(eviction). 이 요청은 공유가능 캐시를 위한 정확한 상태를 유지하기 위한 북 키핑 트랜잭션(book keeping transaction)으로서 사용될 수 있다. |
WRVICBLK | 코어 | 코어 캐시로부터 더티 캐시 라인의 퇴거. 이는 메모리 시스템에 대한 기록 요청을 나타낸다. |
RDSZ | I/O 디바이스, 코어 | 주어진 캐시 라인 내에서 다양한 더블 워드 양(double word quantities)과 같은 메모리의 코히어런트 사이즈 판독(coherent sized read) |
WRSZ | I/O 디바이스, 코어 | 주어진 캐시 라인 내에서 다양한 더블 워드 양(double word quantities)과 같은 메모리의 코히어런트 사이즈 판독(coherent sized read) |
소스와 메모리 요청 타입의 조합은 사용자들에게 캐시 라인의 데이터 부분(들), 및 이와 동시에, 대응하는 상태 정보가 할당되는 조건들을 프로그래밍하는 것에 대한 유연성을 제공할 수 있다. 주어진 요청 소스로부터 소정 타입의 요청만이 캐시로의 할당에 대해 고려될 수 있다. 일 실시예에서, 표 2에 도시된 엔코딩과 유사한 엔코딩을 사용하여 각각의 소스로부터의 각각의 명령 타입에 대해 시스템 내에 하나 이상의 CRS들을 부가하는 것에 의해 프로그램가능성이 제공될 수 있다. 이 프로그램가능성은 캐시 제어기에 의하여 트랜잭션 기반(per transaction basis)으로 시행될 수 있다. 할당에 대해 프로그래밍되지 않은 요청들은 캐시 미스 동안에 캐시 내에 할당하지 않는다.
또 다른 실시예에서, 표 2의 엔코딩과 유사한 엔코딩을 사용하여 메모리 요청의 각각의 소스에 대해 시스템 내에 하나 이상의 CRS들을 부가하는 것에 의해 프로그램가능성이 제공될 수 있다. 캐시 미스로 인한 캐시 필 이벤트의 경우, 캐시 필 라인이 캐시 내에 할당하고 그리고 가능하게는 동일 세트의 캐시 내에서 또 다른 캐시 라인의 퇴거를 야기하는지 여부를 결정하기 위하여, 캐시 제어기 내의 로직에 의해 메모리 요청의 오피코드 또는 명령 타입이 사용될 수 있다. 표 2의 예와 같은 소스에 근거한 테이블 엔코딩 값이 세트의 어떤 웨이가 할당되는지를 제한할 수 있지만, 이 엔코딩 값은 그러한 할당이 발생할 수 있게 해준다. 그러나, 명령 타입이 이러헌 허용에 우선하여 할당을 방지할 수 있다. 또 다른 실시예에서, 소정의 값을 저장하는 CSR이 각각의 소스에 대해 앞에서 설명된 것과 같이 존재할 수 있으나, 하나 이상의 CSR들 내의 값들은 유입 명령 타입으로 인하여 변경될 수 있다. 소정의 값들에 대한 변경은 보안 제약(security restriction)이 상기 변경이 발생되는 것을 허용하는 경우에만 허용될 수 있다. 예를 들어, CSR 값들은 일반적인 소프트웨어 애플리케이션의 실행에 근거하여 변경되도록 허용되지 않을 수 있다.
이러한 부가된 특징은 매우 유용한데, 그 이유는 사용자가 어떤 타입의 요청이 캐시 내로의 할당이 허용되는지를 선택할 수 있기 때문이다. 예를 들어, CLVICBLK 메모리 요청이 캐시 내에서 미싱될 때, 클린 빅팀들(clean victims)은 더 나은 프로브 필터링 결과들을 위해서만 트래킹될 필요가 있으므로, 이 라인을 캐시 내에 할당하지 않는 것이 유익할 수 있다. 또한, 특정 I/O 디바이스(160)에 대해, 이 디바이스에 대한 데이터는 거의 사용되지 않으며, 공유가능한 캐시 내에서 미싱되는 이 특정 I/O 디바이스(160)로부터의 판독 및 기록 메모리 요청들이 프로세서 코어에 대한 유용한 데이터의 퇴거를 야기할 수 있다. 그러한 상황에서, 공유가능 캐시의 상당한 부분(significant portion)이 다시 사용되지 않을 데이터를 저장할 수 있고 반면 유용한 정보는 퇴거된다. 따라서, 시스템 성능이 나빠질 수 있다. 표 1-3에 기술된 그리고 캐시 제어기 내의 로직에 의해 실시되는 프로그램 가능성은 그러한 상황을 방지하고 시스템 성능을 향상시키는 것을 도울 수 있다.
또한, 일 실시예에서, 시스템 구조는 대응하는 패킷들과 같은 메모리 요청들에 포함될 소정의 힌트 비트들의 추가 및 사용을 지원할 수 있다. 이 힌트 정보는 오피코드와 인접하여 위치되거나 메모리 요청 명령 또는 패킷 내의 어딘가에 위치되는 비트들일 수 있다. 오피코드 또는 명령 타입 정보와 유사하게, 캐시 제어기 내의 로직은, 예를 들어, 캐시 미스로부터 기인한 필 이벤트 동안에, 대응하는 메모리 요청이 공유가능한 캐시 내에 할당하는 것이 허용되는지 여부를 결정하기 위하여 이 힌트 비트들을 사용할 수 있다.
일 실시예에서, 이 힌트 비트들은, 오피코드에 의해 공급되는 메모리 요청 타입에 부가하여 사용되기보다는, 단독으로 사용될 수 있다. 또다른 실시예에서, 이 힌트 비트들은 그러한 결정을 내리기 위하여 오피코드와 함께 사용될 수 있다. 예를 들어, 힌트 비트들의 제1 값은 결정을 위하여 오피코드가 단독으로 사용되어야함을 나타낼 수 있다. 힌트 비트들의 제2 값은 오피코드 값이 바이패스되고 결정을 위하여 힌트 비트들만이 사용됨을 나타낼 수 있다. 제3 값은 결정을 위하여 힌트 비트들 및 오피코드 값 모두가 고려될 필요가 있음을 나타낼 수 있다. 상태 다이어그램에서 사용될 수 있는 다른 조합들이 가능하고 고려된다.
앞에서 설명된 바와 같이, 일 실시예에서, 표 2의 예와 같은 소스에 근거한 테이블 엔코딩 값은 필 이벤트가 공유 캐시 내에 할당하는 것을 허용할 수 있으나, 힌트 비트들, 또는 힌트 비트들과 명령 타입의 조합이 이 허용에 우선하고 상기 할당을 금지할 수 있다. 또 다른 실시예에서, 소정의 값들의 변경은, 보안 제약이 상기 변경을 허용하는 경우에만 허용될 수 있다. 또한, CSR 값들은, 일반적인 사용자에 의해 기록되는 일반적인 소프트웨어 애플리케이션의 실행에 근거하여 변경되는 것이 허용되지 않을 수 있다.
힌트 비트들에 의해 공급되는 트랜잭션-기반-표시(per-transaction-based-indication)는 특정 트랜잭션에 속한 데이터가 재사용될것 같지 않은 상황들에서 유용할 수 있으며, 따라서, 메모리 요청 명령 타입이 캐시 수정가능(cache modifiable)일 수 있지만, 표 2와 같은 소정의 테이블에 따라 미스 후에 이 데이터를 캐시에 할당하는 필 메커니즘이 없다. 일 실시예에서, 이 피쳐는 I/O 디바이스(160)와 같은 I/O 요청 소스에 대해 널리 사용될 수 있다. 그러한 메커니즘은 캐시의 오염을 방지해줄 수 있다.
도 4는 공유 자원에 데이터 내에 데이터를 효율적으로 할당하는 방법(400)을 도시한다. 방법(400)은 대안적인 실시예들을 도출해 내기 위하여 본 기술분야의 통상의 기술자에 의해 변경될 수 있다. 또한, 이 실시예의 단계들은 순차적인 순서로 도시되었다. 그러나, 일부 단계들이 도시된것과 다른 수서로 발생할 수 있고, 일부 단계들은 동시에 수행될 수 있으며, 일부 단계들은 다른 단계들과 결합될 수 있고, 일부 단계들은 또 다른 실시예에서는 생략될 수 있다. 도시된 실시예에서, 인커밍 동작들에 의한 할당에 대해 공유 자원의 어느 서브포션들이 인에이블 또는 디스에이블되는지를 결정하기 위하여 사용된 초기 어사인먼트들(initial asignments)이 블록(402)에 설정된다. 예를 들어, 표2와 같은 표에 정의된 초기 엔코딩 값들은 적절한 CSR들에 저장될 수 있다.
하나 이상의 컴퓨터 프로그램들, 또는 소프트웨어 애플리케이션들이 블록(404)에서 실행된다. 이 애플리케이션들은 하나 이상의 프로세서 코어들(112), 그래픽 프로세싱 유닛들(GPU들)(170), I/O 디바이스들(160) 등에 의해 실행될 수 있다. 소프트웨어 애플리케이션들을 실행하는 이 엔티티들은 각각 데이터 캐시와 같은 공유가능한 자원을 액세스할 수 있다. 일 실시예에서, 공유가능 자원은 도 2의 공유 캐시 메모리 서브시스템(118)과 같은 공유가능한 L2 또는 L3 캐시일 수 있다. 프로세서 코어들(112)에 의한 공유 캐시의 액세스 또는 메모리 요청들은 GPU(170) 또는 I/O 디바이스들(160)과 같은 다른 소스들로부터 기인하는 액세스들보다 시스템 성능에 더 큰 영향을 미칠 수 있다.
메모리 요청이 공유 캐시(조건 블록(406))에 제공될 때, 공유 캐시의 대응 세트 내에서 할당에 대한 허용가능한 웨이들에 대한 결정이 블록(408)에서 수행된다. 메모리 요청의 소스는 알려져 있고 대응하는 CSR을 액세스하는데 사용될 수 있으며, 상기 CSR의 저장 값은 대응하는 세트 내에서 허용가능한 웨이들의 집합(collection)을 결정한다. 다른 실시예들에서, 메모리 요청 타입 및/또는 힌트 비트들이 또한 표 3과 관련하여 앞에서 설명된 것과 같은 허용가능한 웨이들의 집합을 결정하기 위해 사용될 수 있다.
메모리 요청이 캐시를 미스하고, 따라서 정확한 라인이 하위 레벨 메모리로부터 검색될 것이 요구된다면(조건 블록(410)), 필 라인이 공유 캐시 내에 할당되는 것이 허용되는지 여부에 대한 결정이 수행된다. 이 결정은 소스, 오피코드에 의해 결정될 수 있는 명령 타입, 명령 또는 패킷에 포함된 힌트 비트들, 이러한 인자들의 조합 등에 의해 결정될 수 있다.
메모리 요청이 공유 캐시에 할당하는 것이 허용되지 않는다는 것이 결정되면(조건 블록(414)), 검색된 필 라인의 내용의 판독 또는 기록하는 것과 같은 메모리 요청의 동작이 블록(416)에서 진행되고, 그리고 추가적으로, 필 라인이 공유 캐시 내에 위치되지 않는다. 공유 캐시 내에 배치(placement)된 동안, CSR들의 내용은 어떤 캐시 웨이가 수정되도록 허용가능한지를 결정할 수 있다. 예를 들어, 코어(112a)는 웨이들 15 내지 8과 같은 캐시의 절반을 수정 또는 할당하도록 허용될 수 있다. 그러나, I/O 디바이스(160)는 웨이 5 및 4와 같은 캐시의 1/8만을 수정 또는 할당하도록 허용될 수 있다. 이미 풀(full)인 세트에 대해, 할당 프로세스 동안 LRU 기법에 근거한 캐시 라인의 축출이 발생할 수 있다. 또한, 세트가 풀이 아니고, 그러나 위의 예에서 I/O 디바이스(160)에 대한 웨이들(5 및 4)과 같은, 특정 소스에 대한 세트의 모든 허용가능한 웨이들 전체가 풀이면, LRU 또는 다른 기법에 근거한 캐시 라인이 할당 프로세스 동안 발생할 수 있다.
위의 방법들은 또한 캐시의 어떤 지정된 라인들을 로딩 및 로킹하거나 퇴거로부터 방지하기 위하여 사용될 수 있다. 이 로킹된 라인들은 전체 소스들에 의한 할당이 디스에이블될 수 있다. 이 로킹된 라인들은 의사-랜덤-액세스-메모리(RAM)로서 사용될 수 있다. 그러한 메커니즘은, 시스템 부트-업 동안 캐시의 섹션들을 로딩 및 로킹하기 위하여 후속적으로 기본 입력 출력 소프트웨어(BIOS)를 인에이블하는데 사용될 수 있다. 예를 들어, 그러한 메커니즘은, 시스템 내의 동적-랜덤-액세스-메모리(DRAM)가 아직 초기화되지 않았을 때 일반적인 저장(general storage)을 위하여, BIOS가 공유 캐시(118) 등과 같은 캐시를 사용하는 것을 허용하는데 사용될 수 있다. 이 피쳐는 시스템 부트-업을에 요구되는 시간양을 감소시킬 수 있다.
BIOS는 이제, 이 로킹된 라인들이 다른 소스들에 의해 퇴거됨이 없이, 캐시 내의 특정 세그먼트들을 사용할 수 있다. 예를 들어, 그러한 캐시-웨이-로킹 기법은 시스템이, 프로그램가능 판독 전용 메모리(PROM) 이미지와 같은 I/O 스페이스로부터의 부트 코드의 판독 동작과 같은 캐시에 대한 다른 필 요청들을 캐시에 대해 수행할 때, BIOS가 데이터를 저장하는 라인들이 퇴거되지 않을 것임을 보장해줄 수 있다.
이제 도 5로 돌아가면, 효율적인 캐시 라인 로킹 메커니즘을 위한 방법이 도시된다. 방법(500)은 본 기술분야의 통상의 기술자에 의해 수정될 수 있다. 또한, 이 실시예의 단계들은 순차적인 순서로 도시된다. 그러나, 일부 단계들은 도시된 것과 다른 순서로 발생할 수 있고, 일부 단계들은 동시에 수행될 수 있고, 일부 단계들은 다른 단계들과 결합할 수 있으며, 일부 단계들은 또 다른 실시예에서는 생략될 수 있다. 도시된 실시예에서, 컴퓨팅 시스템을 위한 셋업 소프트웨어가 블록(502)에서 실행된다.
블록(504)에서, 시스템 내의 하나 이상의 CSR들은 공유 캐시 내의 특정 웨이들을 할당하는 것에 대한 허용(permission)을 나타내는 값들을 저장하도록 프로그래밍될 수 있다. 예를 들어, 엔코딩 값 "00000"에 대응하는 표 2의 테이블 엔트리 1은 16 웨이 세트 어소시에이티브 공유 캐시의 웨이들 1 및 0으로의 할당을 허용하는데 사용될 수 있다. 공유 캐시의 전체 사이즈의 1/8의 영역 사이즈가 이러한 방식으로 매핑되고 의사-RAM으로서 사용될 수 있다.
다음으로, 블록(506)에서, BIOS와 같은 셋업 소프트웨어는 동일한 사이즈를 가진 의사-RAM 내에서의 위치 및 공유 캐시의 캐시 라인의 정렬(alignment)을 초기화할 수 있다. 이러한 초기화를 수행하기 위하여, BIOS는 캐시 라인을 더 초기화될 후기입(write-back) DRAM에 매핑할 수 있고, 이 캐시 라인 위치의 적어도 1 바이트에 대해 로드, 또는 판독 동작을 발행할 수 있다. 이 로드의 일부로서 발행되는 결과적인 필 트랜잭션은 DRAM을 초기화하지 않은 디스에이블된 메모리 제어기로 송신될 수 있다. 메모리 제어기는 전체 로직 0들의 데이터 값을 리턴하고 계류중인 필 요청을 완료할 수 있다. 이 데이터는 그후 공유 캐시에 할당된다. BIOS는 나중에 그것이 공유 캐시에 할당된 후에야 이 캐시 라인에 대해 저장, 또는 기록 동작을 수행할 수 있다.
초기화된 허용가능한 웨이에 대응하는 초기화되지 않은 최종 캐시 라인(last un-initizlized cache line)과 같은 공유 캐시의 말단(end)에 도달되지 않았으면(조건 블록(508)), 방법(500)의 제어 흐름은 블록(506)으로 돌아간다. 그렇지 않다면, 공유 캐시의 또 다른 허용가능한 웨이가 유사한 방식으로 초기화될 수 있다(조건 블록(510)). 공유 캐시의 모든 허용가능한 웨이들이 이미 초기화되었다면(조건 블록(510)), 블록(512)에서, BIOS와 같은 셋업 소프트웨어가 요구되는 정보를 이 초기화된 영역들에 저장할 수 있다. 블록(514)에서, 이러한 수정된 라인들은 앞서서 할당을 위해 사용되었던 것과 동일한 웨이들에 대해 할당을 디스에이블함으로써 공유 캐시에 로킹될 수 있다. 예를 들어, 웨이 1 및 0은 이제, 대응하는 CSR을 표 2의 테이블 엔트리(17)에 저장된 값 "10000"을 보유하도록 설정함으로써 할당에 대해 디스에이블될 수 있다. 이제 웨이 1 및 0이 다른 소스들에 의해 할당되는 것이 방지되거나 보다 최근의 트랜잭션들(yonger fill transaction)에 의해 퇴거된다.
추가적으로, 할당을 위한 위의 방법들은 캐시가 동작하고 있는 동안 캐시의 사이즈를 점차적으로 감소시킴으로써 캐시의 일부분 또는 전체를 파워-다운 상태에 두는데 사용될 수 있다. 다른 섹션들을 기능적으로 유지하면서 시스템 레벨 전력 관리가 캐시의 섹션들에 대해 턴 오프(turn off)하거나 게이트 전력 제어(gate power)하는 것이 바람직할 수 있다. 그렇지 않다면, 특정 섹션들이 파워 다운되고 에일리어싱 문제들을 피하기 위하여 캐시 라인들의 퇴거 및 리로딩이 발생하는 한편, 캐시가 모든 기능을 중단함에 따라 시스템 성능을 감소시키는 레이턴시(latency)가 발생될 수 있다. 캐시가 계속 동작하는 동안 파워 다운 메커니즘을 통해 점진적으로 캐시의 사이즈를 줄이는 것은 서로 다른 성능 및 전력 소비(power dissipation) 특성을 가진 몇개의 중간 캐시 슬립 상태들(intermediate cache sleep states)을 생성한다. 시스템 전력 관리 하드웨어 모니터링 동안, 캐시는 애플리케이션 성능과 배터리 라이프 사이에서의 트레이드-오프를 위하여 이러한 서로 다른 상태들을 사용할 수 있다. 또한, 그러한 파워 다운 시퀀스가 제조 결함을 겪는 캐시에 대해 사용될 수 있다. 그러한 캐시는 다운-빈드(down-binned)되거나, 반으로 절단되어, 저가에 판매될 수 있다.
표 1 및 표 2에 특정된 값들과 같은 프로그램가능 엔코딩 값들을 통해 세트-어소시에이티브 캐시 내에 특정 웨이들의 할당을 인에이블 및 디스에이블하는 것은 캐시가 계속 동작하고 있는 동안 캐시의 사이즈를 점진적으로 줄이고 결과적으로 전체 캐시를 셧다운(shut down)시키는데 사용될 수 있다. 예를 들어, 16-웨이 세트-어소시에이티브 캐시 내의 모든 웨이들이 할당에 대해 인에이블되는 위의 표 2의 테이블 엔트리 8과 같은 "00111"의 엔코딩 값으로부터, "10000"(14 웨이들을 인에이블하는 테이블 엔트리 17), "10001"(12 웨이들을 인에이블하는 테이블 엔트리 18), "01011"(8 웨이들을 인에이블하는 테이블 엔트리 12), "01101"(4 웨이들을 인에이블하는 테이블 엔트리 14), "01110"(2 웨이들을 인에이블하는 테이블 엔트리 15), 그리고 마지막으로 "10111"(모든 웨이들을 디스에이블하는 테이블 엔트리 24)와 같은 캐시 사이즈를 지속적으로 감소시키는 다른 엔코딩 값들로 점진적으로 천이하는 것이 가능할 수 있다.
위의 진행은 단일 비트에 의해 대응 어드레스의 인덱스 부분을 줄임으로써 직접 캐시를 이등분하는 것보다 효율적일 수 있다. 또한, 어드레스의 인덱스 부분을 줄임으로써 캐시를 이등분하는 것은 보통 전력-다운된 캐시의 절반에 있는 다른 어드레스들을 대신에 전력-업, 다운-사이즈된 캐시에 놓을 수 있다. 그러한 시나리오는 나중에 캐시가 사이즈를 다시 증가시킬 필요가 있음이 결정될 때 이 어드레스들을 퇴거시키는 추가적인 작업을 생성한다.
이제 도 6을 참조로, 효율적인 캐시 섹터 전력-다운 시퀀스의 방법이 도시된다. 대안적인 실시예들을 유도하기 위하여, 방법 400 및 500과 마찬가지로, 방법 600과 같은 추가적인 방법들이 통상의 기술자에 의해 수정될 수 있다. 또한, 이 실시예의 단계들은 순차적인 순서로 도시된다. 그러나, 일부 단계들은 도시된 것과 다른 순서로 발생할 수 있고, 일부 단계들은 동시에 수행될 수 있고, 일부 단계들은 다른 단계들과 결합될 수 있으며, 그리고 일부 단계들은 또 다른 실시예에서는 생략될 수 있다. 도시된 실시예에서, 공유 자원의 어느 서브-포션들이 유입 오퍼레이션들에 의한 할당을 위해 인에이블 또는 디스에이블되는지를 결정하기 위하여 사용되는 초기 어사인먼트들이 블록(602)에서 설정된다. 예를 들어, 표 2와 같은 표에 정의된 엔코딩 값들이 적절한 CSR들에 저장될 수 있다.
하나 이상의 컴퓨터 프로그램들, 또는 소프트웨어 애플리케이션들이 블록(604)에서 실행된다. 이 애플리케이션들은 하나 이상의 프로세서 코어들(112), 그래픽 프로세싱 유닛들(GPU들)(170), I/O 디바이스들(160) 등에 의해 실행될 수 있다. 소프트웨어 애플리케이션들을 실행하는 이 엔티티들 각각은 데이터 캐시와 같은 공유가능한 자원을 액세스한다. 일 실시예에서, 공유가능한 자원은 도 2의 공유 캐시 메모리 서브시스템(118)과 같은 공유가능한 L2 또는 L3 캐시일 수 있다. 프로세서 코어들(112)에 의한 공유 캐시의 액세스, 또는 메모리 요청들은 GPU(170) 또는 I/O 디바이스들(160)과 같은 다른 소스들로부터 기인하는 액세스들보다 시스템 성능에 더 큰 영향을 줄 수 있다.
전력-다운 조건이 존재하는 것이 결정될 때(조건 블록(606)), 표 2와 같은 표에 정의된 초기 엔코딩 값들과 같은 하나 이상의 CSR들에 저장된 값들이 블록(608)에서 변경될 수 있다. 프로세싱 시스템의 내부 또는 외부로부터 캐시 제어기로의 유입 신호들이 특정한 캐시 섹터들이 전력-다운되어야함을 나타낼 때, 전력-다운 조건이 존재할 수 있다. 일 실시예에서, 캐시 제어기는 프로세싱 시스템 내의 공유 캐시에 대응한다. 그러한 표시자들을 제공하기 위하여 몇개의 전력-다운 메커니즘들이 통상의 기술자들에 의해 사용될 수 있다.
캐시 제어기 또는 다른 로직으로 유입되는 전력-다운 표시들은 CSR들에 의해 저장된 엔코딩 값들이 점진적으로 천이되는 방식을 결정하기 위하여 사용될 수 있다. 영향을 받은(affected) CSR들은, 특정 소스들을 위한 개별 CSR들, 전체 캐시에 대응하는 단일 마스터 CSR, 그것들의 조합 등을 포함할 수 있다. 일 실시예에서, 캐시 제어기는 웨이 마스킹을 통해 할당을 위한 캐시의 특정 섹터들을 디스에이블하기 위하여 현재 저장된 엔코딩 값들을 변경한다. 일 실시예에서, 전체 캐시를 위한 단일의 마스터 CSR이 존재할 수 있다. 특정 소스에 대해, 메모리 요청 할당을 위해 사용되는 캐시의 허용가능한 웨이들이, 마스터 CSR 및 소스-특정 CSR 저장 값들을 입력들로서 사용하여 로직에 의해 결정될 수 있다. 전력-다운 또는 전력-업 시퀀스들에서, 단일 마스터 CSR은 각각의 소스를 위해 각각의 CSR에 대해서만 수정될 수 있다. 그러므로, 위에서 설명된 것과 같은 단일의 트랜지션(예를 들어, "00111" 에서 "10000"로, "10000"에서 "10001"로 등)이 사용될 수 있다. 또 다른 실시예에서, 시스템 내에서 각각의 CSR에 대해 개별적인 트랜지션이 사용될 수 있다.
블록(610)에서, 캐시 제어기는, 각각의 가능한 인덱스를 하나씩 액세스하거나 또는 지원 회로가 존재한다면 복수의 인덱스들 및 대응하는 세트들을 한번에 액세스하는 것과 같이 캐시의 세트들을 거쳐 이행(transition)하고, 디스에이블된 캐시 웨이들의 내용을 플러시한다. 이 단계 동안 캐시 자체는 아직 기능적이고 메모리 요청들이 여전히 처리된다.
일 실시예에서, 플러시가 완료될 때, 캐시 제어기는 블록(612)에서 전체 캐시애 대한 메모리 요청들의 처리를 블로킹한다. 또 다른 실시예에서, 플러시가 완료될 때, 캐시 제어기는 블록(612)에서 캐시의 디스에이블된 캐시 웨이들에 대한 메모리 요청들의 처리만을 블로킹한다. 그러므로, 메모리 요청 액세스들이 디스에이블된 웨이들에 대해서만 선택적으로 블로킹되거나 메모리 요청 액세스들이 전체 캐시에 대해 블로킹될 수 있다. 그 다음으로, 블록(614)에서, 캐시 제어기는 전력-다운 통신을 캐시 어레이에 전송한다. 예를 들어, 웨이 마스킹을 통해 캐시의 타겟 섹터를 전력-다운하기 위하여 캐시 제어기로부터 캐시 어레이로 명령이 발행될 수 있다. 전력-다운 프로세스는 몇개의 클럭 사이클들을 필요로할 수 있으며, 이는 전력-다운 요청시에 알려지거나 알려지지 않았을 수 있다. 캐시 어레이의 파워 다운이 완료되었다는 표시가 제공될때(조건 블록(616)), 캐시 제어기는 블록(618)에서 캐시를 액세스하라는 메모리 요청을 리-인에이블한다. 이 단계는 전체 캐시에 대한 액세스를 다시-인에이블할 수 있다. 전에 디스에이블된 캐시 웨이들에 대한 메모리 요청들만이 액세스가 금지되었다면 이 단계는 스킵될 수 있다. 방법(600)의 제어 흐름은 이제 컴퓨터 프로그램의 실행 중에 인에이블된 캐시 웨이들만이 액세스되는 블록(604)로 돌아간다.
이제 도 7을 참조로, 효율적인 캐시 섹터 파워-업 시퀀스를 위한 방법이 도시된다. 하나 이상의 컴퓨터 프로그램들, 또는 소프트웨어 애플리케이션들이 블록(702)에서 실행된다. 이 애플리케이션들은 하나 이상의 프로세서 코어들(112), 그래픽 프로세싱 유닛들(GPU들)(170), I/O 디바이스들(160) 등에 의해 실행될 수 있다. 소프트웨어 애플리케이션들을 실행하는 이 엔티티들은 각각 데이터 캐시와 같은 공유가능 자원을 액세스할 수 있다. 이 공유 캐시는 방법(600)과 유사한 방법에 의해 전에 파워 다운된 특정한 섹터들, 또는 부분들을 가질 수 있다.
대응하는 로직에 의해서와 같은 파워-업 조건이 존재하는 것으로 결정될 때, 또는 파워-업 통보가 수신될 때(조건 블록(704)), 일 실시예에서, 캐시 제어기는 블록(706)에서 전체 캐시에 대한 메모리 요청들의 처리를 블로킹한다. 또다른 실시예에서, 파워-업 조건이 존재하는 것으로 결정될 때, 캐시 제어기는 단지, 캐시의 디스에이블된(전에 파워-다운된) 캐시 웨이들에 대한 메모리 요청들의 처리만을 계속 블로킹 한다. 그러므로, 메모리 요청 액세스는 디스에이블된 웨이들에 대해서만 선택적으로 블로킹되거나, 메모리 요청 액세스들이 전체 캐시에 대해 블로킹될 수 있다. 일 실시예에서, 파워-업될 캐시 섹터들은 모두 캐시의 디스에이블된(전에 파워-다운된) 캐시 웨이들일 수 있다. 그러므로, 메모리 요청 액세스들은 디스에이블된 웨이들에 대해서만 계속해서 선택적으로 블로킹되거나 메모리 요청 액세스들이 전체 캐시에 대해 블로킹될 수 있다. 일 실시예에서, 파워-업될 캐시 섹터들은 캐시의 디스에이블된(전에 파워-다운된) 캐시 웨이들일 수 있다. 또 다른 실시예에서, 특정 소스들에 대한 개별 CSR들, 전체 캐시에 대응하는 단일의 마스터 CSR, 그것들의 조합 등에 저장된 엔코딩 값들에 의해, 파워-업될 캐시 섹터들이 결정될 수 있다.
그 다음에, 블록(708)에서, 캐시 제어기는 캐시 어레이에 파워-업 통신을 전송한다. 예를 들어, 캐시의 타겟 섹터, 또는 부분들을 파워-업 하기 위하여 캐시 제어기로부터 캐시 어레이로 명령이 발행될 수 있다. 타겟 섹터는 하나 이상의 CSR들에 저장된 엔코딩 값들에 의해 결정될 수 있다. 파워-업 프로세스는 파워-업 요청시 알려지거나 알려져 있지 않을 수 있는 몇개의 클럭 사이클들을 필요로 할 수 있다. 이 실시예에서, 캐시 어레이는 웨이크업 트랜지스터들을 사용하여 새로운 섹터의 노드들 및 배선 경로들을 풀 로직(full logic) 0 및 1 값들로 드라이브한다. 이 단계가 완료되면, 어레이는 풀-파워 트랜지스터들을 턴온한다. 그후, 내부 블로킹 비트들이 설정되는 내부 초기화가 수행된다.
캐시 어레이의 파워-업이 완료된다는 표시가 제공될 때(조건 블록(710)), 전체 캐시에 대한 액세스가 이전에 디스에이블되었다면, 블록(712)에서 캐시 제어기는 캐시에 액세스하라는 메모리 요청들을 다시 인에이블한다. 그러나, 동시에, 캐시 제어기는, 메모리 요청들이 최근에 파워 온된 섹터를 액세싱하는 것을 방지하기 위하여 캐시 웨이 마스킹을 사용할 수 있다. 또 다른 실시예에서, 캐시는 최근에 파워온된 섹터가 비활성임을 나타내는 상태 정보를 업데이트할 수 있다. 대안적인 실시예에서, 메모리 요청들이 최근에 파워온된 캐시 섹터들을 액세스하는 것을 금지하기 위하여 웨이 마스킹 및 상태 정보가 둘다 사용될 수 있으며, 한편 전에 파워온된 섹터들에 대한 액세스들이 재개된다.
블록(714)에서, 최근에 파워온된 섹터들, 또는 캐시 웨이들과 관련하여, 상태 정보가 초기화되고 캐시 체크들이 다시 인에이블(re-enable)된다. 일 실시예에서, 캐시 제어기는 다이렉트-웨이 액세스들을 통해 최근에 파워-온된 캐시 웨이들을 시퀀싱(sequence through)하기 위하여 상태 머신을 사용한다. 또한, 히트 및 패리티 체크 로직이 다시 인에이블된다. 초기 캐시 코히어런스 프로토콜 상태는 무효 상태로 설정될 수 있다. 또한, 이 단계와 병렬로, 메모리 요청들에 의한 캐시의 다른 섹터들로의 액세스들이 발생한다.
블록(714)에서 단계들의 완료에 따라, 캐시 어레이가 캐시 제어기에 대응하는 표시를 송신할 수 있다. 그 후, 블록(716)에서, 최근에 파워온된 섹터에 대해 캐시 웨이 마스킹이 인에이블되므로, 표 2와 같은 표에 정의된 초기 엔코딩 값들과 같은 하나 이상의 CSR들에 저장된 값들이 블록(716)에서 변경되거나 재프로그램될 수 있다. 최근에 파워온된 캐시 웨이들에 대한 초기 액세스들은 캐시 미스를 겪을 수 있고, 그리고 적어도 부분적으로 하나 이상의 CSR들에 저장된 엔코딩된 값들에 근거하여 후속적인 할당이 결정될 수 있다. 최근에 파워온된 캐시 웨이에 대해, 초기 캐시 미스는 무효 데이터(initial data)의 퇴거를 필요로하지 않을 수 있다.
위의 실시예들이 상당히 자세히 기술되었지만, 본 기술분야의 통상의 기술자에게는 위의 개시가 완전히 이해됨에 따라 다양한 변형 및 수정이 자명할 것이다. 하기의 청구항들은 그러한 모든 변형 및 수정을 포괄하는 것으로 해석되도록 의도된 것이다.
Claims (21)
- 컴퓨팅 시스템으로서,
메모리 요청들을 발생시키도록 되어있는 제1 소스와;
메모리 요청들을 발생시키도록 되어있으며 상기 제1 소스와는 다른 제2 소스와;
하나 이상의 엔트리들 중의 제1 부분 및 상기 제1 부분과는 다른 하나 이상의 엔트리들 중의 제2 부분을 포함하는 공유 캐시(shared cache)와; 그리고
상기 공유 캐시에 연결된 공유 캐시 제어기를 포함하며,
상기 공유 캐시 제어기는:
상기 제1 부분이 상기 제2 소스가 아닌 상기 제1 소스에 의해 할당된 데이터를 가지도록 허용됨을 결정하고;
상기 제2 부분이 상기 제1 소스가 아닌 상기 제2 소스에 의해 할당된 데이터를 가지도록 허용됨을 결정하고;
대응하는 메모리 요청을 포함하는 명령(command)의 소스로서 상기 제1 소스 또는 상기 제2 소스의 식별에 근거함과 아울러 상기 대응하는 메모리 요청의 명령 타입과 힌트 비트들 - 이 힌트 비트들은 상기 명령의 소스에 의해 전송된 명령의 부분이고, 상기 명령의 소스의 상기 식별과는 구별(distinct)된다 - 에 근거하여 상기 결정을 수행하도록 되어 있으며,
상기 제1 부분 또는 상기 제2 부분에 저장된 데이터는 상기 제1 소스 또는 상기 제2 소스에 의한 판독 또는 기록 액세스에 대하여 히트(hit)될 수 있는 것을 특징으로 하는 컴퓨팅 시스템. - 제1 항에 있어서,
상기 공유 캐시 제어기는 또한, 주어진 메모리 요청의 명령 타입과 상기 명령에 포함된 힌트 비트들 중 적어도 하나에 근거하여, 상기 제1 부분이 상기 제1 소스에 의해 할당된 데이터를 가지도록 허용되지 않음을 결정하도록 된 것을 특징으로 하는 컴퓨팅 시스템. - 제2 항에 있어서,
상기 공유 캐시 제어기는 또한, 엔코딩된 값들을 제어 상태 레지스터에 저장함으로써 파워-다운되는 상기 공유 캐시의 선택된 부분들에의 액세스를 디스에이블하도록 된 것을 특징으로 하는 컴퓨팅 시스템. - 제2 항에 있어서,
상기 제1 소스와 제2 소스 각각은 프로세서 코어, 그래픽 프로세싱 유닛(GPU), 및 입출력(I/O) 디바이스 중 적어도 하나인 것을 특징으로 하는 컴퓨팅 시스템. - 제4 항에 있어서,
상기 공유 캐시 제어기는 또한, 상기 제1 부분이 복수의 소스들 중 단 하나의 소스에 의해 할당된 데이터를 가지도록 허용됨을 결정하도록 된 것을 특징으로 하는 컴퓨팅 시스템. - 제5 항에 있어서,
상기 제1 부분 및 상기 제2 부분의 상기 결정을 위해 사용되는 엔코딩 값들을 저장하기 위하여 상기 공유 캐시 제어기에 연결된 하나 이상의 구성 및 상태 레지스터들(CSRs)을 더 포함하는 것을 특징으로 하는 컴퓨팅 시스템. - 제6 항에 있어서,
상기 공유 캐시는 세트-어소시에이티브 캐시이고 상기 제1 부분 및 상기 제2 부분은 적어도 하나의 캐시 웨이에 대응하는 것을 특징으로 하는 컴퓨팅 시스템. - 제1 항에 있어서,
하나 이상의 다른 소스들이 상기 공유 캐시에 액세스하도록 허용되는 동안 상기 공유 캐시의 로킹된 부분(locked portion)에 기본 입출력 소프트웨어(BIOS)에 의해 사용되는 시스템 셋업 정보를 더 저장하는 것을 더 포함하며,
상기 로킹된 부분은 상기 하나 이상의 다른 소스들에 의한 시스템 부트-업 동안, 퇴거된(evicted) 데이터를 가지도록 허용되지 않은 것으로 결정되는 것을 특징으로 하는 컴퓨팅 시스템. - 제1 항에 있어서,
주어진 트랜젝션의 소스의 식별이 상기 데이터가 어떻게 할당되는지에 관한 제1 표시를 제공하고,
상기 명령에 포함된 힌트 비트가 상기 제1 표시를 오버라이드하고 상기 데이터가 어떻게 표시되는지에 관한 다른 표시를 제공하는 것을 특징으로 하는 컴퓨팅 시스템. - 컴퓨터 시스템의 공유 캐시(shared cache)에서의 데이터 할당 방법으로서,
제1 소스에 의해 메모리 요청들을 발생시키는 단계와; 그리고
상기 제1 소스와는 다른 제2 소스에 의해 메모리 요청들을 발생시키는 단계를 포함하고,
상기 공유 캐시에 연결된 공유 캐시 제어기에 의해,
상기 공유 캐시의 하나 이상의 엔트리들을 포함하는 제1 부분이 상기 제2 소스가 아닌 상기 제1 소스에 의해 할당된 데이터를 가지도록 허용됨을 결정하는 단계와;
공유 캐시의 하나 이상의 엔트리들을 포함하는 제2 부분이 상기 제1 소스가 아닌 상기 제2 소스에 의해 할당된 데이터를 가지도록 허용됨을 결정하는 단계와; 그리고
대응하는 메모리 요청을 포함하는 명령(command)의 소스로서 상기 제1 소스 또는 상기 제2 소스의 식별에 근거함과 아울러 상기 대응하는 메모리 요청의 명령 타입과 힌트 비트들 - 이 힌트 비트들은 상기 명령의 소스에 의해 전송된 명령의 부분이고, 상기 명령의 소스의 식별과는 구별(distinct)된다 - 에 근거하여 상기 결정을 수행하는 단계를 포함하며,
상기 제1 부분 또는 상기 제2 부분에 저장된 데이터는 상기 제1 소스 또는 상기 제2 소스에 의한 판독 또는 기록 액세스에 대하여 히트(hit)될 수 있는 것을 특징으로 하는 컴퓨터 시스템의 공유 캐시에서의 데이터 할당 방법. - 제10 항에 있어서,
주어진 메모리 요청의 명령 타입과 상기 명령에 포함된 힌트 비트들 중 적어도 하나에 근거하여, 상기 제1 부분이 상기 제1 소스에 의해 할당된 데이터를 가지도록 허용되지 않음을 결정하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 시스템의 공유 캐시에서의 데이터 할당 방법. - 제11 항에 있어서,
엔코딩된 값들을 제어 상태 레지스터에 저장함으로써 파워-다운되는 상기 공유 캐시의 선택된 부분들에의 액세스를 디스에이블하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 시스템의 공유 캐시에서의 데이터 할당 방법. - 제11 항에 있어서,
상기 제1 소스와 상기 제2 소스 각각은 프로세서 코어, 그래픽 프로세싱 유닛(GPU), 및 입출력(I/O) 디바이스 중 적어도 하나인 것을 특징으로 하는 컴퓨터 시스템의 공유 캐시에서의 데이터 할당 방법. - 제13 항에 있어서,
상기 제1 부분이 복수의 소스들 중 단 하나의 소스에 의해 할당된 데이터를 가지도록 허용됨을 결정하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 시스템의 공유 캐시에서의 데이터 할당 방법. - 제14 항에 있어서,
상기 제1 및 제2 부분에 대한 상기 결정을 위하여 하나 이상의 구성 및 상태 레지스터들(CSRs)에 엔코딩된 값들을 저장하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 시스템의 공유 캐시에서의 데이터 할당 방법. - 제15 항에 있어서,
상기 공유 캐시는 세트-어소시에이티브 캐시이고 상기 제1 부분 및 상기 제2 부분은 적어도 하나의 캐시 웨이에 대응하는 것을 특징으로 하는 컴퓨터 시스템의 공유 캐시에서의 데이터 할당 방법. - 제10 항에 있어서,
복수의 소스들이 상기 공유 엔트리들에 액세스하도록 허용되는 동안 상기 공유 엔트리들 중 하나 이상의 로킹된 엔트리들에 기본 입출력 소프트웨어(BIOS)에 의해 사용되는 시스템 셋업 정보를 저장하는 단계를 더 포함하며,
상기 로킹된 엔트리들은 상기 복수의 엔트리들 각각에 의한 시스템 부트-업 동안, 퇴거(evicting)에 대해 디스에이블링되는 것을 특징으로 하는 컴퓨터 시스템의 공유 캐시에서의 데이터 할당 방법. - 공유 캐시 제어기로서,
하나 이상의 엔트리들의 제1 부분 및 상기 제1 부분과는 다른 하나 이상의 엔트리들의 제2 부분을 포함하는 공유 캐시 어레이에 연결된 제1 인터페이스와;
적어도 제1 소스 및 상기 제1 소스와는 다른 제2 소스로부터 메모리 요청들을 수신하도록 된 제2 인터페이스와; 그리고
제어 유닛을 포함하며,
상기 제어 유닛은:
상기 제1 부분이 상기 제2 소스가 아닌 상기 제1 소스에 의해 할당된 데이터를 가지도록 허용됨을 결정하고;
상기 제2 부분이 상기 제1 소스가 아닌 상기 제2 소스에 의해 할당된 데이터를 가지도록 허용됨을 결정하고;
대응하는 메모리 요청을 포함하는 명령(command)의 소스로서 상기 제1 소스 또는 상기 제2 소스의 식별에 근거함과 아울러 상기 대응하는 메모리 요청의 명령 타입과 힌트 비트들 - 이 힌트 비트들은 상기 명령의 소스에 의해 전송된 명령이고, 상기 명령의 소스의 식별과는 구별(distinct)된다 - 에 근거하여 상기 결정을 수행하도록 되어 있으며,
상기 제1 부분 또는 상기 제2 부분에 저장된 데이터는 상기 제1 소스 또는 상기 제2 소스에 의해 판독 또는 기록 액세스에 대하여 히트(hit)될 수 있는 것을 특징으로 하는 공유 캐시 제어기. - 제18 항에 있어서,
상기 공유 캐시 제어기는 또한, 주어진 메모리 요청의 명령 타입과 상기 명령에 포함된 힌트 비트들 중 적어도 하나에 근거하여, 상기 제1 부분이 상기 제1 소스에 의해 할당된 데이터를 가지도록 허용되지 않음을 결정하도록 된 것을 특징으로 하는 공유 캐시 제어기. - 제19 항에 있어서,
상기 제어 유닛은 또한, 엔코딩된 값들을 제어 상태 레지스터에 저장함으로써 파워-다운되는 상기 공유 캐시의 선택된 부분들에의 액세스를 디스에이블하도록 된 것을 특징으로 하는 공유 캐시 제어기. - 제18 항에 있어서,
하나 이상의 다른 소스들이 상기 공유 캐시에 액세스하도록 허용되는 동안 상기 공유 캐시의 로킹된 부분(locked portion)에 기본 입출력 소프트웨어(BIOS)에 의해 사용되는 시스템 셋업 정보를 저장하는 것을 더 포함하며,
상기 로킹된 부분은 상기 하나 이상의 다른 소스들에 의한 시스템 부트-업 동안, 퇴거된(evicted) 데이터를 가지도록 허용되지 않은 것으로 결정되는 것을 특징으로 하는 공유 캐시 제어기.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/413,124 | 2009-03-27 | ||
US12/413,124 US8589629B2 (en) | 2009-03-27 | 2009-03-27 | Method for way allocation and way locking in a cache |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20110134917A KR20110134917A (ko) | 2011-12-15 |
KR101569160B1 true KR101569160B1 (ko) | 2015-11-13 |
Family
ID=42246109
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020117025021A KR101569160B1 (ko) | 2009-03-27 | 2010-03-26 | 캐시에서의 웨이 할당 및 웨이 로킹 방법 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8589629B2 (ko) |
EP (1) | EP2411917B1 (ko) |
JP (1) | JP2012522290A (ko) |
KR (1) | KR101569160B1 (ko) |
CN (1) | CN102365627B (ko) |
WO (1) | WO2010111636A1 (ko) |
Families Citing this family (74)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8417889B2 (en) * | 2009-07-24 | 2013-04-09 | International Business Machines Corporation | Two partition accelerator and application of tiered flash to cache hierarchy in partition acceleration |
US9311245B2 (en) | 2009-08-13 | 2016-04-12 | Intel Corporation | Dynamic cache sharing based on power state |
US8244982B2 (en) * | 2009-08-21 | 2012-08-14 | Empire Technology Development Llc | Allocating processor cores with cache memory associativity |
US8645629B2 (en) * | 2009-09-16 | 2014-02-04 | Intel Corporation | Persistent cacheable high volume manufacturing (HVM) initialization code |
US8412885B2 (en) * | 2009-11-12 | 2013-04-02 | Intel Corporation | Searching a shared cache by using search hints and masked ways |
US8938589B2 (en) * | 2010-01-28 | 2015-01-20 | Hewlett-Packard Development Company, L. P. | Interface methods and apparatus for memory devices using arbitration |
US20160246711A9 (en) * | 2010-01-28 | 2016-08-25 | Hewlett-Packard Development Company, L. P. | Interface methods and apparatus for memory devices |
US8606999B2 (en) * | 2010-08-13 | 2013-12-10 | Advanced Micro Devices, Inc. | Cache partitioning |
US9645866B2 (en) * | 2010-09-20 | 2017-05-09 | Qualcomm Incorporated | Inter-processor communication techniques in a multiple-processor computing platform |
US20120096295A1 (en) * | 2010-10-18 | 2012-04-19 | Robert Krick | Method and apparatus for dynamic power control of cache memory |
US20120324195A1 (en) * | 2011-06-14 | 2012-12-20 | Alexander Rabinovitch | Allocation of preset cache lines |
JP2013003793A (ja) * | 2011-06-15 | 2013-01-07 | Toshiba Corp | マルチコアプロセッサシステムおよびマルチコアプロセッサ |
US8769316B2 (en) | 2011-09-06 | 2014-07-01 | Intel Corporation | Dynamically allocating a power budget over multiple domains of a processor |
US8954770B2 (en) | 2011-09-28 | 2015-02-10 | Intel Corporation | Controlling temperature of multiple domains of a multi-domain processor using a cross domain margin |
US9074947B2 (en) | 2011-09-28 | 2015-07-07 | Intel Corporation | Estimating temperature of a processor core in a low power state without thermal sensor information |
US8832478B2 (en) | 2011-10-27 | 2014-09-09 | Intel Corporation | Enabling a non-core domain to control memory bandwidth in a processor |
US9026815B2 (en) | 2011-10-27 | 2015-05-05 | Intel Corporation | Controlling operating frequency of a core domain via a non-core domain of a multi-domain processor |
US9158693B2 (en) | 2011-10-31 | 2015-10-13 | Intel Corporation | Dynamically controlling cache size to maximize energy efficiency |
US8943340B2 (en) | 2011-10-31 | 2015-01-27 | Intel Corporation | Controlling a turbo mode frequency of a processor |
US9753858B2 (en) * | 2011-11-30 | 2017-09-05 | Advanced Micro Devices, Inc. | DRAM cache with tags and data jointly stored in physical rows |
US9910893B2 (en) * | 2011-12-01 | 2018-03-06 | Oracle International Corporation | Failover and resume when using ordered sequences in a multi-instance database environment |
US9189295B2 (en) | 2011-12-01 | 2015-11-17 | Oracle International Corporation | Generating an ordered sequence in a database system using multiple interleaved caches |
US9141609B2 (en) | 2011-12-01 | 2015-09-22 | Oracle International Corporation | Reducing sequence cache latch contention in a database system |
US20130205089A1 (en) * | 2012-02-08 | 2013-08-08 | Mediatek Singapore Pte. Ltd. | Cache Device and Methods Thereof |
KR20130131135A (ko) * | 2012-05-23 | 2013-12-03 | 삼성전자주식회사 | QoS 기반 캐시 컨트롤러 및 그 동작 방법 |
US9529719B2 (en) * | 2012-08-05 | 2016-12-27 | Advanced Micro Devices, Inc. | Dynamic multithreaded cache allocation |
US9373182B2 (en) | 2012-08-17 | 2016-06-21 | Intel Corporation | Memory sharing via a unified memory architecture |
US20140136793A1 (en) * | 2012-11-13 | 2014-05-15 | Nvidia Corporation | System and method for reduced cache mode |
US9183144B2 (en) * | 2012-12-14 | 2015-11-10 | Intel Corporation | Power gating a portion of a cache memory |
US9710380B2 (en) * | 2013-08-29 | 2017-07-18 | Intel Corporation | Managing shared cache by multi-core processor |
US20150261681A1 (en) * | 2014-03-14 | 2015-09-17 | International Business Machines Corporation | Host bridge with cache hints |
CN104407989B (zh) * | 2014-11-25 | 2019-02-12 | 上海兆芯集成电路有限公司 | 具有统一标签和片化数据的高速缓冲存储器 |
GB2537357A (en) * | 2015-04-09 | 2016-10-19 | Imagination Tech Ltd | Cache operation in a multi-threaded processor |
US9626299B2 (en) * | 2015-05-01 | 2017-04-18 | Intel Corporation | Changing a hash function based on a conflict ratio associated with cache sets |
GB2540761B (en) * | 2015-07-23 | 2017-12-06 | Advanced Risc Mach Ltd | Cache usage estimation |
JP6477352B2 (ja) * | 2015-08-17 | 2019-03-06 | 富士通株式会社 | 演算処理装置、演算処理装置の制御方法および演算処理装置の制御プログラム |
GB2543866B (en) * | 2016-03-07 | 2017-11-01 | Imagination Tech Ltd | Task assembly for SIMD processing |
US10042737B2 (en) | 2016-08-31 | 2018-08-07 | Microsoft Technology Licensing, Llc | Program tracing for time travel debugging and analysis |
US10031833B2 (en) | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
US10031834B2 (en) | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
US10067709B2 (en) * | 2016-09-19 | 2018-09-04 | Advanced Micro Devices, Inc. | Page migration acceleration using a two-level bloom filter on high bandwidth memory systems |
US10489273B2 (en) | 2016-10-20 | 2019-11-26 | Microsoft Technology Licensing, Llc | Reuse of a related thread's cache while recording a trace file of code execution |
US10310977B2 (en) | 2016-10-20 | 2019-06-04 | Microsoft Technology Licensing, Llc | Facilitating recording a trace file of code execution using a processor cache |
US10310963B2 (en) | 2016-10-20 | 2019-06-04 | Microsoft Technology Licensing, Llc | Facilitating recording a trace file of code execution using index bits in a processor cache |
US10324851B2 (en) | 2016-10-20 | 2019-06-18 | Microsoft Technology Licensing, Llc | Facilitating recording a trace file of code execution using way-locking in a set-associative processor cache |
US10540250B2 (en) | 2016-11-11 | 2020-01-21 | Microsoft Technology Licensing, Llc | Reducing storage requirements for storing memory addresses and values |
US9996478B1 (en) * | 2016-12-09 | 2018-06-12 | Advanced Micro Devices, Inc. | No allocate cache policy |
KR102576707B1 (ko) | 2016-12-26 | 2023-09-08 | 삼성전자주식회사 | 전자 시스템 및 그 동작 방법 |
US10318332B2 (en) | 2017-04-01 | 2019-06-11 | Microsoft Technology Licensing, Llc | Virtual machine execution tracing |
US10365824B2 (en) | 2017-04-24 | 2019-07-30 | Advanced Micro Devices, Inc. | Silent active page migration faults |
US10310985B2 (en) | 2017-06-26 | 2019-06-04 | Ati Technologies Ulc | Systems and methods for accessing and managing a computing system memory |
US10296442B2 (en) | 2017-06-29 | 2019-05-21 | Microsoft Technology Licensing, Llc | Distributed time-travel trace recording and replay |
US10318344B2 (en) | 2017-07-13 | 2019-06-11 | Advanced Micro Devices, Inc. | Predicting page migration granularity for heterogeneous memory systems |
CN109271333B (zh) * | 2017-07-17 | 2022-03-01 | 深圳市中兴微电子技术有限公司 | 一种sram控制方法及控制器、控制系统 |
GB2565338B (en) | 2017-08-10 | 2020-06-03 | Mips Tech Llc | Fault detecting and fault tolerant multi-threaded processors |
US10572388B2 (en) * | 2017-08-30 | 2020-02-25 | Micron Technology, Inc. | Managed NVM adaptive cache management |
US10459824B2 (en) | 2017-09-18 | 2019-10-29 | Microsoft Technology Licensing, Llc | Cache-based trace recording using cache coherence protocol data |
US11526278B2 (en) | 2017-12-21 | 2022-12-13 | Advanced Micro Devices, Inc. | Adaptive page close prediction |
US10558572B2 (en) | 2018-01-16 | 2020-02-11 | Microsoft Technology Licensing, Llc | Decoupling trace data streams using cache coherence protocol data |
US10783083B2 (en) * | 2018-02-12 | 2020-09-22 | Stmicroelectronics (Beijing) Research & Development Co. Ltd | Cache management device, system and method |
US11907091B2 (en) | 2018-02-16 | 2024-02-20 | Microsoft Technology Licensing, Llc | Trace recording by logging influxes to an upper-layer shared cache, plus cache coherence protocol transitions among lower-layer caches |
US10642737B2 (en) | 2018-02-23 | 2020-05-05 | Microsoft Technology Licensing, Llc | Logging cache influxes by request to a higher-level cache |
US10496537B2 (en) | 2018-02-23 | 2019-12-03 | Microsoft Technology Licensing, Llc | Trace recording by logging influxes to a lower-layer cache based on entries in an upper-layer cache |
US10891234B2 (en) | 2018-04-04 | 2021-01-12 | Sap Se | Cache partitioning to accelerate concurrent workloads |
CN109445680B (zh) * | 2018-08-20 | 2020-03-31 | 华为技术有限公司 | 一种对硬盘进行管理的方法及装置 |
US10860485B2 (en) * | 2018-11-05 | 2020-12-08 | Microsoft Technology Licensing, Llc | Leveraging existing logic paths during bit-accurate processor tracing |
US10909012B2 (en) * | 2018-11-12 | 2021-02-02 | H3 Platform, Inc. | System having persistent memory |
US11016913B1 (en) | 2020-03-30 | 2021-05-25 | Apple Inc. | Inter cluster snoop latency reduction |
CN113687955B (zh) * | 2021-06-18 | 2023-03-17 | 上海天数智芯半导体有限公司 | 一种高效处理gpu片内和片间缓存一致性的数字电路设计方法 |
US20230148253A1 (en) * | 2021-11-08 | 2023-05-11 | Ambiq Micro, Inc. | Flexible and low power cache memory architecture |
US20230195640A1 (en) * | 2021-12-21 | 2023-06-22 | Advanced Micro Devices, Inc. | Cache Associativity Allocation |
US11829190B2 (en) | 2021-12-21 | 2023-11-28 | Advanced Micro Devices, Inc. | Data routing for efficient decompression of compressed data stored in a cache |
US11836088B2 (en) | 2021-12-21 | 2023-12-05 | Advanced Micro Devices, Inc. | Guided cache replacement |
US20230205696A1 (en) * | 2021-12-28 | 2023-06-29 | Advanced Micro Devices, Inc. | Cascading execution of atomic operations |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6493800B1 (en) | 1999-03-31 | 2002-12-10 | International Business Machines Corporation | Method and system for dynamically partitioning a shared cache |
Family Cites Families (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01133162A (ja) * | 1987-11-18 | 1989-05-25 | Fujitsu Ltd | キャッシュメモリ制御方式 |
US5412787A (en) * | 1990-11-21 | 1995-05-02 | Hewlett-Packard Company | Two-level TLB having the second level TLB implemented in cache tag RAMs |
JPH0887453A (ja) * | 1994-09-20 | 1996-04-02 | Mitsubishi Electric Corp | キャッシュメモリ装置、キャッシュメモリ装置の登録制御方法及びコンピュータ |
US5848433A (en) * | 1995-04-12 | 1998-12-08 | Advanced Micro Devices | Way prediction unit and a method for operating the same |
US5764946A (en) * | 1995-04-12 | 1998-06-09 | Advanced Micro Devices | Superscalar microprocessor employing a way prediction unit to predict the way of an instruction fetch address and to concurrently provide a branch prediction address corresponding to the fetch address |
US5845323A (en) * | 1995-08-31 | 1998-12-01 | Advanced Micro Devices, Inc. | Way prediction structure for predicting the way of a cache in which an access hits, thereby speeding cache access time |
US5802594A (en) * | 1995-09-06 | 1998-09-01 | Intel Corporation | Single phase pseudo-static instruction translation look-aside buffer |
US6044478A (en) * | 1997-05-30 | 2000-03-28 | National Semiconductor Corporation | Cache with finely granular locked-down regions |
US6073230A (en) * | 1997-06-11 | 2000-06-06 | Advanced Micro Devices, Inc. | Instruction fetch unit configured to provide sequential way prediction for sequential instruction fetches |
US6138213A (en) * | 1997-06-27 | 2000-10-24 | Advanced Micro Devices, Inc. | Cache including a prefetch way for storing prefetch cache lines and configured to move a prefetched cache line to a non-prefetch way upon access to the prefetched cache line |
US6016533A (en) * | 1997-12-16 | 2000-01-18 | Advanced Micro Devices, Inc. | Way prediction logic for cache array |
KR100313996B1 (ko) * | 1998-01-08 | 2001-12-28 | 구자홍 | 컴퓨터시스템의바이오스데이터저장장치및방법 |
US6314514B1 (en) * | 1999-03-18 | 2001-11-06 | Ip-First, Llc | Method and apparatus for correcting an internal call/return stack in a microprocessor that speculatively executes call and return instructions |
US6629207B1 (en) * | 1999-10-01 | 2003-09-30 | Hitachi, Ltd. | Method for loading instructions or data into a locked way of a cache memory |
JP3391315B2 (ja) * | 1999-10-20 | 2003-03-31 | 日本電気株式会社 | バス制御装置 |
JP3620473B2 (ja) * | 2001-06-14 | 2005-02-16 | 日本電気株式会社 | 共有キャッシュメモリのリプレイスメント制御方法及びその装置 |
US6662272B2 (en) * | 2001-09-29 | 2003-12-09 | Hewlett-Packard Development Company, L.P. | Dynamic cache partitioning |
US7234052B2 (en) * | 2002-03-08 | 2007-06-19 | Samsung Electronics Co., Ltd | System boot using NAND flash memory and method thereof |
US6868485B1 (en) * | 2002-09-27 | 2005-03-15 | Advanced Micro Devices, Inc. | Computer system with integrated directory and processor cache |
US7254676B2 (en) * | 2002-11-15 | 2007-08-07 | Intel Corporation | Processor cache memory as RAM for execution of boot code |
US7117290B2 (en) * | 2003-09-03 | 2006-10-03 | Advanced Micro Devices, Inc. | MicroTLB and micro tag for reducing power in a processor |
US20050050278A1 (en) * | 2003-09-03 | 2005-03-03 | Advanced Micro Devices, Inc. | Low power way-predicted cache |
US7237098B2 (en) | 2003-09-08 | 2007-06-26 | Ip-First, Llc | Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence |
US7558920B2 (en) * | 2004-06-30 | 2009-07-07 | Intel Corporation | Apparatus and method for partitioning a shared cache of a chip multi-processor |
US20070156992A1 (en) * | 2005-12-30 | 2007-07-05 | Intel Corporation | Method and system for optimizing latency of dynamic memory sizing |
US7302528B2 (en) * | 2004-11-19 | 2007-11-27 | Intel Corporation | Caching bypass |
US7996644B2 (en) * | 2004-12-29 | 2011-08-09 | Intel Corporation | Fair sharing of a cache in a multi-core/multi-threaded processor by dynamically partitioning of the cache |
CN101107599B (zh) * | 2005-03-22 | 2011-09-21 | 松下电器产业株式会社 | 高速缓冲存储器控制方法和高速缓冲存储器控制装置 |
JP2007114890A (ja) * | 2005-10-18 | 2007-05-10 | Matsushita Electric Ind Co Ltd | 演算処理装置およびキャッシュ動作方法 |
JP2009015509A (ja) * | 2007-07-03 | 2009-01-22 | Renesas Technology Corp | キャッシュメモリ装置 |
US8589706B2 (en) * | 2007-12-26 | 2013-11-19 | Intel Corporation | Data inversion based approaches for reducing memory power consumption |
-
2009
- 2009-03-27 US US12/413,124 patent/US8589629B2/en active Active
-
2010
- 2010-03-26 WO PCT/US2010/028892 patent/WO2010111636A1/en active Application Filing
- 2010-03-26 KR KR1020117025021A patent/KR101569160B1/ko not_active IP Right Cessation
- 2010-03-26 JP JP2012502301A patent/JP2012522290A/ja active Pending
- 2010-03-26 CN CN201080017816.5A patent/CN102365627B/zh active Active
- 2010-03-26 EP EP10712630.2A patent/EP2411917B1/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6493800B1 (en) | 1999-03-31 | 2002-12-10 | International Business Machines Corporation | Method and system for dynamically partitioning a shared cache |
Also Published As
Publication number | Publication date |
---|---|
CN102365627A (zh) | 2012-02-29 |
WO2010111636A1 (en) | 2010-09-30 |
EP2411917A1 (en) | 2012-02-01 |
CN102365627B (zh) | 2015-04-01 |
US8589629B2 (en) | 2013-11-19 |
KR20110134917A (ko) | 2011-12-15 |
JP2012522290A (ja) | 2012-09-20 |
US20100250856A1 (en) | 2010-09-30 |
EP2411917B1 (en) | 2020-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101569160B1 (ko) | 캐시에서의 웨이 할당 및 웨이 로킹 방법 | |
US9575901B2 (en) | Programmable address-based write-through cache control | |
EP2430551B1 (en) | Cache coherent support for flash in a memory hierarchy | |
US7277992B2 (en) | Cache eviction technique for reducing cache eviction traffic | |
US7490200B2 (en) | L2 cache controller with slice directory and unified cache structure | |
EP2452265B1 (en) | Block-based non-transparent cache | |
US20090006756A1 (en) | Cache memory having configurable associativity | |
US20140089602A1 (en) | System cache with partial write valid states | |
US9251069B2 (en) | Mechanisms to bound the presence of cache blocks with specific properties in caches | |
US20060155934A1 (en) | System and method for reducing unnecessary cache operations | |
US20100191990A1 (en) | Voltage-based memory size scaling in a data processing system | |
KR19980079433A (ko) | 비포함 캐쉬 메모리 계층 구조에서 사용하기 위한 캐쉬 일관성 메카니즘 구현 방법 및 시스템 | |
US9563567B2 (en) | Selective cache way-group power down | |
US7809889B2 (en) | High performance multilevel cache hierarchy | |
US7287122B2 (en) | Data replication in multiprocessor NUCA systems to reduce horizontal cache thrashing | |
US7882309B2 (en) | Method and apparatus for handling excess data during memory access | |
US6484237B1 (en) | Unified multilevel memory system architecture which supports both cache and addressable SRAM | |
WO2006056900A1 (en) | Coherent caching of local memory data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
LAPS | Lapse due to unpaid annual fee |