KR20190086669A - 프로세서 아키텍처에 대한 장치들 및 방법들 - Google Patents

프로세서 아키텍처에 대한 장치들 및 방법들 Download PDF

Info

Publication number
KR20190086669A
KR20190086669A KR1020197013501A KR20197013501A KR20190086669A KR 20190086669 A KR20190086669 A KR 20190086669A KR 1020197013501 A KR1020197013501 A KR 1020197013501A KR 20197013501 A KR20197013501 A KR 20197013501A KR 20190086669 A KR20190086669 A KR 20190086669A
Authority
KR
South Korea
Prior art keywords
cache
instruction
micro
processor
unit
Prior art date
Application number
KR1020197013501A
Other languages
English (en)
Inventor
제이슨 더블유. 브란트
로버트 에스. 챠펠
지저스 코발
에드워드 티. 그로초스키
스티븐 에이치. 건더
버포드 엠. 가이
토마스 알. 허프
크리스토퍼 제이. 휴
엘모스타파 울드-아메드-발
로나크 싱얼
세예드 야히아 소투데
브렛 엘. 톨
리후 라포포트
데이비드 팝워스
제임스 디. 알렌
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20190086669A publication Critical patent/KR20190086669A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0828Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

본 발명의 실시예들에서는 프로세서 아키텍처가 개시되어 있다. 일 실시예에서, 프로세서는 디코더, 실행 유닛, 코히런트 캐시, 및 인터커넥트를 포함한다. 디코더는 캐시 라인을 제로화하라는 명령어를 디코드하도록 되어 있다. 실행 유닛은 캐시 라인 크기의 제로들의 기입을 개시하라는 기입 커맨드를 발행하도록 되어 있다. 코히런트 캐시는 기입 커맨드를 수신하고, 코히런트 캐시에 히트가 있는지 그리고 히트 캐시 라인의 캐시 일관성 프로토콜 상태가 수정됨 상태인지 배타적 상태인지를 결정하며, 전부 제로들을 나타내도록 캐시 라인을 구성하고, 인터커넥트를 향해 기입 커맨드를 발행하도록 되어 있다. 인터커넥트는, 기입 커맨드의 수신에 응답하여, 히트가 있는지가 결정되어야 하는 복수의 다른 코히런트 캐시들 각각에게 스누프를 발행하도록 되어 있다.

Description

프로세서 아키텍처에 대한 장치들 및 방법들
본 발명의 분야는 일반적으로 컴퓨터들에 관한 것으로, 보다 구체적으로는 프로세서 아키텍처들에 관한 것이다.
프로세서들은 명령어들 및 프로세스 정보를 실행하기 위해 함께 기능하는 많은 상호접속된 회로들 및 구조들을 포함한다. 이러한 회로들 및 구조들 그리고 이들이 제공하는 특징들은 많은 상이한 구성들 및 조합들로 프로세서에 포함될 수 있다.
비슷한 참조들이 비슷한 요소들을 나타내고 있는 첨부 도면들의 도면들에, 본 발명이 제한이 아닌 예로서 예시되어 있다.
도 1a는 본 발명의 실시예들에 따른 예시적인 순차 파이프라인(in-order pipeline) 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 파이프라인(register renaming, out-of-order issue/execution pipeline) 둘 다를 예시하는 블록 다이어그램이다;
도 1b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 아키텍처 코어 둘 다를 예시하는 블록 다이어그램이다;
도 2a 및 도 2b는 보다 구체적인 예시적인 코어 아키텍처의 블록 다이어그램을 예시하고 있으며, 이 코어는 칩 내의 몇 개의 로직 블록(동일한 타입 및/또는 상이한 타입들의 다른 코어들을 포함함) 중 하나일 것이다;
도 2a는 본 발명의 실시예들에 따른, 단일 프로세서 코어를, 온-다이 인터커넥트 네트워크(on-die interconnect network)(202)에 대한 그의 접속 및 레벨 2(L2) 캐시의 그의 로컬 서브세트(204)와 함께 나타낸, 블록 다이어그램이다;
도 2b는 본 발명의 실시예들에 따른 도 2a에서의 프로세서 코어의 일부의 확대도이다;
도 3은 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 비순차 발행/실행 프로세서 코어의 블록 다이어그램이다;
도 4는, 도 3의 것과 같은, 프로세서 코어 및/또는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 페치 유닛(fetch unit)의 블록 다이어그램이다;
도 5는, 도 3의 것과 같은, 프로세서 코어 및/또는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 디코드 유닛(decode unit)의 블록 다이어그램이다;
도 6은, 도 3의 것과 같은, 프로세서 코어 및/또는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 정수 실행 유닛(integer execution unit)의 블록 다이어그램이다;
도 7은, 도 3의 것과 같은, 프로세서 코어 또는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 부동 소수점(FP) 실행 유닛(floating-point (FP) execution unit)의 블록 다이어그램이다;
도 8은, 도 3의 것과 같은, 프로세서 코어 또는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 로드/저장 유닛(load/store unit)의 블록 다이어그램이다;
도 9는 본 발명의 실시예들에 따른 프로세서에서의 동시 멀티스레딩(simultaneous multi-threading)(SMT)을 지원하는, 도 3의 것과 같은, 예시적인 비순차 발행/실행 프로세서 코어의 블록 다이어그램이다;
도 10은 일부 실시예들에 따른 프로세서에 포함될 수 있는 SMT 정적 파티셔닝 특징(SMT static partitioning feature)을 예시하는 블록 다이어그램이다;
도 11은 일부 실시예들에 따른 프로세서에 의해 수행될 수 있는 SMT 정적 파티셔닝 특징을 위한 방법을 예시하는 흐름 다이어그램이다;
도 12는 일부 실시예들에 따른 프로세서에 포함될 수 있는 리소스 할당기(resource allocator)를 예시하는 블록 다이어그램이다;
도 13은 실시예들에 따른 프로세서(1300)에 포함될 수 있는 알고리즘적 SMT 특징(algorithmic SMT feature)을 예시하는 블록 다이어그램이다;
도 14는 실시예들에 따른 프로세서에 의해 수행될 수 있는 알고리즘적 SMT 특징을 위한 방법을 예시하는 흐름 다이어그램이다;
도 15는 실시예들에 따른 프로세서에 포함될 수 있는 알고리즘적 SMT 특징을 예시하는 블록 다이어그램이다;
도 16은 예시적인 실시예에 따른 브랜치 예측기 우선순위 알고리즘(branch predictor priority algorithm)을 구현하는 블록 다이어그램을 도시하고 있다;
도 17은 실시예들에 따른 프로세서에 포함될 수 있는 SMT 스레드 스위칭 특징(SMT thread switching feature)을 위한 중재 회로(arbitration circuit)를 예시하는 블록 다이어그램이다;
도 18은 실시예들에 따른 프로세서에 포함될 수 있는 데드록 회피 하드웨어(deadlock avoidance hardware)(1800)를 예시하는 블록 다이어그램이다;
도 19는 일부 실시예들에 따른, 한 쌍의 128-비트 μop들을 사용하는 256-비트 레지스터 파일에의 256-비트 로드를 도시하는 다이어그램이다;
도 20은 일부 실시예들에 따른, 한 쌍의 128-비트 μop들을 사용하여 256-비트 레지스터 파일에 256-비트를 로드하기 위한 프로세스를 예시하는 다이어그램이다;
도 21은 일부 실시예들에 따른, 128-비트 μop들을 사용하는 256-비트 레지스터 파일로부터의 256-비트 저장을 도시하는 다이어그램이다;
도 22는 일부 실시예들에 따른, 한 쌍의 128-비트 μop들을 사용하여 256-비트 레지스터 파일로부터 256-비트를 저장하기 위한 프로세스를 예시하는 다이어그램이다;
도 23은 일부 실시예들에 따른 128-비트 마이크로-연산들을 사용하여 256-비트 산술 연산들을 가능하게 하기 위한 특징을 예시하는 블록 다이어그램이다;
도 24는 일부 실시예들에 따른 부분 결과들을 저장하기 위해 임시 스토리지 영역(temporary storage area)을 사용하는 교차 레인 연산들(cross-lane operations)을 예시하는 블록 다이어그램이다;
도 25는 실시예들에 따른 프로세서에 포함될 수 있는 마이크로-op 캐시 특징을 예시하는 블록 다이어그램이다;
도 26은 실시예들에 따른 프로세서에 의해 수행될 수 있는 마이크로-op 캐시 특징을 위한 방법을 예시하는 흐름 다이어그램이다;
도 27은 실시예에 따른 프로세서에 포함될 수 있는 마이크로-op 캐시 특징을 예시하는 블록 다이어그램이다;
도 28은 실시예들에 따른 프로세서에 포함될 수 있는 마이크로-op 캐시 특징을 예시하는 블록 다이어그램이다;
도 29는 실시예들에 따른 레지스터 에일리어스 테이블(register alias table)(RAT)을 수반하는 레지스터 리네이밍 및 의존성 추적 스킴(register renaming and dependency tracking scheme)을 예시하는 블록 다이어그램이다;
도 30은 실시예들에 따른 제로 이디엄들(zero idioms), 부호 확장(sign extension), 및 제로 확장(zero extension)을 포함하도록 확장된 RAT를 예시하는 블록 다이어그램이다;
도 31은 실시예들에 따른 레지스터를 판독하는 마이크로-op로 레지스터 리네이밍 동안 확장된 RAT 비트들을 판독하고 이들을 파이프라인을 따라 아래로 전달하는 것을 예시하는 블록 다이어그램이다;
도 32는 실시예들에 따른 프로세서에 포함될 수 있는 가상 레지스터 리네이밍 특징(virtual register renaming feature)을 예시하는 블록 다이어그램이다;
도 33은 실시예들에 따른 프로세서에 의해 수행될 수 있는 가상 레지스터 리네이밍 특징을 위한 방법을 예시하는 흐름 다이어그램이다;
도 34는 본 발명의 실시예들에 따른 융합된 승산-가산(FMA) 분열/융합 특징(fused multiply-add(FMA) fission/fusion feature)을 지원하는 프로세서 코어에서 구현될 수 있는 발행/실행 파이프라인을 예시하는 블록 다이어그램이다;
도 35는 본 발명의 실시예들에 따른 프로세서에 의해 수행될 수 있는 FMA 분열/융합을 위한 방법을 예시하는 흐름 다이어그램이다;
도 36은 본 발명의 실시예들에 따른 하나 초과의 코어를 가질 수 있고, 통합 메모리 제어기(integrated memory controller)를 가질 수 있으며, 통합 그래픽스(integrated graphics)를 가질 수 있는 프로세서의 블록 다이어그램이다;
도 37은 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 CPU(central processing unit) 콤플렉스(complex)의 블록 다이어그램이다;
도 38은 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 캐시 계층구조의 블록 다이어그램이다;
도 39는 실시예들에 따른 캐시 라인 제로화 명령어(cache line zeroing instruction)가 구현될 수 있는 메모리 계층구조를 예시하는 블록 다이어그램이다;
도 40은 실시예들에 따른 캐시 라인 제로화 명령어를 구현하는 프로세서 내의 캐시를 예시하는 블록 다이어그램이다;
도 41은 스누프들(snoops)을 사용하기 전에 먼저 발행 에이전트(issuing agent)의 캐시에 기입하려고 시도하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다;
도 42는 코히런트 캐시들의 스누프들에 의존하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다;
도 43은 스누프 프로세스를 구현하기 위해 write-update 스누프들을 사용하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다;
도 44은 스누프 프로세스를 구현하기 위해 write-invalidate 스누프들을 사용하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다;
도 45는 스누프 프로세스를 구현하기 위해 무효화하고 라이트 백(write back)하는 스누프들을 사용하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다;
도 46은 스누프 프로세스를 구현하기 위해 히트하는 임의의 캐시 라인을 라이트 아웃(write out)하지만 데이터를 제1 에이전트로 다시 송신하지 않고 데이터가 다운스트림 메모리로부터 판독되는 것을 초래하지 않는 스누프들을 사용하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다;
도 47은 일부 실시예들에 따른 프로세서에 포함될 수 있는 페이지 병합 특징(page coalescing feature)을 예시하는 다이어그램이다;
도 48은 일부 실시예들에 따른 페이지 테이블 엔트리들을 단일 유효 페이지로 병합시키기 위한 방법을 예시하는 흐름 다이어그램이다;
도 49 내지 도 52는 예시적인 컴퓨터 아키텍처들의 블록 다이어그램들이다;
도 49는 본 발명의 일 실시예에 따른 시스템의 블록 다이어그램을 도시하고 있다;
도 50은 본 발명의 일 실시예에 따른 제1 보다 구체적인 예시적인 시스템의 블록 다이어그램이다;
도 51은 본 발명의 일 실시예에 따른 제2 보다 구체적인 예시적인 시스템의 블록 다이어그램이다;
도 52는 본 발명의 일 실시예에 따른 시스템 온 칩(system-on-chip)(SoC)의 블록 다이어그램이다;
도 53a 및 도 53b는 본 발명의 실시예들에 따른 일반 벡터 친화적 명령어 포맷(generic vector friendly instruction format) 및 그의 명령어 템플릿들을 예시하는 블록 다이어그램들이다;
도 53a는 본 발명의 실시예들에 따른 일반 벡터 친화적 명령어 포맷 및 그의 클래스 A 명령어 템플릿들을 예시하는 블록 다이어그램이다;
도 53b는 본 발명의 실시예들에 따른 일반 벡터 친화적 명령어 포맷 및 그의 클래스 B 명령어 템플릿들을 예시하는 블록 다이어그램이다;
도 54a는 본 발명의 실시예들에 따른 예시적인 특정 벡터 친화적 명령어 포맷을 예시하는 블록 다이어그램이다;
도 54b는 본 발명의 일 실시예에 따른 전체 오피코드 필드(full opcode field)를 구성하는 특정 벡터 친화적 명령어 포맷의 필드들을 예시하는 블록 다이어그램이다;
도 54c는 본 발명의 일 실시예에 따른 레지스터 인덱스 필드(register index field)를 구성하는 특정 벡터 친화적 명령어 포맷의 필드들을 예시하는 블록 다이어그램이다;
도 54d는 본 발명의 일 실시예에 따른 증강 연산 필드(augmentation operation field)를 구성하는 특정 벡터 친화적 명령어 포맷의 필드들을 예시하는 블록 다이어그램이다;
도 55는 본 발명의 일 실시예에 따른 레지스터 아키텍처의 블록 다이어그램이다;
도 56은 본 발명의 실시예들에 따른 소스 명령어 세트(source instruction set) 내의 바이너리 명령어들을 타깃 명령어 세트(target instruction set) 내의 바이너리 명령어들로 변환(convert)하기 위한 소프트웨어 명령어 변환기의 사용을 대비시키는 블록 다이어그램이다.
도 57 내지 도 66은 시스템들에서의 본 발명의 실시예들의 예시들이다.
이하의 설명에서, 수많은 특정 상세들이 기재되어 있다. 그렇지만, 본 발명의 실시예들이 이러한 특정 상세들을 사용함이 없이 실시될 수 있다는 것이 이해된다. 다른 경우들에서, 이 설명의 이해를 모호하게 하지 않기 위해 공지된 회로들, 구조들 및 기법들이 상세히 나타내어져 있지 않다.
"일 실시예(one embodiment)", "일 실시예(an embodiment)", "예시적인 실시예(an example embodiment)" 등에 대한 본 명세서에서의 언급들은 설명된 실시예가 특정의 특징, 구조, 또는 특성을 포함할 수 있지만, 모든 실시예가 그 특정의 특징, 구조, 또는 특성을 반드시 포함하는 것은 아닐 수 있음을 나타낸다. 더욱이, 그러한 문구들이 동일한 실시예를 반드시 지칭하는 것은 아니다. 게다가, 특정의 특징, 구조, 또는 특성이 일 실시예와 관련하여 설명될 때, 명시적으로 설명되어 있든 그렇지 않든 간에 다른 실시예들과 관련하여 그러한 특징, 구조, 또는 특성을 달성하는 것을 본 기술분야의 통상의 기술자가 알고 있다고 생각된다.
정보를 프로세싱하기 위한, 컴퓨터와 같은, 장치는 하나 이상의 프로세서 코어를 포함할 수 있다. 각각의 프로세서 코어는 다양한 회로부, 하드웨어, 구조들, 및 다른 특징들을 포함할 수 있으며, 여기서 각각이 단독으로, 또는 임의의 수가 함께 조합하여 특징이라고 지칭될 수 있다. 특징들은 다양한 방식들로 구현되고 그리고/또는 배열되며, 다양한 기법들을 이용하고, 원하는 레벨들의 성능, 전력 소비, 및/또는 다른 특성들(예컨대, 적용가능한 기준들 중 단지 몇 개를 열거하면, 성능을 증가시키는 것, 전력 소비를 감소시켜 전력 절감 특징들을 구현하는 것, 및 공정성 향상, 최소 성능 보증, 스루풋, IPC(instructions per clock), 단위 시간당 명령어들(instructions per unit time), 서비스 품질, 시간 및/또는 메모리 효율을 개선시키는 것)을, 다양한 조합들로, 달성하려고 시도하는 다양한 방법들을 수행하는 것에 관여될 수 있다. 본 발명의 실시예들은 본 명세서에 설명된 특징들 중 하나 이상을 포함할 수 있다. 본 발명이 구체화될 수 있는 아키텍처들 및 시스템들의 일부 예들이 본 명세서에서의 도면들 및 설명에 제공되어 있다.
본 발명이 구체화될 수 있는 프로세서 코어들이 상이한 방식들로, 상이한 목적들을 위해, 그리고 상이한 프로세서들에서 구현될 수 있다. 예를 들어, 그러한 코어들의 구현들은: 1) 범용 컴퓨팅을 위해 의도된 범용 순차 코어; 2) 범용 컴퓨팅을 위해 의도된 고성능 범용 비순차 코어; 3) 주로 그래픽스 및/또는 과학(스루풋) 컴퓨팅을 위해 의도된 특수 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현들은: 1) 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 순차 코어 및/또는 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 비순차 코어를 포함하는 중앙 프로세싱 유닛(CPU); 및 2) 주로 그래픽스 및/또는 과학(스루풋) 컴퓨팅을 위해 의도된 하나 이상의 특수 목적 코어를 포함하는 코프로세서를 포함할 수 있다. 그러한 상이한 프로세서들은, 1) CPU와 별개의 칩 상의 코프로세서; 2) CPU와 동일한 패키지에 있는 별개의 다이 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(이 경우에, 그러한 코프로세서는 때때로, 통합 그래픽스 및/또는 과학(스루풋) 로직과 같은, 특수 목적 로직이라고, 또는 특수 목적 코어들이라고 지칭됨); 및 4) 설명된 CPU(때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)라고 지칭됨), 앞서 설명된 코프로세서, 및 부가의 기능을 동일한 다이 상에 포함할 수 있는 SoC(system on a chip)를 포함할 수 있는, 상이한 컴퓨터 시스템 아키텍처들을 가져온다.
예시적인 코어 아키텍처들이 다음에 설명되고, 예시적인 프로세서들 및 컴퓨터 아키텍처들의 설명들이 뒤따른다. 각각의 프로세서는 하나 이상의 코어를 포함할 수 있으며, 여기서 각각의 코어 및/또는 코어들의 조합은 하나 이상의 스레드, 프로세스, 또는 다른 명령어 시퀀스를 다양한 때에 실행하도록 아키텍트되고(architected) 설계될 수 있다. 코어 아키텍처들 및 설계 기법들은 동시(또는 대칭) 멀티스레딩(SMT) 또는 임의의 다른 접근법으로 알려진 한 타입의 접근법들 중 임의의 것에 따라 다수의 스레드들의 동시발생적 실행(concurrent execution)을 제공하고 그리고/또는 지원할 수 있다. 그에 따라, 이하에서 예들로서 설명된 것들을 포함한, 본 발명이 구체화될 수 있는 프로세서 코어들은 SMT를 지원하도록 아키텍트되고 설계된 다양한 신규 특징들 및/또는, 이하에서 설명될 수 있는 바와 같은, SMT를 지원하기 위한 다양한 신규 방식들로 수정된 다양한 공지된 특징들을 포함할 수 있다. 설명의 편의를 위해, 본 명세서에서의 용어 SMT의 의미는 멀티스레딩(예컨대, 타임 슬라이싱(time-slicing))에 대한 임의의 다른 접근법과 결합된 SMT를 포함할 수 있다.
앞서 언급되고 이하에서 보다 상세히 설명되는 바와 같이, 본 개시내용의 실시예들은, 적용가능한 기준들 중 단지 몇 개를 열거하면, 예컨대, 성능을 증가시키는 것, 전력 소비를 감소시켜 전력 절감 특징들을 구현하는 것, 및 공정성 향상, 최소 성능 보증, 스루풋, IPC(instructions per clock), 단위 시간당 명령어들, 서비스 품질, 시간 및/또는 메모리 효율을 포함한, 다양한 이유들로 바람직할 수 있다. 앞서 열거되고 본 명세서에 설명된 바람직한 기준들은 예시적인 것이며; 본 명세서에서 설명된 바와 같이, 본 개시내용은, 개별적으로 또는 조합하여, 앞서 열거된 이유들 중 임의의 것으로 바람직할 수 있으며, 앞서 특정하여 나열되지 않은 부가의 이유들로 추가로 바람직할 수 있다.
게다가, 앞서 언급되고 이하에서 보다 상세히 설명되는 바와 같이, 본 개시내용의 실시예들은, 범용 프로세서들, 서버 환경에서 사용하기 위한 서버 프로세서들 또는 프로세싱 요소들, 코프로세서들(예컨대, 보안 코프로세서들), 하이-스루풋(high-throughput) MIC 프로세서들, GPGPU들, (예컨대, 그래픽스 가속기들 또는 디지털 신호 프로세싱(DSP) 유닛들, 암호화 가속기들(cryptographic accelerators), 고정 기능 가속기들(fixed function accelerators), 머신 러닝 가속기들, 네트워킹 가속기들, 또는 컴퓨터 비전 가속기들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들(field programmable gate arrays), 또는 임의의 다른 프로세서 또는 프로세싱 디바이스를 포함한, 임의의 타입의 프로세서 또는 프로세싱 요소에 적용될 수 있다. 프로세서 또는 프로세서들은 하나 이상의 칩 상에 구현될 수 있다. 프로세서 또는 프로세서들(3600)은, 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은, 다수의 프로세스 기술들 중 임의의 것을 사용하여 하나 이상의 기판의 일부일 수 있고 그리고/또는 하나 이상의 기판 상에 구현될 수 있다. 앞서 열거되고 본 명세서에 설명된 프로세서들 및 프로세싱 디바이스들은 예시적인 것이며; 본 명세서에 설명된 바와 같이, 본 개시내용은 임의의 프로세서 또는 프로세싱 디바이스에 적용가능하다.
게다가, 앞서 언급되고 이하에서 보다 상세히 설명되는 바와 같이, 본 개시내용의 실시예는, 예를 들어, x86 명령어 세트(임의로 보다 새로운 버전들에서 추가된 확장들을 포함함); 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트; 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트(NEON과 같은 임의적 부가 확장들을 가짐); IBM의 "Power" 명령어 세트, 또는 RISC 및 CISC 명령어 세트들 둘 다를 포함한, 임의의 다른 명령어 세트를 포함한, 매우 다양한 명령어 세트들 및 명령어 세트 아키텍처들을 사용하는 프로세서들 또는 프로세싱 요소들에 적용될 수 있다. 앞서 열거되고 본 명세서에 설명된 명령어 세트들 및 명령어 세트 아키텍처들은 예시적인 것이며; 본 명세서에 설명된 바와 같이, 본 개시내용은 임의의 명령어 세트 또는 명령어 세트 아키텍처에 적용가능하다.
예시적인 코어 아키텍처들
순차 및 비순차 코어 블록 다이어그램
도 1a는 본 발명의 실시예들에 따른 예시적인 순차 파이프라인 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 파이프라인 둘 다를 예시하는 블록 다이어그램이다. 도 1b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 아키텍처 코어 둘 다를 예시하는 블록 다이어그램이다. 도 1a 및 도 1b에서의 실선 박스들은 순차 파이프라인 및 순차 코어를 예시하는 반면, 파선 박스들의 임의적 부가는 레지스터 리네이밍, 비순차 발행/실행 파이프라인 및 코어를 예시한다. 순차 양태가 비순차 양태의 서브세트인 것을 감안하여, 비순차 양태가 설명될 것이다.
도 1a에서, 프로세서 파이프라인(100)은 페치 스테이지(102), 길이 디코드 스테이지(104), 디코드 스테이지(106), 할당 스테이지(108), 리네이밍 스테이지(110), 스케줄링(디스패치(dispatch) 또는 발행이라고도 알려져 있음) 스테이지(112), 레지스터 판독/메모리 판독 스테이지(114), 실행 스테이지(116), 라이트 백/메모리 기입 스테이지(118), 예외 핸들링 스테이지(122), 및 커밋 스테이지(124)를 포함한다.
도 1b는 실행 엔진 유닛(150)에 커플링된 프런트 엔드 유닛(130)을 포함하는 프로세서 코어(190)를 도시하고 있으며, 둘 다는 메모리 유닛(170)에 커플링된다. 코어(190)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안의 코어 타입일 수 있다. 또 다른 옵션으로서, 코어(190)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, 범용 컴퓨팅 그래픽스 프로세싱 유닛(GPGPU) 코어, 그래픽스 코어, 또는 이와 유사한 것과 같은, 특수 목적 코어일 수 있다. 예를 들어, 앞서 설명된 바와 같이, 코어(190)는, 범용 프로세서들, 서버 환경에서 사용하기 위한 서버 프로세서들 또는 프로세싱 요소들, 코프로세서들(예컨대, 보안 코프로세서들), 하이-스루풋 MIC 프로세서들, GPGPU들, (예컨대, 그래픽스 가속기들 또는 디지털 신호 프로세싱(DSP) 유닛들, 암호화 가속기들, 고정 기능 가속기들, 머신 러닝 가속기들, 네트워킹 가속기들, 또는 컴퓨터 비전 가속기들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서 또는 프로세싱 디바이스를 포함하는 세트 중 임의의 멤버일 수 있다.
프런트 엔드 유닛(130)은 마이크로-op 캐시(133) 및 명령어 캐시 유닛(134)에 커플링된 브랜치 예측 유닛(132)을 포함하고, 명령어 캐시 유닛(134)은 명령어 TLB(translation lookaside buffer)(136)에 커플링되며, 명령어 TLB(translation lookaside buffer)(136)는 명령어 페치 유닛(138)에 커플링되고, 명령어 페치 유닛(138)은 디코드 유닛(140)에 커플링된다. 디코드 유닛(140)(또는 디코더)은 명령어들을 디코드하고, 원래의 명령어들로부터 디코드되거나, 원래의 명령어들을 다른 방식으로 반영하거나, 원래의 명령어들로부터 도출되는, 하나 이상의 마이크로-연산, 마이크로-코드 엔트리 포인트, 마이크로명령어, 다른 명령어, 또는 다른 제어 신호를 출력으로서 생성할 수 있다. 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들 등은 적어도 마이크로-op 캐시(133)에 저장될 수 있다. 디코드 유닛(140)은 다양한 상이한 메커니즘들을 사용하여 구현될 수 있다. 적당한 메커니즘들의 예들은 룩업 테이블들, 하드웨어 구현들, PLA들(programmable logic arrays), 마이크로코드 판독 전용 메모리들(ROM들) 등을 포함하지만, 이들로 제한되지 않는다. 일 실시예에서, 코어(190)는 특정한 매크로명령어들에 대한 마이크로코드를 저장하는 마이크로코드 ROM 또는 다른 매체를 (예컨대, 디코드 유닛(140)에 또는 그렇지 않고 프런트 엔드 유닛(130) 내에) 포함한다. 마이크로-op 캐시(133) 및 디코드 유닛(140)은 실행 엔진 유닛(150) 내의 리네임/할당기 유닛(rename/allocator unit)(152)에 커플링된다. 다양한 실시예들에서, 133과 같은 마이크로-op 캐시는 또한 또는 그 대신에 op-캐시, u-op 캐시, uop-캐시, 또는 μop-캐시라고 지칭될 수 있으며; 마이크로-연산들은 마이크로-op들, u-op들, uop들, 및 μop들이라고 지칭될 수 있다.
실행 엔진 유닛(150)은 회수 유닛(retirement unit)(154) 및 하나 이상의 스케줄러 유닛(들)(156)의 세트에 커플링된 리네임/할당기 유닛(152)을 포함한다. 스케줄러 유닛(들)(156)은, 예약 스테이션들(reservations stations), 중앙 명령어 윈도(central instruction window) 등을 포함한, 임의의 수의 상이한 스케줄러를 나타낸다. 스케줄러 유닛(들)(156)은 물리 레지스터 파일(들) 유닛(들)(158)에 커플링된다. 물리 레지스터 파일(들) 유닛들(158) 각각은 하나 이상의 물리 레지스터 파일을 나타내며, 그 중 상이한 물리 레지스터 파일들은, 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수(packed integer), 패킹된 부동 소수점(packed floating point), 벡터 정수, 벡터 부동 소수점, 상태(예컨대, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은, 하나 이상의 상이한 데이터 타입을 저장한다. 일 실시예에서, 물리 레지스터 파일(들) 유닛(158)은 벡터 레지스터들 유닛, 기입 마스크 레지스터들 유닛, 및 스칼라 레지스터들 유닛을 포함한다. 이러한 레지스터 유닛들은 아키텍처 벡터 레지스터들(architectural vector registers), 벡터 마스크 레지스터들, 및 범용 레지스터들을 제공할 수 있다. 물리 레지스터 파일(들) 유닛(들)(158)은 레지스터 리네이밍 및 비순차 실행이 구현될 수 있는 다양한 방식들(예컨대, 재정렬 버퍼(들)(reorder buffer(s)) 및 회수 레지스터 파일(들)(retirement register file(s))을 사용하는 것; 장래 파일(들)(future file(s)), 이력 버퍼(들), 및 회수 레지스터 파일(들)을 사용하는 것; 레지스터 맵들 및 레지스터들의 풀(pool)을 사용하는 것; 기타)을 예시하기 위해 회수 유닛(154)에 의해 오버랩된다. 회수 유닛(154) 및 물리 레지스터 파일(들) 유닛(들)(158)은 실행 클러스터(들)(160)에 커플링된다. 실행 클러스터(들)(160)는 하나 이상의 실행 유닛(162)의 세트 및 하나 이상의 메모리 액세스 유닛(164)의 세트를 포함한다. 실행 유닛들(162)은 다양한 타입의 데이터(예컨대, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예컨대, 시프트들, 가산, 감산, 승산)을 수행할 수 있다. 일부 실시예들이 특정 기능들 또는 기능들의 세트들에 전용된 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단지 하나의 실행 유닛 또는 모두가 모든 기능들을 수행하는 다수의 실행 유닛들을 포함할 수 있다. 스케줄러 유닛(들)(156), 물리 레지스터 파일(들) 유닛(들)(158), 및 실행 클러스터(들)(160)는 어쩌면 복수인 것으로 도시되어 있는데, 그 이유는 특정 실시예들이 특정 타입의 데이터/연산들에 대해 별개의 파이프라인들(예컨대, 각각이 그 자신의 스케줄러 유닛, 물리 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 가지는, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인 - 그리고 별개의 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(164)을 갖는 특정 실시예들이 구현됨)을 생성하기 때문이다. 별개의 파이프라인들이 사용되는 경우, 이러한 파이프라인들 중 하나 이상이 비순차 발행/실행일 수 있고 나머지는 순차 발행/실행일 수 있다는 점이 또한 이해되어야 한다.
메모리 액세스 유닛들(164)의 세트는, 레벨 2(L2) 캐시 유닛(176)에 커플링된 데이터 캐시 유닛(174)에 커플링된 데이터 TLB 유닛(172)을 포함하는, 메모리 유닛(170)에 커플링된다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛들(164)은 로드 유닛(load unit), 어드레스 저장 유닛(store address unit), 및 데이터 저장 유닛(store data unit)을 포함할 수 있으며, 이들 각각은 메모리 유닛(170) 내의 데이터 TLB 유닛(172)에 커플링된다. 명령어 캐시 유닛(134)은 메모리 유닛(170) 내의 레벨 2(L2) 캐시 유닛(176)에 추가로 커플링된다. L2 캐시 유닛(176)은 하나 이상의 다른 레벨의 캐시에 그리고 궁극적으로 메인 메모리에 커플링된다.
예로서, 예시적인 레지스터 리네이밍, 비순차 발행/실행 코어 아키텍처는 파이프라인(100)을 다음과 같이 구현할 수 있다: 1) 명령어 페치(138)는 페치 및 길이 디코딩 스테이지들(102 및 104)을 수행하고; 2) 디코드 유닛(140)은 디코드 스테이지(106)를 수행하며; 3) 리네임/할당기 유닛(152)은 할당 스테이지(108) 및 리네이밍 스테이지(110)를 수행하고; 4) 스케줄러 유닛(들)(156)은 스케줄 스테이지(112)를 수행하며; 5) 물리 레지스터 파일(들) 유닛(들)(158) 및 메모리 유닛(170)은 레지스터 판독/메모리 판독 스테이지(114)를 수행하고; 실행 클러스터(160)는 실행 스테이지(116)를 수행하며; 6) 메모리 유닛(170) 및 물리 레지스터 파일(들) 유닛(들)(158)은 라이트 백/메모리 기입 스테이지(118)를 수행하고; 7) 다양한 유닛들이 예외 핸들링 스테이지(122)에 관여될 수 있으며; 8) 회수 유닛(154) 및 물리 레지스터 파일(들) 유닛(들)(158)은 커밋 스테이지(124)를 수행한다.
코어(190)는 본 명세서에 설명된 명령어(들)를 포함한, 하나 이상의 명령어 세트(예컨대, x86 명령어 세트(보다 새로운 버전들에서 추가된 일부 확장들을 가짐); 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트; 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트(NEON과 같은 임의적 부가 확장들을 가짐), IBM의 "Power" 명령어 세트, 또는 RISC 및 CISC 명령어 세트들 둘 다를 포함한, 임의의 다른 명령어 세트)를 지원할 수 있다. 일 실시예에서, 코어(190)는 패킹된 데이터 명령어 세트 확장(예컨대, AVX, AVX2, AVX-512)을 지원하기 위한 로직을 포함하며, 그로써 많은 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹된 데이터를 사용하여 수행될 수 있게 해준다.
코어가 멀티스레딩(연산들 또는 스레드들의 2개 이상의 병렬 세트를 실행하는 것)을 지원할 수 있고, 타임 슬라이싱된 멀티스레딩(time sliced multithreading), SMT(예컨대, 단일 물리 코어는 물리 코어가 동시에 멀티스레딩하는 스레드들 각각에 대한 논리 코어를 제공함), 또는 이들의 조합(예컨대, 인텔® 하이퍼스레딩(Hyperthreading) 기술에서와 같이, 타임 슬라이싱된 페칭 및 디코딩, 그리고 그 이후의 SMT)을 포함한 각종의 방식들로 그렇게 할 수 있다는 점이 이해되어야 한다.
레지스터 리네이밍이 비순차 실행의 맥락에서 설명되지만, 레지스터 리네이밍이 순차 아키텍처로 사용될 수 있다는 점이 이해되어야 한다. 프로세서의 예시된 실시예가 별개의 명령어 및 데이터 캐시 유닛들(134/174) 및 공유 L2 캐시 유닛(176)을 또한 포함하지만, 대안의 실시예들은, 예를 들어, 레벨 1(L1) 내부 캐시, 또는 다수의 레벨들의 내부 캐시와 같은, 명령어들 및 데이터 둘 다를 위한 단일 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 내부 캐시 및 코어 및/또는 프로세서의 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안적으로, 캐시(들) 전부가 코어 및/또는 프로세서의 외부에 있을 수 있다.
특정 예시적인 코어 아키텍처
도 2a 및 도 2b는 보다 구체적인 예시적인 코어 아키텍처의 블록 다이어그램을 예시하고 있으며, 이 코어는 칩 내의 몇 개의 로직 블록(동일한 타입 및/또는 상이한 타입들의 다른 코어들을 포함함) 중 하나일 것이다. 로직 블록들은, 응용분야에 따라, 일부 고정 기능 로직, 메모리 I/O 인터페이스들, 및 다른 필요한 I/O 로직과 고 대역폭 인터커넥트 네트워크(예컨대, 링 네트워크(ring network))를 통해 통신한다.
도 2a는 본 발명의 실시예들에 따른, 단일 프로세서 코어를, 온-다이 인터커넥트 네트워크(202)에 대한 그의 접속 및 레벨 2(L2) 캐시의 그의 로컬 서브세트(204)와 함께 나타낸, 블록 다이어그램이다. 일 실시예에서, 명령어 디코더(200)는 패킹된 데이터 명령어 세트 확장을 갖는 x86 명령어 세트를 지원한다. L1 캐시(206)는 스칼라 및 벡터 유닛들 내로의 캐시 메모리에 대한 저 레이턴시 액세스들을 가능하게 해준다. (설계를 단순화하기 위한) 일 실시예에서, 스칼라 유닛(208) 및 벡터 유닛(210)이 별개의 레지스터 세트들(제각기, 스칼라 레지스터들(212) 및 벡터 레지스터들(214))을 사용하고 이들 사이에서 전송되는 데이터는 메모리에 기입되고 이어서 레벨 1(L1) 캐시(206)로부터 리드 백(read back)되지만, 본 발명의 대안의 실시예들은 상이한 접근법(예컨대, 단일 레지스터 세트를 사용하는 것 또는 기입되고 리드 백되는 일 없이 2개의 레지스터 파일 사이에서 데이터가 전송될 수 있게 해주는 통신 경로를 포함하는 것)을 사용할 수 있다.
로컬 L2 캐시 서브세트(204)는, 프로세서 코어당 하나씩, 별개의 로컬 서브세트들로 분할되는 글로벌 L2 캐시(global L2 cache)의 일부이다. 각각의 프로세서 코어는 그 자신의 로컬 L2 캐시 서브세트(204)로의 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독되는 데이터는 자신의 L2 캐시 서브세트(204)에 저장되고, 다른 프로세서 코어들이 그들 자신의 로컬 L2 캐시 서브세트들에 액세스하는 것과 병렬로, 신속하게 액세스될 수 있다. 프로세서 코어에 의해 기입되는 데이터는 그 자신의 L2 캐시 서브세트(204)에 저장되고, 필요한 경우, 다른 서브세트들로부터 플러시된다(flushed). 링 네트워크는 공유 데이터에 대한 일관성(coherency)을 보장한다. 프로세서 코어들, L2 캐시들 및 다른 로직 블록들과 같은 에이전트들이 칩 내에서 서로 통신할 수 있게 해주기 위해 링 네트워크는 양방향이다. 각각의 링 데이터 경로는 방향당 1012-비트 폭이다.
도 2b는 본 발명의 실시예들에 따른 도 2a에서의 프로세서 코어의 일부의 확대도이다. 도 2b는 L1 캐시(204)의 L1 데이터 캐시(206A) 부분은 물론, 벡터 유닛(210) 및 벡터 레지스터들(214)에 관한 추가 상세를 포함한다. 구체적으로, 벡터 유닛(210)은, 정수, 단정도(single-precision) 부동 소수점, 및 배정도(double-precision) 부동 소수점 명령어들 중 하나 이상을 실행하는, 16-와이드(16-wide) 벡터 프로세싱 유닛(vector processing unit)(VPU)(16-와이드 ALU(228)를 참조)이다. VPU는 스위즐 유닛(swizzle unit)(220)을 사용하여 레지스터 입력들을 스위즐링(swizzling)하는 것, 수치 변환 유닛들(numeric convert units)(222A 및 222B)을 사용한 수치 변환, 및 메모리 입력 상의 복제 유닛(224)을 사용한 복제를 지원한다. 기입 마스크 레지스터들(226)은 결과적인 벡터 기입들을 예측하는 것을 가능하게 해준다.
특정 예시적인 비순차 코어 아키텍처
도 3은 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 비순차 발행/실행 프로세서 코어의 블록 다이어그램이다. 도 3에서, 프로세서 코어(300)는 프런트 엔드 유닛(310), 정수 유닛(320), FP 유닛(330), 로드-저장 유닛(340), 및 레벨 2(L2) 캐시 유닛(350)을 포함한다. 도 3은 예시 목적들을 위해 제공되며, 그에 따라, 본 발명의 실시예들에 따른 가능한 많은 접근법들 중 하나에 따라 배열되고 명명된 다양한 유닛들을 도시하고 있다. 임의의 하나 이상의 실시예가 하나 이상의 방식으로 예시될 수 있다. 도 3에 도시된 각각의 유닛은 실시예들의 다른 표현들에서 다른 유닛들에 포함될 수 있는 회로부 및/또는 구조들을 포함할 수 있다. 예를 들어, 프런트 엔드 유닛(310)은 부가적으로 또는 대안적으로, 도 4에서의 페치 유닛(400)과 같은, 페치 유닛, 및, 도 5에서의 디코드 유닛(500)과 같은, 디코드 유닛을 포함하는 것으로 예시되고 설명될 수 있고; 정수 유닛(320), FP 유닛(330), 및 로드-저장 유닛(340) 중 임의의 것 또는 전부는 부가적으로 또는 대안적으로 하나 이상의 실행 유닛으로서, 개별적으로 또는 집합적으로, 예시되고 설명될 수 있으며; 기타 등등이다. 게다가, 코어(300) 내의 다양한 유닛들은 다양한 방식들로 커플링될 수 있고; 따라서, 편의상, 상이한 도면들은 상이한 보다 큰 유닛들 내에 유닛들을 도시할 수 있으며; 예를 들어, 특정의 유닛은 제1 도면에서 제1 보다 큰 유닛 내에 그리고 제2 도면에서 제2 보다 큰 유닛 내에 도시될 수 있다.
도 3에서, 프런트 엔드 유닛(310)은 브랜치 예측 유닛(311), 마이크로-연산-캐시(op-캐시) 유닛(312), 명령어 캐시(i-캐시) 유닛(313), 디코드 유닛(314), 및 마이크로-연산(마이크로-op) 큐 유닛(315)을 포함한다. 브랜치 예측 유닛(311)은 평균 브랜치 지연을 감소시키기 위한, 브랜치 타깃 버퍼(branch-target buffer)(BTB)와 같은, 브랜치 예측 회로부를 포함하고, op-캐시 유닛(312) 및 i-캐시 유닛(313)에 커플링된다. op-캐시 유닛(312)은 명령어들과 연관된 마이크로-op들을 캐싱할 op-캐시를 포함한다. I-캐시(313) 유닛은 명령어들을 캐싱할, 일 실시예에서 64K, 4-웨이(four-way) i-캐시일 수 있는, i-캐시를 포함한다. I-캐시 유닛(313)은 디코드될 캐싱된 명령어들을 제공하기 위해 디코드 유닛(314)에 커플링된다. 디코드 유닛(314)은 명령어들을 디코드하기 위한, 명령어 디코더와 같은, 디코딩 회로부를 포함한다. 일 실시예에서, 프런트 엔드 유닛(310)은 클록 사이클당 최대 4개의 명령어를 페치하고 디코드 유닛(314)은 클록 사이클당 최대 4개의 명령어를 디코드할 수 있다. op-캐시 유닛(312) 및 디코드 유닛(314) 각각은 마이크로-op들을 마이크로-op 큐 유닛(315)에 로드하기 위한 2개의 경로를 제공하기 위해 마이크로-op 큐 유닛(315)에 커플링된다. 마이크로-op 큐 유닛(315)은, 일 실시예에서 사이클당 6개의 마이크로-op를 하나 이상의 실행 유닛으로 디스패치할 수 있는, 마이크로-op 큐를 포함한다.
또한 도 3에서, 정수 유닛(320)은 정수 리네임 유닛(321); 정수 스케줄러 유닛들(322A, 322B, 322C, 322D, 322E, 및 322F)(집합적으로, 정수 스케줄러 유닛들(322)); 정수 물리 레지스터 파일(323); 산술 로직 유닛들(arithmetic-logic units)(ALU들)(324A, 324B, 324C, 및 324D)(집합적으로, ALU들(324)); 및 어드레스 생성 유닛들(address generation units)(AGU들)(325A 및 325B)(집합적으로, AGU들(325))을 포함한다. 정수 리네임 유닛(321)은 ALU들(324) 및/또는 AGU들(325) 중 하나 이상에 의해, 전체적으로 또는 부분적으로, 실행될 하나 이상의 마이크로-op를 수신하기 위해 마이크로-op 큐 유닛(315)에 커플링된다. 정수 리네임 유닛(321)은, 정수 레지스터 리네이밍을 제공하기 위해, 레지스터 리네이밍 회로부를 포함하고 정수 스케줄러 유닛들(322)에 또한 커플링되며, 정수 스케줄러 유닛들(322)은 차례로 정수 물리 레지스터 파일(323)에 커플링된다. 정수 스케줄러 유닛들(322)은 ALU들(324) 및/또는 AGU들(325) 중 하나 이상에 의해, 전체적으로 또는 부분적으로, 실행될 마이크로-op들을 스케줄링하기 위한 스케줄링 회로부를 포함한다. 정수 물리 레지스터 파일(323)은, 일 실시예에서 168개의 물리 정수 레지스터를 포함할 수 있는, 물리 정수 레지스터들의 파일을 포함한다. ALU들(324) 및 AGU들(325) 각각은 마이크로-op들의 실행에서 입력들로서 사용될 값들을 수신하기 위해 그리고/또는 마이크로-op들의 실행의 출력들로서 값들을 제공하기 위해 물리 레지스터 파일(323)에 커플링된다.
또한 도 3에서, FP 유닛(330)은 FP 리네임 유닛(331), FP 스케줄러 유닛(332), FP 레지스터 파일(333), FP 승산기들(334A 및 334B)(집합적으로, FP 승산기들(334)), 및 FP 가산기들(335A 및 335B)(집합적으로, FP 가산기들(335))을 포함한다. FP 리네임 유닛(331)은 FP 승산기들(334) 및/또는 FP 가산기들(335) 중 하나 이상에 의해, 전체적으로 또는 부분적으로, 실행될 하나 이상의 마이크로-op를 수신하기 위해 마이크로-op 큐 유닛(315)에 커플링된다. FP 리네임 유닛(331)은, FP 레지스터 리네이밍을 제공하기 위해, 레지스터 리네이밍 회로부를 포함하고 FP 스케줄러 유닛(332)에 또한 커플링되며, FP 스케줄러 유닛(332)은 차례로 FP 물리 레지스터 파일(333)에 커플링된다. FP 스케줄러 유닛(332)은 FP 승산기들(334) 및/또는 FP 가산기들(335) 중 하나 이상에 의해, 전체적으로 또는 부분적으로, 실행될 마이크로-op들을 스케줄링하기 위한 스케줄링 회로부를 포함한다. FP 승산기들(334) 및 FP 가산기들(335) 각각은 마이크로-op들의 실행에서 입력들로서 사용될 값들을 수신하기 위해 그리고/또는 마이크로-op들의 실행의 출력들로서 값들을 제공하기 위해 FP 레지스터 파일(333)에 커플링된다.
또한 도 3에서, 로드-저장 유닛(340)은 로드-저장 큐 유닛(341) 및 데이터 캐시(d-캐시) 유닛(342)을 포함한다. 로드-저장 큐 유닛(341)은 로드 및/또는 저장 동작들을 위한 메모리 어드레스들을 수신하기 위해 AGU들(325)에 커플링된, 일 실시예에서 클록 사이클당 2개의 로드 및 하나의 저장을 제공하는, 임의의 수의 로드 및/또는 저장 큐를 포함할 수 있다. D-캐시 유닛(342)은 마이크로-op들의 실행에 의해 생성되고 마이크로-op들의 실행에서 사용될 데이터를 수신하고 제공하기 위해 정수 물리 레지스터 파일(323), FP 레지스터 파일(333), 및 로드-저장 큐 유닛(341)에 커플링된, 데이터를 캐싱할, 일 실시예에서 32K, 8-웨이 레벨 1(L1) d-캐시일 수 있는, d-캐시를 포함한다.
또한 도 3에서, L2 캐시 유닛(350)은 명령어들 및 데이터를 캐싱할, 일 실시예에서 512K, 8-웨이 캐시일 수 있는, L2 캐시를 포함한다.
도 4는, 도 3의 코어(300)와 같은, 프로세서 코어 및/또는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 페치 유닛의 블록 다이어그램이다. 도 4에서, 페치 유닛(400)은 다음 프로그램 카운트(PC) 유닛(410), TLB(translation lookaside buffer) 유닛(420), 해시 퍼셉트론 유닛(hash perceptron unit)(430), BTB 리턴 스택 ITA(indirect target array) 유닛(440), 물리 요청 큐 유닛(450), 마이크로-태그 유닛(460), 및 i-캐시 유닛(470)을 포함한다.
도 5는, 도 3의 코어(300)와 같은, 프로세서 코어 및/또는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 디코드 유닛의 블록 다이어그램이다. 도 5에서, 디코드 유닛(500)은 명령어 바이트 버퍼 유닛(510), 피킹(pick) 유닛(520), 디코드 유닛(530), op-캐시 유닛(540), 마이크로-op 큐 유닛(550), 마이크로코드 판독 전용 메모리(ROM) 유닛(560), 스택 엔진 메모리 파일(memfile) 유닛(570), 및 디스패치 유닛(580)을 포함한다.
도 6은, 도 3의 코어(300)와 같은, 프로세서 코어 및/또는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 정수 실행 유닛의 블록 다이어그램이다. 도 6에서, 정수 실행 유닛(600)은 맵 유닛(610); 회수 큐 유닛(620); 산술 로직 큐(arithmetic-logic queue)(ALQ) 유닛들(630A, 630B, 630C, 및 630D)(집합적으로, ALQ들(630)); 어드레스 생성 큐(address generation queue)(AGQ) 유닛들(640A 및 640B)(집합적으로, AGQ들(640)); 물리 레지스터 파일 유닛(650), 포워딩 멀티플렉서(mux) 유닛(660); ALU들(670A, 670B, 670C, 및 670D)(집합적으로, ALU들(670)); AGU들(680A 및 680B)(집합적으로, AGU들(680)); 및 로드-저장 유닛(690)을 포함한다.
도 7은, 도 3의 코어(300)와 같은, 프로세서 코어 또는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 FP 실행 유닛의 블록 다이어그램이다. 도 7에서, FP 실행 유닛(700)은 비-스케줄링가능 마이크로-op 큐 유닛(710), 스케줄링가능 마이크로-op 큐 유닛(720), 회수 큐 유닛(730), FP 변환 유닛(740), FP 물리 레지스터 파일(750), 포워딩 mux 유닛(760), FP 승산기들(770A 및 770B)(집합적으로, FP 승산기들(770)), 및 FP 가산기들(780A 및 780B)(집합적으로, FP 가산기들(780))을 포함한다.
도 8은, 도 3의 코어(300)와 같은, 프로세서 코어 또는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 로드/저장 유닛의 블록 다이어그램이다. 도 8에서, 로드/저장 유닛(800)은 로드 큐 유닛(810), 로드-파이프 피킹 유닛들(811A 및 811B)(집합적으로, 로드 피킹 유닛들(811)), TLB 유닛들(812A 및 812B)(집합적으로, TLB 유닛들(812)), 데이터 파이프 유닛들(813A 및 813B)(집합적으로, 데이터 파이프 유닛들(813)), 저장 큐 유닛(820), 프리페치 유닛(821), 저장-파이프 피킹 유닛들(822), 저장 파이프 유닛(823), 저장 커밋 유닛(824), L1/L2 TLB 및 데이터 캐시 태그 어레이(830), L1 데이터 캐시(840), 메모리-어드레스 버퍼(850), 및 기입-결합 버퍼(860)를 포함한다.
도 9는 본 발명의 실시예들에 따른 프로세서에서의 SMT를 지원하는, 도 3의 코어(300)와 같은, 예시적인 비순차 발행/실행 프로세서 코어의 블록 다이어그램이다. 도 9에서, 프로세서 코어(900)는 프런트 엔드 유닛(910), 정수 유닛(920), FP 유닛(930), 로드-저장 유닛(940), L2 캐시 유닛(950), 및 회수 유닛(960)을 포함한다. 프런트 엔드 유닛(910)은 브랜치 예측 유닛(911), op-캐시 유닛(912), i-캐시 유닛(913), 디코드 유닛(914), 마이크로-op 큐 유닛(915), 및 명령어 TLB 유닛(916)을 포함한다. 정수 유닛(920)은 정수 리네임 유닛(921), 정수 스케줄러 유닛(922), 정수 물리 레지스터 파일(923), ALU들(924), 및 AGU들(925)을 포함한다. FP 유닛(930)은 FP 리네임 유닛(931), FP 스케줄러 유닛(932), FP 레지스터 파일(933), FP 승산기들(934A 및 934B)(집합적으로, FP 승산기들(934)), 및 FP 가산기들(935A 및 935B)(집합적으로, FP 가산기들(935))을 포함한다. 로드-저장 유닛(940)은 로드 큐 유닛(941A) 및 저장 큐 유닛(941B)(집합적으로, 로드-저장 큐 유닛(941)), 데이터 캐시(d-캐시) 유닛(942), 및 TLB 유닛(943)을 포함한다. 회수 유닛(960)은 회수 큐를 포함한다.
SMT 특징들
본 발명의 실시예들에 따른 프로세서 코어들은 SMT를 지원하기 위한 다양한 특징들을 포함할 수 있다. 다수의 그러한 특징들이 이하에서 비제한적인 예들을 사용하여 개별적으로 설명되지만, 실시예들은 그러한 특징들의 임의의 조합을 포함할 수 있다.
리소스들의 정적 파티셔닝
프로세서 코어는 일부 예시적인 실시예들에 따른 SMT 정적 파티셔닝 특징을 지원할 수 있다. 스레드들은 동시 멀티스레딩 파이프라인에서 정적으로 공유되는 이용가능한 리소스들에 배정될 수 있다. 일부 실시예들에서, 스레드들은 성능 및 효율을 개선시키기 위해 패턴 기반 알고리즘과 같은 기법들을 사용하여 이용가능한 리소스들에 배정될 수 있다. 일부 실시예들에서, 이 특징은 정적으로 공유된 리소스들에 대한 스레드들 간의 보다 효율적인 리소스 공유를 제공하는 것에 의해 컴퓨터 시스템들을 개선시킬 수 있다. 이는 또한 그렇지 않았으면 SMT 정적 파티셔닝으로 인해 사용되지 않은 채로 있었을 이용가능한 리소스들을 사용할 수 있다.
예를 들어, 파이프라인에서의 리소스들은 양쪽 스레드들에 동일한 리소스들을 제공하기 위해 2개의 스레드 사이에서, 예컨대, 50% 대 50%로, 정적으로 공유될 수 있다. 일부 실시예들에서, 상이한 퍼센티지의 이용가능한 리소스들이, 예컨대, 작업부하 패턴들에 기초하여, 각각의 스레드에 배정될 수 있다. 예를 들어, 하나의 스레드가 다른 스레드보다 긴 시간 동안 스톨링(stalling)하고 있으며 다른 스레드에 대해 이용가능한 비어 있는 엔트리들이 있는 경우, 이용가능한 엔트리들을 정적으로 공유된 리소스에서 비어 있는 채로 유지하지 않고 이용가능한 엔트리들이 스톨링된 스레드에 배정될 수 있다.
일부 실시예들에서, 하나 초과의 스레드가 유사한 패턴을 가질 수 있다. 그러한 경우들에서, 스레드들 간의 동순위(tie)의 경우에 리소스들을 할당하는 데 우선순위 스킴이 사용될 수 있다. 동순위-해결(tie-breaking)은, 예를 들어, 랜덤 선택, 보다 낮은 번호의 스레드를 선택하는 것, 보다 높은 번호의 스레드를 선택하는 것, 및/또는 교번하는 스레드들을 선택하는 것에 의해 수행될 수 있다.
도 10은 일부 실시예들에 따른 프로세서에 포함될 수 있는 SMT 정적 파티셔닝 특징을 예시하는 블록 다이어그램이다. SMT 정적 파티셔닝 특징은 예시적인 실시예에 따른 패턴 검출 블록(1001)을 포함할 수 있다. 제1 및 제2 리소스들이 스레드들(T0 및 T1)에 정적으로 배정될 수 있다. 룩업 패턴 베이스 테이블(lookup pattern base table)은 스레드(T1)가 긴 스톨 시간(stall time)을 갖는다고 결정할 수 있다. 패턴 검출 블록은 이어서 정적으로 배정된 리소스들을 패턴 입력에 기초하여 조정할 수 있다. 예를 들어, T1에 정적으로 배정된 제2 리소스가 T0에 배정될 수 있다.
일부 실시예들에서, 동적 파티셔닝은 ITLB(instruction translation lookaside buffer)와 같은 다른 정적으로 파티셔닝된 리소스들에 적용될 수 있다.
도 11은 일부 실시예들에 따른 프로세서에 의해 수행될 수 있는 SMT 정적 파티셔닝 특징을 위한 방법을 예시하는 흐름 다이어그램이다. 일부 실시예들에서, 이 방법은, 박스(CQB01)에 예시된 바와 같이, 파이프라인에서의 정적으로 공유된 리소스에 대한 스레드 스톨들(thread stalls)과 같은 패턴들을 검출하는 단계를 포함할 수 있다. 이 방법은, 박스(CQB02)에 예시된 바와 같이, 공유(예컨대, 50 대 50 공유)를 조정하는 단계를 추가로 포함할 수 있다. 조정하는 방법은, 예를 들어, 스톨들 또는 어떤 다른 유사한 이벤트들의 길이에 기초할 수 있다.
일부 실시예들의 요약
일 실시예는 제1 및 제2 정적으로 파티셔닝된 리소스 중 적어도 하나에 대한 패턴을 검출하고; 제1 및 제2 정적으로 파티셔닝된 리소스 중 적어도 하나의 할당을 조정하도록 구성된 프로세서를 포함할 수 있다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 파이프라인의 제1 및 제2 정적으로 파티셔닝된 리소스는 동시 멀티스레딩 파이프라인의 리소스들일 수 있다. 제1 및 제2 정적으로 파티셔닝된 리소스들은 제1 스레드와 제2 스레드 간에 할당될 수 있다. 프로세서는 패턴 기반 알고리즘에 기초하여 제1 및 제2 리소스들을 배정하도록 추가로 구성될 수 있다. 프로세서는 하나 이상의 작업부하 패턴에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하도록 추가로 구성될 수 있다. 프로세서는 제1 및 제2 스레드들 중 적어도 하나가 다른 스레드보다 긴 시간 기간 동안 스톨링했는지의 결정에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하도록 추가로 구성될 수 있다. 프로세서는 이용가능한 제1 및 제2 리소스들 중 적어도 하나와 연관된 비어 있는 엔트리들이 있는지의 결정에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하고, 제1 및 제2 스레드들 중 적어도 하나를 이용가능한 제1 및 제2 리소스들 중 적어도 하나에 배정하도록 추가로 구성될 수 있다. 프로세서는 우선순위 스킴에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하도록 추가로 구성될 수 있다. 프로세서는 룩업 패턴 베이스 테이블에 기초하여 스톨이 발생했는지를 결정하도록 추가로 구성될 수 있다. 제1 및 제2 정적으로 파티셔닝된 리소스들은 ITLB(instruction translation lookaside buffer)의 리소스들일 수 있다.
일 실시예는 제1 및 제2 정적으로 파티셔닝된 리소스에 대한 패턴 중 적어도 하나를 검출하는 단계; 및 제1 및 제2 정적으로 파티셔닝된 리소스 중 적어도 하나의 할당을 조정하는 단계를 포함하는 방법을 포함할 수 있다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 제1 및 제2 정적으로 파티셔닝된 리소스는 동시 멀티스레딩 파이프라인의 리소스들일 수 있다. 제1 및 제2 정적으로 파티셔닝된 리소스들은 제1 스레드와 제2 스레드 간에 할당될 수 있다. 이 방법은 패턴 기반 알고리즘에 기초하여 제1 및 제2 리소스들을 배정하는 단계를 추가로 포함할 수 있다. 이 방법은 하나 이상의 작업부하 패턴에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하는 단계를 추가로 포함할 수 있다. 이 방법은 제1 및 제2 스레드들 중 적어도 하나가 다른 스레드보다 긴 시간 기간 동안 스톨링했는지의 결정에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하는 단계를 추가로 포함할 수 있다. 이 방법은 이용가능한 제1 및 제2 리소스들 중 적어도 하나와 연관된 비어 있는 엔트리들이 있는지의 결정에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하고, 제1 및 제2 스레드들 중 적어도 하나를 이용가능한 제1 및 제2 리소스들 중 적어도 하나에 배정하는 단계를 추가로 포함할 수 있다. 이 방법은 우선순위 스킴에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하는 단계를 추가로 포함할 수 있다. 이 방법은 룩업 패턴 베이스 테이블에 기초하여 스톨이 발생했는지를 결정하는 단계를 추가로 포함할 수 있다. 제1 및 제2 정적으로 파티셔닝된 리소스들은 ITLB(instruction translation lookaside buffer)의 리소스들일 수 있다.
일 실시예는 프로세서에 의해 실행될 때 프로세서로 하여금 방법을 수행하게 하는 적어도 하나의 명령어를 저장하는 비일시적 머신 판독가능 매체를 포함할 수 있으며, 이 방법은 제1 및 제2 정적으로 파티셔닝된 리소스에 대한 패턴 중 적어도 하나를 검출하는 단계; 및 제1 및 제2 정적으로 파티셔닝된 리소스 중 적어도 하나의 할당을 조정하는 단계를 포함한다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 제1 및 제2 정적으로 파티셔닝된 리소스는 동시 멀티스레딩 파이프라인의 리소스들일 수 있다. 제1 및 제2 정적으로 파티셔닝된 리소스들은 제1 스레드와 제2 스레드 간에 할당될 수 있다. 이 방법은 패턴 기반 알고리즘에 기초하여 제1 및 제2 리소스들을 배정하는 단계를 추가로 포함할 수 있다. 이 방법은 하나 이상의 작업부하 패턴에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하는 단계를 추가로 포함할 수 있다. 이 방법은 제1 및 제2 스레드들 중 적어도 하나가 다른 스레드보다 긴 시간 기간 동안 스톨링했는지의 결정에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하는 단계를 추가로 포함할 수 있다. 이 방법은 이용가능한 제1 및 제2 리소스들 중 적어도 하나와 연관된 비어 있는 엔트리들이 있는지의 결정에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하고, 제1 및 제2 스레드들 중 적어도 하나를 이용가능한 제1 및 제2 리소스들 중 적어도 하나에 배정하는 단계를 추가로 포함할 수 있다. 이 방법은 우선순위 스킴에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하는 단계를 추가로 포함할 수 있다. 이 방법은 룩업 패턴 베이스 테이블에 기초하여 스톨이 발생했는지를 결정하는 단계를 추가로 포함할 수 있다. 제1 및 제2 정적으로 파티셔닝된 리소스들은 ITLB(instruction translation lookaside buffer)의 리소스들일 수 있다.
일 실시예는 메모리 및 프로세서를 포함하는 시스템을 포함할 수 있으며, 이 프로세서는 제1 및 제2 정적으로 파티셔닝된 리소스 중 적어도 하나에 대한 패턴을 검출하고; 제1 및 제2 정적으로 파티셔닝된 리소스 중 적어도 하나의 할당을 조정하도록 구성된다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 제1 및 제2 정적으로 파티셔닝된 리소스는 동시 멀티스레딩 파이프라인의 리소스들일 수 있다. 제1 및 제2 정적으로 파티셔닝된 리소스들은 제1 스레드와 제2 스레드 간에 할당될 수 있다. 프로세서는 패턴 기반 알고리즘에 기초하여 제1 및 제2 리소스들을 배정하도록 추가로 구성될 수 있다. 프로세서는 하나 이상의 작업부하 패턴에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하도록 추가로 구성될 수 있다. 프로세서는 제1 및 제2 스레드들 중 적어도 하나가 다른 스레드보다 긴 시간 기간 동안 스톨링했는지의 결정에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하도록 추가로 구성될 수 있다. 프로세서는 이용가능한 제1 및 제2 리소스들 중 적어도 하나와 연관된 비어 있는 엔트리들이 있는지의 결정에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하고, 제1 및 제2 스레드들 중 적어도 하나를 이용가능한 제1 및 제2 리소스들 중 적어도 하나에 배정하도록 추가로 구성될 수 있다. 프로세서는 우선순위 스킴에 기초하여 제1 및 제2 리소스들 중 적어도 하나를 배정하도록 추가로 구성될 수 있다. 프로세서는 룩업 패턴 베이스 테이블에 기초하여 스톨이 발생했는지를 결정하도록 추가로 구성될 수 있다. 제1 및 제2 정적으로 파티셔닝된 리소스들은 ITLB(instruction translation lookaside buffer)의 리소스들일 수 있다.
리소스들의 경쟁 공유
프로세서 코어는 본 발명의 실시예들에 따른 리소스들의 경쟁 공유를 갖는 SMT를 지원할 수 있다. 코어에서의 회로, 구조, 또는 다른 리소스는 스레드들이 우선순위를 위해 경쟁하는 정책에 기초하여 다수의 스레드들에 의해 공유될 수 있다. 도 9의 실시예에서, 이하의 리소스들 각각은 경쟁 정책에 기초하여 스레드들 사이에 또는 스레드들 간에 공유될 수 있다: 브랜치 예측 유닛(911), op-캐시 유닛(912), i-캐시 유닛(913), 디코드 유닛(914), 명령어 TLB 유닛(916), 정수 리네임 유닛(921), 정수 스케줄러 유닛(922), 정수 물리 레지스터 파일(923), ALU들(924), AGU들(925), FP 리네임 유닛(931), FP 스케줄러 유닛(932), FP 레지스터 파일(933), FP 승산기들(934A 및 934B), FP 가산기들(935A 및 935B), 로드 큐 유닛(941A), d-캐시 유닛(942), 및 TLB 유닛(943).
정수 리네임 유닛(921), 정수 스케줄러 유닛(922), FP 리네임 유닛(931), FP 스케줄러 유닛(932), 또는 로드 큐 유닛(941A)에서의 버퍼와 같은, 이러한 리소스들 중 일부는 스레드에 개별적으로 할당될 수 있는 엔트리들, 서브유닛들, 또는 다른 부분들을 가질 수 있다. 편의상, 이 타입의 리소스는 분할가능 리소스(divisible resource)라고 지칭될 수 있으며, 이 타입의 할당은 부분 할당(allocation-in-part)이라고 지칭될 수 있다. ALU들(924) 중 각각의 개별 ALU, AGU들(925) 중 각각의 개별 AGU, FP 승산기(934A), FP 승산기(934B), FP 가산기(935A), 또는 FP 가산기(935B)와 같은, 다른 것들만이 특정의 클록 사이클, 연산을 완료하기 위한 연속적인 클록 사이클들의 세트, 또는 연산의 다른 시간 기간 또는 지속기간 동안 전체적으로(in full) 할당될 수 있다. 편의상, 이 타입의 리소스는 분할불가능 리소스(indivisible resource)라고 지칭될 수 있으며, 이 타입의 할당은 전체 할당(allocation-in-full)이라고 지칭될 수 있다.
도 12는 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 리소스 할당기(1200)를 예시하는 블록 다이어그램이다. 리소스 할당기(1200)는 코어 회로, 구조, 유닛, 또는 리소스, 또는 그의 임의의 부분을 특정의 스레드에 할당하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 실시예들에서, 리소스 할당기(1200)는 단일 리소스 및/또는 다수의 리소스들을 할당하도록 구현될 수 있다. 어느 경우든지, 프로세서 또는 프로세서 코어는 리소스 할당기(1200)의 하나 이상의 실시예의 다수의 인스턴스들을 포함할 수 있으며, 각각은 임의의 하나 이상의 리소스를 할당하기 위한 것이고, 각각은 도 12에 도시된 블록들 중 임의의 하나 이상을 포함하며, 각각은 임의의 하나 이상의 리소스 할당 정책 또는 리소스 할당 정책들의 조합들을 구현하기 위한 것이다.
리소스 할당기(1200)는 추적기 회로(1210), 정책 회로(1220), 결정 회로(1230), 및 할당기 회로(1240)를 포함할 수 있다. 추적기 회로는 성능 이력 회로(1212), 사용 이력 회로(1214), 및 스레드 상태 회로(1216) 중 하나 이상을 포함할 수 있다. 정책 회로(1220)는 전력 정책 회로(1222), 공정성 정책 회로(1224), 성능 보증 정책 회로(1226), 및 스루풋 정책 회로(1228) 중 하나 이상을 포함할 수 있다. 실시예들은 할당될 리소스들의 타입들 및 수 및 원하는 정책들에 따라 다양한 방식들로 이러한 회로들 각각을 포함하고, 조합하며, 그리고/또는 구현할 수 있다.
성능 이력 회로(1212)는 하나 이상의 방식으로 스레드들의 성능을 모니터링하고, 추적하며, 기록하고, 그리고/또는 보고하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 일 실시예에서, 성능 이력 회로(1212)는 어떤 척도의 시간 또는 지속 시간당 회수되는 명령어들과 같은, 스레드당 하나 이상의 성능 척도를 카운트하기 위한 스레드당 하나 이상의 하드웨어 카운터(1212A)를 포함할 수 있다. 예를 들어, 시간 또는 지속기간의 척도는 클록 사이클들의 윈도일 수 있고, 여기서 (예컨대, 문자 'N'으로 표현되는) 윈도의 크기가 고정되고(예컨대, 하드와이어링되고), (예컨대, 하드웨어 또는 펌웨어에 의해) 구성가능하며, 그리고/또는 (예컨대, 소프트웨어에 의해) 프로그래밍가능할 수 있다. 일 실시예에서, N은 1024일 수 있다.
성능 이력 회로(1212)는 스레드의, 카운터들(1212A)에 의해 측정되는 바와 같은, 성능을 하나 이상의 다른 스레드와 비교하기 위한 하나 이상의 하드웨어 비교기(1212B)를 또한 포함할 수 있다. 예를 들어, N개의 클록 사이클의 각각의 윈도의 끝에서, 하드웨어 비교기들(1212B)은 제1 스레드에 의해 윈도 동안 회수된 명령어들의 수를 제2 스레드의 것과 비교할 수 있고, 카운터들(1212A)은 다음 윈도에 대해 리세트될 수 있다. 그 다음 윈도 동안, 이전의 윈도로부터의 비교의 결과는 이하에서 설명되는 바와 같은 정책 회로(1220) 및/또는 결정 회로(1230)에 의해 사용될 수 있다. 실시예들에서, 비교 결과는 스레드들의 랭킹(ranking)(예컨대, 어느 스레드가 보다 많은 명령어들을 회수했는지)일 수 있고, 비교 결과는 비(ratio)(예컨대, 제2 스레드에 의해 회수된 명령어들의 수에 대한 제1 스레드에 의해 회수된 명령어들의 수의 비의 계산 또는 근사화된 계산), 및/또는 임의의 다른 측정 또는 계산일 수 있다.
실시예들은 스레드당 하나 초과의 카운터를 포함할 수 있다. 예를 들어, 스레드당 2개의 별개의 카운터가 제공될 수 있다: "전력 소모적(power-hungry)" 것으로 식별된 명령어들(예컨대, 그의 실행은 전형적으로 다른 명령어들보다 많은 전력을 소비함)을 추적하기 위한 제1 카운터 및 다른(즉, 비-전력 소모적(non-power-hungry)) 명령어들을 카운트하기 위한 제2 카운터. 예를 들어, (이하에서 정의되는 바와 같은) AVX-512 FMA 명령어들은 별개의 카운터를 사용하여 (어쩌면 다른 전력 소모적 명령어들과 함께) 전력 소모적인 것으로 식별되고 추적될 수 있다.
사용 이력 회로(1214)는 스레드들에 의한 리소스들의 사용을 모니터링하고, 추적하며, 기록하고, 그리고/또는 보고하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 일 실시예에서, 사용 이력 회로(1214)는 스레드당 리소스의 사용을 카운트하기 위한 하나 이상의 하드웨어 카운터(1214A), 및 스레드들 간의 리소스의 사용을 비교하기 위한 하나 이상의 하드웨어 비교기(1214B)를 포함할 수 있다. 이하에서 설명되는 바와 같이, 카운터들(1214A) 및/또는 비교기들(1214B)로부터의 하나 이상의 결과는 정책 회로(1220) 및/또는 결정 회로(1230)에 의해 사용될 수 있다.
예를 들어, 버퍼와 같은 분할가능 리소스에 대해, 카운터는 스레드에 의해 점유된 엔트리들의 수를 카운트할 수 있다. 추가의 계산들 및/또는 할당 결정들을 위해 사용될 카운트는, 임의의 시점에서 직접 보고되거나 사용되는, 현재의 카운트일 수 있고, 그리고/또는 윈도(예컨대, 앞서 설명된 바와 같이 크기 N의 윈도)에 걸쳐 평균된, 평균 카운트일 수 있다. 분할불가능 리소스의 경우, 추가의 계산들 및/또는 할당 결정들을 위해 사용될 카운트는 시간 평균된 또는 시간 가중된 카운트일 수 있다(예컨대, 스레드가 시간 윈도 내에서 리소스를 사용한 횟수, 여기서 카운트는 각각의 시간 윈도의 끝에서 리세트되거나, 여기서 카운트는 각각의 시간 윈도의 끝에서 (2의 멱수로 나누기 위해) 우측으로 시프트된다(right-shifted)). 이러한 카운트들 중 임의의 것에 기초한 결과들은 카운트들 자체, 카운트들의 스레드당 랭킹(per-thread rankings), 및/또는 카운트들의 스레드 대 스레드 비(thread-to-thread ratios)일 수 있다.
스레드 상태 회로(1216)는 스레드의 상태를 모니터링하고, 추적하며, 기록하고, 그리고/또는 보고하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 스레드 상태 회로(1216)는, 긴 레이턴시 L2/L3 또는 다른 캐시 미스로 인해서와 같이, 스레드가 현재 스톨링되는지를 보고할 수 있다.
추적기 회로(1210)에 의해 보고되는 과거의 및 현재의 정보는 정책 회로(1220)에 의해 명시된 정책들에 따라 리소스 할당 계산들 및 결정들에서 사용될 수 있다. 이러한 정책들은, 전력 소비, 공정성, 최소 성능 보증, 및 스루풋의 고려사항들을 포함한, 임의의 우선순위들을 갖는, 임의의 타입의 정책들을, 임의의 조합들로, 포함할 수 있다.
전력 정책 회로(1222)는 하나 이상의 전력 정책을 구현하고 그리고/또는 정책 또는 정책들에 기초하여 스레드를 선호(favor)하거나 선택하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 이러한 정책들은, 임의의 우선순위들을 갖는, 임의의 타입의 전력 정책들을, 임의의 조합들로, 포함할 수 있다. 예를 들어, 보다 적은 수의 전력 소모적 명령어들을 사용하고 있는 스레드 또는 보다 느리게 진행하고 있는 스레드가 선호되거나 선택될 수 있다.
공정성 정책 회로(1224)는 하나 이상의 공정성 정책을 구현하고 그리고/또는 정책 또는 정책들에 기초하여 스레드를 선호하거나 선택하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 보다 낮은 최근 성능, 분할가능 리소스의 보다 낮은 점유율, 및/또는 분할불가능 리소스의 보다 낮은 최근 사용을 갖는 스레드가 선호되거나 선택될 수 있다.
성능 보증 정책 회로(1226)는 하나 이상의 최소 성능 보증 정책을 구현하고 그리고/또는 정책 또는 정책들에 기초하여 스레드를 선호하거나 선택하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 특정 최소 임계치 미만으로 진행 중인 스레드가 성능 보증 정책에 기초하여 선호되거나 선택될 수 있다.
스루풋 정책 회로(1228)는 하나 이상의 스루풋 정책을 구현하고 그리고/또는 정책 또는 정책들에 기초하여 스레드를 선호하거나 선택하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 다른 스레드들보다 상대적으로 더 많이 또는 더 빠르게 진행 중인 스레드가 선호되거나 선택될 수 있다.
전력 정책 회로(1222), 공정성 정책 회로(1224), 성능 보증 정책 회로(1226), 스루풋 정책 회로(1228), 및/또는 임의의 다른 정책 회로 중 임의의 것 또는 전부는 정책을 인에이블시키거나, 정책을 수정하거나(예컨대, 정책의 중요성 또는 정책에 의해 사용되는 하나 이상의 기준 또는 척도를 강화 또는 약화시키거나), 정책에 다른 방식으로 동적으로 영향을 미칠 정보 및/또는 기준들을 저장할 개별 저장 위치들 또는 레지스터들을 포함할 수 있다. 실시예들은 또한 또는 그 대신에 이 정보를 위한 중앙 또는 공유 저장 위치 또는 레지스터를 포함할 수 있다. 개별 또는 그룹 저장 위치들 중 임의의 하나 이상은 정책 레지스터(1220A)로서 표현되어 있다. 실시예들에서, 임의의 그러한 저장 위치 또는 레지스터는 (예컨대, 하드웨어 또는 펌웨어에 의해) 구성가능하거나 (예컨대, 소프트웨어에 의해) 프로그래밍가능할 수 있다.
결정 회로(1230)는 리소스를 할당할 스레드를 선택하는 것을 결과할 수 있는 정보 및/또는 그 결정에 관한 하나 이상의 지시 또는 신호를 생성하기 위해 사용하거나, 가중하거나, 우선순위화하거나, 필터링하거나, 비교하거나, 결합시키거나, 오버라이드하거나, 또는 다른 방식으로 프로세싱할 추적기 회로(1210)로부터의 정보, 결과들, 및/또는 신호들 그리고 정책 회로(1220)로부터의 정보, 기준들, 및/또는 신호들을 수신하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 스루풋 정책 및 최소 성능 보증을 포함하는 일 실시예에서, 스루풋 정책은 제1 스레드를 선호할 수 있지만, 결정 회로(1230)는 그 선호를 오버라이드하고 제2 스레드에 대한 최소 성능 보증을 충족시키는 데 도움을 주기 위해 제2 스레드를 선택할 수 있다. 실시예들에서, 리소스 할당기(1200)는 결정 회로(1230)의 하나 이상의 실시예의 다수의 인스턴스들을 포함할 수 있으며, 각각은 임의의 리소스 또는 리소스들의 그룹에 대한 것이고, 각각은 임의의 하나 이상의 리소스 할당 정책 또는 리소스 할당 정책들의 조합을 구현하기 위한 것이며, 각각은 이하에서 설명되는 임의의 하나 이상의 접근법 또는 접근법들의 조합을 구현하기 위한 것이고, 여기서 각각은 임의의 접근법 또는 접근법들의 조합에 따라 스레드를 선택하도록 구성되거나 프로그래밍될 수 있다(예컨대, 각각은 정책 회로(1220) 내의 각각의 별개의 정책 회로로부터 수신된 정보에 상이한 가중치를 배정할 수 있다).
분할불가능 리소스를 포함하는 실시예들에서, 결정 회로(1230)는 어느 스레드가 분할불가능 리소스의 동적 전체 할당(dynamic allocation-in-full)에 대해 우선순위를 갖는지를 결정할 수 있다. 분할가능 리소스를 포함하는 실시예들에서, 결정 회로(1230)는 어느 스레드가 분할가능 리소스 및/또는 분할가능 리소스의 일부의 동적 부분 할당(dynamic allocation-in-part)에 대한 우선순위를 갖는지, 및/또는 분할가능 리소스 중 얼마만큼(예컨대, 몇 개의 버퍼 엔트리)을 스레드에 할당해야 하는지를 결정할 수 있다.
일 실시예에서, 결정 회로(1230)는 하나 이상의 정보, 결정 결과, 지시자, 및/또는 신호를, 예를 들어, 이들을 할당기 회로(1240)에 의해 액세스가능한 하나 이상의 저장 위치에 저장하는 것 및/또는 이들을 직접 할당기 회로(1240)에게 송신하는 것에 의해, 생성하거나 제공할 수 있으며, 할당기 회로(1240)는 임의의 수의 다른 스레드들보다 우선순위를 가지는 단일 스레드를 식별할 수 있거나 2개 이상의 스레드의 우선순위 랭킹(priority ranking)을 명시할 수 있다.
할당기 회로(1240)는 리소스 할당 결정들에 따라 기능하고, 리소스 할당 결정들을 마무리하며(finalize), 그리고/또는 리소스 할당 결정들을 구현하기 위해, 예를 들어, 제1 스레드가 제2 스레드보다 우선순위를 갖는다는, 결정 회로(1230)로부터의, 결정에 응답하여, 그 스레드에 대한, 전체적으로 또는 부분적으로, 리소스(예컨대, 리소스(1250))의 할당을 지시하기 위한 하나 이상의 신호를 송신하기 위해, 결정 회로(1230)로부터 정보, 결정 결과들, 지시자들, 및/또는 신호들을 수신하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 그렇게 하기 위해, 할당기 회로(1240)는 특정의 스레드가 분할불가능 리소스를 사용할 수 있게 해주거나 분할가능 리소스의 하나 이상의 부분을 사용할 수 있게 해주는 하나 이상의 신호(예컨대, "go" 신호(1240C))를 디스패치 또는 다른 회로에게 송신할 수 있다.
실시예들에서, 할당기 회로(1240)는 또한 리소스를 사용하기 위한 하나 이상의 요청(예컨대, 요청들(1240A 및 1240B))을 수신할 수 있다. 이 요청들은 스레드들로부터의, 리소스로부터의, 및/또는 스레드 또는 리소스와 연관된 임의의 타입의 디스패치 회로부로부터의 신호들 및/또는 임의의 다른 타입의 지시들일 수 있다. 실시예들에서, 할당기 회로(1240)는 어느 스레드가 리소스를 할당받아야 하는지를 결정하기 위해, 예컨대, 결정 회로(1230)로부터의 정보, 결정 결과들, 지시자들, 및/또는 신호들을 사용하여, 스레드 요청들 사이에서 또는 스레드 요청들 간에 선택하거나 중재할 수 있다.
실시예들에서, 할당기 회로(1240)는 부가의 정보 또는 제약조건들에 따라 또는 이들에 기초하여 결정 회로(1230)로부터의 할당 결정들에 따라 기능하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 할당기 회로(1240)는 분할가능 리소스의 몇 개의 부분(예컨대, 버퍼의 몇 개의 엔트리)이 각각의 스레드에 전용되는지를 지시하는, 한 세트의 고정된, 구성가능한, 또는 프로그래밍가능한 저장 위치들 또는 레지스터들(1242) - 스레드당 하나의 레지스터를 가짐 -, 각각의 부분이 몇 개가 각각의 스레드에 의해 현재 사용 중인지를 추적하기 위한 한 세트의 카운터들(1244) - 스레드당 하나씩 있음 -, 및 스레드가 그의 전체 할당(full allocation)을 사용하고 있는지를 체크하기 위한 한 세트의 비교기들(1246) - 스레드당 하나씩 있음 - 을 포함할 수 있다. 할당기 회로(1240)는 결정 회로(1230)로부터의 할당 결정들을 수락하거나 거부하기 위해 비교기들(1246)로부터의 결과들을 사용할 수 있다. 그 대신에 또는 부가적으로, 일 실시예는 어느 스레드(또는 스레드들)가 그 리소스의 그 부분을 사용하도록 허용되는지를 지시하기 위해 분할가능 리소스의 각각의 부분(예컨대, 버퍼 내의 각각의 엔트리의 비트 또는 필드)에 대한 지시자를 위한 스토리지를 포함할 수 있으며, 할당기 회로(1240)는 결정 회로(1230)로부터의 할당 결정들을 수락하거나 거부하기 위해 저장된 지시자를 사용할 수 있다.
일부 실시예들의 요약
본 발명의 일 실시예는, 추적기 회로, 정책 회로, 결정 회로, 및 할당기 회로를 포함한, 리소스 할당기 및 리소스를 포함하는 프로세서를 포함할 수 있다. 추적기 회로는 리소스의 성능 이력, 리소스의 사용 이력, 및 스레드 상태 중 적어도 하나를 추적하도록 되어 있을 수 있다. 정책 회로는 리소스 할당 정책을 구현하기 위한 정책 정보를 제공하도록 되어 있을 수 있다. 결정 회로는 추적기 회로의 출력 및 정책 정보에 기초하여 스레드를 선택하도록 되어 있을 수 있다. 할당기 회로는 결정 회로의 출력을 사용하여 리소스를 스레드에 할당하도록 되어 있을 수 있다.
리소스들의 알고리즘적 경쟁 공유
프로세서 코어는 실시예들에 따른 알고리즘적 SMT 특징을 지원할 수 있다. 일부 실시예들에서, 이 특징은 파이프라인에서 경쟁적으로 공유되는 이용가능한 리소스들에 대한 스레드 배정의 문제를 해결한다. 일부 실시예들에서, 이 문제는 우선순위 알고리즘을 사용하여 해결된다. 일부 실시예들에서, 파이프라인에서의 브랜치 예측기 블록은 경쟁적으로 공유될 수 있고 효율적인 엔트리 할당을 위해 우선순위 알고리즘을 사용할 수 있다. 일부 실시예들에서, 우선순위 알고리즘은 하드웨어 및/또는 소프트웨어로 구현될 수 있다. 일부 실시예들에서, 2개 이상의 스레드에 대해 스레드 배정이 수행될 수 있다. 일부 실시예들에서, 스레드 배정은 가장 높은 IPC(instructions per clock) 및/또는 파이프라인 스루풋을 달성하기 위해 파이프라인에서 이용가능한 리소스에 가장 효율적인 스레드를 배정할 수 있다. 일부 실시예들에서, 이 특징은 이용가능한 리소스에 대한 스레드 할당을 우선순위화하기 위한 최상의 알려진 알고리즘을 제공할 수 있다. 스레드의 번호가 증가하고 그리고/또는 스레드들 간의 컨텍스트 스위치들(context switches)이 증가함에 따라, 이 특징은 리소스들을 효율적으로 할당하는 것에 의해 추가적인 이점들을 제공할 수 있다.
도 13은 실시예들에 따른 프로세서(1300)에 포함될 수 있는 알고리즘적 SMT 특징을 예시하는 블록 다이어그램이다. 우선순위 알고리즘 하드웨어는, 예를 들어, 동적 거동(dynamic behavior)에 기초한 관리를 포함할 수 있다. 우선순위 하드웨어는 이벤트 검출 블록(1301), 성능 카운터 플래그 블록(1302), 데드록 방지 블록(1303), 및 명령어 타입/클래스 블록(1304) 중 적어도 하나를 포함할 수 있다. 이벤트 검출 블록(1301)은, 예를 들어, 누크(nuke), 클리어(clear)(예컨대, JEClear 및 CRClear)의 빈도수, BR의 빈도수, 인터럽트, 및 캐시 미스들과 같은, 하나 이상의 이벤트를 검출할 수 있다. 성능 카운터 플래그 블록(1302)은, 예를 들어, 다음과 같은 것: 회수된 명령어들, 코드 미스들, L2/L3 미스들 중 하나 이상을 카운트할 수 있다. 데드록 방지 블록(1303)은 데드록 상태들을 방지할 수 있다. 명령어 타입/클래스 블록(1304)은, 예를 들어, 부동 소수점 명령어가 회수될 수 있게 해줄 수 있다. 일부 실시예들에서, 전술한 것 중 하나 이상은 소프트웨어 및/또는 펌웨어로 구현될 수 있다. 부가적으로, 일부 실시예들에서, 소프트웨어는 운영 체제(OS) 및/또는 가상 머신 관리자(VMM)가 우선순위들을 설정할 수 있게 해줄 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 머신 러닝과 같은 학습 능력(learning capabilities)을 가질 수 있다. 학습 능력은 보다 지능적인 스레드 선택을 제공할 수 있고, 예를 들어, 이력 데이터 및/또는 수집되는 패턴들에 기초하여 적응적일 수 있다.
일부 실시예들에서, 유사한 이벤트를 갖는 하나 초과의 스레드가 있을 수 있다. 일부 실시예들에서, 스레드들 간에 동순위가 있는 경우들에서 우선순위 스킴이 사용될 수 있다. 동순위-해결은, 예를 들어, 랜덤 선택, 보다 낮은 번호의 스레드를 선택하는 것, 보다 높은 번호의 스레드를 선택하는 것, 및/또는 교번하는 스레드들을 선택하는 것에 의해 수행될 수 있다.
도 14는 실시예들에 따른 프로세서에 의해 수행될 수 있는 알고리즘적 SMT 특징을 위한 방법을 예시하는 흐름 다이어그램이다. 이 방법은, 1401에 예시된 바와 같이, 파이프라인에서의 경쟁 공유 리소스가 이용가능한지를 결정하는 단계를 포함할 수 있다. 이 방법은, 1402에 예시된 바와 같이, 스레드들을 우선순위화하는 단계를 추가로 포함할 수 있다. 예를 들어, 하나 초과의 이벤트가 있는 경우 스레드들이 우선순위화될 수 있다. 이 방법은, 1403에 예시된 바와 같이, 최고 우선순위 이벤트 또는 플래그를 피킹(picking)하는 단계를 추가로 포함할 수 있다. 예를 들어, 배정된 알고리즘에 기초하여 최고 우선순위 이벤트 또는 플래그가 선택될 수 있다. 이 방법은, 1404에 예시된 바와 같이, 리소스들을 스레드에 배정하는 단계를 추가로 포함할 수 있다. 예를 들어, 우선순위 알고리즘에 기초하여 리소스들이 가장 바람직한 스레드에 배정될 수 있다.
도 15는 실시예들에 따른 프로세서에 포함될 수 있는 알고리즘적 SMT 특징을 예시하는 블록 다이어그램이다. 도 15는 알고리즘적 우선순위 블록에 기초한 경쟁 공유 리소스(competitively shared resource)에 대한 스레드, 예컨대, 스레드 T0의 할당을 도시하고 있다. 예를 들어, 이 특징은, 예컨대, 도 14에서의 박스(1401)에 따라, 경쟁 공유 리소스(1501)가 이용가능하다고 결정할 수 있다. 알고리즘적 우선순위 블록(1502)은, 예컨대, 도 14에서의 박스(1402)에 따라, 하나 초과의 이벤트, 예컨대, 이벤트들(Evt1 및 Evt2)이 있는 경우 우선순위화할 수 있다. 알고리즘적 우선순위 블록(1502)은 또한, 예컨대, 도 14에서의 박스(1403)에 따라, 배정된 알고리즘에 기초하여 최고 우선순위 이벤트 또는 플래그를 피킹할 수 있다. 알고리즘적 우선순위 블록(1502)은 또한 우선순위 알고리즘에 기초하여 리소스, 예컨대, 1501을 최다 디스에이블 스레드(most disable thread), 예컨대, T0에 배정할 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 정수 리네임 및/또는 부동 소수점 리네임 알고리즘을 포함할 수 있다. 우선순위 알고리즘은 누크, 클리어, 및 인터럽트와 같은 이벤트들에 기초한 이벤트 기반 결정들을 포함할 수 있다. 우선순위 알고리즘은 성능 카운터를 포함할 수 있으며, 성능 카운터는 회수된 명령어들 및 코드 미스들과 같은 출현들(occurrences)을 카운트할 수 있다. 우선순위 알고리즘은 물리 레지스터들을 제한하는 것, 데드록 방지를 사용하는 것, 및/또는 캐시 미스들을 결정하는 것을 포함할 수 있다. 우선순위 알고리즘은 명령어 타입들 및 클래스들을 결정하는 것을 포함할 수 있다. 우선순위 알고리즘은 레지스터들을 할당하는 것, 예를 들어, 부동 소수점 워드라인에 부동 소수점 레지스터들을 보다 많이 할당하는 것을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 예를 들어, 우선순위 알고리즘은 운영 체제 및/또는 가상 머신 관리자가 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은, 예컨대, 동적 거동에 기초한, 하드웨어 관리 우선순위(hardware managed priority)를 포함할 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 브랜치 예측기 알고리즘을 포함할 수 있다. 일부 실시예들에서, 브랜치 예측기 알고리즘은 이하의 것: 클리어들(예컨대, JEClear들 및 CRClear들)의 빈도수, 브랜치들(예컨대, 전부(all), 취해짐(taken), 취해지지 않음(not taken))의 빈도수, 브랜치들 이외의 속성들(예컨대, 회수된 명령어들, L2/L3 미스들) 중 하나 이상에 기초하여 브랜치 타깃 버퍼들(BTB)의 액션을 제어할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 예를 들어, 우선순위 알고리즘은 운영 체제 및/또는 가상 머신 관리자가 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은, 예컨대, 동적 거동에 기초한, 하드웨어 관리 우선순위(hardware managed priority)를 포함할 수 있다. 도 16은 예시적인 실시예에 따른 브랜치 예측기 우선순위 알고리즘을 구현하는 블록 다이어그램을 도시하고 있다. 파티셔닝 로직(1602)은 클리어들(예컨대, JEClear들 및 CRClear들)의 빈도수, 브랜치들(예컨대, 전부, 취해짐, 취해지지 않음)의 빈도수, 브랜치들 이외의 속성들(예컨대, 회수된 명령어들, L2/L3 미스들)과 같은 입력들(1603)을 수신할 수 있다. 파티셔닝 로직(1602)은 입력들(1603)에 기초하여 브랜치 타깃 버퍼들(BTB)(1601)의 엔트리들을 할당할 수 있다.
일부 실시예들의 요약
일 실시예는 이용가능한 경쟁 공유 리소스를 식별하고; 우선순위 알고리즘에 적어도 부분적으로 기초하여 스레드를 선택하며; 선택된 스레드를 이용가능한 경쟁 공유 리소스에 배정하도록 구성된 프로세서를 포함할 수 있다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 일부 실시예들에서, 프로세서는 브랜치 예측을 경쟁적으로 공유하도록 그리고 엔트리 할당을 위해 우선순위 알고리즘을 사용하도록 추가로 구성될 수 있다. 일부 실시예들에서, 프로세서는 우선순위 알고리즘에 기초하여 제2 스레드를 배정하도록 추가로 구성될 수 있다. 일부 실시예들에서, 프로세서는 IPC(instructions per clock) 및 파이프라인 스루풋 중 적어도 하나를 증가시키기 위해 가장 효율적인 스레드를 파이프라인에서의 이용가능한 리소스에 배정하도록 추가로 구성될 수 있다. 일부 실시예들에서, 프로세서는 이용가능한 리소스에 대한 스레드 할당을 우선순위화하기 위한 최상의 알려진 알고리즘을 제공하도록 추가로 구성될 수 있다. 일부 실시예들에서, 프로세서는 2개 이상의 이벤트가 검출될 때 우선순위화하도록 추가로 구성될 수 있다. 일부 실시예들에서, 프로세서는 배정된 알고리즘에 기초하여 최고 우선순위 이벤트 및 플래그 중 적어도 하나를 선택하도록 추가로 구성될 수 있다.
일부 실시예들에서, 프로세서는 이벤트 검출 블록, 성능 카운터 플래그 블록, 데드록 방지 블록, 및 명령어 타입/클래스 블록을 포함할 수 있다. 일부 실시예들에서, 이벤트 검출 블록은 누크, 클리어의 빈도수, BR의 빈도수, 인터럽트, 및 캐시 미스 중 적어도 하나를 검출할 수 있다. 일부 실시예들에서, 성능 카운터 플래그 블록은 회수된 명령어들, 코드 미스들, 및 L2/L3 미스들 중 적어도 하나를 카운트할 수 있다. 일부 실시예들에서, 데드록 방지 블록은 데드록 상태들을 방지할 수 있다. 일부 실시예들에서, 명령어 타입/클래스 블록은 부동 소수점 명령어가 회수될 수 있게 해줄 수 있다. 일부 실시예들에서, 프로세서는 운영 체제(OS) 및 가상 머신 관리자(VMM) 중 적어도 하나가 우선순위들을 설정할 수 있게 해주도록 추가로 구성될 수 있다. 일부 실시예들에서, 우선순위 알고리즘은 적어도 하나의 학습 능력을 가질 수 있다. 일부 실시예들에서, 적어도 하나의 학습 능력은 이력 데이터 및 작업부하 패턴들 중 적어도 하나에 기초하여 적응적일 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 정수 리네임 및 부동 소수점 리네임 알고리즘 중 적어도 하나를 포함할 수 있다. 우선순위 알고리즘은 이벤트 기반 결정들을 포함할 수 있다. 이벤트 기반 결정은 누크, 클리어, 및 인터럽트 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 성능 카운터를 포함할 수 있다. 성능 카운터는 출현들을 카운트할 수 있다. 출현들은 회수된 명령어들 및 코드 미스들 중 하나 이상일 수 있다. 우선순위 알고리즘은 물리 레지스터들을 제한하는 것, 데드록 방지를 사용하는 것, 및 캐시 미스들을 결정하는 것 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 명령어 타입들 및 클래스들을 결정하는 것을 포함할 수 있다. 우선순위 알고리즘은 레지스터들을 할당하는 것을 포함할 수 있다. 레지스터들을 할당하는 것은 부동 소수점 워드라인에 부동 소수점 레지스터들을 보다 많이 할당하는 것을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 우선순위 알고리즘은 운영 체제 및 가상 머신 관리자 중 하나 이상이 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은 하드웨어 관리 우선순위를 포함할 수 있다. 하드웨어 관리 우선순위는 동적 거동에 기초할 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 브랜치 예측기 알고리즘을 포함할 수 있다. 일부 실시예들에서, 브랜치 예측기 알고리즘은 다음과 같은 것: 클리어들의 빈도수, 브랜치들의 빈도수, 브랜치들 이외의 속성들 중 하나 이상에 적어도 부분적으로 기초하여 브랜치 타깃 버퍼들(BTB)의 액션을 제어할 수 있다. 클리어들은 JEClear들 및 CRClear들 중 하나 이상을 포함할 수 있다. 브랜치들의 빈도수들은 전부, 취해짐, 취해지지 않음 중 하나 이상을 포함할 수 있다. 브랜치들 이외의 속성들은 회수된 명령어들, L2/L3 미스들 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 우선순위 알고리즘은 운영 체제 및 가상 머신 관리자 중 하나 이상이 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은 하드웨어 관리 우선순위를 포함할 수 있다. 하드웨어 관리 우선순위는 동적 거동에 적어도 부분적으로 기초할 수 있다. 우선순위 알고리즘은 입력들을 수신하기 위해 파티셔닝 로직을 사용하는 것을 포함할 수 있다. 입력들은 클리어들의 빈도수, 브랜치들의 빈도수들, 브랜치들 이외의 속성들 중 하나 이상을 포함할 수 있다. 파티셔닝 로직은 입력들에 기초하여 브랜치 타깃 버퍼들(BTB)의 엔트리들을 할당할 수 있다.
일 실시예는 이용가능한 경쟁 공유 리소스를 식별하는 단계; 우선순위 알고리즘에 적어도 부분적으로 기초하여 스레드를 선택하는 단계; 및 선택된 스레드를 이용가능한 경쟁 공유 리소스에 배정하는 단계를 포함하는 방법을 포함할 수 있다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 일부 실시예들에서, 이 방법은 브랜치 예측을 경쟁적으로 공유하고 엔트리 할당을 위해 우선순위 알고리즘을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 우선순위 알고리즘에 기초하여 제2 스레드를 배정하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 IPC(instructions per clock) 및 파이프라인 스루풋 중 적어도 하나를 증가시키기 위해 가장 효율적인 스레드를 파이프라인에서의 이용가능한 리소스에 배정하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 이용가능한 리소스에 대한 스레드 할당을 우선순위화하기 위한 최상의 알려진 알고리즘을 제공하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 2개 이상의 이벤트가 검출될 때 우선순위화하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 배정된 알고리즘에 기초하여 최고 우선순위 이벤트 및 플래그 중 적어도 하나를 선택하는 단계를 추가로 포함할 수 있다.
일부 실시예들에서, 이 방법은 이벤트 검출 블록, 성능 카운터 플래그 블록, 데드록 방지 블록, 및 명령어 타입/클래스 블록을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 누크, 클리어의 빈도수, BR의 빈도수, 인터럽트, 및 캐시 미스 중 적어도 하나를 검출하기 위해 이벤트 검출 블록을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 회수된 명령어들, 코드 미스들, 및 L2/L3 미스들 중 적어도 하나를 카운트하기 위해 성능 카운터 플래그 블록을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 데드록 상태들을 방지하기 위해 데드록 방지 블록을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 부동 소수점 명령어가 회수될 수 있게 해주기 위해 명령어 타입/클래스 블록을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 운영 체제(OS) 및 가상 머신 관리자(VMM) 중 적어도 하나가 우선순위들을 설정할 수 있게 해주는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 우선순위 알고리즘은 적어도 하나의 학습 능력을 가질 수 있다. 일부 실시예들에서, 적어도 하나의 학습 능력은 이력 데이터 및 작업부하 패턴들 중 적어도 하나에 기초하여 적응적일 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 정수 리네임 및 부동 소수점 리네임 알고리즘 중 적어도 하나를 포함할 수 있다. 우선순위 알고리즘은 이벤트 기반 결정들을 포함할 수 있다. 이벤트 기반 결정은 누크, 클리어, 및 인터럽트 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 성능 카운터를 포함할 수 있다. 성능 카운터는 출현들을 카운트할 수 있다. 출현들은 회수된 명령어들 및 코드 미스들 중 하나 이상일 수 있다. 우선순위 알고리즘은 물리 레지스터들을 제한하는 것, 데드록 방지를 사용하는 것, 및 캐시 미스들을 결정하는 것 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 명령어 타입들 및 클래스들을 결정하는 것을 포함할 수 있다. 우선순위 알고리즘은 레지스터들을 할당하는 것을 포함할 수 있다. 레지스터들을 할당하는 것은 부동 소수점 워드라인에 부동 소수점 레지스터들을 보다 많이 할당하는 것을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 우선순위 알고리즘은 운영 체제 및 가상 머신 관리자 중 하나 이상이 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은 하드웨어 관리 우선순위를 포함할 수 있다. 하드웨어 관리 우선순위는 동적 거동에 기초할 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 브랜치 예측기 알고리즘을 포함할 수 있다. 일부 실시예들에서, 브랜치 예측기 알고리즘은 다음과 같은 것: 클리어들의 빈도수, 브랜치들의 빈도수, 브랜치들 이외의 속성들 중 하나 이상에 적어도 부분적으로 기초하여 브랜치 타깃 버퍼들(BTB)의 액션을 제어할 수 있다. 클리어들은 JEClear들을 포함할 수 있다. 브랜치들의 빈도수들은 전부, 취해짐, 취해지지 않음 중 하나 이상을 포함할 수 있다. 브랜치들 이외의 속성들은 회수된 명령어들, L2/L3 미스들 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 우선순위 알고리즘은 운영 체제 및 가상 머신 관리자 중 하나 이상이 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은 하드웨어 관리 우선순위를 포함할 수 있다. 하드웨어 관리 우선순위는 동적 거동에 적어도 부분적으로 기초할 수 있다. 우선순위 알고리즘은 입력들을 수신하기 위해 파티셔닝 로직을 사용하는 것을 포함할 수 있다. 입력들은 클리어들의 빈도수, 브랜치들의 빈도수들, 브랜치들 이외의 속성들 중 하나 이상을 포함할 수 있다. 파티셔닝 로직은 입력들에 기초하여 브랜치 타깃 버퍼들(BTB)의 엔트리들을 할당할 수 있다.
일 실시예는 프로세서에 의해 실행될 때 프로세서로 하여금 방법을 수행하게 하는 적어도 하나의 명령어를 저장하는 비일시적 머신 판독가능 매체를 포함할 수 있으며, 이 방법은 이용가능한 경쟁 공유 리소스를 식별하는 단계; 우선순위 알고리즘에 적어도 부분적으로 기초하여 스레드를 선택하는 단계; 및 선택된 스레드를 이용가능한 경쟁 공유 리소스에 배정하는 단계를 포함한다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 일부 실시예들에서, 이 방법은 브랜치 예측을 경쟁적으로 공유하고 엔트리 할당을 위해 우선순위 알고리즘을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 우선순위 알고리즘에 기초하여 제2 스레드를 배정하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 IPC(instructions per clock) 및 파이프라인 스루풋 중 적어도 하나를 증가시키기 위해 가장 효율적인 스레드를 파이프라인에서의 이용가능한 리소스에 배정하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 이용가능한 리소스에 대한 스레드 할당을 우선순위화하기 위한 최상의 알려진 알고리즘을 제공하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 2개 이상의 이벤트가 검출될 때 우선순위화하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 배정된 알고리즘에 기초하여 최고 우선순위 이벤트 및 플래그 중 적어도 하나를 선택하는 단계를 추가로 포함할 수 있다.
일부 실시예들에서, 이 방법은 이벤트 검출 블록, 성능 카운터 플래그 블록, 데드록 방지 블록, 및 명령어 타입/클래스 블록을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 누크, 클리어의 빈도수, BR의 빈도수, 인터럽트, 및 캐시 미스 중 적어도 하나를 검출하기 위해 이벤트 검출 블록을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 회수된 명령어들, 코드 미스들, 및 L2/L3 미스들 중 적어도 하나를 카운트하기 위해 성능 카운터 플래그 블록을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 데드록 상태들을 방지하기 위해 데드록 방지 블록을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 부동 소수점 명령어가 회수될 수 있게 해주기 위해 명령어 타입/클래스 블록을 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 운영 체제(OS) 및 가상 머신 관리자(VMM) 중 적어도 하나가 우선순위들을 설정할 수 있게 해주는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 우선순위 알고리즘은 적어도 하나의 학습 능력을 가질 수 있다. 일부 실시예들에서, 적어도 하나의 학습 능력은 이력 데이터 및 작업부하 패턴들 중 적어도 하나에 기초하여 적응적일 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 정수 리네임 및 부동 소수점 리네임 알고리즘 중 적어도 하나를 포함할 수 있다. 우선순위 알고리즘은 이벤트 기반 결정들을 포함할 수 있다. 이벤트 기반 결정은 누크, 클리어, 및 인터럽트 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 성능 카운터를 포함할 수 있다. 성능 카운터는 출현들을 카운트할 수 있다. 출현들은 회수된 명령어들 및 코드 미스들 중 하나 이상일 수 있다. 우선순위 알고리즘은 물리 레지스터들을 제한하는 것, 데드록 방지를 사용하는 것, 및 캐시 미스들을 결정하는 것 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 명령어 타입들 및 클래스들을 결정하는 것을 포함할 수 있다. 우선순위 알고리즘은 레지스터들을 할당하는 것을 포함할 수 있다. 레지스터들을 할당하는 것은 부동 소수점 워드라인에 부동 소수점 레지스터들을 보다 많이 할당하는 것을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 우선순위 알고리즘은 운영 체제 및 가상 머신 관리자 중 하나 이상이 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은 하드웨어 관리 우선순위를 포함할 수 있다. 하드웨어 관리 우선순위는 동적 거동에 기초할 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 브랜치 예측기 알고리즘을 포함할 수 있다. 일부 실시예들에서, 브랜치 예측기 알고리즘은 다음과 같은 것: 클리어들의 빈도수, 브랜치들의 빈도수, 브랜치들 이외의 속성들 중 하나 이상에 적어도 부분적으로 기초하여 브랜치 타깃 버퍼들(BTB)의 액션을 제어할 수 있다. 클리어들은 JEClear들 및 CRClear들 중 하나 이상을 포함할 수 있다. 브랜치들의 빈도수들은 전부, 취해짐, 취해지지 않음 중 하나 이상을 포함할 수 있다. 브랜치들 이외의 속성들은 회수된 명령어들, L2/L3 미스들 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 우선순위 알고리즘은 운영 체제 및 가상 머신 관리자 중 하나 이상이 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은 하드웨어 관리 우선순위를 포함할 수 있다. 하드웨어 관리 우선순위는 동적 거동에 적어도 부분적으로 기초할 수 있다. 우선순위 알고리즘은 입력들을 수신하기 위해 파티셔닝 로직을 사용하는 것을 포함할 수 있다. 입력들은 클리어들의 빈도수, 브랜치들의 빈도수들, 브랜치들 이외의 속성들 중 하나 이상을 포함할 수 있다. 파티셔닝 로직은 입력들에 기초하여 브랜치 타깃 버퍼들(BTB)의 엔트리들을 할당할 수 있다.
일 실시예는 메모리 및 프로세서를 포함하는 시스템을 포함할 수 있으며, 프로세서는 이용가능한 경쟁 공유 리소스를 식별하고; 우선순위 알고리즘에 적어도 부분적으로 기초하여 스레드를 선택하며; 선택된 스레드를 이용가능한 경쟁 공유 리소스에 배정하도록 구성된다.
일부 실시예들에서, 우선순위 알고리즘은 정수 리네임 및 부동 소수점 리네임 알고리즘 중 적어도 하나를 포함할 수 있다. 우선순위 알고리즘은 이벤트 기반 결정들을 포함할 수 있다. 이벤트 기반 결정은 누크, 클리어, 및 인터럽트 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 성능 카운터를 포함할 수 있다. 성능 카운터는 출현들을 카운트할 수 있다. 출현들은 회수된 명령어들 및 코드 미스들 중 하나 이상일 수 있다. 우선순위 알고리즘은 물리 레지스터들을 제한하는 것, 데드록 방지를 사용하는 것, 및 캐시 미스들을 결정하는 것 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 명령어 타입들 및 클래스들을 결정하는 것을 포함할 수 있다. 우선순위 알고리즘은 레지스터들을 할당하는 것을 포함할 수 있다. 레지스터들을 할당하는 것은 부동 소수점 워드라인에 부동 소수점 레지스터들을 보다 많이 할당하는 것을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 우선순위 알고리즘은 운영 체제 및 가상 머신 관리자 중 하나 이상이 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은 하드웨어 관리 우선순위를 포함할 수 있다. 하드웨어 관리 우선순위는 동적 거동에 기초할 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 브랜치 예측기 알고리즘을 포함할 수 있다. 일부 실시예들에서, 브랜치 예측기 알고리즘은 다음과 같은 것: 클리어들의 빈도수, 브랜치들의 빈도수, 브랜치들 이외의 속성들 중 하나 이상에 적어도 부분적으로 기초하여 브랜치 타깃 버퍼들(BTB)의 액션을 제어할 수 있다. 클리어들은 JEClear들 및 CRClear들 중 하나 이상을 포함할 수 있다. 브랜치들의 빈도수들은 전부, 취해짐, 취해지지 않음 중 하나 이상을 포함할 수 있다. 브랜치들 이외의 속성들은 회수된 명령어들, L2/L3 미스들 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 우선순위 알고리즘은 운영 체제 및 가상 머신 관리자 중 하나 이상이 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은 하드웨어 관리 우선순위를 포함할 수 있다. 하드웨어 관리 우선순위는 동적 거동에 적어도 부분적으로 기초할 수 있다. 우선순위 알고리즘은 입력들을 수신하기 위해 파티셔닝 로직을 사용하는 것을 포함할 수 있다. 입력들은 클리어들의 빈도수, 브랜치들의 빈도수들, 브랜치들 이외의 속성들 중 하나 이상을 포함할 수 있다. 파티셔닝 로직은 입력들에 기초하여 브랜치 타깃 버퍼들(BTB)의 엔트리들을 할당할 수 있다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 일부 실시예들에서, 프로세서는 브랜치 예측을 경쟁적으로 공유하도록 그리고 엔트리 할당을 위해 우선순위 알고리즘을 사용하도록 추가로 구성될 수 있다. 일부 실시예들에서, 프로세서는 우선순위 알고리즘에 기초하여 제2 스레드를 배정하도록 추가로 구성될 수 있다. 일부 실시예들에서, 프로세서는 IPC(instructions per clock) 및 파이프라인 스루풋 중 적어도 하나를 증가시키기 위해 가장 효율적인 스레드를 파이프라인에서의 이용가능한 리소스에 배정하도록 추가로 구성될 수 있다. 일부 실시예들에서, 프로세서는 이용가능한 리소스에 대한 스레드 할당을 우선순위화하기 위한 최상의 알려진 알고리즘을 제공하도록 추가로 구성될 수 있다. 일부 실시예들에서, 프로세서는 2개 이상의 이벤트가 검출될 때 우선순위화하도록 추가로 구성될 수 있다. 일부 실시예들에서, 프로세서는 배정된 알고리즘에 기초하여 최고 우선순위 이벤트 및 플래그 중 적어도 하나를 선택하도록 추가로 구성될 수 있다.
일부 실시예들에서, 프로세서는 이벤트 검출 블록, 성능 카운터 플래그 블록, 데드록 방지 블록, 및 명령어 타입/클래스 블록을 포함할 수 있다. 일부 실시예들에서, 이벤트 검출 블록은 누크, 클리어의 빈도수, BR의 빈도수, 인터럽트, 및 캐시 미스 중 적어도 하나를 검출할 수 있다. 일부 실시예들에서, 성능 카운터 플래그 블록은 회수된 명령어들, 코드 미스들, 및 L2/L3 미스들 중 적어도 하나를 카운트할 수 있다. 일부 실시예들에서, 데드록 방지 블록은 데드록 상태들을 방지할 수 있다. 일부 실시예들에서, 명령어 타입/클래스 블록은 부동 소수점 명령어가 회수될 수 있게 해줄 수 있다. 일부 실시예들에서, 프로세서는 운영 체제(OS) 및 가상 머신 관리자(VMM) 중 적어도 하나가 우선순위들을 설정할 수 있게 해주도록 추가로 구성될 수 있다. 일부 실시예들에서, 우선순위 알고리즘은 적어도 하나의 학습 능력을 가질 수 있다. 일부 실시예들에서, 적어도 하나의 학습 능력은 이력 데이터 및 작업부하 패턴들 중 적어도 하나에 기초하여 적응적일 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 정수 리네임 및 부동 소수점 리네임 알고리즘 중 적어도 하나를 포함할 수 있다. 우선순위 알고리즘은 이벤트 기반 결정들을 포함할 수 있다. 이벤트 기반 결정은 누크, 클리어, 및 인터럽트 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 성능 카운터를 포함할 수 있다. 성능 카운터는 출현들을 카운트할 수 있다. 출현들은 회수된 명령어들 및 코드 미스들 중 하나 이상일 수 있다. 우선순위 알고리즘은 물리 레지스터들을 제한하는 것, 데드록 방지를 사용하는 것, 및 캐시 미스들을 결정하는 것 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 명령어 타입들 및 클래스들을 결정하는 것을 포함할 수 있다. 우선순위 알고리즘은 레지스터들을 할당하는 것을 포함할 수 있다. 레지스터들을 할당하는 것은 부동 소수점 워드라인에 부동 소수점 레지스터들을 보다 많이 할당하는 것을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 우선순위 알고리즘은 운영 체제 및 가상 머신 관리자 중 하나 이상이 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은 하드웨어 관리 우선순위를 포함할 수 있다. 하드웨어 관리 우선순위는 동적 거동에 기초할 수 있다.
일부 실시예들에서, 우선순위 알고리즘은 브랜치 예측기 알고리즘을 포함할 수 있다. 일부 실시예들에서, 브랜치 예측기 알고리즘은 다음과 같은 것: 클리어들의 빈도수, 브랜치들의 빈도수, 브랜치들 이외의 속성들 중 하나 이상에 적어도 부분적으로 기초하여 브랜치 타깃 버퍼들(BTB)의 액션을 제어할 수 있다. 클리어들은 JEClear들 및 CRClear들 중 하나 이상을 포함할 수 있다. 브랜치들의 빈도수들은 전부, 취해짐, 취해지지 않음 중 하나 이상을 포함할 수 있다. 브랜치들 이외의 속성들은 회수된 명령어들, L2/L3 미스들 중 하나 이상을 포함할 수 있다. 우선순위 알고리즘은 소프트웨어를 통한 우선순위를 관리하는 것을 포함할 수 있다. 우선순위 알고리즘은 운영 체제 및 가상 머신 관리자 중 하나 이상이 우선순위를 제공할 수 있게 해줄 수 있다. 우선순위 알고리즘은 하드웨어 관리 우선순위를 포함할 수 있다. 하드웨어 관리 우선순위는 동적 거동에 적어도 부분적으로 기초할 수 있다. 우선순위 알고리즘은 입력들을 수신하기 위해 파티셔닝 로직을 사용하는 것을 포함할 수 있다. 입력들은 클리어들의 빈도수, 브랜치들의 빈도수들, 브랜치들 이외의 속성들 중 하나 이상을 포함할 수 있다. 파티셔닝 로직은 입력들에 기초하여 브랜치 타깃 버퍼들(BTB)의 엔트리들을 할당할 수 있다.
스레드 스위칭
프로세서 코어는 본 발명의 실시예들에 따른 SMT 스레드 스위칭 특징을 지원할 수 있다. 공유 리소스들을 사용하여 SMT를 구현하는 프로세서 코어에서, SMT는 프로세서 발행/실행 파이프라인에서의 다양한 스테이지들에서 2개 이상의 스레드 중 어느 것을 선택할지를 선택하는 것을 수반할 수 있다. SMT 스레드 스위칭 특징을 포함하는 본 발명의 실시예들은 성능, 공정성, 및 다른 인자들(적용가능한 기준들 중 단지 몇 개를 열거하면, 예컨대, 성능을 증가시키는 것, 전력 소비를 감소시켜 전력 절감 특징들을 구현하는 것, 및 공정성 향상, 최소 성능 보증, 스루풋, IPC(instructions per clock), 단위 시간당 명령어들, 서비스 품질, 시간 및/또는 메모리 효율) 중에서 우선순위들에 의해 영향을 받을 이 선택을 제공하도록 요망될 수 있다. 예를 들어, 프로세서 코어(900)의 발행/실행 파이프라인에서, 브랜치 예측기(911)가 예측을 시작해야 하는 스레드, i-TLB(916)에서 예측을 룩업하는 스레드, i-캐시(913)에서 i-TLB 변환을 룩업하는 스레드, 디코더(914)에서 i-캐시(913)로부터의 바이트들을 디코드하는 스레드, op-캐시(912)로부터 판독하는 스레드, 마이크로-op 큐(915)로부터 판독하는 스레드 등을 선택하는 데 중재가 사용될 수 있다.
도 17은 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 SMT 스레드 스위칭 특징을 위한 중재 회로(1700)를 예시하는 블록 다이어그램이다. 중재 회로(1700)는 프로세서 발행/실행 파이프라인에서의 다양한 스테이지들 중 임의의 것에서 전진(advancement)을 위해 2개 이상의 스레드 중 어느 것을 선택할지를 선택하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 프로세서 또는 프로세서 코어는 중재 회로(1700)의 하나 이상의 실시예의 다수의 인스턴스들을 포함할 수 있으며, 각각은 임의의 하나 이상의 파이프라인 스테이지 또는 리소스를 위한 것이고, 각각은 도 17에 도시된 블록들 중 임의의 하나 이상을 포함하며, 각각은 이하에서 설명되는 임의의 하나 이상의 접근법 또는 접근법들의 조합들을 구현하기 위한 것이다. 게다가, 중재 회로(1700)의 임의의 인스턴스의 전부 또는 일부는, 리소스 할당, 스케줄링, 또는 공유 회로부와 같은, 프로세서 또는 프로세서 코어의 다른 회로부, 구조들, 및/또는 하드웨어에 포함되거나, 통합되거나(integrated), 또는 내포될(incorporated) 수 있다.
중재 회로(1700)는, 임의의 다른 라운드 로빈 또는 다른 스킴(들)을 구현하도록 요망되는 임의의 다른 회로부와 함께, 간단한 라운드 로빈 회로(1710), 하이-스루풋 라운드 로빈 회로(1720), 동적 라운드 로빈 회로(1730), 및 소프트웨어 제어가능 라운드 로빈 회로(1740)를 포함할 수 있다.
간단한 라운드 로빈 회로(1710)는 스레드를 선택하기 위해 간단한 라운드 로빈 스킴을 수행하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 이는 선택이 선택안들(choices) 사이에서 끊임없이 교번하는 스킴을 구현할 수 있다; 즉, 스레드 0, 이어서 스레드 1, 이어서 스레드 0, 이어서 스레드 1, 이하 마찬가지임; 또는 스레드 0, 스레드 1, 스레드 2, 스레드 0, 스레드 1, 스레드 2, 이하 마찬가지임; 기타 등등일 수 있다.
하이-스루풋 라운드 로빈 회로(1720)는 (공정성과 같은) 다른 가능한 인자들보다 스루풋을 우선순위화하려는 요망에 기초하여 스레드를 선택하기 위해 수정된 라운드 로빈 스킴을 수행하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 이는 각각의 스레드가 스레드 스위칭 지점에서 이용가능한 작업을 갖는 한 (예컨대, 앞서 설명된 바와 같은) 간단한 라운드 로빈 스킴을 구현할 수 있으며, 그렇지 않은 경우, 이는 이용가능한 작업을 갖는 스레드를 선택할 수 있다. 선택할 2개 초과의 스레드를 갖는 일 실시예에서, 이는 이용가능한 작업을 갖지 않는 임의의 스레드를 간단한 라운드 로빈 스킴으로부터 드롭시킬 수 있다.
동적 라운드 로빈 회로(1730)는 스레드들의 동적 거동에 기초하여 스레드를 선택하기 위해 동적으로 수정가능한 라운드 로빈 스킴을 수행하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 동적 라운드 로빈 회로(1730)는 결정(예컨대, 휴리스틱(heuristic))의 기초가 될 정보를 제공하기 위한 성능 카운터들, 다른 하드웨어 카운터들, 또는 다른 구조들(이들 중 임의의 것이 1732로서 표현됨)을 포함하고 그리고/또는 사용할 수 있다. 스레드를 선호하기 위한 스레드 선택의 기초가 되는 비(ratio) 또는 다른 기준들은 물론, 동적 거동의 어느 척도들이 사용되어야하는지의 지시는 고정되거나(예컨대, 하드와이어링되거나), (예컨대, 하드웨어 또는 펌웨어에 의해) 구성가능하거나, 또는 (예컨대, 소프트웨어에 의해) 프로그래밍가능할 수 있다. 예를 들어, 2:1 비(예컨대, 스레드 0, 스레드 0, 스레드 1, 스레드 0, 스레드 0, 스레드 1 등)로 제1 스레드가 제2 스레드보다 선호되거나 선택될 수 있다. 하나의 스레드가 다른 스레드보다 선호된다고 결정하기 위한 인자들 또는 기준들의 예들은: 예측 실패율(mispredict rate), 사이클당 명령어들(instructions per cycle), 캐시 미스율 등이다.
소프트웨어 제어가능 라운드 로빈 회로(1740)는 소프트웨어(예컨대, 운영 체제 또는 가상 머신 모니터)에 의해 제공된 우선순위에 기초하여 스레드를 선택하기 위해 수정된 라운드 로빈 스킴을 수행하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있으며, 이는 소프트웨어에 다른 방식으로 이용가능한 것보다 원하는 시스템 거동에 관한 더 많은 정보를 가질 수 있다. 이 지시는, 선호하는 비 및/또는 어느 스킴을 사용할지 또는 그것을 어떻게 구현할지(예컨대, 소프트웨어 제어가능 라운드 로빈을 동적 및/또는 수정가능 라운드 로빈과 결합시킬지 그리고 어떻게 결합시킬지)에 관한 임의의 다른 정보와 함께, 중재 회로(1700) 내의 또는 중재 회로(1700)에 의해 액세스가능한 프로그래밍가능 저장 위치 또는 레지스터(1742)에 제공될 수 있다.
실시예들에서, 접근법들의 조합들이 가능하다. 예를 들어, 소프트웨어는 (예컨대, 소프트웨어 제어가능 라운드 로빈에 대한 회로부 및/또는 기법들을 사용하여) 어느 스레드를 선호할지에 관한 힌트를 제공할 수 있고, 하드웨어(예컨대, 동적 라운드 로빈의 회로부 또는 기법들)는, 스레드 거동 및/또는 휴리스틱스에 기초하여, 그 스레드를 선호하는 비를 결정할 수 있다.
일부 실시예들의 요약
본 발명의 일 실시예는 중재 회로를 포함하는 프로세서를 포함할 수 있다. 중재 회로는 제1 라운드 로빈 회로 및 제2 라운드 로빈 회로를 포함할 수 있다. 제1 라운드 로빈 회로는 간단한 라운드 로빈 스레드 스위칭 스킴을 구현하도록 되어 있을 수 있다. 제2 라운드 로빈 회로는 동적으로 수정된 라운드 로빈 스레드 스위칭 스킴을 구현하도록 되어 있을 수 있다.
데드록 회피
프로세서 코어는 본 발명의 실시예들에 따른 SMT 데드록 회피 특징을 지원할 수 있다. 리소스들의 공유는, 일부 상황들에서, 스레드가 하나 이상의 리소스가 부족한 것으로 인해 느리게 진행하는 것, 전진(예컨대, 명령어를 회수)할 수 없는 것으로 인해 진행하지 않는 것, 및/또는 임의의 다른 데드록 타입 상황을 가져올 수 있다. 그 결과, 사용자 경험은 눈에 띄게 보다 느린 성능 또는 에러, 실패, 또는 충돌을 포함할 수 있다. 데드록 회피 특징을 포함하는 본 발명의 실시예들은 데드록 타입 상황들을 감소시키고 사용자 경험을 개선시키도록 요망될 수 있다. 이러한 실시예들의 다른 이점들은, 적용가능한 기준들 중 단지 몇 개를 열거하면, 예컨대, 성능을 증가시키는 것, 전력 소비를 감소시켜 전력 절감 특징들을 구현하는 것, 및 공정성 향상, 최소 성능 보증, 스루풋, IPC(instructions per clock), 단위 시간당 명령어들, 서비스 품질, 시간 및/또는 메모리 효율을 포함할 수 있다.
도 18은 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 데드록 회피 하드웨어(1800)를 예시하는 블록 다이어그램이다. 데드록 회피 하드웨어(1800)는 데드록 타입 상황들의 발생(incidence)을 감소시키기 위해, 코어 회로들, 구조들, 유닛들, 및 리소스들, 및 이들의 부분들의 할당 및 사용에 영향을 미치기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 실시예들에서, 단일 리소스 및/또는 다수의 리소스들을 수반하는 데드록을 회피하기 위해 데드록 회피 하드웨어(1800)가 구현될 수 있다. 어느 경우든지, 프로세서 또는 프로세서 코어는 데드록 회피 하드웨어(1800)의 하나 이상의 실시예의 다수의 인스턴스들을 포함할 수 있으며, 각각은 임의의 하나 이상의 리소스를 위한 것이고, 각각은 도 18에 도시된 블록들 중 임의의 하나 이상을 포함하며, 각각은 이하에서 설명되는 임의의 하나 이상의 접근법 또는 접근법들의 조합들을 구현하기 위한 것이다. 게다가, 데드록 회피 하드웨어(1800)의 임의의 인스턴스의 전부 또는 일부는, 리소스 할당, 스케줄링, 또는 공유 회로부와 같은, 프로세서 또는 프로세서 코어의 다른 회로부, 구조들, 및/또는 하드웨어에 포함되거나, 통합되거나, 또는 내포될 수 있다.
데드록 회피 하드웨어(1800)는, 리소스들을 스레드들에 할당하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있는, 할당기 회로(1810)를 포함할 수 있다. 할당기 회로(1810)의 일 실시예 또는 일 실시예의 인스턴스는 도 12에서의 할당기 회로(1240)의 일 실시예 또는 일 실시예의 인스턴스를 나타내거나 그에 대응할 수 있다.
데드록 회피 하드웨어(1800), 할당기 회로(CGA10), 및/또는 프로세서 또는 프로세서 코어의 임의의 다른 부분은 리소스, 또는 분할가능 리소스의 일부를 하나 이상의 특정 스레드에 할당하지 못하도록 할당기 회로(CGA10)를 동적으로 디스에이블시키거나, 블로킹하거나, 또는 다른 방식으로 방지하기 위한 회로부, 구조, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 앞서 설명된 것들과 같은, 임의의 타입의 라운드 로빈 스킴을 포함하는 일 실시예에서, 스레드 요청들 사이에서 또는 그들 간에 선택하거나 중재하기 위해, 특정의 스레드가 리소스를 사용하지 못하게 블로킹하는 것은 그 스레드를 라운드 로빈 스킴으로부터 일시적으로 드롭시키는 것에 의해 달성될 수 있다. 실시예들은 하나의 입력으로서의 스레드 요청 신호(thread request signal)(예컨대, 1240A, 1240B) 및 스레드 블록 신호(thread block signal)(예컨대, 이하에서 설명되는 바와 같은, 리소스 사용 카운터들(1820)에 기초한 회로부에 의해 생성됨, 또는 임의의 다른 정보, 상태, 또는 신호들)의 보수(complement)를 갖는 AND 게이트를 포함할 수 있으며, 따라서 AND 게이트의 출력은 스레드가 리소스를 할당받아야 하는지 또는 리소스가 할당되어야 하는 후보로서 간주되어야 하는지를 나타낼 수 있다.
데드록 회피 하드웨어(1800)는 리소스 사용 카운터(1820)를 또한 포함할 수 있다. 일 실시예에서, 리소스 사용 카운터(1820)는 특정의 스레드에 의해 점유되거나 사용되고 있는 분할가능 리소스(예컨대, 버퍼, 큐, 스케줄러, 예약 스테이션)의 부분들(예컨대, 엔트리들)의 수를 카운트하기 위한 스레드당 하드웨어 카운터(per-thread hardware counter)일 수 있다. 특정의 리소스에 대해, 특정의 스레드에 대한 리소스 사용 카운터(1820)의 인스턴스는 할당기 회로(1810)가 그 스레드에 엔트리를 할당하는 것에 응답하여 증분되고, 엔트리가 할당해제되거나(deallocated) 제거되는 것에 응답하여 감분되며, 리소스가 플러시되는 것에 응답하여 클리어될 수 있다. 할당기 회로(1810)는 스레드에 대한 카운트가 임계치에 도달하거나 초과하는 것에 응답하여 그 스레드에 엔트리를 할당하지 못하도록 (예컨대, 앞서 설명된 바와 같이) 동적으로 디스에이블되거나 블로킹될 수 있다.
임계치는 임의의 단일 스레드가 모든 엔트리들을 동시에 사용하는 것 - 이는 데드록 타입 상황을 초래할 수 있음 - 을 방지하기 위해 리소스에서의 엔트리들의 총수보다 작도록 선택될 수 있다. 임계치는 또한 데드록 타입 상황들에 접근하는 것에 대한 허용오차 및/또는 스루풋 또는 다른 성능 척도들 또는 인자들을 우선순위화하려는 요망에 관련된 것들을 포함한, 다른 인자들 또는 기준들에 기초하여 선택되거나 조정될 수 있다. 임계치는 고정되거나(예컨대, 하드와이어링되거나), (예컨대, 하드웨어 또는 펌웨어에 의해) 구성가능하거나, 또는 (예컨대, 소프트웨어에 의해) 프로그래밍가능할 수 있다.
일 실시예에서, 분할가능 리소스는 특정의 스레드들 및 스레드들의 그룹들에 대해 논리적으로 파티셔닝될 수 있다. 예를 들어, N개의 엔트리들의 세트를 갖는 분할가능 리소스에서, N1개의 엔트리들의 서브세트(여기서 N1은 N보다 작음)는 제1 스레드에 의해서만 사용되도록 예약될 수 있고, N2개의 엔트리들의 서브세트(여기서 N2는 N보다 작음)는 제2 스레드에 의해서만 사용되도록 예약될 수 있으며, 나머지 N-(N1 + N2)개의 엔트리들의 서브세트는 어느 한 스레드에 할당될 수 있다. 실시예들에서, 이 접근법은 할당기 회로(1810)의 하나 이상의 인스턴스에 의해 시행될 수 있다.
로드의 완료가 캐시로부터 데이터를 판독하는 것에 의존하는 일 실시예에서, 각각의 캐시 엔트리는 엔트리가 그 엔트리로부터의 로드를 포함하는 스레드에 의해 잠금되어(locked) 있음을 나타내는 비트를 포함할 수 있다. 비트가 로드의 완료와 관련하여 클리어되거나 스레드가 파이프라인 플러시 이벤트(예컨대, 예측 실패된 브랜치)를 경험할 때까지 그 지시자 비트가 세트되어 있는 엔트리들의 대체가 방지될 수 있다. 실시예들에서, 이 접근법은 할당기 회로(1810)의 하나 이상의 인스턴스에 의해 시행될 수 있다.
일 실시예에서, 리소스 사용 카운터(1820)는 특정의 스레드에 대한 회수 큐에서의 가장 오래된 엔트리에 대해, 그 스레드(스톨링된 스레드)가 분할불가능 리소스로의 대응하는 디스패치를 위해 대기하고 있었던 클록 사이클들의 수를 카운트하기 위한 스레드당 하드웨어 카운터일 수 있다(스레드가 디스패치 슬롯 및 라이트백 슬롯을 필요로 하기 때문에, 이 조건은 회수 큐를 수반한다). 할당기 회로(1810)는, 스톨링된 스레드에 대한 카운트가 임계치에 도달하거나 임계치를 초과하는 것에 응답하여, 분할불가능 리소스에 대한 상이한 스레드로부터의 연산을 스케줄러에 할당하지 못하도록 (예컨대, 앞서 설명된 바와 같이) 동적으로 디스에이블되거나 블로킹될 수 있다. 대안적으로, 분할불가능 리소스로의 임의의 연산들의 디스패치가 주어진 수의 클록 사이클 동안 디스에이블되거나 블로킹될 수 있다.
이러한 접근법들은 일정 범위의 클록 사이클들을 소비하는 상이한 연산들을 수행할 수 있는, 실행 유닛과 같은, 분할불가능 리소스의 사용에 대한 데드록 타입 상황을 방지할 수 있다. 예를 들어, 이는 단일 사이클로 완료될 수 있는 연산이 그렇지 않았으면 일련의 다중 사이클 연산들을 완료하느라 바쁜 채로 있을 수 있는 리소스를 사용할 수 있게 해줄 수 있다.
임계치는 고정되거나(예컨대, 하드와이어링되거나), (예컨대, 하드웨어 또는 펌웨어에 의해) 구성가능하거나, 또는 (예컨대, 소프트웨어에 의해) 프로그래밍가능할 수 있다. 임계치는, 스루풋에 관련된 것들 및 공정성에 관련된 것들을 포함한, 다양한 인자들 또는 기준들에 기초하여 선택되고 그리고/또는 동적으로 조정될 수 있다. 예를 들어, 공정성이 우선순위인 경우, 각각의 스레드가 진행되는 것을 보다 공격적으로 가능하게 해주기 위해 임계치가 점진적으로 감소될 수 있으며; 스루풋이 우선순위인 경우, 진행 중인 스레드들이 중단 없이 계속되는 것을 보다 공격적으로 가능하게 해주기 위해 임계치가 점진적으로 증가될 수 있다.
일부 실시예들의 요약
본 발명의 일 실시예는 데드록 회피 하드웨어 및 리소스를 포함하는 프로세서를 포함할 수 있다. 데드록 회피 하드웨어는 할당기 회로 및 리소스 사용 카운터를 포함할 수 있다. 할당기 회로는 리소스 사용 카운터로부터의 출력에 기초하여 리소스를 스레드에 할당할지를 결정하도록 되어 있을 수 있다.
데이터 경로 특징들
본 발명의 실시예들에 따른 프로세서 코어들은 ISA에 의해 제공된 것보다 좁은 데이터 경로를 갖는 명령어 세트 아키텍처(instruction set architecture)(ISA)를 지원하기 위한 다양한 특징들을 포함할 수 있다. 다수의 그러한 특징들이 이하에서 비제한적인 예들을 사용하여 개별적으로 설명되지만, 실시예들은 그러한 특징들의 임의의 조합을 포함할 수 있다.
프로세서 코어는 보다 큰 크기의 피연산자들에 대한 연산들(예컨대, 크기가 256 비트인 피연산자들에 대한 로드들/저장들/산술 연산들)을, 이러한 연산들을 보다 작은 피연산자들에 대해 연산하는 다수의 마이크로-연산들(μop들)(예컨대, 크기가 128 비트인 값들에 대해 연산하는 다수의 μop들)로 분해하는 것에 의해, 가능하게 해주는 특징을 지원할 수 있다. 그러한 특징은 각종의 이유들로 바람직할 수 있으며: 예를 들어, 프로세서는 보다 큰 피연산자 크기들을 수반하는 명령어 세트 아키텍처를 지원할 수 있지만, 보다 작은 피연산자 크기들에 기초한 마이크로아키텍처를 사용할 수 있다. 부가적으로 또는 대안적으로, 프로세서는 보다 큰 피연산자 크기들을 수반하고 이러한 보다 큰 크기의 레지스터들을 포함하는 레지스터 파일을 가지는 명령어 세트 아키텍처를 지원할 수 있지만, 보다 작은 청크들로 된 데이터만을 핸들링할 수 있는 실행 유닛들을 포함할 수 있다. 부가적으로 또는 대안적으로, 프로세서는 보다 큰 크기의 레지스터 파일, 실행 유닛들, 및 로드/저장 포트들을 가질 수 있지만, 예컨대, 전력 절감 또는 스케줄링 목적들을 위해, 보다 작은 크기의 피연산자들을 사용하여 μop들을 수행하는 것이 바람직할 수 있다. 이하에서 설명되는 특징들을 포함하는 프로세서의 다른 잠재적인 이점들은, 적용가능한 기준들 중 단지 몇 개를 열거하면, 성능을 증가시키는 것, 전력 소비를 감소시켜 전력 절감 특징들을 구현하는 것, 및 공정성 향상, 최소 성능 보증, 스루풋, IPC(instructions per clock), 단위 시간당 명령어들, 서비스 품질, 시간 및/또는 메모리 효율을 포함하지만, 이들로 제한되지 않는다.
256 대 128 비트 데이터 경로 로드들 및 저장들
프로세서 코어는 본 발명의 실시예들에 따른, 128-비트 마이크로-연산들(μop들)을 사용하여 256-비트 로드들 및 저장들을 가능하게 해주는 특징을 지원할 수 있다. 일부 실시예들에서, 프로세서는 256-비트 명령어 세트 아키텍처를 지원할 수 있지만, 128-비트 레지스터 파일을 포함한, 128-비트 마이크로아키텍처를 사용할 수 있다. 다른 실시예들에서, 프로세서는 256-비트 명령어 세트 아키텍처 및 256-비트 레지스터 파일을 가질 수 있지만, 128-비트 청크들로 된 데이터만을 핸들링할 수 있는 로드 및/또는 저장 포트들을 포함할 수 있다.
도 19는 일부 실시예들에 따른, 한 쌍의 128-비트 μop들을 사용하는 256-비트 레지스터 파일에의 256-비트 로드를 도시하는 다이어그램이다. 메모리(1901)는, 메모리 위치(1902)에 저장된 값과 같은, 일련의 256-비트 값들을 포함한다. 제1 μop(1903)는 메모리 위치(1902)에 저장된 값의 하반부(lower half)를 검색하고, 제2 μop(1904)는 메모리 위치(1902)에 저장된 값의 상반부(upper half)를 검색한다. 메모리 위치(1902)에 저장된 값의 2개의 반부가 함께 블렌드되고(blended)(1905), 블렌드 연산의 결과가 256-비트 레지스터 파일(1906)에 배치된다.
도 20은 일부 실시예들에 따른, 도 19를 참조하여 앞서 설명된 프로세스를 나타내는 흐름 다이어그램이다. 명령어를 디코드하는 프로세스 동안(2001), 256-비트 로드가 검출되는 경우, 제1 로드 μop, 제2 로드 μop, 및 블렌드 μop를 포함한, 3개의 μop가 생성된다(박스(2002)). μop들은 실행되도록 스케줄링되며, 각각의 μop에 대해, 프로세서는 로드될/블렌드될 데이터가 준비될 때까지 기다릴 수 있다(2003). 제1 로드 μop가 실행될 때, 프로세서는, 박스(2004)에 도시된 바와 같이, 메모리 위치(1902)에 저장된 값의 하반부를 검색할 수 있다. 제2 로드 μop가 실행될 때, 프로세서는, 박스(2004)에 도시된 바와 같이, 메모리 위치(1902)에 저장된 값의 상반부를 검색할 수 있다. 블렌드 μop가 실행될 때, 박스(2004)에 도시된 바와 같이, 메모리 위치(1902)에 저장된 값의 2개의 검색된 반부가 결합되어 256-비트 레지스터 파일에 배치된다. 마지막으로, 박스(2005)에 도시된 바와 같이, 디코드된 명령어들은 완료 시에 회수된다.
일부 실시예들에서, 값이 256-비트 레지스터 파일로부터 128-비트 μop들을 사용하는 메모리에 저장될 수 있다. 도 21은 이 프로세스를 예시하는 다이어그램이다. 256-비트 레지스터 파일(2101)은, 레지스터(2102)와 같은, 256-비트 폭인 레지스터들을 포함한다. 제1 저장 μop(2103)는 레지스터(2102)에 저장된 값의 하반부를 검색하고 이를 메모리 위치(2104)의 하반부에 저장한다. 제2 저장 μop(2105)는 레지스터(2102)에 저장된 값의 상반부를 검색하고 이를 메모리 위치(2104)의 상반부에 저장한다.
도 22는 일부 실시예들에 따른, 도 21을 참조하여 앞서 설명된 프로세스를 나타내는 흐름 다이어그램이다. 명령어를 디코드하는 프로세스 동안(2201), 256-비트 저장이 검출되는 경우, 제1 저장 μop 및 제2 저장 μop를 포함한, 2개의 μop가 생성된다(박스(2202)). μop들은 실행되도록 스케줄링되며, 각각의 μop에 대해, 프로세서는 저장될 데이터가 준비될 때까지 기다릴 수 있다(2203). 제1 저장 μop가 실행될 때, 프로세서는, 박스(2204)에 도시된 바와 같이, 레지스터(2102)에 저장된 값의 하반부를 검색하고, 이를 메모리 위치(2104)의 하반부에 기입할 수 있다. 제2 저장 μop가 실행될 때, 프로세서는, 박스(2204)에 도시된 바와 같이, 레지스터(2102)에 저장된 값의 상반부를 검색하고, 이를 메모리 위치(2104)의 상반부에 기입할 수 있다. 마지막으로, 박스(2205)에 도시된 바와 같이, 디코드된 명령어들은 완료 시에 회수된다.
일부 실시예들에서, 256-비트 로드 명령어는 2개의 μop, 즉 256-비트 값의 하반부를 제1 128-비트 레지스터에 로드하는 제1 μop 및 256-비트 값의 상반부를 제2 128-비트 레지스터에 로드하는 제2 μop를 실행하는 것에 의해 256-비트 값을 2개의 128-비트 레지스터에 로드할 수 있다.
일부 실시예들에서, 로드는 "더블 펌핑되는(double-pumped)" - 즉, 한 번은 값의 하반부를 메모리로부터 로드하기 위해, 그리고 두 번째는 값의 상반부를 메모리로부터 로드하기 위해, 두 번 실행되는 - 단일 μop를 사용하여 달성된다. 일부 실시예들에서, 저장은 "더블 펌핑되는" - 즉, 한 번은 레지스터의 하반부를 메모리에 저장하기 위해, 그리고 한 번은 레지스터의 상반부를 메모리에 저장하기 위해 실행되는 - 단일 μop를 사용하여 달성된다. 일부 실시예들에서, 256-비트 로드 및/또는 저장을 구현하는 데 사용되는 μop들은 벡터 스케줄링 알고리즘들에 따라 스케줄링될 수 있다. 일부 실시예들에서, 갱 스케줄링(gang scheduling) 기법들은 별개의 실행 유닛들 상에서의 실행을 위해 로드 및/또는 저장에 관여된 다수의 μop들을 스케줄링하는 데 사용될 수 있다.
앞서 설명된 로드/저장 특징들은 임의의 특정 크기의 메모리, 로드 포트들, 또는 레지스터 파일들을 사용하여 로드들 및/또는 저장들을 수행하는 것으로 제한되지 않는다. 예를 들어, 앞서 설명된 기법들은 한 번에 256 비트에 대해 연산하는 기저 하드웨어(underlying hardware)를 사용하여 512-비트 로드들 및/또는 저장들을 수행하는 데 사용될 수 있다.
256 대 128 비트 데이터 경로 인-레인(In-Lane) 실행
프로세서 코어는 본 발명의 실시예들에 따른, 128-비트 마이크로-연산들(μop들)을 사용하여 256-비트 산술 연산들을 가능하게 해주는 특징을 지원할 수 있다. 일부 실시예들에서, 프로세서는 256-비트 명령어 세트 아키텍처를 지원할 수 있지만, 128-비트 레지스터 파일을 포함한, 128-비트 마이크로아키텍처를 사용할 수 있다. 다른 실시예들에서, 프로세서는 256-비트 명령어 세트 아키텍처 및 256-비트 레지스터 파일을 가질 수 있지만, 128-비트 청크들로 된 데이터만을 핸들링할 수 있는 실행 유닛들을 포함할 수 있다. 일부 실시예들에서, 프로세서는 256-비트 레지스터 파일, 실행 유닛들, 및 로드/저장 포트들을 가질 수 있지만, 예컨대, 전력 절감 또는 스케줄링 목적들을 위해, 다수의 128-비트 μop들을 사용하여 256-비트 산술 연산들을 구현하는 것이 바람직할 수 있다.
도 23은 일부 실시예들에 따른 이 프로세스를 예시하고 있다. 256-비트 명령어(2301)는 이를 2개의 128-비트 μop(2302 및 2303)로 분할(splitting)하는 것에 의해 디코드되며, 이 μop들은 이어서 하나 이상의 128-비트 실행 유닛(2304, 2305) 상에서의 실행을 위해 독립적으로 스케줄링된다. 도 23에 도시된 실시예에 따르면, 제1 128-비트 μop(2302)는 256-비트 산술 명령어에 제공되는 256-비트 피연산자들의 하반부들을 사용하여 명령어를 실행할 수 있고, 프로세서는 이어서 결과를 256-비트 목적지 레지스터의 하반부에 저장할 수 있다. 제2 128-비트 μop(2303)는 256-비트 산술 명령어에 제공되는 256-비트 피연산자들의 상반부들을 사용하여 명령어를 실행할 수 있고, 프로세서는 이어서 결과를 256-비트 목적지 레지스터의 상반부에 저장할 수 있다.
일부 실시예들에 따르면, 256-비트 명령어를 한 쌍의 128-비트 μop들로 파티셔닝하는 것은 결과의 하반부를 256-비트 명령어의 피연산자들의 하반부들에만 기초하여 이루어지고, 결과의 상반부는 256-비트 명령어의 피연산자들의 상반부들에만 기초한다(즉, "인-레인" 연산들). 이러한 인-레인 시나리오들에서, 256-비트 명령어의 결과가 2개의 분리된 128-비트 μop의 2개의 독립적인 결과로서 표현될 수 있기 때문에, 2개의 128-비트 μop가 서로 독립적으로 스케줄링될 수 있다.
일부 실시예들에서, 128-비트 μop들 각각은 동일한 명령어(예컨대, ADD 명령어)를 나타내고, 256-비트 명령어는 "더블 펌핑"되는 - 즉, 한 번은 결과의 하반부를 계산하기 위해, 그리고 한 번은 결과의 상반부를 계산하기 위해, 두 번 실행되는 - 단일 128-비트 μop를 사용하여 구현될 수 있다. 일부 실시예들에서, 256-비트 명령어는, 독립적으로 스케줄링되고 하나 이상의 실행 유닛 상에서 실행되는, 2개의 구별되는 μop로 "분할"될 수 있다. 일부 실시예들에서, 256-비트 명령어는, 각각이 128-비트 μop를 실행하는, 2개의 실행 유닛을 동시에 사용하여 실행될 수 있다(이 절차는 때때로 본 기술분야에서 "갱 스케줄링"이라고 알려져 있다).
앞서 설명된 인-레인 실행 특징들은 임의의 특정 크기의 메모리 값들, 로드 포트들, 실행 유닛들 또는 레지스터 파일들을 사용하여 명령어들을 실행하는 것으로 제한되지 않는다. 예를 들어, 앞서 설명된 기법들은 한 번에 256-비트에 대해 연산하는 기저 하드웨어를 사용하여 512-비트 연산들을 수행하는 데, 또는 한 번에 512 비트에 대해 연산하는 기저 하드웨어를 사용하여 1024-비트 연산들을 수행하는 데 사용될 수 있다.
256 대 128 비트 데이터 경로 교차 레인(Cross-Lane) 실행
일부 실시예들에서, 결과의 하반부가 피연산자들의 상반부들에 저장된 값들에 의존하고, 그리고/또는 결과의 상반부가 피연산자들의 하반부들에 저장된 값들에 의존하기 때문에, 실행될 256-비트 명령어가 2개의 완전히 독립적인 128-비트 μop로 파티셔닝할 수 없다(즉, "교차 레인" 연산들).
교차 레인 연산들은 부분 결과들을 저장하기 위한 임시 스토리지 영역을 사용하여 구현될 수 있으며, 부분 결과들은 이어서 최종 결과로 결합되어 목적지 레지스터에 저장된다. 도 24는 이 특징의 일부 실시예들에 따른 이 프로세스를 예시하고 있다. 교차 레인 256-비트 명령어(QJA01)는 이를 2개의 128-비트 μop(QJA02 및 QJA03)로 분할하는 것에 의해 디코드되며, 2개의 128-비트 μop(QJA02 및 QJA03)는 이어서 하나 이상의 128-비트 실행 유닛(QJA06, QJA07) 상에서의 실행을 위해 독립적으로 스케줄링된다. 임시 스토리지 영역(QJA04)은 μop들(QJA02 및 QJA03)에 의해 생성된 부분 결과들을 저장하는 데 사용된다. 이 임시 결과들은, 최종 결과를 생성하기 위해, 제3 μop(QJA05)에 의해 사용된다.
일부 실시예들에서, 128-비트 μop들(QJA02 및 QJA03) 각각은 동일한 명령어를 나타내고, "더블 펌핑되는" - 즉, 한 번은 임시 스토리지 영역(QJA04)에 저장되는 제1 부분 결과를 계산하기 위해, 그리고 한 번은 임시 스토리지 영역(QJA04)에 저장되는 제2 부분 결과를 계산하기 위해, 두 번 실행되는 - 단일 128-비트 μop를 사용하여 구현될 수 있다. 일부 실시예들에서, 256-비트 명령어는, 독립적으로 스케줄링되고 하나 이상의 실행 유닛 상에서 실행되는, 2개의 구별되는 μop로 "분할"될 수 있으며, 2개의 구별되는 μop의 부분 결과들은 임시 스토리지 영역에 저장된다. 일부 실시예들에서, 256-비트 명령어는, 각각이 128-비트 μop를 실행하는, 2개의 실행 유닛을 동시에 사용하여 실행될 수 있다(이 절차는 때때로 본 기술분야에서 "갱 스케줄링"이라고 알려져 있다). 일부 실시예들에서, 256-비트 μop가 256-비트 능력을 갖는 "특별" 실행 유닛을 사용하여 실행될 수 있어, 임시 스토리지 영역(예컨대, 임시 스토리지 영역(QJA04))의 필요성을 없애줄 수 있다.
앞서 설명된 교차 레인 실행 특징들은 임의의 특정 크기의 메모리 값들, 로드 포트들, 실행 유닛들 또는 레지스터 파일들을 사용하여 명령어들을 실행하는 것으로 제한되지 않는다. 예를 들어, 앞서 설명된 기법들은 한 번에 256-비트에 대해 연산하는 기저 하드웨어를 사용하여 512-비트 연산들을 수행하는 데, 또는 한 번에 512 비트에 대해 연산하는 기저 하드웨어를 사용하여 1024-비트 연산들을 수행하는 데 사용될 수 있다.
부가의 독립적 및 조합가능 특징들
본 발명의 실시예들에 따른 프로세서 코어들은 증가된 성능 및/또는 감소된 전력 소비를 지원하기 위한 다양한 부가의 특징들을 포함할 수 있다. 다수의 그러한 특징들이 이하에서 비제한적인 예들을 사용하여 개별적으로 설명되지만, 실시예들은 그러한 특징들의 임의의 조합을 포함할 수 있다.
마이크로-op 캐시
프로세서 코어는 실시예들에 따른 마이크로-op 캐시 특징을 지원할 수 있다. 일부 실시예들에서, 마이크로-op 캐시 특징은 할당, 대체 정책 및 상이한 구조 타입들(예컨대, 물리, 가상 등)을 포함할 수 있다. 마이크로-op 캐시 특징에서의 지능적 할당은, 루프 스트림 또는 마이크로코드 시퀀서(MS) 흐름을 갖는 복잡한 명령어들 대 간단한 명령어들과 같은, 명령어들의 타입을 검출하고 그에 따라 할당할 수 있다. 마이크로-op 캐시 특징은 장래의 잠재적 재사용을 위해 그리고/또는 캐시 라인당 몇 개의 마이크로-op를 배정해야 하는지를 결정하기 위해 희생 캐시(victim cache)를 추가하는 것을 또한 커버할 수 있다. 일부 실시예들에서, 마이크로-op 캐시는 디코드된 명령어들의 추후의 재사용을 위해 디코드된 명령어들(마이크로-op들)을 마이크로-op 버퍼에 저장하는 데 사용될 수 있다. 일부 실시예들에서, 마이크로-op 버퍼의 사용은 명령어 캐시 룩업 및 디코드 스테이지의 다수의(예컨대, 적어도 2개의) 사이클들을 회피함으로써 파이프라인을 단축시킬 수 있다. 이는 또한 마이크로-op 버퍼 내의 이미 이용가능하고 디코드된 마이크로-op들을 사용하는 것에 의해 전력을 절감할 수 있다. 일부 실시예들에서, 유사한 이벤트(예컨대, 마이크로-op 타입, 마이크로-op 디코드 난이도, 마이크로-op 사용 패턴들)를 갖는 하나 초과의 스레드가 있을 수 있으며, 마이크로-op 캐시에 리소스들을 할당하기 위해 스레드들 간에 동순위가 있는 경우들에 우선순위 스킴이 사용될 수 있다. 일부 실시예들에서, 마이크로-op 캐시 특징은 파이프라인에서 가장 높은 IPC 및/또는 명령어 스루풋을 달성하기 위해 마이크로-op 캐시에 대한 지능적 할당, 대체 정책, 및/또는 구성을 제공할 수 있다.
도 25는 실시예들에 따른 프로세서에 포함될 수 있는 마이크로-op 캐시 특징을 예시하는 블록 다이어그램이다. 마이크로-op 캐시 특징은 다음과 같은 것: 명령어 디코더(2501), 지능적 할당 및 대체 블록(2502), 및 마이크로-op 캐시(2503) 중 하나 이상을 포함할 수 있다. 지능적 할당 및 대체 블록(2502)은 명령어 디코더(2501)로부터 명령어를 수신할 수 있다. 명령어 디코더(2501)는 또한 생략될 수 있고 지능적 할당 및 대체 블록(2502)은 이미 디코드된 명령어를 수신할 수 있다. 지능적 할당 및 대체 블록(2502)은, 복잡한 명령어(예컨대, MS 흐름을 가짐), 루프 스트림 등과 같은, 어떤 타입의 명령어들을 할당할지를 알고리즘적으로 결정할 수 있다. 지능적 할당 및 대체 블록(2502)은 명령어를 마이크로-op 캐시(KQA03)에서 어디에 할당할지를 결정할 수 있고 결정된 위치에 명령어를 할당할 수 있다. 일부 실시예들에서, 지능적 할당 및 대체 블록(2502)은, 예를 들어, 다음과 같은 것: 명령어들에 대한 과거의 사용 패턴들, 사용의 빈도수, 디코드 난이도, 및 디코드 시간 중 하나 이상에 기초하여 어떤 타입의 명령어들을 할당할지를 알고리즘적으로 결정할 수 있다. 지능적 할당 및 대체 블록은, 예를 들어, 다음과 같은 파라미터들: 최근에 가장 적게 사용된(least recently used) 명령어 정보, 명령어들에 대한 과거의 사용 패턴들, 사용의 빈도수, 디코드 난이도, 명령어들이 루프의 일부인지 및 루프로부터의 다른 명령어들이 저장되는지, 및 마이크로 op 캐시에 저장된 명령어들의 디코드 시간 중 하나 이상에 기초하여 명령어들을 마이크로-op 캐시에서 어디에 저장해야 하는지를 결정할 수 있다. 이러한 파라미터들은, 예를 들어, 지능적 할당 및 대체 블록에, 마이크로-op 캐시에, 그리고/또는 다른 곳에(예컨대, 별개의 테이블에) 저장될 수 있다.
도 26은 실시예들에 따른 프로세서에 의해 수행될 수 있는 마이크로-op 캐시 특징을 위한 방법을 예시하는 흐름 다이어그램이다. 이 방법은 박스(2601)에 도시된 바와 같이 명령어들을 수신하는 단계를 포함할 수 있다. 이 방법은, 박스(2602)에 도시된 바와 같이, 복잡한 명령어, 루프 스트림 등과 같이, 어떤 타입의 명령어들을 할당할지를 알고리즘적으로 결정하는 단계를 추가로 포함할 수 있다. 이 방법은 박스(2603)에 도시된 바와 같이 명령어를 마이크로-op 캐시에서 어디에 할당할지를 결정하는 단계를 추가로 포함할 수 있다. 이 방법은 박스(2604)에 도시된 바와 같이 명령어를 마이크로-op 캐시의 결정된 위치에 할당하는 단계를 추가로 포함할 수 있다.
도 27은 실시예들에 따른 프로세서에 포함될 수 있는 마이크로-op 캐시 특징을 예시하는 블록 다이어그램이다. 마이크로-op 캐시 특징은 브랜치 예측 유닛(BPU)(2701), 명령어 캐시 태그(2702), 마이크로 op 태그(2703), 명령어 캐시(2704), 마이크로 op 캐시(2705), 디코더(2706), 및 마이크로 op 큐(2707) 중 하나 이상을 포함할 수 있다. BPU(2701)는 (예컨대, 조건부 연산들을 수행할지를 결정하기 위해) 브랜치 예측을 수행할 수 있다. 도 27의 좌측에 예시된 바와 같이, 명령어 캐시 태그(2702)는, 예를 들어, BPU(2701)로부터 명령어 태그를 수신하고 명령어 태그와 연관된 명령어를 결정할 수 있다. 명령어는 명령어 캐시(2704)로부터 검색되고 디코더(2706)에 의해 디코드될 수 있다. 마이크로 op 큐(2707)는 이어서 디코더(2706)로부터 디코드된 명령어를 수신할 수 있다. 도 28의 우측에 예시된 바와 같이, 마이크로 op 태그(2703)는 BPU(2701)로부터 명령어 태그를 수신하고 연관된 마이크로 op 태그를 결정할 수 있다. 마이크로 op 태그와 연관된 마이크로-op가 마이크로 op 캐시(2705)에 저장되어 있는지 및 마이크로 op 캐시(2705)로부터 마이크로 op를 검색할지를 결정하기 위해 마이크로 op 캐시(2705)가 이어서 체크될 수 있다. 예를 들어, 도 25 및 도 26과 관련하여 앞서 설명된 바와 같이, 마이크로 op들은 디코드되어 마이크로 op 캐시(2705)에 저장될 수 있다. 마이크로-op 캐시 특징은 물리 및/또는 가상일 수 있다. 마이크로-op 캐시 특징은 파이프라인을 단축시키는 것을 포함할 수 있다. 예를 들어, 도 27에 예시된 바와 같이, 마이크로-op들이 이전에 디코드되어 마이크로-op 캐시에 저장되어 있는 경우에, 우측의 파이프라인은 좌측의 파이프라인보다 짧은데, 그 이유는 마이크로-op가 마이크로 op 캐시에 이미 저장되어 있을 때 디코드 동작이 수행될 필요가 없을 수 있기 때문이다. 마이크로-op 캐시 특징은 마이크로 op 캐시(2705) 내에서의 다음 라인 예측을 포함할 수 있다. 마이크로-op 캐시 특징은 MS 흐름들을 마이크로 op 캐시(2705)에 저장할 수 있다. 마이크로-op 캐시 특징은 어느 마이크로-op들을 캐시에 저장할지 그리고 어느 마이크로-op들을 새로운 마이크로-op들로 대체할지를 결정하기 위해 대체 정책들을 사용할 수 있다. 마이크로-op 캐시 특징은 마이크로-op 캐시(2705)에 할당할 명령어들의 타입들, 예컨대, 루프 스트림 및/또는 복잡한 명령어들을 결정할 수 있다. 마이크로-op 캐시 특징은 마이크로-연산들을 우선순위화할 수 있다. 마이크로-op 캐시 특징은 희생 캐시(도시되지 않음)를 포함할 수 있다. 희생 캐시는 디코드하기 어려웠던 명령어들과 같은, 명령어들을 잠재적 재사용을 위해 저장할 수 있다.
도 28은 실시예들에 따른 프로세서에 포함될 수 있는 마이크로-op 캐시 특징을 예시하는 블록 다이어그램이다. 마이크로-op 캐시 특징은 물리 마이크로 op 캐시(2801) 및 가상 마이크로 op 캐시(2802) 중 하나 이상을 포함할 수 있다. 물리 마이크로 op 캐시(2801)는, 예를 들어, 물리 어드레스 공간을 사용하여 물리 메모리에 마이크로-op들을 저장할 수 있다. 가상 마이크로 op 캐시는, 예를 들어, 가상 어드레스 공간을 사용하여 가상 메모리에 마이크로 op들을 저장할 수 있다. 물리 마이크로 op 캐시(2801) 및/또는 가상 마이크로 op 캐시(2802)는, 예컨대, 컨텍스트 및/또는 모드 스위치 시에, 플러시될 수 있다. 물리 마이크로 op 캐시(2801) 및/또는 가상 마이크로 op 캐시(2802)는 경쟁적으로 공유될 수 있다.
일부 실시예들의 요약
일 실시예는 마이크로 op 캐시에 할당할 명령어 타입을 알고리즘적으로 결정하고; 결정된 타입의 명령어를 마이크로 op 캐시에 할당하기 위한 위치를 결정하며; 명령어를 결정된 위치에 할당하도록 구성된 프로세서를 포함할 수 있다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 일부 실시예들에서, 프로세서는 지능적 할당 및 대체 블록으로 하여금 명령어 디코더로부터 명령어를 수신하게 하도록 추가로 구성된다. 일부 실시예들에서, 결정된 명령어 타입은 복잡한 명령어 및 루프 스트림 중 적어도 하나이다. 일부 실시예들에서, 프로세서는 브랜치 예측 유닛(BPU), 명령어 캐시 태그, 마이크로 op 태그, 명령어 캐시, 마이크로 op 캐시, 및 디코더 중 하나 이상, 및 마이크로 op 큐를 포함할 수 있다. 일부 실시예들에서, 마이크로 op 캐시는 다음 라인 예측을 포함할 수 있다. 일부 실시예들에서, 프로세서는 MS 흐름들을 마이크로 op 캐시에 저장하도록 구성된다. 일부 실시예들에서, 프로세서는 마이크로 연산들을 우선순위화하도록 구성된다. 일부 실시예들에서, 프로세서는 희생 캐시를 포함한다. 일부 실시예들에서, 마이크로 op 캐시는 물리 마이크로 op 캐시 및 가상 마이크로 op 캐시 중 적어도 하나를 포함한다. 일부 실시예들에서, 물리 마이크로 op 캐시 및 가상 마이크로 op 캐시 중 적어도 하나는 경쟁적으로 공유될 수 있다. 일부 실시예들에서, 어떤 명령어 타입을 마이크로 op 캐시에 할당할지의 결정은 다음과 같은 것: 과거의 사용 패턴들, 사용의 빈도수, 디코드 난이도, 및 디코드 시간 중 하나 이상에 적어도 부분적으로 기초할 수 있다. 일부 실시예들에서, 결정된 타입의 명령어를 마이크로 op 캐시에 할당하기 위한 위치의 결정은 다음과 같은 것: 최근에 가장 적게 사용된 명령어들 정보, 명령어들에 대한 과거의 사용 패턴들, 사용의 빈도수, 디코드 난이도, 루프 상태 정보, 및 마이크로 op 캐시에 저장된 명령어들의 디코드 시간 중 하나 이상에 기초할 수 있다.
일 실시예는 마이크로 op 캐시에 할당할 명령어 타입을 알고리즘적으로 결정하는 단계; 결정된 타입의 명령어를 마이크로 op 캐시에 할당하기 위한 위치를 결정하는 단계; 및 명령어를 결정된 위치에 할당하는 단계를 포함하는 방법을 포함할 수 있다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 일부 실시예들에서, 이 방법은 지능적 할당 및 대체 블록으로 하여금 명령어 디코더로부터 명령어를 수신하게 하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 결정된 명령어 타입은 복잡한 명령어 및 루프 스트림 중 적어도 하나이다. 일부 실시예들에서, 이 방법은 브랜치 예측 유닛(BPU), 명령어 캐시 태그, 마이크로 op 태그, 명령어 캐시, 마이크로 op 캐시, 및 디코더 중 하나 이상, 및 마이크로 op 큐를 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 마이크로 op 캐시는 다음 라인 예측을 포함할 수 있다. 일부 실시예들에서, 이 방법은 MS 흐름들을 마이크로 op 캐시에 저장하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 마이크로 연산들을 우선순위화하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 희생 캐시를 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 마이크로 op 캐시를 사용하는 단계는 물리 마이크로 op 캐시 및 가상 마이크로 op 캐시 중 적어도 하나를 사용하는 단계를 포함한다. 일부 실시예들에서, 이 방법은 물리 마이크로 op 캐시 및 가상 마이크로 op 캐시 중 적어도 하나를 경쟁적으로 공유하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 어떤 명령어 타입을 마이크로 op 캐시에 할당할지의 결정은 다음과 같은 것: 과거의 사용 패턴들, 사용의 빈도수, 디코드 난이도, 및 디코드 시간 중 하나 이상에 적어도 부분적으로 기초할 수 있다. 일부 실시예들에서, 결정된 타입의 명령어를 마이크로 op 캐시에 할당하기 위한 위치의 결정은 다음과 같은 것: 최근에 가장 적게 사용된 명령어들 정보, 명령어들에 대한 과거의 사용 패턴들, 사용의 빈도수, 디코드 난이도, 루프 상태 정보, 및 마이크로 op 캐시에 저장된 명령어들의 디코드 시간 중 하나 이상에 기초할 수 있다.
일 실시예는 프로세서에 의해 실행될 때 프로세서로 하여금 방법을 수행하게 하는 적어도 하나의 명령어를 저장하는 비일시적 머신 판독가능 매체를 포함할 수 있으며, 이 방법은 마이크로 op 캐시에 할당할 명령어 타입을 알고리즘적으로 결정하는 단계; 결정된 타입의 명령어를 마이크로 op 캐시에 할당하기 위한 위치를 결정하는 단계; 및 명령어를 결정된 위치에 할당하는 단계를 포함한다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 일부 실시예들에서, 이 방법은 지능적 할당 및 대체 블록으로 하여금 명령어 디코더로부터 명령어를 수신하게 하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 결정된 명령어 타입은 복잡한 명령어 및 루프 스트림 중 적어도 하나이다. 일부 실시예들에서, 이 방법은 브랜치 예측 유닛(BPU), 명령어 캐시 태그, 마이크로 op 태그, 명령어 캐시, 마이크로 op 캐시, 및 디코더 중 하나 이상, 및 마이크로 op 큐를 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 마이크로 op 캐시는 다음 라인 예측을 포함할 수 있다. 일부 실시예들에서, 이 방법은 MS 흐름들을 마이크로 op 캐시에 저장하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 마이크로 연산들을 우선순위화하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 이 방법은 희생 캐시를 사용하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 마이크로 op 캐시를 사용하는 단계는 물리 마이크로 op 캐시 및 가상 마이크로 op 캐시 중 적어도 하나를 사용하는 단계를 포함한다. 일부 실시예들에서, 이 방법은 물리 마이크로 op 캐시 및 가상 마이크로 op 캐시 중 적어도 하나를 경쟁적으로 공유하는 단계를 추가로 포함할 수 있다. 일부 실시예들에서, 어떤 명령어 타입을 마이크로 op 캐시에 할당할지의 결정은 다음과 같은 것: 과거의 사용 패턴들, 사용의 빈도수, 디코드 난이도, 및 디코드 시간 중 하나 이상에 적어도 부분적으로 기초할 수 있다. 일부 실시예들에서, 결정된 타입의 명령어를 마이크로 op 캐시에 할당하기 위한 위치의 결정은 다음과 같은 것: 최근에 가장 적게 사용된 명령어들 정보, 명령어들에 대한 과거의 사용 패턴들, 사용의 빈도수, 디코드 난이도, 루프 상태 정보, 및 마이크로 op 캐시에 저장된 명령어들의 디코드 시간 중 하나 이상에 기초할 수 있다.
일 실시예는 메모리 및 프로세서를 포함하는 시스템을 포함할 수 있고, 프로세서는 마이크로 op 캐시에 할당할 명령어 타입을 알고리즘적으로 결정하고; 결정된 타입의 명령어를 마이크로 op 캐시에 할당하기 위한 위치를 결정하며; 명령어를 결정된 위치에 할당하도록 구성된다.
일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 일부 실시예들에서, 프로세서는 지능적 할당 및 대체 블록으로 하여금 명령어 디코더로부터 명령어를 수신하게 하도록 추가로 구성된다. 일부 실시예들에서, 결정된 명령어 타입은 복잡한 명령어 및 루프 스트림 중 적어도 하나이다. 일부 실시예들에서, 프로세서는 브랜치 예측 유닛(BPU), 명령어 캐시 태그, 마이크로 op 태그, 명령어 캐시, 마이크로 op 캐시, 및 디코더 중 하나 이상, 및 마이크로 op 큐를 포함할 수 있다. 일부 실시예들에서, 마이크로 op 캐시는 다음 라인 예측을 포함할 수 있다. 일부 실시예들에서, 프로세서는 MS 흐름들을 마이크로 op 캐시에 저장하도록 구성된다. 일부 실시예들에서, 프로세서는 마이크로 연산들을 우선순위화하도록 구성된다. 일부 실시예들에서, 프로세서는 희생 캐시를 포함한다. 일부 실시예들에서, 마이크로 op 캐시는 물리 마이크로 op 캐시 및 가상 마이크로 op 캐시 중 적어도 하나를 포함한다. 일부 실시예들에서, 물리 마이크로 op 캐시 및 가상 마이크로 op 캐시 중 적어도 하나는 경쟁적으로 공유될 수 있다. 일부 실시예들에서, 어떤 명령어 타입을 마이크로 op 캐시에 할당할지의 결정은 다음과 같은 것: 과거의 사용 패턴들, 사용의 빈도수, 디코드 난이도, 및 디코드 시간 중 하나 이상에 적어도 부분적으로 기초할 수 있다. 일부 실시예들에서, 결정된 타입의 명령어를 마이크로 op 캐시에 할당하기 위한 위치의 결정은 다음과 같은 것: 최근에 가장 적게 사용된 명령어들 정보, 명령어들에 대한 과거의 사용 패턴들, 사용의 빈도수, 디코드 난이도, 루프 상태 정보, 및 마이크로 op 캐시에 저장된 명령어들의 디코드 시간 중 하나 이상에 기초할 수 있다.
이동 제거(Move Elimination)
프로세서 코어는 본 발명의 실시예들에 따른 이동 제거 특징을 지원할 수 있다. 많은 프로세서들의 경우, 이동 명령어를 실행하는 것은 보통 하나의 레지스터로부터 다른 레지스터로 값을 이동시키는 것, 또는 즉치(immediate)를 레지스터로 이동시키는 것을 수반한다. 그러한 이동 명령어들의 빈번함(frequency)으로 인해, 이동 명령어들이 효율적으로 프로세싱되는 경우 프로세서 성능이 증가될 수 있다.
대부분의 명령어들은 몇 개의 소스 피연산자에 대해 연산하고 결과들을 생성한다. 그것들은 값들이 판독되거나 기입되는 소스 및 목적지 위치들을, 명시적으로 또는 간접참조(indirection)를 통해, 명명한다. 이름은 논리 (아키텍처) 레지스터(logical (architectural) register) 또는 메모리 내의 위치 중 어느 하나일 수 있다.
보통, 성능을 증가시키기 위해 레지스터 리네이밍이 이용될 수 있도록, 프로세서에 대해 이용가능한 물리 레지스터들의 수는 논리 레지스터들의 수를 초과한다. 특히, 비순차 프로세서들의 경우, 레지스터 리네이밍은 명령어들이 그들의 원래의 프로그램 순서를 벗어나 실행될 수 있게 해준다. 따라서, 다수의 비순차 프로세서들의 경우, 원래의 이동 명령어에 명명된 논리 레지스터가 물리 레지스터들로 리네이밍되도록 이동 명령어가 리네이밍된다.
논리 레지스터를 리네이밍하는 것은 논리 레지스터를 물리 레지스터에 매핑하는 것을 수반한다. 이러한 매핑들은 RAT(Register Alias Table)에 저장될 수 있다. RAT는 각각의 논리 레지스터에 대한 최근의 매핑(latest mapping)을 유지한다. RAT는 논리 레지스터들에 의해 인덱싱되고, 대응하는 물리 레지스터들에 대한 매핑들을 제공한다.
3개의 구조, RAT(2900), 활성 리스트(active list)(AL)(2902) 및 프리 리스트(free list)(FL)(2904)를 수반하는 레지스터 리네이밍 및 의존성 추적 스킴이 도 29에 예시되어 있다. 리네이밍된 명령어에 의해 명시된 각각의 논리 레지스터에 대해, FL(2904)로부터의 미사용된 물리 레지스터가 할당되고 RAT(2900)가 이 새로운 매핑을 사용하여 업데이트된다. 물리 레지스터들은, 현재의 명령어 윈도 내의 명령어들에 의해 더 이상 참조되지 않는다면, 자유롭게 또다시 사용된다(즉, 리클레임된다(reclaimed)).
도 29에 묘사된 데이터 구조들에 기초하여, 레지스터 리클레이밍(register reclaiming)을 위한 하나의 방법은 RAT(110)로부터 물리 레지스터를 축출한 명령어, 즉 물리 레지스터에 대한 새로운 매핑을 생성한 명령어가 회수될 때만 물리 레지스터를 리클레임하는 것이다. 그 결과, 새로운 매핑이 RAT(2900)를 업데이트할 때마다, 축출된 이전의 매핑(old mapping)이 AL(2902)에 푸시된다. (AL 엔트리는 명령어 윈도 내의 각각의 명령어와 연관된다.) 명령어가 회수될 때, AL(2902)에 기록된 이전의 매핑의 물리 레지스터는, 있는 경우, 리클레임되어 FL(2904)에 푸시된다. 이 사이클이 도 29에 묘사되어 있다.
많은 명령어들의 경우, 소스 레지스터들 중 하나가 목적지 레지스터로서 또한 사용된다. 이 소스 레지스터에 저장된 값이 (프로그램 순서에서) 후속 명령어들에 의해 필요하게 되는 경우, 레지스터-이동 명령어가 후속 명령어에 의해 액세스될 수 있도록, 소스 레지스터 내의 소스 피연산자를 다른 논리 위치로 복사하기 위해 레지스터-이동 명령어가 후속 명령어 이전에 삽입될 수 있다.
레지스터-이동 명령어들의 삽입에 대한 다른 이유는 프로시저 호출(procedure call) 이전에 적절한 레지스터들에 파라미터 값들을 설정하는 것이다.
그 결과, 레지스터-이동 명령어들의 수가 아주 상당할 수 있다. 따라서, 효율적인 레지스터 리네이밍 및 리클레이밍 스킴들을 사용한 레지스터-이동 명령어들의 효율적인 실행을 제공하는 것이 바람직할 수 있다.
도 1b에서, 레지스터 리네이밍 기능 유닛은 리네임/할당기 유닛(152)으로서 표시되고, 물리 레지스터들은 물리 레지스터 파일들 유닛(158)으로 나타내어져 있다. 도 3에서, 레지스터 리네이밍 기능 유닛들은 정수 리네임 유닛(321) 및 FP 리네임 유닛(331)으로서 나타내어져 있고, 물리 레지스터들은 정수 물리 레지스터 파일(323) 및 FP 레지스터 파일(333)에 의해 나타내어져 있다. 모든 논리 레지스터는 물리 레지스터에 대한 매핑을 가지며, 여기서 매핑은 RAT(2900)에 엔트리로서 저장된다. RAT(2900)에서의 엔트리는 논리 레지스터에 의해 인덱싱되고 물리 레지스터에 대한 포인터를 포함한다.
명령어의 리네이밍 동안, RAT에서의 현재의 엔트리들은 명령어의 소스 논리 레지스터(들)를 리네이밍하기 위한 요구된 매핑을 제공하고, 명령어의 목적지 논리 레지스터에 대한 새로운 매핑이 생성된다. 이 새로운 매핑은 RAT에서의 이전의 매핑을 축출하고, RAT는 새로운 매핑을 사용하여 업데이트된다.
표 1은 레지스터 리네이밍의 일 예를 예시하고 있다. 표 1에서, 원래의 프로그램 순서에서의 4개의 명령어가 제1 열에 제공된다. 리네이밍된 명령어들은 제2 열에 표시되어 있다. 명령어 리네이밍 이후의 RAT에서의 현재의 엔트리들은 각각의 리네이밍된 명령어 옆에 있다. 마지막 열은 명령어 리네이밍에 의해 축출된 매핑을 제공한다. 간단함을 위해, 3개의 논리 레지스터(LRa, LRb, 및 LRb)만이 고려된다. 물리 레지스터는 PRi에 의해 표기되며 여기서 i는 정수이다. 표 1에서의 첫 번째 엔트리는 첫 번째의 열거된 명령어가 리네이밍되기 이전의 RAT의 현재 상태를 제공한다.
예를 들어, 표 1에서, 첫 번째 명령어 LRa + 2 -> LRa(즉치 2가 논리 레지스터 LRa 내의 값에 가산되고 결과가 논리 레지스터 LRa에 저장됨을 나타냄)는 PR1 + 2 -> PR2로 리네이밍되고, 여기서 물리 레지스터 PR2는 이용가능한 것으로 가정되었다. 이 명령어의 경우, 새로운 매핑 LRa -> PR2가 생성되었고, 이전의 매핑 LRa -> PR1이 RAT로부터 축출되었다.
제1 명령어에 대한 제2 명령어 및 제4 명령어의 진정한 의존성(true dependence), 및 제2 명령어에 대한 제3 명령어의 진정한 의존성이 존재한다는 것을 유의해야 한다. 그렇지만, 레지스터 리네이밍은 제2 명령어와 제4 명령어 간의 출력 의존성은 물론, 제3 명령어와 제4 명령어 간의 반의존성(anti-dependency)을 제거하였으며, 따라서, 실행 순서가 다양한 진정한 의존성들을 따르기만 한다면, 제2, 제3, 및 제 4 명령어들이 비순차로 실행될 수 있다.
Figure pct00001
리네이밍된 명령어들은 명령어 윈도 버퍼에 배치된다. 명령어 윈도 버퍼에서의 엔트리들은 리네이밍된 명령어의 오피코드는 물론, 나중에 설명될 다른 필드들을 포함한다. 이 실시예에 대해, 명령어들의 결과들은 명령어 윈도 버퍼에 저장되지 않고 물리 레지스터 파일에 존재한다(reside).
명령어 윈도 버퍼는 원래의 프로그램 순서로 명령어 회수를 가능하게 해준다. CISC(complex instruction set computer) 아키텍처들의 경우, 복잡한 명령어를 구성하는 모든 마이크로-명령어들이 함께 회수될 때 복잡한 명령어가 회수된다. 명령어 윈도 버퍼는 순환 버퍼로서 작동되며, 여기서 제1 포인터는 회수될 다음 명령어를 가리키고 제2 포인터는 새로 디코드된 명령어에 대한 다음의 이용가능한 엔트리를 가리킨다. 포인터들을 증분시키는 것은 모듈로-N 산술로 행해지고, 여기서 N은 버퍼 내의 이용가능한 엔트리들의 수이다. 명령어가 회수될 때, 제1 포인터가 증분된다. 포인터들이 RISC(reduced instruction set computer) 아키텍처들에서는 각각의 디코드된 명령어에 대해 1만큼 증분되고, CISC 아키텍처들에 대해서는 1 초과만큼 증분될 수 있다.
그의 결과를 메모리 위치에 기입하는 저장 명령어의 경우, 명령어 회수 시에 데이터 캐시가 업데이트된다. 그의 결과를 논리 레지스터에 기입하는 명령어의 경우, 논리 레지스터들로서 전용된 레지스터들이 없기 때문에 회수 시에 기입이 행해질 필요가 없다. 그러한 명령어의 경우, 물리 레지스터 파일은 명령어가 리네이밍되었을 때 목적지 논리 레지스터가 매핑된 물리 레지스터에 회수 명령어(retiring instruction)의 결과를 갖는다.
스케줄러는 명령어들을 실행을 위해 실행 유닛들에 스케줄링한다. 스케줄링 기능은, 예를 들어, Tomasulo의 알고리즘(또는 그의 변형들)을 구현하는 예약 스테이션들에 의해 실현될 수 있다. 실행 유닛들은, 실행될 명령어(또는 마이크로명령어)에 따라, 데이터 캐시 또는 물리 레지스터 파일로부터 데이터를 검색하거나 데이터를 데이터 캐시 또는 물리 레지스터 파일에게 송신할 수 있다.
본 발명의 다른 실시예들에서, 물리 레지스터 파일 및 명령어 윈도 버퍼의 데이터 구조들에 포함된 정보 내용은 상이한 기능 유닛들에 의해 실현될 수 있다. 예를 들어, 결과들이 재정렬 버퍼에 저장되고, 그에 부가하여, 레지스터 파일 내의 레지스터들이 논리 레지스터들로서 전용되도록, 재정렬 버퍼(re-order buffer)는 명령어 윈도 버퍼 및 물리 레지스터 파일을 대체할 수 있다. 이러한 타입의 실시예에 대해, 논리 레지스터에 대한 기입을 명시하는 명령어의 결과는 명령어 회수 시에 논리 레지스터에 기입된다.
이제 2가지 타입의 이동 명령어: 레지스터 대 레지스터(register-to-register) 이동들과 즉치 대 레지스터(immediate-to-register) 이동들을 구별한다. 레지스터 대 레지스터 이동에서, 값은 소스 논리 레지스터인 하나의 레지스터로부터 목적지 논리 레지스터인 다른 레지스터로 이동된다. 즉치 대 레지스터 이동에서, 즉치 값(immediate value)은 논리 레지스터로 이동된다.
본 발명의 실시예들에서, 이동 명령어들은 하나 초과의 논리 레지스터를 동일한 물리 레지스터에 매핑하는 것에 의해 실행된다. 레지스터 대 레지스터 이동 명령어의 실행은 이동 명령어의 목적지 논리 레지스터를 이동 명령어의 소스 논리 레지스터에 의해 매핑된 물리 레지스터에 매핑하는 것에 의해 수행된다.
즉치 대 레지스터 이동 명령어의 실행은 값-매칭 캐시(value-matching cache)에 액세스하는 것에 의해 수행될 수 있다. 값-매칭 캐시에서의 엔트리들은 값들에 의해 인덱싱되고, 여기서 캐시 엔트리는 값을 그 값을 저장하는 물리 레지스터와 연관시킨다. 값 매칭 캐시는 물리 레지스터들의 수보다 적은 수의 엔트리들을 가질 수 있다. 값 매칭 캐시에 히트가 있는 경우, 이동 명령어의 목적지 논리 레지스터는 값-매칭 캐시에 의해 지시된 물리 레지스터에 매핑된다. 히트가 없는 경우, 이동 실행이 종래 기술의 아키텍처들에서와 같이 수행되고, 값-매칭 캐시가 업데이트된다.
물리 레지스터 파일은 그 자체가 값-매칭 캐시의 기능을 서빙할 수 있으며, 따라서 값-매칭 캐시가 필요하지 않다. 이 경우에, 레지스터 파일은 병렬 태그 매칭을 수행하기 위한 추가의 포트(extra port)를 필요로 할 것이고, 여기서 태그는 물리 레지스터에 저장된 값이다.
앞서 논의된 바와 같이, 레지스터 대 레지스터 이동 명령어들 및 즉치 대 레지스터 이동 명령어들은 (후자의 이동 타입에 대한 값-매칭 캐시에 히트가 있기만 하다면) 하나 초과의 논리 레지스터가 동일한 물리 레지스터에 매핑되는 다수의 매핑들을 생성하는 것에 의해 실행된다. 사실상, 그러한 이동 명령어들은, 이들이 실행 유닛들에 의해 더 이상 수행되지 않는다는 의미에서, "제거"된다. 그 대신에 이동 제거들이 리네이밍 스테이지 동안 수행된다. 이러한 명령어들은 명령어 버퍼 윈도에서 회수될 준비가 된 채로 있다. 의존성 그래프들이 붕괴(collapse)되는데, 그 이유는 그러한 이동 명령어들에 의존하는 명령어들이 실제 생성자(real producer)에 직접 의존하여 만들어지기 때문이다(의존성들이 리디렉트됨). 물리 레지스터들에 대한 요구사항의 감소가 또한 있을 수 있고, 레지스터 파일에의 보다 적은 수의 기입들이 있을 수 있다.
이디엄 제거 메커니즘들은 전통적인 비순차 파이프라인을 따라 아래로 명령어 연산들을 전달하지 않으면서 명령어 연산들에 이와 유사하게 영향을 미친다. 이디엄들은, 종종 명시적 명령어들(explicit instructions)과 비교하여 보다 최적화된 방식으로, 특정 효과를 달성하도록 코딩된 범용 명령어들의 인스턴스들이다. 이동 이디엄들은, R1 = ADD R0, #0과 같은, 다른 효과들 없이 소스 레지스터의 내용을 목적지 레지스터에 배치하도록 구성된 임의의 명령어를 포함한다. 제로 이디엄들은 이와 유사하게, R0 = XOR R0, R0와 같은, 레지스터를 제로로 설정하도록 코딩된 범용 명령어들이다. No-op들(NOP들)은 R0 = ADD R0, #0과 같은 명시적 NOP 오피코드와 NOP 이디엄들을 포함한, 아키텍처 상태에 대한 어떠한 효과도 갖지 않도록 정의된 명령어들이다.
본 발명의 실시예들은 마이크로-op 리네이밍/할당 대역폭을 절감하는 것, 성능을 증가시키는 것, 전력 소비를 감소시켜 전력 절감 특징들을 구현하는 것, 및 공정성 향상, 최소 성능 보증, 스루풋, IPC(instructions per clock), 단위 시간당 명령어들, 서비스 품질, 시간 및/또는 메모리 효율을 개선시키는 것, 및 이동 제거들의 커버리지를 보다 많은 명령어 타입들로 확장하는 것에 의해 기존의 이동 및 이디엄 제거 기법들을 개선시키도록 요망될 수 있다.
실시예들에서, 명령어 스트림에 대한 온-더-플라이(on-the-fly) 이동 제거 및 이디엄 제거 동작들의 결과들은, 마이크로-op 캐시(133 또는 312)와 같은, 디코드된 마이크로-op 캐시에 캐싱될 수 있다. 따라서, 파이프라인으로부터 원래의 명령어들을 제거하는 동작들의 반복 및 필요 조건들의 재발견이 회피될 수 있다.
제거된 명령어들은 제거된 명령어들과 동일한 효과를 달성하는 마이크로-op 캐시에 저장된 메타데이터로 대체될 수 있다. 마이크로-op 캐시가 기입될 때, 마이크로-op들이 마이크로-op 캐시로부터 제거되고 따라서 전달된 마이크로-op 스트림을 벗어나 최적화될 수 있도록 이동 제거 또는 이디엄 제거의 결과들이 메타데이터로 변환된다. 온-더-플라이 명령어 제거 메커니즘이 기회들을 식별하기 위한 작업을 이미 수행했기 때문에, 마이크로-op 캐시 빌드(micro-op cache build)가 영향을 받은 마이크로-op들을 스캔하여 제거하도록 수정될 수 있다. 메타데이터는 리네이밍 동작들을 수행하는 데 필요한 정보, 및 그에 더하여 이벤트 경계들의 존재 및 성능 모니터링 카운터들의 효과들과 같은, 관련 아키텍처 정보를 포함한다. 예를 들어, 메타데이터는 몇 개의 명령어가 제거되었는지, 그리고/또는, CISC 아키텍처의 경우, 각각의 명령어에 대해 몇 개의 마이크로-op가 제거되었는지, 그리고/또는 제거된 명령어 이후에 엔드-오브-매크로 명령어(end-of-macro-instruction)가 발생했다는 것을 나타낼 수 있다. 메타데이터는 제거된 마이크로-op들 이전에 및/또는 그 이후에 마이크로-op에 대한 엔트리 내의 필드에 저장될 수 있다.
일 실시예에서, 이동 제거는 제로-확장 및 부호-확장 연산들을 포함하도록 확장될 수 있다. 예를 들어, R0 = MOV.ZE R1은, 단순 이동(simple move)이 아닐지라도, 이동 제거될 수 있다.
일 실시예에서, RAT(3000)는 제로 이디엄들, 부호 확장, 및 제로 확장을 포함하도록 도 30에 도시된 바와 같이 확장될 수 있다. RAT는 다음과 같은 3개의 비트로 확장된다: Z, 세트될 때, 나머지 RAT 엔트리가 무시되고 논리 레지스터는 제로로서 취급됨; SE, 세트될 때, 논리 레지스터의 값은 엔트리에 저장된 물리 레지스터 파일 식별자(PRF ID)의 부호 확장된 버전임; 및 ZE, 세트될 때, 논리 레지스터의 값은 엔트리에 저장된 PRF ID의 제로 확장된 버전임.
이어서, 도 31에 예시된 바와 같이, Z, SE, 및 ZE 비트들은 레지스터 리네이밍 동안 판독되고 레지스터를 판독하는 마이크로-op와 함께 파이프라인을 따라 아래로 전달될 수 있다. 이 비트들은 정확한 결과를 생성하기 위해 ALU(3120)의 동작 이전에 해석된다. 도 31에서, 좌측 소스 경로는 멀티플렉서(3110)에 의한 Z, SE, 및 ZE 비트들의 해석을 포함하도록 개념적으로 증강된다. 이 비트들에 기초하여, 소스는 바이패스 네트워크 또는 물리 레지스터 파일로부터 수정되지 않고 사용되며, 제로로 대체되거나, 부호 확장 이후 사용되거나, 또는 제로 확장 이후에 사용된다.
일부 실시예들의 요약
본 발명의 일 실시예는 복수의 엔트리 위치들을 포함하는 마이크로-연산 캐시를 포함하는 프로세서를 포함할 수 있다. 적어도 하나의 엔트리 위치는 제1 필드 및 제2 필드를 포함할 수 있다. 제1 필드는 제1 마이크로-연산을 저장하기 위한 것일 수 있다. 제2 필드는 명령어들의 스트림으로부터 디코드될 마이크로-연산들의 스트림으로부터의 제2 마이크로-연산의 제거를 지시하기 위한 메타데이터를 저장하기 위한 것일 수 있으며, 여기서 제2 마이크로-연산은 이동 명령어의 디코드로부터 결과하는 것이다.
본 발명의 일 실시예는 복수의 엔트리들을 포함하는 레지스터 에일리어스 테이블을 포함하는 프로세서를 포함할 수 있다. 적어도 하나의 엔트리는 제로 지시자, 부호-확장 지시자, 및 제로-확장 지시자 중 하나를 저장하는 필드를 포함할 수 있다. 제로 지시자는 소스 피연산자가 제로로 대체되어야 함을 지시하기 위한 것이다. 부호-확장 지시자는 부호 확장 이후에 소스 피연산자가 사용되어야 함을 지시하기 위한 것이다. 제로-확장 지시자는 제로 확장 이후에 소스 피연산자가 사용되어야 함을 지시하기 위한 것이다.
가상 레지스터 리네이밍
프로세서 코어는 실시예들에 따른 가상 레지스터 리네이밍 특징을 지원할 수 있다. 일부 실시예들에서, 256-비트 피연산자 ymmi는 128-비트 레지스터 파일에 저장될 수 있다. 256-비트 피연산자의 상반부는 128-비트 피연산자 ymmihigh로서 128-비트 레지스터 파일에 저장될 수 있다. 256-비트 피연산자의 하반부는 256-비트 피연산자의 하반부를 가상적으로 리네이밍함으로써 128-비트 피연산자 xmmi(ymmilow)로서 128-비트 레지스터 파일에 저장될 수 있다. 일부 실시예들에서, 이 특징은 유리하게도 명령어의 반부들을 리네이밍하는 것에 의해 보다 작은 물리 레지스터에서 보다 넓은 ISA를 구현할 수 있게 해준다. 일부 실시예들에서, 보다 작은 물리 레지스터들의 사용은, 예를 들어, 명령어들의 부분들이 개별적으로 액세스될 수 있기 때문에, 보다 많은 유연성, 전력 절감, 및 보다 나은 성능을 제공함으로써 컴퓨터 시스템을 개선시킨다. 일부 실시예들에서, 다른 크기들의 명령어들 및 레지스터들이 사용될 수 있다(예컨대, 256-비트 레지스터들을 갖는 512-비트 피연산자들). 일부 실시예들에서, 피연산자들은 보다 작은 조각들(pieces), 예컨대, 3분의 1, 4분의 1, 8분의 1, 16분의 1로 나누어질 수 있다. 예를 들어, 가상 레지스터 리네이밍 특징은, 예를 들어, 512-비트 피연산자를 64-비트 레지스터 파일에 저장될 8개의 부분들로서 유지하는 데 사용될 수 있다.
도 32는 실시예들에 따른 프로세서에 포함될 수 있는 가상 레지스터 리네이밍 특징을 예시하는 블록 다이어그램이다. 가상 레지스터 리네이밍 특징은 256-비트 피연산자 ymmi와 같은 피연산자(3201)를 포함할 수 있다. 가상 레지스터 리네이밍 특징은 128-비트 레지스터 파일(3201)을 추가로 포함할 수 있다. 256-비트 피연산자 ymmi(3201)는 128-비트 레지스터 파일(3202)에 저장될 수 있다. 256-비트 피연산자(3201)의 상반부는 128-비트 피연산자 ymmihigh로서 128-비트 레지스터 파일(3202)에 저장될 수 있다. 256-비트 피연산자(3201)의 하반부는 256-비트 피연산자의 하반부를 가상적으로 리네이밍함으로써 128-비트 피연산자 xmmi(ymmilow)로서 128-비트 레지스터 파일(3202)에 저장될 수 있다.
도 33은 실시예들에 따른 프로세서에 의해 수행될 수 있는 가상 레지스터 리네이밍 특징을 위한 방법을 예시하는 흐름 다이어그램이다. 이 방법은 3301에 도시된 바와 같이 피연산자의 하반부를 레지스터 파일에 저장하는 단계를 포함한다. 이 방법은 3302에 도시된 바와 같이 피연산자의 상반부를 가상적으로 리네이밍하는 단계를 추가로 포함한다. 이 방법은 피연산자의 가상적으로 리네이밍된 상반부를 레지스터 파일에 저장하는 단계를 추가로 포함한다. 추가적인 실시예들에서, 다른 수정들이 가능하다. 예를 들어, 상반부를 가상적으로 리네이밍하는 것 대신에 또는 그에 부가하여 피연산자의 하반부가 가상적으로 리네이밍될 수 있다. 부가적으로, 연산들이 상이한 순서들로 수행될 수 있다. 예를 들어, 비-가상적으로(non-virtually) 리네이밍된 반부의 저장이 가상적으로 리네이밍된 반부의 가상 리네이밍 및/또는 저장 이전에 또는 그 이후에 수행될 수 있다. 부가적으로, 가상적으로 리네이밍된 반부는 가상적으로 리네이밍되고 이어서 저장될 수 있거나 그 반대일 있다.
일부 실시예들의 요약
일 실시예는 피연산자의 전반부(first half)를 레지스터 파일에 저장하고; 피연산자의 후반부(second half)를 가상적으로 리네이밍하며; 피연산자의 가상적으로 리네이밍된 후반부를 레지스터 파일에 저장하도록 구성된 프로세서를 포함할 수 있다. 일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 피연산자는 256-비트 피연산자일 수 있다. 레지스터 파일은 128-비트 레지스터 파일일 수 있다.
일 실시예는 피연산자의 전반부를 레지스터 파일에 저장하는 단계; 피연산자의 후반부를 가상적으로 리네이밍하는 단계; 및 피연산자의 가상적으로 리네이밍된 후반부를 레지스터 파일에 저장하는 단계를 포함하는 방법을 포함할 수 있다. 일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 피연산자는 256-비트 피연산자일 수 있다. 레지스터 파일은 128-비트 레지스터 파일일 수 있다.
일 실시예는 프로세서에 의해 실행될 때 프로세서로 하여금 방법을 수행하게 하는 적어도 하나의 명령어를 저장하는 비일시적 머신 판독가능 매체를 포함할 수 있으며, 이 방법은 피연산자의 전반부를 레지스터 파일에 저장하는 단계; 피연산자의 후반부를 가상적으로 리네이밍하는 단계; 및 피연산자의 가상적으로 리네이밍된 후반부를 레지스터 파일에 저장하는 단계를 포함한다. 일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 피연산자는 256-비트 피연산자일 수 있다. 레지스터 파일은 128-비트 레지스터 파일일 수 있다.
일 실시예는 메모리 및 프로세서를 포함하는 시스템을 포함할 수 있으며, 프로세서는 피연산자의 전반부를 레지스터 파일에 저장하고; 피연산자의 후반부를 가상적으로 리네이밍하며; 피연산자의 가상적으로 리네이밍된 후반부를 레지스터 파일에 저장하도록 구성된다. 일부 실시예들에서, 이하의 것 중 하나 이상이 적용된다. 피연산자는 256-비트 피연산자일 수 있다. 레지스터 파일은 128-비트 레지스터 파일일 수 있다.
FMA 분열 및 융합
프로세서 코어는 본 발명의 실시예들에 따른 승산-가산 명령어들 및 연산들의 분열 및 융합을 지원할 수 있다. 다양한 실시예들에서, 프로세서 코어는 FP 값들에 대해 연산하기 위한 임의의 하나 이상의 가산, 승산, 융합된 승산-가산(FMAD), 및/또는 융합된 승산-누산(fused multiply-accumulate)(FMAC) 명령어들(여기서, FMAD 및/또는 FMAC는 FMA라고 지칭될 수 있음)을 갖는 명령어 세트를 지원할 수 있다. 그러한 코어는 이러한 명령어들에 응답하여 FP 가산, 승산, 및/또는 FMA 연산들을 수행하기 위한 가산기 회로, 승산기 회로, 및/또는 FMA 회로 중 임의의 하나 이상을 포함할 수 있다. 정수 값들(예컨대, FMAC) 및 FP 값들(예컨대, FMAD)에 대해 연산하기 위해 별개의 명령어들 및/또는 회로부가 제공될 수 있고, 실시예들이 한쪽 또는 다른 쪽(정수 또는 FP)을 참조하여 기술될 수 있지만; 본 발명의 다양한 실시예들은 어느 하나 또는 둘 다를 포함할 수 있다.
본 발명의 실시예들은 명령어 발행/실행 파이프라인에서의 다양한 스테이지들 사이에서 그리고/또는 그 내에서 FMA 명령어들/연산들을 가산 및 승산 명령어들/연산들의 쌍들로 변환하는 것(분열) 및/또는 가산 및 승산 명령어들/연산들의 쌍들을 FMA 명령어들/연산들로 변환하는 것(융합)을 제공한다. 이 특징은 일반적으로 FMA 분열/융합 또는 동적 FMA 분열/융합이라고 지칭될 수 있다.
FMA 분열/융합을 포함하는 본 발명의 실시예들은: 가산기 회로 및 승산기 회로를 갖지만 FMA 회로를 갖지 않는 코어에서 FMA 명령어들을 실행하고 그리고/또는 FMA 연산들을 수행할 수 있는 능력을 제공하는 것; 하나 이상의 코어 리소스를 통해 스루풋을 증가시키기 위해 FMA 연산을 사용하여 승산 명령어 및 가산 명령어를 실행할 수 있는 능력을 제공하는 것; 루프에서의 임계 경로(critical path)를 감소시키고 사이클당 명령어들을 증가시키기 위해 FMA 명령어들 또는 연산들을 승산 연산들 및 가산 연산들로 동적으로 분할할 수 있는 능력을 제공하는 것; 및 성능, 복잡도, 및 전력의 원하는 조합(적용가능한 기준들 중 단지 몇 개를 열거하면, 예컨대, 성능을 증가시키는 것, 전력 소비를 감소시켜 전력 절감 특징들을 구현하는 것, 및 공정성 향상, 최소 성능 보증, 스루풋, IPC(instructions per clock), 단위 시간당 명령어들, 서비스 품질, 시간 및/또는 메모리 효율을 증가시키는 것)에 대해 FMA 가능 파이프라인(FMA-capable pipeline)을, 스테이지별로(on a stage-by-stage basis), 최적화할 가능성을 제공하는 것을 포함한, 많은 이유들로 요망될 수 있다.
도 34는 본 발명의 실시예들에 따른 FMA 분열/융합 특징을 지원하는 프로세서 코어에서 구현될 수 있는 발행/실행 파이프라인(3400)을 예시하는 블록 다이어그램이다. 도 34에서, 파이프라인(3400)은 명령어 페치 스테이지(3401), 명령어 디코드 스테이지(3402), 리네임/할당 스테이지(3403), 스케줄 스테이지(3404), 실행 스테이지(3405), 및 회수/커밋 스테이지(3406)를 포함한다. 파이프라인(3400)은 예시 목적들을 위해 제공되며, 본 발명의 다양한 실시예들에서 각종의 방식들로 구현되고 그리고/또는 수정될 수 있다. 따라서, 파이프라인(3400)에 대한 이하의 설명은 본 명세서에서 설명된 다른 도면들에 도시된 다양한 블록들을 참조할 수 있다.
예를 들어, 명령어 페치 스테이지(3401)는 페치될 명령어 또는 명령어의 메모리 위치를 (예컨대, 다음 PC 레지스터(410)를 사용하여) 식별하기 위해 그리고 i-캐시(예컨대, 134, 313, 470, 913) 또는 다른 메모리 위치로부터 명령어를 페치하기 위해 명령어 페치 회로(예컨대, 138, 400)를 사용하는 것을 포함할 수 있고; 명령어 디코드 스테이지(3402)는 명령어를 (예컨대, 디코더(530)를 사용하여) 디코드하기 위해 명령어 디코드 회로(예컨대, 140, 314, 500, 914)를 사용하는 것을 포함할 수 있고; 리네임/할당 스테이지(3403)는 레지스터 피연산자들을 리네이밍하기 위해 그리고/또는 레지스터 리네이밍을 위한 저장 위치들 및/또는 태그들을 할당하기 위해 리네임/할당기 회로(예컨대, 152, 331, 931)를 사용하는 것을 포함할 수 있으며; 스케줄 스테이지(3404)는 실행을 위한 명령어와 연관된 (예컨대, 디코더(140, 314, 530, 또는 614) 또는 마이크로-op 캐시(133, 312, 540, 또는 912)로부터의) 연산들 및/또는 마이크로-op들을 스케줄링하기 위해 스케줄러 회로(예컨대, 156, 332, 932)를 사용하는 것을 포함할 수 있고; 실행 스테이지(3405)는 명령어와 연관된 (예컨대, 디코더(140, 314, 530, 또는 614) 또는 마이크로-op 캐시(133, 312, 540, 또는 912)로부터의) 연산들 및/또는 마이크로-op들을 실행하기 위해 실행 회로(예컨대, 162, 334, 335, 770, 780, 934, 935)를 사용하는 것을 포함할 수 있으며; 회수/커밋 스테이지(3406)는 명령어를 회수하고 그리고/또는 그의 결과를 물리 레지스터 파일(예컨대, 158, 333, 750, 933) 또는 메모리에 커밋하기 위해 회수 회로(예컨대, 154, 730, 960)를 사용하는 것을 포함할 수 있다. 도 34에 도시된 각각의 스테이지는 다양한 실시예들에서 하나 이상의 스테이지 및/또는 클록 사이클을 나타낼 수 있다.
도 34는, 각각이 파이프라인(3400)을 통한 경로의 일 실시예를 나타내는, 융합된 경로(3410) 및 분할된 경로(3420)를 또한 도시하고 있다. 융합된 경로(3410)는, 이하의 예시적인 실시예들을 사용하여 설명된 바와 같이, FMA 명령어, 연산, 및/또는 마이크로-op를 융합된 명령어, 연산, 및/또는 마이크로-op로서 프로세싱하고, 수행하며, 그리고/또는 실행하기 위한 회로들, 구조들, 및/또는 하드웨어를 포함할 수 있다. 분할된 경로(3420)는, 이하의 예시적인 실시예들을 사용하여 설명된 바와 같이, 승산 및 가산 명령어, 연산, 및/또는 마이크로-op를 분리된 명령어들, 연산들, 및/또는 마이크로-op들로서 프로세싱하고, 수행하며, 그리고/또는 실행하기 위한 회로들, 구조들, 및/또는 하드웨어를 포함할 수 있다. 게다가, 분할된 경로(3420)는 FMA 명령어, 연산, 및/또는 마이크로-op를 승산 및 가산 명령어, 연산, 및/또는 마이크로-op로서 프로세싱하고, 수행하며, 그리고/또는 실행하기 위한 회로들, 구조들, 및/또는 하드웨어를 포함할 수 있고; 융합된 경로(3410)는 승산 및 가산 명령어, 연산, 및/또는 마이크로-op를 융합된 명령어, 연산, 및/또는 마이크로-op로서 프로세싱하고, 수행하며, 그리고/또는 실행하기 위한 회로들, 구조들, 및/또는 하드웨어를 포함할 수 있다.
따라서, 도 34는 융합된 및/또는 분리된 승산 및 가산 명령어들, 연산들, 및 마이크로-연산들을 프로세싱하고, 수행하며, 그리고/또는 실행하는 데 사용될 수 있는 코어 리소스들의 세트를 개념적으로 예시하고 있다. 다양한 실시예들은, 이하에서 추가로 설명될 것인 바와 같이, 다양한 능력들을 지원하기 위해 이러한 리소스들의 다양한 서브세트들을 포함할 수 있다. 또한, 구현들은 본 발명의 다양한 실시예들을 실시하도록 제공되고 그리고/또는 구성될 수 있는 도 34에 도시되지 않은 다양한 부가의 리소스들을 포함할 수 있다.
도 34는 융합된 경로(3410) 및/또는 분할된 경로(3420)를 통한 그리고/또는 이들 사이의 명령어들, 연산들, 마이크로-op들, 피연산자들, 값들, 및/또는 다른 데이터의 흐름을 지시(direct)하는 제어 신호들을 생성하기 위한 하나 이상의 제어 회로 및/또는 소프트웨어 프로그래밍가능 또는 하드웨어 구성 레지스터를 포함하는, 프로그래밍가능, 구성가능, 또는 하드와이어드 제어기 또는 제어 구조를 나타낼 수 있는, FMA 분열/융합 제어기(3430)를 또한 도시하고 있다. 이러한 제어 신호들은 융합된 경로(3410) 및 분할된 경로(3420)에 있는 리소스들의 조합을 포함하는 파이프라인(3400)을 통한 하나 이상의 경로를 제공할 수 있다. 이러한 제어 신호들은 FMA 명령어, 연산, 및/또는 마이크로-op로 하여금 제1 조건에 응답하여 융합된 명령어, 연산, 및/또는 마이크로-op로서 그리고 제2 조건에 응답하여 분리된 승산 및 가산 명령어들, 연산들, 및/또는 마이크로-op들로서 프로세싱되고, 수행되며, 그리고/또는 실행되게 하는 것에 의해 그리고/또는 분리된 승산 및 가산 명령어들, 연산들, 및/또는 마이크로-op들로 하여금 제3 조건에 응답하여 융합된 명령어, 연산, 및/또는 마이크로-op로서 그리고 제4 조건에 응답하여 분리된 승산 및 가산 명령어들, 연산들, 및/또는 마이크로-op들로서 프로세싱되고, 수행되며, 그리고/또는 실행되게 하는 것에 의해 동적 FMA 분열/융합을 제공할 수 있다.
예를 들어, FMA 명령어는 융합된 경로(3410)에 있는 하드웨어에 의해 페치될 수 있고, 제어기(3430)는 명령어를 2개의 분리된 마이크로-op인 승산 마이크로-op와 가산 마이크로-op로 디코드하기 위해 명령어를 분할된 경로(3420)에 있는 하드웨어로 라우팅하기 위한 하나 이상의 제어 신호를 생성할 수 있다. 도 34에서 독립적인 블록으로서 도시되어 있지만, 다양한 실시예들에서, 제어기(3430)는 프로세서 코어에서의 다른 제어 구조 내에 통합되거나 포함될 수 있거나 또는 완전히 생략될 수 있다(예컨대, 코어가 하나의 가능한 경로만을 제공하는 일 실시예에서, 그의 예들은 이하에 기술됨).
도 34에서, 융합된 경로(3410)는 페처(fetcher)(3411), 디코더(3412), 리네이머(renamer)(3413), 스케줄러(3414), 융합된 승산-가산기(3415), 및 재정렬 버퍼/회수 큐(ROB/RQ)(3416)를 포함하고; 분할된 경로(3420)는 페처(3421), 디코더(3422), 리네이머(3423), 스케줄러(3424), 승산기(3425A) 및 가산기(3425B), 및 재정렬 버퍼/회수 큐(ROB/RQ)(3426)를 포함한다.
페처(3411)는 FMA 명령어(예컨대, VFMADD132PS, VFMADD213PS, VFMADD231PS, VFMADD132PD, VFMADD213PD, VFMADD231PD, VFMADD132SS, VFMADD213SS, VFMADD231 SS, VFMADD132SD, VFMADD213SD, VFMADD231SD, VFMSUB132PS, VFMSUB213PS, VFMSUB231PS, VFMSUB132PD, VFMSUB213PD, VFMSUB231PD, VFMSUB132SS, VFMSUB213SS, VFMSUB231SS, VFMSUB132SD, VFMSUB213SD, VFMSUB231SD, VFNMADD132PS, VF MADD213PS, VFNMADD231PS, VFNMADD132PD, VFNMADD213PD, VFNMADD231PD, VFNMADD132SS, VFNMADD213SS, VFNMADD231SS, VFNMADD132SD, VFNMADD213SD, VFNMADD231SD, VFNMSUB132PS, VFNMSUB213PS, VFNMSUB231PS, VFNMSUB132PD, VFNMSUB213PD, VFNMSUB231PD, VFNMSUB132SS, VFNMSUB213SS, VFNMSUB231SS, VFNMSUB132SD, VFNMSUB213SD, VFNMSUB231SD, VFMADDSUB132PS, VFMADDSUB213PS, VFMADDSUB231PS, VFMADDSUB132PD, VFMADDSUB213PD, VFMADDSUB231PD, VFMSUBADD132PS, VFMSUBADD213PS, VFMSUBADD231PS, VFMSUBADD132PD, VFMSUBADD213PD, 또는 VFMSUBADD231PD와 같은 AVX(이하에서 정의됨) 명령어)를 페치하기 위한 회로부 및/또는 구조들을 포함할 수 있다.
페처(3411)에 의해 페치된 FMA 명령어는 3개의 피연산자를 가질 수 있다. 예를 들어, VFMADD231PS 명령어는 제1 피연산자(xmm1 또는 ymm1), 제2 피연산자(xmm2 또는 ymm2), 및 제3 피연산자(xmm3 또는 ymm3)를 가질 수 있으며, 여기서 이러한 피연산자들에 의해 명시될 수 있는 xmm 및 ymm 레지스터들은 이하에서 설명된다. 이러한 레지스터들은 스칼라 또는 패킹된 값들을 보유(hold)할 수 있고, 일 실시예의 편리한 설명을 위해, 문자 'd'는 xmm1 피연산자에 의해 명시된 소스/목적지 레지스터 또는 레지스터의 일 부분 및/또는 이 레지스터 또는 이 레지스터의 일 부분에 저장된 또는 저장될 값을 지칭하는 데 사용될 수 있고; 문자 'a'는 xmm2 피연산자에 의해 명시된 소스 레지스터 또는 레지스터의 일 부분 및/또는 이 레지스터 또는 이 레지스터의 일 부분에 저장된 또는 저장될 값을 지칭하는 데 사용될 수 있으며; 문자 'b'는 xmm3 피연산자에 의해 명시된 소스 레지스터 또는 레지스터의 일 부분 및/또는 이 레지스터 또는 이 레지스터의 일 부분에 저장된 또는 저장될 값을 지칭하는 데 사용될 수 있다. 따라서, VFMADD231PS 명령어에 응답하여 수행될 연산의 개념적 표현은 d=a*b+d이며, 여기서 a, b, 및 d는 피연산자들이라고도 지칭될 수 있다. 게다가, 이 설명이 피연산자들을 레지스터라고 지칭하지만, 실시예들은 임의의 또는 모든 피연산자들에 대해 레지스터들 대신에 메모리 위치들을 사용할 수 있다.
페처(3421)는, 각각이 2개의 피연산자를 가지는, 승산 명령어(예컨대, MULPS, MULPD, MULSS, 또는 MULSD와 같은 SSE(streaming single-instruction-multiple-data extension) 명령어) 및 가산 명령어(예컨대, ADDPS, ADDPD, ADDSS, 또는 ADDSD와 같은 SSE 명령어)를 페치하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, MULPS 명령어는 제1 피연산자(xmm1) 및 제2 피연산자(xmm2)를 가질 수 있고, ADDPS 명령어는 제1 피연산자(xmm1) 및 제2 피연산자(xmm2)를 가질 수 있으며, 여기서, 일반적으로, MULPS xmm1, MULPS xmm2, ADDPS xmm1, 및 ADDPS xmm2 피연산자들 각각은 상이한 레지스터들일 수 있다. 그렇지만, 본 발명의 일 실시예에서, 페처(3421)는 ADDPS 명령어가 MULPS 명령어에 의존한다고(즉, MULPS 결과가 ADDPS에 대한 입력이라고) 결정될 때 MULPS 명령어를 ADDPS 명령어와 페어링할 수 있다. 예를 들어, 'a'를 MULPS xmm1 피연산자로서 그리고 'b'를 MULPS xmm2 피연산자로서 갖는 경우, 대응하는 승산 연산은 a=a*b이고, a가 다음에 ADDPS xmm2 피연산자로서 사용되고, 'd'을 ADDPS xmm1 피연산자로서 갖는 경우, 대응하는 가산 연산은 d=d+a이며, 페처(3421)는 MULPS 명령어와 ADDPS 명령어를 페어링할 수 있다. 실시예들에서, 페어링하는 것 및/또는 페어링을 위한 조건이 충족되는지를 결정하는 것은 제어기(3430)로부터의 제어 신호에 응답하여 수행될 수 있다.
페처(3411)는, 화살표(3432A)에 의해 나타낸 바와 같이, 디코더(3412)에 그리고/또는, 화살표(3432B)에 의해 나타낸 바와 같이, 디코더(3422)에 커플링되거나 접속될 수 있다. 페처(3421)는, 화살표(3432C)로 나타낸 바와 같이, 디코더(3412)에 그리고/또는, 화살표(3432D)로 나타낸 바와 같이, 디코더(3422)에 커플링되거나 접속될 수 있다. 커플링 또는 접속 및/또는 디코더 동작은 다양한 실시예들에서 정적(예컨대, 하드와이어드) 또는 동적(예컨대, 3430으로부터의 제어 신호들에 의존함)일 수 있다.
디코더(3412)는 페처(3411)로부터 수신되는, FMA 명령어를 3개의 피연산자(예컨대, d, a 및 b)를 갖는 FMA 마이크로-op로 디코드하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 그 대신에 또는 부가적으로, 디코더(3412)는 페처(3421)로부터 수신되는, 페어링된 승산 및 가산 명령어를 3개의 피연산자(예컨대, d, a 및 b)를 갖는 FMA 마이크로-op로 디코드하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다.
디코더(3422)는 페처(3411)로부터 수신되는, FMA 명령어를 2개의 피연산자를 갖는 승산 마이크로-op 및 2개의 피연산자를 갖는 가산 마이크로-op로 디코드하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 그 대신에 또는 부가적으로, 디코더(3422)는 페처(3421)로부터의 페어링된 승산 및 가산 명령어를 2개의 피연산자를 갖는 승산 마이크로-op 및 2개의 피연산자를 갖는 가산 마이크로-op로 디코드하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 승산 마이크로-op는 t=a*b로서 표현되고, 가산 마이크로-op는 d=d+t로서 표현될 수 있으며, 여기서 새로운 피연산자 't'는 승산 연산의 목적지 및 가산 연산에 대한 소스로서 역할하도록 도입될 수 있다.
디코더(3412)는, 화살표(3433A)에 의해 나타낸 바와 같이, 리네이머(3413)에 그리고/또는, 화살표(3433B)에 의해 나타낸 바와 같이, 리네이머(3423)에 커플링되거나 접속될 수 있다. 디코더(3422)는, 화살표(3433C)에 의해 나타낸 바와 같이, 리네이머(3413)에 그리고/또는, 화살표(3433D)에 의해 나타낸 바와 같이, 리네이머(3423)에 커플링되거나 접속될 수 있다. 커플링 또는 접속 및/또는 리네이머 동작은 다양한 실시예들에서 정적(예컨대, 하드와이어드) 또는 동적(예컨대, 3430으로부터의 제어 신호들에 의존함)일 수 있다.
리네이머들(3413 및/또는 3423)은 레지스터 피연산자들을 리네이밍하기 위한 그리고/또는 레지스터 리네이밍을 위해 저장 위치들 및/또는 태그들을 할당하기 위한, 예를 들어, 비순차 프로세싱을 수용(accommodate)하기 위한, 재정렬 버퍼와 같은, 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 실시예들에서, (예컨대, a, b, t 및/또는 d에 대한) 레지스터 충돌들을 제거하기 위해, 리네이머(3413)는 FMA 연산에 대한 피연산자들을 (예컨대, a', b', 및/또는 d'으로서) 리네이밍할 수 있고; 그리고/또는 리네이머(3423)는 승산 연산에 대한 피연산자들을 (예컨대, a' 및/또는 b'으로서) 그리고 가산 연산에 대한 피연산자들을 (예컨대, t' 및/또는 d'으로서) 리네이밍할 수 있다.
리네이머(3413)는, 화살표(3434A)에 의해 나타낸 바와 같이, 스케줄러(3414)에 그리고/또는, 화살표(3434B)에 의해 나타낸 바와 같이, 스케줄러(3424)에 커플링되거나 접속될 수 있다. 리네이머(3423)는, 화살표(3434C)에 의해 나타낸 바와 같이, 스케줄러(3414)에 그리고/또는, 화살표(3434D)에 의해 나타낸 바와 같이, 스케줄러(3424)에 커플링되거나 접속될 수 있다. 커플링 또는 접속 및/또는 스케줄러 동작은 다양한 실시예들에서 정적(예컨대, 하드와이어링됨) 또는 동적(예컨대, 3430으로부터의 제어 신호들에 의존함)일 수 있다.
스케줄러들(3414 및/또는 3424)은 실행을 위한 연산들 및/또는 마이크로-op들을 스케줄링하기 위해, 예약 스테이션과 같은, 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 실시예들에서, 스케줄러(3414)는, FP 실행 회로에 대한 예약 스테이션에서, 피연산자들 a, b, 및 d를 사용하여 실행될 FMA 연산을 스케줄링할 수 있고, 그리고/또는 스케줄러(3424)는, FP 실행 회로에 대한 예약 스테이션에서, 피연산자들 a 및 b를 사용하여 실행될 승산 연산 및 피연산자들 t 및 d를 사용하여 실행될 가산 연산을 스케줄링할 수 있다.
스케줄러(3414)는, 화살표(3435A)에 의해 나타낸 바와 같이, 융합된 승산/가산기(3415)에, 그리고/또는, 화살표(3435B)에 의해 나타낸 바와 같이, 승산기(3425A) 또는 승산기(3425A) 및 가산기(3425B) 둘 다에 커플링되거나 접속될 수 있다. 스케줄러(3424)는, 화살표(3434C)에 의해 나타낸 바와 같이, 융합된 승산/가산기(3415)에, 그리고/또는, 화살표(3434D)에 의해 나타낸 바와 같이, 승산기(3425A) 또는 승산기(3425A) 및 가산기(3425B) 둘 다에 커플링되거나 접속될 수 있다. 커플링 또는 접속 및/또는 스케줄러 동작은 다양한 실시예들에서 정적(예컨대, 하드와이어드) 또는 동적(예컨대, 3430으로부터의 제어 신호들에 의존함)일 수 있다.
융합된 승산/가산기(3415), 승산기(3425A), 및 가산기(3425B)는, 제각기, 융합된-승산-가산 연산, 승산 연산, 및 가산 연산을 수행하기 위한 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 일 실시예에서, 승산기(3425A)는 승산 연산에 대한 2개의 입력(예컨대, a 및 b)을 수신하기 위해 예약 스테이션에 커플링될 수 있고 가산 연산에 대한 2개의 입력(예컨대, t 및 d) 중 하나로서 사용될 그의 출력(예컨대, t)을 제공하기 위해 가산기(3425B)에 커플링될 수 있다. 이 실시예에서, 라운드되지 않은(unrounded) 승산 결과를 가산기에게 송신하는 것에 의해 (예컨대, IEEE 표준 754에 따른) 전용의 융합된 승산-가산기의 정밀도가 획득될 수 있다. 다른 실시예에서, 승산기(3425A)는 출력(예컨대, t)을 생성하는 승산 연산에 대한 2개의 입력(예컨대, a 및 b)을 수신하기 위해 예약 스테이션에 커플링될 수 있고, 가산기(3425A)는 가산 연산에 대한 2개의 입력(예컨대, t 및 d)을 수신하기 위해 예약 스테이션에 커플링될 수 있다. 이 실시예에서, 전용의 융합된 승산-가산기의 정밀도는 중간 결과(예컨대, t)에 대한 내부 저장 위치들의 폭을 증가시키는 것에 의해 또는 특별 핸들링을 제공하기 위해 마이크로코드 어시스트(assist) 또는 트랩(trap)을 사용하는 것에 의해 획득될 수 있다.
융합된 승산-가산기(3415)는, 화살표(3436A)에 의해 나타낸 바와 같이, ROB/RQ(3416)에 그리고/또는, 화살표(3436B)에 의해 나타낸 바와 같이, ROB/RQ(3426)에 커플링되거나 접속될 수 있다. 가산기(3425B)는, 화살표(3436C)에 의해 나타낸 바와 같이, ROB/RQ(3416)에 커플링되거나 접속될 수 있고, 그리고/또는 가산기(3425B) 또는 승산기(3425A) 및 가산기(3425B) 둘 다는, 화살표(3436D)에 의해 나타낸 바와 같이, ROB/RQ(3426)에 커플링되거나 접속될 수 있다. 커플링 또는 접속 및/또는 스케줄러 동작은 다양한 실시예들에서 정적(예컨대, 하드와이어드) 또는 동적(예컨대, 3430으로부터의 제어 신호들에 의존함)일 수 있다.
ROB/RQ(3416) 및/또는 ROB/RQ(3426)는 명령어들을 회수하고 및/또는 결과들을 커밋하기 위한, 재정렬 버퍼 및/또는 회수 큐와 같은, 회로부, 구조들, 및/또는 하드웨어를 포함할 수 있다. 일 실시예에서, ROB/RQ(3416)는 FMA 명령어를 회수하고 그의 결과(예컨대, xmm1)를 커밋할 수 있다. 일 실시예에서, ROB/RQ(3426)는 승산 명령어 및 가산 명령어를 회수하고 그들의 결과들(예컨대, 제각기, MULPS xmm1, ADDPS xmm1)을 커밋할 수 있다. 일 실시예에서, ROB/RQ(3416)는, 분리된 승산 연산의 결과가 요망되지(예컨대, 명령어 세트 아키텍처에 따라 예상되지) 않는 한, 분리된 승산 및 분리된 가산 명령어의 융합에 의해 생성된 FMA 연산의 결과를 커밋할 수 있다. 일 실시예에서, ROB/RQ(3426)는, FMA 명령어의 결과로서, FMA 명령어의 분열에 의해 생성된 가산 연산의 결과를 커밋할 수 있다. 본 발명의 실시예들에 따른 프로세서 코어에서, 가산 명령어의 결과는 대응하는 FMA 명령어의 결과와 동일할 것이다.
도 34에 예시된 바와 같이, 실시예들은 발행/실행 파이프라인의 다양한 스테이지들에서 FMA 분열 또는 융합을 제공할 수 있다. 일 실시예에서, 디코드 스테이지(3402)에서의 분열은 전용의 융합된 승산-가산기 없이 코어에서 실행될 융합된 승산-가산 명령어들을 제공할 수 있다. 일 실시예에서, 디코드 스테이지(3402), 리네임/할당 스테이지(3403), 스케줄 스테이지(3404), 실행 스테이지(3405), 및/또는 회수 스테이지(3406)에서의 융합은 하드웨어 리소스들을 통한 보다 큰 스루풋(2개의 명령어/연산/마이크로-op 대신에 하나의 명령어/연산/마이크로-op)을 제공할 수 있다. 일 실시예에서, 리네임/할당 스테이지(3403)에서의 분열은 피연산자들의 수를 3 대신에 2로 제한함으로써 리네이밍 하드웨어에서의 감소된 복잡도를 제공할 수 있다. 일 실시예에서, 리네임/할당 스테이지(3403) 및/또는 스케줄 스테이지(3404)에서의 융합은 보다 깊은 비순차 실행 윈도들 및/또는 보다 큰 명령어 레벨 병렬성(instruction level parallelism)의 발견을 가능하게 하기 위해 리네이밍, 재정렬, 및/또는 스케줄링 스토리지에서의 보다 적은 수의 엔트리들의 사용을 제공할 수 있다. 일 실시예에서, 스케줄 스테이지(3404)에서의 분열은 비순차 웨이크 업 소스들(out-of-order wake-up sources)의 수를 엔트리당 3개 대신에 2개로 제한하는 것에 의해 감소된 하드웨어 복잡도를 제공할 수 있다. 일 실시예에서, 스케줄 스테이지(3404) 및/또는 실행 스테이지(3405)에서의 분열은 FMA 연산의 분리된 부분들이 임계 경로를 2개의 부분들의 합산 대신에 가장 느린 부분의 임계 경로로 제한하기 위해 상이한 시간들에서 실행될 수 있게 해주는 것에 의해 감소된 레이턴시를 제공할 수 있다. 일 실시예에서, 실행 스테이지(3405)에서의 융합은 전용의 융합된 승산-가산기를 사용하는 것에 의해 증가된 성능, 증가된 정밀도, 및/또는 감소된 전력을 제공할 수 있다.
도 35는 본 발명의 실시예들에 따른 프로세서에 의해 수행될 수 있는 FMA 분열/융합을 위한 방법을 예시하는 흐름 다이어그램이다. 도 35의 방법(3500)의 블록(3510)에서, 명령어 페치 회로(예컨대, 138, 400)는 i-캐시(예컨대, 134, 313, 470, 913) 또는 다른 메모리 위치로부터 명령어를 페치할 수 있다. 예를 들어, 명령어는 제1 피연산자('d'), 제2 피연산자('a'), 및 제3 피연산자('b')를 갖는 VFMADD231PS와 같은 FMA 명령어의 인스턴스일 수 있으며, 프로세서는 이에 대해 FMA 연산(예컨대, d=a*b+d)을 수행하는 것으로 응답해야 한다.
블록(3520)에서, FMA 명령어들의 분열을 수행하도록 하드와이어링되거나, 구성되거나, 또는 프로그래밍된 명령어 디코드 회로 또는 디코더(예컨대, 140, 314, 500, 914)는 명령어를 다수의 분리된 마이크로-op들인 승산 마이크로-op와 가산 마이크로-op를 디코드할 수 있다. 디코더는 FMA 명령어로부터 그리고/또는 다른 마이크로-op로부터 특정의 피연산자들을 선택하고, 이들 중 하나 이상을 분리된 마이크로-op들 중 하나 이상에 배정하며, 그리고/또는 분리된 마이크로-op들 중 하나 이상에 대한 새로운 피연산자들을 생성할 수 있다. 예를 들어, 디코더는 승산 마이크로-op에 대한 소스 피연산자들로서 FMA 명령어의 'a' 및 'b' 피연산자들을 선택하고, 승산 마이크로-op에 대한 목적지 피연산자로서 't' 피연산자를 생성할 수 있으며, 이에 대해 프로세서는 승산 마이크로 연산 t=a*b을 수행하는 것으로 응답해야 하고; 디코더는 FMA 명령어의 'd' 피연산자들 및 승산 마이크로-op의 't' 피연산자를 가산 마이크로-op에 대한 소스 피연산자들로서 선택하고 FMA 명령어의 'd' 피연산자를 가산 마이크로-op에 대한 목적지 피연산자로서 선택할 수 있으며, 이에 대해 프로세서는 가산 연산 d=d*t을 수행하는 것으로 응답해야 한다.
블록(3530)에서, 레지스터 리네이밍 회로(예컨대, 152, 331, 931)는 피연산자들 중 임의의 것을 리네이밍하고, (예컨대, 재정렬 버퍼에서) 레지스터 리네이밍을 위한 저장 위치들 및/또는 태그들을 할당하며 그리고/또는 승산 마이크로-op의 출력(예컨대, 't')을 가산 마이크로-op에 대한 입력으로서 배정하는 것을 구현할 수 있다.
블록(3540)에서, 스케줄러 회로(예컨대, 156, 332, 932)는, 예컨대, FP 유닛에 대한 예약 스테이션에서, 분리된 마이크로-op들을 실행을 위해 스케줄링할 수 있다. 일 실시예에서, 명령어의 동일한 인스턴스로부터 디코드된 다수의 분리된 마이크로-op들(예컨대, FMA 명령어로부터 디코드된 승산 및 가산 마이크로-op)은 명시된 순서로 디스패치를 위해 예약 스테이션에서 스케줄링될 수 있다(예컨대, 가산 마이크로-op는 다수의 마이크로-op의 디스패치 및/또는 완료 이후에만 디스패치를 위해 스케줄링될 수 있다).
블록(3550)에서, 실행 회로(예컨대, 162, 334, 770, 934)는 분리된 마이크로-op들 중 하나를 실행할 수 있다. 예를 들어, FP 승산기(334A, 334B, 770A, 770B, 934A, 또는 934B)는 승산 마이크로-op를 실행할 수 있다.
블록(3552)에서, 실행 회로(예컨대, 162, 335, 780, 935)는 분리된 마이크로-op들 중 다른 것을 실행할 수 있다. 예를 들어, FP 가산기(335A, 335B, 780A, 780B, 935A, 또는 935B)는 가산 마이크로-op를 실행할 수 있다.
블록(3560)에서, 회수 회로(예컨대, 154, 730, 960)는 명령어를 회수하고 그리고/또는 그의 결과를 물리 레지스터 파일(예컨대, 158, 333, 750, 933) 또는 메모리에 커밋할 수 있다. 일 실시예에서, 블록(3560)은 명령어로부터 디코드된 분리된 마이크로-op들 중 단지 하나의 회수를 포함할 수 있다. 예를 들어, FMA 명령어는 재정렬 버퍼로부터 대응하는 가산 마이크로-op를 회수하고 그의 결과(예컨대, d)를 커밋하는 것에 의해 회수되고 그리고/또는 그의 결과가 커밋될 수 있다.
일부 실시예들의 요약
본 발명의 일 실시예는 파이프라인에 배열된 복수의 회로들을 포함하는 프로세서를 포함할 수 있다. 복수의 회로들은 융합된 승산-가산 명령어를 적어도 2개의 분리된 마이크로-연산들로 디코드하기 위한 디코더를 포함할 수 있다. 복수의 회로들은 2개의 분리된 마이크로-연산 중 제1 마이크로-연산에 대해 연산하기 위한 승산기 및 2개의 분리된 마이크로-연산 중 제2 마이크로-연산에 대해 연산하기 위한 가산기를 또한 포함할 수 있다.
특정 프로세서 아키텍처들
도 36은 본 발명의 실시예들에 따른 하나 초과의 코어를 가질 수 있고, 통합 메모리 제어기를 가질 수 있으며, 통합 그래픽스를 가질 수 있는 프로세서(3600)의 블록 다이어그램이다. 도 36에서의 실선 박스들은 단일 코어(3602A), 시스템 에이전트(3610), 하나 이상의 버스 제어기 유닛(3616)의 세트를 갖는 프로세서(3600)를 예시하는 반면, 점선 박스들의 임의적인 추가는 다수의 코어들(3602A 내지 3602N), 시스템 에이전트 유닛(3610) 내의 하나 이상의 통합 메모리 제어기 유닛(들)(3614)의 세트, 및 특수 목적 로직(3608)을 갖는 대안의 프로세서(3600)를 예시하고 있다.
따라서, 프로세서(3600)의 상이한 구현들은: 1) (하나 이상의 코어를 포함할 수 있는) 통합 그래픽스 및/또는 과학(스루풋) 로직인 특수 목적 로직(3608), 및 하나 이상의 범용 코어(예컨대, 범용 순차 코어, 범용 비순차 코어, 이 둘의 조합)인 코어들(3602A 내지 3602N)을 갖는 CPU; 2) 주로 그래픽스 및/또는 과학(스루풋)을 위해 의도된 많은 수의 특수 목적 코어들인 코어들(3602A 내지 3602N)을 갖는 코프로세서; 및 3) 많은 수의 범용 순차 코어들인 코어들(3602A 내지 3602N)을 갖는 코프로세서를 포함할 수 있다. 따라서, 프로세서(3600)는, 범용 프로세서들, 서버 환경에서 사용하기 위한 서버 프로세서들 또는 프로세싱 요소들, 코프로세서들(예컨대, 보안 코프로세서들), 하이-스루풋 MIC 프로세서들, GPGPU들, (예컨대, 그래픽스 가속기들 또는 디지털 신호 프로세싱(DSP) 유닛들, 암호화 가속기들, 고정 기능 가속기들, 머신 러닝 가속기들, 네트워킹 가속기들, 또는 컴퓨터 비전 가속기들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서 또는 프로세싱 디바이스일 수 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(3600)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은, 다수의 프로세스 기술들 중 임의의 것을 사용하여 하나 이상의 기판의 일부일 수 있고 그리고/또는 하나 이상의 기판 상에 구현될 수 있다.
메모리 계층구조는 코어들 내의 하나 이상의 레벨의 캐시, 하나 이상의 공유 캐시 유닛(3606)의 세트, 및 통합 메모리 제어기 유닛들(3614)의 세트에 커플링된 외부 메모리(도시되지 않음)를 포함한다. 공유 캐시 유닛들(3606)의 세트는, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 다른 레벨의 캐시와 같은, 하나 이상의 중간 레벨 캐시, 최종 레벨 캐시(last level cache)(LLC), 및/또는 이들의 조합들을 포함할 수 있다. 일 실시예에서, 링 기반 인터커넥트 유닛(3612)이 통합 그래픽스 로직(3608)(통합 그래픽스 로직(3608)은 특수 목적 로직의 일 예이며 본 명세서에서 특수 목적 로직이라고도 지칭됨), 공유 캐시 유닛들(3606)의 세트, 및 시스템 에이전트 유닛(3610)/통합 메모리 제어기 유닛(들)(3614)을 상호접속시키지만, 대안의 실시예들은 그러한 유닛들을 상호접속시키기 위한 임의의 수의 공지된 기법을 사용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛(3606) 및 코어(3602A 내지 3602N) 사이에 일관성이 유지된다.
일부 실시예들에서, 코어들(3602A 내지 3602N) 중 하나 이상은 멀티스레딩을 할 수 있다. 시스템 에이전트(3610)는 코어들(3602A 내지 3602N)을 조율하고 동작시키는 그 컴포넌트들을 포함한다. 시스템 에이전트 유닛(3610)은, 예를 들어, 전력 제어 유닛(PCU) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(3602A 내지 3602N) 및 통합 그래픽스 로직(3608)의 전력 상태를 조절하는 데 필요한 로직 및 컴포넌트들이거나 또는 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속된(externally connected) 디스플레이를 구동하기 위한 것이다.
코어들(3602A 내지 3602N)은 아키텍처 명령어 세트의 면에서 동종(homogenous) 또는 이종(heterogeneous)일 수 있으며; 즉, 코어들(3602A 내지 3602N) 중 2개 이상은 동일한 명령어 세트를 실행할 수 있는 반면, 다른 것들은 그 명령어 세트의 서브세트 또는 상이한 명령어 세트만을 실행할 수 있다.
도 37은 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 CPU(central processing unit) 콤플렉스의 블록 다이어그램이다. 실시예에서, L3 캐시는 코어당 2MB "슬라이스(slice)"의 L3 캐시를 제공하는, 4-코어 모듈(CPU 콤플렉스 또는 CCX라고 지칭됨)에 걸쳐 분할된 8 MB 16-웨이 캐시이다. 그렇지만, CCX 내의 L3 캐시 슬라이스들은 L3 캐시가 공유 캐시이도록 구현된다. 다수의 CCX들이 단일 프로세서에 포함될 수 있다(예컨대, 2개의 CCX가 16 MB L3 캐시를 형성한다). 각각의 CCX 상의 8 MB 캐시들은 분리되어 있으며, 따라서 그들은 데이터가 필요한지를 결정하기 위해 다른 L3 캐시에의 적절한 후크들을 갖는 4-코어 모듈당 최종 레벨 캐시로서 기능한다(L3 캐시 설계에 수반된 프로토콜들은 각각의 코어가 각각의 다른 코어의 L3 캐시에 액세스할 수 있게 해준다). 따라서, 이러한 L1, L2, 및 L3 캐시들은 코히런트 캐시들이며, CCX 내에서 그리고 CCX들 사이에서 L3 캐시 슬라이스들은 캐시 코히런트 인터커넥트(cache coherent interconnect)(캐시 코히런트 패브릭(cache coherent fabric)이라고도 지칭됨)에 의해 접속된다.
도 38은 본 발명의 실시예들에 따른 프로세서에 포함될 수 있는 예시적인 캐시 계층구조의 블록 다이어그램이다. 도 38에서, 캐시 계층구조(3800)는 L1 i-캐시(3810A) 및 L1 d-캐시(3810B)(집합적으로, L1 캐시(3810)), L2 명령어 및 데이터 캐시(3820), 및 레벨 3(L3) 명령어 및 데이터 캐시(3830)를 포함한다. 일 실시예에서, L1 캐시(3810) 및 L2 캐시(3820) 둘 다는 전용/로컬 라이트백 캐시들(private/local writeback caches)인 반면, L3 캐시(3830)는 희생 캐시이다. 일 실시예에서, L1 i-캐시(3810A)는 64 KB 4-웨이 캐시이고, L1 d-캐시(3810B)는 32 KB 8-웨이 캐시이며, L2 캐시(3820)는 512 KB 8-웨이 캐시이고, 레벨 3(L3) 캐시(3830)는 8 MB 16-웨이 캐시이다.
메모리 구성(Memory Organization) 특징들
본 발명의 실시예들에 따른 프로세서 코어들, 프로세서들, 및 시스템들은 메모리의 구성 및 사용에 관련된 다양한 특징들을 포함할 수 있다. 다수의 그러한 특징들이 이하에서 비제한적인 예들을 사용하여 개별적으로 설명되지만, 실시예들은 그러한 특징들의 임의의 조합을 포함할 수 있다.
캐시 라인 제로화
일부 실시예들은 메모리 어드레스에 캐시 라인 크기의 제로들의 기입(cache line sized write of zeros)을 야기하는 실행을 갖는 명령어를 포함한다. 그러한 명령어는 캐시 라인 제로화 명령어, CLZERO 명령어, CLZEROING 명령어, 캐시 라인 초기화 명령어, CLINIT 명령어 등이라고 지칭될 수 있다. 일 실시예에서, 캐시 라인 제로화 명령어는, 코어(190) 및/또는 코어(5300)와 같은, 코어에 의해 실행되는 매크로-명령어이다. 구체적으로는, 디코더(140) 및/또는 디코더(5314)는 그러한 매크로-명령어를 메모리 액세스 유닛(들)(164) 및/또는 어드레스 생성 유닛(들)(325)/로드-저장 유닛(340)으로 하여금, 제각기, 동작을 수행하게 하는 하나 이상의 상대적으로 하위 레벨의 명령어 또는 제어 신호(예컨대, 하나 이상의 마이크로명령어, 마이크로-연산(마이크로-op), 및/또는 마이크로-코드 엔트리 포인트, 디코드된 명령어 또는 제어 신호)로 디코드하도록 구현될 것이다.
캐시 라인 제로화 명령어는 캐시 라인을 제로화하기 위한 보다 빠르고 보다 결정론적인 방식이라는 이점을 가지는데, 그 이유는 그것이 RFO(request for ownership) 연산을 사용할 필요가 없거나 적어도 데이터 백 또는 리턴(data back or returned)을 필요로 하지 않기 때문이다. RFO 연산은 판독과 무효화 브로드캐스트(invalidate broadcast)(그 메모리 어드레스에 기입할 의도를 갖는 판독 동작)을 결합시키고, 따라서 모든 다른 코히런트 캐시들로 하여금 그러한 캐시 라인의 상태를 "유효하지 않음(invalid)"의 캐시 일관성 프로토콜 상태로 설정하게 하는 캐시 일관성 프로토콜들에서의 연산이다. 예를 들어, RFO 연산은 전형적으로 MESI 프로토콜의 공유(S) 또는 유효하지 않음(I) 상태들에 있는 캐시 라인에 기입하려고 시도하는 프로세서에 의해 발행된다. MESI 프로토콜은 "수정됨(modified)", "배타적(exclusive)", "공유(shared)", 및 "유효하지 않음"의 캐시 일관성 프로토콜 상태들을 사용한다. 대조적으로, 캐시 라인 제로화 명령어의 구현은 데이터를 제로화하기 때문에 라인이 판독되어 발행 에이전트로 리턴될 것을 요구하지 않으며; 실제로, 일부 실시예들에서, 발행 에이전트는 데이터의 소유권을 가질 필요가 없다.
상이한 실시예들은 상이한 방식들로 메모리 어드레스를 나타내도록 캐시 라인 제로화 명령어를 구현할 수 있다. 예를 들어, 캐시 라인 제로화 명령어는 어드레스 정보를 명시적으로(예컨대, 즉치, 하나 이상의 필드를 통해), 간접적으로(예컨대, 어드레스 정보가 저장된 하나 이상의 레지스터를 명시하는 것에 의해), 및/또는 암시적으로(예컨대, 하나 이상의 지정된 레지스터) 나타내도록 구현될 수 있다. 메모리 어드레스 정보는 메모리 어드레스이거나 메모리 어드레스를 생성하기 위해 다른 정보(예컨대, 세그먼트 레지스터로부터의 정보 등)와 조합하여 사용되는 정보일 수 있다. 일부 실시예들에서 메모리 어드레스가 캐시 라인 경계 상에 정렬되지만, 대안의 실시예들은 캐시 라인 경계들 사이에 있고 그 경계들 사이의 캐시 라인을 나타내는 것으로서 취급되는 메모리 어드레스를 또한 지원할 수 있다. 어드레스 정보는 절대 메모리 어드레스 정보 또는 상대 메모리 어드레스 정보 중 어느 하나를 나타낼 수 있으며, 이는 베이스 메모리 어드레스에 대해 상대적인 메모리 위치 또는 다른 메모리 위치를 나타낼 수 있다. 그에 부가하여, 상이한 간접 메모리 어드레싱 모드들이 임의로 사용될 수 있다. 하나의 특정 예로서, 명령어는 메모리 어드레스를 식별하는 데 사용되는 최종 메모리 어드레스를 생성하기 위해 다른 암시적 레지스터(예컨대, 코드, 데이터, 또는 확장 세그먼트 레지스터)에 저장된 부가의 메모리 어드레스 정보와 결합될 수 있는 상대 메모리 어드레스 정보를 저장하는 데 사용되는 레지스터(예컨대, 범용 레지스터)를 암시적으로 나타낼 수 있다. 이것은 하나의 예에 불과하다. 다른 형태들의 어드레스 정보가 또한 가능하다.
상이한 실시예들은 상이한 크기의 캐시 라인들(예컨대, 32 바이트, 64 바이트)을 구현할 수 있고 그리고/또는 주어진 실시예는 하나 초과의 캐시 라인 크기를 구현할 수 있다. 예를 들어, 실시예들은: 1) 특정 캐시 라인 크기에 대해 구현되거나(그리고 따라서 캐시 라인 크기를 지정할 필요가 없음); 2) 상이한 타입의 코어들이 상이한 캐시 라인 크기들을 갖는 경우(예컨대, 현재의 캐시 크기가 레지스터 내의 값을 통해 표시될 수 있음) 현재의 캐시 크기를 사용하도록 구현되거나; 또는 3) 캐시 라인 크기를 나타내는 필드를 갖도록 구현되는 캐시 라인 제로화 명령어를 지원할 수 있다. 일부 실시예들에서, 명령어는 하나 이상의 캐시 라인(즉, 캐시 라인 크기의 배수)을 나타내는 크기 파라미터의 표시를 가능하게 해준다. 일부 실시예들에서, 부가적으로 또는 그 대신에, 캐시 라인 크기에 연계되지(tied) 않는(예컨대, 바이트들의 수만을 나타내는) 크기 파라미터의 표시를 가능하게 해주는 ZERO 명령어가 있는데 그 이유는 이것이 소프트웨어가 캐시 라인 크기를 인식하지 못하게 하기 때문이다(크기가 캐시 라인 크기의 배수가 아닌 경우(예컨대, 바이트로 명시되고 캐시 라인 크기가 64 바이트임에도 바이트들의 수는 112임), 실시예들은 캐시 라인을 제로화하는 것까지 할 수 있거나 그 마지막 라인에 남아있는 데이터에 대해서만 RFO를 발행할 수 있다).
일부 실시예들에서, 캐시 라인 제로화 명령어는 원자적(atomic)이다. 따라서, 단지 일 부분이 아니라, 제로들의 캐시 라인 전체가 전체적으로 저장되거나, 제로들의 캐시 라인 중 아무것도 저장되지 않을 것이다(즉, 완료 원자성 보증). 원자성은 캐시 라인 제로화 명령어에 의해 기입된 제로들이 다른 저장들(stores)에 의해 저장된 데이터와 인터리빙되지 않을 것임을 또한 보증할 수 있다. 원자성은 다른 액세스들과 관련하여 임의의 그러한 액세스들이, 단지 일 부분이 아니라, 저장된 데이터 전부를 전체적으로 관찰하거나 저장된 데이터 중 아무것도 관찰하지 않도록 되어 있을 수 있다. 원자성은 정전, 시스템 충돌, 재부팅, 또는 다른 그러한 이벤트와 관련하여, 그러한 이벤트들에 직면해서도, 단지 일 부분이 아니라, 모든 제로들이 저장되거나, 제로들 중 아무것도 저장되지 않도록 되어 있을 수 있다. 그러한 원자적 연산의 다양한 가능한 사용들이 있다. 그러한 사용의 일 예는 데이터베이스에서 데이터 조각을 원자적으로 업데이트하는 것이다. 그러한 사용의 다른 예는 멀티프로세싱 환경에서 공유 데이터 조각을 원자적으로 업데이트하는 것이다. 그러한 사용의 또 다른 예는 잠금, 세마포어를 대체하기 위해, 공유 변수를 업데이트하기 위해, 동기화하기 위해, 조율하기 위해, 또는 이와 유사한 것을 위해 데이터를 한 위치에 원자적으로 저장하는 것이다. 그러한 원자적 저장 연산의 또 다른 사용들이 고려되고 본 개시내용의 이점을 갖는 본 기술분야의 통상의 기술자에게 명백할 것이다.
예시적인 메모리 계층구조들
도 39는 본 발명의 실시예들에 따른 캐시 라인 제로화 명령어가 구현될 수 있는 메모리 계층구조를 예시하는 블록 다이어그램이다. 예시된 메모리 계층구조는 다양한 프로세서 코어들, 코어 클러스터들, CCX들, 프로세서들, 컴퓨터 아키텍처들 등과 함께 구현될 수 있다. 특정 실시예들로서, 캐시 제로화 명령어의 구현은 도 3, 도 8, 도 38, 및 도 37의 코어/CCX와 함께 도 39의 메모리 계층구조를 참조하여 설명될 것이다. 이것은 예시 목적들을 위한 것이며, 캐시 제로화 명령어는 상이한 메모리 계층구조들에서 그리고/또는 상이한 코어들, 코어 클러스터들 등과 함께 구현될 수 있다.
도 39는 코히런트 에이전트(3900) 및 코히런트 에이전트(3901)는 물론, 파선 박스를 사용하여 "..." 및 코히런트 에이전트(3902)에 의해 표현되는 바와 같은 다른 코히런트 에이전트들의 가능성을 예시하고 있다. 도 39에서의 메모리 계층구조는 코히런트 캐시들(3904A), 인터커넥트(3920), 및 다운스트림 메모리(3930)를 포함한다. 상이한 실시예들은 상이한 수의 캐시들 및 캐시 레벨들을 코히런트 캐시들(3904A)의 일부로서 구현할 수 있다. 코히런트 에이전트들 및 코히런트 캐시들은 캐시 일관성 프로토콜(예컨대, "수정됨", "배타적", "공유", 및 "유효하지 않음"의 캐시 일관성 프로토콜 상태들을 사용하는 MESI 프로토콜; "포워드(forward)"의 캐시 일관성 프로토콜 상태를 추가하는 MESIF 프로토콜; "소유됨(Owned)"의 캐시 일관성 프로토콜 상태를 그 대신에 추가하는 MOESI 프로토콜; 및 다른 그러한 캐시 일관성 프로토콜들)을 사용하여 캐시 일관성이 유지되는 캐시 일관성 도메인의 일부이다.
코히런트 에이전트(3900)는 캐시 계층구조의 연속적으로 하위 레벨들에 있는 하나 이상의 캐시를 통해 인터커넥트(3920)에 커플링된다. 캐시 계층구조는 캐시 계층구조의 최상위 레벨에 있고 코히런트 에이전트(3900)에 커플링되는 캐시, 캐시 계층구조의 최하위 레벨에 있고 인터커넥트(3920)에 커플링된 캐시(예컨대, L3 캐시(3915))(그리고 따라서, 이 캐시는 최하위 레벨 캐시 또는 최종 레벨 캐시(LLC)라고 지칭됨), 및 상위 레벨에 있는 캐시들 중 하나 및 하위 레벨에 있는 캐시들 중 하나에 커플링된 캐시 계층구조의 중간 레벨(들)에 있는 0개 이상의 캐시(예컨대, L2 캐시(3910))(예컨대, 도 39는 L1 캐시(3905)에 커플링된 코히런트 에이전트(3900), L2 캐시(3910)에 커플링된 L1 캐시(3905), L3 캐시(3915)에 커플링된 L2 캐시(3910), 인터커넥트(3920)에 커플링된 L3 캐시(3915)를 예시하고 있음)를 포함한다.
코히런트 에이전트(3901)는 하나 이상의 레벨의 캐시를 통해 인터커넥트에 또한 커플링된다. 도 39는 임의적인 L1 캐시(3906)에 커플링된 코히런트 에이전트(3901), 임의적인 L2 캐시(3911)에 커플링된 임의적인 L1 캐시(3906), L3 캐시(3915)에 커플링된 임의적인 L2 캐시(3911)를 예시하고 있다. 그에 부가하여, 도 3902는 임의적인 코히런트 에이전트(3902)가 인터커넥트(3920)에 직접 커플링될 수 있음(즉, 어떠한 코히런트 캐시들도 갖지 않음)을 또한 예시하고 있다.
코히런트 에이전트들이 연속적인 레벨들의 캐시들을 통해 인터커넥트(3920)에 커플링되는 것을 포함한 접속성에 부가하여 또는 그 대신에, 특정 실시예들은 직접적인 또는 보다 직접적인 통신을 가능하게 해주는 다른 접속성(예컨대, 파선들(3935, 3936, 3937, 및 3938)에 의해 제각기 예시된 바와 같이, 코히런트 에이전트(3900)를 인터커넥트(3920)에 직접 커플링시키는 것, 코히런트 에이전트(3900)를 L2 캐시(3910)에 직접 커플링시키는 것, L1 캐시(3905)를 인터커넥트(3920)에 직접 커플링시키는 것, 및/또는 L2 캐시(3910)를 인터커넥트(3920)에 직접 커플링시키는 것)을 구현한다
인터커넥트(3920)는 (예컨대, 하나 이상의 메모리 제어기(도시되지 않음)의 세트를 통해) 다운스트림 메모리(3930)에 커플링된다. 다운스트림 메모리(3930)는 코히런트 캐시(3904)보다 메모리 계층구조의 하위 레벨에 있으며, 하나 이상의 타입의 메모리 및/또는 메모리들의 계층구조(예컨대, 휘발성 메모리 및/또는 비휘발성 메모리, 메인 메모리, MMIO(memory mapped input/output), 메모리 측 캐시(들), 2LM(two level memory), DRAM, 플래시, 상 변화 메모리, 3D Xpointtm)를 포함할 수 있다.
인터커넥트(3920)(캐시 코히런트 인터커넥트, 패브릭, 인터커넥트, 언코어(uncore)의 일부, 인터커넥트 네트워크, 인터커넥트 유닛(들)이라고도 지칭됨)는 코히런트 캐시들(3904)에게 스누프들을 발행하고 그들로부터 임의의 응답들을 수신하기 위한 스누프 제어기(3925)를 포함한다. 스누프 제어기(3925)는 스누프들을 발행하기 위한 스누프 생성기(3926), 및, 일부 실시예들에서, 임의의 응답들을 수신하기 위한 스누프 응답기(3927)를 포함한다. 그에 부가하여, 스누프 제어기(3925)는, 특정 실시예들에서, (캐시 라인 크기의 전부 제로들의 기입(cache line sized write of all zeros)을 효과적으로 생성하기 위한) 기입 생성기(3929) 및/또는 (스누프에 응답하여 수신된 데이터의 캐시 라인을 전부 제로들로 효과적으로 변환하기 위한) 기입 변환기(QOS28)를 포함한다. 그에 부가하여, 일 실시예에서, 인터커넥트(3920)가 L3 캐시(3915)와 다운스트림 메모리(3930) 사이에 있는 것으로 예시되었지만, 대안의 실시예들은 인터커넥트(3920)를 다른 위치에(예컨대, L2 캐시들과 L3 캐시 사이에, 하나 이상의 메모리 제어기의 세트가 다운스트림 메모리(3930)와 (예컨대, 홈 에이전트로서의) 인터커넥트(3920) 사이에 있거나 하나 이상의 메모리 제어기의 세트가 L3 캐시(3915)와 다운스트림 메모리(3930) 사이에 있음) 구현할 수 있다. 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 일부로서), 스누프 필터(도시되지 않음)와 같은, 다른 아이템들을 포함할 수 있다.
범용 코어들(중앙 프로세싱 유닛들(CPU들)이라고도 알려짐)로서 상이한 수의 코히런트 에이전트들을 갖는 상이한 실시예들이 구현될 수 있다. 예를 들어, 일부 실시예들에서, 코히런트 에이전트(3900)는 코어이고, 코히런트 에이전트(391)는 코어이며, 코어들인 0개 이상의 부가의 코히런트 에이전트가 있고, 다른 타입의 에이전트들(예컨대, 단지 몇 개의 예를 열거하면, 범용 프로세서들, 서버 환경에서 사용하기 위한 서버 프로세서들 또는 프로세싱 요소들, 코프로세서들(예컨대, 보안 코프로세서들), 하이-스루풋 MIC 프로세서들, GPGPU들, (예컨대, 그래픽스 가속기들 또는 디지털 신호 프로세싱(DSP) 유닛들, 암호화 가속기들, 고정 기능 가속기들, 머신 러닝 가속기들, 네트워킹 가속기들, 또는 컴퓨터 비전 가속기들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서 또는 프로세싱 디바이스)인 0개 이상의 부가의 코히런트 에이전트가 있다.
일부 실시예들에서, 코히런트 에이전트들 및 코히런트 캐시들(3904)은 도 38 및 도 37에서와 같이 구현된다. 예를 들어, CCX에, 코어들인 4개의 코히런트 에이전트, 코어당 사설/로컬 L1 캐시, 코어당 사설/로컬 L2 캐시, 및 공유 L3 캐시가 있고; 단일 프로세서에 함께 커플링된 다수의 CCX들이 있을 수 있다. L1 및 L2 캐시들은 라이트 백 캐시들이고, L2 캐시들은 포함적 캐시들(inclusive caches)이며, L3 캐시는 희생 캐시이다. 그에 부가하여, L3 캐시(3915)는 모듈(CCX) 내의 다수의 코히런트 에이전트들(예컨대, 4개의 코어에 걸쳐 코어당 2 MB, 총 8MB) 사이에, 그리고 임의로 하나 이상의 그러한 모듈 사이에(예컨대, 16 MB L3 캐시를 형성하기 위해, 각각이 8 MB를 갖는 2개의 CCX) 슬라이스들로 분할된다. 도 39는 코히런트 에이전트(3900)의 L3 캐시 슬라이스(3916) 및 코히런트 에이전트(3901)의 L3 캐시 슬라이스(3917)를 갖는 이것을 예시하고 있다. 인터커넥트(3920)는, 예를 들어, 1) CCX 내의 인터커넥트만; 2) CCX들 내의 그리고 CCX들 사이의 인터커넥트; 3) 상이한 CCX들 내의 별개의 인터커넥트들은 물론, CCX들 사이의 인터커넥트(들)를 나타낼 수 있다. 상이한 실시예들은, 링, 다수의 링들, 포인트 투 포인트 링크들, 공유 버스(들) 등 중 하나 이상을 포함한, 인터커넥트(3920)를 상이하게 구현할 수 있다. 홈 에이전트 및 캐싱 에이전트들을 구현하는 실시예들에서, 인터커넥트(3920)는 캐싱 에이전트들을 포함하는 것으로 간주된다.
도 39에서의 코히런트 에이전트들 중 하나 이상, 또는 전부는 캐시 라인 제로화 명령어(코히런트 에이전트(3900, 3901, 및 3902) 중 임의의 것으로서 식별되는 가능한 캐시 라인 제로화 명령어 발행 에이전트(3903)를 참조)를 실행하도록 구현될 수 있다. 캐시 라인 제로화 명령어를 현재 실행 중인 코히런트 에이전트는 "발행 에이전트", "발행 코히런트 에이전트" 또는 "제1 에이전트"이며, 그의 캐시들은 발행 에이전트의 Lx 캐시라고 지칭된다(여기서 x는 1, 2, 또는 3이고; L3 캐시가 슬라이스들로 구현되는 경우, 이는 발행 에이전트의 L3 캐시 슬라이스이다). 이하의 논의에서, 이것은 코히런트 에이전트(3900)일 것이다. 캐시 라인 제로화 명령어를 현재 실행하고 있지 않은 코히런트 에이전트는 "코히런트이지만 비발행 에이전트(coherent but no issuing agent)", "비-발행 에이전트", "비-발행 코히런트 에이전트", 또는 "제2 에이전트"이며(앞서 논의된 바와 같이, 다수의 제2 에이전트들이 있을 수 있지만, 간단함을 위해 하나가 이하에서 논의될 것임), 그의 캐시들은 제2 에이전트의 Lx 캐시라고 지칭된다(여기서 x는 1, 2, 또는 3이고; L3 캐시가 슬라이스들로 구현되는 경우, 이는 제2 에이전트의 L3 캐시 슬라이스이다). 이하의 논의에서, 이것은 코히런트 에이전트(391)일 것이다.
예시적인 캐시 아키텍처
도 40은 본 발명의 실시예들에 따른 캐시 라인 제로화 명령어를 구현하는 프로세서 내의 캐시를 예시하는 블록 다이어그램이다. 도 40은 Lx 캐시(4050)를 포함하며, 여기서 x는 캐시 계층구조에서의 레벨(예컨대, 1, 2, 3)을 나타낸다. Lx 캐시(4050)는 히트들/미스들을 검출하는 것, 캐시 라인들에 대한 기입들/판독들을 야기하는 것, 스누프들을 수신하는 것(그리고 따라서, 일부 실시예들에서, 캐시 제어기(4051)는 스누프 인터페이스, 및 일부 실시예들에서, 스누프 제어기(4043)를 포함함) 등을 포함한, 캐시의 동작을 제어하기 위한 캐시 제어기(4051)를 포함한다. 캐시 제어기는 (때때로 "태그 상태"라고 지칭되는 것을 포함하는) 엔트리들(4060)을 갖는 태그 어레이(4055)를 포함하고, Lx 캐시(4050)는 대응하는 캐시 라인들(4070)을 갖는 데이터 어레이(4056)를 포함한다. 엔트리들(4060) 각각은 주어진 어드레스가 캐시 라인들(4070) 중 대응하는 것에서 데이터를 히트하거나 미스하는지를 결정하는데 사용되는 태그를 저장하기 위한 태그 필드(4061)를 포함한다. 그에 부가하여, 엔트리들(4060) 각각은 캐시 라인들(4070) 중 대응하는 것에 저장된 데이터의 어트리뷰트들을 저장하기 위한 하나 이상의 어트리뷰트 필드(들)(4062)(때로는 "태그 상태"라고 지칭됨)의 세트를 포함한다. 어트리뷰트 필드(들)(4062)는 캐시 라인들(4070) 중 대응하는 것에 저장된 데이터의 현재 캐시 일관성 프로토콜 상태를 나타내는 값을 저장하기 위한 캐시 일관성 프로토콜 상태 필드(4065)를 포함한다. 어트리뷰트 필드(들)(4062)는, 제로 라인 필드(4066), 포이즌 필드(poison field)(4067), 에러 정정 코드 필드(도시되지 않음)와 같은, 다른 필드들을 임의로 포함할 수 있다. 도 40이 어트리뷰트 필드(들)(4062)를 태그 어레이 내에 있는 것으로 예시하고 있지만, 대안의 실시예들은 이러한 필드(들)를 별개의 상태 어레이(도시되지 않음)에서 구현할 수 있다. 일 실시예에서, 주어진 캐시 라인은 포이즌 필드(4067)에 (예컨대, 64-바이트 캐시 라인의 2개의 32 바이트 청크에 대해 하나씩) 다수의 포이즌 표시들을 가질 수 있다. 도 40은 별개의 포이즌 필드(4067)를 예시하고 있지만, 대안의 실시예들은 포이즌 표시들을 다른 필드(예컨대, 에러 정정 코드(ECC) 필드 또는 캐시 일관성 프로토콜 상태 필드)에 인코딩할 수 있다.
캐시에서의 히트에 응답하여(예컨대, 태그 필드(4061) 내의 태그에 기초하여), 캐시 제어기(4051)는 히트에 대한 캐시 일관성 프로토콜 상태 필드(4056)(예컨대, 매칭된 태그를 갖는 태그 필드(4061)에 대응하는 캐시 일관성 프로토콜 상태 필드(4056))에서의 캐시 일관성 프로토콜 상태에 응답하기 위한 회로부(예컨대, 캐시 일관성 프로토콜 상태 회로부 또는 다른 회로부)를 포함하며; 이 응답은 실시예들 사이에서 그리고 다양한 인자들(예컨대, 캐시 룩업이 기입 커맨드, 판독 커맨드, 스누프(및 어쩌면 스누프의 타입)에 응답하여 개시되었는지)에 기초하여 상이하다. 예를 들어, 일부 실시예들에서, 응답은 캐시 일관성 프로토콜 상태가 이하에서 보다 상세히 논의되는 바와 같이 기입 커맨드 및/또는 특정 타입의 스누프들에 응답하여 캐시 라인을 수정할 권한(authority)을 캐시에 부여하는 것인지(예컨대, "수정됨" 또는 "배타적" 상태)를 결정하는 것이다. 일부 실시예들에서, 캐시 제어기(4051)는: 1) 커맨드(예컨대, 기입 커맨드, 판독 커맨드, 스누프 커맨드)에 응답하여 캐시에 히트 또는 미스가 있는지를 결정하기 위한 히트-미스 회로부(도시되지 않음); 2) 스누프들을 수신하기 위해 그리고 응답 메시지들을 스누프들에게 전송하기 위해 스누프 인터페이스(도시되지 않음)에 커플링된 스누프 제어기(4043); 및 3) 캐시 라인 판독 회로부(도시되지 않음) 및 캐시 라인 기입 회로부(도시되지 않음)를 포함한다.
전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들
일부 실시예들이 캐시 라인 내의 데이터를 제로들로 덮어쓰기(writing over)하는 것에 의해 캐시 라인을 전부 제로들을 나타내도록 구성하도록 구현되는 반면(제1 기법), 대안의 실시예들은 다른 기법들(이하에서 설명되는 제2 내지 제4 기법들은 예들임)을 사용하여 캐시 라인을 전부 제로들을 나타내도록 구성할 수 있다. 그러한 다른 기법들은, 캐시 라인의 크기가 전형적으로 코어 내의 일부 버스들/구조들(예컨대, 로드 큐(810), 저장 큐(820), 기입 결합 버퍼(WCB)(860)와 같은, 중간 버퍼들 중 하나 이상)의 폭보다 크고 그리고/또는 캐시 라인 내의 데이터를 제로들로 덮어쓰기하는 것은 전력을 소비하고 캐시의 복잡도를 증가시키는 것과 같은, 각종의 이유들로 구현될 수 있다.
제2 기법은 그 캐시 라인이 현재 존재하는 캐시의 웨이(way)에서의 캐시 라인을 무효화하고, 제로들의 캐시 라인을 캐시의 상이한 웨이에 기입하는 것이다.
제3 및 제4 기법들은 데이터 어레이(4056) 내의 데이터보다는 태그 상태를 변경하는 것을 수반하며, 이들은 캐시 레벨들 중 하나 이상에서 그리고/또는 인터커넥트에서 사용될 수 있다. 제3 기법은 (예컨대, 어트리뷰트 필드(들)(4062)에서의) 캐시 라인들 각각에 대한 필드(제로 라인 필드(4066)라고 지칭됨)를 구현하는 것이고, (1 비트일 수 있는) 이 필드 내의 값은: 1) 캐시 라인이 그 캐시 라인에 저장된 데이터의 값을 갖는 것으로 취급되어야 하는지; 또는 2) 캐시 라인이 (그 캐시 라인에 저장된 실제 데이터와 관계없이) 전부 제로들인 것으로 취급되어야 하는지를 나타낸다. 그러한 실시예들에서, 그 캐시 라인의 판독들(축출들을 포함함)은 제로-라인 필드(4066)의 값을 그러한 제로-라인 필드를 지원하는 다른 구조로 전달하거나 데이터를 제로들로 변환하도록 되어 있다. 데이터는, 판독 시에 코히런트 에이전트들 중 하나(예컨대, 코히런트 에이전트(3900))에 의해 사용되기 전에, 또한 변환될 것이다. 일부 그러한 실시예들에서 데이터가 다운스트림 메모리(QO30)에 기입되기 전에 또한 변환되지만, 대안의 실시예들은 다운스트림 메모리(3930) 또는 메모리 제어기에 의해 관리되는 대안의 메모리 구조에 제로-라인 필드를 구현한다.
제4 기법은 제3 기법과 유사하지만, 별개의 필드를 구현하기보다는, 어트리뷰트 필드(들) 중 기존의 필드에 새로운 인코딩(예컨대, 캐시 일관성 프로토콜 상태 필드 또는 에러 정정 코드(ECC) 신드롬 필드에 새로운 인코딩)을 구현한다.
특정 실시예들은, 전부 제로들을 나타내도록 캐시 라인을 구성하는 것의 일부로서, 그 캐시 라인의 캐시 일관성 프로토콜 상태를 "수정됨" 또는 "소유됨"으로(또는 제로 라인을 나타내기 위해 캐시 일관성 상태 필드에 새로운 인코딩을 사용하는 경우에, 제로-라인 상태로) 수정하고 임의의 포이즌 표시(들)가 무시되게 하거나(데이터가 더 이상 포이즌되지 않음) 클리어되게 하도록 캐시를 구현할 수 있다. 따라서, 캐시 라인 제로화 명령어의 다른 장점은 포이즌된 라인들을 일관되게 제거(clear out)하는 데 사용될 수 있다는 것이다.
관련된 유의점에서, 캐시 라인을 강제로 제로로 만들기 위한 메커니즘은 특정 캐시 레벨들(예컨대, L2 또는 L3 캐시들에서가 아니라 L1 캐시에서만과 같은, L1 캐시들, L2 캐시들 및 L3 캐시들의 서브세트)에서만 구현될 수 있고, 그러한 메커니즘을 결여한 주어진 캐시 레벨은 캐시 라인을 그 메커니즘을 갖는 상이한 캐시 레벨로 보내는 것에 의해 캐시 라인을 전부 제로들을 나타내도록 구성하도록 구현될 수 있다(예컨대, 상위 캐시 레벨(예컨대, L1 캐시들)은 데이터를 제로화를 수행할 수 있는 하위 캐시 레벨(예컨대, L2 캐시들)로 축출하는 것에 의해 캐시 라인을 전부 제로들을 나타내도록 구성하도록 구현되고; 하위 캐시 레벨(예컨대, L2 캐시들)은 캐시 라인을 제로화를 수행할 수 있는 상위 캐시 레벨(예컨대, L1 캐시들)로 포워딩하는 것에 의해 캐시 라인을 전부 제로들을 나타내도록 구성하도록 구현된다). 이하에서 보다 상세히 설명되는 바와 같이, 상이한 실시예들은 기입 및/또는 스누프에 응답하여 캐시 라인의 제로화를 구현할 수 있다. 기입 및 스누프 둘 다에 응답하여 캐시 라인의 제로화를 구현하는 실시예들에서, 주어진 캐시 레벨은 (둘 다가 아니라) 기입 또는 스누프 중 하나에만 응답하여 제로화를 수행하도록 구현될 수 있으며, 기입 및 스누프 중 다른 것에 응답하여 제로화를 수행할 수 있는 하위 또는 상위 레벨 캐시로 데이터를 푸시/축출하거나 포워딩할 수 있다.
전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시를 트리거링하는 것
전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시에 구현되는 기법(이상을 참조)에 관계없이, 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시를 트리거링하는 것은 인터커넥트로부터 캐시들 중 하나로 송신된 메시지에 응답한 것이거나, 발행 에이전트에 그 자체적으로 의한 것이거나, 인터커넥트로부터 송신된 메시지에 응답하여 발행 에이전트에 의한 것일 수 있다.
발행 에이전트가 (그 자체적으로 또는 인터커넥트로부터의 메시지에 응답하여) 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시를 트리거링하는 경우에, 상이한 실시예들은, 캐시 라인이 발행 에이전트의 기본적으로(natively) 지원되는 데이터 폭(예컨대, 32 비트, 64 비트, 128 비트, 256 비트, 512 비트, 1024 비트)보다 넓은(예컨대, 32 바이트, 64 바이트) 경우에, 캐시 라인 제로화 명령어를 원자적이도록 구현하기 위한 기법들을 포함한, 상이한 기법들을 사용할 수 있다. 기본적으로 지원되는 데이터 폭은 상이한 실시예들에서 상이한 방식들로 나타날 수 있다. 일부 실시예들에서, 기본적으로 지원되는 데이터 폭은 가장 넓은 레지스터들의 세트의 비트 단위의 폭, 및/또는 명령어에 의해 연산될 피연산자(들)의 폭을 나타낼 수 있다. 일부 실시예들에서, 기본적으로 지원되는 데이터 폭은 산술 및/또는 논리 실행 유닛들의 폭을 나타낼 수 있다(예컨대, 피연산자들의 다수의 부분들이 그 유닛을 통해 순차적으로 펌핑되지(더블 펌핑되거나 그 이상이지) 않도록 그 유닛이 명령어들에 의해 표시되는 피연산자들의 동일한 폭을 가질 때). 일부 실시예들에서, 기본적으로 지원되는 데이터 폭은 버스(예컨대, 로드 파이프)의 폭을 나타낼 수 있다. 원자적으로 저장될 수 있는 데이터의 양은 발행 에이전트의 하나 이상의 내부 구조(예컨대, 버스들, 중간 버퍼들)의 폭에 의해 제한될 수 있다.
따라서, 발행 에이전트가 (그 자체적으로 또는 인터커넥트로부터의 메시지에 응답하여) (전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시의) 트리거링을 수행하는 일부 실시예들에서, 발행 에이전트는: 1) 중간 버퍼들(예컨대, 저장 큐(820) 및 기입 결합 버퍼(WCB)(860)) 중 하나 이상과 같은, 다른 구조들에서 제로-라인 필드를 구현하거나; 또는 2) 중간 버퍼들(예컨대, 저장 큐(820) 및 기입 결합 버퍼(WCB)(860))을 통과할 수 있는, 제로들의 캐시 라인을 운반하지 않지만 캐시 라인 크기의 제로들의 기입을 나타내는 새로운 커맨드(예컨대, 마이크로-op, 제어 신호, 마이크로-명령어)를 구현한다. 그와 같이, 캐시 라인 크기가 발행 에이전트의 기본적으로 지원되는 데이터 폭보다 넓은(예컨대, 32 바이트, 64 바이트) 경우, 제로들의 캐시 라인은 이러한 보다 좁은 구조들로 표현될 수 있다. 제로들의 라인으로의 변환은 (제로 라인 필드 또는 새로운 커맨드/마이크로-op에 의해 표시되는 바와 같은) 제로 라인이 메모리 계층구조에서 보다 하위이고 제로-라인 필드 또는 새로운 커맨드를 지원하지 않는 구조에게 송신되고 있을 때 수행된다(예컨대, 제로의 라인으로의 변환은 제로 라인이 (이상의 기법들 중 다른 것을 수행할 수 있는) 데이터 캐시(840)에게 송신되거나, 기입 결합 버퍼(8600)로부터 송신되거나, L3 캐시에 의해 인터커넥트로 송신되거나, 또는 인터커넥트에 의해 (예컨대, 메모리 제어기를 통해) 다운스트림 메모리로 송신될 때 수행될 수 있다).
다른 예로서, 발행 에이전트가 (그 자체적으로 또는 인터커넥트로부터의 메시지에 응답하여) (전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시의) 트리거링을 수행하는 일부 실시예들에서, 발행 에이전트는 청크들이 동시에 기입되도록 스누프들에 응답하지 않는(또는 청크들이 기입되는 동안 스누프들에 응답하지 않는) 그리고 (보다 이르게가 아니라) 캐시 라인의 크기와 동일하도록 충분한 청크들이 기입된 것에 응답하여 축출되는 제로들의 보다 작은 청크들(예컨대, 한 번에 16 바이트, 한 번에 32 바이트)을 중간 버퍼(예컨대, 저장 큐(820), 기입 결합 버퍼(WCB)(860), 별개의 스테이징 버퍼(도시되지 않음))에 순차적으로 기입하며; 그로써 캐시 라인 제로화 명령어를 원자적으로 구현한다.
다른 양태들
상이한 실시예들은 상이한 순서화(예컨대, 약하게 순서화되는 것, 강하게 순서화되는 것, 약한게 순서화되는 것보다 약한 순서화, 강하게 순서화되는 것보다 강한 순서화)를 사용하여 캐시 라인 제로화 명령어를 구현할 수 있다. 약하게 순서화된 캐시 라인 제로화 명령어의 경우에, 실시예들은 명령어가 자동-축출(auto-evicting)되도록 명령어를 구현할 수 있다.
캐시 라인 제로화 명령어는 그 명령어의 회수 이전에 전부 제로들을 나타내도록 캐시 라인을 구성하지 않도록 구현될 수 있다. 그러한 실시예들에서, 캐시 라인 제로화 명령어가 완료되고 캐시 라인이 모든 판독자들(readers)(예컨대, 펜스 명령어(fence instruction), 잠금 명령어, 아키텍처 직렬화 명령어(architecturally serializing instruction), GO인(강하게 순서화된) 보다 신생의 저장(younger store), GO인(강하게 순서화된 것보다 더 엄격한) 보다 신생의 로드(younger load) 중 하나 이상)에 대해 전부 제로들을 나타내도록 구성되도록 보장하기 위한 메커니즘이 있다.
캐시 라인 제로화 명령어는 페이지 테이블 워크들(page table walks)(가상화 테이블들(예컨대, (A 및 D 비트들이 업데이트될) EPT(Extended Page Tables), 섀도 페이지 테이블들(shadow page tables)을 포함함)의 목적들을 위해 저장(store)과 같이 취급될 수 있고 기입가능하지 않은 경우 오류가 발생할(fault) 것이다.
스누프들을 사용하기 전에 먼저 발행 에이전트의 캐시에 기입하려고 시도하는 실시예들
도 41은 스누프들을 사용하기 전에 먼저 발행 에이전트의 캐시에 기입하려고 시도하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다. 앞서 논의된 바와 같이, 제1 에이전트(3900)는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 야기하기 위해 실행되는 명령어를 디코드하고 실행하도록 되어 있다(블록(4110)). 명령어의 디코딩 및 실행에 응답하여, 제1 에이전트는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 개시하기 위한 기입 커맨드를, 제1 에이전트에 커플링된 코히런트 캐시들 중 하나(예컨대, L1 캐시(3905))에게, 발행하도록 되어 있다(이 경우에, 제1 에이전트는 발행 에이전트라고도 지칭됨)(블록(4112)). 일부 실시예들에서, 제1 에이전트는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 야기하기 위해 실행되는 명령어를 디코드하기 위한 디코드 유닛(예컨대, 디코더(140), 디코더(314))을 포함한다. 제1 에이전트는, 디코드 유닛에 응답하여, 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 개시하기 위한 커맨드를 발행하기 위한 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340))을 또한 포함한다.
커맨드가 발행되는 캐시(예컨대, L1 캐시(3905))의 캐시 라인에 대해 히트가 있고(블록(4114)), 그 캐시 라인의 캐시 일관성 프로토콜 상태가 다른 캐시들로 브로드캐스팅하는 일 없이 캐시 라인을 수정할 권한을 캐시에 부여하는 것(예컨대, "수정됨" 또는 "배타적")일 때(블록(4116)), 그 캐시는 전부 제로들을 나타내도록 캐시 라인을 구성하고 스누프들을 억제하도록 되어 있다(블록(4118)). 상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있다. 일부 실시예들에서, 커맨드가 발행되는 캐시(예컨대, L1 캐시(3905))의 캐시 라인에 대해 히트가 있는 경우(블록(4114)), 캐시 라인은 하나 이상의 다른 캐시 일관성 프로토콜 상태(예컨대, "소유됨", "포워드" 또는 "공유" 중 하나 이상)에 대해 여전히 제로화되어 있다. 이것이 행해진 임의의 상태에 대해, 제어는 블록(4119)으로 넘어가고; 이것이 행해지지 않은 임의의 상태에 대해, 제어는 블록(4120)으로 넘어간다. 따라서, "수정됨", "배타적", 및 "유효하지 않음"이 아닌 임의의 상태에 대해 제어가 블록(4119)으로 넘어가는 실시예들에서, 블록(4120)은 구현되지 않으며; 그 반대도 마찬가지이다. 그렇지만, 제어가 상태에 따라 블록(4119 또는 4120)으로 넘어가는 실시예들이 구현될 수 있다. 블록(4119)에서, 그 캐시는 전부 제로들을 나타내도록 캐시 라인을 구성하도록 되어 있으며; 블록(4119)으로부터, 제어는 캐시가 (실시예에 따라, 다음 캐시 레벨로, 또는 스누프들(예를 들어, write-update 스누프(write-zero 스누프 또는 write-and-zero 스누프라고도 지칭됨), write-invalidate 스누프(invalidate-even-if-modified 스누프라고도 지칭됨), 또는 무효화하고 라이트 백하도록 지시하는 스누프(writeback-and-invalidate 스누프라고도 지칭됨)을 발행하기 위한 인터커넥트로) 인터커넥트를 향해 기입 커맨드를 발행하도록 되어 있는 블록(4122)(본 명세서에서 나중에 보다 상세히 설명됨)으로 넘어간다. 다음 캐시 레벨 또는 인터커넥트에 전달되는 기입 커맨드가 "수정됨" 또는 "배타적" 이외의 상태를 갖는 라인이 전부 제로들을 나타내도록 구성되었음을 나타내는 것이 가능하다. 이러한 수정된 기입 커맨드의 하나의 사용은 "공유" 라인이 전부 제로들로 구성되고 그의 상태가 "수정됨" 또는 "소유됨" 중 어느 하나로 변경되는 경우, write-update 스누프가 송출되지 않도록 하는 것이다. 그 상황에서, 인터커넥트는 상이한 스누프 타입(예컨대, write-invalidate 스누프 또는 writeback-and-invalidate 스누프)을 발행할 수 있다. 블록(4120)에서, 캐시는 그 캐시 라인의 캐시 일관성 프로토콜 상태를 "유효하지 않음"로 변경하도록 되어 있고 제어는 블록(4122)으로 넘어간다. 캐시 미스가 있는 경우(블록(4114)), 제어는 블록(4122)으로 넘어간다.
포워드 또는 소유됨 상태에 관한 특정 예로서, 발행 에이전트의 캐시가 포워드 또는 소유됨 상태에 있는 캐시 라인을 가질 때, 그 캐시 라인은 공유 상태에 있는 다른 캐시들에 있을 수 있다. 그와 같이, 블록(4119)에서 캐시 라인이 제로화되는 경우, 공유 상태에 있는 그 다른 캐시 라인들을 무효화하기 위해 또는 공유 상태에 있는 그 다른 캐시 라인들을 전부 제로들을 나타내도록 구성하기 위해 스누프가 송신될 수 있다. 대안적으로, 포워드 또는 소유됨 상태에 있는 캐시 라인은 무효화될 수 있고(또는 클린 축출 및 무효화(clean evict and invalidate))(블록(4120)), 수정되고 제로화되는 또는 소유되고 제로화되는 새로운 라인이 생성될 수 있다. 제로화되는 그 새로운 라인은 포워드 또는 소유됨 상태에서(예컨대, 그 캐시의 상이한 세트 또는 웨이에서) 발견된 캐시 라인과 동일한 캐시에 삽입될 수 있거나(채워질 수 있거나), 상이한 캐시에 삽입될 수 있다(예컨대, 캐시 라인이 L2 캐시 또는 L3 캐시에서 포워드 또는 소유됨 상태에서 발견된 경우, 캐시 라인은 무효화될 수 있고 수정되고 제로화된 또는 소유되고 제로화된 새로운 라인이 L1 캐시에 생성될 수 있다).
블록(4122)에서, 캐시는 인터커넥트를 향해 기입 커맨드를 발행하도록 되어 있다. 이 기입 커맨드는 인터커넥트(3920)에게 직접 발행될 수 있거나, 제1 에이전트의 하나 이상의 하위 레벨의 캐시들로 송신될 수 있다. 예들로서: 1) 일부 실시예들에서, 기입 커맨드는 인터커넥트에게 직접 발행되며(즉, 캐시 계층구조의 하위 레벨들에 있는 임의의 캐시들을 스킵함 - 예컨대, L1 캐시(3905)로부터 직접 인터커넥트(3920)로 -, 임의의 하위 레벨 캐시들(예컨대, L2 캐시(OQA10), L3 캐시(OQA15))을 스킵함 - 이 경우에, 기입 커맨드는 제1 에이전트의 데이터 L1 캐시에 대해 사용되는 반면, 스누프들(다음에 설명됨)은 제1 에이전트의 명령어 L1 캐시, L2 캐시 및 L3 캐시(보다 구체적으로는, 구현되는 경우 L3 캐시 슬라이스(3916))에 대해서는 물론, 제2 에이전트의 캐시들에 대해 사용됨); 2) 일부 실시예들에서, 상기를 반복하는 기입 커맨드는 L2 캐시(3910)에게 발행되고, 그것이 전부 제로들을 나타내도록 캐시 라인을 구성하지 않는 경우, 기입 커맨드를 직접 인터커넥트(3920)에게 발행하며 - 이 경우에, 기입 커맨드는 제1 에이전트의 L1 캐시 및 L2 캐시에 대해 사용되는 반면, 스누프들(다음에 설명됨)은 제1 에이전트의 L3 캐시(보다 구체적으로, 구현되는 경우 L3 캐시 슬라이스(3916)) 및 제2 에이전트의 캐시들에 대해 사용됨 -; 3) 일부 실시예들에서, 상기를 반복하는 기입 커맨드는 L2 캐시(3910)에게 발행되고, 그것이 전부 제로들을 나타내도록 캐시 라인을 구성하지 않는 경우, 기입 커맨드를 L3 캐시(3915)(보다 구체적으로는, 구현되는 경우 L3 캐시 슬라이스(3916))에게 발행하며, 그것이 전부 제로들을 나타내도록 캐시 라인을 구성하지 않는 경우, 인터커넥트(3920)에게 발행한다 - 이 경우에, 기입 커맨드는 제1 에이전트의 캐시들에 대해 사용되는 반면, 스누프들(다음에 설명됨)은 제2 에이전트의 캐시들에 대해 사용된다. 특정 실시예들에서, 기입 커맨드들이 발행되는 캐시(들)는, 앞서 논의된 기입 커맨드들에 응답하여, 캐시 히트들이 있는지 여부를 결정하고, 전부 제로들을 나타내도록 캐시 라인들을 구성하며(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음), 캐시 미스들 시에 인터커넥트를 향해 기입 커맨드들을 발행하도록 구현된 캐시 제어기를 포함한다. 하나의 특정 예에서, 수정된, 배타적인, 그리고/또는 소유된 (발행 에이전트의) L2 캐시(3910)에서, 캐시 라인 히트에 응답하여, L2 캐시는 태스크를 L1 캐시로 포워딩하는 것에 의해 전부 제로들을 나타내도록 캐시 라인을 구성하도록 구현된다.
인터커넥트(3920)의 스누프 제어기(3925)는, 기입 커맨드에 응답하여, 캐시 라인을 저장하고 있을 수 있는 임의의 캐시들을 찾아내기 위해 스누핑 프로세스(블록(4190))를 개시하도록 구현된다. 스누핑 프로세스(4190)를 구현하기 위해, 스누프 제어기(3925)는 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중의 그 코히런트 캐시들(환언하면, 히트가 있는지가 결정되어야 하는 코히런트 캐시들 중의 그 코히런트 캐시들)에게 스누프를 발행하도록 (예컨대, 스누프 생성기(3926)를 통해) 구현된다(블록(4126)). 일부 실시예들에서, 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들은: 1) 기입 커맨드가 이전에 발행되지 않은; 그리고 2) 인터커넥트(3920)에 스누프 필터(도시되지 않음)를 구현하는 실시예들에서, 스누프 필터가 캐시가 라인을 포함할 수 있음을 나타내는(즉, 스누프 필터가 스누프를 억제하지 않는) 코히런트 캐시들 중의 그 코히런트 캐시들이다. 이것은 제2 에이전트(3901)를 인터커넥트(3920)에 커플링시키는 하나 이상의 레벨의 캐시(예컨대, L1 캐시(3906), L2 캐시(3911), L3 캐시(3915))는 물론; 제1 에이전트(3900)(발행 에이전트)를 인터커넥트(3920)에 커플링시키는, 기입 커맨드를 수신하지 않았던(즉, 스킵되었던 캐시들), 그리고 인터커넥트(3920)에 스누프 필터(도시되지 않음)를 구현하는 실시예들에서, 스누프 필터가 라인을 포함할 수 있음을 나타내는(즉, 스누프 필터가 스누프를 억제하지 않는) 캐시들 중 임의의 것(예컨대, L2 캐시(3910), L3 캐시(3915))을 포함할 수 있다. 스누프가 제1 에이전트를 인터커넥트에 커플링시키는 캐시들 중 하나 이상에게 발행되는 실시예들에서, 각각의 그러한 스누프는 백 스누프(back snoop)라고도 지칭될 수 있다. 스누핑 프로세스(4190)의 일부로서, 상이한 실시예들은 상황에 따라 상이한 타입의 스누프들을 발행하거나, 단지 하나의 타입의 스누프를 발행하도록 구현될 수 있다. 본 명세서에서 나중에 보다 상세히 논의되는 바와 같이, 사용될 수 있는 각종의 가능한 스누프 타입들(예컨대, write-update 스누프(write-zero 스누프 또는 write-and-zero 스누프라고도 지칭됨), write-invalidate 스누프(invalidate-even-if-modified 스누프라고도 지칭됨), 무효화하고 라이트 백할 것을 나타내는 스누프(writeback-and-invalidate 스누프라고도 지칭됨), 히트하는 임의의 캐시 라인을 라이트 아웃하지만 데이터를 제1 에이전트로 다시 송신하지 않고 데이터가 다운스트림 메모리로부터 판독되는 것을 초래하지 않는 스누프, 종래 기술의 스누프(예컨대, RFO))이 있다. 구체적으로는, write-update 스누프들이 사용되는 경우, 스누프 제어기(3925)는 캐시 라인 크기의 기입이 스누핑 프로세스(4190)의 일부로서 write-update 스누프들(파선 블록(4128)으로서 도시됨) 중 하나에 응답하여 캐시들 중 하나에 의해 수행되었는지를 결정하도록 또한 구현되고; 만약 그렇다면, 프로세스는 완료되고(블록(4130)); 그렇지 않은 경우, 제어는 블록(4132)으로 넘어간다. 블록(4128)은 다른 타입의 스누프들이 스누핑 프로세스(4190)를 위해 사용될 때 사용되지 않기 때문에 파선으로 되어 있다.
기입 커맨드 및 스누프들은 캐시들 중 하나 이상에 제로화될 데이터를 포함하는 캐시 라인이 있는 경우들을 핸들링하도록 동작한다. 캐시 라인 크기의 제로들의 기입은 (앞서 설명된 바와 같이) 기입 커맨드에 응답하여 캐시들 중 하나에 의해, 또는, write-update 스누프들을 발행하는 실시예들에서, 이하에서 보다 상세히 설명되는 바와 같이 write-update 스누프들 중 하나에 응답하여 캐시들 중 하나에 의해 수행되었을 수 있다. 캐시 라인 크기의 제로들의 기입이 캐시들 중 임의의 것에 의해 수행되지 않은 경우, 블록(4132)에서, 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 기입 생성기(3929)를 통해), 또는 제1 에이전트(발행 에이전트)는 인터커넥트(3920)로부터의 메시지에 응답하여, 코히런트 캐시들(예컨대, L1 캐시(3905), L2 캐시(3910), L3 캐시(3915)) 중 하나 이상에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 메모리 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다. 앞서 그리고 이하에서 보다 상세히 살펴보는 바와 같이, 특정 실시예들에서, 스누프 제어기(3925)는 이러한 액션을 책임지고 있는 스누프 응답기(3927)(및 임의로 기입 변환기(3928) 및 기입 생성기(3929))를 포함한다. 특정 실시예들에서, 제1 에이전트는 (예컨대, 실행 유닛(메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 이 액션에서 (있는 경우) 그의 역할을 수행한다. 대안의 실시예에서, 인터커넥트(3920)는 다운스트림 메모리에의 제로들의 기입을 야기하도록 메모리 제어기에 지시한다.
"전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시를 트리거링하는 것"이라는 제목의 섹션에서 앞서 설명된 바와 같이, 상이한 실시예들은 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시를 트리거링하는 것을 야기하도록 발행 에이전트를 상이하게 구현할 수 있다(예컨대, 캐시 라인이 발행 에이전트의 기본적으로 지원되는 데이터 폭보다 넓은(예컨대, 32 바이트, 64 바이트) 경우 원자성을 보장하기 위해, 다른 구조들(예컨대, 중간 버퍼들)에서 제로-라인 필드를 구현하거나, 중간 버퍼들을 통과할 수 있는 (제로들의 캐시 라인을 전달하지 않지만 캐시 라인 크기의 제로들의 기입을 나타내는) 새로운 커맨드를 구현하거나, 또는 청크들이 동시에 기입되도록 스누프들에 응답하지 않는(또는 청크들이 기입되는 동안 스누프들에 응답하지 않는) 그리고 (보다 이르게가 아니라) 캐시 라인의 크기와 동일하도록 충분한 청크들이 기입된 것에 응답하여 축출되는 제로들의 보다 작은 청크들(예컨대, 한 번에 16 바이트, 한 번에 32 바이트)의 중간 버퍼(예컨대, 저장 큐(8200), 기입 결합 버퍼(WCB)(8600), 별개의 스테이징 버퍼(도시되지 않음))에의 순차적 기입들을 구현한다).
코히런트 캐시들의 스누프들에 의존하는 실시예들
도 42는 코히런트 캐시들의 스누프들에 의존하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다(그것들은 발행 에이전트의 캐시에 기입하려고 먼저 시도하지 않는다). 앞서 논의된 바와 같이, 제1 에이전트(3900)는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 야기하기 위해 실행되는 명령어를 디코드하고 실행하도록 되어 있다(블록(4210)). 명령어의 디코딩 및 실행에 응답하여, 제1 에이전트는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 개시하기 위한 커맨드를, 인터커넥트(3920)에게, 발행하도록 되어 있다(이 경우에, 제1 에이전트는 발행 에이전트라고도 지칭됨)(블록(4212)). 일부 실시예들에서, 제1 에이전트는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 야기하기 위해 실행되는 명령어를 디코드하기 위한 디코드 유닛(예컨대, 디코더(140), 디코더(314))을 포함한다. 제1 에이전트는, 디코드 유닛에 응답하여, 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 개시하기 위한 커맨드를 발행하기 위한 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340))을 또한 포함한다.
제1 에이전트/발행 에이전트(3900)로부터의 커맨드는 인터커넥트(3920)에게 발행되고(블록(4212)), 인터커넥트(3920)는, 커맨드에 응답하여, 캐시 라인을 저장하고 있을 수 있는 임의의 캐시들을 찾아내기 위해 스누핑 프로세스(블록(4290))를 개시하도록 구현된다. 스누핑 프로세스(4290)를 구현하기 위해, 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)를 통해) 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중의 그 코히런트 캐시들(환언하면, 히트가 있는지가 결정되어야 하는 코히런트 캐시들 중의 그 코히런트 캐시들)에게 스누프를 발행하도록 (예컨대, 스누프 생성기(3926)를 통해) 구현된다(블록(4226)). 일부 실시예들에서, 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들은 코히런트 캐시들 중의 그 코히런트 캐시들: 1) 스누프 필터(도시되지 않음)를 인터커넥트(3920)에 구현하지 않는 실시예들에서 코히런트 캐시들(예컨대, L1 캐시(3905), L2 캐시(3910), L1 캐시(3906), L2 캐시(3911), L3 캐시(3915)) 중 임의의 것; 또는 2) 그러한 스누프 필터를 구현하는 실시예들에서, 인터커넥트(3920) 내의 스누프 필터(도시되지 않음)가 캐시가 라인을 포함할 수 있음을 나타내는(즉, 스누프 필터가 스누프를 억제하지 않는) 코히런트 캐시들 중 그 코히런트 캐시들이다. 스누프가 제1 에이전트를 인터커넥트에 커플링시키는 캐시들 중 하나 이상에 발행되는 실시예들에서, 각각의 그러한 스누프는 백 스누프라고도 지칭될 수 있다. 이전과 같이, 스누핑 프로세스(4290)의 일부로서, 상이한 실시예들은 상황에 따라 상이한 타입의 스누프들을 발행하거나, 단지 하나의 타입의 스누프를 발행할 수 있다. 본 명세서에서 나중에 보다 상세히 논의되는 바와 같이, 사용될 수 있는 각종의 가능한 스누프 타입들(예컨대, write-update 스누프(write-zero 스누프 또는 write-and-zero 스누프라고도 지칭됨), write-invalidate 스누프(invalidate-even-if-modified 스누프라고도 지칭됨), 무효화하고 라이트 백하라고 나타내는 스누프(writeback-and-invalidate 스누프라고도 지칭됨), 히트하는 임의의 캐시 라인을 라이트 아웃하지만 데이터를 제1 에이전트로 다시 송신하지 않고 데이터가 다운스트림 메모리로부터 판독되는 것을 초래하지 않는 스누프, 종래 기술의 스누프(예컨대, RFO))이 있다. 구체적으로는, write-update 스누프들이 사용되는 경우, 스누프 제어기(3925)는 캐시 라인 크기의 기입이 스누핑 프로세스(4290)의 일부로서 write-update 스누프들(파선 블록(4228)으로서 도시됨) 중 하나에 응답하여 캐시들 중 하나에 의해 수행되었는지를 결정하도록 또한 구현되고; 만약 그렇다면, 프로세스는 완료되고(블록(4230)); 그렇지 않은 경우, 제어는 블록(4232)으로 넘어간다. 블록(4228)은 다른 타입의 스누프들이 스누핑 프로세스(4290)를 위해 사용될 때 사용되지 않기 때문에 파선으로 되어 있다.
대안의 실시예에서, 블록(4212)은 제1 에이전트가 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중 그 코히런트 캐시들에게 스누프 커맨드를 발행하도록 구현되는 것으로 대체된다(이 경우에, 블록(4226)은 존재하지 않고, 흐름은 write-update 스누프들을 사용하는 실시예들에서 블록(4228)으로 또는 그렇지 않은 경우 블록(4232)으로 넘어간다).
스누프들은 캐시들 중 하나 이상에 제로화될 데이터를 포함하는 캐시 라인이 있는 경우들을 핸들링하도록 동작한다. write-update 스누프들을 발행하는 실시예들에서, 캐시 라인 크기의 제로들의 기입은 캐시들 중 하나 이상에 의해 수행되었을 수 있다. 캐시 라인 크기의 제로들의 기입이 캐시들 중 임의의 것에 의해 수행되지 않은 경우, 블록(4232)에서, 제1 에이전트는 그 자체적으로, 인터커넥트(3920)는 (예컨대, 기입 생성기(3929)를 통해), 또는 제1 에이전트는 인터커넥트(3920)로부터의 메시지에 응답하여, 캐시들(예컨대, L1 캐시(3905), L2 캐시(3910), L3 캐시(3915)) 중 하나 이상에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다. 앞서 그리고 이하에서 보다 상세히 살펴보는 바와 같이, 특정 실시예들에서, 스누프 제어기(3925)는 이러한 액션에서 (있는 경우) 그의 역할을 수행하기 위한 스누프 응답기(3927)(및 임의로 기입 변환기(3928) 및 기입 생성기(3929))를 포함한다. 특정 실시예들에서, 제1 에이전트는 (예컨대, 실행 유닛(메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 이 액션에서 (있는 경우) 그의 역할을 수행한다. 대안의 실시예에서, 인터커넥트(3920)는 다운스트림 메모리에의 제로들의 기입을 야기하도록 메모리 제어기에 지시한다.
"전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시를 트리거링하는 것"이라는 제목의 섹션에서 앞서 설명된 바와 같이, 상이한 실시예들은 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시를 트리거링하는 것을 야기하도록 발행 에이전트를 상이하게 구현할 수 있다(예컨대, 캐시 라인이 발행 에이전트의 기본적으로 지원되는 데이터 폭보다 넓은(예컨대, 32 바이트, 64 바이트) 경우 원자성을 보장하기 위해, 다른 구조들(예컨대, 중간 버퍼들)에서 제로-라인 필드를 구현하거나, 중간 버퍼들을 통과할 수 있는 (제로들의 캐시 라인을 전달하지 않지만 캐시 라인 크기의 제로들의 기입을 나타내는) 새로운 커맨드를 구현하거나, 또는 청크들이 동시에 기입되도록 스누프들에 응답하지 않는(또는 청크들이 기입되는 동안 스누프들에 응답하지 않는) 그리고 (보다 이르게가 아니라) 캐시 라인의 크기와 동일하도록 충분한 청크들이 기입된 것에 응답하여 축출되는 제로들의 보다 작은 청크들(예컨대, 한 번에 16 바이트, 한 번에 32 바이트)의 중간 버퍼(예컨대, 저장 큐(8200), 기입 결합 버퍼(WCB)(8600), 별개의 스테이징 버퍼(도시되지 않음))에의 순차적 기입들을 구현한다).
상이한 타입의 스누프들
이전에 살펴본 바와 같이, 스누핑 프로세스(4190) 또는 스누핑 프로세스(4290)의 일부로서, 상이한 실시예들은 상황에 따라 상이한 타입의 스누프들을 발행하거나, 단지 하나의 타입의 스누프를 발행할 수 있다. 사용될 수 있는 각종의 가능한 스누프 타입들(예컨대, write-update 스누프(write-zero 스누프 또는 write-and-zero 스누프라고도 지칭됨), write-invalidate 스누프, 무효화하고 라이트 백할 것을 나타내는 스누프(invalidate-even-if-modified 스누프라고도 지칭됨), 히트하는 임의의 캐시 라인을 라이트 아웃하지만 데이터를 제1 에이전트로 다시 송신하지 않고 데이터가 다운스트림 메모리로부터 판독되는 것을 초래하지 않는 스누프, 종래 기술의 스누프(예컨대, RFO))이 있다. 이전에 살펴본 바와 같이, 이러한 상이한 타입의 스누프들 중 임의의 것은 도 41 및 도 42와 관련하여 논의된 상기 실시예들 중 임의의 것과 함께 사용될 수 있다. 상이한 타입의 스누프들에 관한 추가 상세가 이제 기술될 것이다.
Write-update 스누프들: 도 43은 스누프 프로세스(4190 또는 4290)를 구현하기 위해 write-update 스누프들(write-zero 스누프들 또는 write-and-zero 스누프들이라고도 지칭됨)을 사용하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다. 도 41 및 도 42의 맥락에서, 흐름은, 제각기, 블록(4124) 또는 블록(4212)으로부터, write-update 스누프를 사용하여 블록(4126 또는 4226)을 수행하는 블록(4326)으로 넘어간다. 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 생성기(3926)를 통해) 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중의 그 코히런트 캐시들(환언하면, 히트가 있는지가 결정되어야 하는 코히런트 캐시들 중의 그 코히런트 캐시들)에게 write-update 스누프들을 발행하도록 구현된다(블록(4326)). write-update 스누프가 발행되는 캐시(예컨대, 제1 에이전트의 L1 캐시, L2 캐시, 및/또는 L3 캐시 슬라이스, 및 제2 에이전트의 L1 캐시, L2 캐시, 및 L3 캐시 슬라이스)의 캐시 라인에 대한 히트가 있을 때(블록(4340)), 그 캐시는: 1) 히팅 캐시 라인(hitting cache line)의 캐시 일관성 프로토콜 상태가 "수정됨"(그리고 일부 실시예들에서, "포워드", "배타적", "소유됨", 및/또는 "공유" 중 하나 이상)인 경우(블록(4342)), 전부 제로들을 나타내도록 캐시 라인을 구성하고(블록(4344))(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 제로화되었음을 나타내는 응답 메시지를 인터커넥트(3920)에게 발행하도록 되어 있고 (공유 상태에 있는 히팅 캐시 라인의 제로화를 지원하는 일부 실시예들에서, 응답 메시지는 또한 - modified-and-zero 또는 owned-and-zero 대 shared-and-zero와 같은 - 캐시 라인의 상태를 구별하고 (후자는 원래의 상태가 "공유"이고 캐시가 전부 제로들을 나타내도록 캐시 라인을 구성했으며 그의 상태가 여전히 "공유"임을 나타냄); 공유 상태에 있는 캐시 라인의 제로화를 지원하는 대안의 실시예에서, 원래의 상태가 "공유"였고 캐시가 전부 제로들을 나타내도록 캐시 라인을 구성했으며 그의 상태가 여전히 "공유"일 때 (블록(4350)에서와 같이) 제로화되지 않았음을 나타내는 응답 메시지가 송신됨))(4346); 2) 그렇지 않은 경우, 그 캐시 라인의 캐시 일관성 프로토콜 상태를 "유효하지 않음"으로 구성하고(블록(4328)), 제로화되지 않았음을 나타내는 응답 메시지를 인터커넥트에게 발행하도록(블록(4350)) 되어 있다. write-update 스누프가 발행되는 캐시의 캐시 라인에 대한 히트가 없을 때(블록(4340)), 캐시는 제로화되지 않았음을 나타내는 응답 메시지를 인터커넥트에게 발행한다(블록(4350)). 따라서, 일부 실시예들에서, 코히런트 캐시는 수정됨, 소유됨, 배타적, 및 포워드 상태들 중 임의의 것에 있는 캐시 라인을 히트하는 기입 커맨드 또는 write-and-zero 스누프가 캐시로 하여금 캐시 라인을 제로화되도록 구성하게 하도록(그리고 그의 상태를 수정됨(modified-and-zeroed) 또는 소유됨(owned-and-zeroed)으로 변경하게 하도록) 구현될 수 있다. 대안의 실시예들에서, 그러한 캐시는 수정됨, 소유됨, 배타적, 및 포워딩 상태들의 서브세트에 대해서만 그렇게 할 수 있고; 이 경우에, 그 캐시는 수정됨, 소유됨, 배타적 또는 포워딩 상태들에 있는 그리고 modified-and-zeroed 또는 owned-and-zeroed로 변경되지 않는 임의의 히트 캐시 라인이 write-and-zero 스누프에 응답하여 유효하지 않음 상태로 변경되게 할 것이다. 그와 같이, 일부 실시예들에서, 코히런트 캐시들의 전부 또는 서브세트는, 수정됨, 배타적, 소유됨, 또는 포워드 상태들의 전부 또는 서브세트에 대해, 그 캐시에서 히트하는 기입 커맨드 또는 write-and-update (write-and-zero라고도 함) 스누프에 응답하여 캐시 라인이 제로화되게 하도록(그리고 수정됨(modified-and-zeroed) 또는 소유됨(owned-and-zeroed)으로의 그의 상태 변화를 야기하도록) 구현된다. 공유 상태에 있는 히팅 캐시 라인의 제로화 및 그것을 공유 상태로 두는 것을 지원하는 실시예들은, 다른 캐시들에서 히트된 임의의 수정된, 배타적, 소유된 또는 포워드 라인이 Modified and Zeroed로 변경되지 않고 Owned and Zeroed 또는 무효화됨으로 변경될 때만, 그렇게 할 것이다. 특정 실시예들에서, write-update 스누프에 응답하도록 구현된 캐시는, (예컨대, 스누프 제어기(4053)를 통해) write-update 스누프들에 응답하여, 캐시 히트들이 있는지 여부를 결정하고, 전부 제로들을 나타내도록 히트하는 캐시 라인들을 구성하며(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음), 응답 메시지들을 인터커넥트(3920)에게 발행하기 위한 캐시 제어기(4051)를 포함한다.
write-update 스누프들을 발행한 후에, 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 응답기(3927)를 통해) 각자의 응답 메시지들의 수신을 추적하도록 구현된다(블록(4352))(예컨대, 일 실시예에서 스누프 생성기(3926)는 스누프 응답기(3927)가 각자의 응답 메시지들의 수신을 추적하기 위한 정보를 스누프 응답기(3927)에게 표시한다). 블록(4352)으로부터, 제어는 도 41 또는 도 42의 일 실시예가 구현되고 있는지에 따라 블록(4128) 또는 블록(4228)으로 넘어간다. 캐시 라인 크기의 제로들의 기입은 write-update 스누프들 중 하나에 응답하여 캐시들 중 하나에 의해 수행되었을 수 있다(그렇지만, "공유" 상태에 있는 캐시 라인의 제로화를 구현하고, 응답 메시지들 중 어느 것도 캐시 라인들 중 하나가 owned-and-zero 또는 modified-and-zero임을 반영하지 않는 실시예들에서, 캐시 라인 제로들의 기입은 write-update 스누프들 중 하나에 응답하여 캐시들 중 하나에 의해 수행된 것으로 간주되지 않는다). 캐시 라인 크기의 제로들의 기입이 캐시들 중 임의의 것에 의해 수행되지 않은 경우(블록(4128) 및 블록(4228))(모든 응답 메시지들이 제로화되지 않았음을 나타내는 경우; 또는 "공유" 상태에 있는 캐시 라인의 제로화를 구현하고, 응답 메시지들 중 어느 것도 캐시 라인들 중 하나가 owned-and-zero 또는 modified-and-zero인 것을 반영하지 않는 실시예들에서), 블록(4132) 또는 블록(4232) 중 어느 하나가 수행된다 - 즉, 인터커넥트(3920)는 (예컨대, 스누프 제어기(QO25)의 기입 생성기(3929)를 통해), 또는 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 인터커넥트(3920)로부터의 메시지에 응답하여, 캐시들(예컨대, L1 캐시, L2 캐시, L3 캐시) 중 하나에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다.
앞서 예시된 바와 같이, write-update 스누프의 사용은, RFO 연산의 사용과는 달리, 라인이 판독되어 발행 에이전트에게 리턴되는 것을 요구하지 않고 데이터의 소유권이 발행 에이전트에게 부여되는 것을 요구한다는 점에서 유리하다(4340 및 4342의 조건들이 충족될 때, write-update 스누프는 다른 코히런트 에이전트의 캐시에서 캐시 라인이 제로화되게 한다). 따라서, write-update 스누프들을 사용하는 실시예들의 장점은 그것들이 다른 에이전트(예컨대, 제2 에이전트/비-발행 에이전트)의 로컬 캐시를 직접 업데이트할 수 있다는 것이다. 예를 들어, 이것은 - 다른 에이전트가 스핀 온(spin on)하고 있는 변수를 업데이트하는 것과 같은 - 상대적으로 빠른 통신을 가능하게 해준다.
이전에 살펴본 바와 같이, write-update 스누프들은 도 41 및 도 42의 실시예들과 함께 사용될 수 있다. 예로서, 도 41로부터의 실시예들 중 하나에서 write-update 스누프들을 구현하는 하나의 특정 실시예가 설명될 것이다. 이 특정 실시예에서, 발행 에이전트(3900)는 먼저 발행 에이전트(3900)의 L1 캐시(3905)에 기입하려고 시도하고; 스누프들이 요구되는 경우, 인터커넥트(3920)는 앞서 설명된 바와 같이 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중의 그 코히런트 캐시들에게 write-update 스누프들을 발행한다. 따라서, L1 캐시들은 앞서 설명된 바와 같이 기입 커맨드들에 응답하도록 구현되고; L1 캐시들, L2 캐시들, 및 L3 캐시들(보다 구체적으로는, 구현되는 경우 L3 캐시 슬라이스들)은 앞서 설명된 바와 같이 write-update 스누프들에 응답하도록 구현되고; 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 생성기(3926)를 통해) 기입 커맨드들에 응답하여 write-update 스누프들을 발행하도록 그리고 앞서 설명된 바와 같이 (예컨대, 스누프 제어기(3925)의 스누프 응답기(3927)를 통해) 응답 메시지들에 응답하도록 구현되고; 인터커넥트(3920)는 (예컨대, 스누프 제어기(QO25)의 기입 생성기(3929)를 통해), 또는 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 인터커넥트로부터의 메시지에 응답하여, 캐시들 중 하나(예컨대, 제1 에이전트의 L1 캐시(3905), L2 캐시(3910), 또는 L3 캐시(3915)(보다 구체적으로는, 구현되는 경우 L3 캐시 슬라이스(3916)))에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하도록 구현되거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 메모리 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다.
Write-invalidate 스누프들: 도 44는 스누프 프로세스(4190 또는 4290)를 구현하기 위해 write-invalidate 스누프들(invalidate-even-if-modified 스누프들이라고도 지칭됨)을 사용하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다. 도 41 및 도 42의 맥락에서, 흐름은, 제각기, 블록(4124) 또는 블록(4212)으로부터, write-invalidate 스누프들을 사용하여 블록(4126 또는 4226)을 수행하는 블록(4426)으로 넘어간다. 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 생성기(3926)를 통해) 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중의 그 코히런트 캐시들(환언하면, 히트가 있는지가 결정되어야 하는 코히런트 캐시들 중의 그 코히런트 캐시들)에게 write-invalidate 스누프들을 발행하도록 구현된다(블록(4426)). write-invalidate 스누프가 발행되는 캐시(예컨대, 제1 에이전트의 L1 캐시, L2 캐시, 및/또는 L3 캐시 슬라이스, 및 제2 에이전트의 L1 캐시, L2 캐시, 및 L3 캐시 슬라이스)의 캐시 라인에 대한 히트가 있을 때(블록(4440)), 그 캐시는 (현재 상태가 "수정됨"이더라도) 캐시 일관성 프로토콜 상태가 "유효하지 않음"을 나타내게 하도록 되어 있고(블록(4448)); 무효화가 고정 시간 내에 완료되는 경우 캐시는 전부 제로들을 나타내도록 캐시 라인을 구성할 필요가 없거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 응답 메시지를 인터커넥트에게 발행할 필요가 없다(무효화가 고정된 시간 내에 완료되지 않는 경우, 일 실시예는 스누핑된 캐시들로 하여금 스누프가 완료되었음을 나타내는 응답 메시지들을 송신하게 한다). write-invalidate 스누프가 발행되는 캐시의 캐시 라인에 대한 히트가 없을 때(블록(4440)), 그 캐시는 일 실시예에서 아무것도 하지 않는다(블록(4430)).
그에 부가하여, 도 41 및 도 42의 맥락에서, 흐름은, 제각기, 블록(4124) 또는 블록(4212)으로부터 블록(4132 또는 4232)으로 넘어간다(write-invalidate 스누프들이 사용될 때 블록들(4128 및 4228)은 구현되지 않는다). 블록(4132 또는 4232)에서, 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 그 자체적으로, 인터커넥트(3920)는 (예컨대, 스누프 제어기(QO25)의 기입 생성기(3929)를 통해), 또는 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 인터커넥트로부터의 메시지에 응답하여, 캐시들 중 하나(예컨대, 제1 에이전트의 L1 캐시(3905), L2 캐시(3910), 또는 L3 캐시(3915)(보다 구체적으로는, 구현되는 경우 L3 캐시 슬라이스(3916)))에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다.
앞서 예시된 바와 같이, write-invalidate 스누프의 사용은, RFO 연산의 사용과 달리, 발행 에이전트가 데이터를 제로화할 것이기 때문에, 캐시 라인이 판독되어 발행 에이전트에 리턴되는 것을 요구하지 않는다는 점에서 유리하다.
이전에 살펴본 바와 같이, write-invalidate 스누프들은 도 41 및 도 42의 실시예들과 함께 사용될 수 있다. 예로서, 도 41로부터의 실시예들 중 하나에서 write-invalidate 스누프들을 구현하는 하나의 특정 실시예가 설명될 것이다. 이 특정 실시예에서, 발행 에이전트(3900)는 먼저 발행 에이전트(3900)의 L1 캐시(3905)에 기입하려고 시도하고; 스누프들이 요구되는 경우, 인터커넥트(3920)는 앞서 설명된 바와 같이 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중의 그 코히런트 캐시들에게 write-invalidate 스누프들을 발행한다. 따라서, L1 캐시들은 앞서 설명된 바와 같이 기입 커맨드들에 응답하도록 구현되고; L1 캐시들, L2 캐시들, 및 L3 캐시들(보다 구체적으로는, 구현되는 경우 L3 캐시 슬라이스들)은 앞서 설명된 바와 같이 write-invalidate 스누프들에 응답하도록 구현되고; 인터커넥트(3920)는 기입 커맨드들에 응답하여 write-invalidate 스누프들을 발행하도록 구현되고; 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 그 자체적으로, 인터커넥트(3920)는 (예컨대, 스누프 제어기(QO25)의 기입 생성기(3929)를 통해), 또는 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 인터커넥트로부터의 메시지에 응답하여, 캐시들 중 하나(예컨대, 제1 에이전트의 L1 캐시(3905), L2 캐시(3910), 또는 L3 캐시(3915)(보다 구체적으로는, 구현되는 경우 L3 캐시 슬라이스(3916)))에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하도록 구현되거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 메모리 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다.
무효화하고 라이트 백하는 스누프들: 도 45는 스누프 프로세스(4190 또는 4290)를 구현하기 위해 무효화하고 라이트 백하는 스누프들("writeback-and-invalidate" 스누프들이라고도 지칭됨)을 사용하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다. 도 41 및 도 42의 맥락에서, 흐름은, 제각기, 블록(4124) 또는 블록(4212)으로부터, writeback-and-invalidate 스누프(무효화하고 라이트 백하는 스누프)를 사용하여 블록(4126 또는 4226)을 수행하는 블록(4526)으로 넘어간다. 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 생성기(3926)를 통해) 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중의 그 코히런트 캐시들(환언하면, 히트가 있는지가 결정되어야 하는 코히런트 캐시들 중의 그 코히런트 캐시들)에게 writeback-and-invalidate 스누프들을 발행하도록 구현된다(블록(4526)). 그러한 스누프가 발행되는 캐시(예컨대, 제1 에이전트의 L1 캐시, L2 캐시, 및/또는 L3 캐시 슬라이스, 및 제2 에이전트의 L1 캐시, L2 캐시, 및 L3 캐시 슬라이스)의 캐시 라인에 대한 히트가 있을 때(블록(4540)), 그 캐시는: 1) 캐시 라인의 캐시 일관성 프로토콜 상태가 "수정됨"(블록(4542))(그리고 일부 실시예들에서, "클린-축출")인 경우, 캐시 라인을 인터커넥트(3920)에 라이트 백하도록(블록(4544)); 그리고 그에 관계없이 2) 캐시 라인의 캐시 일관성 프로토콜 상태가 "유효하지 않음"을 나타내게 하도록(블록(4548))(캐시는 전부 제로들을 나타내도록 캐시 라인을 구성할 필요가 없음) 되어 있다. 스누프가 발행되는 캐시의 캐시 라인에 대한 히트가 없을 때(블록(4540)), 캐시는 일 실시예에서 아무것도 하지 않는다(제어는 블록(4552)으로 넘어간다). 특정 실시예들에서, 그러한 스누프에 응답하도록 구현된 캐시는, 그러한 스누프들에 응답하여, 캐시 히트들이 있는지 여부를 결정하고, 수정된 캐시 라인들(예컨대, 히트하고 "수정됨"의 캐시 일관성 프로토콜 상태를 갖는 그 캐시 라인들)을 인터커넥트(3920)에 라이트 백하며, 캐시 라인들의 캐시 일관성 프로토콜 상태들을 "유효하지 않음"으로 수정하기 위한 캐시 제어기(4051)를 포함한다.
스누프들을 발행한 후에, 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 응답기(3927)를 통해) 임의의 각자의 응답 메시지들의 수신을 추적하도록 구현된다(블록(4552))(예컨대, 일 실시예에서 스누프 생성기(3926)는 스누프 응답기(3927)가 임의의 각자의 응답 메시지들의 수신을 추적하기 위한 정보를 스누프 응답기(3927)에게 표시한다). 응답 메시지가 데이터(즉, 수정된 캐시 라인으로부터의 데이터)와 함께 수신되는 경우(블록(4560)), 인터커넥트(3920)는 (예컨대 스누프 제어기(3925)의 기입 변환기(3928)를 통해) 데이터를 제로들로 효과적으로 변환하도록 임의로 구현된다(블록(4562)). 그렇지 않은 경우, 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 기입 생성기(3929)를 통해) 제로 라인을 효과적으로 생성하도록 임의로 구현된다(블록(4564)). 제어는 도 41 또는 도 42의 실시예가 구현되는지에 따라 블록들(4562 및 4564)로부터 블록(4132) 또는 블록(4232) 중 어느 하나로 넘어간다(무효화하고 라이트 백하는 스누프들이 사용될 때 블록들(4128 및 4228)은 구현되지 않는다). 블록(4132 또는 4232)에서, 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 그 자체적으로, 인터커넥트(3920)는 (예컨대, 스누프 제어기(QO25)를 통해), 또는 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 인터커넥트(3920)로부터의 메시지에 응답하여, 캐시들 중 하나(예컨대, L1 캐시, L2 캐시, 또는 L3 캐시)에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다. 일 실시예에서, 블록들(4560 및 4562)은 구현되지 않고, 블록(4564)은 항상 수행된다. 다른 실시예에서, 블록(4562)은 수행되지 않고, 라이트 백된 데이터는 제1 에이전트에게 송신되고, 제1 에이전트는 데이터를 제로화한다. 다른 실시예에서, 블록들(4560, 4562, 및 4564)은 수행되지 않고, 제1 에이전트는 데이터를 제로화한다.
앞서 예시된 바와 같이, 무효화하고 라이트 백하는 스누프의 사용은, RFO 연산의 사용과 달리, 발행 에이전트가 데이터를 제로화할 것이기 때문에, 캐시 라인이 판독되어 발행 에이전트에 리턴되는 것을 요구하지 않는다는 점에서 유리하다.
이전에 설명된 바와 같이, 제1 에이전트가 캐시 라인 경계 상에 정렬된 어드레스에서 캐시 라인 크기의 제로들의 기입을 개시하라는 커맨드를 발행하는 것(예컨대, 블록(4112 또는 4212))에 응답하여 상기가 시작된다. 이전에 기술된 바와 같이, 이 커맨드는 기입 커맨드(예컨대, 블록(4112 또는 4212))의 형태를 취할 수 있다. 다른 실시예들에서, 이 커맨드는 판독 커맨드일 수 있고(예컨대, 블록(4212)); 이 경우에, 캐시들(예컨대, L1 캐시, L2 캐시, L3 캐시) 중 하나에서의 캐시 라인은: 1) 인터커넥트(3920)(예컨대, 스누프 제어기(3925))가 제1 에이전트로부터의 판독 커맨드에 대해 제로 라인을 나타내는 제1 에이전트에 대한 응답(어느 라인이 그의 캐시 일관성 프로토콜 상태가 수정됨 또는 배타적으로 설정될 것인지)으로 응답하도록 구현되는 것; 및 2) 제1 에이전트가 자신의 판독 커맨드의 결과를 제1 에이전트의 아키텍처 레지스터 파일(architectural register file)에 넣는게 아니라 캐시에 넣도록 구현되는 것(캐시(예컨대, L1 캐시(3905))로 하여금 전부 제로들을 나타내도록 캐시 라인을 구성하게 함(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음)에 의해 전부 제로들을 나타내도록 구성되게 된다.
이전에 살펴본 바와 같이, 무효화하고 라이트 백할 것을 나타내는 스누프들은 도 41 및 도 42의 실시예들과 함께 사용될 수 있다. 예로서, 도 41로부터의 실시예들 중 하나에서 그러한 스누프들을 구현하는 하나의 특정 실시예가 설명될 것이다. 이 특정 실시예에서, 발행 에이전트(3900)는 먼저 발행 에이전트(3900)의 L1 캐시(3905)에 기입하려고 시도하고; 스누프들이 요구되는 경우, 인터커넥트(3920)는 앞서 설명된 바와 같이 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중의 그 코히런트 캐시들에게 스누프들을 발행한다. 따라서, L1 캐시들은 앞서 설명된 바와 같이 기입 커맨드들에 응답하도록 구현되고; L1 캐시들, L2 캐시들, 및 L3 캐시들(보다 구체적으로는, 구현되는 경우 L3 캐시 슬라이스들)은 앞서 설명된 바와 같이 스누프들에 응답하도록 구현되며; 인터커넥트(3920)는 기입 커맨드들에 응답하여 스누프들을 발행하도록 구현되고, (예컨대, 스누프 제어기(3925)의 기입 변환기(3928)를 통해) 스누프들에 응답하여 임의의 수신된 데이터를 제로로 효과적으로 변환하도록 임의로 구현되며, 그리고 스누프들에 응답하여 데이터가 수신되지 않는 경우 제로 라인을 효과적으로 생성하도록 임의로 구현되고(예컨대, 스누프 제어기(3925)의 기입 생성기(3929)); 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 그 자체적으로, 인터커넥트(3920)는 (예컨대, 스누프 제어기(QO25)를 통해), 또는 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 인터커넥트로부터의 메시지에 응답하여, 캐시들 중 하나(예컨대, 제1 에이전트의 L1 캐시(3905), L2 캐시(3910), 또는 L3 캐시(3915)(보다 구체적으로는, 구현되는 경우 L3 캐시 슬라이스(3916)))에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하도록 구현되거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 메모리 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다.
히트하는 임의의 캐시 라인을 라이트 아웃하지만 데이터를 제1 에이전트로 다시 송신하지 않고 데이터가 다운스트림 메모리로부터 판독되는 것을 초래하지 않는 스누프들, 또는 라인들을 정상적으로 라이트 아웃하는 종래 기술의 스누프들(RFO): 도 46은 스누프 프로세스(4190 또는 4290)를 구현하기 위해, 히트하는 임의의 캐시 라인을 라이트 아웃하지만 데이터를 제1 에이전트로 다시 송신하지 않고 데이터가 다운스트림 메모리로부터 판독되는 것을 초래하지 않는 스누프들(또는 라인들을 정상적으로 라이트 아웃하는 종래 기술의 스누프들 - 예컨대, RFO 연산)을 사용하는 본 발명의 실시예들을 예시하는 흐름 다이어그램이다. 도 41 및 도 42의 맥락에서, 흐름은, 제각기, 블록(4124) 또는 블록(4212)으로부터, 그러한 스누프를 사용하여 블록(4126 또는 4226)을 수행하는 블록(4526)으로 넘어간다. 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 생성기(3926)를 통해) 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중의 그 코히런트 캐시들(환언하면, 히트가 있는지가 결정되어야 하는 코히런트 캐시들 중의 그 코히런트 캐시들)에게 그러한 스누프들을 발행하도록 구현된다(블록(4626)). 그러한 스누프가 발행되는 캐시(예컨대, 제1 에이전트의 L1 캐시, L2 캐시, 및/또는 L3 캐시 슬라이스, 및 제2 에이전트의 L1 캐시, L2 캐시, 및 L3 캐시 슬라이스)의 캐시 라인에 대한 히트가 있을 때(블록(4640)), 그 캐시는 스누프에 응답하도록 되어 있다(4644). 일부 실시예들에서, 종래 기술의 캐시가 구현된 캐시 일관성 프로토콜에 따라 정상적으로 응답할 것이기 때문에 캐시들은 그러한 스누프들에 응답하도록 구현된다. 일부 실시예들에서 새로운 타입의 스누프가 사용되지만, 다른 실시예들에서 종래 기술의 스누프(예컨대, RFO 연산)가 사용된다 - 이 경우에, 캐시 라인 제로화 명령어를 기존의 프로세서 설계에 통합시키는 것은 경우에 따라 캐시들에 대한 수정을 요구하지 않거나 작은 수정을 요구한다("전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시를 트리거링하는 것"이라는 제목의 상기 섹션을 참조). 스누프가 발행되는 캐시의 캐시 라인에 대한 히트가 없을 때(4640), 캐시는 일 실시예에서 아무것도 하지 않는다(제어는 블록(4652)으로 넘어간다).
스누프들을 발행한 후에, 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 응답기(3927)를 통해) 임의의 각자의 응답 메시지들의 수신을 추적하도록 구현된다(예컨대, 일 실시예에서 스누프 생성기(3926)는 스누프 응답기(3927)가 임의의 각자의 응답 메시지들의 수신을 추적하기 위한 정보를 스누프 응답기(3927)에게 표시한다). 응답 메시지가 데이터(예컨대, 수정된 캐시 라인으로부터의 데이터)와 함께 수신되는 경우(블록(4660)), 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 응답기(3927)를 통해) 발행 에이전트 또는 발행 에이전트의 캐시들 중 임의의 것으로 데이터를 송신하지 않도록 구현된다(블록(4662)). 데이터를 갖는 응답 메시지가 수신되지 않는 경우(4660), 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 응답기(3927)를 통해), 데이터가 필요하지 않기 때문에, 다운스트림 메모리로부터 데이터를 판독하지 않도록 구현된다(블록(4664)).
제어는 도 41 또는 도 42의 실시예가 구현되는지에 따라 블록들(4662 및 4664)로부터 블록(4132) 또는 블록(4232) 중 어느 하나로 넘어간다(그러한 스누프들이 사용될 때 블록들(4128 및 4228)은 구현되지 않는다). 블록(4132 또는 4232)에서, 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340))을 통해) 그 자체적으로(블록(4232)만), 인터커넥트(3920)는 (예컨대, 스누프 제어기(QO25)를 통해), 또는 제1 에이전트는 (예컨대, 실행 유닛(예컨대, 메모리 액세스 유닛(들)(164), 로드-저장 유닛(340)) 또는 다른 하드웨어 구조를 통해) 인터커넥트(3920)로부터의 메시지에 응답하여, 캐시들 중 하나(예컨대, L1 캐시, L2 캐시, 또는 L3 캐시)에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다. 블록(4662)이 구현되지 않고(데이터가 제1 에이전트로 다시 송신되고) 그리고/또는 블록(4664)이 구현되지 않는(다운스트림 메모리가 액세스되고 데이터가 제1 에이전트로 리턴되는) 일 실시예에서, 제1 에이전트는 데이터를 제로화한다.
앞서 예시된 바와 같이, 비록 RFO 연산이 사용되더라도, 예시된 실시예들은, 수정이 전혀 또는 거의 없이, RFO 연산을 지원하는 기존의 캐시 설계에서 작동한다는 점에서 유리하다.
이전에 살펴본 바와 같이, 이러한 타입의 스누프들은 도 41 및 도 42의 실시예들과 함께 사용될 수 있다. 예로서, 도 42로부터의 실시예들 중 하나에서 그러한 스누프들을 구현하는 하나의 특정 실시예가 설명될 것이다. 이 특정 실시예에서, 발행 에이전트(3900)는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 개시하라는 커맨드를 인터커넥트(3920)에게 직접 발행하도록 되어 있고(발행 에이전트/제1 에이전트의 캐시들을 스킵함), 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 생성기(3926)를 통해) 앞서 설명된 바와 같이 캐시 라인을 저장하고 있을 수 있는 코히런트 캐시들 중의 그 코히런트 캐시들에게 스누프들을 발행하도록 구현되고; 응답 메시지가 데이터(즉, 수정된 캐시 라인으로부터의 데이터)와 함께 수신되는 경우, 인터커넥트(3920)는 (예컨대 스누프 제어기(3925)의 스누프 응답기(3927)를 통해) 데이터를 발행 에이전트 또는 발행 에이전트의 임의의 캐시들로 송신하지 않도록 임의로 구현되고; 데이터를 갖는 응답 메시지가 수신되지 않는 경우, 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 응답기(3927)를 통해), 데이터가 필요하지 않기 때문에, 다운스트림 메모리로부터 데이터를 판독하지 않도록 임의로 구현되고; 발행 에이전트(제1 에이전트)는 그 자체적으로, 또는 제1 에이전트는 인터커넥트로부터의 메시지에 응답하여, 캐시들(예컨대, L1 캐시, L2 캐시, L3 캐시) 중 하나에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다. 따라서, 특정 실시예들에서, L1 캐시들, L2 캐시들, 및 L3 캐시들(보다 구체적으로는, 구현되는 경우 L3 캐시 슬라이스들)은 앞서 설명된 바와 같이 스누프들에 응답하도록 구현되고; 인터커넥트(3920)는 (예컨대, 스누프 제어기(3925)의 스누프 생성기(3926)를 통해) 커맨드들에 응답하여 스누프들을 발행하도록 그리고 앞서 설명된 바와 같이 (예컨대, 스누프 제어기(3925)의 스누프 응답기(3927)를 통해) 캐시들로부터의 응답 데이터에 대해 응답하도록 구현되며; 발행 에이전트는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 개시하라는 커맨드를 직접 인터커넥트(3920)로 송신하도록 구현되고; 발행 에이전트(제1 에이전트)는 그 자체적으로, 또는 제1 에이전트는 인터커넥트로부터의 메시지에 응답하여, 캐시들(예컨대, L1 캐시, L2 캐시, L3 캐시) 중 하나에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하거나(상이한 실시예들은 "전부 제로들을 나타내도록 캐시 라인을 구성하는 기법들"이라는 제목의 섹션에서 이전에 설명된 바와 같이 전부 제로들을 나타내도록 캐시 라인을 구성하도록 캐시들을 구현할 수 있음) 어드레스에서의 다운스트림 메모리에의 캐시 라인 크기의 제로들의 기입을 야기한다. 하나의 특정 실시예에서, 발행 에이전트(제1 에이전트)는 그 자체적으로 캐시들(예컨대, L1 캐시, L2 캐시, L3 캐시) 중 하나에서의 캐시 라인이 전부 제로들을 나타내도록 구성되게 한다.
다수의 소켓들
이전에 설명된 바와 같이, 인터커넥트(3920)는: 예를 들어, 1) CCX 내의 인터커넥트만; 2) CCX들 내의 그리고 CCX들 사이의 인터커넥트; 3) 상이한 CCX들 내의 별개의 인터커넥트들은 물론, CCX들 사이의 인터커넥트(들)를 나타낼 수 있다. 본 명세서에서 논의된 바와 같이, 시스템은 상기 프로세서들(각각이 하나 이상의 CCX를 포함함) 중 하나 이상으로 구현될 수 있다("예시적인 컴퓨터 아키텍처들"이라는 제목의 이하의 섹션을 참조). 그러한 시스템은 각각이 기계적 및 전기적 접속들을 제공하는 하나 이상의 기계 컴포넌트를 포함하는 (CPU 소켓 또는 CPU 슬롯이라고 알려진 바와 같은) 하나 이상의 소켓을 포함할 수 있다. 다수의 소켓들을 갖는 시스템들(예컨대, 서버)에서, 소켓들은 하나 이상의 인터커넥트(소켓-투-소켓 인터커넥트들(socket-to-socket interconnects)이라고도 지칭됨)의 세트에 의해 접속된다. 상이한 실시예들은, 하나의 링, 다수의 링들, 포인트 투 포인트 링크들(예컨대, QPI(QuickPath Interconnect), UPI(UltraPath Interconnect), HP(Hyper Transport)와 같은 포인트-투-포인트 링크들), 공유 버스(들) 등 중 하나 이상을 포함한, 소켓-투-소켓 인터커넥트들의 세트를 상이하게 구현할 수 있다. 이러한 소켓-투-소켓 인터커넥트들의 세트는 실시예에 따라 인터커넥트(3920)의 일부로서 또는 분리된 것으로서 간주될 수 있다. 일부 실시예들에서, 이러한 인터커넥트들의 세트는 인터커넥트(3920)와 관련하여 앞서 논의된 동일한 통신(기입 커맨드들, 스누프들, 응답 메시지들 등)을 지원하도록 구현되며; 여기서 이러한 통신들 각각은 소켓-투-소켓 인터커넥트를 통해 송신될 때 동일하거나 상이한 포맷을 가질 수 있다. 다른 실시예들에서, 이러한 통신들 중 하나 이상(예컨대, 스누프 타입들 및/또는 응답 메시지들 중 하나 이상)은 소켓-투-소켓으로 송신될 때 변환된다. 예를 들어, 일부 실시예들은 단일 소켓 내의 프로세서(들) 내에서 write-update 스누프를 사용할 수 있지만, 그러한 스누프가 다른 소켓으로 송신될 때 그것을 write-invalidate 또는 writeback-and-invalidate 스누프로 변환할 수 있다. 그러한 실시예들의 장점은 새로운 제로화된 캐시 라인을 생성할지의 결정이 소켓 내에서만 있다는 것이다(그와 같이, 다른 소켓들으로부터 "제로화됨(zeroed)"또는 "제로화되지 않음(not zeroed)" 지시가 필요하지 않다).
일부 실시예들의 요약
본 발명의 일 실시예는 제1 코히런트 에이전트, 제2 코히런트 에이전트, 및 인터커넥트를 포함하는 프로세서를 포함할 수 있다. 제1 에이전트는 제1 에이전트의 캐시를 통해 인터커넥트에 커플링된다. 제2 에이전트는 제2 에이전트의 캐시를 통해 인터커넥트에 커플링된다. 제1 에이전트는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 야기하기 위해 실행되는 명령어를 디코드하고 실행하도록 되어 있다. 제1 에이전트는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 개시하라는 기입 커맨드를, 제1 에이전트의 캐시에게, 발행하도록 되어 있다. 제1 에이전트의 캐시는, 기입 커맨드를 수신한 것에 응답하여 캐시 라인에 대한 히트가 있고 그 캐시 라인의 캐시 일관성 프로토콜 상태가 수정됨 상태 또는 배타적 상태일 때, 전부 제로들을 나타내도록 그 캐시 라인을 구성하도록 되어 있다. 제1 에이전트의 캐시는, 기입 커맨드를 수신한 것에 응답하여 캐시 미스가 있을 때, 인터커넥트를 향해 기입 커맨드를 발행하도록 되어 있다. 인터커넥트는, 기입 커맨드를 수신한 것에 응답하여, 제2 에이전트의 캐시에게 스누프를 발행하도록 되어 있다. 인터커넥트는, 또는 제1 에이전트는 인터커넥트로부터의 메시지에 응답하여, 기입 커맨드 및 스누프가 캐시 라인 제로들의 기입이 수행되게 하지 않았을 때 제1 에이전트의 캐시 내의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하도록 되어 있다.
그에 부가하여, 다음과 같은 것이 적용될 수 있다: 일부 실시예들에서, 제1 에이전트의 캐시는, 기입 커맨드를 수신한 것에 응답하여 캐시 라인에 대한 히트가 있고 그 캐시 라인의 캐시 일관성 프로토콜 상태가 수정됨 상태 또는 배타적 상태가 아닐 때, 그 캐시 라인의 캐시 일관성 프로토콜 상태를 유효하지 않음 상태로 만들고 인터커넥트를 향해 기입 커맨드를 발행하도록 되어 있다.
본 발명의 다른 실시예는 캐시 라인을 제로화하라는 명령어를 디코드하기 위한 디코더를 포함하는 프로세서를 포함할 수 있다. 프로세서는, 디코더에 커플링되고 명령어의 디코드에 응답하여, 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 개시하라는 기입 커맨드를 발행하기 위한 실행 유닛을 또한 포함한다. 프로세서는 기입 커맨드를 수신하고, 기입 커맨드에 응답하여 코히런트 캐시에 히트가 있는지를 결정하며, 히트 캐시 라인의 캐시 일관성 프로토콜 상태가 수정됨 상태 또는 배타적 상태인지를 결정하고, 캐시 일관성 프로토콜 상태가 수정됨 상태 또는 배타적 상태일 때 전부 제로들을 나타내도록 캐시 라인을 구성하며, 기입 커맨드를 수신한 것에 응답하여 미스가 있을 때 인터커넥트를 향해 기입 커맨드를 발행하기 위한, 실행 유닛에 커플링된 코히런트 캐시를 또한 포함한다. 인터커넥트는, 기입 커맨드의 수신에 응답하여, 히트가 있는지가 결정되어야 하는 복수의 다른 코히런트 캐시들 각각에게 스누프를 발행하도록 되어 있다. 인터커넥트는, 또는 실행 유닛은 인터커넥트로부터의 메시지에 응답하여, 기입 커맨드 및 스누프가 캐시 라인 제로들의 기입이 수행되게 하지 않았을 때 코히런트 캐시들 중 하나 내의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하도록 되어 있다.
그에 부가하여, 다음과 같은 것이 적용될 수 있다: 일부 실시예들에서, 코히런트 캐시는 또한 그 캐시 라인의 캐시 일관성 프로토콜 상태를 유효하지 않음 상태로 만들고 히트 캐시 라인의 캐시 일관성 프로토콜 상태가 수정됨 상태 또는 배타적 상태가 아닐 때 인터커넥트를 향해 기입 커맨드를 발행하도록 되어 있다. 일부 실시예들에서, 디코더 및 실행 유닛은 제1 코어의 일부이고, 복수의 코히런트 캐시들은 제2 코어의 코히런트 캐시를 포함한다.
본 발명의 다른 실시예는 캐시 라인 제로화 명령어의 실행에 응답하여 기입 커맨드를 발행하기 위한 제1 코어를 포함하는 프로세서를 포함할 수 있다. 제1 코어는 또한 기입 커맨드를 수신하고, 기입 커맨드에 응답하여 캐시에 히트 또는 미스가 있는지를 결정하며, 히트에 응답하여 히트된 캐시 라인의 캐시 일관성 프로토콜 상태가 다른 캐시들로의 브로드캐스트 없이 캐시 라인을 수정할 권한을 캐시에 부여하는 것인지를 결정하기 위한, 커플링된 레벨 1(L1) 캐시를 또한 포함한다. L1 캐시는 히트된 캐시 라인의 캐시 일관성 프로토콜 상태가 다른 캐시들로의 브로드캐스트 없이 캐시 라인을 수정할 권한을 캐시에 부여하는 것일 때 히트에 응답하여 전부 제로들을 나타내도록 캐시 라인을 구성하도록 되어 있다. L1 캐시는 미스에 응답하여 인터커넥트를 향해 기입 커맨드를 발행하도록 되어 있다. 인터커넥트는, 제1 코어에 커플링되고 기입 커맨드에 응답하여, 히트가 있는지가 결정되어야 하는 복수의 다른 캐시들 중의 그 캐시들에게 스누프를 발행하도록 되어 있다. 제1 코어는, 인터커넥트는, 또는 제1 코어는 인터커넥트로부터의 메시지에 응답하여, 기입 커맨드 및 스누프가 캐시 라인 제로들의 기입이 수행되게 하지 않았을 때 캐시 또는 복수의 다른 캐시들 중 하나 내의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하도록 되어 있다.
그에 부가하여, 다음과 같은 것이 적용될 수 있다: 일부 실시예들에서, L1 캐시는 또한 히트된 캐시 라인의 캐시 일관성 프로토콜 상태가 다른 캐시들로의 브로드캐스트 없이 캐시 라인을 수정할 권한을 캐시에 부여하는 것이 아닐 때 히트에 응답하여 캐시 일관성 프로토콜 상태를 유효하지 않음으로 만들고 인터커넥트를 향해 기입 커맨드를 발행하도록 되어 있다. 일부 실시예들에서, 복수의 다른 캐시들 각각은, 스누프에 응답하여, 그 다른 캐시에 히트 또는 미스가 있는지를 결정하고, 히트에 응답하여 그 다른 캐시에서 히트된 캐시 라인의 캐시 일관성 프로토콜 상태가 다른 캐시들로의 브로드캐스트 없이 캐시 라인을 수정할 권한을 캐시에 부여하는 것인지를 결정하도록 또한 구현될 수 있다. 복수의 다른 캐시들 각각은: 전부 제로들을 나타내도록 그 캐시 내의 캐시 라인을 구성하고 그 캐시에서 히트된 캐시 라인의 캐시 일관성 프로토콜 상태가 다른 캐시들로의 브로드캐스트 없이 그 캐시에서 히트된 캐시 라인을 수정할 권한을 캐시에 부여하는 것일 때 히트에 응답하여 제로화되었음을 나타내는 응답 메시지를 발행하도록 되어 있고; 그 캐시에서 히트된 캐시 라인의 캐시 일관성 프로토콜 상태가 그 캐시에서 히트된 캐시 라인을 수정할 권한을 캐시에 부여하는 것이 아닐 때 미스에 응답하여 또는 히트에 응답하여 제로화되지 않았음을 나타내는 응답 메시지를 발행하도록 되어 있다. 인터커넥트는 스누프가 복수의 다른 캐시들 중 하나가 전부 제로들을 나타내도록 구성되게 했는지를 결정하기 위해 응답 메시지들의 수신을 추적하도록 되어 있다.
본 발명의 다른 실시예는 제1 코히런트 에이전트, 제2 코히런트 에이전트, 및 인터커넥트를 포함하는 프로세서를 포함할 수 있다. 제1 에이전트는 제1 에이전트의 캐시를 통해 인터커넥트에 커플링된다. 제2 에이전트는 제2 에이전트의 캐시를 통해 인터커넥트에 커플링된다. 제1 에이전트는 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입을 야기하기 위해 실행되는 명령어를 디코드하고 실행하도록 되어 있다. 제1 에이전트는 커맨드를, 인터커넥트에게, 발행하도록 되어 있다. 인터커넥트는, 커맨드를 수신한 것에 응답하여, 제1 에이전트의 캐시 및 제2 에이전트의 캐시에게 스누프를 발행하도록 되어 있다. 제1 에이전트는, 인터커넥트는, 또는 제1 에이전트는 인터커넥트로부터의 메시지에 응답하여, 스누프가 캐시 라인 제로들의 기입이 수행되게 하지 않았을 때 제1 에이전트의 캐시 내의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하도록 되어 있다.
본 발명의 다른 실시예는 캐시 라인을 제로화하라는 명령어를 디코드하기 위한 디코더를 포함하는 프로세서를 포함할 수 있다. 프로세서는 명령어의 디코드에 응답하여 커맨드를 발행하기 위한, 디코더에 커플링된 실행 유닛을 또한 포함한다. 인터커넥트는, 커맨드의 수신에 응답하여, 히트가 있는지가 결정되어야 하는 복수의 코히런트 캐시들 각각에게 스누프를 발행하도록 되어 있다. 실행 유닛은 그 자체적으로, 인터커넥트는, 또는 실행 유닛은 인터커넥트로부터의 메시지에 응답하여, 스누프가 캐시 라인 제로들의 기입이 수행되게 하지 않았을 때 실행 유닛에 커플링된 복수의 코히런트 캐시들 중 하나 내의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하도록 되어 있다.
본 발명의 다른 실시예는 캐시 라인 제로화 명령어의 실행에 응답하여 커맨드를 발행하기 위한 제1 코어를 포함하는 프로세서를 포함할 수 있다. 프로세서는 커맨드에 응답하여 히트가 있는지를 결정되어야 하는 복수의 코히런트 캐시들 중의 그 코히런트 캐시들에게 스누프를 발행하기 위한, 공유되는 레벨 3(L3) 캐시, 제1 코어의 레벨 2(L2) 캐시, 및 제1 코어의 레벨 1(L1) 캐시에 커플링된 인터커넥트를 또한 포함한다. 일부 실시예들에서, 복수의 코히런트 캐시들은 제1 코어의 L1 캐시, 제1 코어의 L2 캐시, L3 캐시, 제2 코어의 L1 캐시, 및 제2 코어의 L2를 포함한다. 제1 코어는 그 자체적으로, 인터커넥트는, 또는 제1 코어는 인터커넥트로부터의 메시지에 응답하여, 제1 코어에 커플링된 복수의 코히런트 캐시들 중 하나 내의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하도록 되어 있다.
PTE 병합(PTE Coalescing)
프로세서 코어는 일부 예시적인 실시예들에 따른 페이지 테이블 병합 특징를 지원할 수 있어, 다수의 보다 작은 메모리 페이지들이 보다 큰 단일 유효 메모리 페이지로 병합될 수 있게 해준다. 일부 실시예들에서, 예를 들어, 8개의 4KB 메모리 페이지가 단일 32KB 메모리 페이지로 병합될 수 있다. 다른 실시예들에서, 16개의 4KB 메모리 페이지가 단일 64KB 메모리 페이지로 병합될 수 있다.
현재의 컴퓨터 아키텍처들은 다양한 크기들의 가상 메모리 페이지들을 가능하게 해준다. 예를 들어, x86 아키텍처는 4KB, 2MB, 및 1GB의 페이지들을 가능하게 해줄 수 있다. 그러한 아키텍처를 구현하는 프로세서는 물리 어드레스들에 대한 가상 어드레스들의 매핑을 제공하는, 이러한 페이지 크기들 각각에 대한 TLB(translation lookaside buffer)를 제공할 수 있다. 가상 어드레스를 물리 어드레스로 변환하려고 시도할 때, 프로세서는 적용가능한 TLB들 각각을, 그들 중 임의의 것이 가상 어드레스에 대응하는 엔트리를 포함하는지를 결정하기 위해, 탐색할 수 있다. 엔트리가 발견되면(즉, "TLB 히트"), 엔트리는 엔트리가 발견된 TLB로부터 검색되고, 가상 어드레스로부터 물리 어드레스로의 변환이 진행된다.
가상 어드레스에 대응하는 엔트리가 프로세서 상에 존재하는 TLB들 중 어느 것에서도 발견되지 않는 경우(즉, "TLB 미스"), 프로세서는 가상 어드레스에 대응하는 엔트리를 페이지 테이블에서 찾아내려고 시도할 수 있다. 엔트리가 발견되는 경우(즉, "페이지 테이블 히트"), 엔트리는 페이지 테이블로부터 검색되어 적절한 TLB에 삽입된다. 가상 어드레스로부터 물리 어드레스로의 변환이 이어서 재시도되어, TLB 히트를 가져올 수 있다.
가상 어드레스에 대응하는 엔트리가 페이지 테이블에서 발견되지 않는 경우(즉, "페이지 테이블 미스"), 이는 제공된 가상 어드레스에 대응하는 메모리에서의 물리 어드레스가 현재 없음을 나타낼 수 있다. 이 경우에, 프로세서는 가상 어드레스에 대응하는 페이지가 다른 스토리지(예컨대, 디스크)로부터 특정의 물리 어드레스에서 메모리에 로드되게 할 수 있고, 제공된 가상 어드레스로부터 이 물리 어드레스로의 매핑을 페이지 테이블에 삽입할 수 있다. 제공된 가상 어드레스를 변환하려는 후속 시도는 페이지 테이블 히트를 가져올 것이고, 이는 대응하는 엔트리가 적절한 TLB에 추가되게 할 것이다.
일부 현재의 프로세서 아키텍처들에서의 어려움은 허용가능한 페이지 크기들의 입도(granularity)의 부족이다. 예를 들어, 앞서 설명된 바와 같이, 일부 프로세서 아키텍처들은 4KB, 2MB, 및 1GB의 페이지들을 가능하게 해주어, 페이지 크기들 간에 비교적 "거친" 스프레드(relatively "coarse" spread)를 제공한다.
일부 실시예들에 따르면, 이러한 어려움은 다수의 보다 작은 페이지들을 병합시켜, 예컨대, 4KB보다는 크지만 2MB보다는 작은 중간 페이지 크기를 가져옴으로써 해결될 수 있다. 일부 실시예들에서, 이것은 예컨대, 특정 조건들 하에서 단일 유효 32KB 페이지를 생성하기 위해 8개의 4KB 페이지를 기회주의적으로 병합시키는 것에 의해 달성될 수 있다. 일부 실시예들에서, 8개의 4KB 페이지는 32KB 어드레스 경계에 맞춰 정렬되어야 한다.
일부 실시예들에서, 8개의 4KB 페이지는 (a) 가상 어드레스 공간; 및 (b) 물리 어드레스 공간 중 하나 또는 둘 다에서 연속적(contiguous)이어야 한다. 예를 들어, 일부 실시예들은 가상 어드레스(VA)와 물리 어드레스(PA)의 비트 12 내지 비트 14가 서로 동일할 것을 요구할 수 있다. 즉, 일부 실시예들에서, 보다 작은 페이지들 각각에 대해 VA[14: 12] == PA[14: 12]인 경우에만 보다 작은 페이지들이 보다 큰 페이지로 병합된다.
일부 실시예들에서, 보다 작은 페이지들 각각이 동일한 허가 비트들(permission bits)을 갖는 경우에만 보다 작은 페이지들이 보다 큰 페이지로 병합된다. 일부 실시예들에서, 보다 작은 페이지들이 보다 큰 페이지로 병합될 때, 운영 체제는, 예컨대, 보다 작은 페이지들의 액세스된/더티 비트들(accessed/dirty bits) 전부에 대해 논리 OR 연산을 수행하는 것에 의해, 보다 작은 페이지들 각각에 대응하는 액세스된/더티 비트들을 단일 값으로 결합시킬 수 있다. 일부 실시예들에서, 보다 작은 페이지들이 보다 큰 페이지로 병합될 때, 운영 체제는 적절한 4KB 페이지 더티/액세스된 비트들만을 세트시킬 수 있으며, 그로써 보다 큰 페이지의 어느 부분들이 액세스되었고 그리고/또는 더티인지를 추적할 수 있다.
도 47은 일부 실시예들에 따른 프로세서에 포함될 수 있는 페이지 병합 특징을 예시하는 다이어그램이다. 블록(4700)은, 각각이 4KB 크기인 페이지들에 대응하는, 8개의 엔트리들(4701 내지 4708)을 포함하는 페이지 테이블의 일 부분을 나타낸다. 도 47이 도시하는 바와 같이, 8개의 엔트리(4701 내지 4708)는 연속적인 어드레스들을 가지며, 8개의 어드레스의 비트 12 내지 비트 14는 연속적인 값들 000, 001, 010, 011, 100, 101, 110 및 111을 취한다. 일부 실시예들에 따르면, 도 47에 도시된 바와 같이, 이러한 8개의 4KB 페이지는 유효 32KB 페이지(4709)로 결합될 수 있다.
일부 실시예들에서, 유효 32KB 페이지(4709)는 8개의 4KB 페이지가 유효 32KB 페이지로서 취급되어야 함을 나타내는 부가 비트를 각각의 페이지 테이블 엔트리(PTE)에 포함시키는 것에 의해 표기될 수 있다. 일부 실시예들에서, 유효 32KB 페이지(4709)는 8개의 4KB 페이지가 유효 32KB 페이지로서 취급되어야 함을 나타내는, 페이지 테이블 엔트리들(4701 내지 4708)에 대응하는 페이지 디렉토리 엔트리 내의 부가 비트에 의해 표기될 수 있다. 일부 실시예들에서, 8개의 4KB 페이지 중 하나에 대한 각각의 액세스 시에, 8개의 4KB 페이지의 연속인 정렬된 어드레스들이 하드웨어에 의해 검출되고 유효 32KB 페이지로서 취급될 수 있다.
다수의 보다 작은 페이지들이 보다 큰 유효 페이지로 병합시키기 위한 기준들을 충족시키는지를 검출하는 것은 각종의 방법들을 사용하여 달성될 수 있다. 예를 들어, 도 48은 페이지 테이블 엔트리들을 단일 유효 페이지로 병합시키기 위한 방법을 예시하는 흐름 다이어그램이다. 박스(4801)에 도시된 바와 같이 모든 TLB들(예컨대, 모든 4KB, 32KB, 2MB, 및 1GB TLB들)에서 TLB 미스 시에, 프로세서는, 박스(4802)에 도시된 바와 같이, (예컨대, x86 페이지 테이블 정의를 사용하여) 페이지 디렉토리의 계층적 구조에 따라 페이지 테이블들을 워크(walk)할 수 있다. 적절한 페이지 테이블 엔트리의 위치를 결정할 때, 프로세서는 이어서 다수의 페이지 테이블 엔트리들을 포함하는 캐시 라인을 검색할 수 있다(박스(4803)). 예를 들어, 일부 실시예들에서, 프로세서는 캐시 라인에서 8개의 페이지 테이블 엔트리를 검색할 수 있다.
캐시 라인에서 다수의 페이지 테이블 엔트리들을 검색할 때, 프로세서는, 4804에 도시된 바와 같이, 페이지 테이블 엔트리들이 병합을 위한 요구사항들을 충족시키는 페이지들에 대응하는지를 테스트할 수 있다. 예를 들어, 프로세서는 페이지들의 어드레스들이 가상 및/또는 물리 메모리에서 연속적인지를 테스트할 수 있다. 일부 실시예들에서, 프로세서는 페이지들의 허가 비트들의 값들이 동일한지를 추가로 테스트할 수 있다. 일부 실시예들에서, 프로세서는 페이지들의 어드레스들이 32KB 경계에 맞춰 정렬되는지를 결정할 수 있다.
캐시 라인에서의 다수의 페이지 테이블 엔트리들이 단일의 결합된 페이지(예컨대, 유효 32KB 페이지)로 병합하기 위한 기준들을 충족시키는 경우, 박스(4805)에 도시된 바와 같이, 결합된 페이지에 대응하는 엔트리는 적절한 TLB(예컨대, 32KB TLB)에 배치되고, 하나의 엔트리로 결합된 캐시 라인에서의 엔트리들은 무효화된다. 다수의 페이지 테이블 엔트리들이 단일의 결합된 페이지로 병합하기 위한 기준들을 충족시키지 않는 경우, 박스(4806)에 도시된 바와 같이, 가상 대 물리 어드레스 변환(virtual-to-physical address translation)은, 보다 작은(예컨대, 4KB) TLB에 대응하는 TLB에 엔트리를 할당함으로써, 평소대로 계속될 수 있다.
일부 실시예들에서, 프로세서는 관련 TLB의 내용에 기초하여 다수의 보다 작은 페이지들을 병합시킬지를 결정할 수 있다. 예를 들어, 4KB TLB 미스 이후에, 프로세서는 대응하는 4KB 페이지가 TLB에 존재하는 부가의 엔트리들(예컨대, 4KB 페이지들에 대응하는 7개의 다른 TLB 엔트리)와 병합될 수 있는지를 검출할 수 있다. 제공된 어드레스에 대응하는 엔트리가 보다 큰 유효 페이지(예컨대, 유효 32KB 페이지)를 생성하기 위해 다른 엔트리들과 결합될 수 있는 경우, 결합될 기존 TLB 엔트리들은 무효화되고, 적절한 TLB에서의(예컨대, 32KB 페이지들에 대응하는 TLB에서의) 보다 큰 유효 페이지에 대응하는 엔트리가 생성된다. 일부 실시예들에서, 결합된 유효 페이지 크기에 대응하는 별개의 TLB가 사용되지 않고, 그 대신에 결합된 페이지들에 대한 가상 대 물리 어드레스 변환에 관련한 정보가 보다 작은 페이지 크기에 대응하는 TLB(예컨대, 4KB 페이지 TLB)에 저장된다. 일부 실시예들에서, 이 정보는 그 목적을 위해 예비된 부가 비트들을 사용하여 보다 작은 페이지 크기에 대응하는 TLB에 인코딩될 수 있다.
일부 실시예들에서, 상기 특징들은 앞서 설명된 바와 같이 페이지 병합을 위해 최적화된 알고리즘을 사용하여 페이지들을 할당하는 운영체제와 함께 사용될 수 있다. 기존의 운영 체제들은, 예컨대, 4KB, 2MB, 및/또는 1GB 페이지들을 할당하도록 설계된 알고리즘들을 갖는다. 일부 실시예들과 함께 사용될 수 있는 운영 체제들은 결합된 페이지들(예컨대, 32KB의 유효 페이지들)을 할당하도록 설계된 부가의 알고리즘들을 사용할 수 있다.
앞서 설명된 페이지 병합 특징들은 특정 크기의 특정 수의 페이지들을 결합시키는 것으로 제한되지 않고, 다양한 크기들의 다양한 수의 페이지들을 병합시키는 데 사용될 수 있다. 예를 들어, 일부 실시예들은 16개의 4KB 페이지를 병합시켜, 64KB의 결합된 유효 페이지들을 형성할 수 있다. 일부 실시예들은 부가적으로 다수의 크기들의 결합된 유효 페이지들(예컨대, 32KB 및 64KB의 결합된 페이지들)을 지원할 수 있다. 일부 실시예들에서, 다수의 크기들의 페이지들(예컨대, 4KB 및 32KB의 페이지들)은 단일 유효 페이지(예컨대, 유효 64KB 페이지)로 결합될 수 있다.
예시적인 컴퓨터 아키텍처들
도 49 내지 도 52는 예시적인 컴퓨터 아키텍처들의 블록 다이어그램들이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 개인 휴대 정보 단말들(personal digital assistants), 엔지니어링 워크스테이션들, 서버들, 네트워크 디바이스들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, 디지털 신호 프로세서들(DSP들), 범용 프로세서들, 서버 환경에서 사용하기 위한 서버 프로세서들 또는 프로세싱 요소들, 코프로세서들(예컨대, 보안 코프로세서들), 하이-스루풋 MIC 프로세서들, GPGPU들, (예컨대, 그래픽스 가속기들, 암호화 가속기들, 고정 기능 가속기들, 머신 러닝 가속기들, 네트워킹 가속기들, 또는 컴퓨터 비전 가속기들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서 또는 프로세싱 디바이스, 그래픽스 디바이스들, 비디오 게임 디바이스들, 셋톱 박스들, 마이크로 컨트롤러들, 셀 폰들, 휴대용 미디어 플레이어들, 핸드헬드 디바이스들, 및 다양한 다른 전자 디바이스들에 대한 기술분야에 공지된 다른 시스템 설계들 및 구성들이 또한 적당하다. 일반적으로, 본 명세서에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 내포할 수 있는 매우 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적당하다.
이제 도 49를 참조하면, 본 발명의 일 실시예에 따른 시스템(4900)의 블록 다이어그램이 도시되어 있다. 시스템(4900)은 제어기 허브(4920)에 커플링되는, 하나 이상의 프로세서(4910, 4915)를 포함할 수 있다. 일 실시예에서, 제어기 허브(4920)는 (개별 칩들 상에 있을 수 있는) 그래픽스 메모리 제어기 허브(GMCH)(4990) 및 입/출력 허브(IOH)(4950)를 포함하고; GMCH(4990)는 메모리(4940) 및 코프로세서(4945)에 커플링된 메모리 및 그래픽스 제어기를 포함하고; IOH(4950)는 입/출력(I/O) 디바이스들(4960)을 GMCH(4990)에 커플링시킨다. 대안적으로, 메모리 및 그래픽스 제어기들 중 하나 또는 둘 다는 (본 명세서에 설명된 바와 같이) 프로세서 내에 통합되고, 메모리(4940) 및 코프로세서(4945)는 단일 칩에서 IOH(4950)를 사용하여 프로세서(4910) 및 제어기 허브(4920)에 직접 커플링된다.
부가의 프로세서들(4915)의 임의적 성질은 도 49에서 파선들로 표기되어 있다. 각각의 프로세서(4910, 4915)는 본 명세서에 설명된 프로세싱 코어들 중 하나 이상을 포함할 수 있고 프로세서(3600)의 어떤 버전일 수 있다.
메모리(4940)는, 예를 들어, 동적 랜덤 액세스 메모리(DRAM), 상 변화 메모리(PCM), 또는 이 둘의 조합일 수 있다. 적어도 하나의 실시예에 대해, 제어기 허브(4920)는, FSB(front-side bus)와 같은, 멀티-드롭 버스, QPI(QuickPath Interconnect)와 같은 포인트-투-포인트 인터페이스, 또는 유사한 접속부(4995)를 통해 프로세서(들)(4910, 4915)와 통신한다.
일 실시예에서, 코프로세서(4945)는 특수 목적 프로세서(예컨대, 범용 프로세서들, 서버 환경에서 사용하기 위한 서버 프로세서들 또는 프로세싱 요소들, 보안 코프로세서들과 같은 코프로세서들, 하이-스루풋 MIC 프로세서들, GPGPU들, (예컨대, 그래픽스 가속기들 또는 디지털 신호 프로세싱(DSP) 유닛들, 암호화 가속기들, 고정 기능 가속기들, 머신 러닝 가속기들, 네트워킹 가속기들, 또는 컴퓨터 비전 가속기들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서 또는 프로세싱 디바이스를 포함함)일 수 있다. 일 실시예에서, 제어기 허브(4920)는 통합 그래픽스 가속기를 포함할 수 있다.
아키텍처, 마이크로아키텍처, 열, 전력 소비 특성들, 및 이와 유사한 것을 포함한 광범위한 성능 메트릭들(metrics of merit)의 면에서 물리 리소스들(4910, 4915) 사이에 다양한 차이들이 있을 수 있다.
일 실시예에서, 프로세서(4910)는 일반적인 타입의 데이터 프로세싱 동작들을 제어하는 명령어들을 실행한다. 명령어들 내에 코프로세서 명령어들이 임베딩될 수 있다. 프로세서(4910)는 이러한 코프로세서 명령어들을 부착된 코프로세서(4945)에 의해 실행되어야 하는 타입인 것으로 인식한다. 그에 따라, 프로세서(4910)는 이러한 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스 또는 다른 인터커넥트 상에서 코프로세서(4945)에게 발행한다. 코프로세서(들)(4945)는 수신된 코프로세서 명령어들을 수용(accept)하여 실행한다.
이제 도 50을 참조하면, 본 발명의 일 실시예에 따른 제1 보다 구체적인 예시적인 시스템(5000)의 블록 다이어그램이 도시되어 있다. 도 50에 도시된 바와 같이, 멀티프로세서 시스템(5000)은 포인트-투-포인트 인터커넥트 시스템이며, 포인트-투-포인트 인터커넥트(5050)을 통해 커플링된 제1 프로세서(5070) 및 제2 프로세서(5080)를 포함한다. 프로세서들(5070 및 5080) 각각은 프로세서(3600)의 어떤 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(5070 및 5080)은 제각기 프로세서들(4910 및 4915)인 반면, 코프로세서(5038)는 코프로세서(4945)이다. 다른 실시예에서, 프로세서들(5070 및 5080)은 제각기 프로세서(4910) 및 코프로세서(4945)이다.
통합 메모리 제어기(IMC) 유닛들(5072 및 5082)을 제각기 포함하는 프로세서들(5070 및 5080)이 도시되어 있다. 프로세서(5070)는 자신의 버스 제어기 유닛들의 일부로서 포인트-투-포인트(P-P) 인터페이스들(5076 및 5078)을 또한 포함하고; 이와 유사하게, 제2 프로세서(5080)는 P-P 인터페이스들(5086 및 5088)을 포함한다. 프로세서들(5070, 5080)은 P-P 인터페이스 회로들(5078, 5088)을 사용하여 포인트-투-포인트(P-P) 인터페이스(5050)를 통해 정보를 교환할 수 있다. 도 50에 도시된 바와 같이, IMC들(5072 및 5082)은 프로세서들을 각자의 프로세서들에 로컬적으로 부착된 메인 메모리의 부분들일 수 있는 각자의 메모리들, 즉 메모리(5032) 및 메모리(5034)에 커플링시킨다.
프로세서들(5070, 5080) 각각은 포인트 투 포인트 인터페이스 회로들(5076, 5094, 5086, 5098)을 사용하여 개별 P-P 인터페이스들(5052, 5054)을 통해 칩세트(5090)와 정보를 교환할 수 있다. 칩세트(5090)는 임의로 고성능 인터페이스(5092)를 통해 코프로세서(5038)와 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(5038)는, 예를 들어, 하이-스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽스 프로세서, GPGPU, 임베디드 프로세서, 또는 이와 유사한 것과 같은, 특수 목적 프로세서이다.
프로세서가 저전력 모드에 놓여 있는 경우 어느 한 프로세서 또는 양쪽 프로세서들의 로컬 캐시 정보가 공유 캐시에 저장될 수 있도록, 공유 캐시(도시되지 않음)는 프로세서 내에 또는 양쪽 프로세서들의 외부에 중 어느 하나로 포함될 수 있지만, P-P 인터커넥트를 통해 프로세서와 접속된다.
칩세트(5090)는 인터페이스(5096)를 통해 제1 버스(5016)에 커플링될 수 있다. 일 실시예에서, 제1 버스(5016)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI Express 버스 또는 다른 제3 세대 I/O 인터커넥트 버스와 같은 버스일 수 있지만, 본 발명의 범위가 그렇게 제한되지 않는다.
도 50에 도시된 바와 같이, 다양한 I/O 디바이스들(5014)이, 제1 버스(5016)를 제2 버스(5020)에 커플링시키는 버스 브리지(5018)와 함께, 제1 버스(5016)에 커플링될 수 있다. 일 실시예에서, 범용 프로세서들, 서버 환경에서 사용하기 위한 서버 프로세서들 또는 프로세싱 요소들, 코프로세서들(예컨대, 보안 코프로세서들), 하이-스루풋 MIC 프로세서들, GPGPU들, (예컨대, 그래픽스 가속기들 또는 디지털 신호 프로세싱(DSP) 유닛들, 암호화 가속기들, 고정 기능 가속기들, 머신 러닝 가속기들, 네트워킹 가속기들, 또는 컴퓨터 비전 가속기들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서 또는 프로세싱 디바이스와 같은, 하나 이상의 부가 프로세서(들)(5015)가 제1 버스(5016)에 커플링된다. 일 실시예에서, 제2 버스(5020)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(5022), 통신 디바이스들(5027) 그리고 명령어/코드 및 데이터(5030)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 스토리지 디바이스와 같은 스토리지 유닛(5028)을 포함한, 다양한 디바이스들은 제2 버스(5020)에 커플링될 수 있다. 게다가, 오디오 I/O(5024)는 제2 버스(5020)에 커플링될 수 있다. 다른 아키텍처들이 가능하다는 점에 유의한다. 예를 들어, 도 50의 포인트-투-포인트 아키텍처 대신에, 시스템은 멀티-드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
이제 도 51을 참조하면, 본 발명의 일 실시예에 따른 제2 보다 구체적인 예시적인 시스템(5100)의 블록 다이어그램이 도시되어 있다. 도 50 및 도 51에서의 비슷한 요소들은 비슷한 참조 번호들을 지니며, 도 51의 다른 양태들을 모호하게 하는 것을 피하기 위해 도 50의 특정 양태들이 도 51로부터 생략되었다.
도 51은 프로세서들(5070, 5080)이, 제각기, 통합 메모리 및 I/O 제어 로직("CL")(5072 및 5082)을 포함할 수 있음을 예시하고 있다. 따라서, CL(5072, 5082)은 통합 메모리 제어기 유닛들을 포함하고 I/O 제어 로직을 포함한다. 도 51은 메모리들(5032, 5034)이 CL(5072, 5082)에 커플링되어 있다는 것뿐만 아니라 I/O 디바이스들(5114)이 또한 제어 로직(5072, 5082)에 커플링되어 있다는 것을 예시하고 있다. 레거시 I/O 디바이스들(5115)은 칩세트(5090)에 커플링된다.
이제 도 52를 참조하면, 본 발명의 일 실시예에 따른 SoC(5200)의 블록 다이어그램이 도시되어 있다. 도 36에서의 유사한 요소들은 비슷한 참조 번호들을 지닌다. 또한, 파선 박스들은 보다 진보된 SoC들 상의 임의적 특징들이다. 도 52에서, 인터커넥트 유닛(들)(5202)은: 캐시 유닛들(3604A 내지 3604N) 및 공유 캐시 유닛(들)(3606)을 포함하는 하나 이상의 코어(3602A 내지 3602N)의 세트를 포함하는 애플리케이션 프로세서(5210); 시스템 에이전트 유닛(3610); 버스 제어기 유닛(들)(3616); 통합 메모리 제어기 유닛(들)(3614); 통합 그래픽스 로직, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서, 범용 프로세서들, 서버 환경에서 사용하기 위한 서버 프로세서들 또는 프로세싱 요소들, 보안 코프로세서들, 하이-스루풋 MIC 프로세서들, GPGPU들, (예컨대, 그래픽스 가속기들 또는 디지털 신호 프로세싱(DSP) 유닛들, 암호화 가속기들, 고정 기능 가속기들, 머신 러닝 가속기들, 네트워킹 가속기들, 또는 컴퓨터 비전 가속기들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서 또는 프로세싱 디바이스를 포함할 수 있는 하나 이상의 코프로세서(5220)의 세트; 정적 랜덤 액세스 메모리(SRAM) 유닛(5230); 직접 메모리 액세스(DMA) 유닛(5232); 및 하나 이상의 외부 디스플레이에 커플링시키기 위한 디스플레이 유닛(5240)에 커플링된다. 일 실시예에서, 코프로세서(들)(5220)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 하이-스루풋 MIC 프로세서, 임베디드 프로세서, 또는 이와 유사한 것과 같은, 특수 목적 프로세서를 포함한다.
본 명세서에 개시된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 그러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예들은, 예컨대, 범용 프로세서들, 서버 환경에서 사용하기 위한 서버 프로세서들 또는 프로세싱 요소들, 코프로세서들(예컨대, 보안 코프로세서들), 하이-스루풋 MIC 프로세서들, GPGPU들, (예컨대, 그래픽스 가속기들 또는 디지털 신호 프로세싱(DSP) 유닛들, 암호화 가속기들, 고정 기능 가속기들, 머신 러닝 가속기들, 네트워킹 가속기들, 또는 컴퓨터 비전 가속기들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서 또는 프로세싱 디바이스를 포함한, 적어도 하나의 프로세서, 스토리지 시스템(휘발성 및 비휘발성 메모리 및/또는 스토리지 요소들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그래밍가능 시스템들 상에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
본 명세서에 설명된 기능들을 수행하고 출력 정보를 생성하기 위해, 도 50에 예시된 코드(5030)와 같은, 프로그램 코드가 입력 명령어들에 적용될 수 있다. 출력 정보가, 공지된 방식으로, 하나 이상의 출력 디바이스에 적용될 수 있다. 본 출원의 목적들을 위해, 프로세싱 시스템은, 예를 들어; DSP(digital signal processor), 마이크로컨트롤러, ASIC(application specific integrated circuit), 또는 마이크로프로세서와 같은, 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 하이 레벨 절차적 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는, 원하는 경우, 어셈블리어 또는 기계어로 또한 구현될 수 있다. 사실, 본 명세서에 설명된 메커니즘들은 범주가 임의의 특정 프로그래밍 언어로 제한되지 않는다. 어느 경우든지, 언어는 컴파일된 또는 인터프리트된 언어일 수 있다.
적어도 하나의 실시예의 하나 이상의 양태는, 머신에 의해 판독될 때, 머신으로 하여금 본 명세서에 설명된 기법들을 수행하기 위한 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 표현하는 머신 판독가능 매체 상에 저장된 대표적인 명령어들에 의해 구현될 수 있다. "IP 코어들"이라고 알려진 그러한 표현들은 유형적(tangible) 머신 판독가능 매체 상에 저장되고, 로직 또는 프로세서를 실제로 제조하는 제조 머신들에 로드하기 위해, 다양한 고객들 또는 제조 시설들에 공급될 수 있다.
그러한 머신 판독가능 스토리지 매체는, 제한 없이, 하드 디스크들, 플로피 디스크들, 광학 디스크들, CD-ROM들(compact disk read-only memories), CD-RW들(compact disk rewritables), 및 자기-광학 디스크들을 포함한 임의의 다른 타입의 디스크, ROM들(read-only memories), DRAM들(dynamic random access memories), SRAM들(static random access memories)과 같은 RAM들(random access memories), EPROM들(erasable programmable read-only memories), 플래시 메모리들, EEPROM들(electrically erasable programmable read-only memories)과 같은 반도체 디바이스들, PCM(phase change memory), 자기 또는 광학 카드들, 또는 전자 명령어들을 저장하는 데 적당한 임의의 다른 타입의 매체들과 같은 스토리지 매체들을 포함한, 머신 또는 디바이스에 의해 제조되거나 형성된 물품들의 비일시적, 유형적 구성들(non-transitory, tangible arrangements)을 포함할 수 있다.
그에 따라, 본 발명의 실시예들은 명령어들을 포함하는 또는 본 명세서에 설명된 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는, HDL(Hardware Description Language)과 같은, 설계 데이터를 포함하는 비일시적, 유형적 머신 판독가능 매체들을 또한 포함한다. 그러한 실시예들은 프로그램 제품들이라고도 지칭될 수 있다.
본 발명의 실시예들에 따른 프로세서 코어에 의해 실행될 명령어들은 이하에서 상술되는 "일반 벡터 친화적 명령어 포맷"으로 구체화될 수 있다. 다른 실시예들에서, 그러한 포맷이 이용되지 않고 다른 명령어 포맷이 사용되지만, 기입-마스크 레지스터, 다양한 데이터 변환들(스위즐, 브로드캐스트 등), 어드레싱 등에 대한 이하의 설명이 이상의 명령어(들)의 실시예들에 대한 설명에 일반적으로 적용가능하다. 부가적으로, 예시적인 시스템들, 아키텍처들, 및 파이프라인들이 이하에서 상술된다. 명령어들은 그러한 시스템들, 아키텍처들, 및 파이프라인들 상에서 실행될 수 있지만, 상술된 것들로 제한되지 않는다.
명령어 세트들
명령어 세트는 하나 이상의 명령어 포맷을 포함할 수 있다. 주어진 명령어 포맷은, 그 중에서도 특히, 수행될 연산(예컨대, 오피코드) 및 연산이 수행되어야 하는 피연산자(들)를 명시하기 위한 다양한 필드들(예컨대, 비트들의 수, 비트들의 위치) 및/또는 다른 데이터 필드(들)(예컨대, 마스크)를 정의할 수 있다. 일부 명령어 포맷들은 명령어 템플릿들(또는 서브포맷들(subformats))의 정의를 통해 추가로 분해된다. 예를 들어, 주어진 명령어 포맷의 명령어 템플릿들은 명령어 포맷의 필드들의 상이한 서브세트들을 갖도록 정의될 수 있고(포함된 필드들은 전형적으로 동일한 순서로 되어 있지만, 적어도 일부는 보다 적은 필드들이 포함되기 때문에 상이한 비트 위치들을 가짐) 그리고/또는 상이하게 해석되는 주어진 필드를 갖도록 정의될 수 있다. 따라서, ISA의 각각의 명령어는 주어진 명령어 포맷을 사용하여(그리고, 정의된 경우, 그 명령어 포맷의 명령어 템플릿들 중 주어진 명령어 템플릿으로) 표현되며 연산 및 피연산자들을 명시하기 위한 필드들을 포함한다. 예를 들어, 예시적인 ADD 명령어는 특정 오피코드 및 그 오피코드를 명시하기 위한 오피코드 필드 및 피연산자들(소스 1/목적지 및 소스 2)을 선택하기 위한 피연산자 필드들을 포함하는 명령어 포맷을 가지며; 명령어 스트림에서의 이 ADD 명령어의 출현은 특정 피연산자들을 선택하는 피연산자 필드들 내의 특정 내용을 가질 것이다. 고급 벡터 확장들(Advanced Vector Extensions)(AVX, AVX2 및 AVX-512)이라고 지칭되고 벡터 확장들(Vector Extensions)(VEX) 코딩 스킴을 사용하는 SIMD 확장들의 세트가 릴리스되고 그리고/또는 발표되었다(예컨대, [Intel® 64 and IA-32 Architectures Software Developer's Manual, September 2014]; [Intel® Advanced Vector Extensions Programming Reference, October 2014]; 및 [Intel® Architecture Instruction Set Extensions Programming Reference, October 2016]을 참조).
예시적인 명령어 포맷들
본 명세서에 설명된 명령어(들)의 실시예들은 상이한 포맷들로 구체화될 수 있다. 부가적으로, 예시적인 시스템들, 아키텍처들, 및 파이프라인들이 이하에서 상술된다. 명령어(들)의 실시예들은 그러한 시스템들, 아키텍처들, 및 파이프라인들 상에서 실행될 수 있지만, 상술된 것들로 제한되지 않는다.
일반 벡터 친화적 명령어 포맷
벡터 친화적 명령어 포맷은 벡터 명령어들에 적합한 명령어 포맷이다(예컨대, 벡터 연산들에 특정적인 특정한 필드들이 있다). 벡터 및 스칼라 연산들 둘 다가 벡터 친화적 명령어 포맷을 통해 지원되는 실시예들이 기술되지만, 대안의 실시예들은 벡터 친화적 명령어 포맷의 벡터 연산들만을 사용한다.
도 53a 및 도 53b는 본 발명의 실시예들에 따른 일반 벡터 친화적 명령어 포맷 및 그의 명령어 템플릿들을 예시하는 블록 다이어그램들이다. 도 53a는 본 발명의 실시예들에 따른 일반 벡터 친화적 명령어 포맷 및 그의 클래스 A 명령어 템플릿들을 예시하는 블록 다이어그램이고; 도 53b는 본 발명의 실시예들에 따른 일반 벡터 친화적 명령어 포맷 및 그의 클래스 B 명령어 템플릿들을 예시하는 블록 다이어그램이다. 구체적으로는, 클래스 A 및 클래스 B 명령어 템플릿들 - 이들 둘 다는 메모리 액세스 없음(5305) 명령어 템플릿들 및 메모리 액세스(5320) 명령어 템플릿들을 포함함 - 이 정의되는 일반 벡터 친화적 명령어 포맷(5300). 벡터 친화적 명령어 포맷의 맥락에서 용어 일반(generic)은 임의의 특정 명령어 세트에 연계되지 않은 명령어 포맷을 지칭한다.
벡터 친화적 명령어 포맷이 다음과 같은 것: 32 비트(4 바이트) 또는 64 비트(8 바이트) 데이터 요소 폭들(또는 크기들)을 갖는 64 바이트 벡터 피연산자 길이(또는 크기) (그리고 따라서, 64 바이트 벡터는 16개의 더블워드-크기 요소 또는 대안적으로 8개의 쿼드워드-크기 요소들로 이루어져 있음); 16 비트(2 바이트) 또는 8 비트(1 바이트) 데이터 요소 폭들(또는 크기들)을 갖는 64 바이트 벡터 피연산자 길이(또는 크기); 32 비트(4 바이트), 64 비트(8 바이트), 16 비트(2 바이트), 또는 8 비트(1 바이트) 데이터 요소 폭들(또는 크기들)을 갖는 32 바이트 벡터 피연산자 길이(또는 크기); 32 비트(4 바이트), 64 비트(8 바이트), 16 비트(2 바이트), 또는 8 비트(1 바이트) 데이터 요소 폭들(또는 크기들)을 갖는 16 바이트 벡터 피연산자 길이(또는 크기)를 지원하는 본 발명의 실시예들이 기술될 것이지만; 대안의 실시예들은 보다 큰, 보다 작은, 또는 상이한 데이터 요소 폭들(예컨대, 128 비트(16 바이트) 데이터 요소 폭들)을 갖는 보다 큰, 보다 작은 및/또는 상이한 벡터 피연산자 크기들(예컨대, 256 바이트 벡터 피연산자들)을 지원할 수 있다.
도 53a에서의 클래스 A 명령어 템플릿들은: 1) 메모리 액세스 없음(5305) 명령어 템플릿들 내에, 메모리 액세스 없음, 전체 라운드 제어 타입 연산(no memory access, full round control type operation)(5310) 명령어 템플릿 및 메모리 액세스 없음, 데이터 변환 타입 연산(no memory access, data transform type operation)(5315) 명령어 템플릿이 도시되어 있는 것; 및 2) 메모리 액세스(5320) 명령어 템플릿들 내에, 메모리 액세스, 임시(memory access, temporal)(5325) 명령어 템플릿 및 메모리 액세스, 비-임시(memory access, non-temporal)(5330) 명령어 템플릿이 도시되어 있는 것을 포함한다. 도 53b에서의 클래스 B 명령어 템플릿들은: 1) 메모리 액세스 없음(5305) 명령어 템플릿들 내에, 메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어 타입 연산(no memory access, write mask control, partial round control type operation)(5312) 명령어 템플릿 및 메모리 액세스 없음, 기입 마스크 제어, vsize 타입 연산(no memory access, write mask control, vsize type operation)(5317) 명령어 템플릿이 도시되어 있는 것; 및 2) 메모리 액세스(5320) 명령어 템플릿들 내에, 메모리 액세스, 기입 마스크 제어(5327) 명령어 템플릿이 도시되어 있는 것을 포함한다.
일반 벡터 친화적 명령어 포맷(5300)은 도 53a 및 도 53b에 예시된 순서로 이하에 열거된 다음과 같은 필드들을 포함한다.
포맷(Format) 필드(5340) - 이 필드 내의 특정 값(명령어 포맷 식별자 값)은 벡터 친화적 명령어 포맷, 그리고 따라서 명령어 스트림들에서의 벡터 친화적 명령어 포맷으로 된 명령어들의 출현들을 고유하게 식별해준다. 그와 같이, 이 필드가 일반 벡터 친화적 명령어 포맷만을 갖는 명령어 세트에 대해 필요하지 않다는 점에서 이 필드는 임의적이다.
베이스 연산(Base operation) 필드(5342) -그의 내용은 상이한 베이스 연산들을 구별해준다.
레지스터 인덱스(Register index) 필드(5344) - 그의 내용은, 직접 또는 어드레스 생성을 통해, 소스 및 목적지 피연산자들의 위치들을, 이들이 레지스터들에 있든 메모리에 있든 관계없이, 명시한다. 이들은 PxQ(예컨대, 32x512, 16x128, 32x1024, 64x1024) 레지스터 파일로부터 N개의 레지스터를 선택하는 데 충분한 수의 비트들을 포함한다. 일 실시예에서 N은 최대 3개의 소스 및 하나의 목적지 레지스터일 수 있지만, 대안의 실시예들은 보다 많거나 보다 적은 소스들 및 목적지 레지스터들을 지원할 수 있다(예컨대, 이 소스들 중 하나가 목적지로서 또한 기능하는 경우 최대 2개의 소스를 지원할 수 있고, 이 소스들 중 하나가 목적지로서 또한 기능하는 경우 최대 3개의 소스를 지원할 수 있으며, 최대 2개의 소스 및 하나의 목적지를 지원할 수 있다).
수정자(Modifier) 필드(5346) -그의 내용은 메모리 액세스를 명시하는 일반 벡터 명령어 포맷으로 된 명령어들의 출현들과 그렇지 않은 것들을; 즉, 메모리 액세스 없음(5305) 명령어 템플릿들과 메모리 액세스(5320) 명령어 템플릿들 간을 구별해준다. 메모리 액세스 연산들은 메모리 계층구조를 판독하고 그리고/또는 그에 기입하는 반면(일부 경우들에서, 레지스터들 내의 값들을 사용하여 소스 및/또는 목적지 어드레스들 명시함), 메모리 액세스 없음 연산들은 그렇지 않다(예컨대, 소스 및 목적지들이 레지스터들이다). 일 실시예에서, 이 필드가 또한 메모리 어드레스 계산들을 수행하는 3가지 상이한 방식 중에서 선택하지만, 대안의 실시예들은 메모리 어드레스 계산들을 수행하는 보다 많은, 보다 적은, 또는 상이한 방식들을 지원할 수 있다.
증강 연산(Augmentation operation) 필드(5350) - 그의 내용은 각종의 상이한 연산들 중 어느 것이 베이스 연산에 부가하여 수행되어야 하는지를 구별해준다. 이 필드는 컨텍스트 특정적(context specific)이다. 본 발명의 일 실시예에서, 이 필드는 클래스 필드(5368), 알파 필드(5352), 및 베타 필드(5354)로 나누어진다. 증강 연산 필드(5350)는 공통의 연산들의 그룹들이 2개, 3개, 또는 4개의 명령어보다는 단일 명령어로 수행될 수 있게 해준다.
스케일(Scale) 필드(5360) - 그의 내용은 메모리 어드레스 생성을 위한(예컨대, 2스케일 * 인덱스 + 베이스를 사용하는 어드레스 생성을 위한) 인덱스 필드의 내용의 스케일링을 가능하게 해준다.
변위(Displacement) 필드(5362A) - 그의 내용은 (예컨대, 2스케일 * 인덱스 + 베이스 + 변위를 사용하는 어드레스 생성을 위한) 메모리 어드레스 생성의 일부로서 사용된다.
변위 인자(Displacement Factor) 필드(5362B)(변위 인자 필드(5362B) 바로 위의 변위 필드(5362A)의 병치(juxtaposition)가 한쪽 또는 다른 쪽이 사용됨을 나타냄에 유의함) - 그의 내용은 어드레스 생성의 일부로서 사용되고; 이는 메모리 액세스의 크기(N)에 의해 스케일링되어야 하는 변위 인자를 명시한다 - 여기서 N은 (예컨대, 2스케일 * 인덱스 + 베이스 + 스케일링된 변위를 사용하는 어드레스 생성을 위한) 메모리 액세스에서의 바이트 수이다. 중복적 하위 비트들(Redundant low-order bits)은 무시되며, 따라서 유효 어드레스를 계산하는 데 사용될 최종 변위를 생성하기 위해 변위 인자 필드의 내용이 메모리 피연산자들 총 크기(N)와 곱해진다. N의 값은 전체 오피코드(full opcode) 필드(5374)(본 명세서에 나중에 설명됨) 및 데이터 조작(data manipulation) 필드(5354C)에 기초하여 런타임 시에 프로세서 하드웨어에 의해 결정된다. 변위 필드(5362A) 및 변위 인자 필드(5362B)는 이들이 메모리 액세스 없음(5305) 명령어 템플릿들에 대해 사용되지 않으며 그리고/또는 상이한 실시예들이 이 둘 중 하나만을 구현하거나 어느 것도 구현하지 않을 수 있다는 의미에서 임의적이다.
데이터 요소 폭(Data element width) 필드(5364) - 그의 내용은 다수의 데이터 요소 폭들 중 어느 것이 사용되어야 하는지를 구별해준다(일부 실시예들에서는 모든 명령어들에 대해; 다른 실시예들에서는 명령어들 중의 일부만에 대해). 이 필드가 하나의 데이터 요소 폭만이 지원되고 그리고/또는 데이터 요소 폭들이 오피코드들의 어떤 양태를 사용하여 지원되는 경우 필요하지 않다는 의미에서 이 필드는 임의적이다.
기입 마스크(Write mask) 필드(5370) - 그의 내용은, 데이터 요소 위치별로, 목적지 벡터 피연산자에서의 그 데이터 요소 위치가 베이스 연산 및 증강 연산의 결과를 반영하는지를 제어한다. 클래스 A 명령어 템플릿들은 병합-기입마스킹(merging-writemasking)을 지원하는 반면, 클래스 B 명령어 템플릿들은 병합-기입마스킹 및 제로화-기입마스킹(zeroing-writemasking) 둘 다를 지원한다. 병합할 때, 벡터 마스크들은 목적지에 있는 임의의 요소들의 세트가 (베이스 연산 및 증강 연산에 의해 명시된) 임의의 연산의 실행 동안 업데이트들로부터 보호될 수 있게 해주며; 다른 일 실시예에서, 대응하는 마스크 비트가 0을 갖는 경우 목적지의 각각의 요소의 이전의 값을 보존하는 것을 가능하게 해준다. 이와 대조적으로, 제로화할 때, 벡터 마스크들은 목적지에 있는 임의의 요소들의 세트가 (베이스 연산 및 증강 연산에 의해 명시된) 임의의 연산의 실행 동안 제로화될 수 있게 해주며; 일 실시예에서, 대응하는 마스크 비트가 0 값을 가질 때 목적지의 요소는 0으로 설정된다. 이 기능의 서브세트는 수행되는 연산의 벡터 길이(즉, 첫 번째 요소부터 마지막 요소까지, 수정되는 요소들의 범위(span))를 제어할 수 있는 능력이지만; 수정되는 요소들이 연속적일 필요는 없다. 따라서, 기입 마스크 필드(5370)는, 로드들, 저장들, 산술, 논리 등을 포함한, 부분 벡터 연산들을 가능하게 해준다. 기입 마스크 필드(5370)의 내용이 사용될 기입 마스크를 포함하는 다수의 기입 마스크 레지스터들 중 하나를 선택하고(그리고 따라서 기입 마스크 필드(5370)의 내용이 수행될 그 마스킹을 간접적으로 식별해주는) 본 발명의 실시예들이 설명되지만, 대안의 실시예들은 그 대신에 또는 부가적으로 마스크 기입 필드(5370)의 내용이 수행될 마스킹을 직접 명시할 수 있게 해준다.
즉치(Immediate) 필드(5372) - 그의 내용은 즉치의 명시를 가능하게 해준다. 이 필드가 즉치를 지원하지 않는 일반 벡터 친화적 포맷의 구현에 존재하지 않고 이 필드가 즉치를 사용하지 않는 명령어들에 존재하지 않는다는 의미에서 이 필드는 임의적이다.
클래스(Class) 필드(5368) - 그 내용은 상이한 클래스의 명령어들 사이를 구별해준다. 도 53a 및 도 53b를 참조하면, 이 필드의 내용은 클래스 A 명령어와 클래스 B 명령어 중에서 선택한다. 도 53a 및 도 53b에서, 둥근 모서리 정사각형들(예컨대, 도 53a 및 도 53b에서, 제각기, 클래스 필드(5368)에 대한 클래스 A(5368A) 및 클래스 B(5368B))은 특정 값이 필드에 존재함을 나타내는 데 사용된다.
클래스 A의 명령어 템플릿들
클래스 A의 메모리 액세스 없음(5305) 명령어 템플릿들의 경우에, 알파 필드(5352)는 RS 필드(5352A)로서 해석되며, 그의 내용은 상이한 증강 연산 타입들 중 어느 것이 수행되어야 하는지를 구별해주는 반면(예컨대, 라운드(5352A.1) 및 데이터 변환(5352A.2)은 제각기 메모리 액세스 없음, 라운드 타입 연산(5310) 및 메모리 액세스 없음, 데이터 변환 타입 연산(5315) 명령어 템플릿들에 대해 명시됨), 베타 필드(5354)는 명시된 타입의 연산들 중 어느 것이 수행되어야 하는지를 구별해준다. 메모리 액세스 없음(5305) 명령어 템플릿들에서, 스케일 필드(5360), 변위 필드(5362A), 및 변위 스케일 필드(5362B)는 존재하지 않는다.
메모리 액세스 없음 명령어 템플릿들 - 전체 라운드 제어 타입 연산
메모리 액세스 없음 전체 라운드 제어 타입 동작(5310) 명령어 템플릿에서, 베타 필드(5354)는 라운드 제어 필드(5354A)로서 해석되고, 그의 내용(들)은 정적 라운딩(static rounding)을 제공한다. 본 발명의 설명된 실시예들에서, 라운드 제어 필드(5354A)는 SAE(suppress all floating point exceptions) 필드(5356) 및 라운드 연산 제어 필드(5358)를 포함하는 반면, 대안의 실시예들은 이러한 개념들 둘 다를 동일한 필드에 인코딩하거나 이러한 개념들/필드들 중 하나 또는 다른 하나만을 가질 수 있다(예컨대, 라운드 연산 제어 필드(5358)만을 가질 수 있다).
SAE 필드(5356) - 그의 내용은 예외 이벤트 보고를 디스에이블시킬지 여부를 구별해주며; SAE 필드(5356)의 내용이 억제가 인에이블되어 있음을 나타낼 때, 주어진 명령어는 어떠한 종류의 부동 소수점 예외 플래그도 보고하지 않으며 어떠한 부동 소수점 예외 핸들러도 발생시키지(raise) 않는다.
라운드 연산 제어 필드(5358) - 그의 내용은 라운딩 연산들의 그룹 중 어느 것을 수행할지(예컨대, 라운드-업(Round-up), 라운드-다운(Round-down), 제로를 향한 라운드(Round-towards-zero) 및 가장 가까운 수로 라운드(Round-to-nearest))를 구별해준다. 따라서, 라운드 연산 제어 필드(5358)는 명령어별로 라운딩 모드를 변경하는 것을 가능하게 해준다. 프로세서가 라운딩 모드들을 명시하기 위한 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 라운드 연산 제어 필드(5350)의 내용은 그 레지스터 값을 오버라이드한다.
메모리 액세스 없음 명령어 템플릿들 - 데이터 변환 타입 연산
메모리 액세스 없음 데이터 변환 타입 연산(5315) 명령어 템플릿에서, 베타 필드(5354)는 데이터 변환 필드(5354B)로서 해석되며, 그의 내용은 다수의 데이터 변환들 중 어느 것이 수행되어야 하는지(예컨대, 데이터 변환 없음, 스위즐, 브로드캐스트)를 구별해준다.
클래스 A의 메모리 액세스(5320) 명령어 템플릿의 경우에, 알파 필드(5352)는 축출 힌트 필드(5352B)로서 해석되며, 그의 내용은 축출 힌트들 중 어느 것이 사용되어야 하는지(도 53a에서, 임시(5352B.1) 및 비-임시(5352B.2)는 제각기 메모리 액세스, 임시(5325) 명령어 템플릿 및 메모리 액세스, 비-임시(5330) 명령어 템플릿에 대해 명시됨)를 구별해주는 반면, 베타 필드(5354)는 데이터 조작 필드(5354C)로서 해석되며, 그의 내용은 다수의 데이터 조작 연산들(프리미티브들이라고도 알려져 있음) 중 어느 것이 수행되어야 하는지(예컨대, 조작 없음; 브로드캐스트; 소스의 상향 변환(up conversion); 및 목적지의 하향 변환(down conversion))를 구분해준다. 메모리 액세스(5320) 명령어 템플릿들은 스케일 필드(5360), 및 임의로 변위 필드(5362A) 또는 변위 스케일 필드(5362B)를 포함한다.
벡터 메모리 명령어들은, 변환 지원과 함께, 메모리로부터의 벡터 로드들 및 메모리로의 벡터 저장들을 수행한다. 정규 벡터 명령어들(regular vector instructions)에서와 같이, 벡터 메모리 명령어들은 데이터 요소별 방식으로(in a data element-wise fashion) 메모리로부터의/로의 데이터를 전송하고, 실제로 전송되는 요소들은 기입 마스크로서 선택된 벡터 마스크의 내용에 의해 좌우된다.
메모리 액세스 명령어 템플릿들 - 임시
임시 데이터는 캐싱으로부터 이득을 보기 위해 충분히 빨리 재사용될 가능성이 있는 데이터이다. 그렇지만 이것은 힌트이며, 상이한 프로세서들이, 힌트를 완전히 무시하는 것을 포함한, 상이한 방식들로 이를 구현할 수 있다.
메모리 액세스 명령어 템플릿들 - 비-임시
비-임시 데이터는 제1 레벨 캐시에의 캐싱으로부터 이득을 보기 위해 충분히 빨리 재사용될 가능성이 없는 데이터이며 축출을 위한 우선순위를 부여받아야 한다. 그렇지만 이것은 힌트이며, 상이한 프로세서들이, 힌트를 완전히 무시하는 것을 포함한, 상이한 방식들로 이를 구현할 수 있다.
클래스 B의 명령어 템플릿들
클래스 B의 명령어 템플릿들의 경우에, 알파 필드(5352)는 기입 마스크 제어(Z) 필드(5352C)로서 해석되며, 그의 내용은 기입 마스크 필드(5370)에 의해 제어되는 기입 마스킹이 병합 또는 제로화이어야 하는지를 구별해준다.
클래스 B의 메모리 액세스 없음(5305) 명령어 템플릿들의 경우에, 베타 필드(5354)의 일부는 RL 필드(5357A)로서 해석되며, 그의 내용은 상이한 증강 연산 타입들 중 어느 것이 수행되어야 하는지를 구별해주는 반면(예컨대, 라운드(5357A.1) 및 벡터 길이(VSIZE)(5357A.2)는 제각기 메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어 타입 연산(5312) 명령어 템플릿 및 메모리 액세스 없음, 기입 마스크 제어, VSIZE 타입 연산(5317) 명령어 템플릿에 대해 명시됨), 베타 필드(5354)의 나머지는 명시된 타입의 연산들 중 어느 것이 수행되어야 하는지를 구별해준다. 메모리 액세스 없음(5305) 명령어 템플릿들에서, 스케일 필드(5360), 변위 필드(5362A), 및 변위 스케일 필드(5362B)는 존재하지 않는다.
메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어 타입 연산(5310) 명령어 템플릿에서, 베타 필드(5354)의 나머지는 라운드 연산 필드(5359A)로서 해석되고 예외 이벤트 보고는 디스에이블된다(주어진 명령어는 어떤 종류의 부동 소수점 예외 플래그도 보고하지 않으며 어떠한 부동 소수점 예외 핸들러도 발생시키지 않는다).
라운드 연산 제어 필드(5359A) - 라운드 연산 제어 필드(5358)처럼, 그의 내용은 라운딩 연산들의 그룹 중 어느 것을 수행할지(예컨대, 라운드-업, 라운드-다운, 제로를 향한 라운드 및 가장 가까운 수로 라운드)를 구별해준다. 따라서, 라운드 연산 제어 필드(5359A)는 명령어별로 라운딩 모드를 변경하는 것을 가능하게 해준다. 프로세서가 라운딩 모드들을 명시하기 위한 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 라운드 연산 제어 필드(5350)의 내용은 그 레지스터 값을 오버라이드한다.
메모리 액세스 없음, 기입 마스크 제어, VSIZE 타입 연산(5317) 명령어 템플릿에서, 베타 필드(5354)의 나머지는 벡터 길이 필드(5359B)로서 해석되며, 그의 내용은 다수의 데이터 벡터 길이들 중 어느 것에 대해 수행되어야 하는지(예컨대, 128, 256, 또는 512 바이트)를 구별해준다.
클래스 B의 메모리 액세스(5320) 명령어 템플릿의 경우에, 베타 필드(5354)의 일부는 브로드캐스트 필드(5357B)로서 해석되며, 그의 내용은 브로드캐스트 타입 데이터 조작 연산이 수행되어야 하는지 여부를 구별해주는 반면, 베타 필드(5354)의 나머지는 벡터 길이 필드(5359B)로 해석된다. 메모리 액세스(5320) 명령어 템플릿들은 스케일 필드(5360), 및 임의로 변위 필드(5362A) 또는 변위 스케일 필드(5362B)를 포함한다.
일반 벡터 친화적 명령어 포맷(5300)과 관련하여, 포맷 필드(5340), 베이스 연산 필드(5342), 및 데이터 요소 폭 필드(5364)를 포함하는 전체 오피코드 필드(5374)가 도시되어 있다. 전체 오피코드 필드(5374)가 이러한 필드들 전부를 포함하는 일 실시예가 도시되어 있지만, 전체 오피코드 필드(5374)는 이들 전부를 지원하지는 않는 실시예들에서 이들 전부보다 적은 필드들을 포함한다. 전체 오피코드 필드(5374)는 연산 코드(오피코드)를 제공한다.
증강 연산 필드(5350), 데이터 요소 폭 필드(5364), 및 기입 마스크 필드(5370)는 이러한 특징들이 일반 벡터 친화적 명령어 포맷에서 명령어별로 명시될 수 있게 해준다.
기입 마스크 필드와 데이터 요소 폭 필드의 조합은 상이한 데이터 요소 폭들에 기초하여 마스크가 적용될 수 있게 해준다는 점에서 타입화된 명령어들(typed instructions)을 생성한다.
클래스 A 및 클래스 B 내에서 발견된 다양한 명령어 템플릿들은 상이한 상황들에서 유익하다. 본 발명의 일부 실시예들에서, 상이한 프로세서들 또는 프로세서 내의 상이한 코어들은 클래스 A만, 클래스 B만, 또는 양쪽 클래스들을 지원할 수 있다. 예를 들어, 범용 컴퓨팅을 위해 의도된 고성능 범용 비순차 코어는 클래스 B만을 지원할 수 있고, 주로 그래픽스 및/또는 과학(스루풋) 컴퓨팅을 위해 의도된 코어는 클래스 A만을 지원할 수 있으며, 둘 다를 위해 의도된 코어는 둘 다를 지원할 수 있다(물론, 양쪽 클래스들로부터의 템플릿들 및 명령어들의 어떤 혼합을 갖지만 양쪽 클래스들로부터의 템플릿들 및 명령어들 전부를 갖지는 않는 코어는 본 발명의 범위 내에 있음). 또한, 단일 프로세서는 다수의 코어들을 포함할 수 있으며, 이들 전부가 모두 동일한 클래스를 지원하거나 이들 중의 상이한 코어들이 상이한 클래스들을 지원한다. 예를 들어, 별개의 그래픽스 및 범용 코어들을 갖는 프로세서에서, 주로 그래픽스 및/또는 과학 컴퓨팅을 위해 의도된 그래픽스 코어들 중 하나는 클래스 A만 지원할 수 있는 반면, 범용 코어들 중 하나 이상은 클래스 B만을 지원하는 범용 컴퓨팅을 위해 의도된 비순차 실행 및 레지스터 리네이밍을 갖는 고성능 범용 코어들일 수 있다. 별개의 그래픽스 코어를 갖지 않는 다른 프로세서는 클래스 A와 클래스 B 둘 다를 지원하는 하나 이상의 범용 순차 또는 비순차 코어를 포함할 수 있다. 물론, 본 발명의 상이한 실시예들에서 하나의 클래스로부터의 특징들이 다른 클래스에서 또한 구현될 수 있다. 하이 레벨 언어로 작성된 프로그램들은: 1) 실행을 위해 타깃 프로세서에 의해 지원되는 클래스(들)의 명령어들만을 갖는 형태; 또는 2) 모든 클래스들의 명령어들의 상이한 조합들을 사용하여 작성된 대안의 루틴들을 갖고 코드를 현재 실행하고 있는 프로세서에 의해 지원되는 명령어들에 기초하여 실행할 루틴들을 선택하는 제어 흐름 코드를 갖는 형태를 포함한, 각종의 상이한 실행가능 형태들로 될 것이다(예컨대, JIT(just in time) 컴파일되거나 또는 정적으로 컴파일될 것이다).
예시적인 특정 벡터 친화적 명령어 포맷
도 54a는 본 발명의 실시예들에 따른 예시적인 특정 벡터 친화적 명령어 포맷을 예시하는 블록 다이어그램이다. 도 54a는, 필드들의 위치, 크기, 해석, 및 순서는 물론, 그 필드들의 일부에 대한 값들을 명시한다는 의미에서 특정적인, 특정 벡터 친화적 명령어 포맷(5400)을 도시하고 있다. 특정 벡터 친화적 명령어 포맷(5400)은 x86 명령어 세트를 확장하는 데 사용될 수 있고, 따라서 필드들 중 일부는 기존 x86 명령어 세트 및 그의 확장(예컨대, AVX)에서 사용된 것들과 유사하거나 동일하다. 이 포맷은 확장들을 갖는 기존의 x86 명령어 세트의 프리픽스 인코딩 필드, 실제 오피코드 바이트 필드, MOD R/M 필드, SIB 필드, 변위 필드, 및 즉치 필드들과 부합한 채로 있다. 도 54a로부터의 필드들이 매핑되는 도 53으로부터의 필드들이 예시되어 있다.
비록 본 발명의 실시예들이 예시 목적들을 위해 일반 벡터 친화적 명령어 포맷(5300)의 맥락에서 특정 벡터 친화적 명령어 포맷(5400)을 참조하여 기술되지만, 본 발명이 청구되는 경우를 제외하고는 특정 벡터 친화적 명령어 포맷(5400)으로 제한되지 않음을 이해해야 한다. 예를 들어, 일반 벡터 친화적 명령어 포맷(5300)은 다양한 필드들에 대한 각종의 가능한 크기들을 고려하는 반면, 특정 벡터 친화적 명령어 포맷(5400)은 특정 크기들의 필드들을 갖는 것으로 도시되어 있다. 특정 예로서, 데이터 요소 폭 필드(5364)는 특정 벡터 친화적 명령어 포맷(5400)에서 1 비트 필드로서 예시되어 있지만, 본 발명이 그렇게 제한되지 않는다(즉, 일반 벡터 친화적 명령어 포맷(5300)은 데이터 요소 폭 필드(5364)의 다른 크기들을 고려한다).
일반 벡터 친화적 명령어 포맷(5300)은 도 54a에 예시된 순서로 이하에 열거된 다음과 같은 필드들을 포함한다.
EVEX 프리픽스(바이트 0 내지 바이트 3)(5402) - 4 바이트 형태로 인코딩된다.
포맷 필드(5340)(EVEX 바이트 0, 비트들 [7:0]) - 첫 번째 바이트(EVEX 바이트 0)는 포맷 필드(5340)이고, 이는 0x62(본 발명의 일 실시예에서 벡터 친화적 명령어 포맷을 구별해주는 데 사용되는 고유 값)를 포함한다.
두 번째 내지 네 번째 바이트들(EVEX 바이트 1 내지 바이트 3)는 특정 능력을 제공하는 다수의 비트 필드들을 포함한다.
REX 필드(5405)(EVEX 바이트 1, 비트들 [7-5]) - EVEX.R 비트 필드(EVEX 바이트 1, 비트 [7] - R), EVEX.X 비트 필드(EVEX 바이트 1, 비트 [6] - X), 및 5357BEX 바이트 1, 비트[5] - B)로 이루어져 있다. EVEX.R, EVEX.X, 및 EVEX.B 비트 필드들은 대응하는 VEX 비트 필드들과 동일한 기능을 제공하고, 1의 보수 형태를 사용하여 인코딩되며, 즉 ZMM0은 1111B로서 인코딩되고, ZMM15는 0000B로서 인코딩된다. 명령어들의 다른 필드들은 본 기술분야에 공지된 바와 같이 레지스터 인덱스들의 하위 3 비트(rrr, xxx, 및 bbb)를 인코딩하며, 따라서 Rrrr, Xxxx, 및 Bbbb는 EVEX.R, EVEX.X, 및 EVEX.B를 추가함으로써 형성될 수 있다.
REX' 필드(5310) - 이것은 REX' 필드(5310)의 제1 부분이며, 확장된 32 레지스터 세트의 상위 16 또는 하위 16 중 어느 하나를 인코딩하는 데 사용되는 EVEX.R' 비트 필드(EVEX 바이트 1, 비트 [4] - R')이다. 본 발명의 일 실시예에서, 이 비트는, 이하에서 살펴보는 바와 같은 다른 비트들과 함께, (공지된 x86 32-비트 모드에서), 실제 오피코드 바이트는 62이지만, MOD 필드에서의 11의 값을 MOD R/M 필드(이하에서 설명됨)에 수용하지 않는, BOUND 명령어와 구별하기 위해 비트 반전된 포맷으로 저장되고; 본 발명의 대안의 실시예들은 이것 및 이하에서 살펴보는 다른 비트들을 반전된 포맷으로 저장하지 않는다. 1의 값은 하위 16개의 레지스터를 인코딩하는 데 사용된다. 환언하면, R'Rrrr은 다른 필드들로부터의 EVEX.R', EVEX.R, 및 다른 RRR을 결합시킴으로써 형성된다.
오피코드 맵 필드(5415)(EVEX 바이트 1, 비트들 [3:0]- mmmm) - 그의 내용은 암시적인 선두 오피코드 바이트(implied leading opcode byte)(0F, 0F 38, 또는 0F 3)를 인코딩한다.
데이터 요소 폭 필드(5364)(EVEX 바이트 2, 비트 [7] - W) - 표기법 EVEX.W에 의해 표현된다. EVEX.W는 데이터타입(32-비트 데이터 요소들 또는 64-비트 데이터 요소들 중 어느 하나)의 입도(크기)를 정의하는 데 사용된다.
EVEX.vvvv(5420)(EVEX 바이트 2, 비트 [6:3]-vvvv) - EVEX.vvvv의 역할은 다음과 같은 것을 포함할 수 있다: 1) EVEX.vvvv는 반전된(1의 보수) 형태로 명시된, 제1 소스 레지스터 피연산자를 인코딩하고 2개 이상의 소스 피연산자를 갖는 명령어들에 대해 유효하다; 2) EVEX.vvvv는 특정 벡터 시프트들에 대해 1의 보수 형태로 명시된, 목적지 레지스터 피연산자를 인코딩한다; 또는 3) EVEX.vvvv는 어떠한 피연산자도 인코딩하지 않으며, 이 필드는 예약되어 있고 1111b를 포함해야 한다. 따라서, EVEX.vvvv 필드(5420)는 반전된(1의 보수) 형태로 저장되는 제1 소스 레지스터 지정자(source register specifier)의 하위 4 비트를 인코딩한다. 명령어에 따라, 추가의 상이한 EVEX 비트 필드가 지정자 크기를 32개의 레지스터로 확장하는 데 사용된다.
EVEX.U 클래스 필드(5368)(EVEX 바이트 2, 비트 [2]-U) - EVEX.U = 0인 경우, 이는 클래스 A 또는 EVEX.U0를 나타내고, EVEX.U = 1인 경우, 이는 클래스 B 또는 EVEX.U1을 나타낸다.
프리픽스 인코딩 필드(5425)(EVEX 바이트 2, 비트들 [1:0]-pp) - 베이스 연산 필드에 대한 부가 비트들을 제공한다. EVEX 프리픽스 포맷으로 된 레거시 SSE 명령어들에 대한 지원을 제공하는 것에 부가하여, 이것은 SIMD 프리픽스를 콤팩트화하는 이점을 또한 갖는다(SIMD 프리픽스를 표현하기 위해 한 바이트를 요구하기보다는, EVEX 프리픽스는 2 비트만을 요구한다). 일 실시예에서, 레거시 포맷 및 EVEX 프리픽스 포맷 둘 다에서 SIMD 프리픽스(66H, F2H, F3H)를 사용하는 레거시 SSE 명령어들을 지원하기 위해, 이러한 레거시 SIMD 프리픽스들은 SIMD 프리픽스 인코딩 필드에 인코딩되고; 런타임 시에 디코더의 PLA에 제공되기 전에 레거시 SIMD 프리픽스 내로 확장된다(따라서, PLA는 수정 없이 이러한 레거시 명령어들의 레거시 포맷 및 EVEX 포맷 둘 다를 실행할 수 있다). 비록 보다 새로운 명령어들이 오피코드 확장으로서 직접 EVEX 프리픽스 인코딩 필드의 내용을 사용할 수 있지만, 특정 실시예들은 일관성을 위해 유사한 방식으로 확장되지만, 이러한 레거시 SIMD 프리픽스들에 의해 상이한 의미들이 명시되는 것을 가능하게 해준다. 대안의 실시예는 2 비트 SIMD 프리픽스 인코딩들을 지원하도록 PLA를 재설계할 수 있고, 따라서 확장을 요구하지 않는다.
알파 필드(5352)(EVEX 바이트 3, 비트 [7] - EH; EVEX.EH, EVEX.rs, EVEX.RL, EVEX.기입 마스크 제어, 및 EVEX.N이라고도 알려짐; 또한 α로 예시되어 있음) - 이전에 설명된 바와 같이, 이 필드는 컨텍스트 특정적이다.
베타 필드(5354)(EVEX 바이트 3, 비트들 [6:4] - SSS; EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB라고도 알려짐; 또한 βββ로 예시되어 있음) - 이전에 설명된 바와 같이, 이 필드는 컨텍스트 특정적이다.
REX' 필드(5310) - 이것은 REX' 필드의 나머지이고, 확장된 32 레지스터 세트의 상위 16 또는 하위 16 중 어느하나를 인코딩하는 데 사용될 수 있는 EVEX.V' 비트 필드(EVEX 바이트 3, 비트 [3] - V')이다. 이 비트는 비트 반전된 포맷으로 저장된다. 1의 값은 하위 16개의 레지스터를 인코딩하는 데 사용된다. 환언하면, V'VVVV는 EVEX.V', EVEX.vvvv를 결합시킴으로써 형성된다
기입 마스크 필드(5370)(EVEX 바이트 3, 비트들 [2:0] - kkk) - 그의 내용은 이전에 설명된 바와 같이 기입 마스크 레지스터들에서의 레지스터의 인덱스를 명시한다. 본 발명의 일 실시예에서, 특정 값 EVEX.kkk=000은 특정의 명령어에 대해 어떤 기입 마스크도 사용되지 않음을 암시하는 특정 거동을 갖는다(이것은 전부 1들에 하드와이어링된 기입 마스크의 사용 또는 마스킹 하드웨어를 바이패스하는 하드웨어의 사용을 포함한 각종의 방식들로 구현될 수 있다).
실제 오피코드 필드(5430)(바이트 4)는 오피코드 바이트라고도 알려져 있다. 오피코드의 일부가 이 필드에 명시된다.
MOD R/M 필드(5440)(바이트 5)는 MOD 필드(5442), Reg 필드(5444), 및 R/M 필드(5446)를 포함한다. 이전에 기술된 바와 같이, MOD 필드(5442)의 내용은 메모리 액세스와 메모리 액세스 없음 연산들 사이를 구별해준다. Reg 필드(5444)의 역할은 2가지 상황: 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩하는 것, 또는 오피코드 확장으로서 취급되고 임의의 명령어 피연산자를 인코딩하는 데 사용되지 않는 것으로 요약될 수 있다. R/M 필드(5446)의 역할은 다음과 같은 것: 메모리 어드레스를 참조하는 명령어 피연산자를 인코딩하는 것 또는 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩하는 것을 포함할 수 있다.
SIB(Scale, Index, Base) 바이트(바이트 6) - 이전에 설명된 바와 같이, 스케일 필드(5350)의 내용은 메모리 어드레스 생성을 위해 사용된다. SIB.xxx(5454) 및 SIB.bbb(5456) - 이 필드들의 내용들은 레지스터 인덱스들 Xxxx 및 Bbbb과 관련하여 이전에 언급되었다.
변위 필드(5362A)(바이트 7 내지 바이트 10) - MOD 필드(5442)가 10을 포함할 때, 바이트 7 내지 바이트 10은 변위 필드(5362A)이고, 이는 레거시 32-비트 변위(disp32)와 동일하게 작동하고, 바이트 입도로 작동한다.
변위 인자 필드(5362B)(바이트 7) - MOD 필드(5442)가 01을 포함할 때, 바이트 7은 변위 인자필드(5362B)이다. 이 필드의 위치는 바이트 입도로 작동하는 레거시 x86 명령어 세트 8-비트 변위(disp8)의 위치와 동일하다. disp8이 부호 확장되기(sign extended) 때문에, 이는 단지 -128 내지 127 바이트 오프셋들을 어드레싱할 수 있고; 64 바이트 캐시 라인들의 면에서, disp8은 단지 4개의 실제로 유용한 값 -128, -64, 0, 및 64로 설정될 수 있는 8 비트를 사용하며; 보다 큰 범위가 종종 필요하기 때문에, disp32가 사용되지만; disp32는 4바이트를 요구한다. disp8 및 disp32와 달리, 변위 인자 필드(5362B)는 disp8의 재해석이고; 변위 인자 필드(5362B)를 사용할 때, 실제 변위는 메모리 피연산자 액세스의 크기(N)와 곱해진 변위 인자 필드의 내용에 의해 결정된다. 이러한 타입의 변위는 disp8*N이라고 지칭된다. 이것은 평균 명령어 길이를 감소시킨다(단일 바이트가 변위를 위해 사용되지만 훨씬 더 큰 범위를 갖는다). 그러한 압축된 변위는, 유효 변위가 메모리 액세스의 입도의 배수이고, 따라서 어드레스 오프셋의 중복적 하위 비트들이 인코딩될 필요가 없다는 가정에 기초한다. 환언하면, 변위 인자 필드(5362B)가 레거시 x86 명령어 세트 8-비트 변위를 대체한다. 따라서, 변위 인자 필드(5362B)는 disp8이 disp8*N로 오버로드된다는 것만 제외하고 x86 명령어 세트 8-비트 변위와 동일한 방식으로 인코딩된다(따라서 ModRM/SIB 인코딩 규칙들에 어떠한 변화도 없다). 환언하면, 인코딩 규칙들 또는 인코딩 길이들에 어떠한 변화들도 없고, (바이트 단위 어드레스 오프셋(byte-wise address offset)을 획득하기 위해 메모리 피연산자의 크기에 의해 변위를 스케일링할 필요가 있는) 하드웨어에 의한 변위 값의 해석에만 변화가 있다. 즉치 필드(5372)는 이전에 설명된 바와 같이 동작한다.
전체 오피코드 필드
도 54b는 본 발명의 일 실시예에 따른 전체 오피코드 필드(5374)를 구성하는 특정 벡터 친화적 명령어 포맷(5400)의 필드들을 예시하는 블록 다이어그램이다. 구체적으로는, 전체 오피코드 필드(5374)는 포맷 필드(5340), 베이스 연산 필드(5342), 및 데이터 요소 폭(W) 필드(5364)를 포함한다. 베이스 연산 필드(5342)는 프리픽스 인코딩 필드(5425), 오피코드 맵 필드(5415), 및 실제 오피코드 필드(5430)를 포함한다.
레지스터 인덱스 필드
도 54c는 본 발명의 일 실시예에 따른 레지스터 인덱스 필드(5344)를 구성하는 특정 벡터 친화적 명령어 포맷(5400)의 필드들을 예시하는 블록 다이어그램이다. 구체적으로는, 레지스터 인덱스 필드(5344)는 REX 필드(5405), REX' 필드(5410), MODR/M.reg 필드(5444), MODR/M.r/m 필드(5446), VVVV 필드(5420), xxx 필드(5454), 및 bbb 필드(5456)를 포함한다.
증강 연산 필드
도 54d는 본 발명의 일 실시예에 따른 증강 연산 필드(5350)를 구성하는 특정 벡터 친화적 명령어 포맷(5400)의 필드들을 예시하는 블록 다이어그램이다. 클래스(U) 필드(5368)가 0을 포함할 때, 그것은 EVEX.U0(클래스 A(5368A))을 의미하고; 그것이 1을 포함할 때, 그것은 EVEX.U1(클래스 B(5368B))을 의미한다. U = 0이고 MOD 필드(5442)가 11을 포함할 때(메모리 액세스 없음 연산을 의미함), 알파 필드(5352)(EVEX 바이트 3, 비트 [7] - EH)는 rs 필드(5352A)로서 해석된다. rs 필드(5352A)가 1을 포함할 때(라운드(5352A.1)), 베타 필드(5354)(EVEX 바이트 3, 비트들 [6:4] - SSS)는 라운드 제어 필드(5354A)로서 해석된다. 라운드 제어 필드(5354A)는 1 비트 SAE 필드(5356) 및 2 비트 라운드 연산 필드(5358)를 포함한다. rs 필드(5352A)가 0을 포함할 때(데이터 변환(5352A.2)), 베타 필드(5354)(EVEX 바이트 3, 비트들 [6:4] - SSS)는 3 비트 데이터 변환 필드(5354B)로서 해석된다. U = 0이고 MOD 필드(5442)가 00, 01, 또는 10을 포함할 때(메모리 액세스 연산을 의미함), 알파 필드(5352)(EVEX 바이트 3, 비트 [7] - EH)는 축출 힌트(EH) 필드(5352B)로서 해석되고 베타 필드(5354)(EVEX 바이트 3, 비트들 [6:4] - SSS)는 3 비트 데이터 조작 필드(5354C)로서 해석된다.
U=1일 때, 알파 필드(5352)(EVEX 바이트 3, 비트 [7] - EH)는 기입 마스크 제어(Z) 필드(5352C)로서 해석된다. U=1이고 MOD 필드(5442)가 11을 포함할 때(메모리 액세스 없음 연산을 의미함), 베타 필드(5354)의 일부(EVEX 바이트 3, 비트 [4] - S0)는 RL 필드(5357A)로서 해석되고; 그것이 1을 포함할 때(라운드(5357A.1)), 베타 필드(5354)의 나머지(EVEX 바이트 3, 비트 [6-5] - S2-1)는 라운드 연산 필드(5359A)로서 해석되는 반면, RL 필드(5357A)가 0을 포함할 때(VSIZE(5357.A2)), 베타 필드(5354)의 나머지(EVEX 바이트 3, 비트 [6-5] - S2-1)는 벡터 길이 필드(5359B)(EVEX 바이트 3, 비트 [6-5] - L1-0)로서 해석된다. U=1이고 MOD 필드(5442)가 00, 01, 또는 10을 포함할 때(메모리 액세스 연산을 의미함), 베타 필드(5354)(EVEX 바이트 3, 비트들 [6:4] - SSS)는 벡터 길이 필드(5359B)(EVEX 바이트 3, 비트 [6-5] - L1-0) 및 브로드캐스트 필드(5357B)(EVEX 바이트 3, 비트 [4] - B)로서 해석된다.
예시적인 레지스터 아키텍처
도 55는 본 발명의 일 실시예에 따른 레지스터 아키텍처(5500)의 블록 다이어그램이다. 예시된 실시예에서, 512 비트 폭인 32개의 벡터 레지스터(5510)가 있으며; 이 레지스터들은 zmm0 내지 zmm31(zmm 레지스터 세트)로서 참조된다. 다른 실시예들은, zmm 레지스터 세트 대신에, 256 비트 폭인 16개의 벡터 레지스터의 세트를 포함할 수 있으며; 이 레지스터들은 ymm0 내지 ymm15(ymm 레지스터 세트)로서 참조된다. 다른 실시예들은, zmm 레지스터 세트 또는 ymm 레지스터 세트 대신에, 128 비트 폭인 16개의 벡터 레지스터의 세트를 포함할 수 있으며; 이 레지스터들은 xmm0 내지 xmm15(xmm 레지스터 세트)로서 참조된다. 도 55에서, 하위 16개의 zmm 레지스터의 하위 256 비트가 레지스터들 ymm0 내지 ymm15 상에 오버레이되고, 하위 16개의 zmm 레지스터의 하위 128 비트(ymm 레지스터들의 하위 128 비트)가 레지스터들 xmm0 내지 xmm15 상에 오버레이된다.
특정 벡터 친화적 명령어 포맷(5400)은 아래 표에 예시된 바와 같이 이러한 오버레이된 레지스터 파일에 대해 연산한다.
Figure pct00002
환언하면, 벡터 길이 필드(5359B)는 최대 길이와 하나 이상의 다른 보다 짧은 길이 중에서 선택하며, 여기서 각각의 그러한 보다 짧은 길이는 선행 길이의 1/2 길이이고; 벡터 길이 필드(5359B)를 갖지 않는 명령어 템플릿들은 최대 벡터 길이에 대해 연산한다. 게다가, 일 실시예에서, 특정 벡터 친화적 명령어 포맷(5400)의 클래스 B 명령어 템플릿들은 패킹된 또는 스칼라 단정도/배정도 부동 소수점 데이터 및 패킹된 또는 스칼라 정수 데이터에 대해 연산한다. 스칼라 연산들은 zmm/ymm/xmm 레지스터에서의 최하위 데이터 요소 위치에 대해 수행되는 연산들이고; 상위 데이터 요소 위치들은 실시예에 따라 명령어 이전과 동일한 채로 남아있거나 제로화된다.
기입 마스크 레지스터들(5515) - 예시된 실시예에서, 각각이 64 비트 크기인 8개의 기입 마스크 레지스터(k0 내지 k7)가 있다. 대안의 실시예에서, 기입 마스크 레지스터들(5515)은 16 비트 크기이다. 일 실시예에서, 벡터 마스크 레지스터 k0은 기입 마스크로서 사용될 수 없고; 통상적으로 k0을 나타낼 인코딩이 기입 마스크에 대해 사용될 때, 이 인코딩은 0xFFFF의 하드와이어드 기입 마스크(hardwired write mask)를 선택하여, 그 명령어에 대한 기입 마스킹을 효과적으로 디스에이블시킨다.
범용 레지스터들(5525) - 예시된 실시예에서, 메모리 피연산자들을 어드레싱하기 위해 기존의 x86 어드레싱 모드들과 함께 사용되는 16개의 64-비트 범용 레지스터가 있다. 이러한 레지스터들은 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15라는 이름들에 의해 참조된다.
MMX 패킹된 정수 플랫 레지스터 파일(5550)이 에일리어싱되는, 스칼라 부동 소수점 스택 레지스터 파일(x87스택)(5545) - 예시된 실시예에서, x87 스택은 x87 명령어 세트 확장을 사용하여 32/64/80-비트 부동 소수점 데이터에 대해 스칼라 부동 소수점 연산들을 수행하는 데 사용되는 8-요소 스택인 반면; MMX 레지스터들은 64-비트 패킹된 정수 데이터에 대해 연산들을 수행하는 데는 물론, MMX 및 XMM 레지스터들 사이에서 수행되는 일부 연산들에 대한 피연산자들을 보유하는 데 사용된다.
본 발명의 대안의 실시예들은 보다 넓은 또는 보다 좁은 레지스터들을 사용할 수 있다. 부가적으로, 본 발명의 대안의 실시예들은 보다 많은, 보다 적은, 또는 상이한 레지스터 파일들 및 레지스터들을 사용할 수 있다.
에뮬레이션(바이너리 변환(binary translation), 코드 모핑 등을 포함함)
일부 경우들에서, 명령어 변환기는 소스 명령어 세트로부터 타깃 명령어 세트로 명령어를 변환하는 데 사용될수 있다. 예를 들어, 명령어 변환기는 코어에 의해 프로세싱될 하나 이상의 다른 명령어들로 명령어를 (예컨대, 정적 바이너리 변환, 동적 컴필레이션을 포함한 동적 바이너리 변환을 사용하여) 변환(translate)하거나, 모프(morph)하거나, 에뮬레이트하거나, 또는 다른 방식으로 변환(convert)할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서(on processor), 오프 프로세서(off processor), 또는 일부는 온 프로세서이고 일부는 오프 프로세서일 수 있다.
도 56은 본 발명의 실시예들에 따른 소스 명령어 세트에서의 바이너리 명령어들을 타깃 명령어 세트에서의 바이너리 명령어들로 변환하기 위한 소프트웨어 명령어 변환기의 사용을 대비시키는 블록 다이어그램이다. 예시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합들로 구현될 수 있다. 도 56은 하이 레벨 언어(5602)로 된 프로그램이 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(5616)에 의해 기본적으로 실행될 수 있는 x86 바이너리 코드(5606)를 생성하기 위해 x86 컴파일러(5604)를 사용하여 컴파일될 수 있다는 것을 도시하고 있다. 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(5616)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위해서, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서 상에서 실행되는 것으로 목표로 하는 오브젝트 코드 버전의 애플리케이션들 또는 다른 소프트웨어를 호환가능하게 실행하거나 또는 다른 방식으로 프로세싱함으로써, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(5604)는, 부가의 링크 프로세싱(linkage processing)을 사용하여 또는 사용하지 않고, 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(5616) 상에서 실행될 수 있는 x86 바이너리 코드(5606)(예컨대, 오브젝트 코드)를 생성하도록 동작가능한 컴파일러를 나타낸다. 이와 유사하게, 도 56은, 하이 레벨 언어(5602)로 된 프로그램이 적어도 하나의 x86 명령어 세트 코어를 갖지 않는 프로세서(5614)(예컨대, 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 그리고/또는 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안의 명령어 세트 바이너리 코드(5610)을 생성하기 위해 대안의 명령어 세트 컴파일러(5608)를 사용하여 컴파일될 수 있다는 것을 도시하고 있다. 명령어 변환기(5612)는 x86 바이너리 코드(5606)를 x86 명령어 세트 코어를 갖지 않는 프로세서(5614)에 의해 기본적으로 실행될 수 있는 코드로 변환하는 데 사용된다. 이러한 변환된 코드는, 이것을 할 수 있는 명령어 변환기가 만들기 어렵기 때문에, 대안의 명령어 세트 바이너리 코드(5610)와 동일할 가능성이 없지만; 변환된 코드는 일반적인 연산을 달성할 것이며 대안의 명령어 세트로부터의 명령어들로 구성될 것이다. 따라서, 명령어 변환기(5612)는, 에뮬레이션, 시뮬레이션, 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스가 x86 바이너리 코드(5606)를 실행할 수 있게 해주는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
도 57은 본 명세서에 설명된 하나 이상의 기법이 다양한 실시예들에 따라 구현될 수 있는 데이터 센터 또는 다른 타입의 컴퓨팅 네트워크를 일반적으로 나타낼 수 있는 데이터 센터(5700)의 개념적 개요를 예시하고 있다. 도 57에 도시된 바와 같이, 데이터 센터(5700)는 일반적으로 복수의 랙들을 포함할 수 있으며, 그 각각은 물리 리소스들의 각자의 세트를 포함하는 컴퓨팅 장비를 하우징할 수 있다. 도 57에 묘사된 특정의 비제한적인 예에서, 데이터 센터(5700)는, 물리 리소스들(PCR들)(5705A 내지 5705D)의 각자의 세트들을 포함하는 컴퓨팅 장비를 하우징하는, 4개의 랙(5702A 내지 5702D)을 포함한다. 이 예에 따르면, 데이터 센터(5700)의 물리 리소스들(5706)의 집합적 세트는 랙들(5702A 내지 5702D) 사이에 분배되는 물리 리소스들(5705A 내지 5705D)의 다양한 세트들을 포함한다. 물리 리소스들(5706)은, - 예를 들어 - 프로세서들, 코프로세서들, 가속기들, FPGA들(field-programmable gate arrays), 메모리, 및 스토리지와 같은, 다수의 타입들의 리소스들을 포함할 수 있다. 실시예들이 이러한 예들로 제한되지 않는다.
예시적인 데이터 센터(5700)는 많은 점들에서 전형적인 데이터 센터들과 상이하다. 예를 들어, 예시적인 실시예에서, CPU들, 메모리, 및 다른 컴포넌트들과 같은 컴포넌트들이 배치되는 회로 보드들("슬레드들(sleds)")은 증가된 열 성능을 위해 설계되었다. 상세하게는, 예시적인 실시예에서, 슬레드들은 전형적인 보드들보다 얕다. 환언하면, 냉각 팬들이 위치되는 경우, 슬레드들은 전방으로부터 후방까지 보다 짧다. 이것은 공기가 보드 상의 컴포넌트들을 가로질러 지나가야 하는 경로의 길이를 감소시킨다. 게다가, 슬레드 상의 컴포넌트들은 전형적인 회로 보드들에서보다 더 멀리 이격되어 있으며, 컴포넌트들은 섀도잉(shadowing)(즉, 하나의 컴포넌트가 다른 컴포넌트의 공기 유동 경로에 있는 것)을 감소시키거나 제거하도록 배열된다. 예시적인 실시예에서, 프로세서들과 같은 프로세싱 컴포넌트들은 슬레드의 상부 측면에 위치되는 반면, DIMM들과 같은, 니어 메모리(near memory)는 슬레드의 하부 측면 상에 위치된다. 이 설계에 의해 제공되는 향상된 공기 유동의 결과로서, 컴포넌트들은 전형적인 시스템들에서보다 높은 주파수들 및 전력 레벨들에서 동작할 수 있으며, 그로써 성능을 증가시킬 수 있다. 게다가, 슬레드들은 각각의 랙(5702A, 5702B, 5702C, 5702D)에 있는 전원 및 데이터 통신 케이블들과 블라인드 방식으로 메이팅하도록 구성되어, 신속하게 제거되고, 업그레이드되며, 재설치되고, 그리고/또는 대체될 수 있는 그들의 능력을 향상시킬 수 있다. 이와 유사하게, 프로세서들, 가속기들, 메모리, 및 데이터 스토리지 드라이브들과 같은, 슬레드들 상에 위치된 개별 컴포넌트들은 그들의 서로로부터의 증가된 간격으로 인해 쉽게 업그레이드되도록 구성된다. 예시적인 실시예에서, 컴포넌트들은 그들의 진정성(authenticity)을 증명하기 위해 하드웨어 보증(hardware attestation) 특징들을 부가로 포함한다.
게다가, 예시적인 실시예에서, 데이터 센터(5700)는 이더넷 및 Omni-Path를 포함한 다수의 다른 네트워크 아키텍처들을 지원하는 단일 네트워크 아키텍처("패브릭")를 이용한다. 슬레드들은, 예시적인 실시예에서, 전형적인 연선 케이블링(예컨대, 카테고리 5, 카테고리 5e, 카테고리 6 등)보다 더 높은 대역폭 및 더 낮은 레이턴시를 제공하는 광섬유들을 통해 스위치들에 커플링된다. 고 대역폭, 저 레이턴시 상호접속부들 및 네트워크 아키텍처로 인해 데이터 센터(5700)는, 사용 중에, 물리적으로 분리되어(disaggregated) 있는 메모리, 가속기들(예컨대, 그래픽스 가속기들, FPGA들, ASIC들 등), 및 데이터 스토리지 드라이브들과 같은, 리소스들을 풀링하고, 이들을 필요에 따라 컴퓨트 리소스들(예컨대, 프로세서들)에 제공할 수 있어, 풀링된 리소스들이 로컬인 것처럼 컴퓨트 리소스들이 풀링된 리소스들에 액세스할 수 있게 해준다. 예시적인 데이터 센터(5700)는 다양한 리소스들에 대한 사용 정보를 부가적으로 수신하고, 과거의 리소스 사용에 기초하여 상이한 타입의 작업부하들에 대한 리소스 사용을 예측하며, 이 정보에 기초하여 리소스들을 동적으로 재할당한다.
데이터 센터(5700)의 랙들(5702A, 5702B, 5702C, 5702D)은 각종의 타입의 유지보수 작업들의 자동화를 용이하게 하는 물리적 설계 특징들을 포함할 수 있다. 예를 들어, 데이터 센터(5700)는 로봇으로 액세스되도록 그리고 로봇으로 조작가능한 리소스 슬레드들을 수용하고 하우징하도록 설계된 랙들을 사용하여 구현될 수 있다. 게다가, 예시적인 실시예에서, 랙들(5702A, 5702B, 5702C, 5702D)은 전원들에 대해 전형적인 것보다 더 큰 전압을 수신하는 통합된 전원들을 포함한다. 증가된 전압은 전원들이 각각의 슬레드 상의 컴포넌트에 부가의 전력을 제공할 수 있게 해주어, 컴포넌트들이 전형적인 것보다 더 높은 주파수들에서 동작할 수 있게 해준다. 도 58은 데이터 센터(5700)의 랙(202)의 예시적인 논리적 구성을 나타낸다. 도 58에 도시된 바와 같이, 랙(5802)은 일반적으로 복수의 슬레드들을 하우징할 수 있으며, 그 각각은 물리 리소스들의 각자의 세트를 포함할 수 있다. 도 58에 묘사된 특정의 비제한적인 예에서, 랙(5802)은 물리 리소스들(5805-1 내지 5805-4)의 각자의 세트들을 포함하는 슬레드들(5804-1 내지 5804-4)을 하우징하고, 슬레드들 각각은 랙(5802)에 포함된 물리 리소스들(5806)의 집합적 세트의 일 부분을 구성한다. 도 1과 관련하여, 랙(5802)이 - 예를 들어 - 랙(102A)을 나타내는 경우, 물리 리소스들(5806)은 랙(102A)에 포함된 물리 리소스들(105A)에 대응할 수 있다. 이 예와 관련하여, 물리 리소스들(105A)은 따라서, 랙(5802)의 슬레드들(5804-1 내지 5804-4)에 포함된 물리 스토리지 리소스들(5805-1), 물리 가속기 리소스들(5805-2), 물리 메모리 리소스들(5804-3), 및 물리 컴퓨트 리소스들(5805-5)을 포함한, 물리 리소스들의 각자의 세트들로 구성될 수 있다. 실시예들이 이 예로 제한되지 않는다. 각각의 슬레드는 다양한 타입의 물리 리소스들(예컨대, 컴퓨트, 메모리, 가속기, 스토리지) 각각의 풀을 포함할 수 있다. 분리된 리소스들을 포함하는 로봇으로 액세스가능하고 로봇으로 조작가능한 슬레드들을 가지는 것에 의해, 각각의 타입의 리소스는 서로 독립적으로 그리고 그 자신의 최적화된 재생률(refresh rate)로 업그레이드될 수 있다.
도 59는 본 명세서에 설명된 하나 이상의 기법이 다양한 실시예들에 따라 구현될 수 있는 데이터 센터를 일반적으로 나타낼 수 있는 데이터 센터(5900)의 일 예를 예시하고 있다. 도 59에 묘사된 특정의 비제한적인 예에서, 데이터 센터(5900)는 랙들(5902-1 내지 5902-32)을 포함한다. 다양한 실시예들에서, 데이터 센터(5900)의 랙들은 다양한 액세스 경로들을 정의하고 그리고/또는 수용하는 방식으로 배열될 수 있다. 예를 들어, 도 59에 도시된 바와 같이, 데이터 센터(5900)의 랙들은 액세스 경로들(5911A, 5911B, 5911C, 및 5911D)를 정의하고 그리고/또는 수용하는 방식으로 배열될 수 있다. 일부 실시예들에서, 그러한 액세스 경로들의 존재는 일반적으로, 로봇 유지보수 장비와 같은, 자동화된 유지보수 장비가 데이터 센터(5900)의 다양한 랙들에 하우징된 컴퓨팅 장비에 물리적으로 액세스하고 자동화된 유지보수 작업들(예컨대, 고장난 슬레드를 대체하는 것, 슬레드를 업그레이드하는 것)을 수행할 수 있게 해줄 수 있다. 다양한 실시예들에서, 액세스 경로들(5911A, 5911B, 5911C, 및 5911D)의 치수, 랙들(5902-1 내지 5902-32)의 치수, 및/또는 데이터 센터(5900)의 물리적 레이아웃의 하나 이상의 다른 양태는 그러한 자동화된 운영들을 용이하게 하도록 선택될 수 있다. 실시예들이 이와 관련하여 제한되지 않는다.
도 60은 본 명세서에 설명된 하나 이상의 기법이 다양한 실시예들에 따라 구현될 수 있는 데이터 센터를 일반적으로 나타낼 수 있는 데이터 센터(6000)의 일 예를 예시하고 있다. 도 60에 도시된 바와 같이, 데이터 센터(6000)는 광섬유(6012)를 특징으로 할 수 있다. 광섬유(6012)는 일반적으로 (광학 케이블링과 같은) 광학 시그널링 매체들과 광학 스위칭 인프라스트럭처의 조합을 포함할 수 있으며, 이를 통해 데이터 센터(6000) 내의 임의의 특정 슬레드는 데이터 센터(6000) 내의 다른 슬레드들 각각으로 신호들을 송신할(그리고 그로부터 신호들을 수신할) 수 있다. 광섬유(6012)가 임의의 주어진 슬레드에 제공하는 시그널링 접속성은 동일한 랙 내의 다른 슬레드들 및 다른 랙들 내의 슬레드들 둘 다에 대한 접속성을 포함할 수 있다. 도 60에 묘사된 특정의 비제한적인 예에서, 데이터 센터(6000)는 4개의 랙(6002A 내지 6002D)을 포함한다. 랙들(6002A 내지 6002D)은 슬레드들의 각자의 쌍들(6004A-1 및 6004A-2, 6004B-1 및 6004B-2, 6004C-1 및 6004C-2, 및 6004D-1 및 6004D-2)을 하우징한다. 따라서, 이 예에서, 데이터 센터(6000)는 총 8개의 슬레드를 포함한다. 광섬유(6012)를 통해, 각각의 그러한 슬레드는 데이터 센터(6000) 내의 7개의 다른 슬레드 각각과 시그널링 접속성을 가질 수 있다. 예를 들어, 광섬유(6012)를 통해, 랙(6002A) 내의 슬레드(6004A-1)는 랙(6002A) 내의 슬레드(6004A-2)는 물론 데이터 센터(6000)의 다른 랙들(6002B, 6002C, 및 6002D) 사이에 분산되어 있는 6개의 다른 슬레드(6004B-1, 6004B-2, 6004C-1, 6004C-2, 6004D-1, 및 6004D-2)과 시그널링 접속성을 가질 수 있다. 실시예들이 이 예로 제한되지 않는다.
도 5는 일부 실시예들에서, 도 57, 도 59, 및 도 60의 예시적인 데이터 센터들(5700, 5900, 및 6000) 중 임의의 것과 같은, 데이터 센터의 다양한 슬레드들 사이에 확립될 수 있는 링크 계층 접속성을 일반적으로 나타낼 수 있는 접속성 스킴(500)의 개요를 예시하고 있다. 접속성 스킴(6100)은 듀얼 모드 광학 스위칭 인프라스트럭처(6114)를 특징으로 하는 광섬유를 사용하여 구현될 수 있다. 듀얼 모드 광학 스위칭 인프라스트럭처(6114)는 일반적으로 광학 시그널링 매체들의 동일한 통합 세트(unified set)를 통해 다수의 링크 계층 프로토콜들에 따른 통신을 수신할 수 있고 그러한 통신을 적절히 스위칭할 수 있는 스위칭 인프라스트럭처를 포함할 수 있다. 다양한 실시예들에서, 듀얼 모드 광학 스위칭 인프라스트럭처(6114)는 하나 이상의 듀얼 모드 광학 스위치(6115)를 사용하여 구현될 수 있다. 다양한 실시예들에서, 듀얼 모드 광학 스위치들(6115)은 일반적으로 하이 래딕스 스위치들(high-radix switches)을 포함할 수 있다. 일부 실시예들에서, 듀얼 모드 광학 스위치들(6115)은, 4-플라이(four-ply) 스위치들과 같은, 멀티-플라이(multi-ply) 스위치들을 포함할 수 있다. 다양한 실시예들에서, 듀얼 모드 광학 스위치들(6115)은 이들이 종래의 스위칭 디바이스들과 비교하여 상당히 감소된 레이턴시로 통신을 스위칭할 수 있게 해주는 집적 실리콘 포토닉스(integrated silicon photonics)를 특징으로 할 수 있다. 일부 실시예들에서, 듀얼 모드 광학 스위치들(6115)은 하나 이상의 듀얼 모드 광학 스파인 스위치(dual-mode optical spine switches)(6120)를 부가로 포함하는 리프-스파인 아키텍처(leaf-spine architecture)로 리프 스위치들(leaf switches)(6130)을 구성할 수 있다.
다양한 실시예들에서, 듀얼 모드 광학 스위치들은 광섬유의 광학 시그널링 매체들을 통해 인터넷 프로토콜(IP 패킷들)을 운반하는 이더넷 프로토콜 통신과 제2 HPC(high-performance computing) 링크 계층 프로토콜(예컨대, 인텔의 Omni-Path Architecture들, Infiniband)에 따른 통신 둘 다를 수신할 수 있다. 도 61a에 반영된 바와 같이, 광섬유에 광학 시그널링 접속성을 갖는 임의의 특정 쌍의 슬레드들(6104A 및 6104B)에 대해, 접속성 스킴(6100)은 따라서 이더넷 링크들 및 HPC 링크들 둘 다를 통해 링크 계층 접속성에 대한 지원을 제공할 수 있다. 따라서, 이더넷 및 HPC 통신 둘 다는 단일 고 대역폭, 저 레이턴시 스위치 패브릭에 의해 지원될 수 있다. 실시예들이 이 예로 제한되지 않는다.
도 61b는 일부 실시예들에 따른 도 57 내지 도 60에 묘사된 랙들 중 임의의 특정 랙의 아키텍처를 나타낼 수 있는 랙 아키텍처(600)의 일반적인 개요를 예시하고 있다. 도 61b에 반영된 바와 같이, 랙 아키텍처(600)는 일반적으로 슬레드들이 삽입될 수 있는 다수의 슬레드 공간들을 특징으로 할 수 있으며, 슬레드 공간들 각각은 랙 액세스 영역(601)을 통해 로봇으로 액세스가능할 수 있다. 도 61b에 묘사된 특정의 비제한적인 예에서, 랙 아키텍처(6100)는 5개의 슬레드 공간(6103-1 내지 6103-5)을 특징으로 한다. 슬레드 공간들(6103-1 내지 6103-5)은 각자의 다목적 커넥터 모듈들(multi-purpose connector modules)(MPCM들)(6116-1 내지 6116-5)을 특징으로 한다. 도 61c는 도 61b의 랙 아키텍처(6100)의 일 부분의 상세 다이어그램이다. 도 61c에 도시된 바와 같이, 슬레드가 슬레드 공간들(6103-1 내지 6103-5) 중 임의의 주어진 슬레드 공간에 삽입될 때, 대응하는 MPCM(예컨대, MPCM(6116-3))은 삽입된 슬레드의 상대(counterpart) MPCM(6120)과 커플링할 수 있다. 이 커플링은 슬레드가 하우징되어 있는 랙의 시그널링 인프라스트럭처 및 전원 인프라스트럭처 둘 다에 대한 접속성을 삽입된 슬레드에 제공할 수 있다.
랙 아키텍처(6100)에 의해 수용될 슬레드들의 타입들 중에는 확장 능력을 특징으로 하는 하나 이상의 타입의 슬레드가 포함될 수 있다. 도 62는 그러한 타입의 슬레드를 나타낼 수 있는 슬레드(6204)의 일 예를 예시하고 있다. 도 62에 도시된 바와 같이, 슬레드(6204)는 물리 리소스들(6205)의 세트는 물론, 슬레드(6204)가 도 61a의 슬레드 공간들(603-1 내지 603-5) 중 임의의 것과 같은 슬레드 공간에 삽입될 때 상대 MPCM과 커플링하도록 설계된 MPCM(6216)을 포함할 수 있다. 슬레드(6204)는 또한 확장 커넥터(6217)를 특징으로 할 수 있다. 확장 커넥터(6217)는 일반적으로, 확장 슬레드(6218)와 같은, 하나 이상의 타입의 확장 모듈을 수용할 수 있는 소켓, 슬롯, 또는 다른 타입의 접속 요소를 포함할 수 있다. 확장 스레드(6218) 상의 상대 커넥터와 커플링함으로써, 확장 커넥터(6217)는 확장 슬레드(6218) 상에 존재하는 보조 컴퓨팅 리소스들(6205B)에 대한 액세스를 물리 리소스들(6205)에 제공할 수 있다. 실시예들이 이와 관련하여 제한되지 않는다.
도 63은, 도 62의 슬레드(6204)와 같은, 확장 능력을 특징으로 하는 슬레드들에 대한 지원을 제공하기 위해 구현될 수 있는 랙 아키텍처를 나타낼 수 있는 랙 아키텍처(800)의 일 예를 예시하고 있다. 도 63에 묘사된 특정의 비제한적인 예에서, 랙 아키텍처(6300)는 각자의 MPCM들(6316-1 내지 6316-7)을 특징으로 하는 7개의 슬레드 공간(6303-1 내지 6303-7)을 포함한다. 슬레드 공간들(6303-1 내지 6303-7)은 각자의 프라이머리 영역들(6303-1A 내지 6303-7A) 및 각자의 확장 영역들(6303-1B 내지 6303-7B)을 포함한다. 각각의 그러한 슬레드 공간에 대해, 대응하는 MPCM이 삽입된 슬레드의 상대 MPCM과 커플링될 때, 프라이머리 영역은 일반적으로 삽입된 슬레드를 물리적으로 수용하는 슬레드 공간의 영역을 구성할 수 있다. 확장 영역은 일반적으로, 삽입된 슬레드가 그러한 모듈로 구성되는 경우에, 도 62의 확장 슬레드(6218)와 같은, 확장 모듈을 물리적으로 수용할 수 있는 슬레드 공간의 영역을 구성할 수 있다.
도 64는 일부 실시예들에 따른 도 8의 랙 아키텍처(800)에 따라 구현된 랙을 나타낼 수 있는 랙(902)의 일 예를 예시하고 있다. 도 64에 묘사된 특정의 비제한적인 예에서, 랙(6402)은 각자의 프라이머리 영역들(6403-1A 내지 6403-7A) 및 각자의 확장 영역들(6403-1B 내지 6403-7B)을 포함하는 7개의 슬레드 공간(6403-1 내지 6403-7)을 특징으로 한다. 다양한 실시예들에서, 랙(6402)에서의 온도 제어는 공기 냉각 시스템을 사용하여 구현될 수 있다. 예를 들어, 도 64에 반영된 바와 같이, 랙(6402)은 일반적으로 다양한 슬레드 공간들(6403-1 내지 6403-7) 내에 공기 냉각을 제공하도록 배열된 복수의 팬들(6419)을 특징으로 할 수 있다. 일부 실시예들에서, 슬레드 공간의 높이는 종래의 "1U" 서버 높이보다 크다. 그러한 실시예들에서, 팬들(6419)은 일반적으로 종래의 랙 구성들에서 사용되는 팬들과 비교하여 상대적으로 느리고, 큰 직경의 냉각 팬들을 포함할 수 있다. 보다 큰 직경의 냉각 팬들을 보다 낮은 속도들로 작동시키는 것은, 동일한 양의 냉각을 여전히 제공하면서, 보다 높은 속도들로 작동하는 보다 작은 직경의 냉각 팬들에 비해 팬 수명을 증가시킬 수 있다. 슬레드들은 종래의 랙 치수보다 물리적으로 얕다. 게다가, 컴포넌트들은 열 섀도잉(thermal shadowing)을 감소시키도록 각각의 슬레드 상에 배열된다(즉, 공기 유동의 방향으로 직렬로 배열되지 않음). 그 결과, 보다 넓고, 보다 얕은 슬레드들은 디바이스 성능의 증가를 가능하게 해주는데, 그 이유는 디바이스들이 개선된 냉각(에컨대, 열 섀도잉 없음, 디바이스들 사이의 보다 많은 공간, 보다 큰 히트 싱크들을 위한 보다 많은 자리(room) 등)으로 인해 보다 높은 열 엔벨로프(thermal envelope)(예컨대, 250W)로 동작될 수 있기 때문이다.
MPCM들(6416-1 내지 6416-7)은 삽입된 슬레드들에게 각자의 전력 모듈들(6420-1 내지 6420-7)에 의해 소싱되는(sourced) 전력에 대한 액세스를 제공하도록 구성될 수 있으며, 전력 모듈들 각각은 외부 전원(6421)으로부터 전력을 끌어올(draw) 수 있다. 다양한 실시예들에서, 외부 전원(6421)은 AC(alternating current) 전력을 랙(6402)에 전달할 수 있고, 전력 모듈들(6420-1 내지 6420-7)은 그러한 AC 전력을 삽입된 슬레드들에 소싱되는 DC(direct current) 전력으로 변환하도록 구성될 수 있다. 일부 실시예들에서, 예를 들어, 전력 모듈들(6420-1 내지 6420-7)은 각자의 MPCM들(6416-1 내지 6416-7)을 통해 삽입된 슬레드들에 제공하기 위해 277 볼트 AC 전력을 12 볼트 DC 전력으로 변환하도록 구성될 수 있다. 실시예들이 이 예로 제한되지 않는다.
MPCM들(6416-1 내지 6416-7)은 또한, 도 5의 듀얼 모드 광학 스위칭 인프라스트럭처(514)와 동일할 - 또는 유사할 - 수 있는, 듀얼 모드 광학 스위칭 인프라스트럭처(6414)에 대한 광학 시그널링 접속성을 삽입된 슬레드들에 제공하도록 배열될 수 있다. 다양한 실시예들에서, MPCM들(6416-1 내지 6416-7)에 포함된 광학 커넥터들은 삽입된 슬레드들의 MPCM들에 포함된 상대 광학 커넥터들과 커플링하여, 그러한 슬레드들에 광학 케이블링(6422-1 내지 6422-7)의 각자의 길이들을 통해 듀얼 모드 광학 스위칭 인프라스트럭처(6414)에 대한 광학 시그널링 접속성을 제공하도록 설계될 수 있다. 일부 실시예들에서, 광학 케이블링의 각각의 그러한 길이는 그의 대응하는 MPCM으로부터 랙(6402)의 슬레드 공간들의 외부에 있는 광학 인터커넥트 룸(optical interconnect loom)(6423)으로 연장될 수 있다. 다양한 실시예들에서, 광학 인터커넥트 룸(6423)은 랙(6402)의 지지 포스트(support post) 또는 다른 타입의 하중 지지 요소(load-bearing element)를 통과하도록 배열될 수 있다. 실시예들이 이와 관련하여 제한되지 않는다. 삽입된 슬레드들이 MPCM들을 통해 광학 스위칭 인프라스트럭처에 접속되기 때문에, 새로 삽입된 슬레드를 수용하도록 랙 케이블링을 수동으로 구성하는 데 전형적으로 소비되는 리소스들이 절감될 수 있다.
도 65는 일부 실시예들에 따른 도 64의 랙(6402)과 관련하여 사용하도록 설계된 슬레드를 나타낼 수 있는 슬레드(6504)의 일 예를 예시하고 있다. 슬레드(6504)는 광학 커넥터(6516A) 및 전력 커넥터(6516B)를 포함하고 슬레드 공간에의 MPCM(6516)의 삽입과 함께 그 슬레드 공간의 상대 MPCM과 커플링하도록 설계된 MPCM(6516)을 특징으로 할 수 있다. MPCM(6516)을 그러한 상대 MPCM과 커플링시키는 것은 전력 커넥터(6516)로 하여금 상대 MPCM에 포함된 전력 커넥터와 커플링하게 할 수 있다. 이것은 일반적으로 슬레드(6504)의 물리 리소스들(6505)이 전력 커넥터(6516)를 물리 리소스들(6505)에 도전적으로 커플링시키는 전력 전송 매체들(6524) 및 전력 커넥터(6516)를 통해 외부 소스로부터의 전력을 소싱할 수 있게 해준다.
슬레드(6504)는 듀얼 모드 광학 네트워크 인터페이스 회로부(6526)를 또한 포함할 수 있다. 듀얼 모드 광학 네트워크 인터페이스 회로부(6526)는 일반적으로 도 64의 듀얼 모드 광학 스위칭 인프라스트럭처(6414)에 의해 지원되는 다수의 링크 계층 프로토콜들 각각에 따라 광학 시그널링 매체들을 통해 통신할 수 있는 회로부를 포함할 수 있다. 일부 실시예들에서, 듀얼 모드 광학 네트워크 인터페이스 회로부(6526)는 이더넷 프로토콜 통신들 및 제2 고성능 프로토콜에 따른 통신 둘 다를 할 수 있다. 다양한 실시예들에서, 듀얼 모드 광학 네트워크 인터페이스 회로부(6526)는 하나 이상의 광학 트랜시버 모듈(6527)을 포함할 수 있으며, 광학 트랜시버 모듈들(6527) 각각은 하나 이상의 광학 채널 각각을 통해 광학 신호들을 전송하고 수신할 수 있다. 실시예들이 이와 관련하여 제한되지 않는다.
MPCM(6516)을 주어진 랙에서의 슬레드 공간의 상대 MPCM과 커플링시키는 것은 광학 커넥터(6516A)로 하여금 상대 MPCM에 포함된 광학 커넥터와 커플링하게 할 수 있다. 이것은 일반적으로, 광학 채널들(6525)의 세트의 각각의 광학 채널을 통해, 슬레드의 광학 케이블링과 듀얼 모드 광학 네트워크 인터페이스 회로부(6526) 사이의 광학 접속성을 확립할 수 있다. 듀얼 모드 광학 네트워크 인터페이스 회로부(6526)는 전기 시그널링 매체들(6528)을 통해 슬레드(6504)의 물리 리소스들(6505)과 통신할 수 있다. 개선된 냉각을 제공하고 상대적으로 더 높은 열 엔벨로프(예컨대, 250W)에서의 동작을 가능하게 해주기 위한 슬레드들의 치수 및 슬레드들 상에서의 컴포넌트들의 배열에 부가하여, 도 64를 참조하여 앞서 논의된 바와 같이, 일부 실시예들에서, 슬레드는 물리 리소스들(6505)에 의해 발생된 열을 소산시키도록 배열된 히트파이프 및/또는 히트 싱크들과 같은, 공기 냉각을 용이하게 하는 하나 이상의 부가 특징을 포함할 수 있다. 비록 도 65에 묘사된 예시적인 슬레드(6504)가 확장 커넥터를 특징으로 하지 않지만, 슬레드(6504)의 설계 요소들을 특징으로 하는 임의의 주어진 슬레드가 또한 일부 실시예에 따른 확장 커넥터를 특징으로 할 수 있다는 점은 주목할 만한 가치가 있다. 실시예들이 이와 관련하여 제한되지 않는다.
도 66은 본 명세서에 설명된 하나 이상의 기법이 다양한 실시예들에 따라 구현될 수 있는 데이터 센터를 일반적으로 나타낼 수 있는 데이터 센터(6600)의 일 예를 예시하고 있다. 도 66에 반영된 바와 같이, 물리 인프라스트럭처 관리 프레임워크(6650A)는 데이터 센터(6600)의 물리 인프라스트럭처(6600A)의 관리를 용이하게 하도록 구현될 수 있다. 다양한 실시예들에서, 물리 인프라스트럭처 관리 프레임워크(6650A)의 하나의 기능은, 물리 인프라스트럭처(6600A) 내의 컴퓨팅 장비를 서비스하기 위해 로봇 유지보수 장비를 사용하는 것과 같이, 데이터 센터(6600) 내에서의 자동화된 유지보수 기능들을 관리하는 것일 수 있다. 일부 실시예들에서, 물리 인프라스트럭처(6600A)는 물리 인프라스트럭처(6600A)의 원격 자동화된 관리를 지원하기에 충분히 강건한 텔레메트리 보고(telemetry reporting)를 수행하는 진보된 텔레메트리 시스템을 특징으로 할 수 있다. 다양한 실시예들에서, 그러한 진보된 텔레메트리 시스템에 의해 제공되는 텔레메트리 정보는 고장 예측/방지 능력 및 용량 계획 능력과 같은 특징들을 지원할 수 있다. 일부 실시예들에서, 물리 인프라스트럭처 관리 프레임워크(6650A)는 하드웨어 보증 기법들을 사용하여 물리 인프라스트럭처 컴포넌트들의 인증을 관리하도록 또한 구성될 수 있다. 예를 들어, 로봇들은 설치될 각각의 컴포넌트와 연관된 RFID(radio frequency identification) 태그로부터 수집된 정보를 분석함으로써 설치 이전에 컴포넌트들의 진정성을 검증할 수 있다. 실시예들이 이와 관련하여 제한되지 않는다.
도 66에 도시된 바와 같이, 데이터 센터(6600)의 물리 인프라스트럭처(6600A)는, 듀얼 모드 광학 스위칭 인프라스트럭처(6614)를 포함할 수 있는, 광섬유(6612)를 포함할 수 있다. 광섬유(6612) 및 듀얼 모드 광학 스위칭 인프라스트럭처(6614)는, 제각기, 도 4의 광섬유(412) 및 도 5의 듀얼 모드 광학 스위칭 인프라스트럭처(514)와 동일할 - 또는 유사할 - 수 있으며, 데이터 센터(6600)의 슬레드들 간의 고 대역폭, 저 레이턴시 다중 프로토콜 접속성을 제공할 수 있다. 도 1을 참조하여 앞서 논의된 바와 같이, 다양한 실시예들에서, 그러한 접속성의 이용가능성은 가속기들, 메모리, 및 스토리지와 같은 리소스들을 분리시키고 동적으로 풀링하는 것을 실현가능하게 만들 수 있다. 일부 실시예들에서, 예를 들어, 하나 이상의 풀링된 가속기 슬레드(6630)가 데이터 센터(6600)의 물리 인프라스트럭처(6600A) 중에 포함될 수 있으며, 풀링된 가속기 슬레드들 각각은 광섬유(6612) 및 듀얼 모드 광학 스위칭 인프라스트럭처(6614)를 통해 다른 슬레드들에 의해 이용가능하고 전역적으로 액세스가능한 - 예를 들어, 코프로세서들 및/또는 FPGA들과 같은 - 가속기 리소스들의 풀을 포함할 수 있다.
다른 예에서, 다양한 실시예들에서, 하나 이상의 풀링된 스토리지 슬레드(6632)가 데이터 센터(6600)의 물리 인프라스트럭처(6600A) 중에 포함될 수 있으며, 풀링된 스토리지 슬레드들 각각은 광섬유(6612) 및 듀얼 모드 광학 스위칭 인프라스트럭처(6614)를 통해 다른 슬레드들에 의해 이용가능하고 전역적으로 액세스가능한 스토리지 리소스들의 풀을 포함할 수 있다. 일부 실시예들에서, 그러한 풀링된 스토리지 슬레드들(6632)은 SSD들(solid-state drives)과 같은 솔리드 스테이트 스토리지 디바이스들의 풀들을 포함할 수 있다. 다양한 실시예들에서, 하나 이상의 고성능 프로세싱 슬레드(6634)가 데이터 센터(6600)의 물리 인프라스트럭처(6600A) 중에 포함될 수 있다. 일부 실시예들에서, 고성능 프로세싱 슬레드들(6634)은 고성능 프로세서들의 풀들은 물론, 최대 250W 이상의 보다 높은 열 엔벨로프를 가져오기 위해 공기 냉각을 향상시키는 냉각 특징들을 포함할 수 있다. 다양한 실시예들에서, 임의의 주어진 고성능 프로세싱 슬레드(6634)는, 그 고성능 프로세싱 슬레드(6634)에 로컬적으로 이용가능한 파 메모리(far memory)가 그 슬레드 상에 포함된 프로세서들 및 니어 메모리로부터 분리되도록, 파 메모리 확장 슬레드를 수용할 수 있는 확장 커넥터(6617)를 특징으로 할 수 있다. 일부 실시예들에서, 그러한 고성능 프로세싱 슬레드(6634)는 저 레이턴시 SSD 스토리지를 포함하는 확장 슬레드를 사용하여 파 메모리로 구성될 수 있다. 광학 인프라스트럭처는 하나의 슬레드 상의 컴퓨트 리소스들이 데이터 센터에서의 동일한 랙 또는 임의의 다른 랙 상에 위치된 슬레드 상에 분리되어 있는 원격 가속기/FPGA, 메모리, 및/또는 SSD 리소스들을 이용할 수 있게 해준다. 원격 리소스들은 도 61을 참조하여 앞서 설명된 스파인-리프 네트워크 아키텍처에서 1 스위치 점프 떨어져(one switch jump away) 또는 2 스위치 점프 떨어져(two-switch jumps away) 위치될 수 있다. 실시예들이 이와 관련하여 제한되지 않는다.
다양한 실시예들에서, 소프트웨어 정의(software-defined) 인프라스트럭처(6600B)와 같은, 가상 인프라스트럭처를 정의하기 위해 하나 이상의 추상화 계층이 물리 인프라스트럭처(6600A)의 물리 리소스들에 적용될 수 있다. 일부 실시예들에서, 소프트웨어 정의 인프라스트럭처(6600B)의 가상 컴퓨팅 리소스들(6636)은 클라우드 서비스들(6640)의 제공을 지원하도록 할당될 수 있다. 다양한 실시예들에서, 가상 컴퓨팅 리소스들(6636)의 특정의 세트들은 SDI 서비스들(6638)의 형태의 클라우드 서비스들(6640)에 제공하기 위해 그룹화될 수 있다. 클라우드 서비스들(6640)의 예들은 - 제한 없이 - SaaS(software as a service) 서비스들(6642), PaaS(platform as a service) 서비스들(6644), 및 IaaS(infrastructure as a service) 서비스들(6646)을 포함할 수 있다.
일부 실시예들에서, 소프트웨어 정의 인프라스트럭처(6600B)의 관리는 가상 인프라스트럭처 관리 프레임워크(6650B)를 사용하여 수행될 수 있다. 다양한 실시예들에서, 가상 인프라스트럭처 관리 프레임워크(6650B)는 클라우드 서비스들(6640)에 대한 가상 컴퓨팅 리소스들(6636) 및/또는 SDI 서비스들(6638)의 할당을 관리하는 것과 함께 작업부하 핑거프린팅 기법들 및/또는 머신 러닝 기법들을 구현하도록 설계될 수 있다. 일부 실시예들에서, 가상 인프라스트럭처 관리 프레임워크(6650B)는 그러한 리소스 할당을 수행하는 것과 함께 텔레메트리 데이터를 사용/조회(consult)할 수 있다. 다양한 실시예들에서, 애플리케이션/서비스 관리 프레임워크(6650C)는 클라우드 서비스들(6640)에 QoS 관리 능력을 제공하도록 구현될 수 있다. 실시예들이 이와 관련하여 제한되지 않는다.
흐름 다이어그램들에서의 동작들이 다른 도면들의 예시적인 실시예들을 참조하여 설명되었을 수 있다. 그렇지만, 흐름 다이어그램들의 동작들이 다른 도면들을 참조하여 논의된 것들 이외의 본 발명의 실시예들에 의해 수행될 수 있으며, 다른 도면들을 참조하여 논의된 본 발명의 실시예들이 흐름 다이어그램들을 참조하여 논의된 것들과 상이한 동작들을 수행할 수 있다는 점이 이해되어야 한다. 게다가, 도면들에서의 흐름 다이어그램들이 본 발명의 특정 실시예들에 의해 수행되는 동작들의 특정의 순서를 도시하지만, 그러한 순서가 예시적인 것임이 이해되어야 한다(예컨대, 대안의 실시예들은 동작들을 상이한 순서로 수행하고, 특정 동작들을 결합시키며, 특정 동작들을 오버랩하고, 기타 등등일 수 있다).
본 발명의 실시예들의 하나 이상의 부분은 소프트웨어, 펌웨어, 및/또는 하드웨어의 상이한 조합들을 사용하여 구현될 수 있다. 실시예들은 머신 판독가능 스토리지 매체들(예컨대, 자기 디스크들, 광학 디스크들, ROM(read only memory), 플래시 메모리 디바이스들, 상 변화 메모리)과 같은, 머신 판독가능 매체들(컴퓨터 판독가능 매체들이라고도 불림) 및 머신 판독가능 전송 매체들(캐리어라고도 불림)(예컨대, 전기, 광학, 라디오, 음향 또는 - 캐리어 파들, 적외선 신호들과 같은 - 다른 형태의 전파 신호들(propagated signals))을 사용하여 (소프트웨어 명령어들로 구성되고 때때로 컴퓨터 프로그램 코드 또는 컴퓨터 프로그램이라고 지칭되는) 코드 및/또는 데이터를 (내부적으로 그리고/또는 네트워크를 통해 다른 전자 디바이스들과 함께) 저장하고 전송하는 전자 디바이스를 사용하여 구현될 수 있다. 따라서, 전자 디바이스(예컨대, 컴퓨터)는 프로세서들의 세트 상에서 실행하기 위한 코드를 저장하기 위해 그리고/또는 데이터를 저장하기 위해 하나 이상의 머신 판독가능 스토리지 매체에 커플링된 하나 이상의 프로세서의 세트와 같은, 하드웨어 및 소프트웨어를 포함할 수 있다. 예를 들어, 전자 디바이스가 턴 오프될 때(전력이 제거될 때)에도 비휘발성 메모리가 코드/데이터를 유지(persist)할 수 있기 때문에 전자 디바이스는 코드를 포함하는 비휘발성 메모리를 포함할 수 있고, 전자 디바이스가 턴 온되는 동안 그 전자 디바이스의 프로세서(들)에 의해 실행되어야 하는 코드의 그 부분이 전형적으로 보다 느린 비휘발성 메모리로부터 그 전자 디바이스의 휘발성 메모리(예컨대, DRAM(dynamic random access memory), SRAM(static random access memory))으로 복사된다. 전형적인 전자 디바이스들은 다른 전자 디바이스들과 (전파 신호들을 사용하여 코드 및/또는 데이터를 전송하고 그리고/또는 수신하기 위한) 네트워크 접속들을 확립하기 위해 하나 이상의 물리 네트워크 인터페이스(들)의 세트를 또한 포함한다.
본 발명이 몇 개의 실시예의 면에서 설명되었지만, 본 기술분야의 통상의 기술자는 본 발명이 설명된 실시예들로 제한되지 않으며, 첨부된 청구항들의 사상 및 범위 내에서 수정 및 변경하여 실시될 수 있음을 인식할 것이다. 본 설명은 따라서 제한하는 것이 아니라 예시적인 것으로 간주되어야 한다.

Claims (4)

  1. 프로세서로서,
    캐시 라인을 제로화하라는 명령어를 디코드하기 위한 디코더;
    상기 디코더에 커플링되고 상기 명령어의 상기 디코드에 응답하여, 메모리 어드레스에서의 캐시 라인 크기의 제로들의 기입(cache line sized write of zeros)을 개시하라는 기입 커맨드를 발행하기 위한 실행 유닛;
    상기 실행 유닛에 커플링된 코히런트 캐시 - 상기 코히런트 캐시는 상기 기입 커맨드를 수신하고, 상기 기입 커맨드에 응답하여 상기 코히런트 캐시에 히트(hit)가 있는지를 결정하며, 상기 히트 캐시 라인의 캐시 일관성 프로토콜 상태가 수정됨(modified) 상태 또는 배타적(exclusive) 상태인지를 결정하고, 상기 캐시 일관성 프로토콜 상태가 상기 수정됨 상태 또는 상기 배타적 상태일 때 전부 제로들을 나타내도록 캐시 라인을 구성하며, 상기 기입 커맨드를 수신한 것에 응답하여 미스(miss)가 있을 때 인터커넥트를 향해 상기 기입 커맨드를 발행하기 위한 것임 -; 및
    상기 기입 커맨드의 수신에 응답하여, 히트가 있는지가 결정되어야 하는 복수의 다른 코히런트 캐시들 각각에게 스누프(snoop)를 발행하기 위한 상기 인터커넥트 - 상기 인터커넥트, 또는 상기 인터커넥트로부터의 메시지에 응답하는 상기 실행 유닛은, 상기 기입 커맨드 및 상기 스누프가 상기 캐시 라인 크기의 제로들의 기입이 수행되게 하지 않았을 때 상기 코히런트 캐시들 중 하나 내의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하기 위한 것임 -
    를 포함하는 프로세서.
  2. 제1항에 있어서, 상기 코히런트 캐시는 또한 그 캐시 라인의 캐시 일관성 프로토콜 상태를 유효하지 않음(invalid) 상태로 만들고 상기 히트 캐시 라인의 상기 캐시 일관성 프로토콜 상태가 상기 수정됨 상태 또는 상기 배타적 상태가 아닐 때 상기 인터커넥트를 향해 상기 기입 커맨드를 발행하기 위한 것인 프로세서.
  3. 제1항에 있어서, 상기 디코더 및 상기 실행 유닛은 제1 코어의 일부이고, 상기 복수의 코히런트 캐시들은 제2 코어의 코히런트 캐시를 포함하는 프로세서.
  4. 프로세서로서,
    캐시 라인을 제로화하라는 명령어를 디코드하기 위한 디코더;
    상기 명령어의 상기 디코드에 응답하여 커맨드를 발행하기 위한, 상기 디코더에 커플링된 실행 유닛; 및
    상기 커맨드의 수신에 응답하여, 히트가 있는지가 결정되어야 하는 복수의 코히런트 캐시들 각각에게 스누프를 발행하기 위한 인터커넥트 - 상기 실행 유닛은 그 자체적으로, 상기 인터커넥트는, 또는 상기 인터커넥트로부터의 메시지에 응답하는 상기 실행 유닛은, 상기 스누프가 상기 캐시 라인 제로들의 기입이 수행되게 하지 않았을 때 상기 실행 유닛에 커플링된 상기 복수의 코히런트 캐시들 중 하나 내의 캐시 라인이 전부 제로들을 나타내도록 구성되게 하기 위한 것임 -
    를 포함하는 프로세서.
KR1020197013501A 2016-12-12 2016-12-12 프로세서 아키텍처에 대한 장치들 및 방법들 KR20190086669A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2016/066242 WO2018111228A1 (en) 2016-12-12 2016-12-12 Apparatuses and methods for a processor architecture

Publications (1)

Publication Number Publication Date
KR20190086669A true KR20190086669A (ko) 2019-07-23

Family

ID=62559007

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197013501A KR20190086669A (ko) 2016-12-12 2016-12-12 프로세서 아키텍처에 대한 장치들 및 방법들

Country Status (10)

Country Link
EP (2) EP3552108B1 (ko)
JP (1) JP7095208B2 (ko)
KR (1) KR20190086669A (ko)
CN (1) CN109952566A (ko)
BR (1) BR112019009566A2 (ko)
DE (1) DE112016007516T5 (ko)
ES (1) ES2895266T3 (ko)
PL (1) PL3552108T3 (ko)
TW (2) TW202219748A (ko)
WO (1) WO2018111228A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180150256A1 (en) 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10929139B2 (en) 2018-09-27 2021-02-23 Qualcomm Incorporated Providing predictive instruction dispatch throttling to prevent resource overflows in out-of-order processor (OOP)-based devices
CN110032407B (zh) * 2019-03-08 2020-12-22 创新先进技术有限公司 提升cpu并行性能的方法及装置和电子设备
US11210100B2 (en) 2019-01-08 2021-12-28 Apple Inc. Coprocessor operation bundling
GB2581140A (en) 2019-01-31 2020-08-12 Ernst & Young Gmbh System and method of obtaining audit evidence
US10983797B2 (en) 2019-05-28 2021-04-20 International Business Machines Corporation Program instruction scheduling
TWI748513B (zh) * 2020-06-12 2021-12-01 鴻海精密工業股份有限公司 資料處理方法、系統、電子裝置及存儲介質
US11314657B1 (en) * 2020-12-02 2022-04-26 Centaur Technology, Inc. Tablewalk takeover
CN113626205B (zh) * 2021-09-03 2023-05-12 海光信息技术股份有限公司 处理器、物理寄存器管理方法及电子装置
TWI779923B (zh) * 2021-11-11 2022-10-01 南亞科技股份有限公司 圖案驗證系統及其操作方法
CN115858420B (zh) * 2023-02-23 2023-05-12 芯砺智能科技(上海)有限公司 用于支持多处理器架构的系统缓存架构和芯片

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03231345A (ja) * 1990-02-06 1991-10-15 Fujitsu Ltd キャッシュ装置
GB2260429B (en) * 1991-10-11 1995-05-24 Intel Corp Versatile cache memory
US5551001A (en) * 1994-06-29 1996-08-27 Exponential Technology, Inc. Master-slave cache system for instruction and data cache memories
US5809548A (en) * 1996-08-30 1998-09-15 International Business Machines Corporation System and method for zeroing pages with cache line invalidate instructions in an LRU system having data cache with time tags
US6374330B1 (en) * 1997-04-14 2002-04-16 International Business Machines Corporation Cache-coherency protocol with upstream undefined state
US6345339B1 (en) * 1998-02-17 2002-02-05 International Business Machines Corporation Pseudo precise I-cache inclusivity for vertical caches
CN1230721A (zh) * 1998-02-17 1999-10-06 国际商业机器公司 具有指令和数据的悬停(h)状态的高速缓存相关协议
US6178461B1 (en) * 1998-12-08 2001-01-23 Lucent Technologies Inc. Cache-based compaction technique for internet browsing using similar objects in client cache as reference objects
JP4123621B2 (ja) * 1999-02-16 2008-07-23 株式会社日立製作所 主記憶共有型マルチプロセッサシステム及びその共有領域設定方法
KR100373849B1 (ko) * 2000-03-13 2003-02-26 삼성전자주식회사 어소시어티브 캐시 메모리
US6745297B2 (en) * 2000-10-06 2004-06-01 Broadcom Corporation Cache coherent protocol in which exclusive and modified data is transferred to requesting agent from snooping agent
US7454577B2 (en) * 2005-02-10 2008-11-18 International Business Machines Corporation Data processing system and method for efficient communication utilizing an Tn and Ten coherency states
US7290094B2 (en) * 2005-05-17 2007-10-30 International Business Machines Corporation Processor, data processing system, and method for initializing a memory block to an initialization value without a cache first obtaining a data valid copy
US7707361B2 (en) * 2005-11-17 2010-04-27 Apple Inc. Data cache block zero implementation
US7451277B2 (en) * 2006-03-23 2008-11-11 International Business Machines Corporation Data processing system, cache system and method for updating an invalid coherency state in response to snooping an operation
US7475196B2 (en) * 2006-03-23 2009-01-06 International Business Machines Corporation Processor, data processing system, and method for initializing a memory block in a data processing system having multiple coherency domains
US7484042B2 (en) * 2006-08-18 2009-01-27 International Business Machines Corporation Data processing system and method for predictively selecting a scope of a prefetch operation
CN101944012B (zh) * 2009-08-07 2014-04-23 威盛电子股份有限公司 指令处理方法以及其所适用的超纯量管线微处理器
US9424190B2 (en) * 2011-08-19 2016-08-23 Freescale Semiconductor, Inc. Data processing system operable in single and multi-thread modes and having multiple caches and method of operation
US9684603B2 (en) * 2015-01-22 2017-06-20 Empire Technology Development Llc Memory initialization using cache state
WO2016141817A1 (zh) * 2015-03-06 2016-09-15 华为技术有限公司 数据备份装置及方法

Also Published As

Publication number Publication date
JP2020513605A (ja) 2020-05-14
EP3552108A4 (en) 2020-07-15
TW201823971A (zh) 2018-07-01
TWI751222B (zh) 2022-01-01
ES2895266T3 (es) 2022-02-18
PL3552108T3 (pl) 2022-01-03
TW202219748A (zh) 2022-05-16
DE112016007516T5 (de) 2019-10-02
WO2018111228A1 (en) 2018-06-21
EP3552108B1 (en) 2021-08-18
JP7095208B2 (ja) 2022-07-05
EP3889787B1 (en) 2023-11-01
EP3552108A1 (en) 2019-10-16
BR112019009566A2 (pt) 2019-08-06
EP3889787A1 (en) 2021-10-06
CN109952566A (zh) 2019-06-28

Similar Documents

Publication Publication Date Title
US20220237123A1 (en) Apparatuses and methods for a processor architecture
TWI751222B (zh) 處理器及其處理器架構
US11093277B2 (en) Systems, methods, and apparatuses for heterogeneous computing
US9361233B2 (en) Method and apparatus for shared line unified cache
US11630691B2 (en) Memory system architecture for multi-threaded processors
CN108885586B (zh) 用于以有保证的完成将数据取出到所指示的高速缓存层级的处理器、方法、系统和指令
US10031847B2 (en) System and method for replacement in associative memories using weighted PLRU trees
US11106599B2 (en) System and method for replacement in associative memories using weighted PLRU trees
US20220206945A1 (en) Adaptive remote atomics

Legal Events

Date Code Title Description
A201 Request for examination