KR20150112774A - 동적 비순차적 프로세서 파이프라인을 구현하기 위한 방법 및 장치 - Google Patents

동적 비순차적 프로세서 파이프라인을 구현하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR20150112774A
KR20150112774A KR1020150026821A KR20150026821A KR20150112774A KR 20150112774 A KR20150112774 A KR 20150112774A KR 1020150026821 A KR1020150026821 A KR 1020150026821A KR 20150026821 A KR20150026821 A KR 20150026821A KR 20150112774 A KR20150112774 A KR 20150112774A
Authority
KR
South Korea
Prior art keywords
syllables
dependencies
sequential
instruction
pipeline
Prior art date
Application number
KR1020150026821A
Other languages
English (en)
Other versions
KR101754462B1 (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 KR20150112774A publication Critical patent/KR20150112774A/ko
Application granted granted Critical
Publication of KR101754462B1 publication Critical patent/KR101754462B1/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • 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
    • 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
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/3802Instruction prefetching
    • 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/3004Arrangements for executing specific machine instructions to perform operations on 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/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • 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/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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
    • 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
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • 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/46Multiprogramming arrangements

Landscapes

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

Abstract

최적화된 동적 비순차적 VLIW 파이프라인을 위한 하드웨어/소프트웨어 공동 설계. 예를 들어, 장치의 일 실시예는 다음을 포함한다: 메모리로부터 이들의 프로그램 순서로 VLIW들을 페치하기 위한 명령어 페치 유닛 - VLIW 들의 각각은 음절들 사이의 데이터 흐름 의존성들 및 거짓 출력 의존성들을 제거하는 순서로 VLIW들이 되도록 그룹화되는 복수의 RISC 명령어 음절을 포함함 -; 이들의 프로그램 순서로 VLIW들을 디코딩하고 또한 병렬로 각각의 디코딩된 VLIW의 음절들을 출력하기 위한 디코딩 유닛; 및 양호하게는 다른 음절들과 병렬로 음절들을 실행하기 위한 비순차적 실행 엔진 - 음절들의 적어도 일부는 이들이 상기 디코딩 유닛으로부터 수신되는 순서와는 상이한 순서로 실행될 것이고, 상기 비순차적 실행 엔진은 연산들을 실행할 때 음절들 사이의 데이터 흐름 의존성들 및 거짓 출력 의존성들을 검사하지 않는 하나 이상의 처리 단들을 가짐 -.

Description

동적 비순차적 프로세서 파이프라인을 구현하기 위한 방법 및 장치{METHOD AND APPARATUS FOR IMPLEMENTING A DYNAMIC OUT-OF-ORDER PROCESSOR PIPELINE}
본 발명은 일반적으로 컴퓨터 프로세서 분야에 관한 것이다. 보다 상세하게는, 본 발명은 동적 비순차적 프로세서 파이프라인(dynamic out-of-order processor pipeline)을 구현하기 위한 장치 및 방법에 관한 것이다.
대다수의 주류 프로세서들은 동적 비순차적 마이크로 아키텍처들에 현재 기초하고 있는데, 이 아키텍처들은 동일한 높은 수준의 비순차적 파이프라인 구현 원리들을 대개 공유한다. 이러한 프로세서들의 성능, 전력 효율성, 면적 밀도, 및 하드웨어 확장성을 향상시키는 것은 하드웨어만 있는 비순차적 설계들의 각각의 세대에 따라 점점 더 어려워지고 있다.
본 발명의 더 나은 이해가 하기 도면들과 연계되는 하기 상세한 설명으로부터 획득될 수 있다.
도 1a는 본 발명의 실시예들에 따른 예시적 순차적 파이프라인 및 예시적 레지스터 리네이밍 비순차적 이슈/실행 파이프라인 모두를 도해하는 블록도이다.
도 1b는 본 발명의 실시예들에 따른 프로세서에 포함되는 순차적 아키텍처 코어 및 예시적 레지스터 리네이밍 비순차적 이슈/실행 아키텍처 코어 모두의 예시적 실시예를 도해하는 블록도이다.
도 2는 본 발명의 실시예들에 따른 통합 메모리 컨트롤러 및 그래픽을 구비한 단일 코어 프로세서 및 다중 코어 프로세서의 블록도이다.
도 3은 본 발명의 일 실시예에 따른 시스템의 블록도이다.
도 4는 본 발명의 실시예에 따른 제2 시스템의 블록도이다.
도 5는 본 발명의 실시예에 따른 제3 시스템의 블록도이다.
도 6은 본 발명의 실시예에 따른 SoC의 블록도이다.
도 7은 본 발명의 실시예들에 따른, 소스 명령어 세트에서의 이진 명령어들을 타깃 명령어 세트에서의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대비하는 블록도이다.
도 8은 VLIW 음절들에 사용되는 명령어 포맷의 일 실시예를 도해한다.
도 9는 복수의 음절을 포함하는 VLIW의 일 실시예를 도해한다.
도 10a-b는 종래의 비순차적(OOO) 파이프라인 및 본 발명의 일 실시예에 따른 OOO 파이프라인을 도해한다.
도 11a-b는 2진 코드에서의 인접한 복수의 종래의 마이크로 연산들(uops)과 복수의 음절 사이의 의존성을 도해한다.
도 12a-b는 종래의 프로세서에서의 레지스터 리네이밍과 본 발명의 일 실시예에서 채택되는 레지스터 리네이밍을 도해한다.
도 13a-b는 본 발명의 일 실시예에 따른 종래의 OOO 프로세서에서의 레지스터 리네이밍, 스케줄러 로직, 및 소거 로직을 도해한다.
도 14a는 리네임/할당, 스케줄링, 및 디스패칭 단들 사이의 복수의 크로스바 스위치를 포함하는 종래의 파이프라인을 도해한다.
도 14b는 리네임/할당 단, 스케줄링 단, 및 디스패칭 단을 포함하는 본 발명의 일 실시예에 따른 파이프라인을 도해한다.
도 15는 디코딩 단에 이어지는 프로세서 파이프라인의 일 실시예를 도해한다.
도 16은 명령어 의존성들에 기초하여 명령어들의 시퀀스를 재배열하는 일 실시예를 도해한다.
하기 설명에서는, 설명 목적을 위해, 여기에 기술되는 발명의 실시예들의 철저한 이해를 제공하도록 많은 특정한 상세 사항들이 제시된다. 그러나, 본 발명은 이들 특정한 상세 사항들의 일부가 없어도 실시될 수 있다는 점이 통상의 기술자에게 명백할 것이다. 다른 경우에, 본 발명의 실시예들의 바탕 원리들을 모호하게 하는 것을 회피하기 위해서 공지된 구조들 및 디바이스들은 블록도 형태로 도시된다.
예시적 프로세서 아키텍처 및 데이터 형들
도 1a는 본 발명의 실시예들에 따른 예시적 순차적 파이프라인 및 예시적 레지스터 리네이밍, 비순차적 이슈/실행 파이프라인 모두를 예시하는 블록도이다. 도 1b는 본 발명의 실시예들에 따라 프로세서에 포함될 순차적 아키텍처 코어 및 예시적 레지스터 리네이밍, 비순차적 이슈/실행 아키텍처 코어의 예시적 실시예 모두를 예시하는 블록도이다. 도 1a-b에서의 실선 박스들은 순차적 파이프라인 및 순차적 코어를 예시하는 한편, 점선 박스들의 옵션적 추가는 레지스터 리네이밍, 비순차적 이슈/실행 파이프라인 및 코어를 예시한다. 순차적 양태가 비순차적 양태의 서브세트라는 것을 고려하여, 비순차적 양태가 설명될 것이다.
도 1a에서, 프로세서 파이프라인(100)은 페치 단(102), 길이 디코딩 단(104), 디코딩 단(106), 할당 단(108), 리네이밍 단(110), 스케줄링(또한 디스패칭 또는 이슈로 알려짐) 단(112), 레지스터 판독/메모리 판독 단(114), 실행 단(116), 라이트 백/메모리 기입 단(118), 예외 처리 단(122), 및 커밋 단(124)을 포함한다.
도 1b는 실행 엔진 유닛(150)에 결합된 프론트 엔드 유닛(130)을 포함하는 프로세서 코어(190)를 보여주며, 실행 엔진 유닛과 프론트 엔드 유닛 둘 모두는 메모리 유닛(170)에 결합된다. 코어(190)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안 코어 유형일 수 있다. 또 다른 옵션으로서, 코어(190)는 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 보조프로세서 코어, 범용 컴퓨팅 그래픽 프로세싱 유닛(general purpose computing graphics processing unit: GPGPU) 코어, 그래픽 코어, 또는 그와 유사한 것과 같은 특수 목적 코어일 수 있다.
프론트 엔드 유닛(130)은 디코드 유닛(140)에 결합되는 명령어 페치 유닛(138)에 결합되는 명령어 TLB(translation lookaside buffer)(136)에 결합되는 명령어 캐시 유닛(134)에 결합되는 브랜치 예측 유닛(132)을 포함한다. 디코드 유닛(140)(또는 디코더)은 명령어들을 디코딩할 수 있으며, 또한 최초 명령어들로부터 디코딩되거나, 다른 경우에는 이들을 반영하거나, 또는 이들로부터 도출되는 하나 이상의 마이크로 연산들, 마이크로코드 엔트리 포인트들, 마이크로 명령어들, 다른 명령어들, 또는 다른 제어 신호들을 출력으로서 발생할 수 있다. 디코드 유닛(140)은 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다. 적절한 메커니즘들의 예들은 룩업 테이블들, 하드웨어 구현들, PLA들(programmable logic arrays), 마이크로코드 ROM들(read only memories), 기타 등등을 포함하지만 이것들에만 한정되지는 않는다. 일 실시예에서, 코어(190)는 마이크로코드 ROM 또는 소정 매크로 명령어들을 위한 마이크로코드를 (예를 들어 디코드 유닛(140)에 또는 다른 경우에는 프론트 엔드 유닛(130) 내에) 저장하는 다른 매체를 포함한다. 디코드 유닛(140)은 실행 엔진 유닛(150)에서의 리네임/할당기 유닛(152)에 결합된다.
실행 엔진 유닛(150)은, 리타이어먼트 유닛(154) 및 하나 이상의 스케줄러 유닛(들)(156)의 세트에 결합된 리네임/할당기 유닛(152)을 포함한다. 스케줄러 유닛(들)(156)은 예약 스테이션들(reservations stations), 중앙 명령어 윈도, 기타 등등을 포함하는 임의 개수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(156)은 물리적 레지스터 파일(들) 유닛(들)(158)에 결합된다. 물리적 레지스터 파일(들) 유닛들(158)의 각각은 하나 이상의 물리적 레지스터 파일들을 나타내고, 이들 중 상이한 것들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(status)(예로서, 실행될 다음 차례의 명령어의 주소인 명령어 포인터), 기타 등등과 같은 하나 이상의 상이한 데이터 형들을 저장한다. 일 실시예에서, 물리적 레지스터 파일(들) 유닛(158)은 벡터 레지스터 유닛, 기입 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이들 레지스터 유닛들은 아키텍처 벡터 레지스터, 벡터 마스크 레지스터, 및 범용 레지스터를 제공할 수 있다. 레지스터 리네이밍 및 비순차 실행이 구현될 수 있는 다양한 방식들[예컨대, 리오더 버퍼(reorder buffer)(들) 및 리타이어먼트 레지스터 파일(들)을 사용하는 것, 미래 파일(future file)(들), 이력 버퍼(들), 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 레지스터 맵들 및 레지스터들의 풀을 사용하는 것; 기타 등등]을 예시하기 위해, 물리적 레지스터 파일(들) 유닛(들)(158)이 리타이어먼트 유닛(154)과 중첩된다. 리타이어먼트 유닛(154) 및 물리적 레지스터 파일(들) 유닛(들)(158)은 실행 클러스터(들)(160)에 결합된다. 실행 클러스터(들)(160)는 하나 이상의 실행 유닛들(162)의 세트 및 하나 이상의 메모리 액세스 유닛들(164)의 세트를 포함한다. 실행 유닛들(162)은 다양한 유형의 데이터(예로서, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예로서, 시프트, 가산, 감산, 승산)을 실행할 수 있다. 몇몇 실시예들이 특정한 기능들이나 기능들의 세트에 전용되는 다수의 실행 유닛을 포함할 수 있지만, 다른 실시예들은 단 하나의 실행 유닛 또는 모두가 모든 기능들을 실행하는 다중 실행 유닛을 포함할 수 있다. 스케줄러 유닛(들)(156), 물리적 레지스터 파일(들) 유닛(들)(158), 및 실행 클러스터(들)(160)는 가능하게는 복수 개로 도시되어 있는데, 그 이유는 소정 실시예들이 소정 유형의 데이터/연산에 대해 별개의 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인이며 각각은 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 가지며, 또한 별개의 메모리 액세스 파이프라인의 경우에는 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(164)을 갖는 소정 실시예들이 구현될 수 있음)을 발생할 수 있기 때문이다. 별개의 파이프라인들이 이용되는 경우, 이들 파이프라인들 중 하나 이상은 비순차적 이슈/실행일 수 있고 나머지는 순차적일 수 있다는 점도 이해하여야 한다.
메모리 액세스 유닛들(164)의 세트는 메모리 유닛(170)에 결합되고, 메모리 유닛은 레벨 2(L2) 캐시 유닛(176)에 결합되는 데이터 캐시 유닛(174)에 결합되는 데이터 TLB 유닛(172)을 포함한다. 하나의 예시적 실시예에서, 메모리 액세스 유닛들(164)은 로드 유닛, 저장 주소 유닛, 및 저장 데이터 유닛을 포함할 수 있으며, 이들 각각은 메모리 유닛(170)에서의 데이터 TLB 유닛(172)에 결합된다. 명령어 캐시 유닛(134)은 메모리 유닛(170)에서의 레벨 2(L2) 캐시 유닛(176)에 추가로 결합된다. L2 캐시 유닛(176)은 하나 이상의 다른 레벨들의 캐시에 및 결국에는 주 메모리에 결합된다.
예시로서, 예시적 레지스터 리네이밍, 비순차적 이슈/실행 코어 아키텍처는 다음과 같이 파이프라인(100)을 구현할 수 있다: 1) 명령어 페치(138)는 페치 및 길이 디코딩 단(102 및 104)을 실행하고; 2) 디코드 유닛(140)은 디코딩 단(106)을 실행하고; 3) 리네임/할당기 유닛(152)은 할당 단(108) 및 리네이밍 단(110)을 실행하고; 4) 스케줄러 유닛(들)(156)은 스케줄링 단(112)을 실행하고; 5) 물리적 레지스터 파일(들) 유닛(들)(158) 및 메모리 유닛(170)은 레지스터 판독/메모리 판독 단(114)를 실행하고; 실행 클러스터(160)는 실행 단(116)을 실행하고; 6) 메모리 유닛(170) 및 물리적 레지스터 파일(들) 유닛(들)(158)은 라이트 백/메모리 기입 단(118)을 실행하고; 7) 다양한 유닛들이 예외 처리 단(122)에 수반될 수 있고; 및 8) 리타이어먼트 유닛(154) 및 물리적 레지스터 파일(들) 유닛(들)(158)은 커밋 단(124)을 실행한다.
코어(190)는, 본 명세서에 설명된 명령어(들)를 포함하여, 하나 이상의 명령어 세트들(예를 들어, x86 명령어 세트(더 새로운 버전들이 추가된 몇몇 확장들을 구비)); 캘리포니아주 서니베일에 소재한 MIPS Technologies의 MIPS 명령어 세트; 캘리포니아주 서니베일에 소재한 ARM Holdings의 ARM 명령어 세트(NEON과 같은 옵션적 부가적인 확장들을 구비)를 지원할 수 있다. 일 실시예에서, 코어(190)는 패킹된 데이터 명령어 세트 확장(예를 들어, 앞서 설명된 AVX1, AVX2, 및/또는 일반적 벡터 친화적 명령어 포맷(U=0 및/또는 U=1)의 일부 형태)을 지원하는 로직을포함하며, 그에 의해 많은 멀티미디어 애플리케이션들에 사용되는 연산들이 패킹된 데이터를 이용하여 실행되도록 허용한다.
코어는 멀티스레딩(연산들 또는 스레드들 중의 2개 이상의 병렬 세트를 실행하는 것)을 지원할 수 있는데, 시분할 멀티스레딩(time sliced multithreading), (단일 물리적 코어가 물리적 코어가 동시적으로 멀티스레딩할 수 있는 스레드들 각각에 대해 논리적 코어를 제공하는) 동시 멀티스레딩, 또는 이들의 조합(예를 들어, Intel® Hyperthreading 기술과 같은 시분할 페치 및 디코딩과 그 이후의 동시 멀티스레딩)을 포함하는 다양한 방식으로 멀티스레딩할 수 있다는 것을 이해하여야 한다.
레지스터 리네이밍이 비순차적 실행의 맥락에서 설명되었지만, 레지스터 리네이밍은 순차적 아키텍처에서 이용될 수도 있다는 점을 이해하여야 한다. 프로세서의 예시된 실시예가 또한 별개의 명령어 및 데이터 캐시 유닛들(134/174) 및 공유 L2 캐시 유닛(176)을 포함하고 있지만, 대안적 실시예들은, 예를 들어 레벨 1(L1) 내부 캐시와 같은 명령어 및 데이터 모두에 대한 단일 내부 캐시, 또는 다중 레벨의 내부 캐시를 가질 수 있다. 몇몇 실시예들에서, 시스템은 내부 캐시, 및 코어 및/또는 프로세서의 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안으로서, 캐시 모두가 코어 및/또는 프로세서의 외부에 있을 수 있다.
도 2는 본 발명의 실시예들에 따라 둘 이상의 코어를 가질 수 있고, 통합 메모리 컨트롤러를 가질 수 있고, 또한 통합 그래픽을 가질 수 있는 프로세서(200)의 블록도이다. 도 2의 실선 박스들은 단일 코어(202A), 시스템 에이전트(210), 하나 이상의 버스 컨트롤러 유닛들(216)의 세트를 구비한 프로세서(200)를 예시하는 한편, 점선 박스들의 옵션적 추가는 다중 코어(202A-N), 시스템 에이전트 유닛(210)에서의 하나 이상의 통합 메모리 컨트롤러 유닛들(214)의 세트, 및 특수 목적 로직(208)을 가진 대안 프로세서(200)를 예시한다.
따라서, 프로세서(200)의 상이한 구현들은 다음을 포함할 수 있다: 1) 통합된 그래픽 및/또는 과학 분야(처리량) 로직(이것은 하나 이상의 코어들을 포함할 수 있음)인 특수 목적 로직(208)을 구비한 CPU, 및 하나 이상의 범용 코어들(예를 들어, 범용 순차적 코어들, 범용 비순차적 코어들, 이 둘의 조합)인 코어들(202A-N); 2) 그래픽 및/또는 과학 분야(처리량) 목적을 위해 주로 의도된 수많은 특수 목적 코어들인 코어들(202A-N)을 구비한 보조프로세서; 및 3) 수많은 범용 순차적 코어들인 코어들(202A-N)을 구비한 보조프로세서. 따라서, 프로세서(200)는 범용 프로세서, 보조프로세서 또는 특수 목적 프로세서, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(general purpose graphics processing unit), 고 처리량 MIC(many integrated core) 보조프로세서(30개 이상의 코어를 포함함), 임베디드 프로세서, 또는 이와 유사한 것들일 수 있다. 프로세서는 하나 이상의 칩들상에 구현될 수 있다. 프로세서(200)는 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술 중 어느 하나를 이용하여 하나 이상의 기판들의 일부가 될 수 있고 및/또는 이들 기판상에 구현될 수 있다.
메모리 계층 구조(hierarchy)는 코어들 내에서의 하나 이상의 레벨들의 캐시, 하나 이상의 공유 캐시 유닛들(206)의 세트, 및 통합 메모리 컨트롤러 유닛들(214)의 세트에 결합되는 외부 메모리(도시 안됨)를 포함한다. 공유 캐시 유닛들(206)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 다른 레벨들의 캐시와 같은 하나 이상의 중간 레벨 캐시들, 최종 레벨 캐시(LLC), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서 링 기반 상호 접속 유닛(212)이 통합 그래픽 로직(208), 공유 캐시 유닛들(206)의 세트, 및 시스템 에이전트 유닛(210)/통합 메모리 컨트롤러 유닛(들)(214)을 상호 접속하지만, 대안 실시예들은 그러한 유닛들을 상호 접속하기 위해 임의 수의 공지된 기술들을 이용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛들(206)과 코어들(202A-N) 사이의 코히런시가 유지된다.
몇몇 실시예들에서, 코어들(202A-N) 중 하나 이상은 멀티스레딩할 수 있다. 시스템 에이전트(210)는 코어들(202A-N)을 코디네이팅하고 동작시키는 그런 컴포넌트들을 포함한다. 시스템 에이전트 유닛(210)은 예를 들어 전력 제어 유닛(PCU; power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(202A-N) 및 통합 그래픽 로직(208)의 전력 상태를 조절하는데 필요한 로직 및 컴포넌트들이거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부적으로 접속된 디스플레이들을 구동하기 위한 것이다.
코어들(202A-N)은 아키텍처 명령어 세트의 관점에서 동종 또는 이종일 수 있는데; 즉 코어들(202A-N) 중 둘 이상은 동일 명령어 세트를 실행할 수 있는 반면, 다른 코어들은 해당 명령어 세트의 서브세트만을 또는 상이한 명령어 세트를 실행할 수 있다. 일 실시예에서, 코더(202A-N)는 이종이고, 하기 설명되는 "스몰(small)" 코어 또는 "빅(big)" 코어 둘 모두를 포함한다.
도 3 내지 도 6은 예시적 컴퓨터 아키텍처들의 블록도들이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, PDA들(personal digital assistants), 엔지니어링 워크스테이션들, 서버들, 네트워크 장치들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, 디지털 신호 프로세서들(DSP들), 그래픽 장치들, 비디오 게임 장치들, 셋톱박스들, 마이크로 컨트롤러들, 휴대 전화들, 휴대용 미디어 플레이어들, 핸드헬드 장치들, 및 다양한 다른 전자 장치들에 대해 본 기술 분야에 알려진 다른 시스템 설계들 및 구성들도 적합하다. 일반적으로, 본 명세서에 개시된 바와 같은 프로세서 및/또는 기타 실행 로직을 수용할 수 있는 매우 다양한 시스템들 또는 전자 장치들이 일반적으로 적합하다.
이제, 도 3을 참조하면, 본 발명의 일 실시예에 따른 시스템(300)의 블록도가 도시되어 있다. 시스템(300)은 하나 이상 프로세서들(310, 315)을 포함할 수 있고, 이 프로세서들은 컨트롤러 허브(320)에 결합된다. 일 실시예에서, 컨트롤러 허브(320)는 그래픽 메모리 컨트롤러 허브(GMCH)(390) 및 입력/출력 허브(IOH)(350)(이는 별개의 칩들상에 있을 수 있음)를 포함하고; GMCH(390)는 메모리(340) 및 보조프로세서(345)가 그에 결합되는 메모리 및 그래픽 컨트롤러들을 포함하고; IOH(350)는 GMCH(390)에게 입력/출력(I/O) 장치들(360)을 결합한다. 대안적으로, 메모리 및 그래픽 컨트롤러들 중 하나 또는 모두는 (본 명세서에서 설명되는 바와 같이) 프로세서 내에 통합되고, 메모리(340) 및 보조프로세서(345)는 프로세서(310), 및 IOH(350)와 단일 칩 내에 있는 컨트롤러 허브(320)에 직접 결합된다.
부가 프로세서들(315)의 옵션적 속성은 도 3에서 파선들로 표시된다. 각각의 프로세서(310, 315)는 본 명세서에서 기술되는 프로세싱 코어들 중 하나 이상을 포함할 수 있고, 프로세서(200)의 몇몇 버전일 수 있다.
메모리(340)는, 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 또는 이 둘의 조합일 수 있다. 적어도 하나의 실시예에 대해, 컨트롤러 허브(320)는 FSB(frontside bus)와 같은 멀티 드롭 버스, QPI(QuickPath Interconnect)와 같은 포인트 투 포인트 인터페이스, 또는 유사한 접속부(395)를 통해 프로세서(들)(310, 315)와 통신한다.
일 실시예에서, 보조프로세서(345)는, 예를 들어, 고 처리량 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서, 또는 이와 유사한 것과 같은 특수 목적 프로세서이다. 일 실시예에서, 컨트롤러 허브(320)는 통합 그래픽 가속기를 포함할 수 있다.
아키텍처적, 마이크로아키텍처적, 열적, 전력 소비 특성들, 및 그와 유사한 것을 포함하는 장점 기준들의 범위를 두고 볼 때 물리적 리소스들(310, 315) 사이에는 다양한 차이가 있을 수 있다.
일 실시예에서, 프로세서(310)는 일반 유형의 데이터 처리 연산들을 제어하는 명령어들을 실행한다. 명령어들 내에는 보조프로세서 명령어들이 임베디드될 수 있다. 프로세서(310)는 이들 보조프로세서 명령어들을 소속된 보조프로세서(345)에 의해 실행되어야 하는 유형인 것으로서 인식한다. 따라서, 프로세서(310)는 보조프로세서 버스 또는 다른 상호 접속부상에서 이들 보조프로세서 명령어들(또는 보조프로세서 명령어들을 표현하는 제어 신호들)을 보조프로세서(345)에게 발행한다. 보조프로세서(들)(345)는 수신된 보조프로세서 명령어들을 받아들이고 실행한다.
도 4를 이제 참조하면, 본 발명의 실시예에 따른 제1의 더 특정적이고 예시적인 시스템(400)의 블록도가 도시된다. 도 4에 도시된 바와 같이, 멀티프로세서 시스템(400)은 포인트 투 포인트 상호 접속 시스템이고, 포인트 투 포인트 상호 접속(450)을 통해 결합되는 제1 프로세서(470) 및 제2 프로세서(480)를 포함한다. 프로세서들(470 및 480)의 각각은 프로세서(200)의 몇몇 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(470 및 480)은 제각기 프로세서들(310 및 315)인 반면에, 보조프로세서(438)는 보조프로세서(345)이다. 또 다른 실시예에서, 프로세서들(470 및 480)은 제각기 프로세서(310), 보조프로세서(345)이다.
프로세서들(470, 480)은 제각기 통합 메모리 컨트롤러(IMC) 유닛들(472, 482)을 포함하는 것으로 도시된다. 프로세서(470)는 또한 그의 버스 컨트롤러 유닛들의 일부로서 포인트 투 포인트(P-P) 인터페이스들(476, 478)을 포함하며; 유사하게 제2 프로세서(480)는 P-P 인터페이스들(486, 488)을 포함한다. 프로세서들(470, 480)은 P-P 인터페이스 회로들(478, 488)을 이용하여 포인트 투 포인트(P-P) 인터페이스(450)를 통해 정보를 교환할 수 있다. 도 4에 도시된 바와 같이, IMC들(472 및 482)은, 제각기의 프로세서들에게 국지적으로 소속되는 주 메모리의 일부일 수 있는 제각기의 메모리들, 즉 메모리(432) 및 메모리(434)에게 프로세서들을 결합한다.
프로세서들(470, 480)은 각각이, 포인트 투 포인트 인터페이스 회로들(476, 494, 486, 498)을 이용하여 개별 P-P 인터페이스들(452, 454)을 통해 칩셋(490)과 정보를 교환할 수 있다. 칩셋(490)은 옵션으로서 고성능 인터페이스(439)를 통해 보조프로세서(438)와 정보를 교환할 수 있다. 일 실시예에서, 보조프로세서(438)는 예를 들어, 고 처리량 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서, 또는 그와 유사한 것과 같은 특수 목적 프로세서이다.
공유 캐시(도시 안됨)는 어느 한 프로세서에 포함되거나, 또는 양쪽 프로세서의 외부에 있지만 P-P 상호 접속부를 통해 프로세서들과 접속될 수 있어서, 프로세서가 저전력 모드에 놓이는 경우 어느 한쪽 또는 양쪽 프로세서들의 로컬 캐시 정보가 공유 캐시에 저장될 수 있게 된다.
칩셋(490)은 인터페이스(496)를 통해 제1 버스(416)에 결합될 수 있다. 일 실시예에서, 제1 버스(416)는 주변 컴포넌트 상호 접속(PCI) 버스, 또는 PCI 고속 버스 또는 또 다른 3세대 I/O 상호 접속 버스와 같은 버스일 수 있지만, 본 발명의 범위는 이것들에만 한정되지는 않는다.
도 4에 도시된 바와 같이, 다양한 I/O 장치들(414)이 제1 버스(416)를 제2 버스(420)에 결합하는 버스 브리지(418)와 함께 제1 버스(416)에 결합될 수 있다. 일 실시예에서, 보조프로세서들, 고 처리량 MIC 프로세서들, GPGPU들, 가속기들(예를 들어, 그래픽 가속기들 또는 DSP 유닛들과 같은 것), FPGA들, 또는 임의의 다른 프로세서와 같은 하나 이상의 부가 프로세서(들)(415)가 제1 버스(416)에 결합된다. 일 실시예에서, 제2 버스(420)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(422), 통신 장치들(427) 및 명령어들/코드 및 데이터(430)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 장치와 같은 스토리지 유닛(428)을 포함하는 다양한 장치가 제2 버스(420)에 결합될 수 있다. 또한, 오디오 I/O(424)는 제2 버스(420)에 결합될 수 있다. 다른 아키텍처들도 가능하다는 점에 유의한다. 예를 들어, 도 4의 포인트 투 포인트 아키텍처 대신에, 시스템은 멀티 드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
이제 도 5를 참조하면, 본 발명의 실시예에 따른 제2의 더 구체적인 예시적 시스템(500)의 블록도가 도시되어 있다. 도 4 및 도 5에서의 유사 요소들은 유사 참조 번호들을 지니며, 도 4의 소정 양태들은 도 5의 다른 양태들을 가리지 않기 위해서 도 5에서 생략되었다.
도 5는 프로세서들(470, 480)이 제각기 통합된 메모리 및 I/O 제어 로직("CL")(472 및 482)을 포함할 수 있는 것을 예시한다. 따라서, CL(472 및 482)은 통합 메모리 컨트롤러 유닛들을 포함하고, I/O 제어 로직을 포함한다. 도 5는 메모리들(432, 434)이 CL(472, 482)에 결합될 뿐만 아니라 I/O 장치들(514)이 또한 제어 로직(472, 482)에 결합된다는 것을 예시한다. 레거시 I/O 장치들(515)이 칩셋(490)에 결합된다.
이제 도 6을 참조하면, 본 발명의 일 실시예에 따른 SoC(600)의 블록도가 도시되어 있다. 도 2에서의 유사 요소들은 유사 참조 번호들을 갖는다. 또한, 점선 박스들은 더욱 진보된 SoC들에 대한 선택 사항적 특징들이다. 도 6에서, 상호 접속 유닛(들)(602)이: 하나 이상의 코어들(202A-N)의 세트 및 공유 캐시 유닛(들)(206)을 포함하는 애플리케이션 프로세서(610); 시스템 에이전트 유닛(210); 버스 컨트롤러 유닛(들)(216); 통합 메모리 컨트롤러 유닛(들)(214); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 보조프로세서들(620)의 세트; 정적 SRAM(static random access memory) 유닛(630); DMA(direct memory access) 유닛(632); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(640)에 결합된다. 일 실시예에서, 보조프로세서(들)(620)는 특수 목적 프로세서, 예를 들어 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 고 처리량 MIC 프로세서, 임베디드 프로세서, 또는 그와 유사한 것을 포함한다.
본 명세서에 개시된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, (휘발성 및 비휘발성 메모리 및/또는 스토리지 요소들을 포함하는) 스토리지 시스템, 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램 가능한 시스템상에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 4에 예시된 코드(430)와 같은 프로그램 코드는 본 명세서에서 기술되는 기능들을 실행하고 또한 출력 정보를 발생하기 위한 입력 명령어들에 적용될 수 있다. 출력 정보는 공지 방식으로 하나 이상의 출력 디바이스들에 적용될 수 있다. 본 애플리케이션의 목적을 위해, 처리 시스템은 예를 들어 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 주문형 집적 회로(ASIC), 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 처리 시스템과 통신하기 위해 고급 절차적 또는 객체 지향적 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또한 원하는 경우 어셈블리어 또는 기계어로 구현될 수 있다. 사실상, 본 명세서에 설명되는 메커니즘들은 임의의 특정 프로그래밍 언어로 범위가 한정되지는 않는다. 어느 경우든, 언어는 컴파일링되거나 인터프리팅된 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양태들은 프로세서 내에서 다양한 로직을 표현하는 기계 판독 가능 매체상에 저장되는 대표적 명령어들에 의해 구현될 수 있는데, 이 명령어들은 기계에 의해 판독될 때 기계로 하여금 본 명세서에서 설명되는 기술들을 실행하기 위한 로직을 이루어 내게 한다. "IP 코어들"로서 알려진 그러한 표현들은 유형의 기계 판독 가능 매체상에 저장될 수 있으며, 다양한 고객들 또는 제조 설비에 공급되어 로직 또는 프로세서를 실제로 제조하는 제조 기계들 내에 로드될 수 있다.
그러한 기계 판독 가능 저장 매체는 하드 디스크들, 플로피 디스크들, 광 디스크들, 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)과 같은 반도체 장치, PCM(phase change memory), 자기 또는 광 카드들, 또는 전자적 명령어들을 저장하기에 적절한 임의의 다른 유형의 매체와 같은 저장 매체를 포함하여, 기계 또는 장치에 의해 제조되거나 형성되는 물품들의 비 일시적이고 유형의 배열들을 포함할 수 있는데, 이것들로만 한정되지는 않는다.
따라서, 본 발명의 실시예들은 명령어들을 포함하거나, 또는 본 명세서에 설명된 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는 HDL(Hardware Description Language)과 같은 설계 데이터를 포함하는 비 일시적이고 유형의 기계 판독 가능 매체를 또한 포함한다. 이런 실시예들은 프로그램 제품들로도 참조될 수 있다.
몇몇 경우들에서, 명령어 변환기가 소스 명령어 세트로부터 타깃 명령어 세트로 명령어를 변환하기 위해 이용될 수 있다. 예를 들어, 명령어 변환기는 코어에 의해 처리될 하나 이상의 다른 명령어들로 명령어를 (예를 들어, 정적 이진 변환, 동적 편집을 포함하는 동적 이진 변환을 이용하여) 번역하고, 모핑하고, 에뮬레이팅하고, 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이것들의 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서(on processor), 오프 프로세서(off processor), 또는 일부는 온 프로세서 및 일부는 오프 프로세서일 수 있다.
도 7은 본 발명의 실시예들에 따라 소스 명령어 세트에서의 이진 명령어들을 타깃 명령어 세트에서의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대비하는 블록도이다. 예시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어, 또는 이것들의 다양한 조합들로 구현될 수 있다. 도 7은 적어도 하나의 x86 명령어 세트 코어를 구비한 프로세서(716)에 의해 선천적으로 실행될 수 있는 x86 이진 코드(706)를 발생하기 위해 고급 언어(702)로 된 프로그램이 x86 컴파일러(704)를 이용하여 컴파일링될 수 있는 것을 보여준다. 적어도 하나의 x86 명령어 세트 코어를 구비한 프로세서(716)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과들을 달성하기 위하여, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당한 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서상에서 실행되는 것을 목표로 하는 애플리케이션들 또는 기타의 소프트웨어의 오브젝트 코드 버전들을 호환 가능하게 실행하거나 기타 방식으로 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 실행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(704)는, 추가 연계 처리(linkage processing)를 수반하거나 수반하지 않고서 적어도 하나의 x86 명령어 세트 코어를 구비한 프로세서(716)상에서 실행될 수 있는 x86 이진 코드(706)(예를 들어, 오브젝트 코드)를 발생하도록 동작할 수 있는 컴파일러를 나타낸다. 유사하게, 도 7은 적어도 하나의 x86 명령어 세트 코어를 구비하지 않은 프로세서(714)(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 및/또는 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 선천적으로 실행될 수 있는 대안 명령어 세트 이진 코드(710)를 발생하기 위해 고급 언어(702)로 된 프로그램이 대안 명령어 세트 컴파일러(708)를 사용하여 컴파일링될 수 있는 것을 보여준다.
명령어 변환기(712)는 x86 이진 코드(706)를 x86 명령어 세트 코어를 구비하지 않은 프로세서(714)에 의해 선천적으로 실행될 수 있는 대안 명령어 세트 이진 코드(711)로 변환하는데 사용된다. 이 변환된 코드는 대안 명령어 세트 컴파일러(708)로부터 유래하는 대안 명령어 세트 이진 코드(710)와 동일할 수도 있고 아닐 수도 있지만; 변환된 코드는 동일한 일반 연산을 달성할 것이고 대안 명령어 세트로부터의 명령어들로 구성될 것이다. 따라서, 명령어 변환기(712)는 에뮬레이션, 시뮬레이션, 또는 임의의 다른 처리를 통해 x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스로 하여금 x86 이진 코드(706)를 실행하게 허용하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
동적 비순차적 프로세서 파이프라인을 구현하기 위한 장치 및 방법
본 발명의 일 실시예는 많은 방식으로 기존의 비순차적 및 순차적 VLIW 프로세서 구현들의 제한들을 해결하는 동적 비순차적 파이프라인의 최적화된 구현을 포함한다. 하드웨어 향상들이 특정하게 정의된(예를 들어, 비공개) 명령어 세트 아키텍처(ISA) 특징들 및 공동 설계된 소프트웨어 최적화기의 도움으로 달성되는데, 소프트웨어 최적화기는 ISA에 대한 이진 번역기(예를 들어, 변환기(712)) 또는 최적화 컴파일러(708)일 수 있다(도 7 참조). 상당한 정도로, 새로운 최적화된 하드웨어 파이프라인은 하드웨어에서의 동적 비순차적 실행의 모든 기본 원리들을 유지하고 향상시킨다. 본 발명의 실시예들이 이룩해 내는 하나의 추가적 귀중한 특징은 와이더 이슈(wider-issue) 비순차적 프로세서 설계들을 위한 현저하게 향상된 하드웨어 확장성(scalability)이다.
하기 제시된 몇몇 실시예들은 (예로, Intel® Architecture (IA)와 같은) 임의의 종래의 ISA를 지원하는 종래의 비순차적 파이프라인이 ISA에서의 모든 유효한 코드 시퀀스마다의 하드웨어에 의한 정확한 슈퍼스칼라 실행을 보장해야만 한다는 관찰에 기초하여 설계된다. 그러나, 비순차적 마이크로 아키텍처가 VLIW(Very Long Instruction Word) ISA들에서의 제한들 중 일부와 유사하게 하드웨어 실행에 대해 허용되는 코드 시퀀스들에 대한 소정 제한들을 정의하는 새로운 RISC(Reduced Instruction Set Computer) 유사 ISA에 대해 설계되면, 비순차적 파이프라인 하드웨어의 구현은 실질적으로 수많은 방식으로 최적화될 수 있다.
특정 최적화들은 밀접하게 관련된 ISA 의존적 또는 ISA 파생된 발명들의 패키지로서 본 명세서에서 기술된다. 새로운 ISA는 비공개(private)이거나 공개적(public)일 수 있다. 동적 이진 변환(Dynamic Binary Translation: dBT) 기술은 기존 이진 코드들(예를 들어, IA)로부터 새로운 비공개 ISA로 번역하고 또한 기존 소프트웨어와의 완전한 이진 호환성을 가능하게 하는 데에 선택적으로 사용된다. 도 7에서, 예를 들어, dBT 기술은 x86 이진 코드(706)를 여기서 기술되는 프로세서 아키텍처상에서의 실행에 적응된 네이티브 이진 코드로 변환하기 위해 명령어 변환기(712)에 의해 구현될 수 있다. 대안적으로, 도 7의 컴파일러(708)와 같은, 새로운 공개 ISA에게의 최적화 컴파일러가 실행가능 이진값들(710)을 산출하는데 사용될 수 있다.
중요한 점은, 일 실시예에서, 새로운 하드웨어 최적화들이 비순차적 파이프라인의 기본 원리들을 변경하지 않고 그 구현만을 변경한다는 것이다. 이에 따라, 최적화된 파이프라인은 명령어들의 전통적 개념 흐름: 순차적 슈퍼스칼라 페치 및 명령어들의 할당, 동적 데이터 흐름 스케줄링 엔진(비순차적), 및 명령어들의 순차적 슈퍼스칼라 리타이어먼트를 미러링한다. 이는 하드웨어 실현성(hardware feasibility)을 확보하고 또한 넓은 범위의 범용 소프트웨어 애플리케이션들에 걸친 고 성능 기대 수준들을 만족시키는 것을 돕는다.
본 발명의 기술된 실시예들은 슈퍼스칼라 비순차적 파이프라인 구현에서 상당한 수의 하드웨어 최적화들 - 간단화들, 축소들, 및 증강들을 허용한다. 하기 특징들은 이러한 실시예들에 의해 구현된다:
순차적 프로세서의 프론트 엔드에서의 것들과 유사한, 극적인 프론트 엔드 하드웨어 최적화들;
비순차적 엔진 할당, 스케줄러 설정, 및 리타이어먼트 유닛들의 간단화 및 사이즈의 축소, 다운스트림 비순차적 파이프라인;
비순차적 파이프라인의 세그먼트를 더 병렬적으로 만드는, 할당 파이프라인에서의 몇몇 결정적 단 간의 의존성들(inter-stage dependencies)의 제거 및 몇몇 파이프라인 단들의 축소;
비순차적 프로세서에 대한 더 넓은 동적 연산 빈도/전압 범위를 가능하게 하는 몇몇 결정적 파이프라인 단들에 대한 대기 시간 축소;
종래의 비순차적 프로세서들에서 실현 가능하거나 실제적인 것을 넘어서는, 파이프라인을 따른 많은 하드웨어 구조들의 파티셔닝된 설계뿐만 아니라 이들의 판독/기입 포트들 축소;
데이터 경로 및 제어 버스들의 부분에서의, 대단히 병렬화되고 느슨하게 파티셔닝된 조직 및 비순차적 파이프라인의 몇몇 단들에서의 큰 크로스바(cross-bar)(다중화) 구조들의 제거; 및
종래의 비순차적 설계들과 비교되는, 주어진 사이즈의 값비싼 비순차적 하드웨어 구조들(예를 들어, 예약 스테이션, 버퍼들, 기타 등등)의 향상된 활용성.
일 실시예에서, 상기에 언급된 향상된 활용성은, 비순차적 명령어 페치, 백 엔드에게의 할당, 및 최초 프로그램 순서에 대한 리타이어먼트의 효과들의 순차적 조직 복잡도의 하드웨어에서의 활용에 의해 비순차적 파이프라인의 나머지에서 가능해진다. 모든 특징들은, 다음으로, 와이드 이슈 비순차적 프로세서 설계들을 위한 더 나은 하드웨어 확장성을 가능하게 한다.
(0) 도입
하드웨어/소프트웨어 공동 설계된 프로세서의 아키텍처를 정의하기 위한 전통적 패러다임은 소프트웨어 코드 최적화기에 의한 공동 설계 방법들이 하드웨어에서 몇몇 새로운 명령어 수준 병렬성(Instruction-Level Parallelism: ILP) 개념을 가능하게 하기 위해 특정하게 정의된 ISA 특징들을 통하여 적용되는 것을 가정하는데, 이것은 당대의 주류 비순차적 파이프라인들과는 조직들 및/또는 ILP 활용 원리에서 극적으로 달라야만 한다. 그러나, 이전의 어떠한 시도들도 종래의 하드웨어만의 비순차적 파이프라인들과 비교할 때 성능 및/또는 효율성 면에서 경쟁력이 없었다.
본 발명의 실시예들은 그 대신에 비순차적 파이프라인의 구현을 목표로 하는 하드웨어/소프트웨어 공동 설계를 위한 새로운 패러다임에 기초한다. 하드웨어 파이프라인 구현의 최적화들은 다음을 포함한다:
VLIW 프론트 엔드와 리타이어먼트/커밋 유닛들과의 ISA 최적화된 비순차적 파이프라인
ISA 최적화된 하드웨어 레지스터 리네이밍
ISA 최적화된 스케줄러 설정 로직 및 파이프라인
ISA 최적화된 명령어 소거 설정 로직 및 파이프라인
조합된 스케줄러 설정 및 소거 설정 로직
조합된 스케줄러 웨이크업 및 소거 로직
지연된 하드웨어 레지스터 리네이밍
명령어들의 비 추론적 조기 디스패칭
최적화된 비순차적 파이프라인의 완전 파티셔닝된 조직
파티셔닝된 명령어 할당 유닛
최적화된 비순차적 파이프라인에서의 할당(기입) 포트들의 축소
최적화된 파이프라인에서의 비순차적 엔진의 비순차적 할당
최적화된 비순차적 파이프라인을 위한 하드웨어 증강된 VLIW 코드 스케줄
ISA 최적화된 명령어 리타이어먼트 유닛
비순차적 파이프라인의 ISA 최적화된 클러스터링된 조직.
대부분의 비순차적 파이프라인 최적화들은 새롭고 특별하게 정의된 ISA 특징들에 직접적으로 기초한다. 새로운 ISA는 비공개 또는 공개 중 어느 하나일 수 있다. 언급한 것처럼, dBT 기술은 기존(예를 들어, IA) 이진 코드들로부터 새로운 비공개 ISA로 번역하고 또한 기존 소프트웨어와의 완전한 이진 호환성을 가능하게 하는데 사용될 수 있다. 대안적으로, 새로운 공개 ISA에게의 최적화 컴파일러가 실행 가능한 이진 값들을 산출하도록 요구된다.
일반성 상실 없이, 하기 기술된 실시예들은 최적화된 비순차적 파이프라인을 가진 dBT 기술의 사용을 가정한다. 본 발명의 실시예들은 어떠한 특별한 요구들도 dBT 구현에게 적용하지 않고, 또한 dBT 연산의 특정 상세 사항들은 본 발명의 바탕 원리들을 가리는 것을 회피하기 위해 하기에서 논의되지 않는다.
(1) 최적화된 비순차적 파이프라인에 대한 특별 ISA 요구들
도 8에서 예시된 대로, 일 실시예에서, 최적화된 비순차적 파이프라인을 위한 비공개 ISA는 RISC 스타일, 고정 길이 명령어 포맷(800)이다. 특히, 각각의 고정 길이 명령어가 3 주소 레지스터 연산 코드/피연산자 포맷(801)(예를 들어, dst, src1, src2) 및 명시적 명령어형 정보(802) (예를 들어, 메모리, ALU, 제어)를 포함하는 load-store ISA가 채택될 수 있다. 게다가, 각각의 명령어는, 설정될 때, 비공개 ISA에서 사용되는 VLIW들의 경계들을 명시적으로 마킹하는 정지 비트(803)를 포함한다.
비공개 ISA의 한가지 특징은 이것이 다음을 포함할 수 있는, 명령어 그룹화 제한들의 세트를 정의한다는 것이다:
개별 RISC 명령어들(도 8에 도시된 것과 같음)이, 그 한 예가 도 9에 도시되는, 보통 VLIW들로 불리는 순차적 그룹들의 시퀀스가 되도록 조합되어야만 한다. 특히, 도 9는 단일 VLIW 포맷이 되도록 그룹화된 복수의 개별 명령어(901-907)를 도해한다. 따라서, 일 실시예에서, 비공개 ISA 이진 코드는 VLIW들의 순차적 시퀀스를 포함한다. VLIW에서의 개별 RISC 명령어들은 때때로 "음절들(syllables)"로서 지칭된다.
VLIW들은 어떤 아키텍처적으로 정의된 최대값까지, 변화하는 수의 음절들을 포함할 수 있다. 그러므로, 각각의 VLIW의 길이는 변할 수 있으나, 그것 내에서는 고정 길이의 RISC 음절들의 그래뉼래리티로 그러하다. 각각의 음절 인코딩에 존재하는 정지 비트(803)의 설정 값은 VLIW들의 경계들을 명시적으로 마킹하고 또한 개개의 VLIW들을 식별하기 위해 하드웨어 파이프라인에 의해 이용된다. 각각의 VLIW 내의 소정 유형의 심볼들의 수에 대한 한계가 특정될 수 있다(예를 들어, VLIW당 하나의 제어 명령어보다 많지 않음).
일 실시예에서, VLIW 내의 음절들은 서로 간의 참 데이터 흐름(true data-flow)(기입 후 판독("R-A-W")) 또는 거짓 출력(false output)(기입 후 기입("W-A-W")) 데이터 흐름 레지스터 피연산자 의존성들을 갖지 않는다. 거짓 반 데이터 흐름 의존성들(false anti-data-flow dependencies)(예로, 판독 후 기입("W-A-R"))이 VLIW 내에 허용될 수 있다(예를 들어, 도 11a-b 및 하기의 연관 텍스트 참조). 이러한 제한들은, 메모리 연산들을 제외하고, VLIW에서의 음절들 사이의 어떠한 프로그램 순서 관계들도 없다는 것을 실효적으로 의미한다.
일 실시예에서, VLIW들은 프로그램 순서를 준수한다. 즉, 주어진 VLIW에서의 음절은 VLIW들의 프로그램 순서에서 더 오래된(즉, 더 일찍 페치된) 또 다른 선행 VLIW에서의 음절에 대한 임의의 데이터 흐름 의존성(R-A-W, W-A-R, 또는 W-A-W)을 가질 수 있다.
비공개 ISA의 몇몇 실시예들에서, VLIW에서의 음절의 상대적 위치는 음절의 유형을 정의할 수 있다. 예를 들어, 주어진 유형의 명령어들은 동일한 유형의 명령어들에 대하여 그리고 다른 유형들의 명령어에 대하여 VLIW에서 엄격하게 순서화될 수 있다. 게다가 심볼의 위치는 음절이 그에게 하드웨어에 의해 스티어링되어야만 하는 슈퍼스칼라 파이프라인(예를 들어, ALU0, ALU1, 기타 등등)에서의 특정 명령어 디스패칭 포트(즉, 하드웨어 파이프)를 정의할 수 있다. 예를 들어, 도 9에서, 명령어(901)는 그 위치에 기초하여 alu0에게 인도될 수 있는 가산 연산이다. 몇몇 실시예들에서, 제어 명령어들(예를 들어, 도 9에 도시된 브랜치 BRC와 같은 것)은 VLIW 코드에서 소정의 허용된 상대적 위치들만을 차지할 수 있다.
7 음절까지 포함하는 특정 VLIW가 도 9에 도시된다. 이것은 하나의 제어 음절(907), 두 개(까지의) 부동 소수점 벡터 음절들(905-906), 두 개(까지의) 메모리(load, store) 음절들(903-904), 및 두 개(까지의) 정수 ALU 음절들(901-902)을 갖는 것으로 도시된다. 제어(BRC) 음절에서의 세트 정지 비트(803)는 VLIW 인스턴스의 경계를 마킹한다.
(2) VLIW 프론트 엔드 리타이어먼트 / 커밋 유닛들에 의한 ISA 최적화된 비순차적 파이프라인
본 발명의 일 실시예에서 채택되는 하드웨어 최적화들이 종래의 비순차적 파이프라인 구현과 하기에서 비교된다. 최적화된 비순차적 파이프라인의 고위 구조가 도 10a-b에서 종래의 비순차적 파이프라인과 나란히 제시된다. 2개의 파이프라인 사이의 한 가지 차이점은 최적화된 파이프라인은 종래의 파이프라인에서의 제각기의 순차적 슈퍼스칼라 프론트 엔드 유닛들(1001) 및 순차적 슈퍼스칼라 리타이어먼트 유닛들(1003) 대신에 순차적 VLIW 프론트 엔드 유닛들(1011) 및 리타이어먼트/커밋 유닛들(1013)을 이용한다는 것이다. 일 실시예에서, 최적화된 비순차적 파이프라인의 유닛들은 클록 주기당 하나의 VLIW에 대해 연산한다.
도 1b를 다시 참조하면, 프론트 엔드 유닛들(1001 및 1011)은 프론트 엔드 유닛(130)에 도시된 컴포넌트들을 포함할 수 있고; 데이터 흐름 엔진들(1002 및 1012)은 실행 엔진 유닛(150)(예를 들어, 일 실시예에서 (154)를 제외한 것) 및 메모리 유닛(170)으로부터의 컴포넌트들을 포함할 수 있고; 및 리타이어먼트 유닛들(1003 및 1013)은 리타이어먼트 유닛(154)으로부터의 컴포넌트들을 포함할 수 있다.
일 실시예에서, 최적화된 파이프라인은 클록 주기당 1보다 많지 않은 VLIW로부터의 비순차적 음절들을 할당한다. 종래의 파이프라인에서의 uops의 동적으로 발생된 할당 "라인"과는 달리, VLIW는 dBT 최적화기에 의해 정적으로 미리 정의될 수 있고 또한 ISA 제한들이 RISC 명령어 음절들의 VLIW로의 그룹화 동안 적용되었다는 보장을 가지고 하드웨어에게 명시적으로 제공될 수 있다.
최적화된 파이프라인에서의 동적 데이터 흐름 비순차적 엔진(1012)에게의 할당 후에, VLIW는 그 별개의 음절들로 분해되어, 데이터 흐름 엔진(1002)이 종래의 비순차적 파이프라인에서의 별개의 uops를 스케줄링하는 것과 유사한(그러나 동일하지는 않은) 방식으로 엔진이 독립적으로 이들을 스케줄링할 수 있도록 한다.
(3) 최적화된 파이프라인에서의 비순차적 엔진 할당의 기본 조직
도 11a는, 도 11b에서의 최적화된 비순차적 파이프라인의 대응하는 엔티티, VLIW와 나란히 있는 종래의 비순차적 프로세서에서의 마이크로 연산들("uops")의 슈퍼스칼라 할당 "라인"의 예를 도해한다.
uops의 슈퍼스칼라 할당 라인은, 프로세서 프론트 엔드에서의 유효한 매크로 명령어(ISA) 시퀀스의 마이크로코드로의 변환으로부터 유래하는 uops 사이의 R-A-W(uop1의 입력에 uop0의 출력을 연결하는 점선 화살표(1101)에 의해 도시됨), W-A-R(uop1의 입력에 uop2의 출력을 연결하는 점선 화살표(1102)에 의해 도시됨), 및 W-A-W(uop0를 빠져 나와 uop3의 출력에 도착하는 일점 쇄선 화살표(1103)에 의해 도시됨) 레지스터 의존성들 중 거의 어느 것이나 포함할 수 있다. 그러므로, 종래의 비순차적 파이프라인은 uops의 각각의 및 모든 할당 라인에서의 모든 가능한 내부 선(intra-line)(또는 "인라인(inline)") 의존성들을 검사하고 정확히 다뤄야만 한다. 게다가, 종래의 할당 하드웨어는 라인에서의 uops 사이의 최초 프로그램 순서 관계들을 추적하고 적절히 강제해야만 한다. 요구들은 종래의 비순차적 파이프라인에서의 할당 하드웨어의 구현을 실질적으로 복잡하게 하고 또한 더 넓은 범위의 비순차적 프로세서 설계들을 위한 하드웨어 확장성을 심각하게 방해한다.
대조적으로, VLIW 구현을 이용하여, 도 11b에 도시된 바와 같이, 최적화된 비순차적 파이프라인에서의 대응 할당 엔티티는 VLIW에서의 음절 명령어들 사이의 허용된 의존성들에 대한 더 일찍 기술된 비공개 ISA 제한들을 준수하여야만 한다. 제한들은 전통적 VLIW ISA에 대해 전형적인 것이고, 또한 VLIW에서의 음절들 사이의 참 데이터 흐름(R-A-W) 의존성들 및 거짓 출력(W-A-W) 의존성들을 억제한다. 도 11b에서 I1의 입력에 I2의 출력을 연결하는 점선 화살표(1112)에 의해 표시된 대로, 음절들 사이에 거짓 반 의존성들(false anti-dependencies)(W-A-R)이 허용된다. 비공개 ISA 정의는 또한, 메모리 명령어들을 제외하고, VLIW에서의 상이한 음절들 사이의 어떠한 프로그램 순서화 관계들도 없다는 것을 의미한다. 이에 따라, 단일 VLIW로부터의 음절들은 서로에 대하여 임의의 순서로 및 이들의 비순차적 처리의 정확도에 대한 어떤 복잡함도 없이 비순차적 파이프라인 하드웨어에 의해 처리될 수 있다. 최초 이진 코드를 의미론적으로 완전히 동치이고 또한 유효한 비공개 ISA 코드로 번역하는 것은 dBT 소프트웨어의 책임이다.
(4) ISA 최적화된 하드웨어 레지스터 리네이밍
도 12b에 도해된 대로, 종래의 비순차적 파이프라인과 유사하게, 여기서 기술되는 최적화된 파이프라인은 비공개 ISA 논리적 레지스터 피연산자들을 마이크로 아키텍처에서 이용가능한 보다 큰 수의 물리적 레지스터들 상으로 매핑하기 위해 하드웨어 레지스터 리네이밍 유닛(1213)에 의존한다. 레지스터 리네이밍의 한가지 목적은 거짓 W-A-R 및 W-A-W 레지스터 의존성들을 제거하고 따라서 실행되는 코드에서 활용할 수 있는 병렬성의 수준을 높이는 것이다.
도 12a-b는 종래의 파이프라인(도 12a)과 최적화된 비순차적 파이프라인(도 12b)에서의 레지스터 리네이밍의 비교를 제공한다. 도해된 것처럼, 피연산자 비교 회로(1201) 및 피연산자 오버라이딩 회로(1202)(전형적으로 대규모 다중화기로서 구현됨)를 포함하는 상당한 양의 추가적 회로가 의존성들을 해소하기 위해 종래의 파이프라인에서 요구된다. 도 12a와는 대조적으로, 레지스터 리네이밍 테이블들(1213)만이 도 12b에 도시된 최적화된 파이프라인에서 요구된다. 간단화들 및 향상들은 VLIW에서의 음절들 사이의 어떠한 R-A-W 및 W-A-W 의존성들도 없다는 사실에 기초한다. 그러므로, 리네이밍 유닛은 (의존성들이 존재하지 않기 때문에) 의존성들을 검사하고 이들을 강제할 필요가 없다. 이 간단화는 레지스터 리네이밍의 판독 위상에서 논리적 레지스터 피연산자 비교기들(1201) 및 대응 물리적 레지스터 피연산자 인라이닝 다중화기들(1202)을 제거한다. 이 후자의 하드웨어 축소는, 다중화기들(1202)이 크고 유선 지배적 면적들을 점유하고 레지스터 리네이밍 단의 전체적 대기 시간을 증가시키기 때문에, 특히 중요하다. 제거된 다중화기들은 또한 와이드 이슈 프로세서 설계들에 있어서 리네이밍 유닛의 최악의 확장성 부분이다.
일 실시예에서, VLIW에 허용되는 거짓 W-A-R 반 의존성들은 레지스터 리네이밍 기입 위상을 레지스터 리네이밍 판독 위상에 대하여 클록 주기의 절반만큼 지연시킴으로써 종래의 비순차적 파이프라인과 유사하게 최적화된 파이프라인에서 제거된다.
최적화된 비순차적 파이프라인에서의 레지스터 리네이밍 기입 위상의 하드웨어 구현은 할당 VLIW에서의 음절들 간의 거짓 W-A-W 출력 의존성들의 보장된 부재에 의해 단순화되어, 레지스터 리네이밍 하드웨어가 레지스터 리네이밍 테이블들(1213)을 갱신하기 전에 의존성들을 검사하고 또한 이들을 정확하게 다루어야 할 필요가 없도록 한다.
(5) ISA 최적화된 스케줄러 설정 로직 및 파이프라인
최적화된 비순차적 파이프라인이 그 할당 세그먼트에서 가능하게 하는 다음 차례의 향상은 데이터 흐름 스케줄러의 설정 로직과 관계된다. 도 13a-b는 종래의 파이프라인(도 13a)과 최적화된 비순차적 파이프라인(도 13b)에서의 설정 로직의 비교를 제공한다. 특히, 도 13a는 레지스터 리네이밍 로직(1301), 스케줄러 설정 로직(1302) 및 스케줄러 로직(1303)뿐만이 아니라 소거 설정 로직(1304) 및 소거 로직(1305)의 직렬 배치를 도해한다. 도 13b는 레지스터 리네이밍 로직(1311), 스케줄러 설정 로직(1312) 및 소거 설정 로직(1314)뿐만 아니라 스케줄러 로직(1313) 및 소거 로직(1315)의 향상된 병렬 배치를 도해한다.
전술한 바와 같이, 임의의 비순차적 파이프라인은 그 활용할 수 있는 병렬성을 증가시키기 위해 할당 코드로부터 거짓 W-A-R 및 W-A-W를 제거하고, 참 데이터 흐름 의존성들(R-A-W)만을 고려한다. 그러나, 종래의 비순차적 파이프라인에서 uops의 할당 라인 내부에서의 거짓 의존성들을 검출하고 제거하기 위한 복잡도 및 시간 한계 상황은 이것이 레지스터 리네이밍 로직(1301)에 대하여 스케줄러 설정 로직(1302)을 직렬화할 것을 강요한다. 레지스터 리네이밍 로직(1301)은 거짓 의존성들을 제거하고, 스케줄러 설정 로직(1302)은 참 R-A-W 데이터 흐름 의존성들만을 고려(설정)하기 위해 그 결과들을 이용한다. 그러나, 이 간단화는 할당 파이프라인의 길이를 증가시키고, 할당 명령어가 디스패칭될 수 있을 가장 이른 시간을 지연시킨다.
대조적으로, 도 13b에 도시되는 최적화된 비순차적 파이프라인의 실시예는 임의의 내부 VLIW의 레지스터 의존성들을 다룰 필요가 없어서, 스케줄러 설정 로직(1312)이 레지스터 리네이밍 로직(1311)에 의해 실행되는 레지스터 리네이밍과 병렬로 스케줄링 설정을 실행하도록 한다. 이 구현은 할당 파이프라인의 전체적 길이를 감소시키고(단들을 제거하고), 더 일찍 명령어를 디스패칭하는 것을 허용하는데, 이것은 브랜치 오예측 복구 후의 및 명령어 캐시 미스들 후의 성능을 향상시킨다. 게다가, 더 짧은 할당 파이프라인은 최소 리소스 턴어라운드 대기 시간을 감소시키는 것을 통해 비순차적 엔진의 리소스들의 활용을 향상시킨다.
최적화된 할당 파이프라인의 일 실시예에서, 스케줄러 설정 로직(1312)은 더 큰 물리적 레지스터 식별자들이 아니라, 음절의 피연산자들의 논리적 ISA 레지스터들 식별자들(예를 들어, 논리적 레지스터 피연산자들에 의해 인덱싱됨)을 입력 정보로서 이용한다. 게다가 스케줄러 설정 로직(1312)은 심지어 할당 VLIW에서의 음절들 사이의 참 R-A-W 데이터 흐름 의존성들도 검사할 필요가 없다. 이러한 특징들은 스케줄러 설정에 사용되는 전형적 CAM(content addressable memory)이 더 단순하고 더 작은 테이블 기반 스케줄러 설정 로직(1312)으로 대체되는 것을 허용한다. 일 실시예에서, 설정 테이블은 논리적 레지스터를 위한 할당 순서 생산자(producer) 명령어에서의 가장 최근인 것을 가진 각각의 스케줄러 엔트리를 대응하는 논리적 레지스터에게 매핑하고; 논리적 레지스터를 위한 가장 최근의 생산자 명령어가 이미 실행되었다면, 설정 테이블은 레지스터가 스케줄러에서의 임의의 명령어에 대한 어떤 의존성들도 갖지 않는다고 보고한다. 향상된 스케줄러 설정 로직(1312)은 할당 음절들 사이의 거짓 W-A-R 반 의존성들을 다룰 필요가 여전히 있는데, 이것은 스케줄러 설정 로직 판독 위상에 대하여 클록 주기의 절반만큼 스케줄러 설정 로직 기입 위상을 지연시킴으로써 구현될 수 있다. 게다가, 레지스터 리네이밍(도 12b)에 대해 그런 것처럼, 스케줄러 설정 로직(1312)은 기입 위상 동안 거짓 W-A-W 출력 의존성들을 다룰 필요가 없는데, 이는 그런 거짓 출력 의존성들이 기술된 비공개 ISA에서 제한되기 때문이다.
(6) ISA 최적화된 명령어 소거 설정 로직 및 파이프라인
대다수의 당대의 비순차적 파이프라인들은 로드가 데이터 캐시에서 히트할 것이라고 가정하여(이는 로드 실행에 대해 통계적으로 가장 빈번한 경우임), 로드 연산들에 의존적인 명령어의 추론적 디스패칭(speculative dispatching)을 구현한다. 이 최적화는 소비자 연산들이 만약 이들이 비 추론적으로 디스패칭되었다면 그러했을 것보다 더 일찍 로드된 데이터를 수신하도록 허용한다. 로드가 데이터 캐시에서 미스되는 드문 경우에, 모든 추론적으로 디스패칭된 의존적 연산들은 비순차적 파이프라인에서 선택적으로 소거되어야만 한다. 미스된 로드가 프로세서의 메모리 계층 구조의 하위 레벨들로부터 데이터를 전달할 때, 연산들은 비 추론적으로 비순차적 엔진에 의해 이후에 다시 디스패칭된다(다시 플레이된다).
로드 소비자들의 추론적 디스패칭은, 스케줄러상에서의 다른 비로드 uops를 통한 이들의 간접적 의존성들을 포함하여, 로드들에 대해 비순차적 엔진에게 할당되는 uops의 의존성들을 추적하는 명령어 소거 로직(1305)에 의해 가능해진다. 의존성 정보는 로드가 데이터 캐시에서 미스되는 경우에 영향 받은 디스패칭된 명령어들을 선택적으로 소거하는데 사용된다. 데이터 흐름 스케줄러 설정과 유사하게, 종래의 비순차적 파이프라인은 레지스터 리네이밍(1301) 후에 소거 로직 설정(1304)을 실행하고, 소거 설정 로직(1304)의 기능을 단순화하기 위해 (1301)로부터의 리네이밍된 레지스터 정보 및 (1302)로부터의 데이터 흐름 스케줄러 설정 정보 및 (1305)로부터의 이전 소거 설정 정보 모두를 이용한다. 설정 기능은, 중간 설정 정보의 복합적 통합 및 다중 하드웨어 구조에게의 직렬화된 액세스들을 포함하여, uops의 할당 라인을 통한 로드들에 대한 간접적 의존성들을 결정하고 추적하기 위한 필요 때문에 여전히 복잡하다.
스케줄러 설정 로직(1312)의 향상과 대부분 똑 같이, 최적화된 비순차적 파이프라인은 소거 로직 설정(1314)을 향상시키는데, 이것은 레지스터 리네이밍(1311) 및 스케줄러 설정(1312)과 병렬로, 및 테이블 기반으로, 논리적 레지스터 피연산자들 방식에 의해(즉, (1312)에 대해 상술한 바와 같이 CAM 없이) 인덱싱되어 구현된다. 향상은 할당 VLIW에서의 음절들 간의 R-A-W 및 W-A-W 의존성들의 보장된 부재에 유사하게 기초한다.
로드 명령어들에 대한 간접적 의존성들에 대한 소거 특정적 식별 및 추적도 VLIW에서의 R-A-W 및 W-A-W 의존성들에 부재에 의해 최적화된 파이프라인에서 크게 단순화되어, 소거 로직(1314)을 설정하는 전체적 복잡도 및 대기 시간이 스케줄러 설정 로직(1312)에 대한 것과 동일하게 되도록 한다. W-A-R 의존성들은 그 판독 위상에 대하여 클록 주기의 절반만큼 소거 로직 설정(1314)의 기입 위상을 지연시킴으로써 유사하게 다뤄진다. 일 실시예에서, 소거 로직 설정(1314)의 기입 위상은 입력들 중 하나로서 소거 로직 설정(1314)의 판독 위상의 결과들을 이용할 수 있다.
(7) 조합된 스케줄러 설정 및 소거 설정 로직
소거 설정 로직(1314)의 전체적 최적화들은 이것이 음절의 피연산자들의 논리적 레지스터 식별자들에 의해 어드레싱가능한(인덱싱되는) 단일 테이블이 되도록 최적화된 비순차적 파이프라인에서 스케줄러 설정 로직(1312)과 조합되는 것을 허용한다. 이 조합은, 모든 간접적 데이터 흐름 의존성들이, 명령어 소거 정보에 포함되는 로드들에 대한 간접적 의존성들에 적용됨에 따라, 직접적 데이터 흐름 의존성들에 앞서서 항상 해소된다는 일반적 사실에 추가로 기초한다.
(8) 조합된 스케줄러 웨이크업 및 소거 로직
덧붙여, 명령어 소거 정보는, 종래의 비순차적 파이프라인들에 대해 그런 것처럼 별개의 하드웨어 구조에서가 아니라, 명령어들에 대한 참 데이터 흐름(R-A-W) 의존성 정보와 함께 데이터 흐름 스케줄러의 (1313) 웨이크업 로직상에 이제 유지될 수 있다. 최적화는, 모든 간접적 데이터 흐름 의존성들이, 명령어 소거 정보에 포함되는 로드들에 대한 간접적 의존성들에 적용됨에 따라, 직접적 데이터 흐름 의존성들에 앞서서 항상 해소된다는 일반적 사실에 추가로 기초한다.
이 모든 것은 최적화된 비순차적 파이프라인이 종래의 비순차적 엔진에서 상당한 양의 전력 및 면적 풋 프린트를 갖는, 별개의 명령어 소거 설정 및 추적 로직 하드웨어에 대한 필요를 완전히 제거하는 한편으로, 선택적 명령어 소거 기능들을 실행하는 것이 여전히 완전히 가능하다는 것을 의미한다.
(9) 지연된 하드웨어 레지스터 리네이밍
할당 파이프라인 구현의 또 다른 최적화가 위에서 기술된 스케줄러(1312-1313) 및 소거 설정 로직(1314)의 향상들이 비순차적 파이프라인에서의 레지스터 리네이밍 단의 한계 상황을 제거한다는 사실에 기초한다.
참조로서, 종래의 비순차적 파이프라인들은 레지스터 리네이밍(1301)이 가능한 한 빨리 완료될 것을 요구한다. 이것은 후속 스케줄러 설정(1302) 및 소거 로직 설정(1304) 기능들이 리네이밍 단계로부터의 정보에 의존하기 때문에 요구된다.
새로운 최적화된 비순차적 파이프라인에서 레지스터 리네이밍 위상(1311)은 리네이밍된 레지스터 정보가 처음으로 필요할 때까지, 즉 명령어가 파이프라인에서 데이터 흐름 스케줄러로부터 처음으로 디스패칭될 수 있기 전까지 지연될 수 있다. 지연된 레지스터 리네이밍(1311)은 종래의 파이프라인과 비교하여 빈(free) 물리적 목적지 레지스터들의 그 후의 할당을 허용하여서, 최소 물리적 레지스터 턴어라운드 대기 시간이 단축되고 주어진 사이즈의 물리적 레지스터 파일이 더 잘 활용되도록 한다. 레지스터 리네이밍 한계 상황의 제거는, 할당 파이프라인에서의 다른 하드웨어 구조들에 대한 레지스터 리네이밍 테이블들의 배치에 대한 요구들이 이제 완화될 수 있음에 따라, 비순차적 엔진의 물리적 레이아웃을 최적화하는데 또한 사용될 수 있다.
(10) 명령어들의 비추론적 조기 디스패칭
당대의 비순차적 프로세서들이 할당 명령어들의 조기 디스패칭을 구현할 수 있는데, 이는 이들의 파이프라인들의 스케줄러 설정 및 명령어 스케줄링 단들과 병렬로 실행된다. 명령어들의 조기 디스패칭은, 특히 브랜치 오예측 복구 후의 또는 명령 캐시 미스 후의 대다수의 할당 명령어들이 이들의 할당 시간에 디스패칭될 준비가 실제로 되기 때문에, 프로세서 성능을 향상시킨다. 그러나, 명령어 준비성과 관계되는 정보는 이 조기 단에서 종래의 파이프라인에서 이용할 수 없다. 그 결과, 파이프라인은 임의의 할당 명령어가 그 할당 시간에 준비될 수 있다고 가정함으로써 추론적으로 조기 디스패칭을 행한다.
종래의 파이프라인에서 그 이후에, 프로세서는 추론적으로 디스패칭된 명령어가 실제로 준비되는지를 결정하기 위해 검사하고, 그렇지 않다면 이것은 명령어를 소거시킨다. 잘못 추론된 조기 디스패칭된 명령어들의 소거는 특수 하드웨어 지원을 요구하고, 추가적 전력 오버헤드를 유발한다.
상기 설명된, 스케줄러 설정 로직(1312) 및 할당 파이프라인의 최적화들은 명령어 준비성 정보가 충분히 일찍 쉽게 이용가능하게 하여서, 최적화된 비순차적 파이프라인이 준비된 명령어들만의 비 추론적 조기 디스패칭을 실행하고 그에 의해 소거들의 전력 오버헤드뿐만 아니라 연관된 소거 하드웨어도 제거할 수 있도록 한다.
(11) 최적화된 비순차적 파이프라인의 완전 파티셔닝된 조직
비순차적 파이프라인의 최적화된 하드웨어 구현에서의 또 다른 중요한 향상은, 메모리 연산들을 제외하고, VLIW에서의 음절들 사이의 특정 프로그램 순서화 관계들의 정의된 부재에 기초할 뿐만 아니라 VLIW에서의 상이한 유형들의 명령어들(음절들)(예로, ALU, 메모리, 제어, 기타 등등과 같음) 사이의 ISA 정의된 엄격한 상대적 순서화를 활용하는 것에 기초한다.
게다가, 비공개 ISA의 일 실시예는 VLIW 내에서의 동일한 유형의 명령어들의 엄격한 상대적 순서화를 정의한다. 즉, 동일 유형의 몇 개의 명령어(예를 들어, 두 개의 ALU 명령어)가 VLIW에 존재하면, ISA의 일 실시예는 각각의 명령어들이 하드웨어에 의해 스티어링되어야만 하는 특정 디스패칭 포트들을 정의한다.
VLIW에서의 다중 메모리 명령어에 대해, ISA의 일 실시예는 이들이 스티어링되어야만 하는 메모리 디스패칭 포트에 의존하여, 이들의 메모리 액세스들의 상대적 프로그램 순서화를 정의한다. 예를 들어, 일 실시예에서 메모리 디스패칭 포트 0(MEM0)과 연관되는 VLIW 음절은 메모리 디스패칭 포트 1(MEM1)과 연관되는 VLIW 음절에 상대적으로 프로그램 순서에서 더 오래된 메모리 명령어를 항상 포함한다.
비공개 ISA의 일 실시예는, 도 14b에 도시된 도시된 바와 같이, 최적화된 비순차적 파이프라인의 완전 파티셔닝된 구현을 허용한다. 각각의 파이프라인 파티션, 또는 하드웨어 파이프는 특정 하드웨어 디스패칭 포트, 예를 들어, ALU0, ALU1, MEM0, MEM1, CONTROL, 기타 등등과 연관된다. 파이프라인 파티션들은 독립적으로 또는 서로 느슨하게 결합되어 기능하여, 실질적으로 프로세서 하드웨어 설계, 실증, 및 제조를 단순화한다. 이 파티션들은 비순차적 엔진 구현을 위한 단순하고, 능률적이고, 더 병렬적인 물리적 레이아웃들을 또한 가능하게 한다.
일 실시예에서, 인코딩된 VLIW는 비공개 ISA에서 정의된 바와 같이, 콤팩트한 형태로 메모리에서 표현된다. 즉, VLIW는 모든 가능한 음절 유형들을 포함하지 않을 수 있거나 또는 명령어들의 유형을 위한 하드웨어 디스패칭 포트들의 수와 동일한 수의 같은 유형의 음절들이 없을 수 있지만; 이러한 누락 음절들은 명령어 메모리에서 어떤 공간도 차지하지 않는다. 일 실시예에서, 프론트 엔드 파이프라인(1101)은 콤팩트한 VLIW를 확장하고, 모든 그것의 현재 음절들(명령어들)을 대응 파이프라인 파티션들 내에 배치한다. 최적화된 비순차적 파이프라인에서의 이 시점으로부터, 명령어들은 이들이 비공개 ISA 정의들에 따라 스티어링되었던 파이프라인 파티션들에 의해서만 처리된다.
일 실시예에서, 그와 같은 파이프라인 파티셔닝은 종래의 것과 비교하여 최적화된 파이프라인에 있어서 큰 다중화기들 및 크로스바 스위치들의 제거를 허용한다. 이것은, VLIW에 대해 비공개 ISA에서 정의되는 명령어들의 상대적 순서가 비순차적 프로세서 레이아웃에서의 하드웨어 구조들과 이들의 판독/기입 포트들의 상대적 토폴로지와 정확히 일치하여, 특정 하드웨어 구조들에 대한 어떠한 추가적 다중화, 또는 명령어들의 스티어링, 또는 이들의 제어 필드들이 파이프라인 전체에 걸쳐서 요구되지 않도록 하기 때문에 일어난다.
디코딩된 명령어 큐 판독 단으로부터 실행 단까지의 종래의 및 최적화된 비순차적 파이프라인들의 비교가 도 14a-b에 도시된다. 특히 도 14a는 제1 크로스바 스위치(1401)을 통해 리네임/할당 단(1404)에게 스위칭되는 uops 0-3의 시퀀스를 예시한다. 제2 크로스바 스위치(1402)는 리네임/할당 단(1404)으로부터 모놀리식 예약 스테이션(RS)을 포함하는 스케줄링 단(1405)까지 uops를 결합한다. 디스패칭 단 내의 제3 크로스바 스위치(1403)는 디스패칭된 uops의 피연산자들을 판독하기 위한 물리적 레지스터 파일들(1406)에게 및 uops가 디스패칭되는 실행 포트들(1407)에게 스케줄링 단(1405)을 결합한다.
대조적으로, 도 14b에서, 몇 개의 크로스바 스위치들 및 다중화기들이 제거된다. 특히, 레지스터 리네이밍 테이블들(또는 RAT)의 특정 유형들에게 및 이 테이블들에서의 특정 판독 또는 기입 포트들에게 이들의 프로그램 순서로 배치되는 명령어들의 논리적 레지스터 피연산자 필드들을 라우팅하는 크로스바(1401)는 레지스터 리네이밍 단(1404)에서 제거된다. 이 크로스바는, VLIW에서의 음절들의 순서화가 직접적으로 RAT 하드웨어 토폴로지와 일치함에 따라, 최적화된 파이프라인에서 과잉의 것이 된다. 그러므로, 도 14b에서, 명령어들 0-3은 직접적으로 리네임/할당 단(1414) 내로 피딩된다. 몇몇 실시예들에서, 비순차적 프로세서들에 대한 종래의 ISA들과 비교하여 더 적은 순서화 제한들이 요구시에 비공개 ISA에서 정의될 수 있어서, 크로스바가 완전히 제거되지는 않지만 그 복잡도, 전력, 대기 시간, 및 면적이 실질적으로 감소되도록 한다.
데이터 흐름 스케줄러(1405)(또는 예약 스테이션들, RS)의 특정 파티션들(또는 논리적 섹션들)에게 이들의 프로그램 순서로 배치되는 명령어들을 라우팅하는 크로스바(1402)가 도 14b에서 스케줄러 할당 단에서 또한 제거된다. 이 크로스바(1402)는, VLIW에서의 음절들의 순서화가 도 14b의 데이터 흐름 스케줄러의 파티션들(1415)의 하드웨어 토폴로지와 일치함에 따라, 최적화된 파이프라인에서 과잉의 것이 된다. 몇몇 실시예들에서, 비순차적 프로세서들에 대한 종래의 ISA들과 비교하여 더 적은 순서화 제한들이 요구시에 비공개 ISA에서 정의될 수 있어서, 크로스바가 완전히 제거되지는 않지만 그 복잡도, 전력, 대기 시간, 및 면적이 실질적으로 감소되도록 한다.
특정 물리적 레지스터 파일들(1406) 및 이들의 특정 판독 포트들에게뿐만 아니라 특정 명령어 실행 포트들(1407)에게 데이터 흐름 스케줄러(RS)(1405)에서 이들의 로케이션들(파티션들)로부터 디스패칭된 명령어를 라우팅하는 크로스바(1403)도 명령어 디스패칭 단에서 제거된다. 이 크로스바도, 데이터 흐름 스케줄러(1415)의 파티션들의 상대적 배치가 레지스터 파일들(1416) 및 이들의 판독 포트들뿐만 아니라 명령어 실행 포트들(1417)의 하드웨어 토폴로지와 정확하게 일치함에 따라, 최적화된 파이프라인에서 과잉의 것이 된다.
당대의 종래 비순차적 프로세서 파이프라인들 중 몇몇은 또한 데이터 흐름 스케줄러(RS)의 파티셔닝된 조직들을 구현하나; 이 특징은 이들이 명령어 디스패칭 단에서의 후자의 크로스바(1406)만을 제거하는 것을 허용하지만, 임의의 다른 크로스바들에 대해서는 그렇지 않다. 게다가, 파티셔닝된 RS를 갖는 종래의 비순차적 파이프라인들은 적절한 파티션들에게 명령어들을 할당하는 것을 스티어링하고 또한 각각의 파티션들과 연관되는 상이한 명령어 실행들 포트들의 활용이 균형화될 것을 확실하게 하는 여분의 하드웨어 유닛들을 구현해야만 한다. 일 실시예에서, 최적화된 비순차적 파이프라인은 여분의 파티션 로드 균형화 하드웨어 유닛들을 요구하지 않고, 이것이 발생시키는 이진 코드에서의 실행 포트 로드 균형화를 하기 위해 코드 최적화기 소프트웨어에게 의지한다. 후자의 로드 균형화 정보는 앞서 언급된 비공개 ISA에서의 VLIW의 음절 순서화 정의들을 통해 최적화된 하드웨어 파이프라인에게 내포적으로 전달된다.
제거된 다중화기들 및 크로스바 스위치들은 최적화된 비순차적 파이프라인에서의 대기 시간의 실질적 축소(즉, 더 높은 클록 주파수를 가능하게 함), 전력, 및 면적에서의 실질적 축소를 이끌어 낸다. 긍정적 효과는, 다중화기들 및 스위치들이 유선 지배적 하드웨어 구조들이고 또한 유선들은 더 미세한 공정들에서 실리콘 디바이스들보다 상대적으로 더 나쁘게 규모 축소가 됨에 따라, 미래의 더 미세한 실리콘 제조 공정들에서 더욱 더 중요해질 것이다.
크로스바 제거는, 크로스바 스위치 스타일 하드웨어 구조들의 면적 및 대기 시간이 이들의 입력들/출력들의 수의 선형 증가에 따른 규모 조정이 어렵기(대략 2차 정도) 때문에, 더 넓은 범위의 프로세서 설계들을 위한 최적화된 비순차적 파이프라인의 하드웨어 구현의 더 나은 확장성을 가능하게 한다. 최적화된 비순차적 파이프라인은, 확장된 VLIW로부터 적절한 파이프라인 파티션들까지 디코딩된 명령어들을 라우팅하기 위해 프론트 엔드 파이프라인에서 여전히 다중화기들을 채택할 수 있다는 것을 주목하는 것이 중요하다. 이것은, 파이프라인의 디스패칭, 실행, 및 라이트백 단들에서의 피연산자 바이패싱을 위해 다중화기들을 여전히 이용할 수 있다(도 15 참조). 나머지 단들에서, 최적화된 비순차적 파이프라인은 다중화기들 및 크로스바 스위치들이 없게 된다.
도 15는 몇 개의 4x파티셔닝된 파이프 라인 단을 포함하는 n 엔트리 데이터 흐름 스케줄러를 가진 최적화된 4 와이드 비순차적 엔진의 일 실시예를 도해한다. 특히, 예시된 실시예는 4개의 디코딩된 명령어(예를 들어, VLIW로부터의 음절들)를 저장하기 위한 4x파티셔닝된 디코딩된 명령어 큐(1501); 프로세서 리소스들에게 명령어들을 할당하기 위한 4x파티셔닝된 할당 유닛(1502); 4x파티셔닝된 (n/4):1 명령어 선택 로직의 세트(1504)를 가진 4x파티셔닝된 n 엔트리 스케줄러 웨이크업 로직 및 예약 스테이션들(1503); 물리적 레지스터 파일들의 세트(1505), 피연산자 바이패싱 로직(1506); 및 복수의 함수 유닛(function unit)(1505)을 포함한다. 일 실시예에서, 스케줄러 웨이크업 로직 및 예약 스테이션들(1503)의 4개의 파티션의 모두에 대해, 실행을 기다리는 n 명령어를 저장하기 위한 총 n개의 엔트리가 있고, 각각의 파티션들은 n 명령어 중 n/4를 저장한다. 예시로, n = 32의 값에 대해, 각각의 파티션들(1503)은 (8 엔트리에서) 32/4 또는 8 명령어를 저장하고, 각각의 선택 로직 파티션들(1504)은 파이프라인에서 이것과 연관되는 8 엔트리 웨이크업 로직 파티션(1503)으로부터 최대 8개까지의 준비된 명령어 중에서 하나를 선택할 수 있다.
일 실시예에서, 스케줄러 웨이크업 로직(1503)의 각각의 파티션은 실행 유닛들(1507)에게의 그런 명령어들의 라우팅을 단순화하기 위해 소정 유형의 명령어들만을 저장하도록 구성될 수 있다. 예를 들어, 도 15에서, 파티션들 #2 및 #3은 ALU 명령어들을 저장할 수 있고, 파티션들 #0 및 #1은 메모리 명령어들을 저장할 수 있다(이러한 명령어들이 파티션들로부터 이들의 제각기 실행 유닛들에게 쉽게 라우팅되기 때문임).
할당 로직(1502)은 스케줄러 웨이크업 로직에서 4 파티션의 각각에게의 단 하나의 기입 포트를 포함한다. 게다가, 4x파티셔닝된 선택 로직(1504)은 파티션들(1503)의 각각에게의 하나의 판독 포트를 포함하고, 주기 당 4개의 명령어 - 파티션들(1503)의 각각으로부터 하나- 를 선택할 수 있다(예를 들어, 일 실시예에서 4개의 8:1 다중화기를 이용함). 그러므로, 파이프라인의 4x파티셔닝은, 스케줄러 웨이크업 로직(1503)에서의 각각의 파티션이 단일 판독 포트 및 단일 기입 포트만을 요구하기 때문에 스케줄러 웨이크업 로직(1503) 및 선택 로직(1504)을 구현하는 데에 요구되는 실리콘 면적을 상당한 정도로 감소시킨다. 즉, 선택 로직(1504)의 각각의 파티션은 (n:4의 전체적 선택 복잡도로 비 파티셔닝된 구현에서 유래하는 n 명령어와는 대조적으로) 4x((n/4):1)의 전체 선택 복잡도로 4개의 파티션의 각각으로부터 n/4 명령어 중 하나를 선택할 수 있는 필요가 있을 뿐이다. 일 실시예에서, 선택 로직(1504)은 실행될 수 있는 모든 가능한 명령어들을 관찰하고(즉, 이들의 피연산자들이 준비되게 하고), 지정된 실행 유닛을 위한 명령어 디스패칭 슬롯들의 가용도 및 명령어들의 할당 연령과 같은 변수들에 기초하여 각각의 파티션으로부터 디스패칭하기 위한 하나의 명령어를 선택한다.
도 15에 도해된 특정 실시예에서, 두 개의 메모리 실행 채널(물리적 레지스터 파일(1505), 피연산자 값 바이패스 유닛(1506), 및 메모리 주소 발생 유닛들(MEM0 및 MEM1)(1507)에게 주소 명령어들 입력을 로드하고 및/또는 저장하기 위한 것임) 및 두 개의 ALU 채널이 있다.
기타 대기 시간, 전력, 및 면적 이익들 중에서도, 스케줄러 파티셔닝은 와이드 이슈 프로세서 설계들에게 더 나은 하드웨어 확장성을 제공한다. 이런 종류의 스케줄러 확장성이 최적화된 비순차적 파이프라인에 고유하지 않고 몇몇 종래의 파이프라인들에서 발견될 수 있기는 하지만, 이는 더 긴 VLIW 포맷들을 비공개 ISA에 정의하고 또한 dBT 최적화기 소프트웨어에 의해 명령어들로 더 긴 VLIW들을 채우는 능력들에 의해 최적화된 파이프라인에서 실질적으로 용이해진다.
(12) 파티셔닝된 명령어 할당 유닛
최적화된 비순차적 파이프라인의 완전 파티셔닝된 조직으로부터 유래하는 또 다른 하드웨어 구현 향상이 명령어 할당 유닛(1502)의 구현과 관계된다. 명령어 할당 유닛(1502)은 비순차적 파이프라인의 할당 단들 동안 작업하고 및 또한 파티셔닝되어, 각각의 그 파티션이 최적화된 파이프라인의 하나의 파티션을 정확히 서빙하고 또한 이것에게 클록 주기당 파티션의 유형(예를 들어, ALU 또는 메모리, 기타 등등)만의 하나보다 많지 않은 명령어를 할당하도록 한다. 파티셔닝된 할당 유닛(1502)은 하드웨어 복잡도 및 전체 면적을 감소시키고, 그에 더하여 더 넓은 비순차적 프로세서 설계들을 위한 훨씬 더 나은 확장성을 갖는다.
(13) 최적화된 비순차적 파이프라인에서의 할당( 기입 ) 포트들의 축소
일 실시예에서, 비공개 ISA는 VLIW에서 허용되는 특정 유형의 명령어들의 최대 개수를 제한할 수 있다. 제한들은 (전술한 바와 같은) 할당 하드웨어 유닛들의 및 최적화된 비순차적 파이프라인에서의 몇몇 관계된 하드웨어 구조들의 추가적 축소와 간단화를 위해 사용될 수 있다.
예를 들어, VLIW가 2개보다 많은 메모리 연산들(두 개의 로드, 또는 하나의 로드 및 하나의 저장, 또는 두 개의 저장)을 포함하지 않을 수 있다면, 도 9에 도시된 바와 같이, LB(Load Buffer) 및 SB(Store Buffer)와 같은 (174)에서의 메모리 순서화 버퍼(Memory Ordering Buffer: MOB)에서의 그와 같은 결정적이고 큰 구조들이(도 1b 참조), 유사한 종래의 비순차적 파이프라인들에서의 MOB들과 비교하여 축소된 수의 할당(기입) 포트들을 가질 수 있다. 종래의 파이프라인들은 동일 유형의 명령어들의 최고 가능한 할당 비율을 하드웨어에서 준비해야만 하는데, 이는 그 할당 비율이 당대의 종래 ISA들(예를 들어, IA)에 의해 제한되지 않기 때문이다. 예를 들어, 기존 아키텍처들은 LB에게 동시적으로 최대 4개까지의 로드들을 할당(기입)할 수 있을 필요가 있다. 여기서 기술된 최적화된 파이프라인에서의 MOB 구조들의 기입 포트들의 축소된 수는 상당한 정도의 면적과 전력 축소를 가져온다.
(14) 최적화된 파이프라인에서의 비순차적 엔진의 비순차적 할당
일 실시예에서, 하드웨어 리소스들의 더 나은 활용이 비순차적 엔진의 비순차적 할당의 결과로서 최적화된 비순차적 파이프라인에서 달성된다. 비순차적 할당의 효과는 dBT 최적화기가 음절들을 VLIW들에 배치하는 것에 대해 비공개 ISA 제한들을 준수하라는 요구로부터 자연적으로 초래된다. 특정하게는, VLIW에서의 음절들 간의 참 데이터 흐름(R-A-W) 및/또는 거짓 출력(W-A-W) 의존성들이 있을 수 없다. dBT 최적화기는, 예를 들어 IA 입력 명령어들을 비공개 RISC 음절들로 번역한 후의 그러나 이들을 VLIW들로 그룹화하기 전의 이들의 적절한 재순서화에 의해 제한들을 충족한다. 정적 코드 재 순서화의 결과로서, 소비자(의존적) 명령어들은 이들의 생산자 명령어들에 대하여 후속 VLIW들로 배치되고; 및 최적화된 비순차적 파이프라인에서의 소비자 명령어들은 이들의 생산자들의 할당의 시간에 대하여 다음 차례의 클록 주기들 중 하나에서만 비순차적 엔진에게 할당된다.
도 9는 명령어들(예를 들어, 번역된 음절들)의 예시적 시퀀스를 도해하고, 비순차적 코드 사전 스케줄링(예를 들어, dBT 최적화기에 의함)의 유익한 효과를 보여준다. 특히, 비순차적 명령어 "윈도"(1600)가 주어진 하드웨어 용량에 대해 활용된다. 음절들은 의존성들에 기초하여 윈도 내로 또는 그 바깥으로 이동된다. 예를 들어, 몇 개의 의존적 명령어들(1602)은 (즉, 그 후의 실행 시간에 대해) 윈도 앞으로 이동되는 것으로 보여지고, 다른 독립적 명령어들(1601)은 (더 이른 실행 시간에 대해) 윈도 내로 이동되는 것으로 보여진다.
소비자 명령어들의 지연된 (비순차적) 할당은 최적화된 비순차적 파이프라인에서의 데이터 흐름 스케줄러의 엔트리들의 및 다른 하드웨어 버퍼 리소스들의 활용에 대한 긍정적 효과를 가지는데, 그 이유는 의존적 명령어가 그 생산자 명령어들 중 최신의 것이 디스패칭된 후에 다음 차례의 클록 주기에서 (가장 일찍이) 단지 디스패칭될 수 있기 때문이다. 어떠한 더 이른 할당도 하드웨어 리소스들을 낭비할 뿐일 것이다.
대조적으로, 종래의 비순차적 파이프라인은 명령어들을 생산하고 소비하는 것 모두를 동일 클록 주기로 상투적으로 할당하여서, 소비자 명령어들에 할당되는 하드웨어 리소스들이 적어도 하나의 클록 주기 동안 낭비되도록 한다. 이것은, 명령어 스트림을 위한 마이크로 코드가 자연스럽게 이들의 생산자 명령어에 인접한 소비자 명령어를 갖는 한편, 그 프론트 엔드 유닛(1001)이 디코딩된 명령어 스트림(예를 들어, IA 스트림)으로부터 발생되는 마이크로코드에서 uops를 재 순서화할 수 없기 때문에 발생한다. 예를 들어, 마이크로코드에서의 uops의 LOAD + ALU 조합들은 프로그램 코드들에 대해 전형적인 것이고 또한 동일 클록 주기에서 비순차적 엔진에게 빈번히 할당된다. 그러므로, 소비자 ALU 명령어는, 생산 로드 연산의 대기 시간에 의존하여 적어도 3-4 클록 주기 동안 종래의 파이프라인에서 하드웨어 리소스들을 낭비할 수 있다.
생산자와 소비자 명령어들의 상대적 할당에서의 차이들의 결과로서, 최적화된 비순차적 파이프라인에서의 주어진 사이즈의 하드웨어 데이터 흐름 스케줄러는 종래의 파이프라인에서의 비슷한 스케줄러보다 더 준비된 명령어들을 평균적으로 관찰한다. 그러므로, 스케줄러의 엔트리들은 최적화된 파이프라인에서 더 잘 이용되고, 그래서 스케줄러의 사이즈가 성능 불이익 없이 감소될 수 있거나, 또는 주어진 사이즈의 스케줄러가 그 성능을 제한하지 않고서 더 크거나 더 넓은 비순차적 프로세서를 서빙할 수 있는데, 즉, 비순차적 할당의 효과는 최적화된 비순차적 파이프라인의 하드웨어 확장성을 향상시킨다.
비공개 ISA 제한들을 준수하기 위해 dBT 소프트웨어 최적화기에 의해 실행되는 VLIW들로의 코드 사전 스케줄링의 부산물로서, 최적화된 비순차적 파이프라인이 어떠한 하드웨어 추가도 없이 비순차적 할당을 가능하게 한다는 것을 유의하는 것이 중요하다.
유사하게, 최적화된 비순차적 파이프라인은 실효적으로, 예를 들어, IA 입력 애플리케이션에서의 이들의 최초 프로그램 순서 중으로부터 명령어들을 페치하고, 디코딩하고, 심지어 리타이어한다. 그럼에도 불구하고, 최적화된 비순차적 파이프라인에서의 프론팅(fronted), 할당 및 리타이어먼트 유닛들은 여전히 자신들의 단순한 순차적 기능들을 실행한다. 유닛들의 하드웨어 사이즈 및 복잡도는, 프론트 엔드에서의 다중 스레딩된 페치, 프론트 엔드에서의 명령어 사전 스케줄링/재순서화 유닛, 기타 등등과 같은, 프론트 엔드 하드웨어와 그것의 복잡도에서의 주목할 만한 증가 없이는 비순차적 페치 및 할당의 유사한 긍정적 효과를 활용할 수 없는 종래의 비순차적 파이프라인에서의 것들보다 실질적으로 더 적거나 또는 적어도 이것들과 동일하다.
(15) 최적화된 비순차적 파이프라인을 위한 하드웨어 향상된 VLIW 코드 스케줄
최적화된 비순차적 파이프라인을 위해 dBT 소프트웨어 최적화기에 의해 실행되는 VLIW들로의 코드 (사전) 스케줄링을 고려하면, 전통적 순차적 VLIW 파이프라인 프로세서들을 위한 비슷한 VLIW 코드 스케줄과 비교해 결과적인 VLIW 코드 스케줄에서의 여러 중요한 향상들을 지적하는 것이 중요하다. 전통적 순차적 VLIW 파이프라인에서, 각각의 VLIW는 페치, 디코딩, 할당(또는 백 엔드 파이프라인에의 전송), 디스패칭, 및 리타이어먼트/커밋의 원자 유닛(atomic unit)이다. 즉, 순차적 파이프라인의 대응 단들이 전체 VLIW에 대해, 즉 모든 그 음절들에 대해 동시에 작용한다.
대조적으로, 최적화된 비순차적 파이프라인에서 VLIW는 페치, 디코딩, 할당, 및 리타이어먼트/커밋의 원자 유닛으로서 역할하지만, 디스패칭에 대해서는 그렇지 않다. 백 엔드 할당 단 동안 VLIW는, 하드웨어 데이터 흐름 스케줄러에 의해, 잠재적으로 비순차적인 이들의 독립적 동적 스케줄링 및 디스패칭 목적을 위해 개별 음절들(RISC 명령어들)로 나누어지게 된다. 하기에서 설명되는 것처럼, 최적화된 비순차적 파이프라인에서의 하드웨어 데이터 흐름 스케줄러의 존재는 이것을 위한 향상된 VLIW 코드 스케줄을 가능하게 한다.
전통적 순차적 VLIW 파이프라인을 위한 소프트웨어 코드 최적화기는 명령어들의 정확한 (및 슈퍼스칼라, 즉, 병렬) 디스패칭 시퀀스를 발생하는 것을 담당하고 있다. 디스패칭 시퀀스에 이어서 순차적 파이프라인이 정확히 따라온다. 그러므로, 의존적 명령어들은, 적어도 생산 명령어들의 정확한 대기 시간까지 만큼 종래의 VLIW 스케줄에서 이들의 생산 명령어들을 추종해야만 한다. 단일 주기 생산자들에 대해, 소비자들은 스케줄에서 다음 차례의 VLIW에 배치될 수 있다. 반면에, 다중 주기 로드들의 소비자들에 대해서는, (순차적 파이프라인에서의 최대 디스패칭 비율이 클록 주기당 하나의 VLIW인 것임에 따라, VLIW들의 수에서의) 전체 로드 대기 시간이 소비자들이 VLIW 코드에 배치될 수 있기 전에 건너 뛰어져야만 한다.
이것은, 높은 트립 카운트(trip count)를 가진 가장 내측의 루프들과 같이, 본래적으로 높은 명령어 레벨 병렬성 및 정적으로 예측 가능한 제어 흐름을 가진 스케줄링 코드들에 대해 큰 문제점을 나타내지 않는데, 그 이유는 다중 주기 생산자들과 이들의 소비자들 사이의 VLIW들에서의 모든 비어 있는 음절들이 다른 독립적 명령어들로 소프트웨어 최적화기에 의해 쉽게 채워질 수 있기 때문이다.
그러나, 낮은 고유 병렬성을 가지고 또한 많은 조건부 브랜치들을 가진 스케줄링 코드들에 대해서는, 종래 VLIW 소프트웨어 최적화기는, 하드웨어 파이프라인이 코드 스케줄에서의 모든 다중 주기 생산자들과 이들의 소비자들 사이의 정확한 대기 시간들을 보는 것을 단지 보장하기 위해, 코드 스케줄에게 많은 no-ops를 투입해야만 한다. no-ops는 순차적 하드웨어 파이프라인에서의 버블(bubble)들을 초래하고 또한 Itanium® 프로세서 패밀리(IPF)에서의 것들과 같은, 전통적 VLIW 프로세서들에서의 하드웨어 리소스들의 과소 할당(즉, 과소 활용)을 야기한다.
최적화된 비순차적 파이프라인의 일 실시예는 전통적 VLIW 코드 스케줄에서 발견되는 비효율성들을 완화하는 하드웨어 메커니즘들을 포함한다. 특정하게는, 낮은 병렬성을 가진 코드들에 대해, dBT 최적화기는, 이것이 발생하는 향상된 VLIW 코드 스케줄에서, 실제 명령어 대기 시간들을 강제하는 것이 아니라, 전적으로 하드웨어에서 명령어들의 긴 대기 시간을 동적으로 감당하는 비순차적 엔진의 능력에 의지하고 또한 해당 모든 명령어들이 단위(하나의 클록 주기) 대기 시간을 가진다고 가정한다. 단위 대기 시간 가정(unit latency assumption)은 전통적 VLIW 스케줄과 비교하여 스케줄을 훨씬 더 빡빡하게(콤팩트하게) 만들고 또한 no-ops가 없도록 하며, 이는 백 엔드 할당 비율을 증가시키지만 최적화된 비순차적 파이프라인에게 명령어들 사이의 정확한 의존성들에 대한 충분한 정보를 여전히 제공한다.
더 높은 병렬성을 가진 코드들에 대해, 최적화된 비순차적 파이프라인을 위한 dBT 소프트웨어 최적화기의 일 실시예는 명령어들, 주로 로드 명령어들의 실제 대기 시간들, 및 이것의 더 빠른 실행 목적을 위한 번역된 코드 영역에서의 특정 명령어들의 상대적 중요도(criticality) 정도 모두를 고려한다. 그 결과, 높은 병렬성을 가진 코드들에 대해 향상된 VLIW 코드 스케줄은 전통적 VLIW 코드 스케줄의 대부분의 특징들을 획득한다: 생산자 및 소비자 명령어들은 생산자의 대기 시간을 적어도 부분적으로 해결하기 위해 스케줄에서 분리되고, 더 중요한 명령어들은 VLIW 코드 스케줄에서 이들의 더 이른 배치를 통해 덜 중요한 명령어들에 앞서서 비순차적 엔진에 할당된다. 즉, 높은 병렬성을 가진 코드들에서의 다중 주기 명령어 대기 시간들은 전적으로 비순차적 엔진의 하드웨어에 의해서가 아니라, VLIW 코드 스케줄을 통해 (부분적으로) 감당된다. 향상된 VLIW 코드 스케줄은 아직 빡빡하고(콤팩트하고) no-ops가 없다. 최적화된 비순차적 파이프라인에 의한 코드 스케줄의 실행은 높은 명령어 레벨 병렬성(ILP)을 가진 코드들에 대한 보다 나은 성능을 이끌어 내고, 앞서 언급한 대로 종래의 비순차적 파이프라인과 비교하여 비순차적 하드웨어 리소스들의 더 나은 활용을 또한 허용한다.
일 실시예에서, 최적화된 비순차적 파이프라인을 위한 향상된 VLIW 코드 스케줄은 편의주의적으로(opportunistically) 발생된다: 코드 스케줄은 명령어들 사이의 의존성들을 정확하게 반영해야 하지만(의존적 명령어들이 별개의 VLIW들에 배치됨), 이들의 소비 명령어들의 배치에 있어서 생산 명령어들의 최소 대기 시간들을 정확하게 추종하지 않을 수 있다. 이 향상은 (예를 들어, IPF 프로세서들에서와 같이) 유사 VLIW ISA 속성들에 의지하는 전통적 순차적 하드웨어 파이프라인들과 비교해서, 최적화된 비순차적 파이프라인에서 훨씬 더 좋은 코드 스케줄 밀도 및 명령어 할당 비율들을 가능하게 한다.
게다가, 최적화된 비순차적 파이프라인을 위한 향상된 VLIW 코드 스케줄은 생산자와 소비자 명령어들을 동일한 VLIW에 배치시키지 않고 그러므로 이들이 동일 클록 주기에서 비순차적 엔진에 할당되는 것을 방지함으로써, 종래의 비순차적 엔진에 전형적인 비순차적 엔진의 하드웨어 리소스들의 과다 할당을 줄인다.
(16) ISA 최적화된 명령어 리타이어먼트 유닛
일 실시예에서, 최적화된 비순차적 파이프라인의 리타이어먼트/커밋 영역(1013)에 자리 잡은 리타이어먼트 유닛은 클록 주기당 최대 하나의 VLIW까지(dBT 최적화기에 의해 정적으로 미리 정의됨) VLIW 그래뉼래리티로 엄격하게 명령어들을 리타이어시킨다. 대조적으로, 종래의 비순차적 파이프라인은 리타이어먼트를 위해 uops의 슈퍼스칼라 그룹("라인")을 하드웨어에서 동적으로 선택하고 및 선택동안 가능한 계류중 인터럽트들 및/또는 예외뿐만 아니라 uops의 "라인들"의 리타이어링 스트림에서의 최초 매크로 명령어들(ISA) 사이의 경계들을 해결해야 한다.
일 실시예에서, 할당 파이프라인 세그먼트(1502)와 유사하게, (1013)에서의 리타이어먼트 파이프라인 세그먼트의 하드웨어 구현은, dBT 소프트웨어 최적화기가 자신이 코드를 발생할 때 준수하는 비공개 ISA에 정의되는 VLIW에서의 음절들에 대한 제한들 때문에 최적화된다. 특정하게는, 일 실시예에서, VLIW에서의 음절들 사이에 어떠한 거짓 출력 의존성들(W-A-W)도 없고 또한 (메모리 연산들을 제외하고) VLIW에서의 어떠한 프로그램 순서화도 없어서, 리타이어먼트 유닛 하드웨어가 의존성들에 대한 검사들을 실행하지 않을 수 있고 또한 종래의 비순차적 파이프라인들에서의 유사 유닛들과는 달리 리타이어먼트 동안 순서화를 무시할 수 있도록 한다. 제거된 의존성 및 순서화 검사 로직은 와이드 이슈 비순차적 프로세서 설계들에 대해 종래의 리타이어먼트 유닛에서 전형적으로 확장성이 가장 나쁜 하드웨어이다. 게다가, 단 하나의 VLIW가 일 실시예에서 클록 주기당 리타이어되기 때문에, 최적화된 리타이어먼트 파이프라인에서의 예외 검출 및 프로그램 카운터 갱신 메커니즘들은 이것이 uops 레벨의 "라인들"에서 매크로 명령어들(ISA) 사이의 경계들을 주의 깊게 다루기 위해 종래의 비순차적 파이프라인에서 uops의 슈퍼스칼라 리타이어먼트에 대해 전형적으로 행해지므로, 슈퍼스칼라(즉, 병렬) 리타이어먼트에 대해 되풀이될 필요가 없다.
모든 이러한 특징들은 매우 높은 피크 처리량을 가진 ISA 최적화된 리타이어먼트 유닛의 단순화되고 느슨하게 결합된 파티셔닝된 하드웨어 구현을 허용한다.
완전성을 위해, 최적화된 비순차적 파이프라인에서의 재 순서화 버퍼(ROB)가 최적화된 파티셔닝된 할당 및 리타이어먼트 유닛들과의 향상된 통합을 가능하게 하고 또한 와이드 이슈 비순차적 프로세서 설계들을 위한 더 큰 하드웨어 확장성을 지원하기 위해 전체적으로 또는 부분적으로 파티셔닝된 방식으로 또한 구현될 수 있다는 것을 주목하는 것이 중요하다.
리타이어먼트 유닛의 이러한 최적화들은 최적화된 비순차적 파이프라인에서의 정확히 아키텍트된 레지스터 및 메모리 상태가 각각의 VLIW의 정확도로(예를 들어, dBT 최적화기 소프트웨어에 의해 정적으로 발생되는 인접한 VLIW들 사이의 경계들에서) 지원되는 것을 함의한다. 정확한 상태는 하드웨어 인터럽트들, 실행 예외들, 고장들, 기타 등등을 다루기 위해 일 실시예에서 이용된다.
최적화된 비순차적 파이프라인의 일 실시예는 아키텍트된 레지스터 및 메모리 상태에 대한 비공개 ISA 정의를 지원한다. 대응하는 정확한 최초 이진 코드(예를 들어, IA) 상태에게의 정확한 비공개 ISA 상태의 신뢰할만한 매핑을 확립하고 또한 이것이 소프트웨어 애플리케이션의 실행에 대해 요구될 때 그리고 이것이 최초 이진 코드(예를 들어, IA)의 ISA에 의해 내포되므로, 후속하는 정확한 레지스터 및 메모리 상태를 재구축할 수 있는 것은 dBT 소프트웨어의 책임이다.
(17) 비순차적 파이프라인의 ISA 최적화된 클러스터링된 조직
최적화된 비순차적 파이프라인의 일 실시예는 비공개 ISA 특징 및 dBT 최적화기 소프트웨어 지원을 통해 클러스터링된 비순차적 마이크로 아키텍처들의 효율적 구현을 가능하게 한다. 클러스터링된 마이크로 아키텍처들은 그렇지 않았더라면 모놀리식이고 큰 하드웨어 구조들 및 리소스들이었을 것을 더 작은 부분들(클러스터들)로 나누어서, 이들의 물리적 구현이 더 단순하게 되고 또한 각각의 부분들이 더 낮은 대기 시간을 가지고 또한 대응하는 모놀리식 하드웨어 구조들보다 더 높은 클록 주파수로 실행될 수 있음에 따라 하드웨어 확장성이 향상되도록 한다.
클러스터링된 마이크로 아키텍처의 전형적 적용은, 물리적 레지스터 파일 및/또는 피연산자 바이패스 네트워크를, 둘 이상의 더 작은 클러스터들, 예를 들어, 두 개의 4 와이드 모놀리식 실행 클러스터로서 구현되고 4 와이드 프로세서의 클록 주파수로 실행되는 8 와이드 비순차적 프로세서로 나누는 와이드 이슈 프로세서 설계에 있다. 그러나, 이 클러스터링된 하드웨어는, 개별 클러스터들 사이의 데이터 액세스들 및 전송들을 위한 대기 시간들이 클러스터 내에 대한 또는 더 작은 모놀리식 비순차적 마이크로 아키텍처들에 대한 것들보다 더 크게 되기 때문에 원래적 성능 오버헤드를 갖는다.
클러스터 간의 통신의 여분의 대기 시간들은, 코드를 실행함에 있어서의 중요 데이터 의존성이 클러스터들에 걸쳐서 스케줄링될 때 전형적으로 전체적 실행 시간에서 노출되고, 그러므로 하드웨어 구조들의 비슷한 논리적 사이즈 및/또는 용량을 가진 가상의(그러나 반드시 그럴듯하지는 않은) 큰 모놀리식 비순차적 마이크로 아키텍처에 대하여 성능을 떨어뜨리는 클러스터 간의 통신의 대기 시간을 통합한다.
그러므로, 클러스터링된 비순차적 마이크로 아키텍처의 효율성은, 실행의 실효 중요 경로가 클러스터 경계들을 가로지르는 - 성능 저하의 주요 원인임- 비율을 최소화하기 위해, 클러스터 간의 대기 시간의 노출이 적절한 클러스터들에게 명령어들을 할당하는 스티어링을 통해 얼마나 잘 완화되는지에 달려 있다.
클러스터링된 마이크로 아키텍처들에서의 최적 명령어 스티어링 메커니즘들의 구현은 도전적 과제라고 널리 생각된다. 순진한 명령어 스티어링 기술은 동일한 이슈 폭의 모놀리식 비순차적 파이프라인 베이스라인에 대하여 큰(예를 들어, 20%-30%) 성능 저하를 야기하여, 클러스터링된 와이드 이슈 비순차적 프로세서의 하드웨어 효율성을 손상시킨다.
더 정밀한 명령어 스티어링 발견적 방법은 페치된 코드의 중요 경로 분석을 행하고 적절한 스티어링 결정들을 발생하기 위해 추가 하드웨어를 요구할뿐만 아니라 분석 범위에 있어서 매우 제한되는데, 그 이유는 하드웨어가 최적 스티어링 판정들을 결정하기 위해 명령어들을 할당하는 것에 관한 충분하고 및/또는 신뢰성 있는 맥락 정보를 갖지 못할 때, 비순차적 백 엔드에게의 명령어 할당 전에 스티어링 결정이 프론트 엔드 파이프라인에서 이루어져야만 하기 때문이다. 이 원래적 어려움 때문에, 종래의 비순차적 파이프라인들에 대한 어떤 실제적으로 온전한 클러스터 구현도 개발되지 않았다.
대조적으로, 최적화된 비순차적 파이프라인의 일 실시예에서, dBT 소프트웨어 최적화기는 정규 코드 스케줄링 과정의 일부로서, 그 번역 시간에 코드의 중요 경로 속성들을 분석한다. dBT 최적화기는 충분한 맥락 정보를 자연적으로 가지며 또한 최적화된 비순차적 파이프라인이 코드 실행 동안 추종하기 위한 충분히 최적인 스티어링 판정들을 자신이 정적으로 (코드 변환 시간에) 행하도록 허용하는, 코드의 큰 영역들에서의 명령어 의존성들의 중요도를 고려에 넣는다.
최적화되고 클러스터링된 비순차적 파이프라인에서의 명령어 스티어링을 위한 이러한 dBT 가능해진 기술은 클러스터링된 조직과 모놀리식 비순차적 마이크로 아키텍처 조직 사이의 효율성 및 성능 격차를 현저하게 (1%-3%까지 낮춤) 메워 주는데, 이것은 고급 사양의 매우 와이드한 비순차적 프로세서 설계들을 위한 하드웨어 확장성을 상당히 향상시켜서, 상용 제품 관점에서 이들이 실현 가능하도록 한다.
일 실시예에서, 클러스터들에 대한 명령어 스티어링을 표시하는 정보는 비공개 ISA에서 정의되는 스티어링 제어 특징들을 통해, 명시적으로 최적화된 비순차적 파이프라인에게 전달되는데, 이 특징들은 ISA에 의해 정의되는 VLIW에서의 음절들을 위한 전체적 순서화 제한들의 핵심부(integral part)로서 구현될 수 있다. 이것은, 예를 들어, 위치들이 앞서 기술된 것처럼 최적화된 비순차적 파이프라인에서 특정한 실행 유닛 포트들에 매핑될 수 있는 방법과 유사하게, 또는 듀얼 클러스터 마이크로 아키텍처 조직을 위한 음절 인코딩에서의 1 비트 클러스터 스티어링(더 많은 비트들이 더 큰 수의 클러스터들을 위한 스티어링 힌트들을 인코딩하는 데 필요할 것이다)을 통해, 특정 하드웨어 클러스터들에게의 VLIW에서의 특정 음절 위치들의 정적 매핑을 이용하여 성취될 수 있다.
(18) 최적화된 비순차적 파이프라인에 대한 잡다한 언급들
최적화된 비순차적 파이프라인의 실시예들은 기존 이진 코드들(예를 들어, IA)의 대다수의 알려진 또는 "고전적" dBT 최적화들의 효율적 구현들을 허용한다. 그와 같은 최적화들의 예들로는 추론적 루프 불변 코드 이동, (레지스터 프로모션으로도 알려진) 추론적 레지스터값 유출 및 채움 코드(register value spill and fill code) 최적화, 추론적 제어 흐름 최적화들(단 하나의 경로 조건부 및/또는 간접적 브랜치들에 바이어싱된 것의 제거, IF 변환, 코드 직선화(code straightening)), 기타 등등이 있지만 이것들에만 한정되지는 않는다. 덧붙여, 당대의 비순차적 프로세서들에서 이용할 수 있는 대다수의 하드웨어만의 비순차적 파이프라인 최적화들은 "있는 그대로" 구현되거나, 또는 최적화된 비순차적 파이프라인에서의 공동 설계된 하드웨어/소프트웨어로서 이들을 구현함으로써 단순화되고 향상될 수 있다. 그와 같은 최적화들의 예들로는 명령어 융합(fusion), 이동 명령어 소거, 제로 관용구 명령어 소거, 초기 물리 레지스터 재이용, SLE(speculative lock elision), 기타 등등이 있는데, 이것들에만 제한되지는 않는다.
본 발명의 실시예들은 앞에서 기술된 다양한 단계들을 포함할 수 있다. 이 단계들은 범용 또는 특수 목적 프로세서가 단계들을 실행하게 야기하는데 사용될 수 있는 기계 실행 가능 명령어들로 구현될 수 있다. 대안적으로, 이 단계들은 단계들을 실행하기 위한 고정 배선 로직을 포함하는 특정 하드웨어 컴포넌트들에 의해, 또는 프로그래밍된 컴퓨터 컴포넌트들 및 커스텀 하드웨어 컴포넌트들의 임의의 조합에 의해 실행될 수 있다.
본 명세서에서 기술되는 대로, 명령어들은 비일시적 컴퓨터 판독가능 매체에 구현되는 메모리에 저장되는 미리 정해진 기능 또는 소프트웨어 명령어들을 갖거나 특정한 연산들을 실행하도록 구성되는 주문형 직접 회로들(ASIC들)과 같은 하드웨어의 특정 구성들을 가리킬 수 있다. 그러므로, 도면들에 도시된 기술들은 하나 이상의 전자 장치들(예를 들어, 종단 국, 네트워크 요소, 기타 등등)상에 저장되고 실행되는 코드 및 데이터를 이용하여 구현될 수 있다. 이런 전자 장치들은 비일시적 컴퓨터 기계 판독 가능 저장 매체(예를 들어, 자기 디스크들; 광 디스크들; 랜덤 액세스 메모리; 판독 전용 메모리; 플래시 메모리 디바이스들; 상변화 메모리) 및 일시적 컴퓨터 기계 판독 가능 통신 매체(예를 들어, 전기, 광, 음향 또는 다른 형태의 전파된 신호들 - 예를 들어, 반송파들, 적외선 신호들, 디지털 신호들, 기타 등등)와 같은 컴퓨터 기계 판독 가능 매체를 이용해서 코드 및 데이터를 저장하고(내부적으로 및/또는 네트워크를 통해 다른 전자 장치들과) 통신한다. 덧붙여, 이러한 전자 장치들은 통상적으로, 하나 이상의 저장 디바이스들(비일시적 기계 판독가능 저장 매체), 사용자 입/출력 디바이스들(예를 들어, 키보드, 터치스크린, 및/또는 디스플레이), 및 네트워크 연결들과 같은 하나 이상의 다른 컴포넌트들에게 결합되는 하나 이상의 프로세서들의 세트를 포함한다. 프로세서의 세트와 다른 컴포넌트들의 결합은 통상적으로 하나 이상의 버스들 및 브리지들(버스 컨트롤러라고도 부름)을 통해 이루어진다. 저장 장치 및 네트워크 트래픽을 전달하는 신호들은 제각기 하나 이상의 기계 판독 가능 저장 매체 및 기계 판독 가능 통신 매체를 나타낸다. 그러므로, 주어진 전자 장치의 저장 장치는 통상적으로 해당 전자 장치의 하나 이상의 프로세서들의 세트상에서의 실행을 위한 코드 및/또는 데이터를 저장한다. 물론, 본 발명의 실시예의 하나 이상의 부분들은 소프트웨어, 펌웨어, 및/또는 하드웨어의 상이한 조합을 이용하여 구현될 수 있다. 이 상세한 설명 전체에 걸쳐서, 설명 목적을 위해, 수많은 특정 상세 사항들이 본 발명의 철저한 이해를 제공하기 위해 제시되었다. 그러나, 본 발명은 이들 특정 상세 사항의 일부가 없어도 실시될 수 있다는 것을 통상의 기술자라면 이해할 것이다. 소정 예들에서, 공지된 구조들 및 기능들은 본 발명의 주제를 모호하게 하는 것을 방지하기 위해 정교한 세부 사항으로 기술되지는 않았다. 그에 따라서, 본 발명의 범위 및 사상은 하기 청구항 기준으로 판정해야만 한다.

Claims (27)

  1. 메모리로부터 프로그램 순서로 VLIW들(Very Long Instruction Words)을 페치하기 위한 명령어 페치 유닛 - 상기 VLIW들 각각은 음절들 사이의 데이터 흐름 의존성들 및 거짓 출력 의존성들(false output dependencies)을 제거하는 순서로 상기 VLIW들 내로 그룹화된 복수의 RISC(reduced instruction set computing) 명령어 음절을 포함함 -;
    프로그램 순서로 상기 VLIW들을 디코딩하고, 병렬로 각각의 디코딩된 VLIW의 상기 음절들을 출력하기 위한 디코딩 유닛; 및
    다른 음절들과 병렬로 상기 음절들의 적어도 일부를 실행하기 위한 비순차적 실행 엔진 - 상기 음절들의 적어도 일부는 이들이 상기 디코딩 유닛으로부터 수신되는 순서와는 상이한 순서로 실행되고, 상기 비순차적 실행 엔진은 연산들을 실행할 때 상기 음절들 사이의 데이터 흐름 의존성들 및 거짓 출력 의존성들을 검사하지 않는 하나 이상의 처리 단들을 가짐 -
    을 포함하는 장치.
  2. 제1항에 있어서, 상기 비순차적 실행 엔진은 다중화기 및/또는 논리적 레지스터 피연산자 비교기들의 사용 없이 논리적 레지스터 피연산자들을 판독하기 위한 판독 위상을 구현하기 위한 레지스터 리네이밍 로직을 포함하는 장치.
  3. 제2항에 있어서, 상기 비순차적 실행 엔진은 함수 유닛(functional unit)들에 의한 실행을 위해 음절들의 스케줄링 전에 상기 음절들 사이의 의존성들을 평가하기 위한 스케줄러 설정 로직을 더 포함하고, 상기 스케줄러 설정 로직은 상기 레지스터 리네이밍 로직의 판독 위상과 병렬로 실행되는 장치.
  4. 제3항에 있어서, 상기 스케줄러 설정 로직은, 특정한 디스패치된 음절들의 효과들을 소거시키기 위해 상기 비순차적 실행 엔진에 의해 이용가능한 소거 설정 로직과 병렬로 각각의 음절에 대해 추가로 연산하기 위한 것인 장치.
  5. 제1항에 있어서,
    고급 프로그래밍 언어 또는 공개 ISA(instruction set architecture) 포맷으로부터의 프로그램 코드를 상기 VLIW들 및 음절들을 포함하는 비공개(private) ISA 포맷으로 번역하기 위한 번역기
    를 더 포함하는 장치.
  6. 제5항에 있어서, 상기 번역기는 동적 이진 번역기를 포함하지만 이에 한정되지는 않는 이진 번역기 또는 최적화 컴파일러를 포함하는 장치.
  7. 제6항에 있어서, 상기 번역기는, 상기 비공개 ISA 포맷으로 번역할 때 데이터 흐름 의존성들 및 거짓 출력 의존성들을 해소하여, 메모리로부터 순차적으로 페치되는 VLIW들 각각에 포함되는 상기 음절들이 데이터 흐름 의존성들 및 거짓 출력 의존성들을 갖지 않도록 하는 장치.
  8. 제7항에 있어서, 상기 데이터 흐름 의존성들은 기입 후 판독("R-A-W") 의존성들을 포함하고 상기 거짓 출력 의존성들은 기입 후 기입("W-A-W") 의존성들을 포함하는 장치.
  9. 제8항에 있어서, 상기 번역기는 VLIW 내의 거짓 반 데이터 흐름 의존성들(false anti-data-flow dependencies)을 허용하는 장치.
  10. 제9항에 있어서, 상기 거짓 반 데이터 흐름 의존성들은 판독 후 기입("W-A-R") 의존성들을 포함하는 장치.
  11. 제1항에 있어서, 상기 음절들은 하나 이상의 제어 음절들, 하나 이상의 부동 소수점 벡터 음절들, 하나 이상의 메모리 음절들, 및/또는 하나 이상의 정수 ALU 음절들의 임의의 조합을 포함하는 다중 유형을 가지고, 각각의 음절은 대응 유형의 RISC 명령어에 의해 표현될 수 있는 장치.
  12. 제11항에 있어서, 상기 음절 유형은 VLIW에서의 음절의 허용된 상대적 위치에 의해 정의되는 장치.
  13. 제1항에 있어서, 상기 비순차적 실행 엔진은 음절들의 비 추론적 조기 디스패치(non-speculative early dispatch)를 실행하기 위한 디스패치 로직을 포함하는 장치.
  14. 제1항에 있어서, 상기 비순차적 실행 엔진은 N개의 파티션들을 갖는 레지스터 리네임/할당 유닛 및 N개의 파티션들을 갖는 스케줄러 유닛을 포함하고 완전히 파티셔닝되는 장치.
  15. 제14항에 있어서, 상기 파티션들은 특정한 유형들의 명령어들을 핸들링하도록 물리적으로 배치되는 장치.
  16. 제15항에 있어서, 상기 스케줄러 유닛에서의 제1 파티션은 제1 유형의 실행 유닛과 연관되고 상기 스케줄러 유닛에서의 제2 파티션은 제2 유형의 실행 유닛과 연관되는 장치.
  17. 제14항에 있어서, 상기 리네임/할당 유닛과 상기 스케줄러 유닛의 파티셔닝은 상기 비순차적 실행 엔진, 및/또는 로드 및 저장 버퍼들을 포함하는 메모리 순서화 버퍼에서의 기입 포트들의 수를 감소시키는 장치.
  18. 제5항에 있어서, 상기 공개 ISA는 인텔 아키텍처(IA)를 포함하는 장치.
  19. 공개 ISA 포맷으로부터의 프로그램 코드를 VLIW들을 포함하는 비공개 ISA 포맷으로 번역하기 위한 번역기 - 상기 VLIW들 각각은 음절들 사이의 데이터 흐름 의존성들 및 거짓 출력 의존성들을 제거하는 순서로 상기 VLIW들 내로 그룹화되는 복수의 음절을 포함함 -; 및
    다른 음절들과 병렬로 상기 음절들의 적어도 일부를 실행하기 위한 비순차적 실행 엔진 - 상기 음절들의 적어도 일부는 이들이 상기 비순차적 실행 엔진에 의해 수신되는 순서와는 상이한 순서로 실행되고, 상기 비순차적 실행 엔진은 상기 음절들을 핸들링할 때 상기 음절들 사이의 데이터 흐름 의존성들 및 거짓 출력 의존성들을 검사하지 않는 하나 이상의 처리 단들을 포함함 -
    을 포함하는 장치.
  20. 제19항에 있어서, 상기 단들 중 적어도 하나의 단은 다중화기 또는 논리적 레지스터 피연산자 비교기들을 사용하지 않고 음절들의 물리적 레지스터 피연산자들을 판독하기 위한 판독 위상을 구현하는 레지스터 리네이밍 단을 포함하는 장치.
  21. 제20항에 있어서, 상기 비순차적 실행 엔진은 실행 유닛들에 의한 실행을 위해 음절들의 스케줄링 전에 상기 음절들 사이의 레지스터 데이터 흐름 의존성들을 평가하기 위한 스케줄러 설정 로직을 더 포함하고, 상기 스케줄러 설정 로직은 상기 레지스터 리네이밍 로직의 판독 위상과 병렬로 실행되는 장치.
  22. 제21항에 있어서, 상기 스케줄러 설정 로직은, 특정한 디스패치된 음절들의 효과들을 소거시키기 위해 상기 비순차적 실행 엔진에 의해 이용가능한 소거 설정 로직과 병렬로 각각의 음절에 대해 추가로 연산하기 위한 것인 장치.
  23. 제19항에 있어서, 상기 번역기는 최적화 컴파일러 또는 이진 번역기를 포함하는 장치.
  24. 제7항에 있어서, 상기 데이터 흐름 의존성들은 기입 후 판독("R-A-W") 의존성들을 포함하고 상기 거짓 출력 의존성들은 기입 후 기입("W-A-W") 의존성들을 포함하는 장치.
  25. 공개 ISA 포맷으로부터의 프로그램 코드를 VLIW들을 포함하는 비공개 ISA 포맷으로 번역하는 단계 - 상기 VLIW들 각각은 음절들 사이의 데이터 흐름 의존성들 및 거짓 출력 의존성들을 제거하는 순서로 상기 VLIW들 내에 그룹화되는 복수의 음절을 포함함 -; 및
    다른 음절들과 병렬로 비순차적 실행 엔진에 의해 상기 음절들의 적어도 일부를 실행하는 단계 - 상기 음절들의 적어도 일부는 이들이 상기 비순차적 실행 엔진에 의해 수신되는 순서와는 상이한 순서로 실행되고, 상기 비순차적 실행 엔진은 상기 음절들을 핸들링할 때 상기 음절들 사이의 데이터 흐름 의존성들 및 거짓 출력 의존성들을 검사하지 않는 하나 이상의 처리 단들을 포함함 -
    를 포함하는 방법.
  26. 제25항에 있어서, 상기 번역기는 최적화 컴파일러 또는 이진 번역기를 포함하는 방법.
  27. 제26항에 있어서, 상기 데이터 흐름 의존성들은 기입 후 판독("R-A-W") 의존성들을 포함하고 상기 거짓 출력 의존성들은 기입 후 기입("W-A-W") 의존성들을 포함하는 방법.
KR1020150026821A 2014-03-28 2015-02-25 동적 비순차적 프로세서 파이프라인을 구현하기 위한 방법 및 장치 KR101754462B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/228,690 2014-03-28
US14/228,690 US9612840B2 (en) 2014-03-28 2014-03-28 Method and apparatus for implementing a dynamic out-of-order processor pipeline

Publications (2)

Publication Number Publication Date
KR20150112774A true KR20150112774A (ko) 2015-10-07
KR101754462B1 KR101754462B1 (ko) 2017-07-05

Family

ID=52630858

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150026821A KR101754462B1 (ko) 2014-03-28 2015-02-25 동적 비순차적 프로세서 파이프라인을 구현하기 위한 방법 및 장치

Country Status (7)

Country Link
US (2) US9612840B2 (ko)
JP (2) JP6043374B2 (ko)
KR (1) KR101754462B1 (ko)
CN (1) CN104951281B (ko)
DE (1) DE102015002383A1 (ko)
GB (1) GB2524619B (ko)
TW (1) TWI599949B (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170060843A (ko) * 2015-11-25 2017-06-02 삼성전자주식회사 Vliw 인터페이스 장치 및 제어 방법
WO2020138663A1 (ko) * 2018-12-26 2020-07-02 (주)자람테크놀로지 사용자 정의 명령어 셋을 지원하는 하드웨어 고속 연산 결합형 risc-v 기반 연산 장치 및 그 방법

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9436476B2 (en) * 2013-03-15 2016-09-06 Soft Machines Inc. Method and apparatus for sorting elements in hardware structures
US9612840B2 (en) * 2014-03-28 2017-04-04 Intel Corporation Method and apparatus for implementing a dynamic out-of-order processor pipeline
US11561792B2 (en) * 2015-06-08 2023-01-24 Qualcomm Incorporated System, apparatus, and method for a transient load instruction within a VLIW operation
US20170177542A1 (en) * 2015-12-16 2017-06-22 Cognitive Systems Corp. Operating a VLIW Processor in a Wireless Sensor Device
US20170315812A1 (en) 2016-04-28 2017-11-02 Microsoft Technology Licensing, Llc Parallel instruction scheduler for block isa processor
US10552152B2 (en) * 2016-05-27 2020-02-04 Arm Limited Method and apparatus for scheduling in a non-uniform compute device
CN106066434B (zh) * 2016-05-31 2018-10-19 国网河北省电力公司电力科学研究院 一种电能表自动化检定流水线健康程度评价方法
US10445100B2 (en) 2016-06-09 2019-10-15 International Business Machines Corporation Broadcasting messages between execution slices for issued instructions indicating when execution results are ready
US10331454B2 (en) * 2016-09-29 2019-06-25 Intel Corporation System and method for load balancing in out-of-order clustered decoding
CN107977305B (zh) * 2016-10-24 2019-05-03 百度在线网络技术(北京)有限公司 用于检测应用的方法和装置
CN106681812B (zh) * 2016-12-14 2020-09-29 西北工业大学 一种分区调度方法
US10318433B2 (en) * 2016-12-20 2019-06-11 Texas Instruments Incorporated Streaming engine with multi dimensional circular addressing selectable at each dimension
US10489204B2 (en) 2017-01-31 2019-11-26 Samsung Electronics Co., Ltd. Flexible in-order and out-of-order resource allocation
US10672175B2 (en) * 2017-04-17 2020-06-02 Intel Corporation Order independent asynchronous compute and streaming for graphics
US10186011B2 (en) * 2017-04-28 2019-01-22 Intel Corporation Programmable coarse grained and sparse matrix compute hardware with advanced scheduling
US10719325B2 (en) * 2017-11-07 2020-07-21 Qualcomm Incorporated System and method of VLIW instruction processing using reduced-width VLIW processor
JP7102840B2 (ja) * 2018-03-26 2022-07-20 日本電気株式会社 プロセッサコア、命令制御方法、プログラム
US11188337B2 (en) * 2018-09-28 2021-11-30 The Florida State University Research Foundation, Inc. Micro-architecture designs and methods for eager execution and fetching of instructions
CN109918134B (zh) * 2019-03-06 2023-05-30 湖南科技大学 用于vliw基本块调度的组合启发式指令选择优化方法
US10956168B2 (en) * 2019-03-08 2021-03-23 International Business Machines Corporation Post completion execution in an out-of-order processor design
US10733016B1 (en) * 2019-04-26 2020-08-04 Google Llc Optimizing hardware FIFO instructions
US11392378B2 (en) * 2019-07-25 2022-07-19 Arm Limited Executing a set of load operations for a gather-load instruction and controlling handling of another instruction that depends on completion of the gather-load instruction
US11848980B2 (en) * 2020-07-09 2023-12-19 Boray Data Technology Co. Ltd. Distributed pipeline configuration in a distributed computing system
CN111857832B (zh) * 2020-07-15 2023-10-20 国家电网有限公司能源互联网技术研究院 一种超长指令插入判断方法及系统
CN112286456B (zh) * 2020-10-27 2022-03-08 清华大学 存储方法及装置
CN116348850A (zh) * 2020-11-06 2023-06-27 华为技术有限公司 处理指令的方法以及图计算装置
CN112463723A (zh) * 2020-12-17 2021-03-09 王志平 一种微内核阵列的实现方法
US20220206793A1 (en) * 2020-12-24 2022-06-30 Intel Corporation Methods, systems, and apparatuses for a scalable reservation station implementing a single unified speculation state propagation and execution wakeup matrix circuit in a processor
US11593110B2 (en) * 2021-01-07 2023-02-28 Texas Instruments Incorporated Instruction packing scheme for VLIW CPU architecture
CN114925018B (zh) * 2022-07-22 2022-10-21 中科声龙科技发展(北京)有限公司 片上交叉开关系统及芯片

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5630157A (en) * 1991-06-13 1997-05-13 International Business Machines Corporation Computer organization for multiple and out-of-order execution of condition code testing and setting instructions
JP3730252B2 (ja) * 1992-03-31 2005-12-21 トランスメタ コーポレイション レジスタ名称変更方法及び名称変更システム
WO1998006042A1 (en) * 1996-08-07 1998-02-12 Sun Microsystems, Inc. Wide instruction unpack method and apparatus
US6081884A (en) * 1998-01-05 2000-06-27 Advanced Micro Devices, Inc. Embedding two different instruction sets within a single long instruction word using predecode bits
US6253309B1 (en) * 1998-09-21 2001-06-26 Advanced Micro Devices, Inc. Forcing regularity into a CISC instruction set by padding instructions
US6539471B2 (en) 1998-12-23 2003-03-25 Intel Corporation Method and apparatus for pre-processing instructions for a processor
US6484255B1 (en) * 1999-09-20 2002-11-19 Intel Corporation Selective writing of data elements from packed data based upon a mask using predication
US6658551B1 (en) * 2000-03-30 2003-12-02 Agere Systems Inc. Method and apparatus for identifying splittable packets in a multithreaded VLIW processor
US6738893B1 (en) 2000-04-25 2004-05-18 Transmeta Corporation Method and apparatus for scheduling to reduce space and increase speed of microprocessor operations
US6895494B1 (en) 2000-06-26 2005-05-17 Texas Instruments Incorporated Sub-pipelined and pipelined execution in a VLIW
US20020178360A1 (en) * 2001-02-25 2002-11-28 Storymail, Inc. System and method for communicating a secure unidirectional response message
AU2002243655A1 (en) 2001-01-25 2002-08-06 Improv Systems, Inc. Compiler for multiple processor and distributed memory architectures
US6950926B1 (en) 2001-03-02 2005-09-27 Advanced Micro Devices, Inc. Use of a neutral instruction as a dependency indicator for a set of instructions
US20040268098A1 (en) * 2003-06-30 2004-12-30 Yoav Almog Exploiting parallelism across VLIW traces
US7617496B2 (en) * 2004-04-23 2009-11-10 Apple Inc. Macroscalar processor architecture
US7752426B2 (en) * 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
US7412591B2 (en) * 2005-06-18 2008-08-12 Industrial Technology Research Institute Apparatus and method for switchable conditional execution in a VLIW processor
US20070083736A1 (en) 2005-10-06 2007-04-12 Aravindh Baktha Instruction packer for digital signal processor
US8181003B2 (en) * 2008-05-29 2012-05-15 Axis Semiconductor, Inc. Instruction set design, control and communication in programmable microprocessor cores and the like
US20110307688A1 (en) * 2010-06-10 2011-12-15 Carnegie Mellon University Synthesis system for pipelined digital circuits
US9612840B2 (en) * 2014-03-28 2017-04-04 Intel Corporation Method and apparatus for implementing a dynamic out-of-order processor pipeline

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170060843A (ko) * 2015-11-25 2017-06-02 삼성전자주식회사 Vliw 인터페이스 장치 및 제어 방법
WO2020138663A1 (ko) * 2018-12-26 2020-07-02 (주)자람테크놀로지 사용자 정의 명령어 셋을 지원하는 하드웨어 고속 연산 결합형 risc-v 기반 연산 장치 및 그 방법

Also Published As

Publication number Publication date
TW201602906A (zh) 2016-01-16
DE102015002383A1 (de) 2015-10-01
GB2524619B (en) 2017-04-19
US20170300334A1 (en) 2017-10-19
CN104951281B (zh) 2018-08-24
GB2524619A (en) 2015-09-30
KR101754462B1 (ko) 2017-07-05
JP6043374B2 (ja) 2016-12-14
US10338927B2 (en) 2019-07-02
US9612840B2 (en) 2017-04-04
JP2015191660A (ja) 2015-11-02
GB201500942D0 (en) 2015-03-04
TWI599949B (zh) 2017-09-21
CN104951281A (zh) 2015-09-30
JP2017027636A (ja) 2017-02-02
US20150277916A1 (en) 2015-10-01

Similar Documents

Publication Publication Date Title
KR101754462B1 (ko) 동적 비순차적 프로세서 파이프라인을 구현하기 위한 방법 및 장치
CN109074260B (zh) 乱序的基于块的处理器和指令调度器
KR101594090B1 (ko) 공유 메모리에 대한 액세스들의 동기화를 완화하기 위한 프로세서들, 방법들 및 시스템들
CN107810483B (zh) 验证处理器中的跳转目标的装置、存储设备和方法
CN108027770B (zh) 用于数据流isa的密集读取编码
JP6849274B2 (ja) 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック
US20170235578A1 (en) Method and Apparatus for Scheduling of Instructions in a Multi-Strand Out-Of-Order Processor
KR101594502B1 (ko) 바이패스 멀티플 인스턴스화 테이블을 갖는 이동 제거 시스템 및 방법
JP6306729B2 (ja) ストアをソート及びリタイアする命令及びロジック
WO2017223006A1 (en) Load-store queue for multiple processor cores
KR20180021812A (ko) 연속하는 블록을 병렬 실행하는 블록 기반의 아키텍쳐
US11037050B2 (en) Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator
KR101806279B1 (ko) 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들
US20150007188A1 (en) Method and apparatus for implementing dynamic portbinding within a reservation station
US10877765B2 (en) Apparatuses and methods to assign a logical thread to a physical thread
EP3757772A1 (en) System, apparatus and method for a hybrid reservation station for a processor
CN116339489A (zh) 处理器中微操作的扼制融合的系统、装置和方法
CN114489808A (zh) 高置信度多分支偏移预测器
CN114675881A (zh) 优化部分标志更新指令的方法、系统和装置
Bracy Mini-graph processing
Subramaniam et al. Design and optimization of the store vectors memory dependence predictor

Legal Events

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