KR101815171B1 - 캐시 메모리를 위한 어드레싱 모드를 동적으로 제어하기 위한 방법, 장치 및 시스템 - Google Patents
캐시 메모리를 위한 어드레싱 모드를 동적으로 제어하기 위한 방법, 장치 및 시스템 Download PDFInfo
- Publication number
- KR101815171B1 KR101815171B1 KR1020167007870A KR20167007870A KR101815171B1 KR 101815171 B1 KR101815171 B1 KR 101815171B1 KR 1020167007870 A KR1020167007870 A KR 1020167007870A KR 20167007870 A KR20167007870 A KR 20167007870A KR 101815171 B1 KR101815171 B1 KR 101815171B1
- Authority
- KR
- South Korea
- Prior art keywords
- cache memory
- cache
- node
- core
- node identifier
- 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/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/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0833—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or 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/28—Using a specific disk cache architecture
- G06F2212/283—Plural cache memories
-
- 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/62—Details of cache specific to multiprocessor cache arrangements
- G06F2212/621—Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
-
- Y02B60/1225—
-
- 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
실시예에서, 캐시 메모리의 제1 부분은 제1 코어와 연관된다. 제1 캐시 메모리 부분은 분산형 캐시 메모리이고, 자체가 동적으로 제어가능한 어드레싱 모드에 따라 제1 코어에 대한 프라이빗 캐시 메모리 및 복수의 코어(제1 코어 포함)에 의해 공유되는 공유형 캐시 메모리 중 하나가 되도록 동적으로 제어될 수 있다. 다른 실시예가 설명되고 주장된다.
Description
본 개시는 컴퓨팅 시스템에 관한 것으로, 특히 (단 배타적인 것은 아님) 캐시 메모리 관리에 관한 것이다.
도 1은 멀티코어 프로세서를 포함하는 컴퓨팅 시스템의 블록도이다.
도 2는 본 발명의 실시예에 따른 멀티코어 프로세서의 블록도이다.
도 3은 실시예에 따른 프로세서의 일부의 블록도이다.
도 4a는 실시예에 따른 공유형 캐시 메모리를 위한 설정 인덱스의 블록도이다.
도 4b는 본 발명의 실시예에 따른 글로벌 설정 인덱스를 사용하여 생성된 액세스 어드레스이다.
도 5는 본 발명의 실시예에 따른 방법의 흐름도이다.
도 6은 본 발명의 실시예에 따라 캐시 메모리를 동적으로 제어하기 위한 방법의 흐름도이다.
도 7은 본 발명의 실시예에 따른 시스템 온-칩(SOC) 디자인의 실시예의 블록도이다.
도 2는 본 발명의 실시예에 따른 멀티코어 프로세서의 블록도이다.
도 3은 실시예에 따른 프로세서의 일부의 블록도이다.
도 4a는 실시예에 따른 공유형 캐시 메모리를 위한 설정 인덱스의 블록도이다.
도 4b는 본 발명의 실시예에 따른 글로벌 설정 인덱스를 사용하여 생성된 액세스 어드레스이다.
도 5는 본 발명의 실시예에 따른 방법의 흐름도이다.
도 6은 본 발명의 실시예에 따라 캐시 메모리를 동적으로 제어하기 위한 방법의 흐름도이다.
도 7은 본 발명의 실시예에 따른 시스템 온-칩(SOC) 디자인의 실시예의 블록도이다.
도 1을 참조하면, 멀티코어 프로세서를 포함하는 컴퓨팅 시스템에 대한 블록도의 실시예가 도시된다. 프로세서(100)는 마이크로프로세서, 내장형 프로세서, DSP(digital signal processor), 네트워크 프로세서, 핸드헬드 프로세서, 애플리케이션 프로세서, 코-프로세서, 시스템 온 칩(SOC), 또는 코드 실행을 위한 다른 디바이스와 같은 임의의 프로세서를 포함한다. 프로세서(100)는, 일 실시예에서, 비대칭 코어 또는 대칭 코어(도시된 실시예)를 포함할 수 있는 적어도 2개의 코어(코어(101 및 102))를 포함한다. 그러나, 프로세서(100)는 대칭적이거나 또는 비대칭적일 수 있는 임의의 수의 프로세싱 요소들을 포함할 수 있다.
일 실시예에서, 프로세싱 요소는 소프트웨어 스레드를 지원하는 하드웨어 또는 로직을 지칭한다. 하드웨어 프로세싱 요소의 예로는: 스레드 유닛, 스레드 슬롯, 스레드, 프로세스 유닛, 콘텍스트(context), 콘텍스트 유닛, 논리적 프로세서, 하드웨어 스레드, 코어, 및/또는 실행 상태 또는 아키텍처 상태와 같은, 프로세서에 대한 상태를 유지할 수 있는 임의의 다른 요소가 있다. 즉, 프로세싱 요소는, 일 실시예에서, 소프트웨어 스레드, 운영 체제, 애플리케이션 또는 기타 코드와 같은 코드와 독립적으로 관련될 수 있는 임의의 하드웨어를 지칭한다. 전형적으로, 물리적 프로세서(또는 프로세서 소켓)는 코어 또는 하드웨어 스레드와 같은 임의의 수의 다른 프로세싱 요소들을 잠재적으로 포함하는 집적 회로를 지칭한다.
때때로, 코어는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치된 로직을 지칭하며, 각각 독립적으로 유지된 아키텍처 상태는 적어도 일부의 전용 실행 자원들과 관련된다. 코어와는 반대로, 하드웨어 스레드는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치된 임의의 로직을 전형적으로 지칭하며, 독립적으로 유지된 아키텍처 상태들은 실행 자원들에 대한 액세스를 공유한다. 볼 수 있듯이, 소정의 자원들이 공유되고, 다른 지원들은 아키텍처 상태에 전용될 때, 코어와 하드웨어 스레드의 명명(nomenclature) 사이의 라인이 중첩된다. 또한, 코어와 하드웨어 스레드는 운영 체제에 의해 개별적인 논리적 프로세서들로서 보여지며, 운영 체제는 각각의 논리적 프로세서 상에서의 동작들을 개별적으로 스케줄링할 수 있다.
도 1에 도시된 바와 같이, 물리적 프로세서(100)는 2개의 코어, 즉, 코어(101 및 102)를 포함한다. 여기서, 코어(101 및 102)는 대칭적 코어, 즉, 동일한 구성, 기능 유닛, 및/또는 로직을 갖는 코어로서 고려된다. 다른 실시예에서, 코어(101)는 비순차적(out-of-order) 프로세서 코어를 포함하는 반면, 코어(102)는 순차적(in-order) 프로세서 코어를 포함한다. 그러나, 코어(101 및 102)는 네이티브(native) 코어, 소프트웨어 관리형 코어, 네이티브 ISA(Instruction Set Architecture)를 실행하도록 구성된 코어, 변환된 ISA를 실행하도록 구성된 코어, 공동 설계(co-designed) 코어, 또는 다른 알려진 코어와 같은 임의의 유형의 코어로부터 개별적으로 선택될 수 있다. 이종 코어 환경(즉, 비대칭 코어)에서, 이진 변환과 같은 변환의 일부 형태는 하나 또는 양자 모두의 코어 상에서 코드를 스케줄링하거나 실행하는데 사용될 수 있다. 설명에 부가하여, 코어(101)에 도시된 기능 유닛이 이하에 보다 상세히 기술되며, 코어(102)에서의 유닛은 도시된 실시예에서 유사한 방식으로 동작한다.
도시된 바와 같이, 코어(101)는 하드웨어 스레드 슬롯(101a 및 101b)으로서 지칭될 수도 있는 2개의 하드웨어 스레드(101a 및 101b)를 포함한다. 따라서, 일 실시예에서 운영 체제와 같은 소프트웨어 엔티티는, 잠재적으로 프로세서(100)를 4개의 분리된 프로세서, 즉, 4개의 소프트웨어 스레드를 동시에 실행할 수 있는 4개의 논리적 프로세서 또는 프로세싱 요소로서 간주한다. 전술한 것 외에, 제1 스레드는 아키텍처 상태 레지스터(101a)와 관련되고, 제2 스레드는 아키텍처 상태 레지스터(101b)와 관련되고, 제3 스레드는 아키텍처 상태 레지스터(102a)와 관련될 수 있고, 제4 스레드는 아키텍처 상태 레지스터(102b)와 관련될 수 있다. 여기서, 아키텍처 상태 레지스터(101a, 101b, 102a, 및 102b) 각각은, 전술한 바와 같이, 프로세싱 요소, 스레드 슬롯, 또는 스레드 유닛으로서 지칭될 수 있다. 도시된 바와 같이, 아키텍처 상태 레지스터(101a)는 아키텍처 상태 레지스터들(101b)에서 복제되어, 개별적인 아키텍처 상태/콘텍스트가 논리적 프로세서(101a) 및 논리적 프로세서(101b)에 대해 저장될 수 있다. 코어(101)에서, 인스트럭션 포인터 및 할당기 및 리네이머(renamer) 블록(130)에서의 리네이밍 로직 및 인스트럭션 포인터와 같은 다른 보다 작은 자원들이 스레드들(101a 및 101b)에 대해 또한 복제될 수 있다. 재순서화(reorder)/폐기(retirement) 유닛(135)에서의 재순서화 버퍼, ILTB(120), 로드/저장 버퍼, 및 큐(queue)와 같은 일부 자원이 파티셔닝을 통해 공유될 수 있다. 범용 내부 레지스터, 페이지-테이블 베이스 레지스터(들), 하위-레벨 데이터-캐시 및 데이터-TLB(115), 실행 유닛(들)(140), 및 비순차적 유닛(135)의 부분과 같은 다른 자원들이 잠재적으로 완전히 공유된다.
프로세서(100)는 때로는, 완전히 공유되거나 파티셔닝을 통해 공유되거나 프로세싱 요소에 의해/프로세싱 요소로 전용될 수 있는 다른 자원을 포함한다. 도 1에서, 프로세서의 예시적인 논리적 유닛/자원을 갖는 단지 예시적인 프로세서의 실시예가 도시된다. 프로세서는 이들 기능 유닛 중 임의의 것을 포함하거나 또는 생략할 수 있고, 또한 도시되지 않은 임의의 다른 알려진 기능 유닛, 로직 또는 펌웨어를 포함할 수 있음을 주지해야 한다. 도시된 바와 같이, 코어(101)는 간략화된, 대표적인 비순차적(out-of-order; OOO) 프로세서 코어를 포함한다. 그러나, 다른 실시예에서는 순차적 프로세서가 사용될 수 있다. OO0 코어는 실행되고/취해질 브랜치(branch)를 예측하기 위한 브랜치 타겟 버퍼(120) 및 인스트럭션에 대한 어드레스 변환 엔트리를 저장하기 위한 I-TLB(instruction-translation buffer)(120)를 포함한다.
코어(101)는 페치된 요소를 디코딩하기 위해 페치(fetch) 유닛(120)에 연결된 디코드 모듈(125)을 더 포함한다. 페치 로직은, 일 실시예에서, 스레드 슬롯(101a, 101b)과 각각 관련된 개별적인 시퀀서를 포함한다. 통상적으로, 코어(101)는 프로세서(100) 상에서 실행가능한 인스트럭션을 정의/특정하는 제1 ISA와 관련된다. 때때로 제1 ISA의 부분인 기계 코드 인스트럭션은, 수행될 인스트럭션 또는 동작을 참조/특정하는 (오피코드(opcode) 라고 지칭되는) 인스트럭션의 일부를 포함한다. 디코드 로직(125)은 그들의 오피코드로부터의 이들 인스트럭션을 인식하고, 제1 ISA에 의해 정의된 바와 같은 프로세싱을 위해 파이프라인 상에서 디코딩된 인스트럭션을 전달하는 회로를 포함한다. 예를 들어, 이하에 보다 상세히 기술되는 바와 같이, 디코더(125)는, 일 실시예에서, 트랜잭션 인스트럭션과 같은 특정 인스트럭션을 인식하도록 설계되고나 구성된 로직을 포함한다. 디코더(125)에 의한 인식의 결과로서, 아키텍처 또는 코어(101)는 특정의 사전정의된 동작을 취하여, 적절한 인스트럭션과 관련된 작업을 수행한다. 여기서 설명된 임의의 작업, 블록, 동작, 및 방법은 단일의 또는 다중의 인스트럭션 - 이들 중 일부는 새로운 또는 예전의 인스트럭션일 수 있음 - 에 응답하여 수행될 수 있다는 것을 유의하는 것이 중요하다. 일 실시예에서, 디코더(126)는 동일한 ISA(또는 그의 서브세트)를 인식한다. 대안으로, 이종 코어 환경에서, 디코더(126)는 제2 ISA(제1 ISA의 서브세트 또는 개별 ISA 중 어느 하나)를 인식한다.
일례에서, 할당기 및 리네이머 블록(130)은 인스트럭션 프로세싱 결과를 저장하는 레지스터 파일과 같은 자원을 보유(reserve)하는 할당기를 포함한다. 그러나, 스레드(101a 및 101b)는 잠재적으로 비순차적 실행이 가능하며, 할당기 및 리네이머 블록(130)은 인스트럭션 결과를 추적하기 위한 재순서화 버퍼와 같은 다른 자원을 또한 보유한다. 또한, 유닛(130)은 프로세서(100) 내부의 다른 레지스터에 대해 프로그램/인스트럭션 참조 레지스터를 리네이밍하는 레지스터 리네이머를 포함할 수 있다. 재순서화/폐기 유닛(135)은 위에서 언급한 재순서화 버퍼, 로드 버퍼, 및 저장 버퍼와 같은 구성요소들을 포함하여, 비순차적 실행 및 이후의 비순차적 실행된 인스트럭션의 순차적 폐기를 지원한다.
스케쥴러 및 실행 유닛(들) 블록(140)은, 일 실시예에서, 실행 유닛 상에서의 인스트럭션/동작을 스케줄링하는 스케쥴러 유닛을 포함한다. 예를 들어, 부동 소수점(floating point) 인스트럭션이, 사용가능한 부동 소수점 실행 유닛을 갖는 실행 유닛의 포트 상에서 스케줄링된다. 정보 인스트럭션 프로세싱 결과를 저장하기 위해 실행 유닛과 관련된 레지스터 파일이 또한 포함된다. 예시적인 실행 유닛은 부동 소수점 실행 유닛, 정수 실행 유닛, 점프 실행 유닛, 로드 실행 유닛, 저장 실행 유닛 및 다른 알려진 실행 유닛을 포함한다.
하위 레벨 데이터 캐시 및 데이터 변환 버퍼(D-TLB)(150)가 실행 유닛(들)(140)에 연결된다. 데이터 캐시는 메모리 일관성(coherency) 상태에서 잠재적으로 유지되는, 데이터 오퍼랜드와 같은 요소 상에서 최근에 사용/동작된 것을 저장하기 위한 것이다. D-TLB는 물리적 어드레스 변환에 대한 최근의 가상/선형의 것을 저장하기 위한 것이다. 특정 예로서, 프로세서는 물리적 메모리를 복수의 가상 페이지로 분할하는 페이지 테이블 구조를 포함할 수 있다.
여기서, 코어(101 및 102)는 온-칩 인터페이스(110)와 관련된 제2 레벨 캐시와 같은 상위-레벨 또는 더 먼(further-out) 캐시에 대한 액세스를 공유한다. 상위-레벨 또는 더 먼 레벨은 실행 유닛(들)로부터 증가되거나 또는 더 멀어지는 캐시 레벨을 지칭함을 주지해야 한다. 일 실시예에서, 상위-레벨 캐시는 최종-레벨 데이터 캐시, 즉, 제2 또는 제3 데이터 캐시와 같은 최종-레벨 데이터 캐시(프로세서(100) 상의 메모리 계층에서의 최종 캐시)이다. 그러나, 상위 레벨 캐시는, 그것이 인스트럭션 캐시와 관련되거나 또는 인스트럭션 캐시를 포함할 수 있으므로, 그렇게 제한되지 않는다. 트레이스(trace) 캐시(인스트럭션 캐시의 한 유형)가 대신에 디코더(125) 이후에 연결되어 최근에 디코딩된 트레이스를 저장할 수 있다. 여기서, 인스트럭션은 잠재적으로 다수의 마이크로-인스트럭션(마이크로-연산)으로 디코딩할 수 있는 매크로-인스트럭션(즉, 디코더에 의해 인식되는 일반적인 인스트럭션)을 지칭한다.
도시된 구성에서, 프로세서(100)는 또한 온-칩 인터페이스 모듈(110)을 포함한다. 역사적으로, 이하에 더 상세히 설명되는 메모리 컨트롤러는 프로세서(100) 외부의 컴퓨팅 시스템에 포함되어 왔다. 이 시나리오에서, 온-칩 인터페이스(11)는 시스템 메모리(175), 칩셋(종종 메모리(175)에 연결하기 위한 메모리 컨트롤러 허브 및 주변 디바이스를 연결하기 위한 I/O 컨트롤러 허브를 포함함), 메모리 컨트롤러 허브, 노스브리지(northbridge), 또는 다른 집적 회로와 같은, 프로세서(100) 외부의 디바이스와 통신한다. 그리고, 이 시나리오에서, 버스(105)는 멀티-드롭 버스, 포인트-투-포인트 상호접속, 직렬 상호접속, 병렬 버스, 코히런트(예를 들면, 캐시 코히런트) 버스, 레이어드 프로토콜 아키텍처, 차동 버스, 및 GTL 버스와 같은 임의의 알려진 상호접속을 포함할 수 있다.
메모리(175)는 프로세서(100)에 전용이거나 또는 시스템에서의 다른 디바이스와 공유될 수 있다. 메모리(175)의 유형에 대한 일반적인 예는 DRAM, SRAM, NV 메모리(nonvolatile memory) 및 다른 알려진 저장 디바이스들을 포함한다. 디바이스(180)는 그래픽 가속기, 프로세서 또는 메모리 컨트롤러 허브에 접속된 카드, I/O 컨트롤러 허브에 접속된 데이터 스토리지, 무선 트랜시버, 플래시 디바이스, 오디오 컨트롤러, 네트워크 컨트롤러, 또는 다른 알려진 디바이스를 포함할 수 있다는 것을 유의하자.
그러나, 최근에, SOC와 같은, 단일 다이 상에 더 많은 로직 및 디바이스가 집적됨에 따라, 이들 디바이스 각각은 프로세서(100)에 통합될 수 있다. 예를 들면, 일 실시예에서, 메모리 컨트롤러 허브는 프로세서(100)와 함께 동일한 패키지 및/또는 다이 상에 있다. 여기서, 코어의 일부(온-코어(on-core) 부분)(110)는 메모리(175) 또는 그래픽 디바이스(180)와 같은 다른 디바이스와 인터페이싱하기 위한 하나 이상의 컨트롤러(들)를 포함한다. 그러한 디바이스와 인터페이싱하기 위한 상호접속 및 컨트롤러를 포함하는 구성은 종종 온-코어(또는 언(un)-코어 구성)으로서 지칭된다. 예로서, 온-칩 인터페이스(110)는 온-칩 통신을 위한 링 상호접속 및 오프-칩 통신을 위한 고속 직렬 포인트-투-포인트 링크(105)를 포함한다. 그러나, SOC 환경에서, 네트워크 인터페이스, 코-프로세서, 메모리(175), 그래픽 프로세서(180), 및 임의의 다른 알려진 컴퓨터 디바이스/인터페이스와 같은 더 많은 디바이스가 단일 다이 또는 집적 회로상에 통합되어 고 기능 및 낮은 전력 소모를 제공하는 소형의 폼 팩터를 제공할 수 있다.
일 실시예에서, 프로세서(100)는 컴파일러, 최적화, 및/또는 애플리케이션 코드(176)를 컴파일, 변환, 및/또는 최적화하기 위한 변환기 코드(177)를 실행하여, 여기에 설명된 장치 및 방법을 지원하거나 그들과 인터페이싱할 수 있다. 컴파일러는 종종 소스 텍스트/코드를 타겟 텍스트/코드로 변환하기 위한 프로그램 또는 프로그램들의 세트를 포함한다. 일반적으로, 컴파일러를 사용한 프로그램/애플리케이션 코드의 컴파일(compilation)이 다중 단계 및 경로에서 수행되어 하이-레벨 프로그래밍 언어 코드를 저-레벨 머신 또는 어셈블리 언어 코드로 변환한다. 그러나, 단일 경로 컴파일러가 또한 단순한 컴파일에 사용될 수도 있다. 컴파일러는 임의의 알려진 컴파일 기술을 사용하고, 어휘 분석, 전처리, 파싱(parsing), 의미 분석, 코드 생성, 코드 변환, 및 코드 최적화와 같은 임의의 알려진 컴파일러 연산을 수행할 수 있다.
더 큰 컴파일러는 종종 다중 단계(phase)를 포함하지만, 가장 흔하게는 이들 단계는 두 개의 일반적인 단계: (1) 전단(front-end), 즉, 일반적으로, 구문 프로세싱, 의미 프로세싱, 및 몇몇 변환/최적화가 발생할 수 있는 곳, 및 (2) 후단(back-end), 즉, 일반적으로, 분석, 변환, 최적화 및 코드 생성이 발생하는 곳에 포함된다. 몇몇 컴파일러는 컴파일러의 전단과 후단 사이의 경계(delineation)의 블러링(blurring)을 나타내는 중간을 참조한다. 결과적으로, 컴파일러의 삽입, 연관, 생성, 또는 다른 동작에 대한 참조는 임의의 전술한 단계 또는 경로뿐만 아니라 컴파일러의 임의의 다른 알려진 단계 또는 경로에서 발생할 수 있다. 예로서, 컴파일러는, 컴파일의 전단 단계로의 호출/연산의 삽입 및 변환 단계 동안 호출/연산을 저-레벨 코드로 변환하는 것과 같이, 잠재적으로 연산, 호출, 기능 등을 컴파일의 하나 이상의 단계에 삽입한다. 동적 컴파일 동안, 컴파일러 코드 또는 동적 최적화 코드는 그러한 연산/호출을 삽입할 수 있을 뿐만 아니라, 런타임 동안 실행하기 위한 코드를 최적화할 수 있다. 특정의 예시적인 예로서, 이진 코드(이미 컴파일링된 코드)는 런타임 동안 동적으로 최적화될 수 있다. 여기서, 프로그램 코드는 동적 최적화 코드, 이진 코드, 또는 그들의 조합을 포함할 수 있다.
컴파일러와 유사하게, 이진 변환기와 같은 변환기는 코드를 정적으로 또는 동적으로 변환하여 코드를 최적화 및/또는 변환한다. 따라서, 코드, 애플리케이션 코드, 프로그램 코드, 또는 다른 소프트웨어 환경의 실행에 대한 참조는: (1) 프로그램 코드를 컴파일하거나, 소프트웨어 구조를 유지하거나, 다른 동작을 수행하거나, 코드를 최적화하거나, 코드를 변환하기 위한 컴파일러 프로그램(들), 최적화 코드 최적화기 또는 변환기의 동적 또는 정적 실행; (2) 최적화/컴파일된 애플리케이션 코드와 같은 연산/호출을 포함하는 메인 프로그램 코드의 실행; (3) 소프트웨어 구조를 유지하거나, 다른 소프트웨어 관련 동작을 수행하거나, 코드를 최적화하기 위한 메인 프로그램 코드와 관련된 라이브러리와 같은 다른 프로그램 코드의 실행; 또는 (4) 이들의 조합을 참조할 수 있다.
단일 프로세서 또는 시스템-온-칩(SoC)에 더 많은 수의 코어가 집적됨에 따라, 코어 상호접속 및 캐시 메모리 조직이 하나의 결정적인 성능이 되었다. 온-칩 통신 패브릭은 풀 링 및 메시 토폴로지와 같은 다수의 상호접속 토폴로지를 구비한다. 대부분의 통신 패브릭에서, 각각의 상호접속 스톱은 코어 및 로컬 LLC(last level cache) 부분 또는 슬라이스에 의해 공유된다. 이들 LLC 슬라이스는 단일 코어를 위한 프라이빗 캐시(private cache) 메모리 또는 공유 캐시 메모리로서 동적으로 제어가능하게 조직될 수 있다. 프라이빗 모드에서, 코어에 의해 사용되는 데이터는 자신의 로컬 LLC 슬라이스에 위치되고 액세스 레이턴시가 낮다. 그러나, 프라이빗 모드에서, 코어는 단지 LLC의 작은 부분만을 액세스할 수 있고, 코히런트 트래픽 오버헤드가 도입되는데, 이것은 언코어 상호접속 대역폭의 상당 부분을 점유할 수 있다. 한편, 공유 모드는 전체 LLC가 모든 코어에 액세스할 수 있게 한다. 그러나, 코어의 요청된 데이터가 원격 노드의 LLC 슬라이스에 있을 수 있기 때문에, 액세스 레이턴시가 매우 높을 수 있다.
그룹 공유는 프라이빗 모드와 공유 모드 사이의 트레이드오프 모드이다. 그룹 공유 모드에서, LLC 슬라이스는 복수의 그룹으로 조직된다. 그룹의 LLC 슬라이스는 이들 슬라이스와 연관된 코어들 사이에서 공유되지만, 상이한 그룹의 LLC 슬라이스는 주어진 그룹 외부의 코어에 대해서는 프라이빗하다. 각각의 코어는 동일한 그룹의 자신의 이웃 노드(들)의 LLC 슬라이스를 액세스하고, 상이한 그룹들 사이에서 캐시 코히런스가 유지된다. 현재 대부분의 그룹 공유 모드는 물리적 통신 패브릭에 의해 구현되는데, 이것은 유연하지도 않고 스케일러블하지도 않다. 대신, 주어진 그룹핑은 제조시에 고정된다. 더욱이, 현재의 그룹 공유 모드는 코히런트 트래픽 문제를 해결하지 못한다.
실시예는 노드의 식별자(노드 ID)가 어드레싱 스킴의 일부로서 포함되어 LLC를 어드레싱하는 그룹 공유 모드에 따라 공유 캐시 메모리의 동적 공유를 가능하게 한다. 예로서, 이 식별자는 그룹 공유 LLC를 구현하기 위해 LLC 인덱스 내에 포함될 수 있다. 이 노드 ID는, 여기서 사용되는 노드 ID가 시스템 소프트웨어에 투명(tranparent)하고 따라서 코어 식별자, APIC(advanced programmable interrupt controller) ID, 또는 시스템의 하드웨어 또는 소프트웨어에 의해 사용되는 다른 식별자와 구별됨에 따라, 주어진 노드를 식별하는데 사용되는 다른 표시자와는 독립적일 수 있다는 것을 또한 유의하자. 더욱이, 이 노드 ID는 모든 노드 및 코어 및 LLC 슬라이스를 포함한 자신에 포함된 컴포넌트와 연관된다는 것을 이해하자.
노드 식별자를 LLC 해시 인덱스 알고리즘의 부분으로서 사용하는 경우, LLC 슬라이스는 그들의 노드 ID에 적어도 부분적으로 기초하여 몇 개의 그룹으로 분할될 수 있다. 다음에, 단일 그룹의 LLC 슬라이스는 그룹으로서 내부적으로 공유되고, 상이한 그룹 간에 프라이빗하게 된다. 또한, 다양한 실시예에서, 그룹핑 모드는 (작업부하 특성에 관한) 작업부하 실행시간 프로파일링, 상호접속 트래픽 등과 같은 다양한 성능 특성에 기초하여 하나 이상의 그룹의 크기를 동적으로 조정하는데 유연할 수 있다. 다른 예는 LLC 액세스율/실패율(miss rate), 캐시 라인의 상태 통계 등을 포함한다. 실시예는 또한 캐시 코히런스 트래픽을 절약할 수 있다.
동적 캐시 그룹핑이 발생하는 내용을 더 잘 이해하기 위해, 도 2를 참조한다. 도 2에서, 프로세서(200)는 상위 레벨로 도시되어 있다. 상이한 실시예에서, 프로세서(200)는, 예를 들면, 단일 반도체 다이 상에 형성된 멀티코어 프로세서 또는 또 다른 유형의 멀티코어 프로세서의 형태를 취할 수 있다. 또 다른 실시예에서의 프로세서(200)는 단일 반도체 다이 상에 또한 형성된 SoC일 수 있다.
도 2에 도시된 상위 레벨에서, 복수의 노드(2100-210n)가 제공된다. 그러한 노드의 수는 실시예에 따라 변동될 수 있다는 것을 이해하자. 여기서 논의의 목적으로, 16개의 노드를 가정한다. 물론 다른 실시예에서, 더 큰 또는 더 작은 수의 개별 노드가 제공될 수 있다. 노드는 여기서 타일로서 동일하게 지칭되는데, 이것은 적어도 하나의 프로세싱 요소 및 캐시 메모리 계층의 하나 이상의 레벨을 포함할 수 있다. 도 2의 예에서, 각각의 노드(210)는 프로세서 코어 및/또는 고정 기능 프로세싱 유닛과 같은 다른 전용 프로세싱 회로를 포함한다. 다른 실시예에서, 프로세싱 코어는 이종 또는 동종일 수 있다.
부가하여, 각각의 노드(210)는 캐시 계층의 적어도 일부를 포함한다. 예를 들면, 실시예에서, 각각의 노드는 로컬 코어에 의해서만 액세스되는 프라이빗 캐시 메모리를 포함한다. 더욱이, 각각의 노드는 또한 LLC의 부분과 같은 공유 캐시 메모리의 일부를 포함한다. 각각의 노드(210)는 상호접속 패브릭(220)을 통해 프로세서의 다른 요소와 통신할 수 있도록 구성되는 라우터(205)를 더 포함한다. 도 2에 도시된 실시예에서, 상호접속 패브릭(220)은 2차원 메시 상호접속이다. 그러나, 또 다른 유형의 메시 토폴로지, 링 토폴로지, 3차원 토폴로지 등을 포함하는 상이한 유형의 상호접속이 대신 제공될 수 있다.
도 2에 도시된 실시예에서, 각각의 노드(210)는 대응 노드를 고유하게 식별하는 노드 식별자와 연관된다. 이러한 노드 ID 생성 및 사용의 세부사항은 동적 캐시 그룹핑 배열과 관련하여 여기서 설명된다. 물론, 도 2의 실시예에서 이러한 상위 레벨로 도시되었지만, 부가의 회로가 또한 제공될 수 있다는 것을 이해하자. 예를 들면, 도 2에서는 도시의 용이성을 위해 생략되었지만, 코어 동작과는 관계가 없는 회로를 포함하는 프로세서의 언코어 부분이 있다. 그러한 회로는 많은 다른 주변 디바이스 중에서 오프-칩 인터페이스, 전력 제어 메커니즘을 포함할 수 있다.
프로세서 배열의 추가의 예시로서, 이제, 도 3을 참조하며, 도 3은 실시예에 따른 프로세서의 일부의 블록도가 도시되어 있다. 도 3에 도시된 바와 같이, 프로세서(300)는 더 상세한 레벨에서 도시되어 있다. 특히, 도 3의 실시예에는 캐시 컨트롤러(350)에 접속되어 있는 상호접속 패브릭(340)에 접속된 단일 노드 또는 타일(310)이 도시되어 있다. 캐시 컨트롤러(350)가 단일의 독립적인 회로로서 도시되어 있지만, 다른 실시예에서, 캐시 컨트롤러는 프로세서의 상이한 타일을 통해 분산될 수 있다.
도 3의 실시예에서, 타일(310)은, 몇몇 실시예에서, 멀티스레드 프로세서 코어일 수 있는 코어(315)를 포함한다. 여기서 설명되는 동적 캐시 제어를 수행하기 위해, 코어(315)는 코어 에이전트(318)를 구비하며, 이 코어 에이전트(318)는, 레지스터와 같은 로컬 스토리지(319)에 저장될 수 있는 타일의 노드 ID를 사용하여 동적 캐시 어드레싱을 수행하기 위한 로직을 포함하는 하드웨어, 소프트웨어, 펌웨어 또는 그들의 조합일 수 있다. 요청된 데이터로의 고속 액세스를 가능하게 하기 위해, 코어(315)는 코어(315)에 의해서만 사용하기 위한 데이터를 저장하는 프라이빗 캐시(320)에 접속된다. 또 다른 실시예에서, 프라이빗 캐시(320)는 코어(315) 내부에 있을 수 있고, 또 다른 레벨의 멀티레벨 캐시 계층은 코어(315)와 LLC 간을 접속할 수 있다. 도 3의 실시예에는, 프라이빗 캐시(320)가 타일(310)에 포함된 분산형 공유 캐시 메모리의 개별 부분인 LLC(325)에 접속되는 멀티-레벨 캐시 계층이 도시되어 있다. 동적 동작에서, LLC 슬라이스(325)는 코어(315)에만 액세스 가능한 프라이빗 캐시로서 동적으로 구성될 수 있거나, 또는 그룹의 다중 코어에 액세스 가능한 공유 캐시로서 동적으로 구성될 수 있다. 따라서, 프라이빗 또는 공유로서 슬라이스의 상이한 모드의 동작 및 배열이 시스템 동작 동안 동적으로 발생한다.
프로세서(300)의 다른 부분과의 통신을 가능하게 하기 위해, 타일(310)은, 타일(310) 내의 컴포넌트와 다른 타일 및 프로세서(300)의 다른 회로 사이에 트랜잭션 및 다른 정보를 통신하도록 구성된 라우터(330)를 더 포함한다.
도 3을 다시 참조하면, 타일(310)은 상호접속 패브릭(340)을 통해 캐시 컨트롤러(350)에 접속된다. 일반적으로, 캐시 컨트롤러(350)는 적어도 분산형 LLC의 동작을 제어하기 위한 제어 로직을 포함한다. 이를 위해, 캐시 컨트롤러(350)는 여기서 설명된 바와 같이 일반적으로 동적 캐시 슬라이스 그룹핑을 수행하도록 구성되는 동적 그룹핑 로직(355)을 포함한다. 더욱이, 캐시 컨트롤러(350)는, 프로세서를 통과한 데이터의 뷰(view)가 코히어런트 상태로 남아있도록 캐시 코히런트 동작을 수행하게 구성될 수 있는 캐시 코히런시 로직(360)을 포함한다. 캐시 코히런트(350)는 캐시 메모리의 상이한 부분에 대해 액세스 요청을 생성하도록 구성되는 액세스 요청 생성기(365)를 더 포함한다. 여기서 설명되는 바와 같이, 생성기(365)는 여기서 설명되는 노드 ID-기반 어드레싱 스킴을 레버리징하는 액세스 어드레스를 갖는 액세스 요청을 생성할 수 있다. 노드 매핑 테이블(370)은 각각의 노드에 대한, 그리고 대응하는 노드에 대한 현재의 노드 ID를 식별하는 엔트리를 포함할 수 있다. 도 3의 실시예에서 이러한 상위 레벨로 도시되어 있지만, 본 발명의 범위는 이에 제한되는 것은 아니다.
캐시 메모리 어드레싱 스킴 내에 노드 식별자를 포함하는 상이한 방법은 다른 실시예에서 구현될 수 있다. 그러나, 일 실시예의 설명의 목적을 위해, 캐시 슬라이스의 글로벌 세트 인덱스는 다음과 같을 수 있다.
글로벌 LLC 세트 인덱스 = 로컬 LLC 세트 인덱스 + 노드 ID.
이제, 도 4를 참조하면, 실시예에 따라 공유 캐시 메모리에 대한 세트 인덱스의 블록도가 도시되어 있다. 도 4a에 도시된 바와 같이, 글로벌 세트 인덱스(400)는 노드 ID 필드(410) 및 로컬 세트 인덱스 필드(420)로 형성된다. 이들 구성 필드를 사용하여, 글로벌 세트 인덱스(400)가 생성된다. (공유 캐시 메모리의 하나 이상의 선택된 부분을 액세스하는데 사용되는 액세스 어드레스에 대응하는) 이러한 세트 어드레스의 생성은 캐시 컨트롤러의 액세스 생성기 또는 코어의 코어 에이전트에서 발생할 수 있다; 그러나, 이러한 기능은 다른 실시예에서는 상이한 위치에서 발생할 수 있다.
도 4a에 도시된 바와 같이, LLC 슬라이스의 글로벌 세트 인덱스는 로컬 세트 인덱스와 결합된 노드 ID와 동일하다. 이러한 세트 어드레싱 모드는 LLC 슬라이스 조직의 공유 모드에서 활성이다.
실시예에서, 요청 어드레스는 태그 부분, log2(totalSetNum)의 폭을 갖는 인덱스 부분, 및 log2(blockSize)의 폭을 갖는 블록 오프셋 부분과 함께 수신된다. 여기서 설명된 그룹 어드레싱 모드 동작을 사용하는 것 대신, 액세스 요청 어드레스는 태그 부분, log2(totalSetNum/groupNum)의 폭을 갖고 적어도 노드 ID의 일부를 포함하는 인덱스 부분, 및 log2(blockSize)의 폭을 갖는 오프셋 부분을 포함한다.
이제, 도 4b를 참조하면, 본 발명의 실시예에 따라 글로벌 세트 인덱스를 사용하여 생성되는 액세스 어드레스가 도시되어 있다. 보다 상세하게, 도 4b는 태그 필드(455), 인덱스 필드(460), 및 오프셋 필드(465)로 형성된 액세스 어드레스(450)를 도시한다. 볼 수 있는 바와 같이, 인덱스 필드(460) 자체는 노드 부분(462) 및 인덱스 부분(464)으로 형성된다. 더욱이, 노드 ID에 대응하는 노드 부분(463) 자체는 그룹 ID 서브-필드(463a) 및 서브-노드 ID 서브-필드(463b)로 형성된다. 따라서, 실시예에서, 노드 ID는 (그룹 ID를 저장하기 위한) 제1 필드 및 (서브-노드 ID를 저장하기 위한) 제2 필드를 포함하는 구성 부분으로 형성될 수 있다. 결과적으로, 인덱스 부분(464)은 메모리 요청 어드레스로부터 얻어진 인덱스 정보를 포함한다. 따라서, 특정 실시예에서, 노드 ID 자체는 2개의 부분: 그룹-ID 서브-필드 및 서브-노드 ID 서브-필드로 분할될 수 있다.
물론, 이러한 특정 어드레싱 스킴은 설명의 목적으로 도시되어 있지만, 동적 어드레싱 스킴은 상이한 실시예에서 상이한 노드 ID가 가능한 바에 따라 다른 형태를 취할 수 있다.
종래의 LLC 인덱스와 비교하면, 요청 어드레스는 LLC 인덱스에 더 작은 비트를 구성하고, 노드 ID는 그룹 ID에 기여한다. 도 4b의 실시예에서 볼 수 있는 바와 같이, 노드 ID는 LLC 세트 인덱스의 남아있는 최상위 부분을 형성한다.
인덱스 알고리즘을 글로벌 LLC 슬라이스 어드레싱 모드와 결합하면, 동일한 그룹 ID를 갖는 노드는 기존 통신 패브릭에 어떠한 변경도 없이 그들의 LLC 슬라이스를 공유하기 위한 그룹을 형성한다. 여기서 설명되는 인덱스 알고리즘을 사용하면, 공유될 LLC 캐시 슬라이스의 수(여기서는 그룹 수로서 지칭됨)는 그룹 ID 필드 폭을 조정함으로써 변경될 수 있다. 그러한 변경은, 예를 들면, 캐시 컨트롤러 또는 동적 동작 조건에 기초한 다른 제어 로직에 의해 동적으로 수행될 수 있다.
더욱이, 그룹 ID 서브-필드 폭이 0일 때, LLC 슬라이스는 공유 모드로 스위칭된다; 그리고, 서브-노드 ID 서브-필드 폭이 0일 때, 모든 LLC 슬라이스가 스위칭되어 동적으로 프라이빗(private)된다.
실시예는 작업부하 특성을 일치시키기 위한 실시간 프로파일에 기초하여 캐시 그룹핑에 대한 조정을 가능하게 할 수 있다. 예를 들면, 그룹 수가 감소되는 경우, 각각의 코어는 더 큰 LLC 용량을 갖고 더 많은 데이터가 공유될 수 있다. LLC 실패 트래픽이 낮고 코히런트 트래픽이 낮은 대신, 그룹 수는 증가되어 요청자 인근의 LLC 슬라이스에 저장될 데이터가 액세스 레이턴시를 짧게 할 수 있다.
따라서, LLC 그룹핑 모드는 동적으로 조정될 수 있다. 더욱이, 그룹들은 한 그룹이 (요청자 인근의) 공간적으로 가까운 LLC 슬라이스들로 형성되어 액세스 레이턴시를 줄이도록 배열될 수 있다. 실시예는 언코어 통신 패브릭 효율에 있어 작업부하 기반 향상을 가능하게 할 수 있다. 부가하여, 실시예는 상이한 LLC 실패율에 대해 LLC 조직을 동적으로 최적화한다.
실시예는 다른 그룹 공유 모드에 동일하게 적용한다. 주어진 노드 ID가 한 그룹에 할당되면, 동일한 노드 ID는, 각 그룹의 LLC 세트 어드레싱 모드가 동일하기 때문에, 다른 그룹에서 동일한 서브-노드(0)에 매핑된다. 따라서, 실시예는 그룹 중에서 코히런트 트래픽을 추가로 감소시킬 수 있다. 예를 들면, LLC 슬라이스의 라인이 기입될 때, 프로브-무효 메시지는 다른 그룹의 동일한 서브-노드 ID를 갖는 노드로 단지 전송되고 나머지 모든 노드로는 전송되지 않게 되어, 언코어 상호접속 대역폭을 절감한다.
다시 도 2를 참조하면, 실시예에서 16개의 코어가 4개의 그룹으로 분할되는 것이 도시되어 있는데, 이 그룹에서 노드 ID의 2비트의 MSB(most significant bit)가 그룹 ID로 사용된다(2비트의 LSB(lower significant bit)가 서브-노드 ID임). 본 예에 따른 각각의 그룹에서, 4개의 코어는 자신들의 LLC 슬라이스를 공유하고, 이것은 각각의 코어가 더 큰 LLC 용량을 액세스할 수 있게 한다. 부가하여, 그룹의 4개의 코어는 이웃하게 되는데, 이것은 요청 데이터가 원격 노드 상에 위치하지 않는다는 것을 보장한다. 더욱이, 코히런트 트래픽은 단지 동일한 서브-노드 ID(노드ID의 LSB 2비트)를 갖는 노드 중에서만 발생하게 되고, 따라서, 프로브/스누프(probe/snoop) 메시지와 같은 캐시 코히런시 메시지는 많아야 3개의 타겟 노드로만 전송된다.
전술한 바와 같이, 그룹의 수가 동적으로 조정되어 상이한 작업부하에 대해 더 좋은 성능을 실현할 수 있다. 예를 들면, 16개의 코어에 대한 작업부하는 더 작은 풋프린트(footprint)를 갖고 데이터가 공유되지 않는다면, 16개의 코어는 8개의 그룹 또는 심지어 16개의 그룹으로 분할될 수 있다. 16개의 코어에 대한 작업부하가 큰 풋프린트를 갖고 더 많은 데이터가 공유된다면, 16개의 코어는 2개의 그룹 또는 심지어 하나의 그룹으로 분할될 수 있다. 따라서, 실시예에 따른 LLC 인덱싱 알고리즘은 높은 유연성 및 낮은 오버헤드를 갖는 동적 그룹핑 조정을 가능하게 할 수 있다.
이제, 도 5를 참조하면, 본 발명의 실시예에 따른 방법의 흐름도가 도시되어 있다. 특히, 도 5는 그룹 어드레싱 모드를 선택하고 선택된 그룹 어드레싱 모드에 의해 표시된 어드레싱 스킴을 사용하여 캐시 메모리 트래잭션을 프로세싱하는 방법을 도시한다. 임의의 구현예에서, 도 5의 다수의 부분은, 캐시 컨트롤러, 코어 에이전트와 같은 코어 내의 로직 및 로컬 캐시 회로(예를 들면, 로컬 캐시 컨트롤러)를 포함하는 프로세서의 상이한 컴포넌트에 의해 수행될 수 있다.
도 5에서 볼 수 있는 바와 같이, 방법(500)은 캐시 메모리에 대한 그룹 어드레싱 모드를 결정(510)하는 것에 의해 시작된다. 이 결정은 정적 또는 동적 값에 기초할 수 있다. 예를 들면, 리셋에 대한 시스템의 파워 업 시에, 예를 들면, BIOS(basic input/output system) 또는 다른 시스템 소프트웨어 내에 표시된 바와 같이, 구성 값에 기초하여 LLC에 대해 디폴트 그룹 어드레싱 모드가 선택될 수 있다. 몇몇 구현예에서, BIOS는 공유된 LLC(및 그룹 수) 또는 프라이빗 LLC 슬라이스에 대한 선호도(preference)를 나타내는 디폴트 시스템 값을 저장하고 제공할 수 있다. 대안으로 또는 부가하여, 그룹 어드레싱 모드의 유형은, 임의의 애플리케이션이 프라이빗 캐시 또는 공유된 캐시 메모리 배열에 더 적절한 작업부하를 생성함에 따라, 특정 애플리케이션의 실행에 기초하여 선택될 수 있다. 애플리케이션의 이전 실행으로부터의 통계적 또는 다른 정보에 기초하여, 애플리케이션 개시시에, LLC는 프라이빗 모드 또는 공유 모드(및 그룹 당 노드의 선택된 수)를 위해 적절히 구성될 수 있다.
다시 도 5를 참조하면, 블록(510)에서의 이러한 결정에 기초하여, 제어는 다음 블록(520)으로 넘어가며, 이 블록(520)에서, 노드 ID는 각각의 캐시 메모리와 연관될 수 있다. 실시예에서, 캐시 컨트롤러와 같은 중앙 제어 로직은 프로세서의 각각의 노드에 대해 노드 ID를 생성할 수 있다. 이들 노드 ID는 캐시 컨트롤러의 노드 ID 맵핑 테이블에 저장될 수 있다. 더욱이, 캐시 컨트롤러는 LLC 슬라이스 및 코어를 포함하는 적절한 회로에 노드 ID를 통신할 수 있다. 이 방식에서, 트랜잭션을 생성할 때, 이들 컴포넌트는 시스템의 정렬을 이해한다. 이 시점에서, 캐시는 동작을 위해 적절히 구성된다.
도 5를 다시 참조하면, 나머지 동작은 인커밍 요청 트랜잭션이 수신되는 블록(530)에서 수행될 수 있다. (예를 들면) 원격 에이전트로부터 캐시 컨트롤러에 수신될 수 있는 이러한 인커밍 요청 트랜잭션에 응답하여, 액세스 어드레스가 생성될 수 있다(블록 540). 보다 상세하게, 이러한 인커밍 요청 트랜잭션은 시스템의 정상 어드레싱 스킴에서 요청 어드레스를 포함한다(즉, 이 요청 어드레스는 여기서 설명되는 노드 ID 기반 그룹 어드레싱을 인식하지 못한다). 따라서, 블록(540)에서, 이러한 인커밍 요청 트랜잭션 요청 어드레스 및 노드 식별자 양자 모두를 사용하는 액세스 어드레스가 생성될 수 있다. 실시예에서, 액세스 어드레스는 도 4b에 도시된 어드레스와 같이 생성될 수 있다. 다음 다이아몬드(550)에서, 액세스 어드레스가 제1 캐시 메모리 부분에 히트(hit)하는지가 결정될 수 있다. 히트한다면, 제어는 히트 어드레스로부터 얻어진 요청된 데이터가 요청자에게 리턴되는 블록(555)으로 넘어간다.
그렇지 않고 이러한 제1 캐시 메모리 부분에서 액세스 실패가 발생한다면, 제어는 대신 블록(560)으로 넘어가고, 이 블록(560)에서, 캐시 코히런시 메시지가 생성되어 전송된다. 보다 상세하게, 이 캐시 코히런시 메시지는 제1 캐시 메모리 부분와 공통의 서브-노드 식별자를 갖는 다른 캐시 메모리 부분으로 전송된다. 이 캐시 코히런시 메시지는 제1 캐시 메모리 부분과 연관된 로컬 로직과 같은 상이한 컴포넌트에 의해 생성될 수 있다는 것을 유의하자. 대안으로, 제1 캐시 메모리 부분에서의 실패가 글로벌 캐시 컨트롤러에 지시되고 이 컨트롤러는 캐시 코히런시 트래픽을 생성할 수 있다.
도 5를 다시 참조하면, 다음에, 다이아몬드(570)에서, 캐시 코히런시 메시지의 임의의 타겟(즉, 동일한 서브-노드 ID를 갖는 다른 캐시 메모리 부분)이 데이터를 포함하는지가 결정될 수 있다. 포함한다면, 블록(575)에서, 요청된 데이터는 요청자에게 리턴될 수 있다. 포함하지 않는다면, 블록(580)에서, 요청 메시지는 요청된 데이터를 얻기 위해 시스템 메모리와 같은 메모리 계층의 추가의 부분으로 전달될 수 있다(이 요청에서의 요청 어드레스는 오리지널 요청이고 노드 ID 기반 어드레스가 아니라는 것을 유의하자). 도 5의 실시예에서 이 상위 레벨로 도시되었지만, 본 발명의 범위는 이에 한정되는 것이 아니다.
이제, 도 6을 참조하면, 본 발명의 실시예에 따라 캐시 메모리를 동적으로 제어하기 위한 방법의 흐름도가 도시되어 있다. 도 6에 도시된 바와 같이, 방법(600)은, 실시예에서, 글로벌 캐시 컨트롤러에 의해 수행될 수 있고 공유 또는 프라이빗 모드가 되도록 캐시 메모리 배열을 동적으로 제어하는데 사용될 수 있다.
방법(600)은 작업부하 특성 및 상호접속 트래픽에 관한 성능 메트릭 정보를 수신(610)함으로써 시작된다. 그러한 작업부하 특성은, 실시예에서, 큰 또는 작은 풋프린트, 및/또는 공유 또는 프라이빗 데이터 세트를 포함한다. 성능 정보는, 실시예에서, LLC 액세스율, LLC 실패율, 캐시 라인의 상태 통계를 포함한다. 실시예에서, 성능 메트릭 정보는, 예를 들면, 그러한 코어의 성능 모니터링 유닛으로부터 하나 이상의 코어에 의해 수신될 수 있다. 한편, 상호접속 트래픽 정보는 상호접속 제어 로직으로부터 수신될 수 있다.
그룹핑 모드는 이러한 정보에 적어도 부분적으로 기초하여 결정될 수 있다(620). 예를 들면, 캐시 컨트롤러는, 상호접속 트래픽이 낮고 작업부하가 프라이빗의 작은 데이터 풋프린트이면, 각각의 그룹에서 상대적으로 적은 수(예를 들면, 2)의 노드를 갖는 그룹 모드를 선택하도록 구성될 수 있다. 대신, 상호접속 트래픽이 높고 작업부하가 공유된 큰 데이터 풋프린트 성능 작업부하라면, 각각의 그룹에서 더 큰 수(예를 들면, 4 이상)의 노드를 갖는 그룹 모드가 수립될 수 있다. 대안으로, 대부분의 코어가 단지 작은 LLC 용량을 필요로 한다는 것을 나타내는 프로파일링 정보에 기초하여, 프라이빗 모드가 구성될 수 있다. 프라이빗 모드에서, 코어의 요청된 데이터는 로컬 LLC 슬라이스에 캐싱되어, 액세스 레이턴시를 줄이고 상호접속 구조로의 데이터 전송에 대한 전력을 절약할 수 있다.
도 6을 참조하면, 다음 다이아몬드(630)에서, 이러한 그룹핑 모드는 현재의 그룹핑 모드로부터의 변경인지가 결정된다. 아니라면, 추가의 액션은 취해지지 않는다. 그룹 어드레싱 모드에 대한 변경이라면, 제어는 캐시 메모리가 플러싱될 수 있는 블록(640)으로 넘어간다. 즉, 상이한 어드레싱 스킴이 미래에 사용될 것이기 때문에, 캐시 메모리는 불일치가 없고 코히런시도 발생하지 않는다는 것을 보장하도록 플러싱된다.
다음에, 블록(650)에서, 노드 ID는 그룹핑 모드에 기초하여 동적으로 업데이트될 수 있다. 실시예에서, 이러한 업데이트는 캐시 컨트롤러에서 노드 ID 맵핑 테이블을 업데이트하고 새로운 노드 ID를 다수의 노드 자신들에게 통신(블록(660))하는 것을 포함하고, 여기서, 값은 그들이 캐시 액세스 어드레스를 생성하는데 사용될 수 있도록 (예를 들면, 캐시 로직 또는 코어 에이전트 내의) 노드의 휘발성 스토리지에 저장될 수 있다. 도 6의 실시예에서 이러한 상위 레벨로 도시되어 있지만, 본 발명의 범위는 이에 한정되는 것이 아니라는 것을 이해하자.
다음에, 도 7을 참조하면, 실시예에 따른 시스템 온-칩(SOC)의 실시예가 도시되어 있다. 특정의 예시적 예로서, 사용자 장비(UE)에 SOC(2000)가 포함되어 있다. 일 실시예에서, UE는 핸드헬드 폰, 스마트폰, 태블릿, 울트라 씬 노트북, 광대역 어댑터를 구비한 노트북, 또는 임의의 다른 유사한 통신 디바이스와 같은, 통신하기 위해 최종 사용자에 의해 사용될 임의의 디바이스를 지칭한다. 종종 UE는 잠재적으로 사실상 GSM 네트워크에서 모바일 스테이션(MS)에 대응하는 기지국 또는 노드에 접속된다.
여기서, SOC(2000)는 2개의 코어(2006 및 2007)를 포함한다. 전술한 논의와 유사하게, 코어(2006 및 2007)은 Intel® Architecture Core™ 기반 프로세서, AMD(Advanced Micro Device, Inc.) 프로세서, MIPS 기반 프로세서, ARM 기반 프로세서 디자인, 또는 그의 소비자뿐만 아니라 그들의 라이센스를 갖는 자 또는 사용자와 같은 Instruction Set Architecture에 부합할 수 있다. 코어(2006 및 2007)는 시스템(2000)의 다른 부분과 통신하기 위해 버스 인터페이스 유닛(2009) 및 L2 캐시(2010)와 연관되어 있는 캐시 컨트롤(2008)에 접속된다. 상호접속(2010)은 IOSF, AMBA와 같은 온-칩 상호접속 또는 여기서 설명된 하나 이상의 양상을 잠재적으로 구현하는 전술한 다른 상호접속을 포함한다.
상호접속(2010)은, SIM(Subscriber Identity Module) 카드와 인터페이싱하기 위한 SIM(2030), SOC(2000)를 개시하고 부팅하기 위해 코어(2006 및 2007)에 의해 실행하기 위한 부트 코드를 유지하는 부트 ROM(2035), 외부 메모리(예를 들면, DRAM(2060)와 인터페이싱하기 위한 SDRAM 컨트롤러(2040), 비휘발성 메모리(예를 들면, 플래시(2065))와 인터페이싱하기 위한 플래시 컨트롤러(2045), 주변장치와 인터페이싱하기 위한 주변장치 컨트롤러(2050)(예를 들면, 직렬 주변장치 인터페이스), 입력(예를 들면, 터치 인에이블된 입력)을 표시하고 수신하기 위한 비디오 코덱(2020) 및 비디오 인터페이스(2025), 그래픽 관련 계산을 수행하기 위한 GPU(2015) 등과 같은 다른 컴포넌트에 통신 채널을 제공한다. 임의의 이들 인터페이스는 여기서 설명된 양상을 통합할 수 있다.
부가하여, 시스템은 블루투스 모듈(2070), 3G 모뎀(2075), GPS(2080) 및 WiFi(2085)와 같은 통신을 위한 주변 장치를 도시한다. 또한, 시스템에는 전력 컨트롤러(2055)가 포함된다. 전술한 바와 같이, UE는 통신을 위한 무선 통신 장치(radio)를 포함한다. 결과적으로, 이들 주변 장치 통신 모듈이 모두 요구되는 것은 아니다. 그러나, UE에 외부 통신을 위한 몇몇 형태의 무선 통신 장치가 포함되어야 한다.
다음의 예는 추가의 실시예에 관한 것이다. 일 예에서, 장치는 제1 코어와 연관될 캐시 메모리의 제1 부분을 포함하고, 제1 캐시 메모리 부분은 분산형 캐시 메모리의 일부이고 제1 코어에 대한 프라이빗 캐시 메모리 및 어드레싱 모드에 따라 제1 코어를 포함하는 복수의 코어에 의해 공유되는 공유 캐시 메모리 중 하나가 되도록 동적으로 제어된다.
실시예에서, 캐시 컨트롤러는 제1 캐시 메모리 부분을 동적으로 제어한다. 캐시 컨트롤러는 제1 코어 상에서 실행되는 작업 부하에 적어도 부분적으로 기초하여 제1 캐시 메모리 부분을 동적으로 제어할 수 있고, 또한 캐시 컨트롤러는 어드레싱 모드를 동적으로 수정할 수 있다. 캐시 컨트롤러는 요청과 함께 요청 어드레스를 수신하고, 요청 어드레스 및 제1 코어와 연관 노드 식별자를 사용하여 제1 캐시 메모리 부분을 액세스하기 위한 어드레스를 생성한다. 실시예에서, 어드레스는 태그 부분, 노드 식별자 및 요청 어드레스의 일부를 포함하는 인덱스 부분, 및 오프셋 부분을 포함한다. 노드 식별자는, 실시예에서, 제1 코어 및 제1 코어를 식별하기 위한 서브-노드 식별자를 포함하는 코어들의 그룹을 식별하기 위한 그룹 식별자를 포함하고, 노드 식별자는 고유 번호이고 그룹 식별자 및 서브-노드 식별자는 비고유 번호이다.
제1 캐시 메모리 부분이 공유 캐시 메모리 모드로 구성되는 경우, 캐시 컨트롤러는 캐시 코히런시 메시지를, 복수의 코어 중 제1 코어와 공통의 서브-노드 식별자를 갖는 코어에게만 전송할 수 있다. 그리고, 캐시 컨트롤러는 프라이빗 캐시 메모리와 공유 캐시 메모리 중 하나가 되도록 제1 캐시 메모리 부분을 동적으로 제어하기 위해 그룹 식별자를 동적으로 조정할 수 있다. 실시예에서, 그룹 식별자의 폭 및 서브-노드 식별자의 폭은 동적 제어에 기초하여 변할 수 있다. 또한, 캐시 컨트롤러는 제1 캐시 메모리 부분이 프라이빗 캐시 메모리로부터 공유 캐시 메모리로 변경될 때 제1 코어 및 제1 캐시 메모리 부분을 포함하는 제1 노드의 노드 식별자를 동적으로 변경할 수 있다.
또 다른 예에서, SoC는 복수의 노드 - 각각의 노드는 노드 식별자와 연관되고 적어도 하나의 코어 및 적어도 하나의 캐시 슬라이스를 포함함 -; 및 성능 메트릭 정보를 수신하고, 성능 메트릭 정보에 적어도 부분적으로 기초하여 복수의 노드 각각의 캐시 부분으로 형성될 캐시 메모리에 대한 그룹핑 모드를 결정하고 그룹핑 모드에서의 변경에 응답하여 복수의 노드 중 적어도 일부의 노드 식별자를 동적으로 변경하기 위한 제어 로직을 포함한다. 제어 로직은 그룹핑 모드에서의 변경에 응답하여 캐시 메모리를 플러싱할 수 있고, 노드 식별자는 시스템 소프트웨어에 투명할 수 있다. 실시예에서, 적어도 하나의 캐시 부분은 제1 그룹핑 모드에서 적어도 하나의 코어에 대해 프라이빗 캐시가 되고 제2 그룹핑 모드에서는 공유 캐시가 된다.
일 예에서, 제어 로직은, 그룹핑 모드를, 성능 메트릭 정보가 제1 임계치보다 더 큰 실패율을 표시할 때 복수의 노드 중 N개의 노드가 공유 캐시로 동작하는 제2 그룹핑 모드가 되도록 결정하고, 그룹핑 모드를, 성능 메트릭 정보가 제1 임계치보다 더 작은 실패율을 표시할 때 복수의 노드 중 M개의 노드가 공유 캐시로 동작하는 제2 그룹핑 모드가 되도록 결정하며, 여기서, N은 M보다 작다.
제2 그룹핑 모드에서, 제1 그룹의 노드는, 실시예에서, 제1 그룹의 노드 각각의 적어도 하나의 캐시 부분을 공유한다. 분산형 캐시 메모리는 복수의 노드 각각의 적어도 하나의 캐시 부분을 포함할 수 있고, 복수의 노드 각각의 적어도 하나의 캐시 부분은 적어도 하나의 코어의 프라이빗 캐시 메모리 및 복수의 노드 중 일부에 의해 공유되는 공유 캐시 메모리 중 하나가 되도록 동적으로 제어된다.
실시예에서, 제어 로직은 요청과 함께 요청 어드레스를 수신하고, 요청 어드레스 및 제1 캐시 부분을 포함하는 제1 노드와 연관된 노드 식별자를 사용하여 제1 캐시 부분을 액세스하기 위한 어드레스를 생성한다. 어드레스는 태그 부분, 노드 식별자 및 요청 어드레스의 일부를 포함하는 인덱스 부분, 및 오프셋 부분을 포함하고, 노드 식별자는, 노드들의 그룹을 식별하기 위한 그룹 식별자 및 제1 노드를식별하기 위한 서브-노드 식별자를 포함하며, 노드 식별자는 고유 번호이고 그룹 식별자 및 서브-노드 식별자는 비고유 번호이다.
또 다른 예에서, 방법은 복수의 노드를 포함하는 시스템에서 인커밍 요청 트랜잭션을 수신하는 단계; LLC의 제1 부분 및 제1 코어를 포함하는 제1 노드의 노드 식별자 및 인커밍 요청 트랜잭션의 요청 어드레스를 사용하여 액세스 어드레스를 생성하는 단계 - 노드 식별자는 LLC에 대한 그룹 어드레싱 모드가 변경될 때 동적으로 변경됨 -; 및 액세스 어드레스를 사용하여 LLC의 제1 부분에 액세스하는 단계를 포함한다.
일 예에서, 방법은 성능 메트릭 정보 및 시스템 구성 정보 중 하나 이상에 적어도 부분적으로 기초하여 LLC에 대한 그룹 어드레싱 모드를 결정하는 단계를 더 포함한다. 그룹 어드레싱 모드 변경에 응답하여, 방법은 노드 식별자를 LLC의 각 부분에 연관짓는 단계 및 노드 식별자를 각각의 대응하는 노드에 통신하는 단계를 포함하고, 여기서, 노드 식별자는 그룹 식별자 및 서브-노드 식별자를 포함한다. 그리고, 방법은, 제1 노드 및 제1 노드를 식별하기 위한 서브-노드 식별자를 포함하는 노드들의 그룹을 식별하기 위해 그룹 식별자를 포함하는 액세스 어드레스를 생성하는 단계를 더 포함할 수 있고, 노드 식별자는 고유 번호이고 그룹 식별자 및 서브-노드 식별자는 비고유 번호이다. 방법은 또한 캐시 코히런시 메시지를 생성하는 단계 및 제1 LLC 부분에서의 실패에 응답하여 제1 노드와 동일한 서브-노드 식별자를 갖는 다른 LLC 부분에 전송하는 단계를 포함할 수 있다.
또 다른 예에서, 명령어를 포함하는 컴퓨터 판독가능 매체가 전술한 예 중 임의의 방법을 수행한다.
또 다른 예에서, 장치는 전술한 예 중 임의의 방법을 수행하기 위한 수단을 포함한다.
또 다른 예에 따라, 시스템은 복수의 노드를 포함하는 프로세서 - 각각의 노드는 적어도 하나의 코어 및 분산형 캐시 메모리의 일부를 구비함 - 및 분산형 캐시 메모리의 그룹핑 모드에 적어도 부분적으로 기초하여 복수의 노드 각각에 대한 노드 식별자를 동적으로 업데이트하기 위한 컨트롤러를 포함한다. 시스템은 프로세서에 접속된 DRAM을 더 포함할 수 있다. 예에서, 컨트롤러는 제1 그룹핑 모드에서 공유 캐시 메모리의 부분이 되고 제2 그룹핑 모드에서는 프라이빗 캐시 메모리의 부분이 될 분산형 캐시 메모리의 각 부분을 동적으로 제어한다. 컨트롤러는 제1 분산형 캐시 메모리 부분에 액세스하기 위한 요청과 함께 요청 어드레스를 수신하고, 요청 어드레스 및 제1 분산형 캐시 메모리 부분을 포함하는 제1 노드와 연관된 노드 식별자를 사용하여 제1 분산형 캐시 메모리 부분을 액세스하기 위한 어드레스를 생성하며, 어드레스는 태그 부분, 노드 식별자 및 요청 어드레스의 일부를 포함하는 인덱스 부분, 및 오프셋 부분을 포함한다.
상기 프로세서는 다양한 수단을 사용하여 구현될 수 있다는 것을 유의하자.
일 예에서, 프로세서는 사용자 장비 터치-인에이블되는 디바이스에 통합된 SoC를 포함한다.
또 다른 예에서, 시스템은 디스플레이 및 메모리를 포함하고, 상기 예 중 하나 이상의 프로세서를 포함한다.
또 다른 예에서, 장치는 제1 캐시 슬라이스 및 제1 코어를 포함하는 제1 노드; 제2 캐시 슬라이스 및 제2 코어를 포함하는 제2 노드; 제1 노드 및 제2 노드에 대한 공통 노드 식별자에 기초하여 제1 그룹에 제1 캐시 슬라이스 및 제2 캐시 슬라이스를 포함시키기 위한 제어 로직을 포함한다. 제어 로직은 제1 노드 및 제2 노드에 대한 개별 노드 식별자에 기초하여 제1 그룹에 제1 캐시 슬라이스를 포함하고 제1 그룹으로부터 프라이빗인 제2 그룹에 제2 캐시 슬라이스를 또한 포함한다. 실시예에서, 제어 로직은 성능에 기초하여 공통 노드 식별자와 개별 노드 식별자 간을 동적으로 변경시킨다.
상기 예의 다수의 조합이 가능하다는 것을 이해하자.
실시예는 많은 다양한 유형의 시스템에 사용될 수 있다. 예를 들면, 실시예에서, 통신 디바이스는 여기서 설명된 다양한 방법 및 기술을 수행하도록 배치될 수 있다. 물론, 본 발명의 범위는 통신 디바이스에 제한되는 것은 아니고, 대신, 다른 실시에는 명령어를 처리하기 위한 다른 유형의 장치에 관한 것일 수 있고, 또는 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여 디바이스가 여기서 설명되는 방법 및 기술 중 하나 이상을 실행하도록 하는 명령어를 포함하는 하나 이상의 머신 판독가능 매체에 관한 것이다.
실시예는 코드에서 구현될 수 있고 명령어를 수행하기 위해 시스템을 프로그래밍하는데 사용될 수 있는 명령어가 저장된 비일시적 저장 매체 상에 저장될 수 있다. 저장 매체는, 이에 한정되는 것은 아니지만, 플로피 디스크, 광한 디스크, SSD(solid state drive), CD-ROM(compact disk read-only memory), CD-RW(compact disk rewritable), 및 자기-광학 디스크를 포함하는 임의의 유형의 디스크, ROM(read-only memory), DRAM(dynamic random access memory), SRAM(static random access memory)과 같은 RAM, EPROM(erasable programmable read-only memory), 플래시 메모리, EEPROM(electrically erasable programmable read-only memory)과 같은 반도체 디바이스, 자기 또는 광학 카드, 또는 전자 명령어를 저장하는데 적절한 임의의 다른 유형의 매체를 포함할 수 있다.
본 발명이 제한된 수의 실시예에 대해 설명되었지만, 당업자는 그들로부터 다양한 수정 및 변경을 이해할 것이다. 첨부된 청구범위는 본 발명의 진정한 사상 및 범주 내에 있는 그러한 모든 수정 및 변경을 포괄하는 것이다.
Claims (30)
- 장치로서,
제1 캐시 메모리 부분 및 제1 코어 - 상기 제1 캐시 메모리 부분은 분산형 캐시 메모리의 일부이고, 상기 제1 캐시 메모리 부분은, 어드레싱 모드에 따라, 상기 제1 코어에 대한 프라이빗(private) 캐시 메모리 및 상기 제1 코어를 포함하는 복수의 코어에 의해 공유되는 공유 캐시 메모리 중 하나가 되도록 동적으로 제어됨 - 와,
상기 프라이빗 캐시 메모리와 상기 공유 캐시 메모리 사이에서 동적으로 변경되도록 상기 제1 캐시 메모리 부분을 동적으로 제어하는 캐시 컨트롤러 - 상기 어드레싱 모드는 상기 제1 코어의 성능 모니터링 유닛으로부터의 성능 측정 정보에 적어도 부분적으로 기초함 -
를 포함하는
장치. - 삭제
- 제1항에 있어서,
상기 캐시 컨트롤러는 상기 제1 코어 상에서 실행되는 작업 부하에 적어도 부분적으로 기초하여 상기 제1 캐시 메모리 부분을 동적으로 제어하는
장치. - 제1항에 있어서,
상기 캐시 컨트롤러는 상기 어드레싱 모드를 동적으로 수정하는
장치. - 제4항에 있어서,
상기 캐시 컨트롤러는 요청과 함께 요청 어드레스를 수신하고, 상기 요청 어드레스 및 상기 제1 코어와 연관된 노드 식별자를 사용하여 상기 제1 캐시 메모리 부분에 액세스하기 위한 어드레스를 생성하는
장치. - 제5항에 있어서,
상기 어드레스는 태그 부분, 상기 노드 식별자 및 상기 요청 어드레스의 일부를 포함하는 인덱스 부분, 및 오프셋 부분을 포함하는
장치. - 제5항에 있어서,
상기 노드 식별자는 상기 제1 코어를 포함하는 코어들의 그룹을 식별하기 위한 그룹 식별자 및 상기 제1 코어를 식별하기 위한 서브-노드 식별자를 포함하고, 상기 노드 식별자는 고유 번호(unique number)이고 상기 그룹 식별자 및 상기 서브-노드 식별자는 비고유 번호인
장치. - 제7항에 있어서,
상기 제1 캐시 메모리 부분이 공유 캐시 메모리 모드로 구성되는 경우, 상기 캐시 컨트롤러는 캐시 코히런시 메시지를, 복수의 코어 중 상기 제1 코어와 공통의 서브-노드 식별자를 갖는 코어에게만 전송하는
장치. - 제7항에 있어서,
상기 캐시 컨트롤러는 상기 그룹 식별자를 동적으로 조정하여, 상기 프라이빗 캐시 메모리와 상기 공유 캐시 메모리 중 하나가 되도록 상기 제1 캐시 메모리 부분을 동적으로 제어하는
장치. - 제9항에 있어서,
상기 그룹 식별자의 폭 및 상기 서브-노드 식별자의 폭은 상기 동적 제어에 기초하여 가변하는
장치. - 제9항에 있어서,
상기 캐시 컨트롤러는 상기 제1 캐시 메모리 부분이 상기 프라이빗 캐시 메모리로부터 상기 공유 캐시 메모리로 변경되는 경우 상기 제1 코어 및 상기 제1 캐시 메모리 부분을 포함하는 제1 노드의 노드 식별자를 동적으로 변경시키는
장치. - 시스템 온 칩(SoC)으로서,
복수의 노드 - 각각의 노드는 노드 식별자를 가지며 적어도 하나의 코어 및 적어도 하나의 캐시 부분을 포함함 - 와,
성능 메트릭 정보를 수신하고, 상기 성능 메트릭 정보에 적어도 부분적으로 기초하여 상기 복수의 노드 각각의 상기 캐시 부분으로 형성되는 캐시 메모리에 대한 그룹핑 모드를 결정하고, 상기 그룹핑 모드의 변경에 응답하여 상기 복수의 노드 중 적어도 일부의 노드 식별자를 동적으로 변경하기 위한 제어 로직을 포함하되,
상기 제어 로직은, 제 2 그룹핑 모드에서, 공유 캐시가 상기 복수의 노드의 서브세트의 적어도 하나의 캐시 부분을 포함하는, 상기 복수의 노드의 서브세트를 가진 제 1 그룹을 형성하고, 상기 제어 로직은 상기 성능 메트릭 정보에 기초하여 상기 복수의 노드 중 상기 제 1 그룹에 포함될 노드의 수를 제어하는
시스템 온 칩(SoC). - 제12항에 있어서,
상기 제어 로직은 상기 그룹핑 모드의 변경에 응답하여 상기 캐시 메모리를 플러싱(flush)하는
시스템 온 칩(SoC). - 제12항에 있어서,
상기 노드 식별자는 시스템 소프트웨어에 투명한(transparent)
시스템 온 칩(SoC). - 제12항에 있어서,
상기 적어도 하나의 캐시 부분은 상기 그룹핑 모드에서 적어도 하나의 코어에 대한 프라이빗 캐시가 되는
시스템 온 칩(SoC). - 제15항에 있어서,
상기 제어 로직은, 상기 성능 메트릭 정보가 제1 임계치보다 더 큰 실패율(miss rate)을 나타낼 경우 상기 그룹핑 모드를 복수의 노드 중 N개의 노드가 공유 캐시로 동작하는 제2 그룹핑 모드가 되도록 결정하고, 상기 성능 메트릭 정보가 상기 제1 임계치보다 더 작은 실패율을 나타낼 경우 상기 그룹핑 모드를 복수의 노드 중 M개의 노드가 공유 캐시로 동작하는 제2 그룹핑 모드가 되도록 결정하며, N은 M보다 작은
시스템 온 칩(SoC). - 제16항에 있어서,
상기 제2 그룹핑 모드에서, 상기 복수의 노드의 서브세트는 상기 복수의 노드의 서브세트 각각의 적어도 하나의 캐시 부분을 공유하는
시스템 온 칩(SoC). - 제12항에 있어서,
상기 복수의 노드 각각의 적어도 하나의 캐시 부분을 포함하는 분산형 캐시 메모리를 더 포함하고, 상기 복수의 노드의 각각의 적어도 하나의 캐시 부분은 상기 적어도 하나의 코어의 프라이빗 캐시 메모리 및 상기 복수의 노드 중 일부에 의해 공유되는 공유 캐시 메모리 중 하나가 되도록 동적으로 제어되는
시스템 온 칩(SoC). - 제12항에 있어서,
상기 제어 로직은 요청과 함께 요청 어드레스를 수신하고, 상기 요청 어드레스 및 제1 캐시 부분을 포함하는 제1 노드와 연관된 노드 식별자를 사용하여 상기 제1 캐시 부분에 액세스하기 위한 어드레스를 생성하는
시스템 온 칩(SoC). - 제19항에 있어서,
상기 어드레스는 태그 부분, 상기 노드 식별자 및 상기 요청 어드레스의 일부를 포함하는 인덱스 부분, 및 오프셋 부분을 포함하고, 상기 노드 식별자는, 상기 복수의 노드의 서브세트를 식별하기 위한 그룹 식별자 및 상기 제1 노드를 식별하기 위한 서브-노드 식별자를 포함하며, 상기 노드 식별자는 고유 번호이고 상기 그룹 식별자 및 서브-노드 식별자는 비고유 번호인
시스템 온 칩(SoC). - 복수의 노드를 포함하는 시스템에서 인커밍 요청 트랜잭션(an incoming request transaction)을 수신하는 단계와,
최종 레벨 캐시(last level cache; LLC)의 제1 부분 및 제1 코어를 포함하는 제1 노드의 노드 식별자 및 상기 인커밍 요청 트랜잭션의 요청 어드레스를 사용하여 액세스 어드레스를 생성하는 단계 - 상기 노드 식별자는 상기 LLC에 대한 그룹 어드레싱 모드가 프라이빗 캐시 메모리 모드와 공유 캐시 메모리 모드 간에 동적으로 변경될 때 동적으로 변경되고, 상기 LLC에 대한 그룹 어드레싱 모드는 상기 복수의 노드 중 적어도 하나의 노드의 적어도 하나의 코어의 성능 모니터링 유닛으로부터의 성능 메트릭 정보에 적어도 부분적으로 기초하여 결정됨 - 와,
상기 액세스 어드레스를 사용하여 상기 LLC의 제1 부분에 액세스하는 단계를 포함하는
방법. - 삭제
- 제21항에 있어서,
시스템 구성 정보에 적어도 부분적으로 또한 기초하여 상기 LLC에 대한 상기 그룹 어드레싱 모드를 결정하는 단계를 더 포함하는
방법. - 제21항에 있어서,
그룹 어드레싱 모드 변경에 응답하여, 노드 식별자를 상기 LLC의 각각의 부분과 연관시키고 상기 노드 식별자를 각각의 대응하는 노드에 전달하는 단계를 더 포함하되, 상기 노드 식별자는 그룹 식별자 및 서브-노드 식별자를 포함하는
방법. - 제24항에 있어서,
상기 제1 노드를 포함하는 노드들의 그룹을 식별하는 그룹 식별자 및 상기 제1 노드를 식별하기 위한 서브-노드 식별자를 포함하는 액세스 어드레스를 생성하는 단계를 더 포함하되, 상기 노드 식별자는 고유 번호이고 상기 그룹 식별자 및 상기 서브-노드 식별자는 비고유 번호인
방법. - 제25항에 있어서,
캐시 코히런시 메시지를 생성하는 단계 및 상기 제1 LLC 부분에서의 실패에 응답하여 상기 캐시 코히런시 메시지를 상기 제1 노드와 동일한 서브-노드 식별자를 갖는 다른 LLC 부분에 전송하는 단계를 더 포함하는
방법. - 제21항에 있어서,
상기 그룹 어드레싱 모드에 대한 변경에 응답하여 상기 LLC를 플러싱하는 단계를 더 포함하는
방법. - 복수의 노드를 포함하는 프로세서 - 각각의 노드는 적어도 하나의 코어 및 분산형 캐시 메모리의 부분을 포함하고, 상기 프로세서는 상기 분산형 캐시 메모리의 그룹핑 모드에 적어도 부분적으로 기초하여 상기 복수의 노드의 각각에 대한 노드 식별자를 동적으로 제어하기 위한 컨트롤러를 더 포함하며, 상기 컨트롤러는 상기 분산형 캐시 메모리의 각각의 부분을 제1 그룹핑 모드 또는 제2 그룹핑 모드 중 하나에 있도록 동적으로 제어하고, 상기 분산형 캐시 메모리 부분은 상기 제1 그룹핑 모드에서는 공유 캐시 메모리의 부분이 되고 상기 분산형 캐시 메모리는 상기 제2 그룹핑 모드에서는 프라이빗 캐시 메모리가 됨 - 와,
상기 프로세서에 접속된 DRAM(dynamic random access memory)을 포함하는
시스템. - 삭제
- 제28항에 있어서,
상기 컨트롤러는, 제1 분산형 캐시 메모리 부분에 액세스하기 위한 요청과 함께 요청 어드레스를 수신하고, 상기 요청 어드레스 및 상기 제1 분산형 캐시 메모리 부분을 포함하는 제1 노드와 연관된 노드 식별자를 사용하여 상기 제1 분산형 캐시 메모리 부분에 액세스하기 위한 어드레스를 생성 - 상기 어드레스는 태그 부분, 상기 노드 식별자 및 상기 요청 어드레스의 일부를 포함하는 인덱스 부분, 및 오프셋 부분을 포함함 - 하는
시스템.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2013/086281 WO2015062006A1 (en) | 2013-10-31 | 2013-10-31 | A method, apparatus and system for dynamically controlling an addressing mode for a cache memory |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160046892A KR20160046892A (ko) | 2016-04-29 |
KR101815171B1 true KR101815171B1 (ko) | 2018-01-04 |
Family
ID=52996789
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167007870A KR101815171B1 (ko) | 2013-10-31 | 2013-10-31 | 캐시 메모리를 위한 어드레싱 모드를 동적으로 제어하기 위한 방법, 장치 및 시스템 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9836400B2 (ko) |
EP (1) | EP3063637A4 (ko) |
KR (1) | KR101815171B1 (ko) |
CN (1) | CN105579978B (ko) |
WO (1) | WO2015062006A1 (ko) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9411532B2 (en) * | 2001-09-07 | 2016-08-09 | Pact Xpp Technologies Ag | Methods and systems for transferring data between a processing device and external devices |
US10664751B2 (en) * | 2016-12-01 | 2020-05-26 | Via Alliance Semiconductor Co., Ltd. | Processor with memory array operable as either cache memory or neural network unit memory |
US10536334B2 (en) | 2016-01-28 | 2020-01-14 | Oracle International Corporation | System and method for supporting subnet number aliasing in a high performance computing environment |
US10374926B2 (en) | 2016-01-28 | 2019-08-06 | Oracle International Corporation | System and method for monitoring logical network traffic flows using a ternary content addressable memory in a high performance computing environment |
KR102440948B1 (ko) * | 2016-02-11 | 2022-09-05 | 삼성전자주식회사 | 반도체 장치 및 반도체 장치의 동작 방법 |
CN108604199B (zh) * | 2016-08-23 | 2022-08-23 | 甲骨文国际公司 | 计算环境中支持快速混合重新配置的***和方法、介质 |
US10430706B2 (en) * | 2016-12-01 | 2019-10-01 | Via Alliance Semiconductor Co., Ltd. | Processor with memory array operable as either last level cache slice or neural network unit memory |
US10621090B2 (en) * | 2017-01-12 | 2020-04-14 | International Business Machines Corporation | Facility for extending exclusive hold of a cache line in private cache |
US10223085B2 (en) * | 2017-04-28 | 2019-03-05 | International Business Machines Corporation | Discovering high-level language data structures from assembler code |
US10482024B2 (en) * | 2017-07-20 | 2019-11-19 | Alibaba Group Holding Limited | Private caching for thread local storage data access |
US10417161B2 (en) * | 2018-01-26 | 2019-09-17 | Qualcomm Incorporated | Efficient technique for communicating between devices over a multi-drop bus |
US20210191777A1 (en) * | 2018-06-21 | 2021-06-24 | Telefonaktiebolaget Lm Ericsson (Publ) | Memory Allocation in a Hierarchical Memory System |
US10776266B2 (en) * | 2018-11-07 | 2020-09-15 | Arm Limited | Apparatus and method of modification of stored data |
CN115114192B (zh) * | 2021-03-23 | 2024-06-14 | 北京灵汐科技有限公司 | 存储器接口、功能核、众核***和存储数据访问方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020016891A1 (en) * | 1998-06-10 | 2002-02-07 | Karen L. Noel | Method and apparatus for reconfiguring memory in a multiprcessor system with shared memory |
US20020174301A1 (en) * | 2001-05-17 | 2002-11-21 | Conway Patrick N. | Method and system for logical partitioning of cache memory structures in a partitioned computer system |
US20080022049A1 (en) * | 2006-07-21 | 2008-01-24 | Hughes Christopher J | Dynamically re-classifying data in a shared cache |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6457107B1 (en) * | 2000-02-28 | 2002-09-24 | International Business Machines Corporation | Method and apparatus for reducing false sharing in a distributed computing environment |
US7853752B1 (en) * | 2006-09-29 | 2010-12-14 | Tilera Corporation | Caching in multicore and multiprocessor architectures |
WO2012077400A1 (ja) * | 2010-12-09 | 2012-06-14 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチコアシステム、及びそのコアのデータ読み出し方法 |
US9158693B2 (en) * | 2011-10-31 | 2015-10-13 | Intel Corporation | Dynamically controlling cache size to maximize energy efficiency |
CN103235764B (zh) | 2013-04-11 | 2016-01-20 | 浙江大学 | 线程感知多核数据预取自调方法 |
-
2013
- 2013-10-31 CN CN201380079946.5A patent/CN105579978B/zh active Active
- 2013-10-31 WO PCT/CN2013/086281 patent/WO2015062006A1/en active Application Filing
- 2013-10-31 KR KR1020167007870A patent/KR101815171B1/ko active IP Right Grant
- 2013-10-31 US US14/126,921 patent/US9836400B2/en not_active Expired - Fee Related
- 2013-10-31 EP EP13896764.1A patent/EP3063637A4/en not_active Withdrawn
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020016891A1 (en) * | 1998-06-10 | 2002-02-07 | Karen L. Noel | Method and apparatus for reconfiguring memory in a multiprcessor system with shared memory |
US20020174301A1 (en) * | 2001-05-17 | 2002-11-21 | Conway Patrick N. | Method and system for logical partitioning of cache memory structures in a partitioned computer system |
US20080022049A1 (en) * | 2006-07-21 | 2008-01-24 | Hughes Christopher J | Dynamically re-classifying data in a shared cache |
Also Published As
Publication number | Publication date |
---|---|
EP3063637A4 (en) | 2017-07-19 |
CN105579978A (zh) | 2016-05-11 |
CN105579978B (zh) | 2020-06-09 |
US20150120998A1 (en) | 2015-04-30 |
KR20160046892A (ko) | 2016-04-29 |
WO2015062006A1 (en) | 2015-05-07 |
EP3063637A1 (en) | 2016-09-07 |
US9836400B2 (en) | 2017-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101815171B1 (ko) | 캐시 메모리를 위한 어드레싱 모드를 동적으로 제어하기 위한 방법, 장치 및 시스템 | |
US20150169453A1 (en) | Method, apparatus and system for performing management component transport protocol (mctp) communications with a universal serial bus (usb) device | |
US9767026B2 (en) | Providing snoop filtering associated with a data buffer | |
US10162770B2 (en) | Virtual machine migration in rack scale systems | |
US9405687B2 (en) | Method, apparatus and system for handling cache misses in a processor | |
CN107667358B (zh) | 用于在多个拓扑结构中使用的装置及其方法 | |
US9940238B2 (en) | Changing cache ownership in clustered multiprocessor | |
US11526440B2 (en) | Providing multiple memory modes for a processor including internal memory | |
US10496551B2 (en) | Method and system for leveraging non-uniform miss penality in cache replacement policy to improve processor performance and power | |
JP6321194B2 (ja) | リンクインタフェースの使用されていないハードウェアの電力消費を制御するための方法、装置及びシステム | |
EP3274860B1 (en) | A method, apparatus and system for optimizing cache memory transaction handling in a processor | |
US8862828B2 (en) | Sub-numa clustering | |
US20140173203A1 (en) | Block Memory Engine | |
EP3234783B1 (en) | Pointer chasing across distributed memory | |
US9189296B2 (en) | Caching agent for deadlock prevention in a processor by allowing requests that do not deplete available coherence resources |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) | ||
GRNT | Written decision to grant |