KR101723711B1 - 조건부 쇼트 포워드 브랜치들을 산술적으로 동등한 술어적 명령어들로 변환 - Google Patents

조건부 쇼트 포워드 브랜치들을 산술적으로 동등한 술어적 명령어들로 변환 Download PDF

Info

Publication number
KR101723711B1
KR101723711B1 KR1020140030645A KR20140030645A KR101723711B1 KR 101723711 B1 KR101723711 B1 KR 101723711B1 KR 1020140030645 A KR1020140030645 A KR 1020140030645A KR 20140030645 A KR20140030645 A KR 20140030645A KR 101723711 B1 KR101723711 B1 KR 101723711B1
Authority
KR
South Korea
Prior art keywords
instruction
conditional
instructions
logic
branch
Prior art date
Application number
KR1020140030645A
Other languages
English (en)
Other versions
KR20140113577A (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 KR20140113577A publication Critical patent/KR20140113577A/ko
Application granted granted Critical
Publication of KR101723711B1 publication Critical patent/KR101723711B1/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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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
    • G06F9/30058Conditional branch 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards

Landscapes

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

Abstract

프로세서는 조건부 브랜치를 처리하도록 동작가능하다. 프로세서는 조건부 쇼트 포워드 브랜치를 페치하는 명령어 페치 로직을 포함한다. 조건부 쇼트 포워드 브랜치는 조건부 브랜치 명령어, 및 조건부 브랜치 명령어를 프로그램 순서로 순차적으로 뒤따르는 하나 이상의 명령어들의 세트를 포함한다. 하나 이상의 명령어들의 세트는 조건부 브랜치 명령어와 상기 조건부 브랜치 명령어에 의해 표시될 포워드 브랜치 타겟 명령어 사이에 존재한다. 프로세서는 명령어 페치 로직에 결합된 명령어 변환 로직을 또한 포함한다. 명령어 변환 로직은 상기 조건부 쇼트 포워드 브랜치를 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트로 변환한다. 다른 프로세스는 다양한 방법 및 시스템으로 또한 개시된다.

Description

조건부 쇼트 포워드 브랜치들을 산술적으로 동등한 술어적 명령어들로 변환{CONVERTING CONDITIONAL SHORT FORWARD BRANCHES TO COMPUTATIONALLY EQUIVALENT PREDICATED INSTRUCTIONS}
본 명세서에 개시된 실시예는 일반적으로 프로세서에 관한 것이다. 특히, 본 명세서에 개시된 실시예는 일반적으로 프로세서내의 조건부 브랜치의 처리에 관한 것이다.
특정 프로세서들은 실행 단계들을 중첩시키기 위해 파이프라인된(pipelined) 실행들을 이용한다. 이것은 복수의 명령어들이 동시에 실행의 상이한 단계들에 존재하도록 할 수 있고, 이것은 성능을 향상시키는데 도움을 줄 수 있다. 달성된 병렬성의 양은 파이프라인 길이가 증가함에 따라 증가하는 경향이 있다. 시간이 흐르면서, 특정 프로세서들은 성능을 향상시키기 위한 시도로서 더 깊은(deeper) 파이프라인들을 포함하게 된다. 이러한 딥(deep) 파이프라인들은, 명령어 스트림이 공지되어, 이에 따라 파이프라인이 채워진 상태로 유지될 수 있고 후속 명령어들의 실행이 파이프라인내의 이전 명령어들의 결과를 기다릴 필요가 없는 경우에 더 효율적이 되는 경향이 있다.
하나의 시도는 프로세서에 의해 실행되는 프로그램들 또는 코드가 전형적으로 조건부 브랜치들을 포함하는 것이다. 이러한 조건부 브랜치들의 예들은 "조건이 충족되거나 충족되지 않으면 점프" 유형의 명령어들, 및 본 기술분야에 알려진 명령어들을 변경시키는 다른 조건부 제어 플로우를 포함한다. 조건부 브랜치들은 실행의 플로우들이 2개의 가능한 방향 중 하나로 조건부로 브랜치하도록 할 수 있다. 이러한 2개의 방향들은 종종 "경로를 취함(taken path)" 및 "경로를 취하지 않음(not taken path)"으로 명칭된다. "경로를 취하지 않음"은 통상적으로 실행되고 있는 코드내의 다음 순차 명령으로 나아가는데 반해, "경로를 취함"은 통상적으로 하나 이상의 중간에 있는 명령어들을 지나 비 순차적 타겟 명령어들로 점프, 이동 또는 브랜치한다. 브랜치가 취해지거나 취해지지 않는지 여부는 일반적으로 명령어들과 연관된 조건들의 평가(예컨대, 조건들이 충족되었는지 그렇지 않은지 여부)에 기초한다.
성능을 향상시키는데 도움을 주기 위해, 대부분의 근래의 프로세서들은, 조건부 브랜치들의 실제 방향들이 결정되기 이전에 조건부 브랜치들의 방향을 예측하는데 도움을 주는 브랜치 예측기들을 갖는다. 일반적으로, 조건부 브랜치들의 실제 방향은 조건들이 실제로 후속 파이프라인의 단계에서 평가되기까지는 명확하게 알려지지 않는다. 그러나, 브랜치 예측기들은 (예컨대, 과거 이력에 기초하여) 조건부 브랜치들의 방향을 예측하기 위한 예측 메커니즘 또는 로직을 이용할 수 있다. 이것은 프로세서 성능을 향상시키는데 도움을 줄 수 있다. 브랜치 예측기가 없으면, 프로세서는 부가적인 명령어들을 파이프라인으로 페치(fetch)할 수 있기 전에 조건부 브랜치 명령어들과 연관된 조건들의 평가를 기다려야 할 수 있다. 그러나, 브랜치 예측기들은 조건부 브랜치의 가장 가능성이 높은 방향을 예측함으로써 이러한 시간 낭비를 피하는데 도움을 줄 수 있다. 예측된 브랜치 방향은 다음에 부가적인 명령어들을 페치하고 이들을 추론적으로 실행하는데 이용될 수 있다.
결국, 예측된 브랜치 방향은 정확하거나 부정확한 것 중 하나로 판명된다. 예측된 브랜치 방향이 정확한 것으로 판명되면, 다음에 추론적으로 실행된 명령어들의 결과들 및/또는 상태가 이용될 수 있다. 이 경우에, 프로세서의 성능 및 속도는, 그렇지 않은 경우 조건부 브랜치의 실제 방향의 평가를 기다리면서, 유휴 상태이었거나, 또는 적어도 충분히 이용되지 않았을 파이프라인 단계의 이용을 증대시킴으로 인해 일반적으로 더 증가될 수 있다. 그러나, 대신에 예측된 브랜치 방향이 부정확한 것으로 판명되면(예컨대, 브랜치 예측기에 의해 잘못 예측되는 경우), 다음에 조건부 브랜치 명령어를 지나 추론적으로 실행되는 명령어로부터의 임의의 결과들 및/또는 상태는 전형적으로 폐기될 필요가 있다. 종종, 파이프라인은 플러쉬되고(flush)(파이프라인내에 현재 체류하는 명령어들을 폐기), 실행은 잘못 예측된 조건부 브랜치로 되돌아가고, 대안적인 현재 정확하게 알려진 브랜치 방향으로 재시작된다. 이러한 결과는 일반적으로 바람직하지 않은데, 그 이유는 성능 및 에너지 양자 모두에 대한 불이익을 유발하기 때문이다.
본 발명은 다음의 설명 및 본 발명의 실시예를 설명하는데 이용되는 첨부 도면을 참조하여 가장 잘 이해될 수 있다. 도면에서,
도 1은 조건부 쇼트 포워드 브랜치(conditional short forward branch)를 포함하는 프로그램 또는 코드의 부분의 블록 순서도이다.
도 2는 조건부 브랜치의 처리를 위해 동작가능한 프로세서의 실시예의 블록도이다.
도 3은 조건부 브랜치를 처리하는 방법의 실시예의 블록 순서도이다.
도 4는 조건부 쇼트 포워드 브랜치 검출 및 변환 로직을 도시하는 블록도이다.
도 5는 조건부 쇼트 포워드 브랜치들을 변환하는지 여부를 검출 및 결정하는 방법의 실시예의 블록 순서도이다.
도 6은 조건부 쇼트 포워드 브랜치의 예시적인 실시예를 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트로 변환하는 것을 도시한다.
도 7은 조건부 쇼트 포워드 브랜치를 나타내고, 조건부 소트 포워드 브랜치와 산술적으로 동등한 하나 이상의 술어적 명령어들의 세트를 반영하는 아키텍처 상태를 업데이트하거나 또는 업데이트하지 않도록 동작가능한 백 엔드 로직의 실시예의 블록도이다.
도 8a는 본 발명의 실시예에 따른 예시적인 인-오더(in-order) 파이프라인 및 예시적인 레지스터 리네이밍, 아웃-오브-오더(out-of-order) 이슈/실행 파이프라인 양자 모두를 도시하는 블록도이다.
도 8b는 본 발명의 실시예에 따른 예시적인 인-오더 아키텍처 코어의 실시예 및 프로세서에 포함되는 예시적인 레지스터 리네이밍, 아웃-오브-오더 이슈/실행 아키텍처 코어 양자 모두를 도시하는 블록도이다.
도 9a는 본 발명의 실시예에 따른 그 자신의 온-다이(on-die) 상호 접속 네트워크에 대한 접속 및 그 자신의 레벨 2(L2) 캐시의 로컬 서브세트를 갖는 단일 프로세서 코어의 블록도이다.
도 9b는 본 발명의 실시예에 따른 도 9a에서의 프로세서 코어의 일부의 확대도이다.
도 10은, 본 발명의 실시예에 따른, 둘 이상의 코어를 가질 수 있고, 통합 메모리 제어기를 가질 수 있고, 통합 그래픽을 가질 수 있는 프로세서의 블록도이다.
도 11은 본 발명의 일 실시예에 따른 시스템의 블록도를 도시한다.
도 12는 본 발명의 실시예에 따른 제1의 더 구체적인 예시적 시스템의 블록도를 도시한다.
도 13은 본 발명의 실시예에 따른 제2의 더 구체적인 예시적 시스템의 블록도를 도시한다.
도 14는 본 발명의 실시예에 따른 SoC의 블록도를 도시한다.
도 15는 본 발명의 실시예에 따른 소스 명령어 세트내의 2진 명령어들을 타겟 명령어 세트내의 2진 명령어들로 변환하기 위한 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다.
조건부 쇼트 포워드 브랜치를 산술적으로 동등한 하나 이상의 술어적 명령어들의 세트 및/또는 조건부로 실행된 명령어들로 변환하기 위한 프로세서, 방법 및 시스템이 본 명세서에 개시된다. 다음의 설명에서, 다수의 특정 상세들이 개시된다(예컨대, 특정 유형의 조건부 브랜치 명령어들, 특정 조건부 쇼트 포워드 브랜치들, 로직 구현들, 프로세서 구성들, 마이크로아키텍처 상세들, 동작의 시퀀스들, 로직 분할/통합 상세들, 시스템 콤포넌트들의 유형 및 상호관계들 등). 그러나, 본 발명의 실시예는 이러한 특정 상세들이 없어도 실행될 수 있다는 것을 알 수 있다. 다른 경우에, 공지의 회로들, 구조 및 기술들은 본 명세서의 이해를 모호하게 하지 않도록 상세하게 도시되지 않았다.
도 1은 조건부 쇼트 포워드 브랜치(101)를 포함하는 프로세서에 의해 실행되는 프로그램 또는 코드(100)의 부분의 블록 순서도이다. 조건부 브랜치 명령어(103)은 조건부 쇼트 포워드 브랜치의 시작에 위치할 수 있다. 조건부 브랜치 명령어는 "경로를 취함" 및 "경로를 취하지 않음"을 갖는다. 취해진 경로는 조건부 브랜치 명령어에 의해 표시되는 포워드 브랜치 타겟 명령어(106)로 나아간다. 예컨대, 조건부 브랜치 명령어는 포워드 브랜치 타겟 명령어를 표시하기 위한(예컨대, 조건부 브랜치 명령어로부터 브랜치 타겟 명령어로의 오프셋을 특정) 인수(argument) 또는 소스 피연산자(operand)를 가질 수 있다.
다양한 실시예에서, 조건부 브랜치 명령어는 조건부 점프 명령어, 조건부 제어 플로우 전송 명령어, 또는 본 기술 분야에 알려진 다른 유형의 조건부 브랜치 명령어들을 나타낼 수 있다. 인텔사의 아키텍처는 조건부 점프 명령어의 다수의 적합한 예들을 포함한다. "조건이 충족되면 점프"(jcc) 명령어의 적합한 일부 대표적인 예들은, (a) a jump short if above (carry flag=0 및 zero flag=0) 명령어(JA); (b) a jump short if carry (carry flag=1) 명령어 (JC); (c) a jump near if 0 (zero flag=1) 명령어(JZ); (d) a jump short if not zero (zero flag=0) 명령어(JNZ); (e) a jump near if below or equal (carry flag=1 또는 zero flag=1) 명령(JBE) ; 및 (f) a jump near if not greater (zero flag=1 또는 sign flag≠OF) 명령어(JNG)를 포함하지만 이에 한정되는 것은 아니다. Intel® Itanium® 아키텍처는 또한 적합합 브랜치 명령어를 포함한다. 예컨대, br(브랜치) 명령어는, 브랜치 명령어가 브랜치를 취하지 않을지 여부를 결정하기 위한 자격 서술(qualifying predicate)을 이용하는 cond(조건부) 유형을 갖는다. 서술이 1이면 다음에 브랜치가 취해지고, 그렇지 않으면 브랜치가 취해지지 않는다. 일부 RISC 아키텍처는 또한 조건부 브랜치 명령어들의 다수의 적합한 예들을 포함한다. 이러한 조건부 브랜치 명령어들의 일부 대표적인 예들은, (a) a branch if equal 명령어(BEQ); (b) a branch if not equal 명령어(BNE); (c) a branch if carry clear 명령어(BCC); (d) a branch if carry set 명령어(BCS); (e) a branch if signed greater than 명령어(BGT); 및 (f) a branch if no overflow 명령어(BVC)를 포함하지만 이에 한정되는 것은 아니다.
"경로가 취해지지 않음"은 하나 이상의 명령어의 세트(102)로 이어지고, 이 명령어들(102)은 프로그램 순서의 조건부 브랜치 명령어를 순차적으로 따르고, 조건부 브랜치 명령어와 조건부 브랜치 명령어에 의해 표시되는 포워드 브랜치 타겟 명령어 사이에 있게 된다. 도시된 실시예에서, 이들은 적어도 프로그램 순서의 조건부 브랜치 명령어를 바로 뒤따르는 명령어(104)를 포함한다. 선택적으로, 일부 실시예에서, 조건부 쇼트 포워드 브랜치(101)는 또한 조건부 브랜치 명령과 포워드 브랜치 타겟 명령간의 프로그램 순서의 하나 이상의 다른 선택적 순차 명령어(105)를 포함할 수 있다. 일부 실시예에서, 조건부 쇼트 포워드 브랜치는 1개 내지 대략 5개 또는 1개 내지 대략 3개의 명령어들을 포함할 수 있고, 이들은 조건부 브랜치 명령어와 포워드 브랜치 타겟 명령어 사이에 있지만, 본 발명의 범주는 이에 한정되는 것은 아니다. 다른 실시예에서, 충분한 다양한 조건부/술어적 명령어들이 주어진 아키텍처에서(예컨대, Itanium 아키텍처에서) 이용가능하면, 더 큰 조건부 포워드 브랜치들이 또한 이용될 수 있다.
도 2는 조건부 브랜치들을 처리하도록 동작가능한 프로세서(210)의 실시예의 블록도이다. 일부 실시예들에서, 프로세서는 범용 프로세서(예컨대, 테스크탑, 랩탑 등 컴퓨터들에서 이용되는 유형의 범용 마이크로프로세서)일 수 있다. 대안으로, 프로세서는 특수 목적 프로세서일 수 있다. 적합한 특수 목적 프로세서들의 예들은, 일부 예들을 명명하면, 네트워크 프로세서들, 통신 프로세서들, 암호 프로세서들, 그래픽 프로세서들, 코프로세서들, 임베디드 프로세서들, 디지털 신호 프로세서들(DSP들) 및 제어기들(예컨대, 마이크로제어기들)을 포함하는데, 이에 제한되지는 않는다. 프로세서는 다양한 CISC(complex instruction set computing) 프로세서들, 다양한 RISC(reduced instruction set computing) 프로세서들, 다양한 VLIW(very long instruction word) 프로세서들, 다양한 그 하이브리드들 또는 전체적으로 다른 유형들의 프로세서들 중 임의의 프로세서일 수 있다.
프로세서는 프론트 엔드 로직(front end logic)(212)을 갖는다. 이 프론트 엔드 로직은 명령어 페치 로직(213)을 포함한다. 명령어 페치 로직은 저장 디바이스(211)로부터, 조건부 쇼트 포워드 브랜치(201)의 명령어들을 포함하는, 코드(200)의 명령어들을 페칭하도록 동작가능하다. 다양한 실시예들에서, 저장 디바이스는 시스템에 배치될 때 프로세서가 결합될 수 있는 메모리 또는 캐시(예컨대, 명령어 캐시와, 명령어 및 데이터 캐시 등)를 포함할 수 있다. 일부 실시예들에서, 조건부 쇼트 포워드 브랜치는 조건부 브랜치 명령어에 의해 표시된 포워드 브랜치 타겟 명령어와 조건부 브랜치 명령어 사이에 있고, 프로그램 순서로 조건부 브랜치 명령어를 순차적으로 뒤따르는 하나 이상의 명령어들의 세트, 및 조건부 브랜치 명령어를 포함할 수 있다.
일부 실시예들에서, 조건부 쇼트 포워드 브랜치는 도 1의 조건부 쇼트 포워드 브랜치와 유사하거나 또는 이와 동일할 수 있다. 대안으로, 조건부 쇼트 포워드 브랜치는 도 1의 조건부 쇼트 포워드 브랜치와 상이할 수 있다. 페칭된 명령어들은 머신 코드 명령어들, 어셈블리 언어 명령어들, 마이크로 명령어들, 또는 다른 상대적으로 고레벨인 명령어들, 혹은 실행을 위해 프로세서에 제공되는 제어 신호들을 나타낼 수 있다. 이러한 명령어들은 프로세서의 명령어 세트 아키텍처(ISA)의 일부일 수 있다. 이 ISA는 프로그래밍에 관련된 프로세서의 아키텍처의 일부를 나타내며 프로세서의 네이티브 명령어들, 아키텍처 레지스터들, 데이터 유형들, 어드레싱 모드들 등을 통상 포함한다.
도 2를 다시 참조하면, 명령어 변환 로직(214)은 명령어 페치 로직(213)과 결합된다. 일부 실시예들에서, 명령어 변환 로직은 프로세서의 파이프라인의 디코딩 단계에서의 로직 및/또는 명령어 디코딩 로직을 포함할 수 있다. 명령어 디코딩 로직은 본 명세서에서 디코딩 로직, 디코딩 유닛 또는 디코더로도 지칭될 수 있다. 명령어 변환 로직은 하드웨어(예컨대, 집적 회로들, 트랜지스터들 등), 펌웨어(예컨대, 비휘발성 메모리에 저장되어 있는 명령어들), 소프트웨어 또는 이들의 조합을 포함하는 다양하고 상이한 메커니즘들을 이용하여 구현될 수 있다. 일부 실시예들에서, 명령어 변환 로직은 일부 펌웨어 및/또는 소프트웨어와 잠재적으로 결합되는 적어도 일부의 온-다이 하드웨어 로직을 포함한다. 명령어 변환 로직을 구현하기 위한 적합한 메커니즘들의 예들은 마이크로코드 ROM들, 룩-업(look-up) 테이블들, 하드웨어 구현들, 프로그래머블 로직 어레이들(PLA들), 및 본 기술분야에서 알려져 있는 다른 명령어 디코딩 및 변환 메커니즘들을 포함하는데, 이에 제한되지는 않는다.
명령어 변환 로직은 명령어 페치 유닛으로부터, 페칭된 머신 명령어들, 마이크로 명령어들 또는 다른 상대적으로 고레벨인 명령어들 혹은 제어 신호들을 수신할 수 있다. 명령어 변환 로직은 수신된 명령어들 또는 제어 신호들을 대응하는 상대적으로 저레벨인 마이크로 명령어들, 마이크로 동작들(micro-operations, micro-ops), 마이크로 코드 엔트리 포인트들, 또는 다른 저레벨의 명령어들 혹은 제어 신호들로 변환하도록 동작할 수 있다. 적합한 변환들의 예들은 디코딩, 에뮬레이팅, 모핑, 트랜슬레이팅, 다른 변환, 또는 이들의 조합을 포함하는데, 이에 제한되지는 않는다. 상대적으로 저레벨인 명령어들 또는 제어 신호들은 저레벨(예컨대, 회로 레벨 또는 하드웨어 레벨)의 동작들을 통해 상대적으로 고레벨인 명령어들 또는 제어 신호들의 동작들을 구현할 수 있다. 일 측면에서, 상대적으로 저레벨인 명령어들 및 제어 신호들은 네이티브 프로세서 하드웨어(예컨대, 실행 유닛들, 회로들 등) 상에서 실행되거나 구현될 수 있다.
다시 도 2를 참조하면, 일부 실시예들에서, 조건부 쇼트 포워드 브랜치(201)의 명령어들은 명령어 변환 로직(214)에 또한 제공될 수 있다. 명령어 변환 로직(215)은 조건부 쇼트 포워드 브랜치의 명령어들을 하나 이상의 술어적 명령어들의 산술적으로 그리고/또는 기능적으로 동등한 세트로 변환하도록 동작할 수 있다. 일부 실시예들에서, 술어적 명령어들은 원래의 명령어들과 동일하거나 또는 (예를 들면, 산술적, 논리적 등의) 동등한 동작들을 수행할 수 있고, 원래의 명령어들과 동일하거나 또는 동등한 피연산자들(예컨대, 아키텍처 레지스터들, 메모리 위치들 등)에 대해 동작할 수 있다는 점에서 원래의 명령어들에 대해 산술적으로 그리고/또는 기능적으로 동등할 수 있다. 일부 실시예들에서, 조건부 브랜치 명령어 후의 조건부 쇼트 포워드 브랜치에서의 각각의 명령어는 비술어적 명령어로부터 대응하는 기능적으로 동등한 술어적 명령어로 변환될 수 있다.
일부 실시예들에서, 명령어 변환 로직(215)은 변환의 일부로서 조건부 브랜치 명령어를 제거할 수 있다. 일부 실시예들에서, 조건부 브랜치 마이크로 명령어의 조건부 측면은, 적어도 개념상으로, 조건부 쇼트 포워드 브랜치 내에서 (예를 들면, 조건부 브랜치 명령어와 그 타겟 사이에서) 하나 이상의 마이크로 명령어들 각각과 결합될 수 있다. 일부 실시예들에서, 조건부 브랜치 명령어가 제거되고(즉, 브랜치 측면), 조건부 측면이 조건부 쇼트 포워드 브랜치 내에서 다른 명령어들 각각의 디코딩된 버전들(예를 들면, 마이크로 명령어들)에 통합되는 변환이 수행될 수 있다.
도시된 바와 같이, 일부 실시예들에서, 술어적 명령어들의 기능적으로 그리고/또는 산술적으로 동등한 세트에 대응하고 그리고/또는 이 동등한 세트를 나타내는 명령어들(예를 들면, 마이크로 명령어들) 또는 다른 제어 신호들(216)은, 브랜치 예측기가 "취해질(taken)" 또는 "취해지지 않을(not taken)" 조건부 브랜치 명령어를 예측하는지 여부에 관계없이 그리고/또는 브랜치 예측기가 브랜치 예측을 할 필요도 없이 그리고/또는 명령어 변환 로직이 브랜치 예측을 알 필요도 없이, 명령어 변환 로직으로부터 백 엔드 로직(back end logic)(217)으로 출력될 수 있다. 즉, 브랜치가 취해질 술어적인 것이었다면 보통은 파이프라인에 삽입되지 않았을 조건부 쇼트 포워드 브랜치 내의 명령어들을 나타내는 제어 신호들은 브랜치 예측에 관계없이 그리고/또는 이러한 브랜치 예측을 수행할 필요도 없이 파이프라인에 삽입될 수 있다. 이것은 브랜치 예측 실수의 경우에 통상적으로 필요할 파이프라인의 플러싱(flushing) 및/또는 실행의 리와인딩(rewinding)을 피할 필요가 있을 때 도움을 줄 수 있다. 일부 실시예들에서, 이것은 소프트웨어 컴파일러라기보다는 변환을 수행하는 프로세서의 하드웨어 또는 다른 로직이다.
도 2를 다시 참조하면, 백 엔드 로직(217)은 조건부 쇼트 포워드 브랜치의 원래의 조건부 브랜치 명령어와 연관된 조건의 최종적으로 해결된 결과에 기초하여 하나 이상의 술어적 명령어들의 기능적으로 그리고/또는 산술적으로 동등한 세트를 반영하기 위해 아키텍처 상태를 업데이트하거나 업데이트하지 않는 로직(218)을 포함한다. 일부 실시예들에서, 조건부 브랜치가 취해져야 했던, 조건부 브랜치 명령어의 조건의 결과가 최종적으로 해결된다면, 로직(218)은 술어적 명령어들의 기능적으로 그리고/또는 산술적으로 동등한 세트를 반영하기 위해 아키텍처 상태를 업데이트하지 않을 수 있다. 역으로, 조건부 브랜치가 취해지지 않아야 했던, 조건부 브랜치 명령어의 조건의 결과가 최종적으로 해결된다면, 로직(218)은 술어적 명령어들의 기능적으로 그리고/또는 산술적으로 동등한 세트를 반영하기 위해 아키텍처 상태를 업데이트할 수 있다. 일부 실시예들에서, 이 로직은 선택 로직을 활용하여 술어적 명령어들의 결과, 또는 술어적 명령어들을 무시하고/하거나 술어적 명령어들이 실행되지 않은 경우에 작용하는 이전 결과 중 어느 하나를 선택할 수 있다.
유리하게도, 술어적 명령어들로의 조건부 쇼트 포워드 브랜치 명령어들의 이러한 변환, 및 아키텍처 상태를 업데이트하거나 업데이트하지 않기 위한 술어적 명령어들의 이러한 이용은 술어적 조건부 브랜치들의 실수로 인한 속도 및 에너지 페널티들을 피함으로써 프로세서의 속도 및 에너지 보존의 개선에 도움을 줄 수 있다. 쇼트 포워드 루프 내의 조건부 브랜치 명령어를 뒤따르는 명령어들은 파이프라인에 입력되지만, 조건부 브랜치가 취해지거나 취해지지 않아야 하는지 여부에 대해 명확히 결정될 때까지 술어에 의해 처리된다. 브랜치 예측 실수의 경우에 프로세서 실행의 어떠한 리와인딩 및 추측 실행 상태의 어떠한 연관 폐기도 필요하지 않다. 이러한 이점들은 (예를 들면, 기내 파이프라인에 대략 수 백의 명령어들을 갖는) 증대하는 딥 파이프라인들을 갖는 일정 규모의 아웃-오브-오더 프로세서들에서 특히 중요할 수 있다.
설명의 모호함을 피하기 위해, 비교적 간단한 프로세서(210)를 도시하고 설명하였다. 다른 실시예들에서, 프로세서는 예를 들어 프리페치(prefetch) 버퍼, 명령어 큐(queue), 명령어 및/또는 데이터 캐시, 명령어 및/또는 데이터 변환 색인 버퍼, 마이크로 명령어 큐, 리네임(rename)/할당 유닛, 마이크로 명령어 시퀀서(sequencer), 실행 유닛들, 리타이어먼트(retirement)/커미트(commit) 유닛, 레지스터 리네이밍 유닛, 버스 인터페이스 유닛, 제2 및/또는 고레벨 명령어 및/또는 데이터 캐시들, 프로세서들에 포함되는 다른 컴포넌트들, 및 이들의 다양한 조합들과 같은 다른 잘 알려진 컴포넌트들을 선택적으로 포함할 수 있다. 프로세서들에서는 그야말로 컴포넌트들의 수많은 상이한 조합들 및 구성들이 존재하고, 실시예들은 임의의 특정한 조합 또는 구성에 제한되지는 않는다.
도 3은 조건부 브랜치들을 처리하는 방법(320)의 일 실시예의 블록 흐름도이다. 일부 실시예들에서, 도 3의 동작들 및/또는 방법은 도 2의 프로세서에 의해 그리고/또는 도 2의 프로세서 내에서 수행될 수 있다. 도 2의 프로세서에 대해 본 명세서에서 설명한 컴포넌트들, 피쳐들 및 특정한 선택적 세부 사항들은 그 실시예들이 도 2의 프로세서에 의해 그리고/또는 도 2의 프로세서 내에서 수행될 수 있는 도 3의 동작들 및/또는 방법에도 선택적으로 적용된다. 대안으로, 도 3의 동작들 및/또는 방법은 유사하거나 또는 전체적으로 상이한 프로세서 또는 장치에 의해 그리고/또는 유사하거나 또는 전체적으로 상이한 프로세서 또는 장치 내에서 수행될 수 있다. 더욱이, 도 2의 프로세서는 도 3의 프로세서와 동일하거나, 유사하거나, 또는 전체적으로 상이한 동작들 및/또는 방법들을 수행할 수 있다.
이 방법은 블록(321)에서 조건부 쇼트 포워드 브랜치를 페칭하는 것을 포함한다. 일부 실시예들에서, 조건부 쇼트 포워드 브랜치는 조건부 브랜치 명령어에 의해 표시된 포워드 브랜치 타겟 명령어와 조건부 브랜치 명령어 사이에 있고, 프로그램 순서로 조건부 브랜치 명령어를 순차적으로 뒤따르는 하나 이상의 명령어들의 세트, 및 조건부 브랜치 명령어를 포함할 수 있다. 일부 실시예들에서, 조건부 쇼트 포워드 브랜치는 도 1의 조건부 쇼트 포워드 브랜치와 유사하거나 동일할 수 있다. 대안으로, 조건부 쇼트 포워드 브랜치는 도 1에 도시된 조건부 쇼트 포워드 브랜치와 상이할 수 있다.
이 방법은 블록(322)에서 조건부 쇼트 포워드 브랜치를 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트로 변환하는 것을 또한 포함한다. 일부 실시예들에서, 이 방법은 조건부 브랜치 명령어와 포워드 브랜치 타겟 명령어 사이의 하나 이상의 명령어들 각각을 비술어적 명령어로부터 대응하는 술어적 명령어로 변환하는 것을 포함할 수 있다. 일부 실시예들에서, 이 방법은 조건부 브랜치 명령어를 제거하는 것을 포함할 수 있다.
일부 실시예들에서, 이 방법은 프로세서의 백 엔드 로직으로 산술적으로 동등한 세트의 하나 이상의 술어적 명령들에 대응하는 및/또는 표현하는 신호들을 제공하는 단계를 더 포함할 수 있다. 일부 실시예들에서, 이것은 조건부 브랜치 명령어가 취해지거나 또는 취해지지 않을 것으로 예측되는지 여부에 상관없이 수행될 수 있다. 일부 실시예들에서, 이것은 브랜치 예측 로직의 연산 및/또는 브랜치 예측이 조건부 브랜치 예측에 대한 브랜치 예측을 하는지 여부 및/또는 브랜치 예측이 수행되면 명령어 변환 로직이 브랜치 예측을 아는지 여부에 상관없이 수행될 수 있다.
도 4는 조건부 쇼트 포워드 브랜치 검출 및 변환 로직(415)를 예시하는 블록도이다. 도 5는 조건부 쇼트 포워드 브랜치들을 변환할지 여부를 검출하고 결정하는 방법(535)의 실시예의 블록 흐름도이다. 기술을 간소화하기 위해, 도 5의 연산들 및 방법은 도 4의 로직을 참조하여 기술될 것이다. 그러나, 도 5의 연산들 및 방법은 도 4의 것들과 유사하거나 또는 상이한 실시예들에 의해 수행될 수 있다. 또한, 도 4의 로직은 도 5의 것과 동일하거나, 유사하거나, 또는 상이한 연산들 및 방법들을 수행할 수 있다.
도 4를 참조하면, 조건부 쇼트 포워드 브랜치 검출 로직(425)은 조건부 쇼트 포워드 브랜치(401)를 검출하도록 동작가능하다. 도 5를 참조하면, 블록 536에서, 이 방법은 조건부 쇼트 포워드 브랜치를 검출하는 단계를 포함한다. 일부 실시예들에서, 이것은 조건부 브랜치 명령어를 검출하는 단계 및 브랜치가 포워드이고 쇼트인지(예컨대, 약 1개부터 약 10개까지의 명령어들, 또는 약 1개부터 약 5개까지의 명령어들) 여부를 결정하기 위해 조건부 브랜치 명령어의 포워드 브랜치 타겟을 검사하는 단계를 포함할 수 있다.
도 4를 다시 참조하면, 조건부 쇼트 포워드 브랜치를 변환할지 여부를 결정하도록 동작가능한 로직(426)은 조건부 쇼트 포워드 브랜치 검출 로직(425)에 결합되어 있다. 일부 실시예들에서, 결정은, 대응하는 산술적으로 동등한 명령어들이 조건부 브랜치 명령어와 조건부 브랜치 명령어의 포워드 브랜치 타겟 사이의 조건부 쇼트 포워드 브랜치 내의 하나 이상의 명령어들의 전부에 대해 이용가능한지 여부에 기초하여 이루어질 수 있다. 예를 들면, 산술적으로 동등한 술어적 명령어가 이들 명령어 중 하나 이상에 대해 존재하지 않으면 변환하지 않도록 결정될 수 있거나, 또는 산술적으로 동등한 술어적 명령어들이 이들 명령어 모두에 대해 존재하면 변환하도록 결정될 수 있다. 로직(426)이 조건부 쇼트 포워드 브랜치를 변환하지 않도록 결정한다면, 그것은 종래의 조건부 쇼트 포워드 브랜치 처리 로직(427)에 제공될 수 있다. 대안적으로, 로직(426)이 조건부 쇼트 포워드 브랜치를 변환하도록 결정한다면, 그것은 명령어 변환 로직(428)에 제공될 수 있다.
도 5를 참조하면, 이 방법은 블록(537)에서 쇼트 포워드 브랜치 내의 모든 명령어들이 대응하는 기능적으로 및/또는 산술적으로 동등한 술어적 명령어들로 변환될 수 있는지 여부를 결정하는 단계를 포함한다. 쇼트 포워드 브랜치 내의 모든 명령어들이 대응하는 기능적으로 및/또는 산술적으로 동등한 술어적 명령어들로 변환될 수 없다면(즉, "아니오"가 블록(537)에서의 결정임), 종래의 조건부 브랜치 명령어의 처리는 블록(538)에서 수행될 수 있다. 대안적으로, 쇼트 포워드 브랜치 내의 모든 명령어들이 대응하는 기능적으로 및/또는 산술적으로 동등한 술어적 명령어들로 변환될 수 있다면(즉, "예"가 블록(537)에서의 결정임), 이 방법은 블록(539)로 진행할 수 있다.
도 4를 다시 참조하면, 명령어 변환 로직(428)은 로직(426)과 결합되어 있다. 명령어 변환 로직은 조건부 쇼트 포워드 브랜치의 명령어들을 변환하도록 연산가능하다. 명령어 변환 로직은 비산술적 명령어를 산술적으로 동등한 술어적 명령어로의 맵핑 및 변환 로직(429)을 포함한다. 맵핑 및 변환 로직은 각각의 비술어적 명령어를 기능적으로 동등한 술어적 명령어로 맵핑 및 변환하도록 연산가능하다. 예를 들면, 덧셈 연산이 주어진 한 쌍의 소스 피연산자들 상에 수행되어 목적지에서 합을 저장하도록 하는 것을 특정하는 덧셈 명령어는 덧셈 연산이 동일한 주어진 한 쌍의 소스 피연산자들 상에 수행되어 동일한 목적지에 합을 저장하도록 하는 것을 (그러나 조건부로) 특정하는 술어적 덧셈 명령어로 맵핑되고 변환될 수 있다. 대안적인 실시예들에서, 술어적 명령어 대응들로의 일대일 명령어보다는, 술어적 명령어 대응들로의 일대다 또는 다대일 명령어가 또한 사용될 수 있다. 하나 이상의 산술적으로 및/또는 기능적으로 동등한 술어적 명령어들(430)은 예를 들면, 추가 디코딩을 위해 또는 다른 명령어 변환 로직 및/또는 백 엔드 로직 방향으로 출력된다. 조건부 브랜치 명령어(403)는 변환 중에 제거된다(431)는 것을 주목한다. 도 5를 참조하면, 이 방법은 블록(539)에서, 조건부 쇼트 포워드 브랜치를 기능적으로 및/또는 산술적으로 동등한 세트의 하나 이상의 술어적 명령어들로 변환하는 단계를 포함한다.
도 6은 산술적으로 동등한 세트의 하나 이상의 술어적 명령어들(630)로의 조건부 쇼트 포워드 브랜치(601)의 예시적 실시예의 변환을 도시한다. 조건이 타겟 오프셋(603)을 지시하는 (jcc) 명령어를 만족한다면, 조건부 쇼트 포워드 브랜치(601)는 점프를 포함한다. jcc 명령어는 "경로를 취함" 및 "경로를 취하지 않음"을 포함한다. 경로를 취함은 jcc 명령어의 타겟 오프셋에 위치한 포워드 브랜치 타겟 명령어(606)로 이어진다. 경로를 취하지 않음은 범용 레지스터(rcx)를 범용 레지스터(rbx)로 이동하게 하는 mov 명령어(604)로 이어진다. 이것은 단지 하나의 예이다. mov 명령어 후에, 하나 이상의 로딩, 저장, 연산, 또는 논리 명령어들, 또는 이들의 조합(605)이 선택적으로 있을 수 있다.
jcc 명령어는 산술적으로 동등한 세트의 하나 이상의 술어적 명령어들(630)에서 제거된다(631). 경로를 취함 및 경로를 취하지 않음도 또한 효과적으로 제거된다. 브랜치 술어의 결과에 상관없거나 또는 브랜치 예측이 수행되는지 여부조차 상관없이 쇼트 포워드 브랜치 내의 명령어들을 넘는 점핑은 없다. 산술적으로 동등한 세트의 하나 이상의 술어적 명령어들은 mov 명령어(640)에 대응하는, 조건부로 또는 술어로 범용 레지스터(rcx)를 범용 레지스터(rbx)로 이동하도록 하는 cmovz 명령어를 포함한다. cmovz 명령어는 조건의 상태에 상관없이 예외를 일으키는 인텔 아키텍처 내의 기존의 조건부 명령어이다. 다른 선택으로서, 일부 실시예들에서, cmovz 명령어는 조건부 이동 명령어의 조건이 거짓인 경우에 예외를 발생시키지 않는 유사한 명령어로 대체될 수 있다. 이러한 방식으로, 조건부 명령어가 실행되었다고 가정되지 않는 경우, 어떠한 잠재적 예외들 등을 일으키지 않는 단계를 포함하는 것은 완전히 무시되고 효과가 없을 수 있다. 또한, 하나 이상의 술어적이고 산술적으로 동등한 로딩, 저장, 연산, 또는 논리 명령어들, 또는 이들의 조합(641)이 포함된다. 이들 명령어들은 명령어(들)(605)에 산술적으로 동등하다. 술어적 명령어들의 세트가 수행될 것이라고 결정되면, 그것들은 대응하는 원래의 비술어적 세트의 명령어들과 동일한 결과를 정확하게 제공해야 한다. 일부 실시예들에서, 포워드 브랜치 타겟(606)은 변환될 필요가 없다는 것을 주목한다.
도 7은, 조건부 쇼트 포워드 브랜치를 표현하고, 산술적으로 동등한 한 세트의 하나 이상의 술어적 명령어들(716)을 반영하기 위해 아키텍처 상태를 업데이트 하거나 또는 업데이트 하지 않도록 동작가능한 백 엔드 로직(717)의 실시예의 블록도이다. 일부 실시예들에서, 백 엔드 로직은 도 2의 프로세서와 사용될 수 있다. 대안적으로, 백 엔드 로직은 도 2의 프로세서와 유사하거나 또는 상이한 프로세서와 사용될 수 있다. 또한, 도 2의 프로세서는 동일하거나, 유사하거나, 또는 상이한 백 엔드 로직을 사용할 수 있다.
인-오더(in-order) 로직의 예시적 실시예 및 레지스터 리네이밍, 아웃-오브-오더 스케줄링/실행/리타이어먼트 로직의 예시적 실시예 모두가 도시되어 있다. 실선 박스들은 인-오더 로직을 예시하고, 점선 박스들의 선택적 추가는 레지스터 리네이밍,아웃-오브-오더 스케줄링/실행/리타이어먼트 로직을 예시한다. 인-오더 양태가 아웃-오브-오더 양태의 서브세트라는 것을 고려하면, 본 발명의 범위가 아주 제한되지 않더라도, 아웃-오브-오더 양태가 기술될 것이다.
하나 이상의 술어적 명령어들(716)은 백 엔드 로직(717)에 제공된다. 본문의 다른 곳에서 기술된 바와 같이, 하나 이상의 술어적 명령어들은 조건부 쇼트 포워드 브랜치를 표현하고 산술적으로 동등하다. 리네임/할당 로직(750)은 술어적 명령어들의 세트를 수신한다. 리네임/할당 로직은 리타이어먼트 및/또는 커미트 로직(755) 및 하나 이상의 스케줄러 로직(들)(751)에 결합되어 있다. 스케줄러 로직(들)은 예약(reservation) 스테이션들, 중앙 명령어 윈도우 등을 포함한 상이한 스케줄러들의 임의의 수를 표현한다. 스케줄러 로직(들)은 물리적 레지스터 파일(들) 유닛(들)(752)에 결합되어 있다. 각각의 물리적 레지스터 파일(들) 유닛들은 하나 이상의 물리적 레지스터 파일들을 표현하고, 상이한 파일들은 예를 들면, 스칼라 정수, 스칼라 부동점, 패킹된 정수, 패킹된 부동점, 벡터 정수, 벡터 부동점, 상태(예컨대, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 유형들을 저장한다. 일 실시예에서, 물리적 레지스터 파일(들) 유닛은 벡터 레지스터 유닛, 기입 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이들 레지스터 유닛들은 아키텍처 벡터 레지스터들, 벡터 마스크 레지스터들, 및 범용 레지스터들을 제공한다. 일부 실시예들에서, 물리적 레지스터 파일(들) 유닛들은 플래그 레지스터(들)(753) 및 예측 레지스터(들)(754)를 포함할 수 있고, 이들 중 하나 또는 모두는 술어적 명령어들에 의해 술어를 위해 사용될 수 있다.
물리적 레지스터 파일(들) 유닛(들)은 리타이어먼트/커미트 로직(755)에 의해 오버랩되어 레지스터 리네이밍 및 아웃-오브-오더 실행이 구현될 수 있는 다양한 방법들(예컨대, 리오더(reorder) 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용; 미래 파일(들), 히스토리 버퍼(들), 및 리타이어먼트 레지스터 파일(들)을 이용; 레지스터 맵들 및 레지스터들의 풀을 이용; 등)을 예시한다. 리타이어먼트/커미트 로직 및 물리적 레지스터 파일(들) 유닛(들)은 실행 로직(756)에 결합되어 있다. 실행 로직은 한 세트의 하나 이상의 실행 유닛들(757) 및 한 세트의 하나 이상의 메모리 액세스 유닛들(758)을 포함한다. 실행 로직은 본문에 개시된 술어적 명령어들을 실행할 수 있다. 실행 유닛(들)은 다양한 연산들(예컨대, 변위, 덧셈, 뺄셈, 곱셈)을 수행할 수 있고 다양한 유형의 데이터(예컨대, 스칼라 부동점, 패킹된 정수, 패킹된 부동점, 벡터 정수, 벡터 부동점) 상에서 수행할 수 있다. 일부 실시예들은 특정 함수들 또는 함수들의 세트들 전용인 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 모두가 모든 기능들을 실행하는 오직 하나의 실행 유닛 또는 다중 실행 유닛들을 포함할 수 있다.
특정 실시예들은 특정 유형의 데이터/동작들(예컨대, 각각이 자신의 스케줄러 유닛을 갖는 스칼라 정수 파이프라인, 스칼라 부동점/패킹 정수/패킹 부동점/벡터 정수/벡터 부동점 파이프 라인, 및/또는 메모리 액세스 파이프라인, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터 - 그리고 별도의 메모리 액세스 파이프라인의 경우에, 특정 실시예들은 오직 이 파이프라인의 실행 클러스터만 메모리 액세스 유닛(들)을 갖는 식으로 구현됨)에 대해 별도의 파이프라인들을 생성하기 때문에, 스케줄러 로직, 물리적 레지스터 파일(들) 유닛(들), 및 실행 로직은 가능한 것으로서 도시/기술된다. 또한, 별도의 파이프라인들이 사용된 곳에서, 이들 파이프라인의 하나 이상은 아웃-오브-오더 이슈/실행이고 나머지는 인-오더일 수 있다는 것을 이해해야 한다.
예시적 코어 아키텍처들, 프로세서들, 및 컴퓨터 아키텍처들
프로세서 코어들은 상이한 목적을 위해 그리고 상이한 프로세서들에서 상이한 방식을 구현될 수 있다. 예를 들면, 그러한 코어들의 구현예는, 1) 범용 컴퓨팅을 위해 의도된 범용 인-오더 코어; 2) 범용 컴퓨팅을 위해 의도된 고성능 범용 아웃-오브-오더 코어; 3) 그래픽 및/또는 과학적 (쓰루풋(throughput)) 컴퓨팅을 위해 우선적으로 의도된 특정 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현예는, 1)범용 컴퓨팅을 위해 의도된 하나 이상의 범용 인-오더 코어 및/또는 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 아웃-오브-오더 코어를 포함하는 CPU; 및 2) 그래픽 및/또는 과학적 (쓰루풋)을 위해 우선적으로 의도된 하나 이상의 특정 목적 코어를 포함하는 코프로세서를 포함할 수 있다. 그러한 상이한 프로세서들은 상이한 컴퓨터 시스템 아키텍처들을 야기하며, 이들 아키텍처는, 1) CPU로부터의 개별 칩 상의 코프로세서; 2) CPU와 동일한 패키지 내의 개별 다이(die) 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(이 경우, 그러한 코프로세서는 때때로 통합 그래픽 및/또는 과학적 (쓰루풋) 로직과 같은 특수 목적 로직, 또는 특수 목적 코어로 지칭됨); 4) (때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)로서 지칭되는) 설명된 CPU, 전술한 코프로세서, 및 부가의 기능을 전술한 다이 상에 포함할 수 있는 시스템 온 칩(system on a chip)을 포함할 수 있다. 예시적인 코어 아키텍처들이 다음에 설명되고, 뒤이어 예시적인 프로세서들 및 컴퓨터 아키텍처들의 설명이 이어진다.
예시적인 코어 아키텍처들
인-오더 및 아웃- 오브 -오더 코어 블록도
도 8a는 본 발명의 실시예에 따라 예시적인 인-오더 파이프라인 및 예시적인 레지스터 리네이밍 아웃-오브-오더 이슈/실행 파이프라인 모두를 도시하는 블록도이다. 도 8b는 본 발명의 실시예에 따라 프로세서에 포함될 예시적인 실시예의 인-오더 아키텍처 코어 및 예시적인 레지스터 리네이밍 아웃-오브-오더 이슈/실행 아키텍처 코어 모두를 도시하는 블록도이다. 도 8a 및 도 8b의 실선은 인-오더 파이프라인 및 인-오더 코어를 도시하는 반면, 선택적 추가의 점선 박스는 레지스터 리네이밍 아웃-오브-오더 이슈/실행 파이프라인 및 코어를 도시한다. 인-오더 양태가 아웃-오브-오더 양태의 서브세트라는 것을 고려하여, 아웃-오브-오더 양태가 설명될 것이다.
도 8a에서, 프로세서 파이프라인(800)은 페치 스테이지(802), 길이 디코딩 스테이지(804), 디코드 스테이지(806), 할당 스테이지(808), 리네이밍 스테이지(810), (디스패치 또는 이슈로도 알려진) 스케줄링 스테이지(812), 레지스터 판독/메모리 판독 스테이지(814), 실행 스테이지(816), 기입 백/메모리 기입 스테이지(818), 예외 처리 스테이지(822), 및 커미트 스테이지(824)를 포함한다.
도 8b는 실행 엔진 유닛(850)에 결합된 프론트 엔드 유닛(830)을 포함하는 프로세서 코어(890)를 도시하고, 실행 엔진 유닛(850) 및 프론트 엔드 유닛(830)은 모두 메모리 유닛(870)에 결합되어 있다. 코어(890)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대체 코어 유형일 수 있다. 또 다른 옵션으로서, 코어(890)는, 예를 들면, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, GPGPU(general purpose computing graphics processing unit) 코어, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프론트 엔드 유닛(830)은 브랜치 예측 유닛(832), 브랜치 예측 유닛(832)에 결합된 명령어 캐시 유닛(834), 명령어 캐시 유닛(834)에 결합된 명령어 TLB(translation lookaside buffer)(836), 명령어 TLB(836)에 결합된 명령어 페치 유닛(838), 및 명령어 페치 유닛(838)에 결합된 디코드 유닛(840)을 포함한다. 디코드 유닛(840)(또는 디코더)은 명령어들을 디코딩할 수 있고, 원래의 명령어들로부터 디코딩되거나, 또는 원래의 명령어들을 반영하거나, 또는 원래의 명령어들로부터 도출되는 하나 이상의 마이크로-동작들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들, 또는 다른 제어 신호들을 출력으로서 생성한다. 디코드 유닛(840)은 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다. 적절한 메커니즘들의 예로는, 이에 제한되는 것은 아니지만, 룩-업 테이블들, 하드웨어 구현예들, PLA(programmable logic array)들, 마이크로코드 ROM(read only memory)들 등이 포함된다. 일 실시예에서, 코어(890)는 마이크로코드 ROM 또는 임의의 매크로명령어들에 대한 마이크로코드를 (예를 들면, 디코드 유닛(840) 내에 또는 프론트 엔드 유닛(830) 내에) 저장하는 다른 매체를 포함한다. 디코드 유닛(840)은 실행 엔진 유닛(850) 내의 리네임/할당기 유닛(852)에 결합된다.
실행 엔진 유닛(850)은 리네임/할당기 유닛(852), 리네임/할당기 유닛(852)에 결합된 리타이어먼트 유닛(854) 및 하나 이상의 스케줄러 유닛(들)(856)의 세트를 포함한다. 스케줄러 유닛(들)(856)은 예비 스테이션들, 중앙 명령어 윈도우 등을 포함하는 임의의 수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(856)은 물리적 레지스터 파일(들) 유닛(들)(858)에 결합된다. 물리적 레지스터 파일(들) 유닛들(858) 각각은 하나 이상의 물리적 레지스터 파일들을 나타내고, 그들 중 상이한 것들은 스칼라 정수, 스칼라 부동 소수점, 패킹(packed) 정수, 패킹 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(예를 들면, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 유형을 저장한다. 일 실시예에서, 물리적 레지스터 파일(들) 유닛(858)은 벡터 레지스터 유닛, 기입 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이들 레지스터 유닛은 아키텍처 벡터 레지스터, 벡터 마스크 레지스터, 및 범용 레지스터를 제공할 수 있다. 물리적 레지스터 파일(들) 유닛(들)(858)은 리타이어먼트 유닛(854)에 의해 오버랩되어, (예를 들면, 레코더 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용하여; 미래의 파일(들), 히스토리 버퍼(들), 및 리타이어먼트 레지스터 파일(들)을 이용하여; 레지스터 맵 및 레지스터들의 풀을 이용하여; 기타를 이용하여) 레지스터 리네이밍 및 아웃-오브-오더 실행이 구현될 수 있는 다양한 방식들을 나타낸다. 리타이어먼트 유닛(854) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 실행 클러스터(들)(860)에 결합된다. 실행 클러스터(들)(860)은 하나 이상의 실행 유닛들(862)의 세트 및 하나 이상의 메모리 액세스 유닛들(864)의 세트를 포함한다. 실행 유닛들(862)은 다양한 유형의 데이터(예를 들면, 스칼라 부동 소수점, 패킹 정수, 패킹 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 동작들(예를 들면, 시프트, 가산, 차감, 승산)을 수행할 수 있다. 일부 실시예들이 특정 기능들 또는 기능들의 세트들에 전용인 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단지 하나의 실행 유닛 또는 모든 기능을 모두 수행하는 다수의 실행 유닛들을 포함할 수 있다. 임의의 실시예들이 임의의 데이터/동작들의 유형들(예를 들면, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹 정수/패킹 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 각각 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터 - 그리고 개별 메모리 액세스 파이프라인의 경우에, 그 파이프라인의 실행 클러스터만 메모리 액세스 유닛(들)(864)을 갖는 임의의 실시예들이 구현됨)에 대해 개별 파이프라인들을 생성하기 때문에, 스케줄러 유닛(들)(856), 물리적 레지스터 파일(들) 유닛(들)(858), 및 실행 클러스터(들)(860)가 거의 복수인 것으로 도시되어 있다. 개별 파이프라인들이 사용되는 곳에서, 이들 파이프라인들 중 하나 이상은 아웃-오브-오더 이슈/실행일 수 있고 나머지는 인-오더일 수 있다는 것이 또한 이해되어야 한다.
메모리 액세스 유닛들(864)의 세트는 메모리 유닛(870)에 결합되어 있고, 메모리 유닛(870)은 데이터 TLB 유닛(872), 데이터 TLB 유닛(872)에 결합된 데이터 캐시 유닛(874), 및 데이터 캐시 유닛(874)에 결합된 레벨 2(L2) 캐시 유닛(876)을 포함한다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛(864)은 부하 유닛, 저장 어드레스 유닛, 및 저장 데이터 유닛을 포함할 수 있고, 이들 각각은 메모리 유닛(870)의 데이터 TLB 유닛(872)에 결합된다. 명령어 캐시 유닛(834)은 또한 메모리 유닛(870) 내의 레벨 2(L2) 캐시 유닛(876)에 결합된다. L2 캐시 유닛(876)은 하나 이상의 다른 레벨들의 캐시 및 최종적으로는 주 메모리에 결합된다.
예를 들면, 예시적인 레지스터 리네이밍, 아웃-오브-오더 이슈/실행 코어 아키텍처는 다음과 같은 파이프라인(800)을 구현할 수 있다: 1) 명령어 페치(838)는 페치 및 길이 디코딩 스테이지(802 및 804)를 수행한다; 2) 디코드 유닛(840)은 디코드 스테이지(806)를 수행한다; 3) 리네임/할당기 유닛(852)은 할당 스테이지(808) 및 리네이밍 스테이지(810)를 수행한다; 4) 스케줄러 유닛(들)(856)은 스케줄 스테이지(812)를 수행한다; 5) 물리적 레지스터 파일(들) 유닛(들)(858) 및 메모리 유닛(870)은 레지스터 판독/메모리 판독 스테이지(814)를 수행한다; 실행 클러스터(860)는 실행 스테이지(816)를 수행한다; 6) 메모리 유닛(870) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 기입 백/메모리 기입 스테이지(818)을 수행한다; 7) 다양한 유닛들이 예외 처리 스테이지(822)에 관여할 수 있다; 8) 리타이어먼트 유닛(854) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 커미트 스테이지(824)를 수행한다.
코어(890)는, 여기서 설명된 명령어(들)를 포함하여 하나 이상의 명령어 세트들(예를 들면, (더 새로운 버전이 부가된 일부 확장을 갖는) x86 명령어 세트; 캘리포니아주 서니베일 소재의 MIPS 테크놀로지스사의 MIPS 명령어 세트; 캘리포니아주 서니베일 소재의 ARM 홀딩스사의 ARM 명령어 세트(NEON과 같은 선택적인 부가의 확장을 가짐))을 지원할 수 있다. 일 실시예에서, 코어(890)는 패킹 데이터 명령어 세트 확장(예를 들면, AVX1, AVX2)을 지원하는 로직을 포함하고, 이에 의해, 많은 멀티미디어 애플리케이션들에 의해 사용되는 동작들이 패킹 데이터를 이용하여 수행되게 할 수 있다.
코어가 (두 개 이상의 동작들 또는 쓰레드들의 병렬 세트를 실행하는) 멀티쓰레딩을 지원할 수 있고, 시간 슬라이스된 멀티쓰레딩, 동시 멀티쓰레딩(이 경우, 단일 물리적 코어는 물리적 코어가 동시에 멀티쓰레딩하고 있는 쓰레드들 각각에 대해 논리적 코어를 제공함), 또는 그들의 조합(예를 들면, 시간 슬라이스된 페칭 및 디코딩 및 인텔® 하이퍼쓰레딩 기술에서와 같이 그 후의 동시 멀티쓰레딩)을 포함하는 다양한 방식으로 그와 같이 할 수 있다는 것이 이해되어야 한다.
레지스터 리네이밍이 아웃-오브-오더 실행(out-of-order execution)의 관점에서 기술되었지만, 레지스터 리네이밍은 인-오더 아키텍처(in-order architecture)에서 이용될 수도 있다는 것을 이해해야 한다. 또한, 설명된 실시예의 프로세서는 별개의 명령어 캐시 유닛(834) 및 데이터 캐시 유닛(874)과 공유 L2 캐시 유닛(876)을 포함하며, 대안적인 실시예들은 명령어들 및 데이터 양자 모두를 위한, 예컨대 레벨 1(L1) 내부 캐시, 다중 레벨의 내부 캐시 등의 단일 내부 캐시를 가질 수 있다. 일부 실시예에서, 시스템은 코어 및/또는 프로세서의 외부에 있는 외부 캐시와 내부 캐시의 조합을 포함할 수 있다. 대안으로, 모든 캐시는 코어 및/또는 프로세서의 외부에 존재할 수 있다.
특정 예의 인 -오더 코어 아키텍처
도 9a 및 도 9b는 코어가 칩 내의 수 개의 로직 블록들 중 하나일 수 있는(동일한 유형 및/또는 다른 유형의 그 외 코어들을 포함함) 추가의 특정 예의 인-오더 코어 아키텍처의 블록도를 도시한다. 로직 블록들은 고대역폭 인터커넥트 네트워크(예컨대, 링 네트워크)를 통해 애플리케이션에 따라 일부 고정된 기능 로직, 메모리 I/O 인터페이스들, 및 그 외 필요한 I/O 로직과 통신한다.
도 9a는 본 발명의 실시예에 따른, 온-다이 인터커넥트 네트워크(902)에 대한 접속과 함께 레벨 2(L2) 캐시(904)의 로컬 서브세트를 갖는 단일 프로세서 코어의 블록도이다. 일 실시예에서, 명령어 디코더(900)는 패킹 데이터 명령어 세트 확장을 갖는 x86 명령어 세트를 지원한다. L1 캐시(906)는 캐시 메모리로의 저지연(low-latency) 액세스를 스칼라 유닛 및 벡터 유닛에 허용한다. (설계를 단순화 하기 위한) 일 실시예에서, 스칼라 유닛(908) 및 벡터 유닛(910)은 별개의 레지스터 세트들(각각 스칼라 레지스터(912) 및 벡터 레지스터(914))을 이용하며, 이들 사이에서 전송된 데이터는 메모리에 기입되고, 그 후 레벨 1(L1) 캐시(906)로부터 리드백(read back)되지만, 본 발명의 대안적 실시예에서는 다른 접근법을 이용할 수도 있다(예를 들어, 단일 레지스터를 이용하거나 또는 2개의 레지스터 파일들 사이에서 기입 및 리드백되지 않고서 데이터가 전송되게 하는 통신 경로를 포함함).
L2 캐시(904)의 로컬 서브세트는 별개의 로컬 서브세트들 - 프로세서 코어당 1개 - 로 분할되는 전체 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시(904)의 로컬 서브세트에 대한 직접적인 액세스 경로를 갖는다. 프로세서 코어에 의해 판독된 데이터는 L2 캐시 서브세트(904)에 저장되며, 또한 다른 프로세서 코어들이 자신의 로컬 L2 캐시 서브세트들에 액세스하는 것과 병행하여 신속하게 액세스될 수 있다. 프로세서 코어에 의해 기입된 데이터는 자신의 L2 캐시 서브세트(904)에 저장되며, 또한 필요할 경우 다른 서브세트로부터 플러시된다. 링 네트워크는 공유 데이터에 대한 코히어런시(coherency)를 보장한다. 링 네트워크는 양방향성을 가지므로, 프로세서 코어들, L2 캐시들 및 그 외 로직 블록들 등의 에이전트가 칩 내에서 서로 통신할 수 있게 해 준다. 각각의 링 데이터 경로는 방향당 1012-비트 폭을 갖는다.
도 9b는 본 발명의 실시예에 따른 도 9a의 프로세서 코어의 일부를 확대한 확대도이다. 도 9b는 L1 캐시(904)의 L1 데이터 캐시(906A) 부분과 함께 벡터 유닛(910) 및 벡터 레지스터들(914)에 관한 세부 사항을 포함하고 있다. 구체적으로, 벡터 유닛(910)은 16-와이드 VPU(vector processing unit)(16-와이드 ALU(928) 참조)이며, 이는 정수, 단정밀도 부동 소수점(single-precision float), 및 배정밀도 부동 소수점의 명령어들 중 하나 이상을 실행한다. VPU는 혼합 유닛(920)에 의한 레지스터 입력들의 혼합, 숫자 변환 유닛(922A-B)에 의한 숫자 변환, 및 메모리 입력에 대한 복제 유닛(924)의 복제를 지원한다. 기입 마스크 레지스터들(926)은 술어적 결과 벡터의 기입을 허용한다.
통합 메모리 컨트롤러 및 그래픽을 갖는 프로세서
도 10은 본 발명의 실시예들에 따른 2개 이상의 코어, 통합 메모리 컨트롤러, 및 통합 그래픽을 가질 수 있는 프로세서(1000)에 대한 블록도이다. 도 10에서 실선으로 된 박스들은 단일 코어(1002A), 시스템 에이전트(1010), 하나 이상의 버스 컨트롤러 유닛들(1016)의 세트를 갖는 프로세서(1000)를 나타내며, 선택적으 추가된 점선으로 된 박스들은 다중 코어들(1002A-N), 시스템 에이전트 유닛(1010) 내의 하나 이상의 통합 메모리 컨트롤러 유닛(들)(1014)의 세트, 및 특수 목적 로직(1008)을 갖는 대안적 프로세서(1000)를 나타낸다.
따라서, 프로세서(1000)의 서로 다른 구현들은, 1) 통합 그래픽 및/또는 체계적 (스루풋) 로직(하나 이상의 코어들을 포함할 수 있음)인 특수 목적 로직(1008)과 하나 이상의 범용 코어들(예컨대, 범용 인-오더 코어들, 범용 아웃-오브-오더 코어들, 이들 2개의 조합)인 코어들(1002A-N)을 갖는 CPU; 2) 그래픽 및/또는 체계적 (스루풋) 로직을 주목적으로 하는 복수의 특수 목적 코어들인 코어들(1002A-N)을 갖는 코프로세서; 및 3) 복수의 범용 인-오더 코어들인 코어들(1002A-N)을 갖는 코프로세서를 포함할 수 있다. 따라서, 프로세서(1000)는 범용 프로세서, 코프로세서 또는 특수 목적 프로세서, 예컨대 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(general purpose graphic processing unit), 하이-스루풋 MIC(many integrated core) 프로세서(30개 또는 그 이상의 코어들을 포함), 임베디드 프로세서 등일 수 있다. 프로세서는 하나 이상의 칩 상에서 구현될 수 있다. 프로세서(1000)는, 예컨대 BiCMOS, CMOS, 또는 NMOS 등의 다수의 프로세스 기술들 중 임의의 기술을 이용하여 하나 이상의 기판 상에서 구현되거나 및/또는 그 일부일 수 있다.
메모리 계층(memory hierarchy)은 코어들 내의 하나 이상의 레벨의 캐시, 하나 이상의 공유 캐시 유닛들(1006)의 세트, 및 통합 메모리 컨트롤러 유닛들(1014)의 세트에 결합된 외부 메모리(미도시)를 포함한다. 공유 캐시 유닛들(1006)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4) 등의 하나 이상의 중간-레벨 캐시들, 또는 그 외 레벨의 캐시, 최종 레벨 캐시(LLC), 및/또는 이들의 조합들을 포함할 수 있다. 일 실시예에서, 링 기반의 인터커넥트 유닛(1012)은 통합 그래픽 로직(1008), 공유 캐시 유닛들(1006)의 세트, 및 시스템 에이전트 유닛(1010)/통합 메모리 컨트롤러 유닛(들)(1014)을 상호접속시킬 수 있는 한편, 대안적인 실시예들은 이러한 유닛들을 상호접속시키기 위해 임의의 수의 공지된 기법들을 이용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛들(1006)과 코어들(1002A-N) 사이에는 코히어런시가 유지된다.
일부 실시예들에서, 하나 이상의 코어들(1002A-N)은 멀티-스레딩(multi-threading)이 가능하다. 시스템 에이전트(1010)는 코어들(1002A-N)을 조정하고 동작시키는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1010)은, 예컨대 PCU(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1002A-N) 및 통합 그래픽 로직(1008)의 전력 상태를 조절하는 데 필요한 로직 및 컴포넌트들일 수 있거나 또는 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속 디스플레이를 구동하기 위한 것이다.
코어들(1002A-N)은 아키텍처 명령어 세트의 관점에서 동종이거나 또는 이종일 수 있다; 즉, 2개 이상의 코어들(1002A-N)이 동일한 명령어 세트를 실행할 수 있는 반면, 다른 코어들은 그 명령어 세트의 서브세트 또는 상이한 명령어 세트만을 실행할 수 있다.
예시적인 컴퓨터 아키텍처
도 11-14는 예시적인 컴퓨터 아키텍처들의 블록도이다. 랩탑들, 데스크탑들, 핸드헬드 PC들, PDA(personal digital assistant)들, 엔지니어링 워크스테이션들, 서버들, 네트워크 장치들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, DSP(digital signal processor)들, 그래픽 장치들, 비디오 게임 장치들, 셋톱 박스들, 마이크로 컨트롤러들, 셀룰러 폰들, 휴대용 미디어 플레이어들, 핸드헬드 장치들, 및 그 외 다양한 전자 장치들에 대해 당해 분야에서 공지된 그 외의 시스템 설계 및 구성 역시 적합하다. 일반적으로, 본 명세서에 개시된 프로세서 및/또는 다른 실행 로직을 포함할 수 있는 대용량의 각종 시스템들 또는 전자 장치들이 적합하다.
이제 도 11을 참조하면, 본 발명의 일 실시예에 따른 시스템(1100)의 블록도가 도시되어 있다. 시스템(1100)은 컨트롤러 허브(1120)에 결합되는 하나 이상의 프로세서들(1110, 1115)을 포함할 수 있다. 일 실시예에서, 컨트롤러 허브(1120)는 GMCH(graphics memory controller hub)(1190) 및 입력/출력 허브(IOH)(1150)(별개의 칩들 상에 존재할 수 있음)를 포함하며, GMCH(1190)는 메모리(1140) 및 코프로세서(1145)에 결합된 메모리 및 그래픽 컨트롤러들을 포함하며, IOH(1150)는 입력/출력(I/O) 장치들(1160)을 GMCH(1190)에 결합한다. 대안으로, 메모리 및 그래픽 컨트롤러들 중 하나 또는 양자 모두는 (본 명세서에 기술된) 프로세서 내에 통합되고, 메모리(1140) 및 코프로세서(1145)는 프로세서(1110)에, 그리고 IOH(1150)를 갖는 단일 칩 내의 컨트롤러 허브(1120)에 직접 결합되어 있다.
도 11에는 선택적 속성의 추가적인 프로세서들(1115)이 파선으로 도시되어 있다. 각각의 프로세서(1110, 1115)는 본 명세서에 기술된 프로세싱 코어들 중 하나 이상을 포함할 수 있으며, 또한 프로세서(1000)의 특정 버전일 수도 있다.
메모리(1140)는, 예컨대 DRAM(dynamic random access memory), PCM(phase change memory), 또는 이 2개의 조합일 수 있다. 적어도 하나의 실시예에서, 컨트롤러 허브(1120)는 FSB(frontside bus) 등의 멀티-드롭 버스, QPI(Quick Path Interconnect) 등의 포인트 투 포인트 인터페이스, 또는 유사 접속부(1195)를 통해 프로세서(들)(1110, 1115)과 통신한다.
일 실시예에서, 코프로세서(1145)는 특수 목적 프로세서, 예컨대 하이-스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등이다. 일 실시예에서, 컨트롤러 허브(1120)는 통합 그래픽 가속기를 포함할 수 있다.
아키텍처 특성, 마이크로아키텍처 특성, 열적 특성, 전력 소모 특성 등을 포함하는 이점의 다양한 척도의 관점에서 물리적 리소스들(1110, 1115) 간에는 다양한 차이가 존재할 수 있다.
일 실시예에서, 프로세서(1110)는 범용 유형의 데이터 프로세싱 동작을 제어하는 명령어들을 실행한다. 이들 명령어들 내에는 코프로세서 명령어들이 임베딩될 수 있다. 프로세서(1110)는 이들 코프로세서 명령어들을 부착된 코프로세서(1145)에 의해 실행되어야 할 유형인 것으로 인식한다. 따라서, 프로세서(1110)는 코프로세서 버스 또는 그 외 인터커넥트 상에서 이들 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서(1145)에 발행한다. 코프로세서(들)(1145)는 수신된 코프로세서 명령어들을 받아 실행한다.
이제 도 12를 참조하면, 본 발명의 일 실시예에 따른 보다 구체적인 제1 예시적 시스템(1200)의 블록도가 도시되어 있다. 도 12에 도시된 바와 같이, 멀티프로세서 시스템(1200)은 포인트 투 포인트 인터커넥트 시스템이며, 또한 포인트 투 포인트 인터커넥트(1250)를 통해 결합된 제1 프로세서(1270)와 제2 프로세서(1280)를 포함한다. 프로세서들(1270, 1280)의 각각은 프로세서(1000)의 특정 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(1270, 1280)은 각각 프로세서들(1110, 1115)인 반면, 코프로세서(1238)는 코프로세서(1145)이다. 다른 실시예에서, 프로세서들(1270, 1280)은 각각 프로세서(1110) 및 코프로세서(1145)이다.
통합 메모리 컨트롤러(IMC) 유닛들(1272, 1282)을 각각 포함하는 프로세서들(1270, 1280)이 도시되어 있다. 또한, 프로세서(1270)는 자신의 버스 컨트롤러 유닛들의 일부로서 포인트 투 포인트(P-P) 인터페이스들(1276, 1278)을 포함하며, 마찬가지로, 제2 프로세서(1280)는 P-P 인터페이스들(1286, 1288)을 포함한다. 프로세서들(1270, 1280)은 P-P 인터페이스 회로들(1278, 1288)을 이용하여 포인트 투 포인트(P-P) 인터페이스(1250)를 통해 정보를 교환할 수 있다. 도 12에 도시된 바와 같이, IMC(1272, 1282)는 프로세서들을 각자의 메모리, 즉 메모리(1232) 및 메모리(1234)에 결합시키며, 이들 메모리들은 각자의 프로세서들에 로컬하게 부착된 메인 메모리의 일부일 수 있다.
프로세서들(1270, 1280) 각각은 포인트 투 포인트 인터페이스 회로들(1276, 1294, 1286, 1298)을 이용하여 개별 P-P 인터페이스들(1252, 1254)을 통해 칩셋(1290)과 정보를 교환할 수 있다. 칩셋(1290)은 고성능 인터페이스(1239)를 통해 코프로세서(1238)와 정보를 선택적으로 교환할 수 있다. 일 실시예에서, 코프로세서(1238)는, 예컨대 하이-스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등의 특수 목적 프로세서이다.
공유 캐시(미도시)는 어느 하나의 프로세서 내에 포함되거나 또는 양자 모두의 프로세서들의 외부에 존재할 수 있지만, P-P 인터커넥트를 통해 프로세서들과 접속되어 있기 때문에, 어느 하나의 프로세서 또는 양자 모두의 프로세서의 로컬 캐시 정보는 프로세서가 저 전력 모드로 들어가면 공유 캐시에 저장될 수 있다.
칩셋(1290)은 인터페이스(1296)를 통해 제1 버스(1216)에 결합될 수 있다. 본 발명의 범위가 제한적이지는 않지만, 일 실시예에서, 제1 버스(1216)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI 익스프레스 버스나 또 다른 제3 세대 I/O 인터커넥트 버스 등의 버스일 수 있다.
도 12에 도시된 바와 같이, 제1 버스(1216)에는 제1 버스(1216)를 제2 버스(1220)와 결합시키는 버스 브릿지(1218)와 함께 다양한 I/O 디바이스들(1214)이 결합될 수 있다. 일 실시예에서, 하나 이상의 추가적인 프로세서(들)(1215), 예컨대 코프로세서들, 하이-스루풋 MIC 프로세서들, GPGPU들, 가속기들(예컨대, 그래픽 가속기들 또는 DSP(digital signal processing) 유닛들 등), 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서가 제1 버스(1216)에 결합된다. 일 실시예에서, 제2 버스(1220)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 제2 버스(1220)에는, 예컨대 키보드 및/또는 마우스(1222), 통신 디바이스들(1227), 및 저장 유닛(1228), 예컨대 디스크 드라이브 또는 명령어들/코드 및 데이터(1230)를 포함할 수 있는 다른 대용량 저장 장치 등을 포함하여 다양한 디바이스들이 결합될 수 있다. 또한, 오디오 I/O(1224)는 제2 버스(1220)에 결합될 수 있다. 다른 아키텍처도 가능하다는 점에 유념하자. 예를 들어, 도 12의 포인트 투 포인트 아키텍처 대신에, 시스템은 멀티-드롭 버스 또는 그와 같은 다른 아키텍처를 구현할 수도 있다.
이제 도 13을 참조하면, 본 발명의 일 실시예에 따른 보다 구체적인 제2 예시적인 시스템(1300)의 블록도가 도시되어 있다. 도 12 및 도 13에서의 유사한 요소들은 유사한 참조 번호를 가지며, 도 13의 다른 양태들을 모호하게 하는 것을 방지하기 위해, 도 13으로부터 도 12의 특정 양태들에 대해서는 생략하였다.
도 13은 프로세서들(1270, 1280)이 통합 메모리 및 I/O 제어 로직(CL)(1272, 1282)을 각각 포함할 수 있다는 것을 도시한다. 따라서, CL(1272, 1282)은 통합 메모리 제어기 유닛들을 포함하며 I/O 제어 로직을 포함한다. 도 13은 메모리들(1232, 1234)이 CL(1272, 1282)에 연결된다는 것뿐만 아니라, I/O 디바이스들(1314)이 제어 로직(1272, 1282)에도 연결된다는 것을 도시한다. 레거시 I/O 디바이스들(1315)은 칩셋(1290)에 연결된다.
이제 도 14를 참조하면, 본 발명의 일 실시예에 따른 SoC(1400)의 블록도가 도시된다. 도 10의 유사 엘리먼트들은 유사 참조 번호들을 갖는다. 또한, 파선 박스들은 더 진보한 SoC들의 선택적인 구성들이다. 도 14에서, 인터커넥트 유닛(들)(1402)은, 하나 이상의 코어들(202A-N)의 세트 및 공유된 캐시 유닛(들)(1006)을 포함하는 애플리케이션 프로세서(1410); 시스템 에이전트 유닛(1010); 버스 제어기 유닛(들)(1016); 통합 메모리 제어기 유닛(들)(1014); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서들(1420) 또는 그들의 세트; SRAM 유닛(1430); DMA 유닛(1432); 및 하나 이상의 외부 디스플레이들에 연결하기 위한 디스플레이 유닛(1440)에 연결된다. 일 실시예에서, 코프로세서(들)(1420)은, 예를 들어 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 고수율 MIC 프로세서, 내장형 프로세서 등과 같은 특수 목적 프로세서를 포함한다.
본 명세서에 개시된 메카니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어 또는 그러한 실행 방식들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, 스토리지 시스템(휘발성 및 비휘발성 메모리 및/또는 스토리지 엘리먼트들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능 시스템들에서 실행하는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 12에 도시된 코드(1230)와 같은 프로그램 코드는 본 명세서에 기술된 기능들을 수행하고 출력 정보를 생성하라는 명령어들을 입력하도록 적용될 수 있다. 출력 정보는 하나 이상의 출력 디바이스들에 공지의 방식으로 적용될 수 있다. 본 출원을 위해, 프로세싱 시스템은 예를 들어, DSP(digital signal processor), 마이크로컨트롤러, ASIC(application specific integrated circuit) 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 고레벨의 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 또한, 프로그램 코드는, 필요하다면, 어셈블리 또는 기계 언어로 구현될 수 있다. 실제로, 본 명세서에 기술된 메카니즘들은 임의의 특별한 프로그램밍 언어로 범위가 한정되는 것은 아니다. 임의의 경우, 언어는 컴파일러형(compiled) 또는 해석형(interpreted) 언어일 수 있다.
적어도 하나의 실시예의 하나 이상의 양태들은, 머신에 의해 판독될 경우 머신이 본 명세서에 기술된 기술들을 수행하기 위한 로직을 제작하게 하는, 프로세서 내의 다양한 로직을 나타내는 머신 판독가능 매체에 저장되는 리프리젠테이션 명령어(representative instruction)들에 의해 구현될 수 있다. "IP 코어들"로 알려져 있는 그러한 리프리젠테이션들은, 로직 또는 프로세서를 실제로 제조하는 제조 머신들 내에 로딩하기 위해, 유형의 머신 판독가능 매체 상에 저장되고 다양한 고객들 또는 제조 공장들에 공급될 수 있다.
그러한 머신 판독가능한 저장 매체는, 하드 디스크들과, 플로피 디스크들, 광학 디스크들, CD-ROM들, CD-RW들 및 광자기 디스크들을 포함하는 임의의 다른 유형의 디스크와, ROM들, DRAM들 및 SRAM들과 같은 RAM들, EPROM들, 플래시 메모리들, EEPROM들, PCM, 자기 또는 광학 카드들, 또는 전자 명령어들을 저장하는 데 적합한 임의의 다른 유형의 매체와 같은 저장 매체를 포함하는 머신 또는 디바이스에 의해 제조 또는 형성된 아티클들의 비일시적인 유형의 구성들을 포함할 수 있으며, 이에 한정되지 아니한다.
따라서, 본 발명의 실시예들은, 명령어들 또는 본 명세서에 기술된 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 형상들을 정의하는, HDL(Hardware Description Language)과 같은 디자인 데이터를 포함하는 비일시적인 유형의 머신 판독가능 매체를 포함할 수도 있다. 그러한 실시예들은 프로그램 제품들로서 지칭될 수도 있다.
에뮬레이션(2진 트랜슬레이션 , 코드 몰핑 등을 포함함)
일부 경우들에 있어서, 명령어 변환기가 명령어를 소스 명령어 세트로부터 타겟 명령어 세트로 변환하는 데에 사용될 수 있다. 예를 들어, 명령어 변환기는 명령어를 코어에 의해 처리될 하나 이상의 다른 명령어들로 트렌슬레이팅(예를 들어, 정적 2진 트랜슬레이션, 동적 컴파일레이션을 포함하는 동적 2진 트랜슬레이션을 이용함), 몰핑, 에뮬레이팅 또는 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어 또는 이들의 조합에서 구현될 수 있다. 명령어 변환기는 프로세서, 오프 프로세서, 또는 파트 온 및 파트 오프 프로세서에 존재할 수 있다.
도 15는 본 발명의 실시예들에 따라 소스 명령어 세트 내의 2진 명령어들을 타겟 명령어 세트 내의 2진 명령어들로 변환하기 위한 소프트웨어 명령어 변환기의 이용을 대비하는 블록도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 변환기가지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 여러 조합들로 구현될 수 있다. 도 15는 고레벨 언어(1502)의 프로그램이 적어도 하나의 x86 명령어 세트 코어(1516)를 갖는 프로세서에 의해 네이티브하게(natively) 실행될 수 있는 x86 2진 코드(1506)를 생성하기 위해 x86 컴파일러(1504)를 이용하여 컴파일링될 수 있다는 것을 도시한다. 적어도 하나의 x86 인스터럭션 세트 코어(1516)를 갖는 프로세서는, 실질적으로 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 세트 코어의 인스트럭션 세트의 실질적인 부분 또는 (2) 애플리케이션들의 객체 코드 버전들 또는 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서에서 구동하도록 타겟팅된 다른 소프트웨어를 양립가능하게 실행하거나 프로세싱함으로써, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1504)는, 부가적인 연결 프로세싱을 이용하여 또는 그것을 이용하지 않더라도, 적어도 하나의 x86 명령어 세트 코어(1516)를 갖는 프로세서에서 실행될 수 있는 x86 2진 코드(1506)(가령, 객체 코드)를 생성하도록 동작가능한 컴파일러를 나타낸다. 유사하게, 도 15는, 고레벨 언어(1502)의 프로그램이 적어도 하나의 x86 명령어 세트 코어(1514)가 없는 프로세서(예를 들어, 캐나다의 Sunnyvale의 MIPS Technologies의 MIPS 명령어 세트 및/또는 캐나다 Sunnyvale의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 네이티브하게 실행될 수 있는 대안적인 명령어 세트 2진 코드(1501)를 생성하기 위해 대안적인 명령어 세트 컴파일러(1508)를 이용하여 컴파일링될 수 있다는 것을 도시한다. 명령어 변환기(1512)는 x86 2진 코드(1506)를 x86 명령어 세트 코어(1514)가 없는 프로세서에 의해 네이티브하게 실행될 수 있는 코드로 변환하는데 이용된다. 이 변환된 코드는, 이것이 가능한 명령어 변환기가 만들기 어렵기 때문에, 대안적인 명령어 세트 2진 코드(1510)와 동일하지 않을 것이다. 그러나, 변환된 코드는 일반적인 동작을 달성하며 대안적인 명령어 세트로부터의 명령어들로 이루어질 것이다. 따라서, 명령어 변환기(1512)는 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않은 프로세서 또는 다른 전자 디바이스가 x86 2진 코드(1506)를 실행하는 것을 허용하는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합을 나타낸다.
일부 실시예들에서, 백 엔드 로직(717)은 하나 이상의 예측 명령어들(716)의 실행을 반영하는 아키텍처 상태를 업데이트할지의 여부를 판정하도록 동작할 수 있다. 일부 실시예들에서, 리네이밍/할당 로직(750), 스케줄러 로직(들)(751), 실행 로직(들)(756), 리타이어/커미트 로직(들)(755), 물리적 레지스터 파일 유닛(들)(752) 또는 이들의 조합들은 예측 명령어들에 대하여 예측 또는 조건부 실행을 수행하도록 동작할 수 있다. 일부 실시예들에서, 이 로직은, 조건부 브랜치 명령어가 취해져야 한다고 궁극적으로 또는 최종적으로 결정할 때, 하나 이상의 예측 명령어들의 산술적으로 동등한(computation equivalent) 세트의 실행을 반영하기 위해 아키텍처 상태를 업데이트하지 않는 것으로 결정하도록 동작할 수 있다. 대안적으로, 이 로직은, 조건부 브랜치 명령어가 취해지지 않아야 한다고 궁극적으로 또는 최종적으로 결정할 때, 하나 이상의 예측 명령어들의 산술적으로 균등한 세트의 실행을 반영하기 위해 아키텍처 상태를 업데이트하는 것으로 결정할 수 있다. 조건부 브랜치 명령어는 반드시 평가될 필요는 없지만, 조건부 브랜치 명령어와 연관된 조건의 결과를 알 필요는 있다. 예로서, 각 조건부 명령어는 하나 이상의 술어 비트들(예를 들어, 술어 레지스터(들)(754) 내의 하나 이상의 비트들), 하나 이상의 플래그 비트들(예를 들어, 플래그 레지스터(들)(753) 내의 하나 이상의 비트들) 등을 특정할 수 있다. 만약 예측 명령어들에 의해 특정된 비트 또는 비트들의 값이 하나의 값을 가질 경우(예를 들어, 비트가 설정되거나 참(true)인 경우), 명령어는 실행될 수 있으며 그 결과는 아키텍처 상태에 수용될 것이다. 이와 달리, 비트 또는 비트들의 값이 다른 상이한 값을 가질 경우(예를 들어, 비트가 클리어 또는 거짓(false)일 경우), 명령어는 실행되지 않고 그 결과 또는 효과는 아키텍처 상태에 수용되지 않을 것이다.
도 1, 4, 5, 6 또는 7 중 어느 하나에 대해 기술된 컴포넌트들, 형상들 및 세부사항들은 도 2 또는 도 3에 선택적으로 사용될 수도 있다. 또한, 장치들 중 어느 하나에 대해 기술된 컴포넌트들, 형상들 및 세부사항들은, 실시예들에서 그러한 장치에 의해 그리고/또는 그러한 장치를 이용하여 수행되는 본 명세서에 기술된 방법들 중 어느 하나에 선택적으로 이용될 수 있다.
예시적 실시예들
이하의 예들은 추가적인 실시예들과 관련된다. 예들의 세부 사항들은 하나 이상의 다른 실시예들 어디에나 이용될 수 있다.
예 1은 조건부 브랜치들을 처리하는 프로세서이다. 프로세서는 조건부 쇼트 포워드 브랜치를 페치하기 위한 명령어 페치 로직을 포함하며, 조건부 쇼트 포워드 브랜치는 조건부 브랜치 명령어, 및 조건부 브랜치 명령어와 조건부 브랜치 명령어에 의해 표시될 포워드 브랜치 타겟 명령어 사이에서 프로그램 순서상 조건부 브랜치 명령어에 순차적으로 뒤따르는 하나 이상의 명령어들의 세트를 포함한다. 또한, 프로세스는 명령어 페치 로직에 연결된 명령어 변환 로직을 포함하며, 명령어 변환 로직은 조건부 쇼트 포워드 브랜치를 하나 이상의 예측 명령어들의 산술적으로 동등한 세트로 변환한다.
예 2는 예 1의 대상을 포함하며, 선택적으로 명령어 변환 로직은 조건부 부랜치 명령어를 제거한다.
예 3은 예 1의 대상을 포함하며, 선택적으로 명령어 변환 로직은 조건부 브랜치 명령어와 포워드 브랜치 타겟 명령어 사이에 있는 하나 이상의 명령어들의 세트 각각을 비예측 명령어로부터 예측 명령어로 변환한다.
예 4는 예 1의 대상을 포함하며, 선택적으로 명령어 변환 로직은 조건부 브랜치 명령어와 포워드 브랜치 타겟 명령어 사이에 있는 복수의 명령어들의 각각을 비예측 명령어로부터 예측 명령어로 변환한다.
예 5는 예 1의 대상을 포함하며, 선택적으로 명령어 변환 로직은, 조건부 브랜치 명령어가 취해질 것으로 예상되든지 취해지지 않을 것으로 예상되든지와 상관 없이, 하나 이상의 예측 명령어들의 산술적으로 동등한 세트를 나타내는 신호들을 출력한다.
예 6은 예 1의 대상을 포함하며, 선택적으로 명령어 변환 로직은 프로세서의 파이프라인의 디코드 스테이지에서 하드웨어 로직을 포함한다.
예 7은 예 1의 대상을 포함하며, 선택적으로 조건부 브랜치 명령어와 포워드 브랜치 타겟 명령어 사이의 하나 이상의 명령어들의 세트는 단일 이동(move) 명령어로 이루어지고, 명령어 변환 로직은 이동 명령어를 조건부 이동 명령어으로 변환한다.
예 8은 예 7의 대상을 포함하며, 선택적으로 조건부 이동 명령어는 조건부 이동 명령어의 조건이 거짓일 경우 예외가 발생하지 않는다.
도 9는 도 1-7의 대상을 포함하며, 선택적으로 명령어 변환 로직은 조건부 브랜치 명령어에 대한 브랜치 예측을 알 필요가 있는 명령어 변환 로직 없이 하나 이상의 예측 명령어들의 산술적으로 동등한 세트를 나타내는 신호들을 출력한다.
예 10은 도 1-7의 대상을 포함하며, 선택적으로 명령어 변환 로직에 연결된 백 엔드 로직을 더 포함하며, 백 엔드 로직은 하나 이상의 예측 명령어들의 산술적으로 동등한 세트를 실행하고, 조건부 브랜치 명령어가 취해져야 한다고 판정할 때 하나 이상의 예측 명령어들의 산술적으로 동등한 세트의 실행을 반영하기 위해 아키텍처 상태를 업데이트하지 않는 것으로 결정한다.
예시 11은 예시 1 내지 예시 7 중 어느 하나의 예시의 청구대상을 포함하고, 선택적으로, 명령어 변환 로직과 결합된 백 엔드 로직을 더 포함는데, 백 엔드 로직은 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트를 실행하고, 그리고 조건부 브랜치 명령어들이 취해지지 않았어야 한다는 결정을 할 경우, 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트의 실행을 반영하기 위해 아키텍처 상태를 업데이트하도록 결정한다.
예시 12는 예시 1 내지 예시 7 중 어느 하나의 예시의 청구대상을 포함하고, 선택적으로, 명령어 페치 로직은 항상 조건부 브랜치 명령어의 예측과는 무관한 포워드 브랜치 타겟 명령어와 조건부 브랜치 명령어 사이의 하나 이상의 명령어들을 페치한다.
예시 13은 조건부 브랜치들을 처리하는 방법이다. 방법은 조건부 쇼트 포워드 브랜치를 페칭하는 단계를 포함하는데, 조건부 쇼트 포워드 브랜치는 조건부 브랜치 명령어에 의해 표시된 포워드 브랜치 타겟 명령어와 조건부 브랜치 명령어 사이에서 프로그램 순서상 조건부 브랜치 명령어를 순차적으로 뒤따르는 하나 이상의 명령어들의 세트 및 조건부 브랜치 명령어를 포함한다. 또한, 방법은 조건부 쇼트 포워드 브랜치를 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트로 변환하는 단계를 포함한다.
예시 14는 예시 13의 청구 대상을 포함하고, 선택적으로, 조건부 브랜치 명령어가 취해질 것으로 예측되는지 또는 취해지지 않을 것으로 예측되는지 여부와 관계없이 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트를 나타내는 신호들을 프로세서의 백 엔드 로직에 제공하는 단계를 더 포함한다.
예시 15는 예시 13의 청구 대상을 포함하고, 선택적으로, 변환하는 단계는 조건부 브랜치 명령어와 포워드 브랜치 타겟 명령어 사이의 하나 이상의 명령어들의 세트의 각각을 비술어적에서 술어적 명령어들로 변환하는 단계를 포함한다.
예시 16은 예시 13의 청구 대상을 포함하고, 선택적으로, 변환하는 단계는 조건부 브랜치 명령어와 포워드 브랜치 타겟 명령어 사이의 복수의 명령어들의 각각을 비술어적에서 술어적 명령어들로 변환하는 단계를 포함한다.
예시 17은 예시 13의 청구 대상을 포함하고, 선택적으로, 변환하는 단계는 조건부 브랜치 명령어를 제거하는 단계를 포함하고, 변환하는 단계는 프로세서의 파이프라인의 디코드 스테이지에서 변환하는 단계를 포함한다.
예시 18은 예시 13 내지 예시 17 중 어느 하나의 예시의 청구 대상을 포함하고, 선택적으로, 브랜치 예측 로직의 연산에 관계없이 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트를 나타내는 신호들을 프로세서의 백 엔드 로직에 제공하는 단계를 더 포함한다.
예시 19는 예시 13 내지 예시 17 중 어느 하나의 예시의 청구대상을 포함한다. 청구 대상은 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트를 실행하는 단계를 포함한다. 또한, 청구대상은 사실상 조건부 브랜치 명령어가 취해져야 한다는 것을 결정하는 단계 및 조건부 브랜치 명령어가 취해져야 한다는 결정에 응답하여, 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트의 실행을 반영하기 위해 아키텍처 상태를 업데이트하지 않도록 결정하는 단계를 포함한다.
예시 20은 예시 13 내지 예시 17 중 어느 하나의 예시의 청구대상을 포함한다. 청구대상은 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트를 실행하는 단계를 포함한다. 또한, 청구대상은 사실상 조건부 브랜치 명령어가 취해지지 않아야 한다는 결정을 하는 단계를 포함한다. 또한, 청구대상은 조건부 브랜치 명령어가 취해지지 않아야 한다는 결정에 응답하여, 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트의 실행을 반영하기 위해 아키텍처 상태를 업데이트하도록 결정하는 단계를 포함한다.
예시 21은 예시 13 내지 예시 17 중 어느 하나의 예시의 청구대상을 포함하고, 선택적으로, 페칭하는 단계는 조건부 브랜치 명령어가 취해질 것으로 예측되는 경우에도 조건부 브랜치 명령어와 포워드 브랜치 타겟 명령어 사이의 하나 이상의 명령어들을 페칭하는 단계를 포함한다.
예시 22는 조건부 브랜치들을 처리하는 방법이다. 방법은 조건부 브랜치 명령어를 검출하는 단계를 포함한다. 또한, 방법은 쇼트 포워드 브랜치가 조건부 브랜치 명령어를 뒤따르도록 결정하는 단계를 포함한다. 또한, 방법은 쇼트 포워드 브랜치 내의 모든 명령어들이 대응하는 산술적으로 동등한 술어적 명령어들로 변환될 수 있도록 결정하는 단계를 포함한다.
예시 23은 예시 22의 청구대상을 포함하고, 선택적으로, 쇼트 포워드 브랜치 내의 상기 모든 명령어들을 대응하는 산술적으로 동등한 술어적 명령어들로 변환하는 단계 및 조건부 브랜치 명령어를 제거하는 단계를 더 포함한다.
예시 24는 예시 22 또는 예시 23의 청구대상을 포함한다. 청구대상은 산술적으로 동등한 술어적 명령어들을 실행하는 단계를 포함한다. 청구대상은 조건부 브랜치 명령어가 취해져야 한다는 것을 명확하게 결정하는 단계를 포함한다. 청구대상은 조건부 브랜치 명령어가 취해져야 한다는 결정을 한 후에, 산술적으로 동등한 술어적 명령어들의 실행을 반영하기 위해 아키텍처 상태를 업데이트 하지 않도록 결정하는 단계를 포함한다.
예시 25는 조건부 브랜치들을 처리하기 위한 시스템이다. 시스템은 인터커넥트를 포함한다. 또한, 시스템은 인터커넥트와 결합된 프로세서를 포함하는데, 프로세서는 조건부 쇼트 포워드 브랜치를 페치하기 위한 명령어 페치 로직을 포함하고, 조건부 쇼트 포워드 브랜치는 조건부 브랜치 명령어에 의해 표시된 포워드 브랜치 타겟 명령어와 조건부 브랜치 명령어 사이에서 프로그램 순서상 조건부 브랜치 명령어를 순차적으로 뒤따르는 하나 이상의 명령어들의 세트 및 조건부 브랜치 명령어를 포함한다. 또한, 시스템은 명령어 페치 로직과 결합된 명령어 변환 로직을 포함하는데, 명령어 변환 로직은 조건부 쇼트 포워드 브랜치를 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트로 변환한다. 또한, 시스템은 인터커넥트와 결합된 DRAM(dynamic random access memory)을 포함한다.
예시 26은 예시 25의 청구대상을 포함하고, 선택적으로, 명령어 변환 로직은 조건부 브랜치 명령어를 제거하고, 명령어 변환 로직은 조건부 브랜치 명령어와 포워드 브랜치 타겟 명령어 사이의 하나 이상의 명령어들의 세트의 각각을 비술어적에서 술어적으로 변환한다.
예시 27은 명령어 변환 로직과 결합된 백 엔드 로직을 포함하는 예시 25 또는 예시 26의 청구대상을 포함하고, 백 엔드 로직은 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트를 실행하고, 그리고 조건부 브랜치 명령어들이 취해졌어야 한다는 결정을 할 경우, 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트의 실행을 반영하기 위해 아키텍처 상태를 업데이트하지 않도록 결정한다.
예시 28은 예시 13 내지 예시 17 중 어느 하나의 예시의 방법을 수행하기 위한 장치를 포함한다.
예시 29는 예시 13 내지 예시 17 중 어느 하나의 예시의 방법을 수행하기 위한 수단을 포함하는 장치를 포함한다.
예시 30은 예시 22 또는 예시 23의 방법을 수행하기 위한 장치를 포함한다.
예시 31은 예시 22 또는 예시 23의 방법을 수행하기 위한 수단을 포함하는 장치를 포함한다.
예시 32는 본 명세서에서 실질적으로 기술된 바와 같이, 방법을 수행하기 위한 프로세서를 포함한다.
예시 33은 본 명세서에서 본 명세서에서 실질적으로 기술된 바와 같이, 방법을 수행하기 위한 수단을 포함하는 프로세서를 포함한다.
발명의 상세한 설명과 청구항들에서, "결합된(coupled)" 및 "접속된(connected)"이라는 용어가 그에 대한 파생어들과 함께 사용되었을 수 있다. 이러한 용어들이 서로에 대한 동의어가 아니라는 것이 이해되어야 한다. 오히려, 특정 실시예에서, "접속된"은 두 개 이상의 요소들이 서로에 대해 직접적인 물리적 또는 전기적 접촉 상태라는 것을 나타내는 데에 사용될 수 있다. "결합된"은 두 개 이상의 요소들이 직접적인 물리적 또는 전기적 접촉 상태인 것을 의미할 수 있다. 그러나, "결합된"은 두 개 이상의 요소들이 서로에 대해 직접적인 접촉 상태는 아니지만, 서로에 대해 협력(co-operate) 또는 상호작용하는 상태인 것도 의미할 수 있다. 예를 들어, 명령어 변환 로직은 중간 명령어 큐 또는 그 외의 명령어 스토리지에 의해 명령어 페치 로직과 결합될 수 있다. 도면들에서 화살표들은 접속부들과 결합부들을 도시하는 데에 사용된다.
발명의 상세한 설명 및 청구항들에서 "로직"이라는 용어가 사용되었을 수 있다. 본 명세서에서 사용된 바와 같이, 로직은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합들 등의 모듈을 포함할 수 있다. 로직의 예시는 집적 회로, 주문형 반도체, 아날로그 회로, 디지털 회로, 프로그래밍된 로직 장치, 명령어들을 포함하는 메모리 장치 등을 포함한다. 일부 실시예들에서, 하드웨어 로직은 가능한 그 외의 회로 구성 요소들과 함께 트랜지스터들 그리고/또는 게이트들을 포함할 수 있다.
용어 "그리고/또는"이 사용되었을 수 있다. 본 명세서에서 사용된 바와 같이, 용어 "그리고/또는"은 하나 또는 그 외 또는 모두(예컨대, A 그리고/또는 B는 A 또는 B 또는 A와 B 모두를 의미함)를 의미할 수 있다.
위의 발명의 상세한 설명에서, 설명을 위한 목적으로, 본 발명의 실시예들의 완벽한 이해를 제공하기 위해 수 개의 특정한 상세들이 제시되었다. 그러나, 당업자에게는 하나 이상의 그 외의 실시예들이 일부 이러한 구체적인 상세들 없이도 실행될 수 있다는 것이 명백하다. 기술된 특정 실시예들은 본 발명을 제한하기 위함이 아닌, 예시적인 실시예들을 통해 설명하기 위해 제공된다. 본 발명의 범위는 구체적인 예시들이 아닌, 청구항들에 의해서만 결정된다. 그 외의 예들에서는, 발명의 상세한 설명에 대한 이해를 방해하는 것을 방지하기 위해 공지된 회로들, 구조들, 장치들, 및 연산들은 블록도의 형태로 또는 상세 없이 도시되었다.
적합하다고 고려되는 경우, 참조 번호들 또는 참조번호들의 끝 부분들은 다르게 명시되거나 또는 명백하게 다른 것이 아닌 이상, 유사한 또는 동일한 특징들을 선택적으로 가질 수 있는, 대응하는 또는 유사한 요소들을 나타내기 위해 도면들 사이에서 반복되었다. 복수의 구성요소들이 기술된 일부 경우들에서는 이러한 복수의 구성요소들이 하나의 구성요소로 통합될 수 있다. 단일 구성요소가 기술된 그 외의 경우에는, 이러한 단일 구성요소는 복수의 구성요소들로 분리될 수 있다.
다양한 연산들 및 방법들이 기술되었다. 일부 방법들은 플로우 다이어그램들에서 상대적으로 기본적인 형태로 기술되었으나, 연산들은 선택적으로 방법들에 추가될 수 있고, 그리고/또는 방법들로부터 제거될 수 있다. 또한, 플로우 다이어그램들이 예시적인 실시예들에 따른, 연산들의 특정 순서를 도시하지만, 이러한 특정 순서는 예시적이다. 대안적인 실시예들은 선택적으로, 연산들을 상이한 순서로 수행하거나, 특정 연산들을 조합하거나, 특정 연산들을 중복되게할 수 있다.
본 명세서에 걸친, "일 실시예", "실시예", "하나 이상의 실시예들"에 대한 참조는, 예컨대 특정한 특징이 본 발명의 실행에 포함될 수 있다는 것을 의미한다는 것이 이해될 것이다. 유사하게, 발명의 상세한 설명에서, 다양한 특징들은 본 명세를 간소화하고 본 발명의 다양한 양태들의 이해를 돕기 위한 목적으로 때때로 단일의 실시예, 도면, 또는 이들에 대한 설명으로 같이 그룹화된다는 것이 이해될 것이다. 그러나, 이와 같은 개시 방식은 본 발명이 각 청구항에 명확히 인용된 것 이상의 특징을 요구하려는 의도를 반영하는 것으로 해석되지 않아야 한다. 그보다는, 이하의 청구항들이 나타내는 바와 같이, 본 발명의 양태들은 개시된 단일 실시예의 모든 특징들보다 적게 포함되어 있을 수 있다. 따라서, 발명의 상세한 설명에 후속하는 청구항들은 본 발명의 상세한 설명에 명확히 포함되며, 각 청구항은 개별적인 본 발명의 실시예로서 그 자체를 대표한다.

Claims (42)

  1. 조건부 브랜치를 처리하기 위한 프로세서로서,
    조건부 쇼트 포워드 브랜치(conditional short forward branch)를 페치(fetch)하기 위한 명령어 페치 로직 - 상기 조건부 쇼트 포워드 브랜치는, 조건부 브랜치 명령어 및 하나 이상의 명령어들의 세트를 포함하며, 상기 하나 이상의 명령어 세트는 상기 조건부 브랜치 명령어에 의해 표시되는 포워드 브랜치 타겟 명령어와 상기 조건부 브랜치 명령어 사이에서 프로그램 순서상 상기 조건부 브랜치 명령어에 순차적으로 뒤따름 - ;
    상기 조건부 브랜치 명령어를 또한 포함하는 상기 프로세서의 명령어 세트에서 하나 이상의 술어적(predicated) 명령어의 산술적으로 동등한 세트(computationally equivalent set)가 이용가능하다는 결정에 적어도 부분적으로 기초하여 상기 조건부 쇼트 포워드 브랜치를 변환하기로 결정하기 위한 로직; 및
    상기 명령어 페치 로직에 결합된 명령어 변환 로직 - 상기 명령어 변환 로직은 상기 조건부 쇼트 포워드 브랜치를, 상기 조건부 브랜치 명령어를 또한 포함하는 상기 프로세서의 상기 명령어 세트에서 각각 이용가능한 상기 하나 이상의 술어적 명령어의 상기 산술적으로 동등한 세트에 대응하는 제어 신호들로 변환함 -
    을 포함하는 프로세서.
  2. 삭제
  3. 제1항에 있어서,
    상기 명령어 변환 로직은, 상기 조건부 브랜치 명령어와 상기 포워드 브랜치 타겟 명령어 사이에 존재하는 상기 하나 이상의 명령어들의 상기 세트 중 각각의 명령어를 비술어적(non-predicated) 명령어로부터 술어적 명령어에 대응하는 하나 이상의 제어 신호로 변환하는 것인, 프로세서.
  4. 제1항에 있어서,
    상기 명령어 변환 로직은, 상기 조건부 브랜치 명령어와 상기 포워드 브랜치 타겟 명령어 사이에 존재하는 복수의 명령어들의 각각을 비술어적 명령어로부터 술어적 명령어에 대응하는 하나 이상의 제어 신호로 변환하는 것인, 프로세서.
  5. 제1항에 있어서,
    상기 명령어 변환 로직은, 상기 조건부 브랜치 명령어가 취해질 것으로 예측되는지 또는 취해지지 않을 것으로 예측되는지에 관계없이 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트를 나타내는 상기 제어 신호들을 출력하는 것인, 프로세서.
  6. 제1항에 있어서,
    상기 명령어 변환 로직은 상기 프로세서의 파이프라인의 디코드 스테이지에서의 하드웨어 로직을 포함하는 프로세서.
  7. 제1항에 있어서,
    상기 조건부 브랜치 명령어와 상기 포워드 브랜치 타겟 명령어 사이의 상기 하나 이상의 명령어들의 상기 세트는 단일 이동 명령어(move instruction)를 포함하며, 상기 명령어 변환 로직은 상기 이동 명령어를 조건부 이동 명령어에 대응하는 제어 신호들로 변환하는 것인, 프로세서.
  8. 제7항에 있어서,
    상기 조건부 이동 명령어는 상기 조건부 이동 명령어의 조건이 거짓인 경우 예외(exception)를 발생시키지 않는 프로세서.
  9. 제1항 및 제3항 내지 제7항 중 어느 한 항에 있어서,
    상기 명령어 변환 로직은, 상기 명령어 변환 로직이 상기 조건부 브랜치 명령어에 대한 브랜치 예측(prediction)을 알 필요없이, 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트를 나타내는 제어 신호들을 출력하는 것인, 프로세서.
  10. 제1항 및 제3항 내지 제7항 중 어느 한 항에 있어서,
    상기 명령어 변환 로직에 결합된 백 엔드 로직(back end logic)
    을 더 포함하며,
    상기 백 엔드 로직은, 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트를 실행하며, 상기 조건부 브랜치 명령어가 취해졌어야 하는 것으로 결정하는 경우 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트의 상기 실행을 반영하기 위해 아키텍처 상태(architecture state)를 업데이트하지 않는, 프로세서.
  11. 제1항 및 제3항 내지 제7항 중 어느 한 항에 있어서,
    상기 명령어 변환 로직에 결합된 백 엔드 로직
    을 더 포함하며,
    상기 백 엔드 로직은 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트를 실행하며, 상기 조건부 브랜치 명령어가 취해지지 않았어야 하는 것으로 결정하는 경우 상기 하나 이상의 술어적 명령어들의 산술적으로 동등한 세트의 실행을 반영하기 위해 아키텍처 상태를 업데이트하는, 프로세서.
  12. 제1항 및 제3항 내지 제7항 중 어느 한 항에 있어서,
    상기 명령어 페치 로직은 상기 조건부 브랜치 명령어의 예측에 관계없이 상기 조건부 브랜치 명령어와 상기 포워드 브랜치 타겟 명령어 사이에 있는 상기 하나 이상의 명령어들을 항상 페치하는 것인, 프로세서.
  13. 프로세서에 의해 수행되는, 조건부 브랜치들을 처리하는 방법으로서,
    상기 프로세서의 명령어 페치 유닛으로, 조건부 쇼트 포워드 브랜치를 페치하는 단계 - 상기 조건부 쇼트 포워드 브랜치는, 조건부 브랜치 명령어 및 하나 이상의 명령어들의 세트를 포함하며, 상기 하나 이상의 명령어들의 세트는 상기 조건부 브랜치 명령어에 의해 표시되는 포워드 브랜치 타겟 명령어와 상기 조건부 브랜치 명령어 사이에서 프로그램 순서상 상기 조건부 브랜치 명령어에 순차적으로 뒤따름 - ;
    상기 조건부 브랜치 명령어를 포함하는 프로세서의 명령어 세트가 하나 이상의 술어적 명령어의 산술적으로 동등한 세트를 또한 포함하는지를 결정하는 단계; 및
    상기 프로세서의 디코드 스테이지에서의 명령어 변환 로직으로, 상기 조건부 쇼트 포워드 브랜치를, 상기 조건부 브랜치 명령어를 또한 포함하는 상기 프로세서의 상기 명령어 세트에 각각 포함되는 상기 하나 이상의 술어적 명령어의 상기 산술적으로 동등한 세트에 대응하는 제어 신호들로 변환하는 단계
    를 포함하는 방법.
  14. 제13항에 있어서,
    상기 조건부 브랜치 명령어가 취해질 것으로 예측되는지 또는 취해지지 않을 것으로 예측되는지에 관계없이, 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트를 나타내는 상기 제어 신호들을 상기 프로세서의 백 엔드 로직에 제공하는 단계
    를 더 포함하는 방법.
  15. 제13항에 있어서,
    상기 변환하는 단계는, 상기 조건부 브랜치 명령어와 상기 포워드 브랜치 타겟 명령어 사이의 상기 하나 이상의 명령어들의 상기 세트 중 각각의 명령어를 비술어적 명령어로부터 술어적 명령어에 대응하는 제어 신호들로 변환하는 단계를 포함하는 방법.
  16. 제13항에 있어서,
    상기 변환하는 단계는, 상기 조건부 브랜치 명령어와 상기 포워드 브랜치 타겟 명령어 사이의 복수의 명령어들 각각을 비술어적 명령어로부터 술어적 명령어에 대응하는 제어 신호들로 변환하는 단계를 포함하는 방법.
  17. 삭제
  18. 제13항 내지 제16항 중 어느 한 항에 있어서,
    브랜치 예측 로직의 동작에 관계없이 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트를 나타내는 상기 제어 신호들을 상기 프로세서의 백 엔드 로직에 제공하는 단계를 더 포함하는 방법.
  19. 제13항 내지 제16항 중 어느 한 항에 있어서,
    상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트를 실행하는 단계;
    상기 조건부 브랜치 명령어가 취해져야 한다는 사실을 결정하는 단계; 및
    상기 조건부 브랜치 명령어가 취해져야 한다고 결정하는 것에 응답하여, 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트의 상기 실행을 반영하기 위해 아키텍처 상태를 업데이트하지 않도록 결정하는 단계
    를 더 포함하는 방법.
  20. 제13항 내지 제16항 중 어느 한 항에 있어서,
    상기 하나 이상의 술어적 명령어의 상기 산술적으로 동등한 세트를 실행하는 단계;
    상기 조건부 브랜치 명령어가 취해지지 않아야 한다는 사실을 결정하는 단계; 및
    상기 조건부 브랜치 명령어가 취해지지 않아야 한다고 결정하는 것에 응답하여 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트의 실행을 반영하기 위해 아키텍처 상태를 업데이트하도록 결정하는 단계
    를 더 포함하는 방법.
  21. 제13항 내지 제16항 중 어느 한 항에 있어서,
    상기 페치하는 단계는, 상기 조건부 브랜치 명령어가 취해질 것으로 예측되는 경우라도 상기 조건부 브랜치 명령어와 상기 포워드 브랜치 타겟 명령어 사이의 상기 하나 이상의 명령어들을 페치하는 단계를 포함하는 방법.
  22. 프로세서에 의해 수행되는, 조건부 브랜치들을 처리하는 방법으로서,
    상기 프로세서의 조건부 쇼트 포워드 브랜치 검출 로직으로, 조건부 브랜치 명령어를 검출하는 단계;
    상기 조건부 쇼트 포워드 브랜치 검출 로직으로, 쇼트 포워드 브랜치가 상기 조건부 브랜치 명령어에 뒤따르는 것으로 결정하는 단계; 및
    상기 프로세서의 로직으로, 상기 쇼트 포워드 브랜치 내의 모든 명령어들이 상기 조건부 브랜치 명령어와 동일한 명령어 세트의 대응하는 산술적으로 동등한 술어적 명령어들로 변환될 수 있는 것으로 결정하는 단계
    를 포함하는 방법.
  23. 제22항에 있어서,
    상기 쇼트 포워드 브랜치 내의 상기 모든 명령어들을 상기 대응하는 산술적으로 동등한 술어적 명령어들에 대응하는 제어 신호들로 변환하는 단계, 및
    상기 조건부 브랜치 명령어를 제거하는 단계
    를 더 포함하는 방법.
  24. 제22항 또는 제23항에 있어서,
    상기 산술적으로 동등한 술어적 명령어들을 실행하는 단계;
    상기 조건부 브랜치 명령어가 취해져야 한다고 명확히 결정하는 단계; 및
    상기 조건부 브랜치 명령어가 취해져야 한다는 결정 후에, 상기 산술적으로 동등한 술어적 명령어의 상기 실행을 반영하기 위해 아키텍처 상태를 업데이트하지 않도록 결정하는 단계
    를 더 포함하는 방법.
  25. 조건부 브랜치들을 처리하기 위한 시스템으로서,
    인터커넥트;
    상기 인터커넥트에 결합된 프로세서; 및
    상기 인터커넥트에 결합된 DRAM(Dynamic Random Access Memory)
    을 포함하고,
    상기 프로세서는,
    조건부 쇼트 포워드 브랜치를 페치하기 위한 명령어 페치 로직 - 상기 조건부 쇼트 포워드 브랜치는, 조건부 브랜치 명령어 및 하나 이상의 명령어들의 세트를 포함하며, 상기 하나 이상의 명령어들의 세트는 상기 조건부 브랜치 명령어에 의해 표시되는 포워드 브랜치 타겟 명령어와 상기 조건부 브랜치 명령어 사이에서 프로그램 순서상 상기 조건부 브랜치 명령어에 순차적으로 뒤따름 - ;
    상기 조건부 브랜치 명령어를 또한 포함하는 상기 프로세서의 명령어 세트에서 하나 이상의 술어적 명령어의 산술적으로 동등한 세트가 이용가능한지를 결정하기 위한 로직; 및
    상기 명령어 페치 로직에 결합된 명령어 변환 로직 - 상기 명령어 변환 로직은 상기 조건부 쇼트 포워드 브랜치를, 상기 조건부 브랜치 명령어를 또한 포함하는 상기 프로세서의 상기 명령어 세트에서 각각 이용가능한 상기 하나 이상의 술어적 명령어의 상기 산술적으로 동등한 세트에 대응하는 제어 신호들로 변환함 -
    을 포함하는, 시스템.
  26. 제25항에 있어서,
    상기 명령어 변환 로직은 상기 조건부 브랜치 명령어를 제거하는 것이며, 상기 명령어 변환 로직은 상기 조건부 브랜치 명령어와 상기 포워드 브랜치 타겟 명령어 사이에 있는 상기 하나 이상의 명령어들의 상기 세트 중 각각의 명령어를 비술어적 명령어로부터 술어적 명령어에 대응하는 제어 신호들로 변환하는 것인, 시스템.
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 제13항 내지 제16항, 제22항 및 제23항 중 어느 한 항에 기재된 방법을 수행하는 프로세서.
  33. 제13항 내지 제16항, 제22항 및 제23항 중 어느 한 항에 기재된 방법을 수행하기 위한 수단을 포함하는 프로세서.
  34. 삭제
  35. 제1항 및 제3항 내지 제7항 중 어느 한 항에 있어서,
    상기 명령어 변환 로직과 결합되는 백 엔드 로직을 더 포함하고, 상기 백 엔드 로직은 상기 조건부 브랜치 명령어가 취해졌어야 하는 경우 상기 술어적 명령어들 중 하나와 연관되는 예외를 발생시키지 않는, 프로세서.
  36. 조건부 브랜치들을 처리하기 위한 프로세서로서,
    조건부 쇼트 포워드 브랜치를 페치하기 위한 명령어 페치 로직 - 상기 조건부 쇼트 포워드 브랜치는, 조건부 브랜치 명령어 및 하나 이상의 명령어들의 세트를 포함하며, 상기 하나 이상의 명령어 세트는 상기 조건부 브랜치 명령어에 의해 표시되는 포워드 브랜치 타겟 명령어와 상기 조건부 브랜치 명령어 사이에서 프로그램 순서상 상기 조건부 브랜치 명령어에 순차적으로 뒤따름 - ; 및
    상기 조건부 브랜치 명령어를 또한 포함하는 상기 프로세서의 명령어 세트에서 하나 이상의 술어적 명령어의 산술적으로 동등한 세트가 이용가능하다는 결정에 적어도 부분적으로 기초하여 상기 조건부 쇼트 포워드 브랜치를 변환하기로 결정하기 위한 로직; 및
    상기 명령어 페치 로직에 결합된 명령어 변환 로직 - 상기 명령어 변환 로직은 상기 조건부 쇼트 포워드 브랜치를 상기 하나 이상의 술어적 명령어의 상기 산술적으로 동등한 세트에 대응하는 제어 신호들로 변환함 -
    을 포함하고,
    상기 명령어 변환 로직은 상기 프로세서의 파이프라인의 디코드 스테이지에서의 하드웨어 로직을 포함하는, 프로세서.
  37. 제36항에 있어서,
    상기 프로세서는 상기 명령어 변환 로직과 결합되는 백 엔드 로직을 더 포함하고, 상기 백 엔드 로직은 상기 조건부 브랜치 명령어가 취해졌어야 하는 경우 상기 술어적 명령어들 중 하나와 연관되는 예외를 발생시키지 않는, 프로세서.
  38. 조건부 브랜치들을 처리하기 위한 프로세서로서,
    조건부 쇼트 포워드 브랜치를 페치하기 위한 명령어 페치 로직 - 상기 조건부 쇼트 포워드 브랜치는, 조건부 브랜치 명령어 및 하나 이상의 명령어들의 세트를 포함하며, 상기 하나 이상의 명령어 세트는 상기 조건부 브랜치 명령어에 의해 표시되는 포워드 브랜치 타겟 명령어와 상기 조건부 브랜치 명령어 사이에서 프로그램 순서상 상기 조건부 브랜치 명령어에 순차적으로 뒤따름 - ;
    상기 명령어 페치 로직에 결합된 명령어 변환 로직 - 상기 명령어 변환 로직은 상기 조건부 쇼트 포워드 브랜치를, 상기 조건부 브랜치 명령어를 또한 포함하는 상기 프로세서의 명령어 세트에서 각각 이용가능한 하나 이상의 술어적 명령어의 산술적으로 동등한 세트에 대응하는 제어 신호들로 변환함 -; 및
    상기 명령어 변환 로직에 결합된 백 엔드 로직 - 상기 백 엔드 로직은, 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트에 대응하는 상기 제어 신호들을 실행하며, 상기 조건부 브랜치 명령어가 취해졌어야 하는 경우 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트에 대응하는 상기 제어 신호들의 상기 실행을 반영하기 위해 아키텍처 상태를 업데이트하지 않음 -
    을 포함하는 프로세서.
  39. 제38항에 있어서,
    상기 백 엔드 로직은 상기 조건부 브랜치 명령어가 취해졌어야 하는 경우 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트 중 하나의 명령어와 연관되는 예외를 발생시키지 않는, 프로세서.
  40. 제1항에 있어서,
    상기 명령어 변환 로직은 상기 조건부 브랜치 명령어를 제거하는, 프로세서.
  41. 제13항에 있어서,
    상기 조건부 브랜치 명령어를 제거하는 단계를 더 포함하는 방법.
  42. 제25항에 있어서,
    상기 명령어 변환 로직에 결합된 백 엔드 로직 - 상기 백 엔드 로직은, 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트를 실행하며, 상기 조건부 브랜치 명령어가 취해졌어야 하는 경우 상기 하나 이상의 술어적 명령어들의 상기 산술적으로 동등한 세트의 상기 실행을 반영하기 위해 아키텍처 상태를 업데이트하지 않음 - 을 더 포함하는 시스템.
KR1020140030645A 2013-03-15 2014-03-14 조건부 쇼트 포워드 브랜치들을 산술적으로 동등한 술어적 명령어들로 변환 KR101723711B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/838,450 US9367314B2 (en) 2013-03-15 2013-03-15 Converting conditional short forward branches to computationally equivalent predicated instructions
US13/838,450 2013-03-15

Publications (2)

Publication Number Publication Date
KR20140113577A KR20140113577A (ko) 2014-09-24
KR101723711B1 true KR101723711B1 (ko) 2017-04-05

Family

ID=50634890

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140030645A KR101723711B1 (ko) 2013-03-15 2014-03-14 조건부 쇼트 포워드 브랜치들을 산술적으로 동등한 술어적 명령어들로 변환

Country Status (6)

Country Link
US (1) US9367314B2 (ko)
JP (1) JP5941488B2 (ko)
KR (1) KR101723711B1 (ko)
CN (1) CN104049944A (ko)
DE (1) DE102014003667A1 (ko)
GB (1) GB2515148B (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160179538A1 (en) * 2014-12-19 2016-06-23 Intel Corporation Method and apparatus for implementing and maintaining a stack of predicate values with stack synchronization instructions in an out of order hardware software co-designed processor
US9916164B2 (en) * 2015-06-11 2018-03-13 Intel Corporation Methods and apparatus to optimize instructions for execution by a processor
US20160378480A1 (en) * 2015-06-27 2016-12-29 Pavel G. Matveyev Systems, Methods, and Apparatuses for Improving Performance of Status Dependent Computations
US20170123798A1 (en) 2015-11-01 2017-05-04 Centipede Semi Ltd. Hardware-based run-time mitigation of blocks having multiple conditional branches
WO2017072615A1 (en) * 2015-11-01 2017-05-04 Centipede Semi Ltd. Hardware-based run-time mitigation of conditional branches
US20180081806A1 (en) * 2016-09-22 2018-03-22 Qualcomm Incorporated Memory violation prediction
US10691455B2 (en) 2017-05-23 2020-06-23 Samsung Electronics Co., Ltd Power saving branch modes in hardware
US11188340B2 (en) 2018-12-20 2021-11-30 International Business Machines Corporation Multiple streams execution for hard-to-predict branches in a microprocessor

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100260859B1 (ko) * 1995-03-23 2000-07-01 포만 제프리 엘. 초장 명령어 워드 프로그램의 오브젝트-코드 호환가능 표현
US6662294B1 (en) * 2000-09-28 2003-12-09 International Business Machines Corporation Converting short branches to predicated instructions
US20100262813A1 (en) * 2009-04-14 2010-10-14 International Business Machines Corporation Detecting and Handling Short Forward Branch Conversion Candidates
US20120159125A1 (en) * 2007-10-25 2012-06-21 International Business Machines Corporation Efficiency of short loop instruction fetch

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5799180A (en) 1995-10-31 1998-08-25 Texas Instruments Incorporated Microprocessor circuits, systems, and methods passing intermediate instructions between a short forward conditional branch instruction and target instruction through pipeline, then suppressing results if branch taken
JPH10124315A (ja) 1996-10-18 1998-05-15 Hitachi Ltd 分岐処理方法およびそのための情報処理装置
US6430682B1 (en) 1998-09-11 2002-08-06 Agere Systems Guardian Corp. Reliable branch predictions for real-time applications
US6513109B1 (en) 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6754812B1 (en) 2000-07-06 2004-06-22 Intel Corporation Hardware predication for conditional instruction path branching
US6918032B1 (en) 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US7039909B2 (en) * 2001-09-29 2006-05-02 Intel Corporation Method and apparatus for performing compiler transformation of software code using fastforward regions and value specialization
US7299343B2 (en) 2002-09-27 2007-11-20 Verisilicon Holdings (Cayman Islands) Co. Ltd. System and method for cooperative execution of multiple branching instructions in a processor
US8181168B1 (en) 2007-02-07 2012-05-15 Tilera Corporation Memory access assignment for parallel processing architectures
US9268569B2 (en) 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100260859B1 (ko) * 1995-03-23 2000-07-01 포만 제프리 엘. 초장 명령어 워드 프로그램의 오브젝트-코드 호환가능 표현
US6662294B1 (en) * 2000-09-28 2003-12-09 International Business Machines Corporation Converting short branches to predicated instructions
US20120159125A1 (en) * 2007-10-25 2012-06-21 International Business Machines Corporation Efficiency of short loop instruction fetch
US20100262813A1 (en) * 2009-04-14 2010-10-14 International Business Machines Corporation Detecting and Handling Short Forward Branch Conversion Candidates

Also Published As

Publication number Publication date
DE102014003667A1 (de) 2014-09-18
JP2014182817A (ja) 2014-09-29
GB2515148B (en) 2016-01-27
JP5941488B2 (ja) 2016-06-29
US20140281387A1 (en) 2014-09-18
CN104049944A (zh) 2014-09-17
US9367314B2 (en) 2016-06-14
GB201404723D0 (en) 2014-04-30
KR20140113577A (ko) 2014-09-24
GB2515148A (en) 2014-12-17

Similar Documents

Publication Publication Date Title
KR101723711B1 (ko) 조건부 쇼트 포워드 브랜치들을 산술적으로 동등한 술어적 명령어들로 변환
US9619750B2 (en) Method and apparatus for store dependence prediction
US20160055004A1 (en) Method and apparatus for non-speculative fetch and execution of control-dependent blocks
US9122475B2 (en) Instruction for shifting bits left with pulling ones into less significant bits
US20180173534A1 (en) Branch Predictor with Branch Resolution Code Injection
TW201403472A (zh) 最佳化暫存器初始化操作
US11188342B2 (en) Apparatus and method for speculative conditional move operation
KR101806279B1 (ko) 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들
US20160283247A1 (en) Apparatuses and methods to selectively execute a commit instruction
US20140189330A1 (en) Optional branches
US11048516B2 (en) Systems, methods, and apparatuses for last branch record support compatible with binary translation and speculative execution using an architectural bit array and a write bit array
US10579378B2 (en) Instructions for manipulating a multi-bit predicate register for predicating instruction sequences
US20220413860A1 (en) System, Apparatus And Methods For Minimum Serialization In Response To Non-Serializing Register Write Instruction
US10877765B2 (en) Apparatuses and methods to assign a logical thread to a physical thread
US11907712B2 (en) Methods, systems, and apparatuses for out-of-order access to a shared microcode sequencer by a clustered decode pipeline
US20240118898A1 (en) Selective use of branch prediction hints
JP6253706B2 (ja) ハードウェア装置
US11126438B2 (en) System, apparatus and method for a hybrid reservation station for a processor
EP3989063B1 (en) High confidence multiple branch offset predictor
US20220129763A1 (en) High confidence multiple branch offset predictor
US20240103878A1 (en) Short pipeline for fast recovery from a branch misprediction
US20230195456A1 (en) System, apparatus and method for throttling fusion of micro-operations in a processor
US20160378497A1 (en) Systems, Methods, and Apparatuses for Thread Selection and Reservation Station Binding

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
FPAY Annual fee payment

Payment date: 20200227

Year of fee payment: 4