KR101898791B1 - 멀티 스트랜드 비순차 프로세서에서 회수를 위한 명령어들을 식별하는 명령어 및 로직 - Google Patents

멀티 스트랜드 비순차 프로세서에서 회수를 위한 명령어들을 식별하는 명령어 및 로직 Download PDF

Info

Publication number
KR101898791B1
KR101898791B1 KR1020167013626A KR20167013626A KR101898791B1 KR 101898791 B1 KR101898791 B1 KR 101898791B1 KR 1020167013626 A KR1020167013626 A KR 1020167013626A KR 20167013626 A KR20167013626 A KR 20167013626A KR 101898791 B1 KR101898791 B1 KR 101898791B1
Authority
KR
South Korea
Prior art keywords
instruction
instructions
dispatched
logic
processor
Prior art date
Application number
KR1020167013626A
Other languages
English (en)
Other versions
KR20160073417A (ko
Inventor
니콜라이 코사레브
세르게이 와이 시시로브
자예쉬 이예르
알렉산더 부투조브
보리스 에이. 바바얀
안드레이 크루친코브
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20160073417A publication Critical patent/KR20160073417A/ko
Application granted granted Critical
Publication of KR101898791B1 publication Critical patent/KR101898791B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • G06F9/3855
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • G06F9/3857
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

프로세서는 복수의 스트랜드들로 분할되는 명령어 스트림을 비순차적으로 실행하는 제1 로직을 포함하고, 명령어 스트림 및 각각의 스트랜드는 프로그램 순서(PO)에 의해 정렬된다. 프로세서는 또한 명령어 스트림에서 가장 오래된 디스패치되지 않은 명령어를 결정하고 가장 오래된 디스패치되지 않은 명령어의 연관된 PO 값을 실행된 명령어 포인터로서 저장하는 제2 로직을 포함한다. 명령어 스트림은 디스패치된 및 디스패치되지 않은 명령어들을 포함한다. 프로세서는 또한 명령어 스트림에서 가장 최근에 회수된 명령어를 결정하고 가장 최근에 회수된 명령어의 연관된 PO 값을 회수 포인터로서 저장하는 제3 로직, 회수 포인터와 실행된 명령어 포인터 사이의 명령어들의 범위를 선택하는 제4 로직, 및 그 범위의 명령어들을 회수 적격 대상으로서 식별하는 제5 로직을 포함한다.

Description

멀티 스트랜드 비순차 프로세서에서 회수를 위한 명령어들을 식별하는 명령어 및 로직{INSTRUCTION AND LOGIC FOR IDENTIFYING INSTRUCTIONS FOR RETIREMENT IN A MULTI-STRAND OUT-OF-ORDER PROCESSOR}
본 개시내용은 처리 로직, 마이크로프로세서, 및, 프로세서 또는 다른 처리 로직에 의해 실행될 때, 논리적, 수학적, 또는 다른 함수 연산들을 수행하는 연관된 명령어 집합 아키텍처의 분야에 관한 것이다.
멀티프로세서 시스템이 점점 더 널리 쓰이고 있다. 멀티프로세서 시스템의 적용 분야는 데스크톱 컴퓨팅에 이르기까지 동적 영역 분할(dynamic domain partitioning)을 포함한다. 멀티프로세서 시스템을 이용하기 위해, 실행될 코드가 다양한 처리 엔티티들에 의한 실행을 위해 다수의 스레드로 분리될 수 있다. 각각의 스레드가 서로 병렬로 실행될 수 있다. 게다가, 처리 엔티티의 효용성을 증대시키기 위해, 비순차 실행이 이용될 수 있다. 비순차 실행은 명령어들에 필요한 입력이 이용 가능하게 될 때 이러한 명령어들을 실행할 수 있다. 이와 같이, 코드 시퀀스에서 나중에 나오는 명령어가 코드 시퀀스에서 앞서 나오는 명령어보다 먼저 실행될 수 있다.
실시예들이 첨부 도면들의 도면들에 제한이 아닌 예로서 예시되어 있다.
도 1a는 본 개시내용의 실시예들에 따른, 명령어를 실행하는 실행 유닛들을 포함할 수 있는 프로세서로 형성된 예시적인 컴퓨터 시스템의 블록도.
도 1b는 본 개시내용의 실시예들에 따른, 데이터 처리 시스템을 나타낸 도면.
도 1c는 텍스트 문자열 비교 연산을 수행하는 데이터 처리 시스템의 다른 실시예들을 나타낸 도면.
도 2는 본 개시내용의 실시예들에 따른, 명령어들을 수행하는 로직 회로들을 포함할 수 있는 프로세서에 대한 마이크로 아키텍처(micro-architecture)의 블록도.
도 3a는 본 개시내용의 실시예들에 따른, 멀티미디어 레지스터들에서의 다양한 패킹된 데이터 유형(packed data type) 표현들을 나타낸 도면.
도 3b는 본 개시내용의 실시예들에 따른, 가능한 레지스터내 데이터 저장 포맷(in-register data storage format)들을 나타낸 도면.
도 3c는 본 개시내용의 실시예들에 따른, 멀티미디어 레지스터들에서의 다양한 부호 있는(signed) 및 부호 없는(unsigned) 패킹된 데이터 유형 표현들을 나타낸 도면.
도 3d는 연산 인코딩 포맷(operation encoding format)의 일 실시예를 나타낸 도면.
도 3e는 본 개시내용의 실시예들에 따른, 40 비트 이상을 가지는 다른 가능한 연산 인코딩 포맷을 나타낸 도면.
도 3f는 본 개시내용의 실시예들에 따른, 또 다른 가능한 연산 인코딩 포맷을 나타낸 도면.
도 4a는 본 개시내용의 실시예들에 따른, 순차 파이프라인(in-order pipeline) 및 레지스터 재명명 스테이지(register renaming stage), 비순차 발행/실행 파이프라인(out-of-order issue/execution pipeline)을 나타낸 블록도.
도 4b는 본 개시내용의 실시예들에 따른, 프로세서에 포함될 순차 아키텍처 코어(in-order architecture core) 및 레지스터 재명명 로직(register renaming logic), 비순차 발행/실행 로직(out-of-order issue/execution logic)을 나타낸 블록도.
도 5a는 본 개시내용의 실시예들에 따른, 프로세서의 블록도.
도 5b는 본 개시내용의 실시예들에 따른, 코어의 예시적인 구현의 블록도.
도 6은 본 개시내용의 실시예들에 따른, 시스템의 블록도.
도 7은 본 개시내용의 실시예들에 따른, 제2 시스템의 블록도.
도 8은 본 개시내용의 실시예들에 따른, 제3 시스템의 블록도.
도 9는 본 개시내용의 실시예들에 따른, 시스템 온 칩(system-on-a-chip)의 블록도.
도 10은 본 개시내용의 실시예들에 따른, 적어도 하나의 명령어를 수행할 수 있는 중앙 처리 유닛 및 그래픽 처리 유닛을 포함하는 프로세서를 나타낸 도면.
도 11은 본 개시내용의 실시예들에 따른, IP 코어들의 개발을 나타낸 블록도.
도 12는 본 개시내용의 실시예들에 따른, 제1 유형의 명령어가 상이한 유형의 프로세서에 의해 어떻게 에뮬레이트될 수 있는지를 나타낸 도면.
도 13은 본 개시내용의 실시예들에 따른, 소스 명령어 집합(source instruction set)에서의 이진 명령어(binary instruction)들을 대상 명령어 집합(target instruction set)에서의 이진 명령어들로 변환하기 위해 소프트웨어 명령어 변환기를 사용하는 것을 대비하여 나타낸 블록도.
도 14는 본 개시내용의 실시예들에 따른, 프로세서의 명령어 집합 아키텍처의 블록도.
도 15는 본 개시내용의 실시예들에 따른, 프로세서의 명령어 집합 아키텍처의 더욱 상세한 블록도.
도 16은 본 개시내용의 실시예들에 따른, 프로세서에 대한 실행 파이프라인의 블록도.
도 17은 본 개시내용의 실시예들에 따른, 프로세서를 이용하는 전자 디바이스의 블록도.
도 18은 본 개시내용의 실시예들에 따른, 회수 적격 대상 명령어들을 식별하는 명령어 및 로직을 구현하는 예시적인 시스템을 나타낸 도면.
도 19a 내지 도 19e는 본 개시내용의 실시예들에 따른, 회수 적격 대상 명령어들을 식별하는 명령어 및 로직을 구현하는 시스템을 보다 상세히 나타낸 도면.
도 20은 본 개시내용의 실시예들에 따른, 복수의 스트랜드(strand) 중의 최소 프로그램 순서 값(minimal program order value)을 결정하는 하드웨어 로직의 일 예를 나타낸 도면.
도 21은 본 개시내용의 실시예들에 따른, 회수 적격 대상 명령어들을 식별하는 예시적인 방법을 나타낸 도면.
이하의 설명은 프로세서, 가상 프로세서, 패키지, 컴퓨터 시스템, 또는 다른 처리 장치 내에서 또는 그와 관련하여 회수 적격 대상 명령어를 식별하는 명령어 및 처리 로직을 기술한다. 이러한 처리 장치는 비순차 프로세서를 포함할 수 있다. 게다가, 이러한 처리 장치는 멀티 스트랜드 비순차 프로세서를 포함할 수 있다. 이하의 설명에서, 본 개시내용의 실시예들의 보다 완전한 이해를 제공하기 위해 처리 로직, 프로세서 유형, 마이크로 아키텍처 조건, 이벤트, 실시 메커니즘(enablement mechanism) 등과 같은 수많은 구체적인 상세가 기재되어 있다. 그렇지만, 본 기술 분야의 통상의 기술자라면 실시예들이 이러한 구체적인 상세가 없어도 실시될 수 있다는 것을 잘 알 것이다. 그에 부가하여, 본 개시내용의 실시예들을 불필요하게 모호하게 하는 것을 피하기 위해 일부 널리 공지된 구조들, 회로들 등은 상세히 도시되어 있지 않다.
이하의 실시예들이 프로세서를 참조하여 기술되어 있지만, 다른 실시예들이 다른 유형의 집적 회로들 및 로직 디바이스들에 적용 가능하다. 본 개시내용의 실시예들의 유사한 기법들 및 교시들이 보다 높은 파이프라인 처리율(pipeline throughput) 및 개선된 성능으로부터 이득을 볼 수 있는 다른 유형의 회로들 또는 반도체 디바이스들에 적용될 수 있다. 본 개시내용의 실시예들의 교시들은 데이터 조작을 수행하는 임의의 프로세서 또는 머신에 적용 가능하다. 그렇지만, 본 실시예들이 512-비트, 256-비트, 128-비트, 64-비트, 32-비트, 또는 16-비트 데이터 연산들을 수행하는 프로세서들 또는 머신들로 제한되지 않고, 데이터의 조작 또는 관리가 수행될 수 있는 임의의 프로세서 및 머신에 적용될 수 있다. 그에 부가하여, 이하의 설명은 예들을 제공하고, 첨부 도면들은 예시를 위해 다양한 예들을 나타내고 있다. 그렇지만, 이 예들이 본 개시내용의 실시예들의 모든 가능한 구현들을 총망라한 목록을 제공하기보다는 단지 본 개시내용의 실시예들의 예들을 제공하는 것으로 의도되어 있기 때문에, 이 예들이 제한하는 의미로 해석되어서는 안된다.
이하의 예들이 명령어 처리 및 배포를 실행 유닛들 및 로직 회로들과 관련하여 기술하고 있지만, 본 개시내용의 다른 실시예들은, 머신에 의해 수행될 때, 머신으로 하여금 본 개시내용의 적어도 하나의 실시예에 따른 기능들을 수행하게 하는, 머신 판독 가능 유형적 매체 상에 저장된 데이터 또는 명령어들을 통해 달성될 수 있다. 일 실시예에서, 본 개시내용의 실시예들과 연관된 기능들이 머신 실행 가능 명령어들로 구현된다. 명령어들로 프로그램될 수 있는 범용 또는 특수 목적 프로세서로 하여금 본 개시내용의 단계들을 수행하게 하기 위해 명령어들이 사용될 수 있다. 본 개시내용의 실시예들이 본 개시내용의 실시예들에 따른 하나 이상의 동작들을 수행하도록 컴퓨터(또는 다른 전자 디바이스들)를 프로그램하는 데 사용될 수 있는 명령어들을 저장하고 있는 머신 또는 컴퓨터 판독 가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 게다가, 본 개시내용의 실시예들의 단계들은 단계들을 수행하는 고정 기능 로직(fixed-function logic)을 포함하는 특정의 하드웨어 구성요소들에 의해, 또는 프로그램된 컴퓨터 구성요소들 및 고정 기능 하드웨어 구성요소들의 임의의 조합에 의해 수행될 수 있다.
본 개시내용의 실시예들을 수행하도록 로직을 프로그램하는 데 사용되는 명령어들이, DRAM, 캐시, 플래시 메모리, 또는 다른 저장소와 같은, 시스템에 있는 메모리 내에 저장될 수 있다. 게다가, 명령어들이 네트워크를 거쳐 또는 다른 컴퓨터 판독 가능 매체를 통해 배포될 수 있다. 따라서, 머신 판독 가능 매체는 머신(예컨대, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장하거나 전송하는 임의의 메커니즘(플로피 디스켓, 광 디스크, CD-ROM(Compact Disc, Read-Only Memory), 및 광자기 디스크, ROM(Read-Only Memory), RAM(Random Access Memory), EPROM(Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광 카드, 플래시 메모리로 제한되지 않음), 또는 인터넷을 거쳐 전기, 광, 음향 또는 다른 형태의 전파 신호들(예컨대, 반송파, 적외선 신호, 디지털 신호 등)을 통해 정보를 전송하는 데 사용되는 유형적 머신 판독 가능 저장소를 포함할 수 있다. 그에 따라, 컴퓨터 판독 가능 매체는 머신(예컨대, 컴퓨터)에 의해 판독 가능한 형태로 전자 명령어들 또는 정보를 저장하거나 전송하기에 적당한 임의의 유형의 유형적 머신 판독 가능 매체를 포함할 수 있다.
설계는 생성부터 시뮬레이션, 제조에 이르는 다양한 스테이지들을 거칠 수 있다. 설계를 표현하는 데이터는 설계를 다수의 방식들로 표현할 수 있다. 먼저, 시뮬레이션에서 유용할 수 있는 바와 같이, 하드웨어가 하드웨어 기술 언어(hardware description language) 또는 다른 기능 기술 언어(functional description language)를 사용하여 표현될 수 있다. 그에 부가하여, 설계 프로세스의 어떤 스테이지들에서 로직 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델이 생성될 수 있다. 게다가, 설계들이, 어떤 스테이지에서, 하드웨어 모델에서의 다양한 디바이스들의 물리적 배치를 표현하는 수준의 데이터에 도달한다. 어떤 반도체 제조 기법들이 사용되는 경우에, 하드웨어 모델을 표현하는 데이터는 집적 회로를 제조하는 데 사용되는 마스크들에 대한 상이한 마스크 층들에서의 다양한 특징부들의 존재 또는 부존재를 명시하는 데이터일 수 있다. 설계의 임의의 표현에서, 데이터는 임의의 형태의 머신 판독 가능 매체에 저장될 수 있다. 메모리 또는 자기 또는 광 저장소(디스크 등)는 정보를 전송하기 위해 변조되거나 다른 방식으로 발생되는 광 또는 전기 파를 통해 전송되는 이러한 정보를 저장하는 머신 판독 가능 매체일 수 있다. 코드 또는 설계를 나타내거나 지니고 있는 전기 반송파가 전송되고 있을 때, 전기 신호의 복사, 버퍼링 또는 재전송이 수행되는 경우에, 새로운 사본이 만들어질 수 있다. 이와 같이, 통신 제공자 또는 네트워크 제공자는 본 개시내용의 실시예들의 기법들을 구현하는 항목(반송파 내에 인코딩된 정보 등)을, 적어도 일시적으로, 유형적 머신 판독 가능 매체 상에 저장할 수 있다.
최신의 프로세서들에서, 각종의 코드 및 명령어들을 처리하고 실행하기 위해 다수의 상이한 실행 유닛들이 사용될 수 있다. 어떤 명령어들은 보다 신속하게 완료될 수 있는 반면, 다른 것들은 완료하는 데 다수의 클록 사이클들이 걸릴 수 있다. 명령어의 처리율이 빠를수록, 프로세서의 전체 성능이 좋다. 따라서, 많은 명령어들을 가능한 한 빨리 실행하는 것이 유리할 것이다. 그렇지만, 보다 복잡하고 실행 시간 및 프로세서 자원을 보다 많이 필요로 하는 특정 명령어들(부동 소수점 명령어, 로드/저장 동작, 데이터 이동, 기타 등등)이 있을 수 있다.
인터넷, 텍스트, 및 멀티미디어 응용 분야들에서 보다 많은 컴퓨터 시스템들이 사용됨에 따라, 시간이 흐르면서 부가의 프로세서 지원이 소개되었다. 일 실시예에서, 명령어 집합은, 데이터 유형, 명령어, 레지스터 아키텍처, 주소 지정 모드(addressing mode), 메모리 아키텍처, 인터럽트 및 예외 처리, 그리고 외부 입출력(I/O)을 비롯한, 하나 이상의 컴퓨터 아키텍처들과 연관되어 있을 수 있다.
일 실시예에서, 명령어 집합 아키텍처(instruction set architecture)(ISA)는 하나 이상의 명령어 집합들을 구현하는 데 사용되는 프로세서 로직 및 회로들을 포함할 수 있는 하나 이상의 마이크로 아키텍처들에 의해 구현될 수 있다. 그에 따라, 상이한 마이크로 아키텍처들을 갖는 프로세서들이 공통 명령어 집합의 적어도 일부분을 공유할 수 있다. 예를 들어, Intel® Pentium 4 프로세서, Intel® Core™ 프로세서, 및 미국 캘리포니아주 서니베일 소재의 Advanced Micro Devices, Inc.로부터의 프로세서는 x86 명령어 집합의 거의 동일한 버전들(보다 최신의 버전들에서 부가된 어떤 확장들을 가짐)을 구현하지만, 상이한 내부 설계들을 가진다. 이와 유사하게, ARM Holdings, Ltd., MIPS, 또는 이들의 실시권자들 또는 채택자들과 같은, 다른 프로세서 개발 회사들에 의해 설계된 프로세서들도 공통 명령어 집합의 적어도 일부분을 공유할 수 있지만, 상이한 프로세서 설계들을 포함할 수 있다. 예를 들어, ISA의 동일한 레지스터 아키텍처가 전용 물리 레지스터들, 레지스터 재명명 메커니즘(예컨대, RAT(Register Alias Table), ROB(Reorder Buffer) 및 회수 레지스터 파일(retirement register file)의 사용)을 사용하는 하나 이상의 동적 할당 물리 레지스터들을 비롯한 새로운 또는 널리 공지된 기법들을 사용하여 상이한 마이크로 아키텍처들에서 상이한 방식들로 구현될 수 있다. 일 실시예에서, 레지스터들은 소프트웨어 프로그래머에 의해 주소 지정 가능할 수 있거나 그렇지 않을 수 있는 하나 이상의 레지스터들, 레지스터 아키텍처들, 레지스터 파일들, 또는 다른 레지스터 집합들을 포함할 수 있다.
명령어는 하나 이상의 명령어 포맷들을 포함할 수 있다. 일 실시예에서, 명령어 포맷은, 그 중에서도 특히, 수행될 연산 및 그 연산이 수행될 피연산자들을 지정하는 다양한 필드들(비트들의 수, 비트들의 위치 등)을 나타낼 수 있다. 추가의 실시예에서, 어떤 명령어 포맷들이 또한 명령어 템플릿들(또는 서브포맷들)에 의해 정의될 수 있다. 예를 들어, 주어진 명령어 포맷의 명령어 템플릿들이 명령어 포맷의 필드들의 상이한 부분집합들을 갖도록 정의되고 그리고/또는 상이하게 해석되는 주어진 필드를 갖도록 정의될 수 있다. 일 실시예에서, 명령어는 명령어 포맷을 사용하여(그리고, 정의되어 있는 경우, 그 명령어 포맷의 명령어 템플릿들 중 하나로) 표현될 수 있고, 연산 및 연산이 처리할 피연산자들을 지정하거나 나타낼 수 있다.
과학, 금융, 자동 벡터화 범용(auto-vectorized general purpose), RMS(recognition, mining, and synthesis; 인식, 마이닝 및 합성), 그리고 시각 및 멀티미디어 응용 분야들(예컨대, 2D/3D 그래픽, 이미지 처리, 비디오 압축/압축 해제, 음성 인식 알고리즘들 및 오디오 조작(audio manipulation))은 많은 수의 데이터 항목들에 대해 동일한 연산이 수행되는 것을 필요로 할 수 있다. 일 실시예에서, SIMD(Single Instruction Multiple Data)는 프로세서로 하여금 다수의 데이터 요소들에 대해 연산을 수행하게 하는 명령어 유형을 지칭한다. SIMD 기술은 레지스터 내의 비트들을 다수의 고정 크기 또는 가변 크기 데이터 요소들 - 그 각각은 개별적인 값을 나타냄 - 로 논리적으로 분할할 수 있는 프로세서들에서 사용될 수 있다. 예를 들어, 일 실시예에서, 64-비트 레지스터 내의 비트들은 4개의 개별적인 16-비트 데이터 요소들 - 그 각각은 개별적인 16-비트 값을 나타냄 - 을 포함하는 소스 피연산자로서 구성될 수 있다. 이 데이터 유형은 '패킹된(packed)' 데이터 유형 또는 '벡터' 데이터 유형이라고 지칭될 수 있고, 이 데이터 유형의 피연산자들은 패킹된 데이터 피연산자 또는 벡터 피연산자라고 지칭될 수 있다. 일 실시예에서, 패킹된 데이터 항목 또는 벡터는 단일의 레지스터 내에 저장된 패킹된 데이터 요소들의 시퀀스일 수 있고, 패킹된 데이터 피연산자 또는 벡터 피연산자는 SIMD 명령어(또는 '패킹된 데이터 명령어' 또는 '벡터 명령어')의 소스 또는 목적지 피연산자일 수 있다. 일 실시예에서, SIMD 명령어는 동일하거나 상이한 크기의, 동일하거나 상이한 수의 데이터 요소들을 갖는, 그리고 동일하거나 상이한 데이터 요소 순서로 되어 있는 목적지 벡터 피연산자(결과 벡터 피연산자라고도 지칭됨)를 발생시키기 위해 2개의 소스 벡터 피연산자들에 대해 수행될 단일 벡터 연산을 명시한다.
x86, MMX™, SSE(Streaming SIMD Extensions), SSE2, SSE3, SSE4.1, 및 SSE4.2 명령어들을 포함하는 명령어 집합을 가지는 Intel® Core™ 프로세서들, VFP(Vector Floating Point) 및/또는 NEON 명령어들을 포함하는 명령어 집합을 가지는 ARM Cortex® 계열의 프로세서들과 같은 ARM 프로세서들, 및 중국 과학원(Chinese Academy of Sciences)의 ICT(Institute of Computing Technology)에 의해 개발된 Loongson 계열의 프로세서들과 같은 MIPS 프로세서들에 의해 이용되는 것과 같은 SIMD 기술은 애플리케이션 성능의 상당한 개선을 가능하게 해주었다(Core™ 및 MMX™은 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation의 등록 상표 또는 상표임).
일 실시예에서, 목적지 및 소스 레지스터들/데이터는 대응하는 데이터 또는 연산의 소스 및 목적지를 나타내는 일반 용어들일 수 있다. 일부 실시예들에서, 이들은 레지스터, 메모리, 또는 언급된 것들 이외의 다른 이름들 또는 기능들을 가지는 다른 저장 영역들에 의해 구현될 수 있다. 예를 들어, 일 실시예에서, "DEST1"은 임시 저장 레지스터 또는 다른 저장 영역일 수 있는 반면, "SRC1" 및 "SRC2"는 제1 및 제2 소스 저장 레지스터 또는 다른 저장 영역 등일 수 있다. 다른 실시예들에서, SRC 및 DEST 저장 영역들 중 2개 이상은 동일한 저장 영역(예컨대, SIMD 레지스터) 내의 상이한 데이터 저장 요소들에 대응할 수 있다. 일 실시예에서, 소스 레지스터들 중 하나는 또한, 예를 들어, 제1 및 제2 소스 데이터에 대해 수행된 연산의 결과를 목적지 레지스터로서 역할하는 2개의 소스 레지스터들 중 하나에 라이트백(write back)하는 것에 의해 목적지 레지스터로서 기능할 수 있다.
도 1a는 본 개시내용의 실시예들에 따른, 명령어를 실행하는 실행 유닛들을 포함할 수 있는 프로세서로 형성된 예시적인 컴퓨터 시스템의 블록도이다. 시스템(100)은, 본원에 기술되는 실시예에서와 같이, 본 개시내용에 따른, 데이터를 처리하기 위한 알고리즘들을 수행하는 로직을 포함하는 실행 유닛들을 이용하는 구성요소(프로세서(102) 등)를 포함할 수 있다. 시스템(100)은 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation으로부터 입수 가능한 PENTIUM® III, PENTIUM® 4, Xeon™, Itanium®, XScale™ 및/또는 StrongARM™ 마이크로프로세서들에 기초한 처리 시스템들을 나타낼 수 있지만, 다른 시스템들(다른 마이크로프로세서들을 갖는 PC, 엔지니어링 워크스테이션, 셋톱 박스 등을 포함함)도 사용될 수 있다. 일 실시예에서, 샘플 시스템(100)은 미국 워싱턴주 레드몬드 소재의 Microsoft Corporation으로부터 입수 가능한 WINDOWS™ 운영 체제의 어떤 버전을 실행할 수 있지만, 다른 운영 체제들(예컨대, UNIX 및 Linux), 임베디드 소프트웨어, 및/또는 그래픽 사용자 인터페이스들이 또한 사용될 수 있다. 이와 같이, 본 개시내용의 실시예들이 하드웨어 회로와 소프트웨어의 임의의 특정 조합으로 제한되지 않는다.
실시예들이 컴퓨터 시스템들로 제한되지 않는다. 본 개시내용의 실시예들이 핸드헬드 디바이스들 및 임베디드 애플리케이션(embedded application)들과 같은 다른 디바이스들에서 사용될 수 있다. 핸드헬드 디바이스들의 어떤 예들은 휴대폰, 인터넷 프로토콜 디바이스, 디지털 카메라, PDA(personal digital assistant), 및 핸드헬드 PC를 포함한다. 임베디드 응용 분야들은, 마이크로 제어기, DSP(digital signal processor), 시스템 온 칩(system on a chip), 네트워크 컴퓨터(NetPC), 셋톱 박스, 네트워크 허브, WAN(wide area network) 스위치, 또는 적어도 하나의 실시예에 따라 하나 이상의 명령어들을 수행할 수 있는 임의의 다른 시스템을 포함할 수 있다.
컴퓨터 시스템(100)은 본 개시내용의 일 실시예에 따른 적어도 하나의 명령어를 수행하는 알고리즘을 수행하는 하나 이상의 실행 유닛들(108)을 포함할 수 있는 프로세서(102)를 포함할 수 있다. 일 실시예는 단일 프로세서 데스크톱 또는 서버 시스템과 관련하여 기술될 수 있지만, 다른 실시예들은 멀티프로세서 시스템에 포함될 수 있다. 시스템(100)은 '허브' 시스템 아키텍처의 일 예일 수 있다. 시스템(100)은 데이터 신호들을 처리하기 위한 프로세서(102)를 포함할 수 있다. 프로세서(102)는, 예를 들어, CISC(complex instruction set computer) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 명령어 집합들의 조합을 구현하는 프로세서, 또는 임의의 다른 프로세서 디바이스(예를 들어, 디지털 신호 프로세서 등)를 포함할 수 있다. 일 실시예에서, 프로세서(102)는 프로세서(102)와 시스템(100) 내의 다른 구성요소들 사이에서 데이터 신호들을 전송할 수 있는 프로세서 버스(110)에 결합될 수 있다. 시스템(100)의 요소들은 본 기술 분야의 통상의 기술자에게는 널리 공지된 종래의 기능들을 수행할 수 있다.
일 실시예에서, 프로세서(102)는 레벨 1(L1) 내부 캐시 메모리(104)를 포함할 수 있다. 아키텍처에 따라, 프로세서(102)는 단일의 내부 캐시 또는 다수의 내부 캐시 레벨들을 가질 수 있다. 다른 실시예에서, 캐시 메모리는 프로세서(102)의 외부에 존재할 수 있다. 다른 실시예들은 또한 특정의 구현 및 필요에 따라 내부 캐시 및 외부 캐시 둘 다의 조합을 포함할 수 있다. 레지스터 파일(106)은 상이한 유형의 데이터를 정수 레지스터, 부동 소수점 레지스터, 상태 레지스터, 및 명령어 포인터 레지스터를 비롯한 다양한 레지스터들에 저장할 수 있다.
정수 및 부동 소수점 연산을 수행하는 로직을 포함하는 실행 유닛(108)이 또한 프로세서(102)에 존재한다. 프로세서(102)는 또한 특정 마이크로명령어(macroinstruction)들에 대한 마이크로코드를 저장하는 마이크로코드(ucode) ROM을 포함할 수 있다. 일 실시예에서, 실행 유닛(108)은 패킹된 명령어 집합(109)을 처리하는 로직을 포함할 수 있다. 패킹된 명령어 집합(109)을 범용 프로세서(102)의 명령어 집합에 포함시킴으로써, 명령어를 실행하는 연관된 회로와 함께, 많은 멀티미디어 애플리케이션들에서 사용되는 연산들이 범용 프로세서(102)에서 패킹된 데이터를 사용하여 수행될 수 있다. 이와 같이, 패킹된 데이터에 대한 연산들을 수행하기 위해 프로세서의 데이터 버스의 전체 폭을 사용함으로써 많은 멀티미디어 애플리케이션들이 가속되고 보다 효율적으로 실행될 수 있다. 이것은 한 번에 하나의 데이터 요소씩 하나 이상의 연산들을 수행하기 위해 프로세서의 데이터 버스에 걸쳐 더 작은 단위의 데이터를 전송할 필요를 없애줄 수 있다.
실행 유닛(108)의 실시예들은 또한 마이크로 제어기, 임베디드 프로세서, 그래픽 디바이스, DSP, 및 다른 유형의 로직 회로에서 사용될 수 있다. 시스템(100)은 메모리(120)를 포함할 수 있다. 메모리(120)는 DRAM(dynamic random access memory) 디바이스, SRAM(static random access memory) 디바이스, 플래시 메모리 디바이스, 또는 다른 메모리 디바이스로서 구현될 수 있다. 메모리(120)는 프로세서(102)에 의해 실행될 수 있는 데이터 신호들이 나타내는 명령어들 및/또는 데이터를 저장할 수 있다.
시스템 로직 칩(116)은 프로세서 버스(110) 및 메모리(120)에 결합될 수 있다. 시스템 로직 칩(116)은 메모리 제어기 허브(memory controller hub, MCH)를 포함할 수 있다. 프로세서(102)는 프로세서 버스(110)를 통해 MCH(116)와 통신할 수 있다. MCH(116)는 명령어 및 데이터 저장을 위한 그리고 그래픽 명령, 데이터 및 텍스처의 저장을 위한 메모리(120)로의 고대역폭 메모리 경로(118)를 제공할 수 있다. MCH(116)는 프로세서(102), 메모리(120) 및 시스템(100) 내의 다른 구성요소들 사이에서 데이터 신호들을 보내고 프로세서 버스(110), 메모리(120) 및 시스템 I/O(122) 사이에서 데이터 신호를 브리징할 수 있다. 일부 실시예들에서, 시스템 로직 칩(116)은 그래픽 제어기(112)에 결합하기 위한 그래픽 포트를 제공할 수 있다. MCH(116)는 메모리 인터페이스(118)를 통해 메모리(120)에 결합될 수 있다. 그래픽 카드(112)는 AGP(Accelerated Graphics Port) 상호연결부(114)를 통해 MCH(116)에 결합될 수 있다.
시스템(100)은 MCH(116)를 I/O 제어기 허브(ICH)(130)에 결합시키기 위해 독점 허브 인터페이스 버스(122)를 사용할 수 있다. 일 실시예에서, ICH(130)는 로컬 I/O 버스를 통해 일부 I/O 디바이스들에의 직접 연결을 제공한다. 로컬 I/O 버스는 주변기기들을 메모리(120), 칩셋, 및 프로세서(102)에 연결시키는 고속 I/O 버스를 포함할 수 있다. 예들은 오디오 제어기, 펌웨어 허브(플래시 BIOS)(128), 무선 송수신기(126), 데이터 저장소(124), 사용자 입력 및 키보드 인터페이스들을 포함하는 레거시 I/O 제어기, USB(Universal Serial Bus)와 같은 직렬 확장 포트, 및 네트워크 제어기(134)를 포함할 수 있다. 데이터 저장 디바이스(124)는 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 디바이스, 플래시 메모리 디바이스, 또는 다른 대용량 저장 디바이스를 포함할 수 있다.
시스템의 다른 실시예에서, 일 실시예에 따른 명령어가 시스템 온 칩에서 사용될 수 있다. 시스템 온 칩의 일 실시예는 프로세서 및 메모리를 포함한다. 하나의 이러한 시스템에 대한 메모리는 플래시 메모리를 포함할 수 있다. 플래시 메모리는 프로세서 및 다른 시스템 구성요소들과 동일한 다이 상에 위치될 수 있다. 그에 부가하여, 메모리 제어기 또는 그래픽 제어기와 같은 다른 논리 블록들이 또한 시스템 온 칩 상에 위치될 수 있다.
도 1b는 본 개시내용의 실시예들의 원리들을 구현하는 데이터 처리 시스템(140)을 나타낸 것이다. 본 기술 분야의 통상의 기술자라면 본원에 기술되는 실시예들이 본 개시내용의 실시예들의 범주를 벗어남이 없이 대안의 처리 시스템들에서 동작할 수 있다는 것을 잘 알 것이다.
컴퓨터 시스템(140)은 일 실시예에 따른 적어도 하나의 명령어를 수행하기 위한 처리 코어(159)를 포함한다. 일 실시예에서, 처리 코어(159)는 CISC, RISC, 또는 VLIW 유형 아키텍처(이들로 제한되지 않음)를 비롯한 임의의 유형의 아키텍처의 처리 유닛을 나타낸다. 처리 코어(159)는 또한 하나 이상의 공정 기술들에서의 제조에 적당할 수 있고, 머신 판독 가능 매체 상에 충분히 상세히 표현됨으로써, 상기 제조를 용이하게 해주는 데 적당할 수 있다.
처리 코어(159)는 실행 유닛(142), 일 세트의 레지스터 파일들(145), 및 디코더(144)를 포함한다. 처리 코어(159)는 또한 본 개시내용의 실시예들을 이해하는 데 불필요할 수 있는 부가의 회로(도시 생략)를 포함할 수 있다. 실행 유닛(142)은 처리 코어(159)에 의해 수신된 명령어들을 실행할 수 있다. 전형적인 프로세서 명령어들을 수행하는 것에 부가하여, 실행 유닛(142)은 패킹된 데이터 포맷들에 대한 연산들을 수행하기 위해 패킹된 명령어 집합(143) 내의 명령어들을 수행할 수 있다. 패킹된 명령어 집합(143)은 본 개시내용의 실시예들을 수행하기 위한 명령어들 및 다른 패킹된 명령어들을 포함할 수 있다. 실행 유닛(142)은 내부 버스에 의해 레지스터 파일(145)에 결합될 수 있다. 레지스터 파일(145)은 데이터를 비롯한 정보를 저장하는 처리 코어(159) 상의 저장 영역을 나타낼 수 있다. 앞서 언급된 바와 같이, 패킹된 데이터를 저장할 수 있는 저장 영역이 불가결한 것은 아닐 수 있다는 것을 잘 알 것이다. 실행 유닛(142)은 디코더(144)에 결합될 수 있다. 디코더(144)는 처리 코어(159)에 의해 수신된 명령어들을 제어 신호들 및/또는 마이크로코드 진입점들로 디코딩할 수 있다. 이 제어 신호들 및/또는 마이크로코드 진입점들에 응답하여, 실행 유닛(142)은 적절한 연산들을 수행한다. 일 실시예에서, 디코더는 명령어의 연산코드를 해석할 수 있고, 이 연산코드는 명령어 내에 표시된 대응하는 데이터에 대해 어떤 연산이 수행되어야만 하는지를 나타낼 것이다.
처리 코어(159)는, 예를 들어, SDRAM(synchronous dynamic random access memory) 제어(146), SRAM(static random access memory) 제어(147), 버스트 플래시 메모리 인터페이스(148), PCMCIA/CF(personal computer memory card international association/compact flash) 카드 제어(149), LCD(liquid crystal display) 제어(150), DMA(direct memory access) 제어기(151), 및 대안의 버스 마스터 인터페이스(152)(이들로 제한되지 않음)를 포함할 수 있는 다양한 다른 시스템 디바이스들과 통신하기 위해 버스(141)와 결합될 수 있다. 일 실시예에서, 데이터 처리 시스템(140)은 또한 I/O 버스(153)를 통해 다양한 I/O 디바이스들과 통신하기 위한 I/O 브리지(154)를 포함할 수 있다. 이러한 I/O 디바이스들은, 예를 들어, UART(universal asynchronous receiver/transmitter)(155), USB(universal serial bus)(156), 블루투스 무선 UART(157), 및 I/O 확장 인터페이스(158)(이들로 제한되지 않음)를 포함할 수 있다.
데이터 처리 시스템(140)의 일 실시예는 모바일, 네트워크 및/또는 무선 통신, 그리고 텍스트 문자열 비교 연산을 비롯한 SIMD 연산들을 수행할 수 있는 처리 코어(159)를 제공한다. 처리 코어(159)는 Walsh-Hadamard 변환, FFT(fast Fourier transform), DCT(discrete cosine transform) 및 그 각자의 역변환을 비롯한 이산 변환; 색 공간 변환, 비디오 인코드 움직임 추정 또는 비디오 디코드 움직임 보상과 같은 압축/압축 해제 기법; 및 PCM(pulse coded modulation)과 같은 변조/복조(모뎀) 기능을 비롯한 다양한 오디오, 비디오, 이미지 및 통신 알고리즘으로 프로그램될 수 있다.
도 1c는 SIMD 텍스트 문자열 비교 연산들을 수행하는 데이터 처리 시스템의 다른 실시예들을 나타낸 것이다. 일 실시예에서, 데이터 처리 시스템(160)은 주 프로세서(main processor)(166), SIMD 코프로세서(161), 캐시 메모리(167), 및 입출력 시스템(168)을 포함할 수 있다. 입출력 시스템(168)은, 선택적으로, 무선 인터페이스(169)에 결합될 수 있다. SIMD 코프로세서(161)는 일 실시예에 따른 명령어들을 포함하는 연산들을 수행할 수 있다. 일 실시예에서, 처리 코어(170)는 하나 이상의 공정 기술들에서의 제조에 적당할 수 있고, 머신 판독 가능 매체 상에 충분히 상세히 표현됨으로써, 처리 코어(170)를 비롯한 데이터 처리 시스템(160)의 전부 또는 일부의 제조를 용이하게 하는 데 적당할 수 있다.
일 실시예에서, SIMD 코프로세서(161)는 실행 유닛(162) 및 일 세트의 레지스터 파일들(164)을 포함한다. 주 프로세서(165)의 일 실시예는 실행 유닛(162)에 의해 실행하기 위한 일 실시예에 따른 명령어들을 비롯한 명령어 집합(163)의 명령어들을 인식하는 디코더(165)를 포함한다. 다른 실시예들에서, SIMD 코프로세서(161)는 또한 명령어 집합(163)의 명령어들을 디코딩하는 디코더(165)의 적어도 일부를 포함한다. 처리 코어(170)는 또한 본 개시내용의 실시예들을 이해하는 데 불필요할 수 있는 부가의 회로(도시 생략)를 포함할 수 있다.
동작 중에, 주 프로세서(166)는 캐시 메모리(167) 및 입출력 시스템(168)과의 상호작용을 비롯한 일반 유형의 데이터 처리 연산들을 제어하는 데이터 처리 명령어들의 스트림을 실행한다. SIMD 코프로세서 명령어들이 데이터 처리 명령어들의 스트림 내에 포함될 수 있다. 주 프로세서(166)의 디코더(165)는 이 SIMD 코프로세서 명령어들을 접속된 SIMD 코프로세서(161)에 의해 실행되어야 하는 유형인 것으로 인식한다. 그에 따라, 주 프로세서(166)는 이 SIMD 코프로세서 명령어들(또는 SIMD 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스(166)를 통해 발행한다. 코프로세서 버스(166)로부터, 이 명령어들이 임의의 접속된 SIMD 코프로세서들에 의해 수신될 수 있다. 이 경우에, SIMD 코프로세서(161)는 그에게로 보내진 임의의 수신된 SIMD 코프로세서 명령어들을 받아서 실행할 수 있다.
SIMD 코프로세서 명령어들에 의한 처리를 위해 무선 인터페이스(169)를 통해 데이터가 수신될 수 있다. 일 예에서, 음성 통신이 디지털 신호의 형태로 수신될 수 있고, 이는 음성 통신을 나타내는 디지털 오디오 샘플들을 재생성하기 위해 SIMD 코프로세서 명령어들에 의해 처리될 수 있다. 다른 예에서, 압축된 오디오 및/또는 비디오가 디지털 비트 스트림의 형태로 수신될 수 있고, 이는 디지털 오디오 샘플들 및/또는 동영상 프레임들을 재생성하기 위해 SIMD 코프로세서 명령어들에 의해 처리될 수 있다. 처리 코어(170)의 일 실시예에서, 주 프로세서(166) 및 SIMD 코프로세서(161)는 실행 유닛(162), 일 세트의 레지스터 파일들(164), 및 일 실시예에 따른 명령어들을 포함하는 명령어 집합(163)의 명령어들을 인식하는 디코더(165)를 포함하는 단일 처리 코어(170) 내에 통합될 수 있다.
도 2는 본 개시내용의 실시예들에 따른, 명령어들을 수행하는 로직 회로들을 포함할 수 있는 프로세서(200)에 대한 마이크로 아키텍처의 블록도이다. 일부 실시예들에서, 일 실시예에 따른 명령어는 바이트(byte), 워드(word), 더블워드(doubleword), 쿼드워드(quadword) 등의 크기들은 물론, 단정도(single precision) 및 배정도(double precision) 정수 및 부동 소수점 데이터 유형들과 같은 데이터 유형들을 가지는 데이터 요소들을 처리하도록 구현될 수 있다. 일 실시예에서, 순차 프런트 엔드(in-order front end)(201)는 실행될 명령어들을 페치할 수 있고 이 명령어들을 프로세서 파이프라인에서 나중에 사용되도록 준비하는 프로세서(200)의 일부를 구현할 수 있다. 프런트 엔드(201)는 몇 개의 유닛들을 포함할 수 있다. 일 실시예에서, 명령어 프리페처(instruction prefetcher)(226)는 메모리로부터 명령어들을 페치하고 명령어들을 명령어 디코더(228)에 피드하며, 명령어 디코더(228)는 차례로 명령어들을 디코딩하거나 해석한다. 예를 들어, 일 실시예에서, 디코더는 수신된 명령어를 머신이 실행할 수 있는 하나 이상의 연산들("마이크로 명령어" 또는 "마이크로 연산"(마이크로 op 또는 uop라고도 불리움)이라고 불리움)로 디코딩한다. 다른 실시예들에서, 디코더는 명령어를, 일 실시예에 따른 연산들을 수행하기 위해 마이크로 아키텍처에 의해 사용될 수 있는 연산코드(opcode) 및 대응하는 데이터 및 제어 필드들로, 파싱한다. 일 실시예에서, 트레이스 캐시(trace cache)(230)는 디코딩된 uop들을 실행을 위해 uop 큐(234)에서 프로그램 순서로 된(program ordered) 시퀀스들 또는 트레이스들로 조립할 수 있다. 트레이스 캐시(230)가 복합 명령어(complex instruction)를 만날 때, 마이크로코드 ROM(232)은 연산을 완료하는 데 필요한 uop들을 제공한다.
일부 명령어들은 단일 마이크로 op로 변환될 수 있는 반면, 다른 것들은 전체 연산을 완료하는 데 몇 개의 마이크로 op들을 필요로 한다. 일 실시예에서, 명령어를 완료하는 데 4개 초과의 마이크로 op들이 필요한 경우, 디코더(228)는 명령어를 수행하기 위해 마이크로코드 ROM(232)에 액세스할 수 있다. 일 실시예에서, 명령어는 명령어 디코더(228)에서의 처리를 위해 적은 수의 마이크로 op들로 디코딩될 수 있다. 다른 실시예에서, 연산을 완수하기 위해 다수의 마이크로 op들이 필요한 경우, 명령어가 마이크로코드 ROM(232) 내에 저장될 수 있다. 트레이스 캐시(230)는 마이크로코드 ROM(232)으로부터 일 실시예에 따른 하나 이상의 명령어들을 완료하기 위해 마이크로코드 시퀀스들을 읽기 위한 정확한 마이크로 명령어 포인터를 결정하기 위해 진입점 PLA(programmable logic array)를 참조한다. 마이크로코드 ROM(232)이 명령어에 대한 마이크로 op들을 시퀀싱하는 것을 끝낸 후에, 머신의 프런트 엔드(201)는 트레이스 캐시(230)로부터 마이크로 op들을 페치하는 것을 재개할 수 있다.
비순차 실행 엔진(203)은 명령어들을 실행할 준비를 할 수 있다. 비순차 실행 로직은, 명령어들이 파이프라인을 따라 내려가면서 실행을 위해 스케줄링될 때, 성능을 최적화하기 위해 명령어들의 흐름을 원만하게 하고 재정렬하는 다수의 버퍼들을 가진다. 할당기 로직은 각각의 uop가 실행되기 위해 필요로 하는 머신 버퍼들 및 자원들을 할당한다. 레지스터 재명명 로직은 논리 레지스터들을 레지스터 파일 내의 엔트리들로 재명명한다. 할당기는 또한, 명령어 스케줄러들 - 메모리 스케줄러, 고속 스케줄러(fast scheduler)(202), 저속/일반 부동 소수점 스케줄러(204), 및 단순 부동 소수점 스케줄러(206) - 에 앞서, 2개의 uop 큐들(하나는 메모리 연산들에 대한 것이고 하나는 비메모리 연산들에 대한 것임) 중 하나 내의 각각의 uop에 대한 엔트리를 할당한다. uop 스케줄러들(202, 204, 206)은, 그들의 의존적인 입력 레지스터 피연산자 소스들의 준비성(readiness) 및 uop들이 그들의 연산을 완료하는 데 필요로 하는 실행 자원들의 이용 가능성에 기초하여, uop가 언제 실행될 준비가 되는지를 결정한다. 일 실시예의 고속 스케줄러(202)는 주 클록 사이클의 1/2마다 스케줄링될 수 있는 반면, 다른 스케줄러들은 단지 주 프로세서 클록 사이클마다 한 번씩 스케줄링될 수 있다. 스케줄러들은 디스패치 포트들이 실행하기 위한 uop들을 스케줄링하도록 중재한다.
레지스터 파일들(208, 210)은 스케줄러들(202, 204, 206)과 실행 블록(211) 내의 실행 유닛들(212, 214, 216, 218, 220, 222, 224) 사이에 배열될 수 있다. 레지스터 파일들(208, 210) 각각은, 각각, 정수 및 부동 소수점 연산을 수행한다. 각각의 레지스터 파일(208, 210)은 아직 레지스터 파일에 기입되지 않은 금방 완료된 결과들을 새로운 의존적 uop들로 바이패스 또는 전달할 수 있는 바이패스 네트워크(bypass network)를 포함할 수 있다. 정수 레지스터 파일(208)과 부동 소수점 레지스터 파일(210)은 상대방과 데이터를 주고 받을 수 있다. 일 실시예에서, 정수 레지스터 파일(208)은 2개의 개별적인 레지스터 파일들로 분할될 수 있고, 하나의 레지스터 파일은 데이터의 하위 32 비트에 대한 것이고, 제2 레지스터 파일은 데이터의 상위 32 비트에 대한 것이다. 부동 소수점 레지스터 파일(210)은 128-비트 폭의 엔트리들을 포함할 수 있는데, 그 이유는 부동 소수점 명령어들이 전형적으로 폭이 64 내지 128 비트인 피연산자들을 가지기 때문이다.
실행 블록(211)은 실행 유닛들(212, 214, 216, 218, 220, 222, 224)을 포함할 수 있다. 실행 유닛들(212, 214, 216, 218, 220, 222, 224)은 명령어들을 실행할 수 있다. 실행 블록(211)은 마이크로 명령어들이 실행해야 하는 정수 및 부동 소수점 데이터 피연산자 값들을 저장하는 레지스터 파일들(208, 210)을 포함한다. 일 실시예에서, 프로세서(200)는 다수의 실행 유닛들 - 주소 발생 유닛(address generation unit, AGU)(212), AGU(214), 고속 ALU(216), 고속 ALU(218), 저속 ALU(220), 부동 소수점 ALU(222), 부동 소수점 이동 유닛(224) - 을 포함할 수 있다. 다른 실시예에서, 부동 소수점 실행 블록들(222, 224)은 부동 소수점, MMX, SIMD 및 SSE, 또는 다른 연산들을 실행할 수 있다. 또 다른 실시예에서, 부동 소수점 ALU(222)는 나눗셈, 제곱근 및 나머지 마이크로 op들을 실행하는 64 비트 x 64 비트 부동 소수점 나눗셈기를 포함할 수 있다. 다양한 실시예들에서, 부동 소수점 값을 포함하는 명령어들은 부동 소수점 하드웨어에서 처리될 수 있다. 일 실시예에서, ALU 연산들은 고속 ALU 실행 유닛들(216, 218)로 전달될 수 있다. 고속 ALU들(216, 218)은 1/2 클록 사이클의 유효 대기 시간으로 고속 연산들을 실행할 수 있다. 일 실시예에서, 대부분의 복잡한 정수 연산들은 저속 ALU(220)로 가는데, 그 이유는 저속 ALU(220)가 곱셈기, 시프트, 플래그 논리 및 분기 처리와 같은 긴 대기 시간 유형의 연산들에 대한 정수 실행 하드웨어를 포함할 수 있기 때문이다. 메모리 로드/저장 연산들은 AGU들(212, 214)에 의해 실행될 수 있다. 일 실시예에서, 정수 ALU들(216, 218, 220)은 64-비트 데이터 피연산자들에 대한 정수 연산들을 수행할 수 있다. 다른 실시예들에서, ALU들(216, 218, 220)은 16, 32, 128, 256 등을 비롯한 각종의 데이터 비트 크기들을 지원하도록 구현될 수 있다. 이와 유사하게, 부동 소수점 유닛들(222, 224)은 다양한 폭의 비트들을 가지는 피연산자들의 범위를 지원하도록 구현될 수 있다. 일 실시예에서, 부동 소수점 유닛들(222, 224)은 SIMD 및 멀티미디어 명령어들과 관련하여 128-비트 폭의 패킹된 데이터 피연산자들을 처리할 수 있다.
일 실시예에서, uop 스케줄러들(202, 204, 206)은 부모 로드(parent load)가 실행을 끝내기 전에 의존적 연산들을 디스패치한다. uop들이 프로세서(200)에서 투기적으로 스케줄링되고 실행될 수 있기 때문에, 프로세서(700)는 또한 메모리 미스(memory miss)들을 처리하는 로직을 포함할 수 있다. 데이터 로드가 데이터 캐시에 없는 경우, 일시적으로 부정확한 데이터를 갖는 스케줄러를 남겨 둔 실행 중인 의존적 연산들이 파이프라인에 있을 수 있다. 재생 메커니즘은 부정확한 데이터를 사용하는 명령어들을 추적하고 재실행한다. 의존적 연산들만이 재생되면 되고, 독립적 연산들은 완료될 수 있다. 프로세서의 일 실시예의 스케줄러들 및 재생 메커니즘은 또한 텍스트 문자열 비교 연산들에 대한 명령어 시퀀스들을 포착하도록 설계될 수 있다.
"레지스터"라는 용어는 피연산자들을 식별하기 위해 명령어들의 일부로서 사용될 수 있는 온보드 프로세서 저장 장소를 지칭할 수 있다. 환언하면, 레지스터는 프로세서의 외부로부터(프로그래머의 관점에서) 사용 가능할 수 있는 것일 수 있다. 그렇지만, 일부 실시예들에서, 레지스터가 특정의 유형의 회로로로 제한되지 않을 수 있다. 오히려, 레지스터는 데이터를 저장하고, 데이터를 제공하며, 본원에 기술되는 기능들을 수행할 수 있다. 본원에 기술되는 레지스터들은 임의의 수의 상이한 기법들 - 전용 물리 레지스터, 레지스터 재명명을 사용하여 동적으로 할당된 물리 레지스터, 전용 물리 레지스터와 동적으로 할당된 물리 레지스터의 조합, 기타 등등 - 을 사용하여 프로세서 내의 회로에 의해 구현될 수 있다. 일 실시예에서, 정수 레지스터들은 32-비트 정수 데이터를 저장한다. 일 실시예의 레지스터 파일은 또한 패킹된 데이터에 대한 8 개의 멀티미디어 SIMD 레지스터들을 포함한다. 이하에서의 논의를 위해, 레지스터들은 패킹된 데이터를 보유하도록 설계된 데이터 레지스터들 - 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation의 MMX 기술에 의해 가능하게 되는 마이크로프로세서들에서의 64-비트 폭의 MMX™ 레지스터(어떤 경우에, "mm" 레지스터라고도 지칭됨) 등 - 인 것으로 이해될 수 있다. 정수 및 부동 소수점 형태 둘 다로 이용 가능한 이 MMX 레지스터들은 SIMD 및 SSE 명령어들에 수반하는 패킹된 데이터 요소들에 대해 동작될 수 있다. 이와 유사하게, SSE2, SSE3, SSE4, 또는 그 이상(일반적으로 "SSEx"라고 지칭됨)의 기술과 관련된 128-비트 폭의 XMM 레지스터들도 이러한 패킹된 데이터 피연산자들을 보유할 수 있다. 일 실시예에서, 패킹된 데이터 및 정수 데이터를 저장할 때, 레지스터들은 2개의 데이터 유형들을 구별할 필요가 없다. 일 실시예에서, 정수 및 부동 소수점이 동일한 레지스터 파일 또는 상이한 레지스터 파일들에 들어 있을 수 있다. 게다가, 일 실시예에서, 부동 소수점 및 정수 데이터가 상이한 레지스터들 또는 동일한 레지스터들에 저장될 수 있다.
이하의 도면들의 예들에서, 다수의 데이터 피연산자들이 기술될 수 있다. 도 3a는 본 개시내용의 실시예들에 따른, 멀티미디어 레지스터들에서의 다양한 패킹된 데이터 유형 표현들을 나타낸 것이다. 도 3a는 128-비트 폭의 피연산자들에 대한 패킹된 바이트(310), 패킹된 워드(320), 및 패킹된 더블워드(dword)(330)에 대한 데이터 유형들을 나타낸 것이다. 이 예의 패킹된 바이트 포맷(packed byte format)(310)은 128 비트 길이일 수 있고, 16 개의 패킹된 바이트 데이터 요소들을 포함한다. 바이트는, 예를 들어, 8 비트의 데이터로서 정의될 수 있다. 각각의 바이트 데이터 요소에 대한 정보는 바이트 0에 대해서는 비트 7 내지 비트 0에, 바이트 1에 대해서는 비트 15 내지 비트 8에, 바이트 2에 대해서는 비트 23 내지 비트 16에, 그리고 마지막으로 바이트 15에 대해서는 비트 120 내지 비트 127에 저장될 수 있다. 이와 같이, 모든 이용 가능 비트들이 레지스터에서 사용될 수 있다. 이 저장 배열은 프로세서의 저장 효율을 향상시킨다. 또한, 16 개의 데이터 요소들이 액세스되는 경우, 하나의 연산이 이제 16 개의 데이터 요소들에 대해 병렬로 수행될 수 있다.
일반적으로, 데이터 요소는 동일한 길이의 다른 데이터 요소들과 함께 단일 레지스터 또는 메모리 장소에 저장되는 개개의 데이터 조각을 포함할 수 있다. SSEx 기술과 관련된 패킹된 데이터 시퀀스에서, XMM 레지스터에 저장된 데이터 요소들의 개수는 128 비트를 개개의 데이터 요소의 길이(단위: 비트)로 나눈 것일 수 있다. 이와 유사하게, MMX 및 SSE 기술과 관련된 패킹된 데이터 시퀀스에서, MMX 레지스터에 저장된 데이터 요소들의 개수는 64 비트를 개개의 데이터 요소의 길이(단위: 비트)로 나눈 것일 수 있다. 도 3a에 예시된 데이터 유형들이 128 비트 길이일 수 있지만, 본 개시내용의 실시예들은 또한 64-비트 폭 또는 다른 크기의 피연산자들에 대해서도 동작할 수 있다. 이 예의 패킹된 워드 포맷(packed word format)(320)은 128 비트 길이일 수 있고, 8 개의 패킹된 워드 데이터 요소들을 포함한다. 각각의 패킹된 워드는 16 비트의 정보를 포함한다. 도 3a의 패킹된 더블워드 포맷(packed doubleword format)(330)은 128 비트 길이일 수 있고, 4개의 패킹된 더블워드 데이터 요소들을 포함한다. 각각의 패킹된 더블워드 데이터 요소는 32 비트의 정보를 포함한다. 패킹된 쿼드워드는 128 비트 길이일 수 있고 2개의 패킹된 쿼드워드 데이터 요소들을 포함한다.
도 3b는 본 개시내용의 실시예들에 따른, 가능한 레지스터내 데이터 저장 포맷들을 나타낸 것이다. 각각의 패킹된 데이터는 하나 초과의 독립적인 데이터 요소를 포함할 수 있다. 3 개의 패킹된 데이터 포맷들 - 패킹된 하프(packed half)(341), 패킹된 싱글(packed single)(342), 및 패킹된 더블(packed double)(343) - 이 예시되어 있다. 패킹된 하프(341), 패킹된 싱글(342) 및 패킹된 더블(343)의 일 실시예는 고정 소수점 데이터 요소들을 포함한다. 다른 실시예에서, 패킹된 하프(341), 패킹된 싱글(342), 및 패킹된 더블(343) 중 하나 이상은 부동 소수점 데이터 요소들을 포함할 수 있다. 패킹된 하프(341)의 일 실시예는 128 비트 길이일 수 있고, 8 개의 16-비트 데이터 요소들을 포함한다. 패킹된 싱글(342)의 일 실시예는 128 비트 길이일 수 있고, 4개의 32-비트 데이터 요소들을 포함한다. 패킹된 더블(343)의 일 실시예는 128 비트 길이일 수 있고, 2개의 64-비트 데이터 요소들을 포함한다. 이러한 패킹된 데이터 포맷들이 다른 레지스터 길이들로, 예를 들어, 96-비트, 160-비트, 192-비트, 224-비트, 256-비트 또는 그 이상으로 추가로 확장될 수 있다는 것을 잘 알 것이다.
도 3c는 본 개시내용의 실시예들에 따른, 멀티미디어 레지스터들에서의 다양한 부호 있는 및 부호 없는 패킹된 데이터 유형 표현들을 나타낸 것이다. 부호 없는 패킹된 바이트 표현(344)은 부호 없는 패킹된 바이트를 SIMD 레지스터에 저장하는 것을 나타낸 것이다. 각각의 바이트 데이터 요소에 대한 정보는 바이트 0에 대해서는 비트 7 내지 비트 0에, 바이트 1에 대해서는 비트 15 내지 비트 8에, 바이트 2에 대해서는 비트 23 내지 비트 16에, 그리고 마지막으로 바이트 15에 대해서는 비트 120 내지 비트 127에 저장될 수 있다. 이와 같이, 모든 이용 가능 비트들이 레지스터에서 사용될 수 있다. 이 저장 배열은 프로세서의 저장 효율을 향상시킬 수 있다. 또한, 16 개의 데이터 요소들이 액세스되는 경우, 하나의 연산이 이제 16 개의 데이터 요소들에 대해 병렬로 수행될 수 있다. 부호 있는 패킹된 바이트 표현(345)은 부호 있는 패킹된 바이트의 저장을 나타낸 것이다. 주목할 점은, 모든 바이트 데이터 요소의 제8 비트가 부호 표시자(sign indicator)일 수 있다는 것이다. 부호 없는 패킹된 워드 표현(346)은 워드 7 내지 워드 0이 SIMD 레지스터에 어떻게 저장될 수 있는지를 나타낸 것이다. 부호 있는 패킹된 워드 표현(347)은 부호 없는 패킹된 워드의 레지스터내 표현(346)과 유사할 수 있다. 주목할 점은, 각각의 워드 데이터 요소의 제16 비트가 부호 표시자일 수 있는 것이다. 부호 없는 패킹된 더블워드 표현(348)은 더블워드 데이터 요소들이 어떻게 저장되는지를 나타낸 것이다. 부호 있는 패킹된 더블워드 표현(349)은 부호 없는 패킹된 더블워드의 레지스터내 표현(348)과 유사할 수 있다. 주목할 점은, 필요한 부호 비트가 각각의 더블워드 데이터 요소의 제32 비트일 수 있다는 것이다.
도 3d는 연산 인코딩(operation encoding)(연산 코드)의 일 실시예를 나타낸 것이다. 게다가, 포맷(360)은 "IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference" - 월드 와이드 웹(www)의 intel.com/design/litcentr에서 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation로부터 입수가능함 - 에 기술된 유형의 연산 코드 포맷에 대응하는 레지스터/메모리 피연산자 주소 지정 모드들을 포함할 수 있다. 일 실시예에서, 명령어가 필드(361) 및 필드(362) 중 하나 이상에 의해 인코딩될 수 있다. 최대 2개의 소스 피연산자 식별자들(364, 365)을 비롯하여, 명령어당 최대 2개의 피연산자 장소들이 식별될 수 있다. 일 실시예에서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(364)와 동일할 수 있는 반면, 다른 실시예들에서, 이들이 상이할 수 있다. 다른 실시예에서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(365)와 동일할 수 있는 반면, 다른 실시예들에서, 이들이 상이할 수 있다. 일 실시예에서, 소스 피연산자 식별자들(364, 365)에 의해 식별되는 소스 피연산자들 중 하나가 텍스트 문자열 비교 연산의 결과에 의해 덮어쓰기될 수 있는 반면, 다른 실시예들에서, 식별자(364)는 소스 레지스터 요소에 대응하고 식별자(365)는 목적지 레지스터 요소에 대응한다. 일 실시예에서, 피연산자 식별자들(364, 365)은 32-비트 또는 64-비트 소스 및 목적지 피연산자들을 식별해줄 수 있다.
도 3e는 본 개시내용의 실시예들에 따른, 40 비트 이상을 가지는 다른 가능한 연산 인코딩(연산 코드) 포맷(370)을 나타낸 것이다. 연산 코드 포맷(370)은 연산 코드 포맷(360)에 대응하고, 선택적인 프리픽스 바이트(prefix byte)(378)를 포함한다. 일 실시예에 따른 명령어가 필드들(378, 371, 및 372) 중 하나 이상에 의해 인코딩될 수 있다. 명령어당 최대 2개의 피연산자 장소들이 소스 피연산자 식별자들(374 및 375)에 의해 그리고 프리픽스 바이트(378)에 의해 식별될 수 있다. 일 실시예에서, 프리픽스 바이트(378)는 32-비트 또는 64-비트 소스 및 목적지 피연산자들을 식별하는 데 사용될 수 있다. 일 실시예에서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(374)와 동일할 수 있는 반면, 다른 실시예들에서, 이들이 상이할 수 있다. 다른 실시예에서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(375)와 동일할 수 있는 반면, 다른 실시예들에서, 이들이 상이할 수 있다. 일 실시예에서, 명령어가 피연산자 식별자들(374 및 375)에 의해 식별된 피연산자들 중 하나 이상을 처리하고 피연산자 식별자들(374 및 375)에 의해 식별된 하나 이상의 피연산자들이 그 명령어의 결과로 덮어쓰기될 수 있는 반면, 다른 실시예들에서, 식별자들(374 및 375)에 의해 식별된 피연산자들이 다른 레지스터 내의 다른 데이터 요소에 기입될 수 있다. 연산 코드 포맷들(360 및 370)은 MOD 필드들(363 및 373)에 의해 그리고 선택적인 스케일-인덱스-베이스(scale-index-base) 및 변위(displacement) 바이트들에 의해 부분적으로 명시된 레지스터 투 레지스터(register to register), 메모리 투 레지스터(memory to register), 레지스터 바이 메모리(register by memory), 레지스터 바이 레지스터(register by register), 레지스터 바이 즉치(register by immediate), 레지스터 투 메모리(register to memory) 주소 지정을 가능하게 한다.
도 3f는 본 개시내용의 실시예들에 따른, 또 다른 가능한 연산 인코딩(연산 코드) 포맷을 나타낸 것이다. 64 비트 SIMD(single instruction multiple data) 산술 연산은 CDP(coprocessor data processing) 명령어를 통해 수행될 수 있다. 연산 인코딩(연산 코드) 포맷(380)은 CDP 연산 코드 필드들(382 및 389)을 가지는 하나의 이러한 CDP 명령어를 나타낸다. 다른 실시예에 대한 CDP 명령어의 유형은 필드들(383, 384, 387, 및 388) 중 하나 이상에 의해 인코딩될 수 있다. 최대 2개의 소스 피연산자 식별자들(385 및 390) 및 하나의 목적지 피연산자 식별자(386)를 비롯하여 명령어당 최대 3 개의 피연산자 장소들이 식별될 수 있다. 코프로세서의 일 실시예는 8, 16, 32, 및 64-비트 값을 처리할 수 있다. 일 실시예에서, 명령어가 정수 데이터 요소들에 대해 수행될 수 있다. 일부 실시예들에서, 명령어가, 조건 필드(381)를 사용하여, 조건부로 실행될 수 있다. 일부 실시예들에서, 소스 데이터 크기들은 필드(383)에 의해 인코딩될 수 있다. 일부 실시예들에서, SIMD 필드들에 대해 영(Z), 마이너스(N), 캐리(C), 및 오버플로우(V) 탐지가 행해질 수 있다. 일부 명령어들에서, 포화(saturation)의 유형이 필드(384)에 의해 인코딩될 수 있다.
도 4a는 본 개시내용의 실시예들에 따른, 순차 파이프라인 및 레지스터 재명명 스테이지, 비순차 발행/실행 파이프라인을 나타낸 블록도이다. 도 4b는 본 개시내용의 실시예들에 따른, 프로세서에 포함될 순차 아키텍처 코어 및 레지스터 재명명 로직, 비순차 발행/실행 로직을 나타낸 블록도이다. 도 4a에서의 실선 상자들은 순차 파이프라인을 나타내는 반면, 파선 상자들은 레지스터 재명명, 비순차 발행/실행 파이프라인을 나타낸다. 이와 유사하게, 도 4b에서의 실선 상자들은 순차 아키텍처 로직을 나타내는 반면, 파선 상자들은 레지스터 재명명 로직 및 비순차 발행/실행 로직을 나타낸다.
도 4a에서, 프로세서 파이프라인(400)은 페치(fetch) 스테이지(402), 길이 디코드 스테이지(404), 디코드 스테이지(406), 할당 스테이지(408), 재명명 스테이지(410), 스케줄링(디스패치(dispatch) 또는 발행(issue)이라고도 알려져 있음) 스테이지(412), 레지스터 판독/메모리 판독 스테이지(414), 실행 스테이지(416), 라이트백(write back)/메모리 기입(memory write) 스테이지(418), 예외 처리 스테이지(422), 및 커밋(commit) 스테이지(424)를 포함할 수 있다.
도 4b에서, 화살표들은 2개 이상의 유닛들 사이의 결합을 나타내고, 화살표의 방향은 그 유닛들 사이의 데이터 흐름의 방향을 나타낸다. 도 4b는 실행 엔진 유닛(450)에 결합되어 있는 프런트 엔드 유닛(front end unit)(430)을 포함하는 프로세서 코어(490)을 나타낸 것이고, 둘 다가 메모리 유닛(470)에 결합될 수 있다.
코어(490)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안의 코어 유형일 수 있다. 일 실시예에서, 코어(490)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프런트 엔드 유닛(430)은 명령어 캐시 유닛(434)에 결합된 분기 예측 유닛(432)을 포함할 수 있다. 명령어 캐시 유닛(434)은 명령어 TLB(translation lookaside buffer)(436)에 결합될 수 있다. TLB(436)는 명령어 페치 유닛(438)에 결합될 수 있고, 명령어 페치 유닛(438)은 디코드 유닛(440)에 결합되어 있다. 디코드 유닛(440)은 명령어들을 디코딩하고, 원래의 명령어들로부터 디코딩될 수 있거나, 원래의 명령어들을 다른 방식으로 반영하거나, 원래의 명령어들로부터 도출될 수 있는 하나 이상의 마이크로연산들, 마이크로코드 진입점들, 마이크로명령어들, 다른 명령어들, 또는 다른 제어 신호들을 출력으로서 발생시킬 수 있다. 디코더는 각종의 상이한 메커니즘들을 사용하여 구현될 수 있다. 적당한 메커니즘들의 예들은 룩업 테이블(look-up table), 하드웨어 구현, PLA(programmable logic array), 마이크로코드 ROM(read only memory) 등을 포함하지만, 이들로 제한되지 않는다. 일 실시예에서, 명령어 캐시 유닛(434)은 또한 메모리 유닛(470) 내의 L2(level 2) 캐시 유닛(476)에 결합될 수 있다. 디코드 유닛(440)은 실행 엔진 유닛(450) 내의 재명명/할당기 유닛(452)에 결합될 수 있다.
실행 엔진 유닛(450)은 회수 유닛(retirement unit)(454) 및 하나 이상의 스케줄러 유닛들(456)의 집합에 결합되어 있는 재명명/할당기 유닛(452)을 포함할 수 있다. 스케줄러 유닛들(456)은 예약 스테이션(reservations station), 중앙 명령어 윈도우(central instruction window) 등을 비롯한 임의의 수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛들(456)은 물리 레지스터 파일 유닛들(458)에 결합될 수 있다. 물리 레지스터 파일 유닛들(458) 각각은 하나 이상의 물리 레지스터 파일들을 나타내고, 그 중 상이한 물리 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수(packed integer), 패킹된 부동 소수점(packed floating point), 벡터 정수, 벡터 부동 소수점 등, 상태(예컨대, 실행될 다음 명령어의 주소인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 유형들을 저장한다. 레지스터 재명명 및 비순차 실행이 구현될 수 있는 다양한 방식들(예컨대, 하나 이상의 재정렬 버퍼들 및 하나 이상의 회수 레지스터 파일들을 사용하는 것; 장래 파일(future file)들, 하나 이상의 기록 버퍼(history buffer)들, 및 하나 이상의 회수 레지스터 파일들을 사용하는 것; 레지스터 맵 및 레지스터들의 풀(pool)을 사용하는 것 등)을 나타내기 위해, 물리 레지스터 파일 유닛들(458)이 회수 유닛(154)과 중첩될 수 있다. 일반적으로, 아키텍처 레지스터들은 프로세서의 외부로부터 또는 프로그래머의 관점에서 보일 수 있다. 레지스터들이 임의의 알려진 특정 유형의 회로로 제한되지 않을 수 있다. 레지스터들이 본원에 기술되는 바와 같이 데이터를 저장하고 제공하는 한, 각종의 상이한 유형의 레지스터들이 적당할 수 있다. 적당한 레지스터들의 예들은 전용 물리 레지스터(dedicated physical register), 레지스터 재명명을 사용하는 동적 할당 물리 레지스터(dynamically allocated physical register), 전용 및 동적 할당 물리 레지스터들의 조합 등을 포함하지만, 이들로 제한되지 않을 수 있다. 회수 유닛(454) 및 물리 레지스터 파일 유닛들(458)이 실행 클러스터들(460)에 결합될 수 있다. 실행 클러스터들(460)은 하나 이상의 실행 유닛들(162)의 집합 및 하나 이상의 메모리 액세스 유닛들(464)의 집합을 포함할 수 있다. 실행 유닛들(462)은 다양한 유형의 데이터(예컨대, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예컨대, 시프트, 덧셈, 뺄셈, 곱셈)을 수행할 수 있다. 일부 실시예들이 특정 기능들 또는 기능들의 집합들에 전용된 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단지 하나의 실행 유닛 또는 다수의 실행 유닛들(모두가 모든 기능들을 수행함)을 포함할 수 있다. 스케줄러 유닛들(456), 물리 레지스터 파일 유닛들(458), 및 실행 클러스터들(460)이 어쩌면 복수 개로 도시되어 있는데, 그 이유는 특정 실시예들이 특정 유형의 데이터/연산들에 대해 개별적인 파이프라인들(예컨대, 각각이 그 자신의 스케줄러 유닛, 물리 레지스터 파일 유닛, 및/또는 실행 클러스터를 가지는 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인; 그리고 개별적인 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛들(464)을 가지는 특정의 실시예들이 구현될 수 있음)을 생성하기 때문이다. 또한, 개별적인 파이프라인들이 사용되는 경우에, 이 파이프라인들 중 하나 이상은 비순차 발행/실행일 수 있고 나머지는 순차 발행/실행일 수 있다는 것을 잘 알 것이다.
메모리 액세스 유닛들(464)의 집합은 메모리 유닛(470)에 결합될 수 있고, 메모리 유닛(470)은 데이터 TLB 유닛(472), 데이터 TLB 유닛(472)에 결합되어 있는 데이터 캐시 유닛(474), 및 데이터 캐시 유닛(474)에 결합되어 있는 L2(level 2) 캐시 유닛(476)을 포함할 수 있다. 일 예시적인 실시예에서, 메모리 액세스 유닛들(464)은 로드 유닛, 주소 저장 유닛, 및 데이터 저장 유닛을 포함할 수 있고, 이들 각각은 메모리 유닛(470) 내의 데이터 TLB 유닛(472)에 결합될 수 있다. L2 캐시 유닛(476)은 하나 이상의 다른 레벨의 캐시에 그리고 궁극적으로 메인 메모리(main memory)에 결합될 수 있다.
예로서, 예시적인 레지스터 재명명, 비순차 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(400)을 구현할 수 있다: 1) 명령어 페치(438)는 페치 스테이지(402) 및 길이 디코딩 스테이지(404)를 수행할 수 있음; 2) 디코드 유닛(440)은 디코드 스테이지(406)를 수행할 수 있음; 3) 재명명/할당기 유닛(452)은 할당 스테이지(408) 및 재명명 스테이지(410)를 수행할 수 있음; 4) 스케줄러 유닛들(456)은 스케줄링 스테이지(412)를 수행할 수 있음; 5) 물리 레지스터 파일 유닛들(458) 및 메모리 유닛(470)은 레지스터 판독/메모리 판독 스테이지(414)를 수행할 수 있고; 실행 클러스터(460)는 실행 스테이지(416)를 수행할 수 있음; 6) 메모리 유닛(470) 및 물리 레지스터 파일 유닛들(458)은 라이트백/메모리 기입 스테이지(418)를 수행할 수 있음; 7) 다양한 유닛들이 예외 처리 스테이지(422)에 관여되어 있을 수 있음; 및 8) 회수 유닛(454) 및 물리 레지스터 파일 유닛들(458)은 커밋 스테이지(424)를 수행할 수 있음.
코어(490)는 하나 이상의 명령어 집합들(예컨대, (보다 최신의 버전들에서 추가된 어떤 확장들을 갖는) x86 명령어 집합; 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 집합; 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 (NEON과 같은 선택적인 부가의 확장들을 갖는) ARM 명령어 집합)을 지원할 수 있다.
코어가 멀티스레딩(연산들 또는 스레드들의 2개 이상의 병렬 집합들을 실행함)을 각종의 방식들로 지원할 수 있다는 것을 잘 알 것이다. 멀티스레딩 지원은, 예를 들어, 시간 분할(time sliced) 멀티스레딩, 동시 멀티스레딩(단일의 물리적 코어가 물리적 코어가 동시에 멀티스레딩하는 스레드들 각각에 대한 논리적 코어를 제공하는 경우), 또는 이들의 조합을 포함하는 것에 의해 수행될 수 있다. 이러한 조합은, 예를 들어, 시간 분할 페치 및 디코딩 그리고 그 후의 동시 멀티스레딩(예컨대, Intel® Hyperthreading 기술)을 포함할 수 있다.
레지스터 재명명이 비순차 실행과 관련하여 기술되어 있을 수 있지만, 레지스터 재명명이 순차 아키텍처에서 사용될 수 있다는 것을 잘 알 것이다. 프로세서의 예시된 실시예가 또한 개별적인 명령어 캐시 유닛(434) 및 데이터 캐시 유닛(474)과 공유 L2 캐시 유닛(476)을 포함할 수 있지만, 다른 실시예들은 명령어들 및 데이터 둘 다에 대한 단일의 내부 캐시(예를 들어, L1(Level 1) 내부 캐시 등), 또는 다수의 레벨의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 본 시스템은 내부 캐시와 외부 캐시(코어 및/또는 프로세서의 외부에 있을 수 있음)의 조합을 포함할 수 있다. 다른 실시예들에서, 모든 캐시가 코어 및/또는 프로세서의 외부에 있을 수 있다.
도 5a는 본 개시내용의 실시예들에 따른, 프로세서(500)의 블록도이다. 일 실시예에서, 프로세서(500)는 멀티코어 프로세서를 포함할 수 있다. 프로세서(500)는 하나 이상의 코어들(502)에 통신 가능하게 결합된 시스템 에이전트(510)를 포함할 수 있다. 게다가, 코어들(502) 및 시스템 에이전트(510)는 하나 이상의 캐시들(506)에 통신 가능하게 결합될 수 있다. 코어들(502), 시스템 에이전트(510), 및 캐시들(506)은 하나 이상의 메모리 제어 유닛들(552)을 통해 통신 가능하게 결합될 수 있다. 게다가, 코어들(502), 시스템 에이전트(510), 및 캐시들(506)은 메모리 제어 유닛들(552)을 통해 그래픽 모듈(560)에 통신 가능하게 결합될 수 있다.
프로세서(500)는 코어들(502), 시스템 에이전트(510), 및 캐시들(506)과 그래픽 모듈(560)을 상호연결시키는 임의의 적당한 메커니즘을 포함할 수 있다. 일 실시예에서, 프로세서(500)는 코어들(502), 시스템 에이전트(510), 및 캐시들(506)과 그래픽 모듈(560)을 상호연결시키는 링 기반 상호연결 유닛(508)을 포함할 수 있다. 다른 실시예들에서, 프로세서(500)는 이러한 유닛들을 상호연결시키는 임의의 수의 널리 공지된 기법들을 포함할 수 있다. 링 기반 상호연결 유닛(508)은 상호연결을 용이하게 하기 위해 메모리 제어 유닛들(552)을 이용할 수 있다.
프로세서(500)는 코어들 내의 하나 이상의 레벨의 캐시들, 하나 이상의 공유 캐시 유닛들(506)(캐시들(506) 등), 또는 통합된 메모리 제어기 유닛들(552)의 집합에 결합되어 있는 외부 메모리(도시 생략)를 포함하는 메모리 계층구조를 포함할 수 있다. 캐시들(506)은 임의의 적당한 캐시를 포함할 수 있다. 일 실시예에서, 캐시들(506)은 L2(level 2), L3(level 3), L4(level 4), 또는 다른 레벨의 캐시와 같은 하나 이상의 중간 레벨 캐시들, LLC(last level cache, 마지막 레벨 캐시), 및/또는 이들의 조합들을 포함할 수 있다.
다양한 실시예들에서, 코어들(502) 중 하나 이상은 멀티스레딩을 수행할 수 있다. 시스템 에이전트(510)는 코어들(502)을 조정하고 동작시키는 구성요소들을 포함할 수 있다. 시스템 에이전트 유닛(510)은, 예를 들어, 전력 제어 유닛(power control unit, PCU)을 포함할 수 있다. PCU는 코어들(502)의 전력 상태를 조절하는 데 필요한 로직 및 구성요소들이거나 이들을 포함할 수 있다. 시스템 에이전트(510)는 그래픽 모듈(560) 또는 외부에서 연결된 하나 이상의 디스플레이들을 구동하는 디스플레이 엔진(512)을 포함할 수 있다. 시스템 에이전트(510)은 그래픽용 통신 버스들에 대한 인터페이스(1214)를 포함할 수 있다. 일 실시예에서, 인터페이스(1214)는 PCIe(PCI Express)에 의해 구현될 수 있다. 추가의 실시예에서, 인터페이스(1214)는 PEG(PCI Express Graphics)에 의해 구현될 수 있다. 시스템 에이전트(510)는 DMI(direct media interface)(516)를 포함할 수 있다. DMI(516)는 컴퓨터 시스템의 마더보드 또는 다른 부분 상의 상이한 브리지들 사이의 링크들을 제공할 수 있다. 시스템 에이전트(510)는 컴퓨팅 시스템의 다른 요소들에의 PCIe 링크들을 제공하는 PCIe 브리지(1218)를 포함할 수 있다. PCIe 브리지(1218)는 메모리 제어기(1220) 및 일관성 로직(coherence logic)(1222)을 사용하여 구현될 수 있다.
코어들(502)은 임의의 적당한 방식으로 구현될 수 있다. 코어들(502)은 아키텍처 및/또는 명령어 집합의 면에서 동질적이거나 이질적일 수 있다. 일 실시예에서, 코어들(502) 중 일부는 순차일 수 있는 반면, 다른 것들은 비순차일 수 있다. 다른 실시예에서, 코어들(502) 중 2개 이상은 동일한 명령어 집합을 실행할 수 있는 반면, 다른 것들은 그 명령어 집합의 부분집합만 또는 상이한 명령어 집합을 실행할 수 있다.
프로세서(500)는 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation으로부터 입수 가능할 수 있는 Core™ i3, i5, i7, 2 Duo 및 Quad, Xeon™, Itanium™, XScale™ 또는 StrongARM™ 프로세서와 같은 범용 프로세서를 포함할 수 있다. 프로세서(500)는 ARM Holdings, Ltd, MIPS 등과 같은 다른 회사로부터 제공될 수 있다. 프로세서(500)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, 코프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서일 수 있다. 프로세서(500)는 하나 이상의 칩들 상에 구현될 수 있다. 프로세서(500)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 다수의 공정 기술들 중 임의의 것을 사용하여 하나 이상의 기판들 상에 구현될 수 있고 그리고/또는 그의 일부일 수 있다.
일 실시예에서, 캐시들(506) 중 주어진 캐시가 코어들(502) 중 다수의 코어들에 의해 공유될 수 있다. 다른 실시예에서, 캐시들(506) 중 주어진 캐시가 코어들(502) 중 하나에 전용되어 있을 수 있다. 캐시들(506)을 코어들(502)에 할당하는 것이 캐시 제어기 또는 다른 적당한 메커니즘에 의해 처리될 수 있다. 캐시들(506) 중 주어진 캐시가 주어진 캐시(506)의 시간 슬라이스(time-slice)들을 구현하는 것에 의해 2개 이상의 코어들(502)에 의해 공유될 수 있다.
그래픽 모듈(560)은 통합된 그래픽 처리 서브시스템을 구현할 수 있다. 일 실시예에서, 그래픽 모듈(560)은 그래픽 프로세서를 포함할 수 있다. 게다가, 그래픽 모듈(560)은 미디어 엔진(565)을 포함할 수 있다. 미디어 엔진(565)은 미디어 인코딩 및 비디오 디코딩을 제공할 수 있다.
도 5b는 본 개시내용의 실시예들에 따른, 코어(502)의 예시적인 구현의 블록도이다. 코어(502)는 비순차 엔진(580)에 통신 가능하게 결합된 프런트 엔드(570)를 포함할 수 있다. 코어(502)는 캐시 계층구조(503)를 통해 프로세서(500)의 다른 부분들에 통신 가능하게 결합될 수 있다.
프런트 엔드(570)는 임의의 적당한 방식으로(예컨대, 전체적으로 또는 부분적으로 앞서 기술된 바와 같은 프런트 엔드(201)에 의해) 구현될 수 있다. 일 실시예에서, 프런트 엔드(570)는 캐시 계층구조(503)를 통해 프로세서(500)의 다른 부분들과 통신할 수 있다. 추가의 실시예에서, 프런트 엔드(570)는 프로세서(500)의 부분들로부터 명령어들을 페치하고, 명령어들이 비순차 실행 엔진(580)에 전달될 때, 명령어들을 프로세서 파이프라인에서 나중에 사용되도록 준비할 수 있다.
비순차 실행 엔진(580)은 임의의 적당한 방식으로(예컨대, 전체적으로 또는 부분적으로 앞서 기술된 바와 같은 비순차 실행 엔진(203)에 의해) 구현될 수 있다. 비순차 실행 엔진(580)은 프런트 엔드(570)로부터 수신된 명령어들을 실행할 준비를 할 수 있다. 비순차 실행 엔진(580)은 할당 모듈(1282)을 포함할 수 있다. 일 실시예에서, 할당 모듈(1282)은 주어진 명령어를 실행하기 위해 프로세서(500)의 자원들 또는 다른 자원들(레지스터들 또는 버퍼들 등)을 할당할 수 있다. 할당 모듈(1282)은 메모리 스케줄러, 고속 스케줄러 또는 부동 소수점 스케줄러와 같은 스케줄러들에서 할당을 행할 수 있다. 이러한 스케줄러들은 도 5b에서 자원 스케줄러들(584)로서 나타내어져 있을 수 있다. 할당 모듈(12182)은, 전체적으로 또는 부분적으로, 도 2와 관련하여 기술된 할당 로직에 의해 구현될 수 있다. 자원 스케줄러들(584)은 주어진 자원의 소스들의 준비성 및 명령어를 실행하는 데 필요한 실행 자원들의 이용 가능성에 기초하여 명령어가 언제 실행될 준비가 되는지를 결정할 수 있다. 자원 스케줄러들(584)은, 예를 들어, 앞서 논의된 바와 같은 스케줄러들(202, 204, 206)에 의해 구현될 수 있다. 자원 스케줄러들(584)은 하나 이상의 자원들에서의 명령어들의 실행을 스케줄링할 수 있다. 일 실시예에서, 이러한 자원들이 코어(502)의 내부에 있을 수 있고, 예를 들어, 자원들(586)으로서 예시되어 있을 수 있다. 다른 실시예에서, 이러한 자원들이 코어(502)의 외부에 있을 수 있고, 예를 들어, 캐시 계층구조(503)에 의해 액세스 가능할 수 있다. 자원들은, 예를 들어, 메모리, 캐시, 레지스터 파일, 또는 레지스터를 포함할 수 있다. 코어(502)의 내부에 있는 자원들은 도 5b에서 자원들(586)로 나타내어져 있을 수 있다. 필요에 따라, 자원들(586)에 기입되거나 그로부터 판독되는 값들이, 예를 들어, 캐시 계층구조(503)를 통해 프로세서(500)의 다른 부분들과 조정될 수 있다. 명령어들이 자원들을 할당받을 때, 명령어들은 재정렬 버퍼(588) 내에 놓일 수 있다. 재정렬 버퍼(588)는 명령어들이 실행될 때 명령어들을 추적할 수 있고, 프로세서(500)의 임의의 적당한 기준들에 기초하여 명령어들의 실행을 선택적으로 재정렬할 수 있다. 일 실시예에서, 재정렬 버퍼(588)는 독립적으로 실행될 수 있는 명령어들 또는 일련의 명령어들을 식별할 수 있다. 이러한 명령어들 또는 일련의 명령어들은 다른 이러한 명령어들과 병렬로 실행될 수 있다. 코어(502)에서의 병렬 실행은 임의의 적당한 수의 개별적인 실행 블록들 또는 가상 프로세서들에 의해 수행될 수 있다. 일 실시예에서, 메모리, 레지스터 및 캐시와 같은 공유 자원들은 주어진 코어(502) 내의 다수의 가상 프로세서들에 의해 액세스 가능할 수 있다. 다른 실시예들에서, 공유 자원들은 프로세서(500) 내의 다수의 처리 엔티티들에 의해 액세스 가능할 수 있다.
캐시 계층구조(503)는 임의의 적당한 방식으로 구현될 수 있다. 예를 들어, 캐시 계층구조(503)는, 캐시들(572, 574)과 같은, 하나 이상의 하위 또는 중간 레벨 캐시들을 포함할 수 있다. 일 실시예에서, 캐시 계층구조(503)는 캐시들(572, 574)에 통신 가능하게 결합된 LLC(595)를 포함할 수 있다. 다른 실시예에서, LLC(595)는 프로세서(500)의 모든 처리 엔티티들에 의해 액세스 가능한 모듈(590)에 구현될 수 있다. 추가의 실시예에서, 모듈(590)은 Intel, Inc.로부터의 프로세서들의 언코어 모듈(uncore module)에 구현될 수 있다. 모듈(590)은 코어(502)의 실행을 위해 필요한 프로세서(500)의 부분들 또는 서브시스템들을 포함할 수 있지만, 코어(502) 내에 구현되지 않을 수 있다. LLC(595) 이외에, 모듈(590)은, 예를 들어, 하드웨어 인터페이스, 메모리 일관성 조정기(memory coherency coordinator), 프로세서간 상호연결부(interprocessor interconnect), 명령어 파이프라인, 또는 메모리 제어기를 포함할 수 있다. 프로세서(500)에 의해 이용 가능한 RAM(599)에의 액세스가 모듈(590), 보다 구체적으로는, LLC(595)를 통해 행해질 수 있다. 게다가, 코어(502)의 다른 인스턴스들이 이와 유사하게 모듈(590)에 액세스할 수 있다. 코어(502)의 인스턴스들의 조정이 부분적으로 모듈(590)을 통해 용이하게 될 수 있다.
도 6 내지 도 8은 프로세서(500)를 포함하기에 적당한 예시적인 시스템들을 나타낸 것일 수 있는 반면, 도 9는 코어들(502) 중 하나 이상을 포함할 수 있는 예시적인 SoC(system on a chip)를 나타낸 것일 수 있다. 랩톱, 데스크톱, 핸드헬드 PC, PDA(personal digital assistant), 엔지니어링 워크스테이션, 서버, 네트워크 디바이스, 네트워크 허브, 스위치, 임베디드 프로세서, DSP(digital signal processor), 그래픽 디바이스, 비디오 게임 디바이스, 셋톱 박스, 마이크로 제어기, 휴대폰, 휴대용 미디어 플레이어, 핸드헬드 디바이스, 및 다양한 다른 전자 디바이스들에 대한 본 기술 분야에 공지된 다른 시스템 설계들 및 구현들도 적당할 수 있다. 일반적으로, 본원에 개시되는 것과 같은 프로세서 및/또는 다른 실행 로직을 포함하는 아주 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적당할 수 있다.
도 6은 본 개시내용의 실시예들에 따른, 시스템(600)의 블록도를 나타낸 것이다. 시스템(600)은 그래픽 메모리 제어기 허브(graphics memory controller hub, GMCH)(620)에 결합될 수 있는 하나 이상의 프로세서들(610, 615)을 포함할 수 있다. 부가의 프로세서들(615)의 선택적인 특성이 도 6에서 파선들로 나타내어져 있다.
각각의 프로세서(610, 615)는 어떤 버전의 프로세서(500)일 수 있다. 그렇지만, 통합된 그래픽 로직 및 통합된 메모리 제어 유닛들이 프로세서들(610, 615)에 존재하지 않을 수 있다는 것에 유의해야 한다. 도 6은 GMCH(620)가, 예를 들어, DRAM(dynamic random access memory)일 수 있는 메모리(640)에 결합될 수 있다는 것을 나타내고 있다. DRAM은, 적어도 하나의 실시예에서, 비휘발성 캐시와 연관되어 있을 수 있다.
GMCH(620)는 칩셋 또는 칩셋의 일부분일 수 있다. GMCH(620)는 프로세서들(610, 615)와 통신하고 프로세서들(610, 615)과 메모리(640) 사이의 상호작용을 제어할 수 있다. GMCH(620)는 또한 프로세서들(610, 615)과 시스템(600)의 다른 요소들 사이의 가속 버스 인터페이스로서 기능할 수 있다. 일 실시예에서, GMCH(620)는 FSB(frontside bus)(695)와 같은 멀티-드롭 버스(multi-drop bus)를 통해 프로세서들(610, 615)과 통신한다.
게다가, GMCH(620)는 디스플레이(645)(평판 디스플레이 등)에 결합될 수 있다. 일 실시예에서, GMCH(620)는 통합된 그래픽 가속기를 포함할 수 있다. GMCH(620)는 또한 다양한 주변 디바이스들을 시스템(600)에 결합시키는 데 사용될 수 있는 입출력(I/O) 제어기 허브(input/output (I/O) controller hub, ICH)(650)에 결합될 수 있다. 외부 그래픽 디바이스(660)는 다른 주변 디바이스(670)와 함께 ICH(650)에 결합되는 개별 그래픽 디바이스를 포함할 수 있다.
다른 실시예들에서, 부가의 또는 상이한 프로세서들이 또한 시스템(600)에 존재할 수 있다. 예를 들어, 부가의 프로세서들(610, 615)은 프로세서(610)와 동일할 수 있는 부가의 프로세서들, 프로세서(610)에 이질적이거나 비대칭일 수 있는 부가의 프로세서들, 가속기(예컨대, 그래픽 가속기 또는 DSP(digital signal processing) 유닛 등), FPGA(field programmable gate array), 또는 임의의 다른 프로세서를 포함할 수 있다. 아키텍처, 마이크로 아키텍처, 열, 전력 소모 특성 등을 비롯한 다양한 성능 척도(metric of merit)들의 면에서 물리적 자원들(610, 615) 간에 다양한 차이점들이 있을 수 있다. 이 차이점들은 실질적으로 프로세서들(610, 615) 간의 비대칭성 및 이질성으로서 나타날 수 있다. 적어도 하나의 실시예에서, 다양한 프로세서들(610, 615)이 동일한 다이 패키지에 존재할 수 있다.
도 7은 본 개시내용의 실시예들에 따른, 제2 시스템(700)의 블록도를 나타낸 것이다. 도 7에 도시된 바와 같이, 멀티프로세서 시스템(700)은 점대점 상호연결 시스템을 포함할 수 있고, 점대점 상호연결부(750)를 통해 결합된 제1 프로세서(770) 및 제2 프로세서(780)를 포함할 수 있다. 프로세서들(770 및 780) 각각은 프로세서들(610, 615) 중 하나 이상과 같은 어떤 버전의 프로세서(500)일 수 있다.
도 7이 2개의 프로세서들(770, 780)을 예시할 수 있지만, 본 개시내용의 범주가 그것으로 제한되지 않는다는 것을 잘 알 것이다. 다른 실시예들에서, 하나 이상의 부가 프로세서들이 주어진 프로세서에 존재할 수 있다.
프로세서들(770 및 780)은, 각각, 통합된 메모리 제어기 유닛들(772 및 782)을 포함하는 것으로 도시되어 있다. 프로세서(770)는 또한, 그의 버스 제어기 유닛들의 일부로서, 점대점(point-to-point, P-P) 인터페이스들(776 및 778)을 포함할 수 있고; 이와 유사하게, 제2 프로세서(780)는 P-P 인터페이스들(786 및 788)을 포함할 수 있다. 프로세서들(770, 780)은 점대점(point-to-point, P-P) 인터페이스 회로들(778, 788)을 사용하여 P-P 인터페이스(750)를 통해 정보를 교환할 수 있다. 도 7에 도시된 바와 같이, IMC들(772 및 782)은 프로세서들을 각자의 메모리들, 즉, 일 실시예에서, 각자의 프로세서들에 로컬적으로 접속되어 있는 메인 메모리의 일부분들일 수 있는 메모리(732) 및 메모리(734)에 결합시킬 수 있다.
프로세서들(770, 780) 각각은 점대점 인터페이스 회로들(776, 794, 786, 798)을 사용하여 개개의 P-P 인터페이스들(752, 754)을 통해 칩셋(790)과 정보를 교환할 수 있다. 일 실시예에서, 칩셋(790)은 또한 고성능 그래픽 인터페이스(739)를 통해 고성능 그래픽 회로(738)와 정보를 교환할 수 있다.
공유 캐시(도시 생략)가 어느 한 프로세서 내에 또는 양 프로세서의 외부에 포함될 수 있지만, P-P 상호연결부를 통해 프로세서들과 연결될 수 있으며, 따라서 프로세서가 저전력 모드에 놓이는 경우, 어느 한 프로세서 또는 양 프로세서의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(790)은 인터페이스(796)를 통해 제1 버스(716)에 결합될 수 있다. 일 실시예에서, 제1 버스(716)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI Express 버스 또는 다른 3세대 I/O 상호연결 버스와 같은 버스일 수 있지만, 본 개시내용의 범주가 그것으로 제한되지 않는다.
도 7에 도시된 바와 같이, 제1 버스(716)를 제2 버스(720)에 결합시키는 버스 브리지(718)와 함께, 다양한 I/O 디바이스들(714)이 제1 버스(716)에 결합될 수 있다. 일 실시예에서, 제2 버스(720)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(722), 통신 디바이스들(727), 그리고 명령어들/코드 및 데이터(730)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 디바이스와 같은 저장 유닛(728)을 비롯한 다양한 디바이스들이 제2 버스(720)에 결합될 수 있다. 게다가, 오디오 I/O(724)는 제2 버스(720)에 결합될 수 있다. 유의할 점은, 다른 아키텍처들이 가능할 수 있다는 것이다. 예를 들어, 도 7의 점대점 아키텍처 대신에, 시스템은 멀티-드롭 버스 또는 다른 이러한 아키텍처를 구현할 수 있다.
도 8은 본 개시내용의 실시예들에 따른, 제3 시스템(800)의 블록도를 나타낸 것이다. 도 7 및 도 8에서의 유사한 요소들은 유사한 참조 번호들을 지니고 있으며, 도 8의 다른 양태들을 불명료하게 하는 것을 피하기 위해 도 7의 특정 양태들이 도 8로부터 생략되어 있다.
도 8은 프로세서들(870, 880)이, 각각, 통합된 메모리 및 I/O 제어 로직("CL")(872 및 882)을 포함할 수 있다는 것을 나타내고 있다. 적어도 하나의 실시예에서, CL(872, 882)은 도 5 및 도 7과 관련하여 앞서 기술된 것과 같은 통합된 메모리 제어기 유닛들을 포함할 수 있다. 그에 부가하여, CL(872, 882)은 또한 I/O 제어 로직을 포함할 수 있다. 도 8은 메모리들(832, 834)이 CL(872, 882)에 결합될 수 있다는 것뿐만 아니라 I/O 디바이스들(814)이 또한 제어 로직(872, 882)에 결합될 수 있다는 것을 나타내고 있다. 레거시 I/O 디바이스들(815)이 칩셋(890)에 결합될 수 있다.
도 9는 본 개시내용의 실시예들에 따른, SoC(900)의 블록도를 나타낸 것이다. 도 5에서의 유사한 요소들은 유사한 참조 번호들을 지니고 있다. 또한, 파선 박스들은 보다 진보된 SoC들 상의 선택적인 특징들을 나타낼 수 있다. 상호연결 유닛들(902)은 하나 이상의 코어들(902A 내지 902N)의 집합 및 공유 캐시 유닛들(906)을 포함할 수 있는 애플리케이션 프로세서(910); 시스템 에이전트 유닛(910); 버스 제어기 유닛들(916); 통합된 메모리 제어기 유닛들(914); 통합된 그래픽 로직(908), 정지 및/또는 비디오 카메라 기능을 제공하는 이미지 프로세서(924), 하드웨어 오디오 가속을 제공하는 오디오 프로세서(926), 및 비디오 인코딩/디코딩 가속을 제공하는 비디오 프로세서(928)를 포함할 수 있는 하나 이상의 미디어 프로세서들(920)의 집합; SRAM(static random access memory) 유닛(930); DMA(direct memory access) 유닛(932); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(940)에 결합될 수 있다.
도 10은 본 개시내용의 실시예들에 따른, 적어도 하나의 명령어를 수행할 수 있는 중앙 처리 유닛(CPU) 및 그래픽 처리 유닛(GPU)을 포함하는 프로세서를 나타낸 것이다. 일 실시예에서, 적어도 하나의 실시예에 따른 동작들을 수행하는 명령어가 CPU에 의해 수행될 수 있을 것이다. 다른 실시예에서, 그 명령어가 GPU에 의해 수행될 수 있을 것이다. 또 다른 실시예에서, 그 명령어가 GPU와 CPU에 의해 수행되는 동작들의 조합을 통해 수행될 수 있다. 예를 들어, 일 실시예에서, 일 실시예에 따른 명령어가 수신되고 GPU 상에서의 실행을 위해 디코딩될 수 있다. 그렇지만, 디코딩된 명령어 내의 하나 이상의 동작들이 CPU에 의해 수행될 수 있고, 명령어의 최종적인 회수를 위해 결과가 GPU로 반환될 수 있다. 이와 반대로, 일부 실시예들에서, CPU가 주 프로세서로서 기능할 수 있고, GPU가 코프로세서로서 기능할 수 있다.
일부 실시예들에서, 고병렬성, 고처리율의 프로세서(highly parallel, throughput processor)들로부터 이득을 보는 명령어들이 GPU에 의해 수행될 수 있는 반면, 고도로 파이프라인화된(deeply pipelined) 아키텍처들로부터 이득을 보는 프로세서들의 성능으로부터 이득을 보는 명령어들은 CPU에 의해 수행될 수 있다. 예를 들어, 그래픽, 과학 애플리케이션, 금융 애플리케이션 및 다른 병렬 작업 부하들은 GPU의 성능으로부터 이득을 볼 수 있고, 그에 따라, 실행될 수 있는 반면, 운영 체제 커널 또는 애플리케이션 코드와 같은 보다 순차적인 애플리케이션들은 CPU에 더 적합할 수 있다.
도 10에서, 프로세서(1000)는 CPU(1005), GPU(1010), 이미지 프로세서(1015), 비디오 프로세서(1020), USB 제어기(1025), UART 제어기(1030), SPI/SDIO 제어기(1035), 디스플레이 디바이스(1040), 메모리 인터페이스 제어기(1045), MIPI 제어기(1050), 플래시 메모리 제어기(1055), DDR(dual data rate) 제어기(1060), 보안 엔진(1065), 및 I2S/I2C 제어기(1070)를 포함한다. 추가의 CPU들 또는 GPU들 및 다른 주변기기 인터페이스 제어기들을 비롯한, 다른 로직 및 회로들이 도 10의 프로세서에 포함될 수 있다.
적어도 하나의 실시예의 하나 이상의 양태들은, 머신에 의해 판독될 때, 머신으로 하여금 본원에 기술되는 기법들을 수행하는 로직을 제조하게 하는, 프로세서 내에서의 다양한 로직을 나타내는 머신 판독 가능 매체 상에 저장되어 있는 대표적인 데이터에 의해 구현될 수 있다. "IP 코어"라고 하는 이러한 표현들은 유형적(tangible) 머신 판독 가능 매체 상에 저장되고, 로직 또는 프로세서를 실제로 제조하는 제조 기계들에 로드하기 위해, 다양한 고객들 또는 제조 시설들에 공급될 수 있다. 예를 들어, ARM Holdings, Ltd.에 의해 개발된 Cortex™ 계열의 프로세서들과 같은 IP 코어들 및 중국 과학원의 ICT(Institute of Computing Technology)에 의해 개발된 Loongson IP 코어들은 Texas Instruments, Qualcomm, Apple, 또는 Samsung과 같은 다양한 고객들 또는 실시권자들에 의해 실시되거나 그들에 판매되고 이 고객들 또는 실시권자들에 의해 생산된 프로세서들에서 구현될 수 있다.
도 11은 본 개시내용의 실시예들에 따른, IP 코어들의 개발을 나타낸 블록도를 나타낸 것이다. 저장소(1130)는 시뮬레이션 소프트웨어(1120) 및/또는 하드웨어 또는 소프트웨어 모델(1110)을 포함할 수 있다. 일 실시예에서, IP 코어 설계를 나타내는 데이터가 메모리(1140)(예컨대, 하드 디스크), 유선 연결(예컨대, 인터넷)(1150) 또는 무선 연결(1160)을 통해 저장소(1130)에 제공될 수 있다. 시뮬레이션 도구 및 모델에 의해 발생된 IP 코어 정보는 이어서 제조 시설로 전송될 수 있고, 그곳에서 IP 코어가 적어도 하나의 실시예에 따른 적어도 하나의 명령어를 수행하도록 제3자에 의해 제조될 수 있다.
일부 실시예들에서, 하나 이상의 명령어들은 제1 유형의 아키텍처(예컨대, x86)에 대응할 수 있고, 상이한 유형 또는 아키텍처(예컨대, ARM)의 프로세서 상에서 변환(translate)되거나 에뮬레이트(emulate)될 수 있다. 일 실시예에 따른 명령어가, 따라서, ARM, x86, MIPS, GPU, 또는 다른 프로세서 유형 또는 아키텍처를 비롯한 임의의 프로세서 또는 프로세서 유형 상에서 수행될 수 있다.
도 12는 본 개시내용의 실시예들에 따른, 제1 유형의 명령어가 상이한 유형의 프로세서에 의해 어떻게 에뮬레이트될 수 있는지를 나타낸 것이다. 도 12에서, 프로그램(1205)은 일 실시예에 따른 명령어와 동일하거나 실질적으로 동일한 기능을 수행할 수 있는 어떤 명령어들을 포함한다. 그렇지만, 프로그램(1205)의 명령어들은 프로세서(1215)와 상이하거나 호환되지 않는 유형 및/또는 포맷일 수 있고, 이는 프로그램(1205)에서의 유형의 명령어들이 프로세서(1215)에 의해 기본적으로 실행될 수 없다는 것을 의미한다. 그렇지만, 에뮬레이션 로직(1210)의 도움으로, 프로그램(1205)의 명령어들이 프로세서(1215)에 의해 기본적으로 실행될 수 있는 명령어들로 변환될 수 있다. 일 실시예에서, 에뮬레이션 로직은 하드웨어로 구현될 수 있다. 다른 실시예에서, 에뮬레이션 로직은 프로그램(1205)에서의 유형의 명령어들을 프로세서(1215)에 의해 기본적으로 실행 가능한 유형으로 변환하는 소프트웨어를 포함하는 유형적 머신 판독 가능 매체로 구현될 수 있다. 다른 실시예들에서, 에뮬레이션 로직은 고정 기능 또는 프로그램 가능 하드웨어와 유형적 머신 판독 가능 매체 상에 저장된 프로그램의 조합일 수 있다. 일 실시예에서, 프로세서가 에뮬레이션 로직을 포함하는 반면, 다른 실시예들에서, 에뮬레이션 로직이 프로세서의 외부에 존재하고, 제3자에 의해 제공될 수 있다. 일 실시예에서, 프로세서는 프로세서에 포함되거나 프로세서와 연관된 마이크로코드 또는 펌웨어를 실행하는 것에 의해 소프트웨어를 포함하는 유형적 머신 판독 가능 매체로 구현된 에뮬레이션 로직을 로드할 수 있다.
도 13은 본 개시내용의 실시예들에 따른, 소스 명령어 집합에서의 이진 명령어들을 대상 명령어 집합에서의 이진 명령어들로 변환하기 위해 소프트웨어 명령어 변환기를 사용하는 것을 대비하는 블록도를 나타낸 것이다. 예시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기일 수 있지만, 명령어 변환기가 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합들로 구현될 수 있다. 도 13은 적어도 하나의 x86 명령어 집합 코어를 갖는 프로세서(1316)에 의해 기본적으로 실행될 수 있는 x86 이진 코드(1306)를 발생시키기 위해 고수준 언어(1302)로 된 프로그램이 x86 컴파일러(1304)를 사용하여 컴파일될 수 있다는 것을 나타낸 것이다. 적어도 하나의 x86 명령어 집합 코어를 갖는 프로세서(1316)는, 적어도 하나의 x86 명령어 집합 코어를 갖는 Intel 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 집합 코어의 명령어 집합의 상당 부분 또는 (2) 적어도 하나의 x86 명령어 집합 코어를 갖는 Intel 프로세서 상에서 실행되도록 되어 있는 애플리케이션들 또는 다른 소프트웨어의 오브젝트 코드 버전들을 호환가능하게 실행하거나 다른 방식으로 처리함으로써 적어도 하나의 x86 명령어 집합 코어를 갖는 Intel 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1304)는, 부가의 연결 처리(linkage processing)에 의해 또는 부가의 연결 처리 없이, 적어도 하나의 x86 명령어 집합 코어를 갖는 프로세서(1316) 상에서 실행될 수 있는 x86 이진 코드(1306)(예컨대, 오브젝트 코드)를 발생시키는 동작을 하는 컴파일러를 나타낸다. 이와 유사하게, 도 13은 적어도 하나의 x86 명령어 집합 코어를 갖지 않는 프로세서(1314)(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 집합을 실행하는 그리고/또는 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 집합을 실행하는 코어들을 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안의 명령어 집합 이진 코드(1310)를 발생시키기 위해 고수준 언어(1302)로 된 프로그램이 대안의 명령어 집합 컴파일러(1308)를 사용하여 컴파일될 수 있다는 것을 나타내고 있다. 명령어 변환기(1312)는 x86 이진 코드(1306)를 x86 명령어 집합 코어를 갖지 않는 프로세서(1314)에 의해 기본적으로 실행될 수 있는 코드로 변환하는 데 사용될 수 있다. 이 변환된 코드가 대안의 명령어 집합 이진 코드(1310)와 동일하지 않을 수 있지만; 변환된 코드는 일반적인 연산을 달성할 것이고 대안의 명령어 집합으로부터의 명령어들로 이루어져 있을 것이다. 이와 같이, 명령어 변환기(1312)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 집합 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스가 x86 이진 코드(1306)를 실행할 수 있게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
도 14는 본 개시내용의 실시예들에 따른, 프로세서의 명령어 집합 아키텍처(1400)의 블록도이다. 명령어 집합 아키텍처(1400)는 임의의 적당한 수 또는 종류의 구성요소들을 포함할 수 있다.
예를 들어, 명령어 집합 아키텍처(1400)는 하나 이상의 코어들(1406, 1407) 및 그래픽 처리 유닛(1415)과 같은 처리 엔티티들을 포함할 수 있다. 코어들(1406, 1407)은 임의의 적당한 메커니즘을 통해(예컨대, 버스 또는 캐시를 통해) 명령어 집합 아키텍처(1400)의 나머지에 통신 가능하게 결합될 수 있다. 일 실시예에서, 코어들(1406, 1407)은 버스 인터페이스 유닛(1409) 및 L2 캐시(1410)를 포함할 수 있는 L2 캐시 제어(1408)를 통해 통신 가능하게 결합될 수 있다. 코어들(1406, 1407)과 그래픽 처리 유닛(1415)은 상호연결부(1410)를 통해 서로 그리고 명령어 집합 아키텍처(1400)의 나머지에 통신 가능하게 결합될 수 있다. 일 실시예에서, 그래픽 처리 유닛(1415)은 특정의 비디오 신호들이 인코딩되고 출력을 위해 디코딩될 방식을 정의하는 비디오 코드(1420)를 사용할 수 있다.
명령어 집합 아키텍처(1400)는 또한 전자 디바이스 또는 시스템의 다른 부분들과 인터페이싱하거나 통신하기 위한 임의의 수 또는 종류의 인터페이스들, 제어기들, 또는 다른 메커니즘들을 포함할 수 있다. 이러한 메커니즘들은, 예를 들어, 주변기기들, 통신 디바이스들, 다른 프로세서들, 또는 메모리와의 상호작용을 용이하게 할 수 있다. 도 14의 예에서, 명령어 집합 아키텍처(1400)는 LCD(liquid crystal display) 비디오 인터페이스(1425), SIM(subscriber interface module) 인터페이스(1430), 부트 ROM 인터페이스(1435), SDRAM(synchronous dynamic random access memory) 제어기(1440), 플래시 제어기(1445), 및 SPI(serial peripheral interface) 마스터 유닛(1450)을 포함할 수 있다. LCD 비디오 인터페이스(1425)는, 예를 들어, GPU(1415)로부터의 비디오 신호들의 출력을, 예를 들어, MIPI(mobile industry processor interface)(1490) 또는 HDMI(high-definition multimedia interface)(1495)를 통해 디스플레이에 제공할 수 있다. 이러한 디스플레이는, 예를 들어, LCD를 포함할 수 있다. SIM 인터페이스(1430)는 SIM 카드 또는 디바이스에의 또는 그로부터의 액세스를 제공할 수 있다. SDRAM 제어기(1440)는 SDRAM 칩 또는 모듈과 같은 메모리에의 또는 그로부터의 액세스를 제공할 수 있다. 플래시 제어기(1445)는 플래시 메모리 또는 다른 RAM 인스턴스들과 같은 메모리에의 또는 그로부터의 액세스를 제공할 수 있다. SPI 마스터 유닛(1450)은 블루투스 모듈(1470), 고속 3G 모뎀(1475), GPS(global positioning system) 모듈(1480), 또는 802.11과 같은 통신 표준을 구현하는 무선 모듈(1485)과 같은 통신 모듈들에의 또는 그로부터의 액세스를 제공할 수 있다.
도 15는 본 개시내용의 실시예들에 따른, 명령어 집합 아키텍처를 구현하는 프로세서의 명령어 아키텍처(1500)의 더욱 상세한 블록도이다. 명령어 아키텍처(1500)는 마이크로 아키텍처일 수 있다. 명령어 아키텍처(1500)는 명령어 집합 아키텍처(1400)의 하나 이상의 양태들을 구현할 수 있다. 게다가, 명령어 아키텍처(1500)는 프로세서 내의 명령어들의 실행을 위한 모듈들 및 메커니즘들을 나타낼 수 있다.
명령어 아키텍처(1500)는 하나 이상의 실행 엔티티들(1565)에 통신 가능하게 결합된 메모리 시스템(1540)을 포함할 수 있다. 게다가, 명령어 아키텍처(1500)는 실행 엔티티들(1565) 및 메모리 시스템(1540)에 통신 가능하게 결합된 유닛(1510)과 같은 캐싱 및 버스 인터페이스 유닛을 포함할 수 있다. 일 실시예에서, 명령어들을 실행 엔티티들(1565)에 로드하는 것은 하나 이상의 실행 스테이지들에 의해 수행될 수 있다. 이러한 스테이지들은, 예를 들어, 명령어 프리페치 스테이지(1530), 듀얼 명령어 디코드 스테이지(1550), 레지스터 재명명 스테이지(1555), 발행 스테이지(1560), 및 라이트백 스테이지(1570)를 포함할 수 있다.
일 실시예에서, 메모리 시스템(1540)은 실행된 명령어 포인터(1580)를 포함할 수 있다. 실행된 명령어 포인터(1580)는 다수의 스트랜드들에 의해 표현되는 스레드 내에서 비순차 발생 스테이지(1560)에서의 명령어들의 배치(batch) 내의 가장 오래된 디스패치되지 않은 명령어를 식별해주는 값을 저장할 수 있다. 실행된 명령어 포인터(1580)는 발행 스테이지(1560)에서 계산되고 로드 유닛들로 전파될 수 있다. 명령어는 명령어들의 배치 내에 저장될 수 있다. 명령어들의 배치는 다수의 스트랜드들에 의해 표현되는 스레드 내에 있을 수 있다. 가장 오래된 명령어는 가장 낮은 PO(program order, 프로그램 순서) 값에 대응할 수 있다. PO는 명령어의 고유 번호를 포함할 수 있다. PO는 코드의 정확한 실행 의미(execution semantics)를 보장하기 위해 명령어들을 정렬하는 데 사용될 수 있다. PO는 절대값보다는 명령어에 인코딩된 PO에 대한 증분들을 평가하는 것과 같은 메커니즘들에 의해 재구성될 수 있다. 이러한 재구성된 PO는 RPO라고 알려져 있을 수 있다. PO가 본원에서 언급될 수 있지만, 이러한 PO는 RPO와 서로 바꾸어 사용될 수 있다. 스트랜드는 서로에 의존적인 데이터인 명령어들의 시퀀스를 포함할 수 있다. 스트랜드는 컴파일 시에 이진 변환기에 의해 배열될 수 있다. 스트랜드를 실행하는 하드웨어는 주어진 스트랜드의 명령어들을 다양한 명령어들의 PO에 따라 순차적으로 실행할 수 있다. 스레드는 상이한 스트랜드들의 명령어들이 서로 의존할 수 있도록 다수의 스트랜드들을 포함할 수 있다. 주어진 스트랜드의 PO는 발행 스테이지로부터 실행으로 아직 디스패치되지 않은, 스트랜드에서 가장 오래된 명령어의 PO일 수 있다. 그에 따라, 다수의 스트랜드들(각각의 스트랜드는 PO에 의해 정렬된 명령어들을 포함함)의 스레드가 주어진 경우, 실행된 명령어 포인터(1580)는 비순차 발행 스테이지(1560)에서 스레드의 스트랜드들 중에서 가장 오래된 - 가장 낮은 번호로 예시되어 있음 - PO를 저장할 수 있다.
다른 실시예에서, 메모리 시스템(1540)은 회수 포인터(1582)를 포함할 수 있다. 회수 포인터(1582)는 마지막 회수된 명령어의 PO를 식별해주는 값을 저장할 수 있다. 회수 포인터(1582)는, 예를 들어, 회수 유닛(454)에 의해 설정될 수 있다. 어떤 명령어들도 아직 회수되지 않은 경우, 회수 포인터(1582)는 널 값(null value)을 포함할 수 있다.
실행 엔티티들(1565)은 임의의 적당한 수 및 종류의 메커니즘들 - 이들에 의해 프로세서가 명령어들을 실행할 수 있음 - 을 포함할 수 있다. 도 15의 예에서, 실행 엔티티들(1565)은 ALU/곱셈 유닛들(MUL)(1566), ALU들(1567), 및 부동 소수점 유닛들(FPU)(1568)을 포함할 수 있다. 일 실시예에서, 이러한 엔티티들은 주어진 주소(1569) 내에 포함된 정보를 사용할 수 있다. 실행 엔티티들(1565)은 스테이지들(1530, 1550, 1555, 1560, 1570)과 결합하여 전체로서 실행 유닛을 형성할 수 있다.
유닛(1510)은 임의의 적당한 방식으로 구현될 수 있다. 일 실시예에서, 유닛(1510)은 캐시 제어를 수행할 수 있다. 이러한 실시예에서, 유닛(1510)은 이와 같이 캐시(1525)를 포함할 수 있다. 캐시(1525)는, 추가의 실시예에서, 0, 128k, 256k, 512k, 1M, 또는 2M 바이트의 메모리와 같은, 임의의 적당한 크기를 갖는 L2 통합 캐시로서 구현될 수 있다. 다른 추가의 실시예에서, 캐시(1525)는 오류 정정 코드 메모리에 구현될 수 있다. 다른 실시예에서, 유닛(1510)은 프로세서 또는 전자 디바이스의 다른 부분들에의 버스 인터페이싱을 수행할 수 있다. 이러한 실시예에서, 유닛(1510)은, 이와 같이, 상호연결부, 프로세서내 버스(intraprocessor bus), 프로세서간 버스(interprocessor bus), 또는 다른 통신 버스, 포트, 또는 라인을 통해 통신하기 위한 버스 인터페이스 유닛(1520)을 포함할 수 있다. 버스 인터페이스 유닛(1520)은, 예를 들어, 실행 엔티티들(1565)과 명령어 아키텍처(1500)의 외부에 있는 시스템의 부분들 사이의 데이터의 전송을 위한 메모리 및 입출력 주소들의 발생을 수행하기 위해 인터페이싱을 제공할 수 있다.
그의 기능들을 추가로 용이하게 하기 위해, 버스 인터페이스 유닛(1520)은 프로세서 또는 전자 디바이스의 다른 부분들에의 인터럽트들 및 다른 통신들을 발생시키는 인터럽트 제어 및 분배 유닛(1511)을 포함할 수 있다. 일 실시예에서, 버스 인터페이스 유닛(1520)은 다수의 처리 코어들에 대한 캐시 액세스 및 일관성을 처리하는 스누프 제어 유닛(snoop control unit)(1512)을 포함할 수 있다. 추가의 실시예에서, 이러한 기능을 제공하기 위해, 스누프 제어 유닛(1512)은 상이한 캐시들 간의 정보 교환을 처리하는 캐시간 전송 유닛(cache-to-cache transfer unit)을 포함할 수 있다. 다른 추가의 실시예에서, 스누프 제어 유닛(1512)은 다른 캐시들(도시 생략)의 일관성을 모니터링하는 하나 이상의 스누프 필터들(1514)을 포함할 수 있고, 따라서 유닛(1510)과 같은 캐시 제어기가 이러한 모니터링을 직접 수행할 필요가 없다. 유닛(1510)은 명령어 아키텍처(1500)의 동작들을 동기화시키기 위한 임의의 적당한 수의 타이머들(1515)을 포함할 수 있다. 또한, 유닛(1510)은 AC 포트(1516)를 포함할 수 있다.
메모리 시스템(1540)은 명령어 아키텍처(1500)의 처리 요구들에 대한 정보를 저장하기 위한 임의의 적당한 수 및 종류의 메커니즘들을 포함할 수 있다. 일 실시예에서, 메모리 시스템(1540)은 메모리 또는 레지스터들에 기입하거나 그로부터 다시 판독하는 명령어들에 관련된 정보를 저장하기 위한 로드 저장 유닛(load store unit)(1530)을 포함할 수 있다. 다른 실시예에서, 메모리 시스템(1540)은 물리 주소와 가상 주소 간의 주소 값들의 탐색(look-up)을 제공하는 TLB(translation lookaside buffer)(1545)를 포함할 수 있다. 또 다른 실시예에서, 버스 인터페이스 유닛(1520)은 가상 메모리에의 액세스를 용이하게 하기 위한 메모리 관리 유닛(memory management unit, MMU))(1544)을 포함할 수 있다. 또 다른 실시예에서, 메모리 시스템(1540)은, 대기시간을 감소시키기 위해, 명령어들이 실제로 실행될 필요가 있기 전에 메모리에 이러한 명령어들을 요청하기 위한 프리페처(1543)를 포함할 수 있다.
명령어를 실행하는 명령어 아키텍처(1500)의 동작이 상이한 스테이지들을 통해 수행될 수 있다. 예를 들어, 유닛(1510)을 사용하여, 명령어 프리페치 스테이지(1530)는 프리페처(1543)를 통해 명령어에 액세스할 수 있다. 검색된 명령어들이 명령어 캐시(1532)에 저장될 수 있다. 프리페치 스테이지(1530)는 주어진 캐시 내에 들어가도록 충분히 작은 루프를 형성하는 일련의 명령어들이 실행되는 고속 루프 모드를 위한 옵션(1531)을 가능하게 할 수 있다. 일 실시예에서, 예를 들어, 명령어 캐시(1532)로부터의 부가의 명령어들에 액세스할 필요 없이, 이러한 실행이 수행될 수 있다. 어떤 명령어들을 프리페치할지의 결정은, 예를 들어, 분기 예측 유닛(1535)에 의해 행해질 수 있고, 분기 예측 유닛(1535)은, 코드의 분기들(1557) 중 어느 것이 다음에 실행될 것인지를 결정하기 위해, 전체 기록(global history)(1536)에서의 실행의 표시들, 대상 주소들(1537)의 표시들, 복귀 스택(return stack)(1538)의 내용에 액세스할 수 있다. 그 결과, 이러한 분기들이 어쩌면 프리페치될 수 있다. 분기들(1557)은 이하에서 기술하는 바와 같이 다른 동작 스테이지들을 통해 생성될 수 있다. 명령어 프리페치 스테이지(1530)는 명령어들은 물론 장래의 명령어들에 관한 임의의 예측들을 듀얼 명령어 디코드 스테이지에 제공할 수 있다.
듀얼 명령어 디코드 스테이지(1550)는 수신된 명령어를 실행될 수 있는 마이크로코드 기반 명령어들로 변환할 수 있다. 듀얼 명령어 디코드 스테이지(1550)는 클록 사이클마다 2개의 명령어들을 동시에 디코딩할 수 있다. 게다가, 듀얼 명령어 디코드 스테이지(1550)는 그의 결과를 레지스터 재명명 스테이지(1555)에 전달할 수 있다. 그에 부가하여, 듀얼 명령어 디코드 스테이지(1550)는 마이크로코드의 디코딩 및 궁극적인 실행의 결과로부터 얻어진 임의의 분기들을 결정할 수 있다. 이러한 결과들이 분기들(1557)에 입력될 수 있다.
레지스터 재명명 스테이지(1555)는 가상 레지스터들 또는 다른 자원들에 대한 참조들을 물리 레지스터들 또는 자원들에 대한 참조들로 변환할 수 있다. 레지스터 재명명 스테이지(1555)는 이러한 매핑의 표시들을 레지스터 풀(1556)에 포함시킬 수 있다. 레지스터 재명명 스테이지(1555)는 수신된 명령어들을 변경하고 그 결과를 발행 스테이지(1560)로 송신할 수 있다.
발행 스테이지(1560)는 명령들을 실행 엔티티들(1565)에 발행하거나 디스패치할 수 있다. 이러한 발행은 비순차 방식으로 수행될 수 있다. 일 실시예에서, 다수의 명령어들이, 실행되기 전에, 발행 스테이지(1560)에 보유될 수 있다. 발행 스테이지(1560)는 이러한 다수의 명령들을 보유하기 위한 명령어 큐(1561)를 포함할 수 있다. 명령어들이, 임의의 타당한 기준들(주어진 명령어의 실행을 위한 자원들의 이용 가능성 또는 적합성 등)에 기초하여, 발행 스테이지(1560)에 의해 특정의 처리 엔티티(1565)에 발행될 수 있다. 일 실시예에서, 발행 스테이지(1560)는, 수신된 첫 번째 명령어들이 실행된 첫 번째 명령어들이 아닐 수 있도록, 명령어 큐(1561) 내의 명령어들을 재정렬할 수 있다. 명령어 큐(1561)의 정렬에 기초하여, 부가의 분기 정보가 분기들(1557)에 제공될 수 있다. 발행 스테이지(1560)는 명령어들을 실행을 위해 실행 엔티티들(1565)에 전달할 수 있다.
실행 시에, 라이트백 스테이지(1570)는, 주어진 명령의 완료를 전달하기 위해, 데이터를 레지스터, 큐, 또는 명령어 아키텍처(1500)의 다른 구조들에 기입할 수 있다. 발행 스테이지(1560)에서 배열된 명령어들의 순서에 따라, 라이트백 스테이지(1570)의 동작은 부가의 명령어들이 실행될 수 있게 할 수 있다. 명령어 아키텍처(1500)의 성능이 트레이스 유닛(1575)에 의해 모니터링 또는 디버깅될 수 있다.
도 16은 본 개시내용의 실시예들에 따른, 프로세서에 대한 실행 파이프라인(1600)의 블록도이다. 실행 파이프라인(1600)은, 예를 들어, 도 15의 명령어 아키텍처(1500)의 동작을 예시한 것일 수 있다.
실행 파이프라인(1600)은 단계들 또는 동작들의 임의의 적당한 조합을 포함할 수 있다. 1605에서, 다음에 실행될 분기의 예측이 행해질 수 있다. 일 실시예에서, 이러한 예측은 명령어들의 이전의 실행들 및 그의 결과들에 기초할 수 있다. 1610에서, 예측된 실행 분기에 대응하는 명령어들이 명령어 캐시에 로드될 수 있다. 1615에서, 명령어 캐시 내의 하나 이상의 이러한 명령어들이 실행을 위해 페치될 수 있다. 1620에서, 페치된 명령어들이 마이크로코드 또는 보다 구체적인 기계어로 디코딩될 수 있다. 일 실시예에서, 다수의 명령어들이 동시에 디코딩될 수 있다. 1625에서, 디코딩된 명령어들 내의 레지스터들 또는 다른 자원들에 대한 참조들이 재할당될 수 있다. 예를 들어, 가상 레지스터들에 대한 참조들이 대응하는 물리 레지스터들에 대한 참조들로 대체될 수 있다. 1630에서, 명령어들이 실행을 위해 큐들에 디스패치될 수 있다. 1640에서, 명령어들이 실행될 수 있다. 이러한 실행은 임의의 적당한 방식으로 수행될 수 있다. 1650에서, 명령어들이 적당한 실행 엔티티에 발행될 수 있다. 명령어들이 실행되는 방식은 명령어를 실행하는 특정의 엔티티에 의존할 수 있다. 예를 들어, 1655에서, ALU는 산술 함수들을 수행할 수 있다. ALU는 2개의 시프터들뿐만 아니라, 그의 동작을 위해 단일 클록 사이클을 이용할 수 있다. 일 실시예에서, 2개의 ALU들이 이용될 수 있고, 따라서 2개의 명령어들이 1655에서 실행될 수 있다. 1660에서, 그 결과의 분기의 결정이 행해질 수 있다. 분기가 행해질 목적지를 지정하기 위해 프로그램 카운터가 사용될 수 있다. 1660이 단일의 클록 사이클 내에 실행될 수 있다. 1665에서, 부동 소수점 산술이 하나 이상의 FPU들에 의해 수행될 수 있다. 부동 소수점 연산은 실행하는 데 다수의 클록 사이클(2 내지 10 사이클 등)을 필요로 할 수 있다. 1670에서, 곱셈 및 나눗셈 연산들이 수행될 수 있다. 이러한 연산들이 다수의 클록 사이클(4 클록 사이클 등) 내에 수행될 수 있다. 1675에서, 레지스터들 또는 파이프라인(1600)의 다른 부분들에의 로드 및 저장 동작들이 수행될 수 있다. 동작들은 주소들을 로드하고 저장하는 것을 포함할 수 있다. 이러한 연산 또는 동작들은 4 클록 사이클 내에 수행될 수 있다. 1680에서, 1655 내지 1675의 동작들의 결과에 의해 요구되는 바와 같이 라이트백 동작들이 수행될 수 있다.
도 17은 본 개시내용의 실시예들에 따른, 프로세서(1710)를 이용하는 전자 디바이스(1700)의 블록도이다. 전자 디바이스(1700)는, 예를 들어, 노트북, 울트라북, 컴퓨터, 타워 서버(tower server), 랙 서버(rack server), 블레이드 서버(blade server), 랩톱, 데스크톱, 태블릿, 모바일 디바이스, 전화기, 임베디드 컴퓨터, 또는 임의의 다른 적당한 전자 디바이스를 포함할 수 있다.
전자 디바이스(1700)는 임의의 적당한 수 또는 종류의 구성요소들, 주변기기들, 모듈들, 또는 디바이스들에 통신 가능하게 결합된 프로세서(1710)를 포함할 수 있다. 이러한 결합은, I2C 버스, SMBus(system management bus), LPC(low pin count) 버스, SPI, HDA(high definition audio) 버스, SATA(Serial Advance Technology Attachment) 버스, USB 버스(버전 1, 2, 3), 또는 UART(Universal Asynchronous Receiver/Transmitter) 버스와 같은, 임의의 적당한 종류의 버스 또는 인터페이스에 의해 달성될 수 있다.
이러한 구성요소들은, 예를 들어, 디스플레이(1724), 터치 스크린(1725), 터치 패드(1730), NFC(near field communications) 유닛(1745), 센서 허브(1740), 열 센서(1746), EC(express chipset)(1735), TPM(trusted platform module)(1738), BIOS/펌웨어/플래시 메모리(1722), 디지털 신호 프로세서(1760), SSD(solid state disk) 또는 HDD(hard disk drive)와 같은 드라이브(1720), WLAN(wireless local area network) 유닛(1750), 블루투스 유닛(1752), WWAN(wireless wide area network) 유닛(1756), GPS(global positioning system), USB 3.0 카메라와 같은 카메라(1754), 또는, 예를 들어, LPDDR3 표준으로 구현된 LPDDR(low power double data rate) 메모리 유닛(1715)을 포함할 수 있다. 이 구성요소들 각각은 임의의 적당한 방식으로 구현될 수 있다.
게다가, 다양한 실시예들에서, 다른 구성요소들이 앞서 논의된 구성요소들을 통해 프로세서(1710)에 통신 가능하게 결합될 수 있다. 예를 들어, 가속도계(1741), ALS(ambient light sensor)(1742), 나침반(1743), 및 자이로스코프(1744)가 센서 허브(1740)에 통신 가능하게 결합될 수 있다. 열 센서(1739), 팬(1737), 키보드(1746), 및 터치 패드(1730)는 EC(1735)에 통신 가능하게 결합될 수 있다. 스피커(1763), 헤드폰(1764), 및 마이크로폰(1765)은 오디오 유닛(1764)에 통신 가능하게 결합될 수 있고, 오디오 유닛(1764)은 차례로 DSP(1760)에 통신 가능하게 결합될 수 있다. 오디오 유닛(1764)은, 예를 들어, 오디오 코덱 및 클래스 D 증폭기를 포함할 수 있다. SIM 카드(1757)는 WWAN 유닛(1756)에 통신 가능하게 결합될 수 있다. WLAN 유닛(1750) 및 블루투스 유닛(1752)은 물론, WWAN 유닛(1756)과 같은 구성요소들은 NGFF(next generation form factor)로 구현될 수 있다.
본 개시내용의 실시예들은 회수 적격 대상 명령어들을 식별하는 명령어 및 로직을 포함한다. 도 18은 본 개시내용의 실시예들에 따른, 회수 적격 대상 명령어들을 식별하는 명령어 및 로직을 구현하는 예시적인 시스템(1800)을 나타낸 것이다. 일 실시예에서, 이러한 명령어들은 비순차 프로세서 또는 처리 엔티티 내에서 회수 적격 대상일 수 있다. 다른 실시예에서, 이러한 명령어들은 멀티 스트랜드 비순차 프로세서 또는 처리 엔티티 내에서 회수 적격 대상일 수 있다. 멀티 스트랜드 비순차 프로세서는 다수의 스트랜드들을 병렬로 실행하는 처리 엔티티를 포함할 수 있다. 게다가, 멀티 스트랜드 비순차 프로세서는 다수의 명령어 포인터들을 포함할 수 있다. 스레드의 명령어들이 스트랜드들에 그룹화되어 있을 수 있다. 일 실시예에서, 멀티 스트랜드 비순차 프로세서는, 명령어들이 프로그램 순서를 벗어나 페치, 발행 및 실행되도록, 각각의 스트랜드의 명령어들을 다른 스트랜드들의 명령어들과 관련하여 실행할 수 있다. 시스템(1800)은 임의의 프로세서 코어, 논리적 프로세서, 프로세서, 또는 다른 처리 엔티티(도 1 내지 도 17에 예시된 것들 등)를 포함할 수 있는, 이러한 프로세서의 요소들을 나타낼 수 있다.
시스템(1800)은 명령어 스트림(1802)을 처리하는 발행 스테이지(1560)를 포함할 수 있다. 명령어 스트림(1802)은 임의의 적당한 수 및 종류의 스트랜드들(1804)을 포함할 수 있다. 각각의 스트랜드(1804)는 서로에 의존적인 데이터인 PO에 의해 정렬된 일련의 명령어들을 포함할 수 있다. 게다가, 각각의 스트랜드(1804)는, 예를 들어, 포킹(forking) 또는 루핑(looping) 동작들을 통해 다른 스트랜드들에 관련되어 있을 수 있다. 앞서 기술된 바와 같이, PO는 코드의 정확한 실행 의미를 보장하도록 명령어들을 정렬하기 위해 명령어의 고유 번호를 포함할 수 있다. 게다가, 시스템(1800)은 라이트백 스테이지(1570)를 포함할 수 있다.
일 실시예에서, 시스템(1800)은 실행된 명령어 포인터(1580)를 포함할 수 있다. 앞서 기술된 바와 같이, 실행된 명령어 포인터(1580)는 명령어 스트림(1802)의 가장 오래된 프로그램 순서(PO)를 식별해주는 값을 저장할 수 있다. 추가의 실시예에서, 실행된 명령어 포인터(1580)는 스트랜드들(1804) 중에서 가장 오래된 PO를 가지는 개개의 스트랜드(1804)의 PO를 저장할 수 있다.
다른 실시예에서, 시스템(1800)은 회수 포인터(1582)를 포함할 수 있다. 앞서 기술된 바와 같이, 회수 포인터(1582)는 명령어 스트림(1802)의 마지막 회수된 명령어의 PO를 식별해주는 값을 저장할 수 있다. 처리 후에 주어진 명령어를 회수할 때 회수 포인터(1582)가 설정될 수 있다. 주어진 명령어에 관련된 모든 데이터 종속관계, 분기, 포크(fork) 또는 루프가 해결될 때까지 실행 후에도 주어진 명령어의 회수가 지연될 수 있다. 이러한 조건들은, 예를 들어, 명령어의 재실행을 필요로 할 수 있다.
시스템(1800)은 회수 적격 대상 명령어들을 임의의 적당한 방식으로 식별할 수 있다. 일 실시예에서, 시스템(1800)은 회수 적격 대상 명령어들을 식별하는 회수 윈도우(retirement window)(1808)를 발생시킬 수 있다. 회수 윈도우(1808)는 회수 적격 대상인 것으로 식별되는 명령어들의 목록을 포함할 수 있다. 회수 윈도우(1808)는 라이트백 스테이지(1570)와 같은 임의의 적당한 메커니즘에 의해 발생될 수 있다. 추가의 실시예에서, 회수 윈도우(1808)는 실행된 명령어 포인터(1580)를 참조하여 발생될 수 있다. 다른 추가의 실시예에서, 회수 윈도우(1808)는 회수 포인터(1582)를 참조하여 발생될 수 있다. 다양한 실시예들에서 회수 윈도우(1808)는 회수 포인터(1582)에 의해 식별된 명령어의 PO와 실행된 명령어 포인터(1580)에 의해 식별된 명령어의 PO 사이에 있는 PO를 갖는 명령어들을 포함할 수 있다. 어떤 명령어들도 아직 회수되지 않은 경우에, 회수 포인터(1582)는 널 값을 포함할 수 있다. 이러한 경우에, 회수 윈도우(1808)는 처음 N 개의 명령어들을 포함할 수 있고, 여기서 실행된 명령어 포인터(1580)는 명령어 스트림(1802)에서의 N 번째 명령어(꼭 PO #N일 필요는 없음)를 나타낸다.
도 19a 내지 도 19e와 관련하여 보다 상세히 논의되는 바와 같이, 명령어 스트림(1802)의 PO 정렬에 간극이 존재할 수 있다. 일 실시예에서, 회수 윈도우(1808)는 연속적이지 않은 PO 값들의 범위를 포함할 수 있다. 다른 실시예에서, 회수 윈도우는 할당, 재실행, 비순차 페치, 또는 다른 사용을 나중에 필요로 할 수 있는 임의의 명령어들을 생략할 수 있다. 그에 따라, 회수 윈도우(1808)는 안전하게 회수될 수 있는 정렬된 비연속적인 번호를 갖는 명령어들을 포함할 수 있다.
실행된 명령어 포인터(1580)는 임의의 적당한 방식으로 발생될 수 있다. 일 실시예에서, 시스템(1800)은 실행된 명령어 포인터(1580)를 발생시키는 실행된 명령어 포인터 발생 모듈(1806)을 포함할 수 있다. 실행된 명령어 포인터 발생 모듈(1806)은 명령어 스트림(1802) 내의 어느 명령어가 가장 오래된 디스패치되지 않은 명령어인지를 결정하도록 임의의 적당한 방식으로 구현될 수 있다. 예를 들어, 실행된 명령어 포인터 발생 모듈(1806)은 로직, 하드웨어, 코드, 또는 명령어들에 의해 구현될 수 있다. 일 실시예에서, 실행된 명령어 포인터 발생 모듈(1806)은 실행된 명령어 포인터(1580)를 결정하기 위해 주어진 스트랜드들(1804)의 PO를 평가할 수 있다. 주어진 스트랜드(1804)의 PO는 가장 오래된 디스패치되지 않은 명령어의 PO를 포함할 수 있다. 이와 같이, 스트랜드들(1804) 각각은 그의 PO 값을 저장하거나 식별해줄 수 있다.
실행된 명령어 포인터(1580)는 임의의 적당한 때에 발생될 수 있다. 일 실시예에서, 실행된 명령어 포인터(1580)는 시스템(1800)의 매 실행 사이클마다 발생될 수 있다. 실행 사이클에 의해 부가의 명령어들이 디스패치될 수 있는 경우, 실행된 명령어 포인터 발생 모듈(1806)은 실행된 명령어 포인터(1580)를 매 실행 사이클마다 발생시킬 수 있다. 발생된 실행된 명령어 포인터(1580)의 리프레시된 값들이 매 실행 사이클마다 필요하게 되는 것은, 도 20에 예시된 것과 같은, 실행된 명령어 포인터 발생 모듈(1806)의 하드웨어 구현에 의해 실현될 수 있다.
동작 중에, 시스템(1800)은 실행된 명령어 포인터(1580)를 매 실행 사이클마다 발생시킬 수 있다. 이와 같이, 실행된 명령어 포인터(1580)는 스트랜드들(1804)에서의 코드 중 가장 오래된 PO를 이용 가능하게 만들 수 있다. 게다가, 명령어들이 회수될 때, 가장 최근에 회수된 명령어의 PO가 회수 포인터(1582)에 저장될 수 있다. 시스템(1800)은, 예를 들어, 실행된 명령어 포인터(1580)의 PO와 회수 포인터(1582)의 PO 사이의 PO를 갖는 명령어들을 식별하기 위해 라이트백 스테이지(1570)를 이용할 수 있다. 식별된 명령어들이 회수 윈도우(1808)에 포함될 수 있다. 회수 윈도우(1808) 내의 이러한 명령어들은 이어서, 예를 들어, 라이트백 스테이지(1570)의 동작에 의해 시스템(1800)에 의해 회수될 수 있다.
도 19a 내지 도 19e는 본 개시내용의 실시예들에 따른, 회수 적격 대상 명령어들을 식별하는 명령어 및 로직을 구현하는 시스템(1800)을 보다 상세한 도면을 나타낸 것이다.
도 19a에, PO에 의해 정렬된 일련의 명령어들이 나타내어져 있다. 각각의 명령어는 그 각자의 PO로 표시되어 있다. 이러한 일련의 명령어들은 명령어 스트림(1802)의 명령어들을 포함할 수 있다. 도 19a에 도시된 바와 같이, 명령어 스트림(1802)의 명령어들은 PO의 면에서 연속적이지 않을 수 있다. 다양한 번호들이 컴파일러에 의해 정적으로 할당될 수 있기 때문에, PO의 번호 부여에서 간극이 존재할 수 있다. 명령어들이, 조건 루프(conditional loop)와 같은, 임의의 수 또는 종류의 동적 분기들을 지정할 수 있는 경우, 컴파일러는 명령어들이 실행될 때 어떤 제어 경로가 명확하게 취해질 것인지를 알지 못할 것이다. 코드에서 취해지지 않는 분기는 실행되지 않을 수 있다. 이와 유사하게, 명령어들이 정적으로는 알지 못하는 반복 횟수를 갖는 루프들을 지정할 수 있다. 루프가 언제 종료할지를 컴파일러가 미리 알지 못하기 때문에, 컴파일러는 그 루프에 대해 특정 PO 윈도우를 할당할 수 있다. 루프가 조기에 끝나는 경우, 일부 명령어들이 실행되지 않을 수 있고, 간극이 나타날 수 있다.
순차 처리와 관련하여, 명령어 스트림(1802)이 최저 PO로부터 최고 PO까지 순서대로 선형적으로 실행될 수 있다. 그렇지만, 시스템(1800)과 관련하여, 명령어 스트림(1802)이 비순차적으로 페치, 발행 및 실행될 수 있다.
도 19b에서, 명령어 스트림(1802)은 적당한 수의 스트랜드들(1804A, 1804B, 1804C) 간에 분할되어 있는 것으로 예시되어 있을 수 있다. 주어진 스트랜드(1804) 내에서, 명령어들이 PO에 따라 선형적으로 실행될 수 있다.
스트랜드들(1804A, 1804B, 1804C)은 서로에 대해 데이터 종속관계를 포함할 수 있다. 주어진 스트랜드(1804)에 대한 데이터 종속관계가 충족되면 주어진 스트랜드(1804)의 실행이 시작될 수 있다. 예를 들어, 스트랜드(1804A) 내의 명령어 #0이 실행된 후에, 스트랜드(1804B)가 스트랜드(1804A)로부터의 포크로서 실행을 시작할 수 있다. 스트랜드(1804A) 내의 명령어 #0의 실행은 스트랜드(1804B)의 데이터 요구사항을 충족시킬 수 있다. 다른 예에서, 스트랜드(1804B) 내의 명령어 #2가 실행된 후에, 스트랜드(1804C)가 스트랜드(1804B)로부터의 포크로서 실행을 시작할 수 있다. 스트랜드(1804B) 내의 명령어 #0의 실행은 스트랜드(1804C)의 데이터 요구사항을 충족시킬 수 있다.
데이터 요구사항들은, 예를 들어, 레지스터들에서의 이름 종속관계들을 포함할 수 있다. 이름 종속관계들은, 예를 들어, 레지스터의 이전의(하위 PO) 판독들 모두가 수행될 때까지 레지스터에의 기입을 방지하는 것을 포함할 수 있다. 게다가, 데이터 요구사항들은 메모리에서의 데이터 및 이름 종속관계들을 포함할 수 있다. 이 종속관계들은, 예를 들어, 예측된 판독 및 기입이 메모리 장소들에 대해 수행될 때까지 메모리 장소들의 로드 및 저장을 방지하는 것을 포함할 수 있다. 그에 부가하여, 데이터 요구사항들은 부정확한 예외들 또는 인터럽트들에 대한 처리를 포함할 수 있다. 이러한 처리는, 예를 들어, 이전의 명령어들이 레지스터 또는 메모리 상태들을 아직 갱신하지 않았을 때 또는 예외 발생 명령어에 후속하는 명령어가 레지스터 또는 메모리 상태를 이미 갱신했을 때 예외를 야기하는 명령어들을 기다리는 것을 포함할 수 있다. 게다가, 데이터 요구사항들은 제어 종속관계들을 포함할 수 있다. 이 종속관계들은, 예를 들어, 명령어의 이전의 분기 조건이 아직 해결되지 않았을 때 레지스터들 또는 메모리를 갱신하는 명령어의 실행을 보류하는 것을 포함할 수 있다. 그에 부가하여, 데이터 요구사항들은 메모리 일관성 모델 요구사항들을 포함할 수 있다. 이 요구사항들은, 예를 들어, 다른 처리 엔티티들에 노출되는 메모리 동작들을 포함할 수 있다.
도 19c에는, 실행의 스냅샷 동안의 스트랜드들(1804A, 1804B, 1804C)이 예시되어 있다. 3 개의 스트랜드들(1804A, 1804B, 1804C)이 병렬로 실행되고 있을 수 있다. 도 19c에 예시된 특정의 순간에, 시스템(1800)은 실행을 위해 디스패치할지 1804A, 1804B, 1804C 각각으로부터의 명령어를 현재 평가하고 있을 수 있다. 이들은 스트랜드(1804A)로부터의 명령어 #10, 스트랜드(1804B)로부터의 명령어 #9, 및 스트랜드(1804C)로부터의 명령어 #6을 포함할 수 있다. 명령어들 #10, #9, 및 #6은 아직 디스패치되지 않을 수 있다. 게다가, 이들보다 더 새로운 각각의 스트랜드(1804)에서의 명령어들도 아직 디스패치되지 않았을 수 있다. 이 디스패치되지 않은 명령어들은 스트랜드(1804A)로부터의 명령어 #13, 스트랜드(1804B)로부터의 명령어 #14, 및 스트랜드(1804C)로부터의 명령어 #12를 포함할 수 있다. 다른 명령어들은 이미 디스패치되었을 수 있다. 스트랜드(1804A)의 명령어 #0은 이미 디스패치, 실행 및 회수되었을 수 있다. 이것이 본 예에서 유일한 회수된 명령어이기 때문에, 명령어 #0은 회수 포인터(1582)에 의해 식별될 수 있다. 스트랜드(1804A)의 명령어 #5, 스트랜드(1804B)의 명령어 #2, 스트랜드(1804B)의 명령어 #8, 및 스트랜드(1804C)의 명령어 #3은 디스패치되었지만 아직 회수되지 않았을 수 있다.
일 실시예에서, 시스템(1800)은 디스패치되었지만 회수되지 않은 명령어들 중 어느 것(있는 경우)이 회수되어야 하는지를 결정할 수 있다. 회수될 이러한 명령어들은 회수 후보라고 지칭될 수 있다. 추가의 실시예에서, 디스패치되었지만 회수되지 않은 명령어들 중 어느 것이 회수되어야 하는지를 결정하는 것은 발생된 회수 윈도우(1808)에 의해 수행될 수 있다. 본 예에서, 회수 윈도우(1808)의 발생의 결과, 회수되어야 하는 스트랜드(1804A)의 명령어 #5, 스트랜드(1804B)의 명령어 #2, 및 스트랜드(1804C)의 명령어 #3을 식별할 수 있다. 도 19에 예시된 스냅샷에서, 회수 윈도우(1808)는 스트랜드(1804B)의 명령어 #8을 포함하지 않을 수 있고, 따라서 이 명령어는 회수하기 위한 것으로 아직 식별되지 않을 수 있다. 앞서 논의된 바와 같이, 회수 윈도우(1808)는 실행된 명령어 포인터(1580)와 회수 포인터(1582) 사이의 명령어 스트림(1802)의 PO들을 포함할 수 있다.
도 19d에, 실행된 명령어 포인터(1580) 및 회수 포인터(1582)의 발생이 예시되어 있을 수 있다. 발생된 값들이 앞서 나타낸 결과를 결정하는 데 사용될 수 있다.
실행된 명령어 포인터 발생 모듈(1806)은 실행된 명령어 포인터(1580)의 값을 설정할 수 있다. 일 실시예에서, 실행된 명령어 포인터 발생 모듈(1806)은 가장 낮은 PO를 결정하기 위해 각각의 스트랜드(1804A, 1804B, 1804C)의 PO를 평가할 수 있다. 가장 낮은 이러한 PO는 명령어 스트림(1802)의 디스패치되지 않은 명령어들 모두 중에서 가장 낮은 PO일 수 있다. 각각의 이러한 스트랜드의 PO는 스트랜드 내의 디스패치되지 않은 명령어들 중 가장 낮은 PO를 포함할 수 있다. 각각의 스트랜드(1804A, 1804B, 1804C)는 그의 PO를, 예를 들어, 레지스터 또는 플립플롭에 저장할 수 있다. 실행된 명령어 포인터 발생 모듈(1806)은 스트랜드(1804A)의 명령어 #10, 스트랜드(1804B)의 명령어 #9, 및 스트랜드(1804C)의 명령어 #6 중 어느 것이 가장 낮은지를 결정할 수 있다. 가장 낮은 이러한 PO가 스트랜드(1804C)의 명령어 #6일 수 있기 때문에, 실행된 명령어 포인터 발생 모듈(1806)은 값 "6"을 실행된 명령어 포인터(1580)에 저장할 수 있다. 실행된 명령어 포인터 발생 모듈(1806)은 이 저장을 도 19c에 도시된 스냅샷의 직전에 선행하는 실행 사이클 동안 수행했을 수 있다.
시스템(1800)의 임의의 적당한 부분은 회수 포인터(1580)의 값을 설정할 수 있다. 일 실시예에서, 라이트백 스테이지(1570)가 회수 포인터(1580)를 설정했을 수 있다. 명령어의 가장 최근의 회수 시에 회수 포인터(1580)가 설정되었을 수 있다. 이와 같이, 스트랜드(1804A)의 명령어 #0의 이전의 회수 시에, 라이트백 스테이지(1570)는 "0"을 회수 포인터(1580)에 발행했을 수 있다.
도 19e에서, 라이트백 스테이지(1570)는, 실행된 명령어 포인터(1580) 및 회수 포인터(1582)의 값들이 주어지면, 회수 윈도우(1808)를 발생시킬 수 있다. 회수 윈도우(1808)를 발생시키기 위해, 명령어 스트림(1802)이 평가될 수 있다. 회수 포인터(1582)는 명령어 #0을 가장 최근에 회수된 명령어로서 식별해줄 수 있다. 게다가, 실행된 명령어 포인터(1580)는 명령어 #6을 아직 디스패치되지 않은 가장 오래된 명령어로서 식별해줄 수 있다. 일 실시예에서, 명령어 #0과 명령어 #6 사이의 범위의 명령어들이 따라서 회수 적격 대상인 것으로서 식별될 수 있다. 이들은 명령어 #2, 명령어 #3, 및 명령어 #5를 포함할 수 있다. 도 19c를 다시 참조하면, 이 3 개의 명령어들이 회수 적격 대상인 것으로 예시되어 있다.
게다가, 스트랜드(1804B)의 명령어 #8이 디스패치되었지만, 도 19e에서 회수 윈도우(1808)의 범위 밖에 있다. 이와 같이, 도 19c에서, 명령어 #8이 회수 적격 대상으로서 예시되어 있지 않다.
도 20은 본 개시내용의 실시예들에 따른, 복수의 스트랜드들 중 최소 PO 값을 결정하는 하드웨어 로직(2000)의 일 예를 나타낸 것이다. 일 실시예에서, 하드웨어 로직(2000)은, 전체적으로 또는 부분적으로, 실행된 명령어 포인터 발생 모듈(1806)을 구현할 수 있다. 하드웨어 로직(2000)은 임의의 적당한 수, 종류, 또는 유형의 구성요소들에 의해 구현될 수 있다.
일 실시예에서, 하드웨어 로직(2000)은 노드들(2004)의 캐스케이드 배열(cascaded arrangement)에 의해 구현될 수 있다. 각각의 노드(2004)는 2개의 입력들 중 작은 쪽을 출력할 수 있다. 노드들(2004)의 캐스케이드 배열은 임의의 적당한 메커니즘으로부터 입력을 받을 수 있다. 다른 실시예에서, 노드들(2004)의 캐스케이드 배열은 평가되어야 하는 각각의 스트랜드에 대응하는 저장 메커니즘으로부터 입력들을 받을 수 있다. 이러한 스트랜드들은, 예를 들어, 도 18의 스트랜드들(1804)을 포함할 수 있다. 임의의 적당한 수의 스트랜드들, 따라서, 입력들이 수신될 수 있다. 또 다른 실시예에서, 각각의 스트랜드에 대한 저장 메커니즘들은 플립플롭(2002)을 포함할 수 있다. 각각의 스트랜드는 그의 PO를 그의 플립플롭(2002)에 저장할 수 있다.
각각의 노드(2004)는 2개의 입력들 중 작은 쪽을 출력하도록 임의의 적당한 방식으로 구현될 수 있다. 일 실시예에서, 노드(2004)는 2개의 입력 라인들(i 및 j)을 받을 수 있다. 추가의 실시예에서, 노드(2004)는 i가 더 작은지 j가 더 작은지를 결정하기 위해 뺄셈기(2006)를 포함할 수 있다. 또 다른 추가의 실시예에서, 노드(2004)는 i 및 j 중 작은 쪽을 선택하기 위해 멀티플렉서(2008)를 포함할 수 있다. 노드(2004)는 i 및 j를 뺄셈기(2006)로 그리고 멀티플렉서(2008)로 보낼 수 있다. 뺄셈기(2006)는 하드웨어로 구현될 수 있고, j에서 i를 뺄 수 있다. 게다가, 뺄셈기(2006)는 j에서 i를 뺀 결과가 플러스인지 마이너스인지를 나타내는, 따라서 i가 j보다 작은지 큰지를 나타내는 부호 비트(2010)를 출력할 수 있다. 노드(2004)는 부호 비트(2010)를 멀티플렉서(2008)의 선택기로 보낼 수 있다. 멀티플렉서(2008)는 하드웨어로 구현되고, i와 j 중 작은 쪽을 출력(2012)으로 선택적으로 보내기 위해 부호 비트(2010)를 사용할 수 있다. 출력(2012)은 따라서 i와 j 중 작은 쪽의 값일 수 있다.
입력들(2002) 중 가장 낮은 것이 결정되도록 모든 입력들(2002)이 비교될 때까지 출력(2012)이 추가의 노드(2004) 인스턴스로 전파될 수 있다. 입력들(2002) 중 가장 낮은 것이 이어서 실행된 명령어 포인터(1580)에 저장될 수 있다.
예를 들어, 입력들(2002)은 [2, 5, 6, 10, 25, 47, 12, 90 ... 9]의 PO 값들을 포함할 수 있다. 다른 값들이 포함될 수 있지만, 예시되어 있지 않다. 임의의 적당한 수의 입력들(2002)이 포함될 수 있다. 부가의 입력들(2002)은 모든 입력들(2002)을 비교하는 데 충분한 부가의 레벨의 노드들(2004)을 필요로 할 수 있다.
제1 레벨의 캐스케이드 노드들에서, 노드(2004A)는 입력(2002A)(#2의 PO를 가짐)이 입력(2002B)(#5의 PO를 가짐)보다 더 작은 것으로 결정하고 그 결과의 #2를 노드(2004F)로 보낼 수 있다. 노드(2004B)는 입력(2002C)(#6의 PO를 가짐)이 입력(2002D)(#10의 PO를 가짐)보다 더 작은 것으로 결정하고 그 결과의 #6을 노드(2004F)로 보낼 수 있다. 노드(2004C)는 입력(2002E)(#25의 PO를 가짐)이 입력(2002F)(#26의 PO를 가짐)보다 더 작은 것으로 결정하고 그 결과의 #25를 노드(2004G)로 보낼 수 있다. 노드(2004D)는 입력(2002G)(#47의 PO를 가짐)이 입력(2002H)(#12의 PO를 가짐)보다 더 큰 것으로 결정하고 그 결과의 #12를 노드(2004G)로 보낼 수 있다. 노드(2004E)는 입력(2002I)(#90의 PO를 가짐)이 입력(2002J)(#9의 PO를 가짐)보다 더 큰 것으로 결정하고 그 결과의 #9를 노드(2004H)로 보낼 수 있다.
제2 레벨의 캐스케이드 노드들에서, 노드(2004F)는 노드(2004A)로부터의 입력(#2의 PO를 가짐)이 노드(2004B)로부터의 입력(#6의 PO를 가짐)보다 더 작은 것으로 결정하고 그 결과의 #2를 노드(2004I)로 보낼 수 있다. 노드(2004G)는 노드(2004C)로부터의 입력(#25의 PO를 가짐)이 노드(2004D)로부터의 입력(#12의 PO를 가짐)보다 더 큰 것으로 결정하고 그 결과의 #12를 노드(2004I)로 보낼 수 있다. 노드(2004H)는 보이지 않는 노드로부터의 입력(#7의 PO를 가짐)이 노드(2004E)로부터의 입력(#9의 PO를 가짐)보다 더 작은 것으로 결정하고 그 결과의 #7를 노드(2004J)로 보낼 수 있다.
제3 레벨의 캐스케이드 노드들에서, 노드(2004I)는 노드(2004F)로부터의 입력(#2의 PO를 가짐)이 노드(2004G)로부터의 입력(#12의 PO를 가짐)보다 더 작은 것으로 결정하고 그 결과의 #2를 노드(2004K)로 보낼 수 있다. 노드(2004J)는 보이지 않는 노드로부터의 입력(#11의 PO를 가짐)이 노드(2004H)로부터의 입력(#7의 PO를 가짐)보다 더 큰 것으로 결정하고 그 결과의 #7를 노드(2004K)로 보낼 수 있다.
제4 레벨의 캐스케이드 노드들에서, 노드(2004K)는 노드(2004I)로부터의 입력(#2의 PO를 가짐)이 노드(2004J)로부터의 입력(#7의 PO를 가짐)보다 더 작은 것으로 결정할 수 있다. 그 결과는 입력들(2002) 중 가장 낮은 PO일 수 있고 실행된 명령어 포인터(1580)에 저장될 수 있다.
도 21은 본 개시내용의 실시예들에 따른, 회수 적격 대상 명령어들을 식별하는 예시적인 방법(2100)을 나타낸 것이다. 일 실시예에서, 이러한 명령어들은 멀티 스트랜드 비순차 프로세서 상에서 회수할 것으로 식별될 수 있다.
방법(2100)은 임의의 적당한 지점에서 시작될 수 있고, 임의의 적당한 순서로 실행될 수 있다. 일 실시예에서, 방법(2100)은 2105에서 시작될 수 있다. 다양한 실시예들에서, 방법(2100)은 멀티 스트랜드 비순차 프로세서의 실행 동안 수행될 수 있다.
2105에서, 실행될 정렬된 명령어 스트림이 복수의 스트랜드들로 분할될 수 있다. 스트랜드들이 서로 병렬로 실행될 수 있다. 스트랜드들은 서로 데이터 종속관계를 가질 수 있지만, 서로에 대해 비순차적으로 실행될 수 있다. 게다가, 각각의 스트랜드 내에서, 명령어들이 순차적으로 실행될 수 있다. 명령어들은 정렬을 위해 PO 표시를 포함할 수 있다.
2107에서, 처리 단계들이 수행될 수 있다. 이러한 단계들은, 예를 들어, 명령어들을 페치하는 것, 발행하는 것, 디스패치하는 것, 또는 프로세서에서 실행하는 것을 포함할 수 있다. 실행 사이클이 수행될 수 있다. 실행된 명령어 포인터가 전진될 수 있다.
2110에서, 각각의 스트랜드로부터의 디스패치되지 않은 명령어들의 PO가 저장될 수 있다. 2115에서, 모든 스트랜드들로부터의 디스패치되지 않은 명령어들의 가장 낮은 PO가 결정될 수 있다. 디스패치되지 않은 명령어들의 가장 낮은 PO는 스트랜드에서의 가장 오래된 디스패치되지 않은 명령어에 대응할 수 있다. 각각의 이러한 스트랜드는 디스패치되지 않은 명령어들의 대응하는 가장 낮은 PO를, 예를 들어, 플립플롭에 저장할 수 있다. 일 실시예에서, 가장 낮은 PO는, 예를 들어, 하드웨어 로직에의 입력으로서 스트랜드들의 각각의 플립플롭을 판독하는 것에 의해 결정될 수 있다. 하드웨어 로직은, 디스패치되지 않은 명령어들의 가장 낮은 PO에 대응하는 가장 작은 입력이 결정될 때까지, 각각의 입력을 다른 입력들과 비교할 수 있다.
2120에서, 디스패치되지 않은 명령어들의 가장 낮은 PO가 액세스 가능한 설비 또는 장소에 저장될 수 있다. 일 실시예에서, 이 값이 실행된 명령어 포인터에 저장될 수 있다.
2125에서, 가장 최근에 회수된 명령어의 ID(identification)가 저장될 수 있다. 이러한 ID는 PO를 포함할 수 있다. 가장 최근에 회수된 명령어는 그의 회수 시에 식별될 수 있다. 일 실시예에서, PO가 회수 포인터에 저장될 수 있다. 어떤 명령어들도 아직 회수되지 않은 경우, 회수 포인터는 널로 설정될 수 있다.
2130에서, 회수 윈도우가 결정될 수 있다. 일 실시예에서, 회수 윈도우는, 정렬된 명령어 스트림 내에서, 회수 포인터에 저장된 PO에 의해 식별된 명령어와 실행된 명령어 포인터에 저장된 PO에 의해 식별된 명령어 사이의 명령어들의 범위로서 정의될 수 있다. 회수 포인터가 널(어떤 명령어들도 회수되지 않았다는 것을 나타냄)인 경우, 회수 윈도우는 명령어 스트림(있는 경우)의 첫 번째 요소 또는 실행된 명령어 포인터에 저장된 PO에 의해 식별되는 명령어까지의 요소들을 포함할 수 있다. 2135에서, 정렬된 명령어 스트림에 적용되는 회수 윈도우 내의 명령어들이 식별될 수 있다. 2140에서, 회수하기 위한 식별된 명령어들이 선택될 수 있고, 일 실시예에서, 2415에서, 이 식별된 명령어들에 대한 회수가 수행될 수 있다.
2150에서, 회수 포인터가 갱신될 수 있다. 가장 최근에 회수된 명령어의 PO가 회수 포인터에 저장될 수 있다.
2165에서, 프로그램이 동작을 완료했는지가 결정될 수 있다. 그러한 경우, 2170에서, 방법(2100)이 종료될 수 있다. 그렇지 않은 경우, 방법(2100)은, 예컨대, 2107로 되돌아가는 것에 의해, 방법(2100)의 하나 이상의 요소들을 반복할 수 있다.
방법(2100)은 임의의 적당한 기준들에 의해 개시될 수 있다. 게다가, 방법(2100)이 특정의 요소들의 동작을 기술하고 있지만, 방법(2100)이 임의의 적당한 조합 또는 유형의 요소들에 의해 수행될 수 있다. 예를 들어, 방법(2100)이 도 1 내지 도 20에 예시된 요소들 또는 방법(2100)을 구현하기 위해 동작 가능한 임의의 다른 시스템에 의해 구현될 수 있다. 그에 따라, 방법(2100)에 대한 바람직한 초기화 지점 및 방법(2100)을 구성하는 요소들의 순서가 선택된 구현에 의존할 수 있다. 일부 실시예들에서, 일부 요소들이, 선택적으로, 생략, 재구성, 반복, 또는 결합될 수 있다.
본원에 개시되는 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 방식들의 조합으로 구현될 수 있다. 본 개시내용의 실시예들은 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 요소들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램 가능 시스템들 상에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
프로그램 코드는 본원에 기술되는 기능들을 수행하여 출력 정보를 발생시키기 위해 입력 명령어들에 적용될 수 있다. 출력 정보가 공지된 방식으로 하나 이상의 출력 디바이스들에 적용될 수 있다. 본 출원의 목적상, 처리 시스템은 프로세서(예를 들어, DSP(digital signal processor), 마이크로제어기, ASIC(application specific integrated circuit), 또는 마이크로프로세서 등)를 가지는 임의의 시스템을 포함할 수 있다.
프로그램 코드는 처리 시스템과 통신하기 위해 고수준의 절차적 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또는, 원하는 경우, 어셈블리어 또는 기계어로 구현될 수 있다. 실제로, 본원에 기술되는 메커니즘들은 범주가 임의의 특정의 프로그래밍 언어로 제한되지 않는다. 어느 경우든지, 언어는 컴파일되거나 인터프리트되는 언어일 수 있다.
적어도 하나의 실시예의 하나 이상의 양태들은, 머신에 의해 판독될 때, 머신으로 하여금 본원에 기술되는 기법들을 수행하는 로직을 제조하게 하는, 프로세서 내에서의 다양한 로직을 나타내는 머신 판독 가능 매체 상에 저장되어 있는 대표적인 명령어들로 구현될 수 있다. "IP 코어"라고 하는 이러한 표현들은 유형적(tangible) 머신 판독 가능 매체 상에 저장되고, 로직 또는 프로세서를 실제로 제조하는 제조 기계들에 로드하기 위해, 다양한 고객들 또는 제조 시설들에 공급될 수 있다.
이러한 머신 판독 가능 저장 매체는 하드 디스크, 임의의 다른 유형의 디스크(플로피 디스크, 광 디스크, CD-ROM(compact disk read-only memory), CD-RW(compact disk rewritable), 및 광자기 디스크를 포함함), ROM(read-only memory), DRAM(dynamic random access memory), SRAM(static random access memory)과 같은 RAM(random access memory), EPROM(erasable programmable read-only memory), 플래시 메모리, EEPROM(electrically erasable programmable read-only memory)과 같은 반도체 디바이스, 자기 또는 광 카드, 또는 전자 명령어를 저장하기에 적당한 임의의 다른 유형의 매체와 같은 저장 매체를 비롯한, 기계 또는 디바이스에 의해 제조 또는 형성되는 비일시적, 유형적 물품 구성들을 포함할 수 있지만, 이들로 제한되지 않는다.
그에 따라, 본 개시내용의 실시예들은 또한 명령어들을 포함하는 또는 본원에 기술되는 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는 HDL(Hardware Description Language)과 같은 설계 데이터를 포함하는 비일시적, 유형적 머신 판독 가능 매체를 포함할 수 있다. 이러한 실시예들은 또한 프로그램 제품이라고 지칭될 수 있다.
어떤 경우들에서, 명령어 변환기는 소스 명령어 집합으로부터 대상 명령어 집합으로 명령어를 변환하는 데 사용될 수 있다. 예를 들어, 명령어 변환기는 명령어를 코어에 의해 처리될 하나 이상의 다른 명령어들로 (예컨대, 정적 이진 변환(static binary translation), 동적 컴파일을 비롯한 동적 이진 변환(dynamic binary translation)을 사용하여) 변환하거나, 모핑하거나, 에뮬레이트하거나 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서(on processor), 오프 프로세서(off processor), 또는 부분 온 및 부분 오프 프로세서(part on and part off processor)일 수 있다.
이와 같이, 적어도 하나의 실시예에 따른 하나 이상의 명령어들을 수행하는 기법들이 개시되어 있다. 특정의 예시적인 실시예들이 기술되고 첨부 도면들에 도시되어 있지만, 다양한 다른 수정들이 본 개시내용을 살펴볼 시에 본 기술 분야의 통상의 기술자에게 안출될 수 있기 때문에, 이러한 실시예들이 다른 실시예들을 제한하는 것이 아니라 예시하는 것에 불과하고 이러한 실시예들이 도시되고 기술된 특정의 구성들 및 배열들로 제한되지 않는다는 것을 잘 알 것이다. 성장이 빠르고 추가적인 개선들이 쉽게 예상되지 않는 이것과 같은 기술의 영역에서, 개시된 실시예들은, 본 개시내용의 원리들 또는 첨부된 청구항들의 범주를 벗어남이 없이 기술적 진보를 가능하게 함으로써 용이하게 되는 바와 같이, 구성 및 상세가 용이하게 수정 가능할 수 있다.

Claims (20)

  1. 프로세서로서,
    복수의 스트랜드(strand)로 분할되는 명령어 스트림을 비순차적으로 실행하는 제1 로직 - 상기 명령어 스트림 및 각각의 스트랜드는 프로그램 순서(program order; PO)에 의해 정렬됨 -;
    상기 명령어 스트림에서 가장 오래된 디스패치되지 않은 명령어(oldest undispatched instruction)를 결정하고 상기 가장 오래된 디스패치되지 않은 명령어의 연관된 PO 값을 실행된 명령어 포인터로서 저장하는 제2 로직 - 상기 명령어 스트림은 디스패치된 명령어 및 디스패치되지 않은 명령어를 포함함 -;
    상기 명령어 스트림에서 가장 최근에 회수된 명령어를 결정하고 상기 가장 최근에 회수된 명령어의 연관된 PO 값을 회수 포인터(retirement pointer)로서 저장하는 제3 로직;
    상기 회수 포인터와 상기 실행된 명령어 포인터 사이의 명령어들의 범위를 선택하는 제4 로직; 및
    상기 제4 로직에서 선택된 상기 범위 내의 상기 명령어들을 회수 적격 대상으로서 식별하는 제5 로직
    을 포함하는, 프로세서.
  2. 제1항에 있어서, 상기 명령어 스트림에서 가장 오래된 디스패치되지 않은 명령어를 결정하는 상기 제2 로직은
    디스패치되지 않은 명령어들의 집합을 결정하는 제6 로직 - 상기 집합의 각각의 요소는 각각의 스트랜드로부터의 가장 오래된 디스패치되지 않은 명령어에 대응함 -; 및
    상기 집합으로부터 가장 오래된 디스패치되지 않은 명령어를 결정하는 제7 로직을 포함하는, 프로세서.
  3. 제1항에 있어서, 상기 명령어 스트림에서 가장 오래된 디스패치되지 않은 명령어를 결정하는 상기 제2 로직은
    각각의 데이터 저장 유닛이 각각의 스트랜드로부터의 가장 오래된 디스패치되지 않은 명령어의 PO를 보유하는 복수의 데이터 저장 유닛; 및
    캐스케이드 배열(cascaded arrangement)로 구성되는 복수의 결정 노드들을 포함하고,
    상기 복수의 결정 노드들은
    상기 복수의 데이터 저장 유닛들로부터의 정보를 초기 입력으로서 받는 제1 레벨의 상기 결정 노드들; 및
    상기 명령어 스트림에서의 가장 오래된 디스패치된 명령어의 PO를 출력하는 마지막 레벨의 상기 결정 노드들을 포함하며;
    각각의 결정 노드는 상기 결정 노드의 입력 값들을 비교하고 상기 입력 값들 중 최소 값을 출력하는, 프로세서.
  4. 제3항에 있어서, 각각의 결정 노드는
    제1 입력 값을 제2 입력 값으로부터 뺀 값의 부호 비트를 출력하는 뺄셈기; 및
    상기 뺄셈기에 통신 가능하게 결합되고 상기 부호 비트에 기초하여 상기 제1 입력 값 또는 상기 제2 입력 값을 선택적으로 출력하는 멀티플렉서를 포함하는, 프로세서.
  5. 제1항에 있어서, 상기 회수 적격 대상의 상기 범위의 명령어들은 디스패치되고 실행된 명령어들을 포함하는, 프로세서.
  6. 제1항에 있어서, 상기 명령어 스트림은 상기 명령어들의 범위 밖에 있는, 회수되지 않고, 디스패치되었으며, 실행된 명령어를 포함하는, 프로세서.
  7. 제1항에 있어서, 상기 명령어들의 범위 내의 상기 명령어들 각각을 회수하는 제6 로직; 및
    상기 명령어들의 범위 내의 상기 제6 로직에 의해 회수된 가장 새로운 명령어의 상기 PO 값을 상기 회수 포인터로서 저장하는 제7 로직을 추가로 포함하는, 프로세서.
  8. 방법으로서,
    프로세서 내에서:
    복수의 스트랜드들로 분할되는 명령어 스트림을 비순차적으로 실행하는 단계 - 상기 명령어 스트림 및 각각의 스트랜드는 프로그램 순서(PO)에 의해 정렬됨 -;
    상기 명령어 스트림에서 가장 오래된 디스패치되지 않은 명령어를 결정하고 상기 가장 오래된 디스패치되지 않은 명령어의 연관된 PO 값을 실행된 명령어 포인터로서 저장하는 단계 - 상기 명령어 스트림은 디스패치된 명령어 및 디스패치되지 않은 명령어를 포함함 -;
    상기 명령어 스트림에서 가장 최근에 회수된 명령어를 결정하고 상기 가장 최근에 회수된 명령어의 연관된 PO 값을 회수 포인터로서 저장하는 단계;
    상기 회수 포인터와 상기 실행된 명령어 포인터 사이의 명령어들의 범위를 선택하는 단계; 및
    상기 범위 내의 상기 명령어들을 회수 적격 대상으로서 식별하는 단계
    를 포함하는, 방법.
  9. 제8항에 있어서, 상기 명령어 스트림에서 가장 오래된 디스패치되지 않은 명령어를 결정하는 단계는
    디스패치되지 않은 명령어들의 집합을 결정하는 단계 - 상기 집합의 각각의 요소는 각각의 스트랜드로부터의 가장 오래된 디스패치되지 않은 명령어에 대응함 -; 및
    상기 집합으로부터 가장 오래된 디스패치되지 않은 명령어를 결정하는 단계를 포함하는, 방법.
  10. 제8항에 있어서, 상기 명령어 스트림에서 가장 오래된 디스패치되지 않은 명령어를 결정하는 단계는
    데이터 저장 장소로부터의 각각의 스트랜드로부터의 가장 오래된 디스패치되지 않은 명령어들의 PO를 캐스케이드 배열로 구성된 제1 레벨의 결정 노드들에의 입력으로서 결정하는 단계;
    각각의 결정 노드에서, 상기 결정 노드의 입력 값들을 비교하고 상기 입력 값들 중 최소 값을 출력하는 단계; 및
    마지막 레벨의 상기 결정 노드들에서, 상기 명령어 스트림에서의 상기 가장 오래된 디스패치된 명령어의 PO를 출력하는 단계를 포함하는, 방법.
  11. 제10항에 있어서, 각각의 결정 노드에서 상기 결정 노드의 입력 값들을 비교하고 상기 입력 값들 중 최소 값을 출력하는 단계는
    부호 비트를 결정하기 위해 제2 입력 값으로부터 제1 입력 값을 빼는 단계; 및
    상기 부호 비트에 기초하여 상기 제1 입력 값 또는 상기 제2 입력 값을 선택적으로 출력하는 단계를 포함하는, 방법.
  12. 제8항에 있어서, 상기 회수 적격 대상의 상기 범위의 명령어들은 디스패치되고 실행된 명령어들을 포함하는, 방법.
  13. 제8항에 있어서, 상기 명령어 스트림은 상기 명령어들의 범위 밖에 있는, 회수되지 않고, 디스패치되었으며, 실행된 명령어를 포함하는, 방법.
  14. 시스템으로서,
    복수의 스트랜드들로 분할되는 명령어 스트림 - 상기 명령어 스트림 및 각각의 스트랜드는 프로그램 순서(PO)에 의해 정렬됨 -; 및
    상기 명령어 스트림을 비순차적으로 수신하고 실행하는 프로세서
    를 포함하고, 상기 프로세서는
    상기 명령어 스트림에서 가장 오래된 디스패치되지 않은 명령어를 결정하고 상기 가장 오래된 디스패치되지 않은 명령어의 연관된 PO 값을 실행된 명령어 포인터로서 저장하는 제1 로직 - 상기 명령어 스트림은 디스패치된 명령어 및 디스패치되지 않은 명령어를 포함함 -;
    상기 명령어 스트림에서 가장 최근에 회수된 명령어를 결정하고 상기 가장 최근에 회수된 명령어의 연관된 PO 값을 회수 포인터로서 저장하는 제2 로직;
    상기 회수 포인터와 상기 실행된 명령어 포인터 사이의 명령어들의 범위를 선택하는 제3 로직; 및
    상기 제3 로직에서 선택된 상기 범위 내의 상기 명령어들을 회수 적격 대상으로서 식별하는 제4 로직을 포함하는, 시스템.
  15. 제14항에 있어서, 상기 명령어 스트림에서 가장 오래된 디스패치되지 않은 명령어를 결정하는 상기 제1 로직은
    디스패치되지 않은 명령어들의 집합을 결정하는 제5 로직 - 상기 집합의 각각의 요소는 각각의 스트랜드로부터의 가장 오래된 디스패치되지 않은 명령어에 대응함 -; 및
    상기 집합으로부터 가장 오래된 디스패치되지 않은 명령어를 결정하는 제6 로직을 포함하는, 시스템.
  16. 제14항에 있어서, 상기 명령어 스트림에서 가장 오래된 디스패치되지 않은 명령어를 결정하는 상기 제1 로직은
    각각의 데이터 저장 유닛이 각각의 스트랜드로부터의 가장 오래된 디스패치되지 않은 명령어의 PO를 보유하는 복수의 데이터 저장 유닛; 및
    캐스케이드 방식으로 배열되는 복수의 결정 노드들을 포함하고, 상기 복수의 결정 노드들은
    상기 복수의 데이터 저장 유닛들로부터의 정보를 초기 입력으로서 받는 제1 레벨의 상기 결정 노드들; 및
    상기 명령어 스트림에서의 가장 오래된 디스패치된 명령어의 PO를 출력하는 마지막 레벨의 상기 결정 노드들을 포함하며;
    각각의 결정 노드는 상기 결정 노드의 입력 값들을 비교하고 상기 입력 값들 중 최소 값을 출력하는, 시스템.
  17. 제16항에 있어서, 각각의 결정 노드는
    제1 입력 값을 제2 입력 값으로부터 뺀 값의 부호 비트를 출력하는 뺄셈기; 및
    상기 뺄셈기에 통신 가능하게 결합되고 상기 부호 비트에 기초하여 상기 제1 입력 값 또는 상기 제2 입력 값을 선택적으로 출력하는 멀티플렉서를 포함하는, 시스템.
  18. 제14항에 있어서, 상기 회수 적격 대상의 상기 범위의 명령어들은 디스패치되고 실행된 명령어들을 포함하는, 시스템.
  19. 제14항에 있어서, 상기 명령어 스트림은 상기 명령어들의 범위 밖에 있는, 회수되지 않고, 디스패치되었으며, 실행된 명령어를 포함하는, 시스템.
  20. 제14항에 있어서, 상기 프로세서는
    상기 명령어들의 범위 내의 상기 명령어들 각각을 회수하는 제5 로직; 및
    상기 명령어들의 범위 내의 상기 제5 로직에 의해 회수된 가장 새로운 명령어의 상기 PO 값을 상기 회수 포인터로서 저장하는 제6 로직을 추가로 포함하는, 시스템.
KR1020167013626A 2013-12-23 2013-12-23 멀티 스트랜드 비순차 프로세서에서 회수를 위한 명령어들을 식별하는 명령어 및 로직 KR101898791B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/IB2013/003083 WO2015097494A1 (en) 2013-12-23 2013-12-23 Instruction and logic for identifying instructions for retirement in a multi-strand out-of-order processor

Publications (2)

Publication Number Publication Date
KR20160073417A KR20160073417A (ko) 2016-06-24
KR101898791B1 true KR101898791B1 (ko) 2018-09-13

Family

ID=50389464

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167013626A KR101898791B1 (ko) 2013-12-23 2013-12-23 멀티 스트랜드 비순차 프로세서에서 회수를 위한 명령어들을 식별하는 명령어 및 로직

Country Status (7)

Country Link
US (1) US10133582B2 (ko)
EP (1) EP3087473A1 (ko)
KR (1) KR101898791B1 (ko)
CN (1) CN105723329B (ko)
DE (1) DE112013007703T5 (ko)
RU (1) RU2644528C2 (ko)
WO (1) WO2015097494A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10241801B2 (en) 2016-12-23 2019-03-26 Intel Corporation Method and apparatus to create register windows for parallel iterations to achieve high performance in HW-SW codesigned loop accelerator
US10235171B2 (en) 2016-12-27 2019-03-19 Intel Corporation Method and apparatus to efficiently handle allocation of memory ordering buffers in a multi-strand out-of-order loop processor
US10241789B2 (en) 2016-12-27 2019-03-26 Intel Corporation Method to do control speculation on loads in a high performance strand-based loop accelerator
CN115629807B (zh) * 2022-10-31 2023-04-14 海光信息技术股份有限公司 多线程处理器的译码方法、处理器、芯片及电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040244000A1 (en) 2003-05-30 2004-12-02 Steven Frank General purpose embedded processor
US20130339711A1 (en) * 2012-06-18 2013-12-19 Intel Corporation Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5740393A (en) * 1993-10-15 1998-04-14 Intel Corporation Instruction pointer limits in processor that performs speculative out-of-order instruction execution
US5903740A (en) * 1996-07-24 1999-05-11 Advanced Micro Devices, Inc. Apparatus and method for retiring instructions in excess of the number of accessible write ports
US6721874B1 (en) * 2000-10-12 2004-04-13 International Business Machines Corporation Method and system for dynamically shared completion table supporting multiple threads in a processing system
US20020152259A1 (en) 2001-04-14 2002-10-17 International Business Machines Corporation Pre-committing instruction sequences
JP4042364B2 (ja) * 2001-07-27 2008-02-06 日本電気株式会社 アドレス生成回路、選択判断回路
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US8307194B1 (en) * 2003-08-18 2012-11-06 Cray Inc. Relaxed memory consistency model
US7500087B2 (en) 2004-03-09 2009-03-03 Intel Corporation Synchronization of parallel processes using speculative execution of synchronization instructions
US7278011B2 (en) * 2004-04-08 2007-10-02 International Business Machines Corporation Completion table configured to track a larger number of outstanding instructions without increasing the size of the completion table
US8694697B1 (en) * 2006-04-27 2014-04-08 Nvidia Corporation Rescindable instruction dispatcher
US8789060B1 (en) * 2007-12-27 2014-07-22 Cadence Design Systems, Inc. Deterministic, parallel execution with overlapping regions
JP5547208B2 (ja) 2008-11-24 2014-07-09 インテル コーポレイション シーケンシャル・プログラムを複数スレッドに分解し、スレッドを実行し、シーケンシャルな実行を再構成するシステム、方法および装置
US20100274972A1 (en) * 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
US8074060B2 (en) * 2008-11-25 2011-12-06 Via Technologies, Inc. Out-of-order execution microprocessor that selectively initiates instruction retirement early
US9052890B2 (en) * 2010-09-25 2015-06-09 Intel Corporation Execute at commit state update instructions, apparatus, methods, and systems
CN102064836B (zh) * 2010-11-26 2013-03-13 哈尔滨工业大学深圳研究生院 一种专用比较单元及ldpc码校验节点运算电路
US9268575B2 (en) * 2011-06-30 2016-02-23 Advanced Micro Devices, Inc. Flush operations in a processor
US9280352B2 (en) * 2011-11-30 2016-03-08 Apple Inc. Lookahead scanning and cracking of microcode instructions in a dispatch queue
CN102520903B (zh) * 2011-12-13 2014-07-23 中国科学院自动化研究所 支持定浮点可重构的长度可配置的向量最大/最小值网络

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040244000A1 (en) 2003-05-30 2004-12-02 Steven Frank General purpose embedded processor
US20130339711A1 (en) * 2012-06-18 2013-12-19 Intel Corporation Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor

Also Published As

Publication number Publication date
KR20160073417A (ko) 2016-06-24
US10133582B2 (en) 2018-11-20
CN105723329A (zh) 2016-06-29
EP3087473A1 (en) 2016-11-02
CN105723329B (zh) 2019-09-06
RU2016119815A (ru) 2017-11-28
DE112013007703T5 (de) 2016-09-29
RU2644528C2 (ru) 2018-02-12
US20160314000A1 (en) 2016-10-27
WO2015097494A1 (en) 2015-07-02

Similar Documents

Publication Publication Date Title
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN107003921B (zh) 具有有限状态机控制的可重配置测试访问端口
CN108292229B (zh) 用于重新出现的相邻聚集的指令和逻辑
US9823925B2 (en) Instruction and logic for a logical move in an out-of-order processor
KR101923289B1 (ko) 스토어들을 소팅 및 리타이어링하기 위한 명령어와 로직
US9274799B1 (en) Instruction and logic for scheduling instructions
JP6351722B2 (ja) クラスタ化されたワイド実行機械におけるメモリアクセス用の命令およびロジック
US20180004526A1 (en) System and Method for Tracing Data Addresses
CN108292271B (zh) 用于向量置换的指令和逻辑
US10705845B2 (en) Instructions and logic for vector bit field compression and expansion
WO2017112249A1 (en) Hardware content-associative data structure for acceleration of set operations
WO2017105670A1 (en) Instruction and logic for partial reduction operations
KR101898791B1 (ko) 멀티 스트랜드 비순차 프로세서에서 회수를 위한 명령어들을 식별하는 명령어 및 로직
KR20160113677A (ko) 다수의 스트랜드들로부터 명령어들을 디스패칭하기 위한 프로세서 로직 및 방법
US10102215B2 (en) Apparatus for hardware implementation of lossless data compression
US20170123799A1 (en) Performing folding of immediate data in a processor
US10884735B2 (en) Instruction and logic for predication and implicit destination
US20210303309A1 (en) Reconstruction of flags and data for immediate folding
WO2017168197A1 (en) Apparatus and method for improving performance of inter-strand communications
EP3274815B1 (en) Apparatus and method for inter-strand communication

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right