KR20090061667A - 동시적인 예측된 브랜치 명령어들을 분석하기 위한 방법 및 시스템 - Google Patents

동시적인 예측된 브랜치 명령어들을 분석하기 위한 방법 및 시스템 Download PDF

Info

Publication number
KR20090061667A
KR20090061667A KR1020097008607A KR20097008607A KR20090061667A KR 20090061667 A KR20090061667 A KR 20090061667A KR 1020097008607 A KR1020097008607 A KR 1020097008607A KR 20097008607 A KR20097008607 A KR 20097008607A KR 20090061667 A KR20090061667 A KR 20090061667A
Authority
KR
South Korea
Prior art keywords
predicted
instructions
branch
state
branch instructions
Prior art date
Application number
KR1020097008607A
Other languages
English (en)
Other versions
KR101073732B1 (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 KR20090061667A publication Critical patent/KR20090061667A/ko
Application granted granted Critical
Publication of KR101073732B1 publication Critical patent/KR101073732B1/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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

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)

Abstract

동시적인 예측된 브랜치 명령어의 검증전에 동시적인 브랜치 예측들을 분석하기 위한 방법이 제시된다. 본 방법은 2개 이상의 예측된 브랜치 명령어들을 처리하는 단계를 포함하며, 각각의 예측된 브랜치 명령어는 예측된 상태 및 보정된 상태를 가진다. 본 방법은 보정된 상태들중 하나를 선택하는 단계를 포함한다. 예측된 브랜치 명령어들중 하나가 오예측되면, 선택된 보정된 상태는 미리 명령어 페치들을 제어하기 위하여 사용된다.

Description

동시적인 예측된 브랜치 명령어들을 분석하기 위한 방법 및 시스템{METHODS AND SYSTEM FOR RESOLVING SIMULTANEOUS PREDICTED BRANCH INSTRUCTIONS}
본 발명은 일반적으로 컴퓨터 시스템들, 특히 동시적인 예측된 브랜치 명령어들을 분석하는 기술들에 관한 것이다.
컴퓨터 플랫폼의 핵심은 프로세서이다. 초기 프로세서들은 그 시대에 이용가능한 기술들에 의하여 제한되었다. 제조 기술의 진화는 트랜지스터 설계가 초기 프로세서들의 크기의 1/1000 이상으로 감소되도록 하였다. 이러한 소형화 프로세서 설계들은 더 빠르고 더 효율적으로 진행되고 있으며, 기존 예상을 초과하는 처리 전력을 전달하면서 실질적으로는 적은 전력을 이용한다.
프로세서의 물리적 설계가 진화함에 따라, 정보를 처리하고 기능들을 수행하는 혁신적인 방법들이 또한 변화되었다. 예컨대, 명령어들의 "파이프라이닝(pipelining)"은 1960년 초부터 프로세서의 설계시에 구현되었다. 파이프라이닝의 일례는 실행 파이프라인들을 유닛(unit)들로 분할하는 개념이며, 이러한 유닛들을 통해 명령어들은 스트림으로 순차적으로 흐른다. 유닛들은 여러 유닛들이 여러 명령어들의 적절한 부분들을 동시에 처리할 수 있도록 배열된다. 파이프라이닝의 일 장점은 명령어들이 병렬로 평가되기 때문에 명령어들의 실행이 중첩된다는 점이 다. 파이프라이닝은 또한 명령어 레벨 병렬처리(ILP: instruction level parallelism)로서 지칭된다.
프로세서 파이프라인은 각각의 스테이지가 명령어의 실행과 연관된 기능을 수행하는 많은 스테이지들로 구성된다. 각각의 스테이지는 파이프 스테이지 또는 파이프 세그먼트로서 지칭된다. 스테이지들은 파이프라인을 형성하기 위하여 서로 접속된다. 명령어들은 파이프라인의 한 단(end)에서 입력되어 다른 단(end)에서 출력된다.
비록 파이프라인 처리가 프로세서 설계시에 계속해서 구현되었을지라도, 프로세서 사이클마다 단지 하나의 명령어를 실행하는 것은 부득이하게 초기부터 계속되고 있었다. 프로세서의 처리 스루풋(throughput)을 증가시키기 위하여, 최근의 프로세서 설계들은 다수의 명령어들을 동시에 처리할 수 있는 다중 파이프라인들을 통합하였다. 다중 파이프라인을 가진 이러한 타입의 프로세서는 수퍼스칼라 프로세서로서 분류될 수 있다.
프로세서내에서, 조건부 브랜치 명령어들과 같은 임의의 타입들의 명령어들은 예측될 수 있다. 프로세서내의 브랜치 예측 하드웨어는 조건부 브랜치 명령어들에 대한 예측들을 제공하도록 설계될 수 있다. 예측에 기초하여, 프로세서는 다음 순차 명령어를 계속해서 실행하거나 또는 후속 명령어가 실행되도록 할 것이다.
브랜치 예측 하드웨어를 이용하는 수퍼스칼라 프로세서는 동일한 또는 개별 파이프라인들에서 동일한 클록 사이클내에서 2개 이상의 예측된 브랜치 명령어들을 동시에 만나서(encounter) 분석할 수 있다. 일반적으로, 이러한 응용들에 있어서, 프로세서는 오예측(misprediction)의 경우에 임의의 교정 단계들을 취하기전에 가장 오래된 오예측 브랜치를 결정하기 위하여 양 브랜치 예측들의 완전한 분석을 결정할 수 있을때까지 대기해야 한다. 고속 프로세서가 다수의 브랜치 예측들을 만나는 동안 가장 오래된 오예측된 브랜치를 결정하는 것과 보정된 상태를 선택하는 것을 분리할 필요성이 요구된다.
본 발명은, 이러한 필요성을 인식하고, 모든 동시적인 브랜치 명령어 예측들의 완전한 분석이 이용가능하기전에 적절한 액션(action)을 예상하여 적절한 액션을 이행하는 단계들을 취함으로서 동시적인 브랜치 명령어 예측들을 처리하는 프로세서를 제공한다.
동시적인 예측된 브랜치 명령어들의 검증전에 그 동시적인 예측된 브랜치 명령어들을 분석하는 방법이 제공된다. 본 방법은 먼저 2개 이상의 예측된 브랜치 명령어들을 처리하는 단계를 포함한다. 각각의 예측된 브랜치 명령어는 예측된 상태 및 보정된 상태를 가진다. 예측된 브랜치 명령어들은 분석 스테이지에 동시에 입력되며, 예측된 브랜치 명령어들중 하나로부터 보정된 상태들중 하나가 선택된다. 본 방법은 예측된 브랜치 명령어들중 적어도 하나가 오예측(mispredict)하였다는 것을 검증하며, 선택된 보정된 상태는 미래의 명령어 페치들을 제어하기 위하여 사용된다.
다수의 파이프라인들에서 동시적인 예측된 브랜치 명령어들의 검증전에 그 동시적인 예측된 브랜치 명령어들을 분석하기 위한 방법은 2개 이상의 예측된 브랜치 명령어들을 처리하는 단계를 포함한다. 각각의 예측된 브랜치 명령어는 예측된 상태 및 보정된 상태를 가진다. 예측된 브랜치 명령어들은 개별 파이프라인들의 분석 스테이지에 동시에 입력되며, 보정된 상태들중 하나는 예측된 브랜치 명령어들중 하나로부터 선택된다. 본 방법은 예측된 브랜치 명령어들중 적어도 하나가 오예측(mispredict)하였다는 것을 검증하며, 선택된 보정된 상태는 미래의 명령어 페치들을 제어하기 위하여 사용된다.
동시적인 예측된 브랜치 명령어들의 검증전에 그 동시적인 예측된 브랜치 명령어들을 분석하기 위한 시스템은 다수의 브랜치 명령어들을 예측하도록 구성된 예측 로직을 포함한다. 각각의 예측된 브랜치 명령어는 예측된 상태 및 보정된 상태를 가진다. 본 시스템은 또한 예측된 브랜치 명령어들중 2개 이상이 분석 스테이지에 동시에 도달할때를 결정하도록 구성된 분석 로직을 가진다. 그 다음에, 분석 로직은 예측된 브랜치 명령어들중 하나로부터 보정된 상태들중 하나를 선택한다. 본 시스템은 또한 선택된 보정된 상태에 기초하여 미래의 명령어들을 페치하도록 구성된 페치 로직을 가진다.
본 발명 뿐만아니라 본 발명의 추가 특징들 및 장점들은 이하의 상세한 설명 및 첨부 도면들로부터 더 완전하게 이해될 것이다.
도 1은 본 발명의 일 실시예를 사용하는 프로세서의 고레벨(high level) 논리 하드웨어 블록도들 도시한다.
도 2는 본 발명의 일 실시예를 사용하는 수퍼스칼라 프로세서의 저레 벨(lower level) 논리 블록도를 도시한다.
도 3은 도 1의 프로세서의 파이프라인의 분석 스테이지의 흐름도를 도시한다.
도 4는 도 3의 다중 동시적인 브랜치 분석 흐름의 흐름도를 도시한다.
첨부 도면들과 관련하여 이하에 기술된 상세한 설명은 본 발명의 다양한 실시예들의 설명으로서 의도되나, 본 발명이 실시될 수 있는 실시예들만을 나타내는 것으로 의도되지 않는다. 상세한 설명은 본 발명의 전반적인 이해를 제공하기 위하여 특정 설명들을 포함한다. 그러나, 본 발명이 이러한 특정 설명 없이도 실시될 수 있음이 당업자에게 명백할 것이다. 일부 예들에서, 공지된 구조들 및 컴포넌트들은 본 발명의 개념들을 불명료하게 하는 것을 방지하기 위하여 블록도로 도시된다. 약어들 및 다른 기술 용어는 단순히 간략화 및 명확화를 위하여 사용될 수 있으며, 본 발명의 범위를 제한하는 것으로 의도되지 않는다.
수퍼스칼라 프로세서에 있어서, 프로세서의 내부 자원들은 병렬 처리를 용이하게 하도록 설계된다. 설계의 여러 양상들은 명령어 프리-페칭(pre-fetching), 브랜치 처리, 레지스터 값들을 포함하는 데이터 종속성들(data dependency)의 분석, 명령어들의 초기화(initiation) 등을 포함한다. 프로세서가 대부분의 메모리 장치들보다 더 빠르게 동작하기 때문에, 프로그램 명령어들은 프로세서의 최대 잠재능력을 적절히 이용할 수 있을 정도로 충분히 빨르게 메모리로부터 직접 판독될 수 없다.
명령어 캐시는 통상적인 메모리와 프로세서간의 속도 차이를 보완하도록 설계된 특수 메모리이다. 메모리로부터 페치된 명령어들은 프로세서 클록 속도들로 판독될 수 있는 고속 명령어 캐시에 배치된다. 페치된 명령어들은 프로그램의 다음 순차 명령어들 또는 취해진 것으로 예측된 브랜치(predicted taken branch)의 타겟일 수 있다. 다음 명령어가 예측된 브랜치의 타겟이면, 프로세서는 브랜치가 진행하여 미리 적절한 명령어들을 페치할 위치를 예측하는 것을 시도한다. 만일 브랜치 예측이 부정확하면, 프로세서는 예측된 브랜치 경로 아래에서 페치된 명령어들을 제거함으로서 자신의 명령어 처리를 보정하고 보정된 브랜치 경로 아래에서 명령어들을 페치하는 것을 다시 시작한다. 이러한 프로세스는 도 2, 도 3 및 도 4를 참조로 하여 더 상세히 기술된다.
도 1은 이하에서 기술된 일 실시예를 이용하는 수퍼스칼라 프로세서(100)의 고레벨 도면을 도시한다. 프로세서(100)는 전용 고속 버스(104)를 통해 명령어 캐시(106)에 접속되는 중앙처리장치(CPU)(102)를 가진다. CPU는 또한 데이터 캐시(108)에 접속된 다른 개별 고속 버스(110)를 가진다. 명령어 캐시(106) 및 데이터 캐시(108)는 또한 범용 버스(116)를 통해 입력/출력 포트들(I/0)(112) 및 메모리(114)에 접속된다.
프로세서(100)내에서, 명령어 페치 유닛(IFU: Instruction Fetch Unit)(122)는 메모리(114)로부터 명령어 캐시(106)로의 명령어들의 로딩을 제어한다. 일단 명령어 캐시(106)에 명령어들이 로드되면, CPU(102)는 고속 버스(104)를 통해 명령어들을 액세스할 수 있다. 명령어 캐시(106)는 도 1에 도시된 개별 메모리 구조일 수 있거나, 또는 CPU(102)의 내부 컴포넌트로서 집적될 수 있다. 집적화(integration)는 명령어 캐시(106)의 크기 뿐만아니라 CPU(102)의 복잡도와 전력 소비에 의하여 정해질 수 있다.
명령어들은 명령어 캐시(106)의 여러 명령어들로부터 동시에 페치되어 디코딩될 수 있다. 명령어 캐시(106)내에서, 명령어들은 캐시 라인들로서 알려진 섹션들(section)로 그룹핑된다. 각각의 캐시 라인은 다수의 명령어들을 포함할 수 있다. 페치된 명령어들의 수는 각각의 캐시 라인에서의 명령어들의 수 뿐만아니라 요구된 페치 대역폭에 의존할 수 있다. 일 실시예에서, CPU(102)는 각각의 클록 사이클동안 4개의 명령어들을 명령어 캐시(106)로부터 IFU(122)의 상부 파이프라인(250)으로 로드한다. 상부 파이프라인(205)내에서는 명령어들이 동작 타입과 데이터 종속성들에 대하여 분석된다. 명령어들을 분석한후에, 프로세서(100)는 실행을 위하여 상부 파이프(250)로부터 하부 기능 유닛들 또는 파이프라인들(210, 220)로 명령어들을 분배할 수 있다.
명령어들은 명령어 기능, 파이프 유용성(availability), 명령어 캐시(106)로부터 로드된 명령어들의 그룹내의 명령어 위치 등에 따라 하부 파이프라인들(210 또는 220)에 전송될 수 있다. 하부 파이프라인들(210, 220)내에서, 명령어들은 원래의 프로그램 시퀀스보다 오히려 이용가능 자원들에 기초하여 병렬로 처리된다. 이러한 타입의 처리는 종종 동적 명령어 스케줄링으로 지칭된다.
하부 파이프라이들(210, 220)은 산술 논리 유닛들, 부동 소수점 유닛들, 저장 유닛들, 로드 유닛들 등과 같은 다양한 실행 유닛들(EU)(118)을 포함할 수 있 다. 예컨대, 산술 논리 유닛과 같은 EU(118)는 정수 가산, 감산, 단순 곱셈, 비트단위 논리 연산들(예컨대, AND, NOT, OR, XOR), 비트 시프팅(bit shifting) 등과 같은 넓은 범위의 산술 함수들을 실행할 수 있다. 명령어가 실행을 완료한후에, CPU(102)는 명령어 결과들을 취하고 이들을 적절한 시퀀스로 재정렬하며, 그 결과 명령어 결과들은 프로세서(100)를 정확하게 업데이트하기 위하여 사용될 수 있다.
프로세서(100)에 의하여 실행되는 대부분의 프로그램들은 조건부 브랜치 명령어들을 포함할 수 있다. 조건부 브랜치 명령어의 실제 브랜칭 동작은 명령어가 하부 파이프라인(210 또는 220)에서 깊게(deep) 실행될때까지 알려지지 않는다. 브랜치 명령어의 최종 실행을 대기한후 브랜치 명령어의 결과들에 기초하여 명령어들을 페치하는 과정으로부터 발생할 수 있는 스톨(stall)을 방지하기 위하여, 프로세서(100)는 일부 형태의 브랜치 예측을 사용할 수 있다. 브랜치 예측들을 사용하면, 프로세서(100)는 상부 파이프(205)에서의 조건부 브랜치 명령어들의 브랜칭 동작을 예측할 수 있다. 예측된 브랜치 평가에 기초하여, 프로세서(100)는 예측된 어드레스, 즉 브랜치 타겟 어드레스(예컨대, 브랜치가 취해진 것으로 예측된(predicted taken) 경우에) 또는 브랜치 명령어 이후의 다음 순차 어드레스(예컨대, 브랜치가 취해지지 않은 것으로 예측된(predicted not taken) 경우에)로부터의 명령어들을 추론적으로 페치하여 실행하는 것을 준비한다.
조건부 브랜치 명령어의 일례는 단순한 어셈블러 JNE(jump not equal: 동일하지 않은 경우 점프) 명령어이다. JNE 명령어가 실행될때, 특정 값이 레지스터에 로드될 수 있으며, 만일 값이 0이면, 조건부 브랜치는 취해지지 않고 시퀀스의 다 음 명령어가 페치되어 실행된다. 그러나, 만일 레지스터의 값이 0이 아니면, 조건부 브랜치는 취해진 것으로 고려되며, 페치된 다음 명령어는 JNE 명령어와 연관된 타겟 어드레스에 배치된다. 타겟 어드레스는 JNE 명령어의 이전 실행시에 JNE 명령어와 사전에 연관될 수 있다.
명령어들을 예측할때, 여러 조건들 또는 "상태들"이 예측될 수 있다. 예컨대, 브랜치 방향, 브랜치 어드레스 또는 프로세서 모드와 같은 프로세서(100)의 특정 상태가 예측될 수 있다. 프로세서 모드를 예측하는 것은 프로세서(100)가 브랜치 명령어 실행후 어떤 모드에 있을 것인지를 예측하는 것을 수반할 수 있다. 예컨대, 개선된 RISC 프로세서 아키텍처에서, 명령어들은 ARM 모드 또는 섬(Thumb) 모드에서 실행될 수 있다.
조건부 브랜치의 방향을 예측하는 한가지 가능한 방법은 브랜치 히스토리 테이블(branch history table)을 이용하는 것이다. 브랜치 히스토리 테이블은 다수의 이전 브랜치들의 히스토리를 저장한 단순 룩업 테이블일 수 있다. 하나의 브랜치 히스토리 테이블은 이전 조건부 브랜치들의 1024개의 방향을 저장할 수 있다. 복합 알고리즘은 예측 기술들의 계층(멀티-레벨 브랜치 예측기들)에 기초하여 브랜치 예측을 수행하기 위하여 기록될 수 있다.
도 2는 본 발명의 일 양상에 따라 명령어들을 처리하는, 프로세서(100)내의 상부 파이프(250) 및 2개의 하부 파이프라인들(210, 220)의 저레벨 기능 블록도(200)를 도시한다. 기능 하드웨어 블록도(200)내의 다른 논리 블록들(또는 스테이지들)은 하드웨어, 펌웨어 또는 이들의 조합을 포함할 수 있다. 기능 하드웨어 블록도(200)는 상부 파이프(250) 및 2개의 하부 파이프라인들(210, 220)로 구성된다. 이전에 언급한 바와같이, 상부 파이프(250)에 대한 스테이지들은 IFU(122)내에 위치할 수 있다. 상부 파이프(250)내에는 페치 스테이지(202), 명령어 캐시 스테이지(250), 및 명령어 디코드 스테이지(206)가 존재한다. 또한, 상부 파이프(250)는 브랜치 예측 로직(208)과 연관된다.
상부 파이프(250)의 제 1 스테이지는 페치 스테이지(202)이다. 페치 스테이지(202)는 검색될 명령어들의 다음 그룹의 선택을 제어한다. 프로세서(100)가 파워-업(power-up)된후에, 페치 스테이지(202)는 초기화 명령어들이 검색되어 로드될 것을 결정한다. 도 3 및 도 4와 관련하여 논의되는 바와같이, 페치 스테이지(202)는 또한 하부 파이프라인들(210, 220)로부터 피드백(feedback)을 수신할 수 있다. 피드백은 미래의 명령어들의 선택과 명령어들이 실행될 순서에 영향을 미칠 수 있다. 명령어 캐시 스테이지(204)에서, 페치 스테이지(202)동안 선택된 명령어 어드레스는 그 어드레스에 명령어들이 존재하는지를 결정하기 위하여 명령어 캐시(106)를 액세스하기 위하여 사용된다. 명령어 캐시 히트(hit)가 존재하면, CPU(102)는 명령어 캐시(106)로부터 상부 파이프(205)로의 명령어들을 검색하여, 프로세서(100)로 하여금 메모리(114)로 되돌아가지 않고 프로세서 속도로 명령어들을 페치하도록 한다. 만일 명령어 캐시 미스(miss)가 존재하면(즉, 페치될 명령어들이 명령어 캐시(106)로부터 이용가능하지 않으면), IFU(122)는 메모리(114)로부터 명령어들을 검색하고, 이들을 명령어 캐시(106)에 로드하며, 이들을 CPU(102)에 전송한다. 명령어들이 명령어 캐시 스테이지(204)동안 검색된후에, 명령어들은 명 령어 디코드 스테이지(206)동안 분석된다.
명령어 디코드 스테이지(206)동안, 다양한 명령어들에 관한 정보가 분석되어 처리된다. 예컨대, 명령어 디코드 스테이지(206)내에서, 프로세서(100)는 명령어의 타입(예컨대, 이동, 저장, 로드, 점프 등)을 결정할 수 있다. 만일 명령어가 조건부 브랜치 명령어이면, 브랜치 예측 로직(208)은 인보크(invoke)될 것이다. 명령어 디코드 스테이지(206)는 그것이 브랜치 명령어를 만났다는 것을 브랜치 예측 로직(208)에 알리기 위하여 브랜치 예측 로직(208)과 통신한다.
브랜치 예측의 부분으로서, 브랜치 예측 로직(208)은 예측된 상태를 제공한다. 예측된 상태로 저장된 정보는 예측된 브랜치 방향, 예측된 타겟 어드레스 또는 프로세서(100)의 예측된 상태를 포함할 수 있다. 이러한 정보는 레지스터, 레지스터들의 그룹, 또는 브랜치 명령어와 연관된 메모리 위치에 저장될 수 있다. 본 발명의 일 양상에서, 예측된 상태는 단지 예측된 브랜치 방향만을 포함할 수 있다. 또 다른 실시예에 있어서, 예측된 상태는 단지 예측된 브랜치 방향 및 예측된 타겟 어드레스에 관한 정보를 포함할 수 있다. 또 다른 실시예에 있어서, 예측된 상태는 예측된 타겟 어드레스 및 예측된 프로세서 모드에 관한 정보를 포함할 수 있다. 또 다른 실시예에 있어서, 예측된 상태는 예측된 브랜치 방향, 예측된 타겟 어드레스 및 예측된 프로세서 모드에 대한 정보를 포함할 수 있다.
브랜치 방향이 예측될때, 예측된 상태는 취해진(taken) 것으로 또는 취해지지 않은(not taken) 것으로 브랜치를 예측한 정보를 포함할 수 있다. 일 실시예에서, 예측 상태는 단일 비트일 수 있다. 예컨대, 예측된 상태와 연관된 레지스터 또는 메모리 위치내의 비트 위치에 저장된 "1"은 취해진 것으로 예측된 브랜치를 지시할 수 있다. 역으로, 만일 레지스터 또는 메모리 위치내의 상기 비트 위치에 "0"이 저장되어 있으면, 브랜치는 취해지지 않은 것으로 예측될 수 있다.
만일 타겟 어드레스가 예측되면, 예측된 상태는 다음 명령어가 페치될 위치를 지시하는 타겟 어드레스를 포함할 수 있다. 타겟 어드레스의 크기는 프로세서(100)의 아키텍처에 의존할 수 있다. 일 실시예에서, 타겟 어드레스는 예측된 상태와 연관된 레지스터에 저장된 32-비트 어드레스 식별자일 수 있다.
프로세서 모드가 예측될때, 예측된 상태는 일단 조건부 브랜치가 실행되면 프로세서(100)가 있을 예측된 모드에 관한 정보를 포함할 수 있다. 예컨대, 프로세서 모드에 대한 예측에 기초하여, 프로세서는 명령어 디코드를 다르게 수행하는 것(즉, 명령어의 ARM 디코드 대 명령어의 섬(Thumb) 디코드)과 같은 단계들을 취할 수 있다. 프로세서 모드에 대한 예측된 상태는 레지스터 또는 메모리 위치에 저장된 단일 비트 값일 수 있다.
예측된 상태를 보완하는 경우에, 브랜치 예측 로직(208)은 또한 예측된 브랜치 명령어와 연관된 보정된 상태를 계산하여 저장한다. 보정된 상태는 예측이 부정확한 경우의 정보를 포함한다. 보정된 상태의 부분으로서 저장된 정보는 복원 어드레스 및 프로세서의 이전 상태를 포함할 수 있다. 보정된 상태는 브랜치 오예측의 경우에 적절한 명령어 순서 시퀀스를 복원하기 위하여 프로세서(100)에 의하여 사용될 수 있다.
브랜치 예측 로직(208)에 의하여 만들어진 예측의 결과로서, 정보는 후속 명 령어 페치들을 제어하기 위하여 페치 스테이지(202)내의 페치 로직에 제공된다. 예측된 상태는 예측에 기초하여 적절한 명령어들을 검색하기 위하여 페치 로직에 의하여 사용된다. 예컨대, 만일 예측된 상태가 타겟 어드레스를 포함하면, 페치 로직은 그 타겟 어드레스에 위치한 다음 명령어를 명령어 캐시(106)로부터 검색한다. 만일 명령어가 명령어 캐시(106)에서 이용가능하지 않으면, 페치 로직은 메모리(114)로부터의 명령어를 명령어 캐시(104)에 로드한 다음에 이 명령어를 상부 파이프(250)에 로드한다.
초기 브랜치 예측이 분석되기전에 예측을 필요로 하는 다른 브랜치 명령어를 만나는 것이 일반적이다. 이러한 예에서, 프로세서(100)는 브랜치 예측 로직(208)에 의하여 수행되는 예측들의 각각을 계속해서 추적한다. 이러한 추적은 어느 예측이 먼저 왔는지를 식별하는 것을 포함한다. 예측의 "연령(age)"을 추적하기 위한 한가지 방법은 각각의 조건부 브랜치 명령어와 연관된 명령어 순서 값을 이용하는 것이다. 각각의 예측된 상태가 할당될때, 명령어 순서 값은 또한 브랜치 명령어와 함께 할당되거나 저장되거나 또는 반송된다. 일단 예측 로직이 예측을 수행하였거나 또는 명령어 디코드 스테이지(206)의 현재 명령어가 예측을 필요로 하지 않는다는 것을 결정하였다면, 명령어는 적절한 하부 파이프라인(210, 220)으로 전달된다.
이전에 기술된 바와같이, 하부 파이프라인들(210, 220)은 임의의 타입들의 명령어들과 연관될 수 있다. 예컨대, 파이프라인은 단지 산술 특성(arithmetic nature)을 가진 명령어들을 실행하거나 또는 로드/저장 기능의 모두를 조절하도록 설계될 수 있다. 예측된 브랜치 명령어를 파이프라인에 전송하기 위하여, 파이프라인은 브랜치 명령어들을 조절하도록 설계되어야 한다. 도 2에 도시된 바와같이, 하부 파이프라인들(210, 220) 둘다는 브랜치 명령어들을 조절하도록 구성된다. 하부 파이프라인들(210, 220)은 또한 각각의 프로세서 사이클동안 다수의 명령어들을 실행하도록 설계될 수 있다. 따라서, 하부 파이프라인들(210, 220)내에서, 다수의 브랜치 명령어들은 동일한 프로세서 사이클동안 실행될 수 있다.
일단 명령어들이 적절한 하부 파이프라인(210 또는 220)에 입력되면, 브랜치 명령어들과 같은 명령어들은 더 효율적인 실행을 용이하게 하기 위하여 재배열될 수 있다. 만일 브랜치 명령어가 하부 파이프라인(210 또는 220)에 도달하고 실행을 계속하기 위하여 추가 정보 또는 데이터를 필요로 하면, 프로세서(100)는 브랜치 명령어를 실행하기전에 다른 명령어 또는 명령어들의 그룹을 실행할 수 있다. 이러한 경우에, 브랜치 명령어는 실행을 용이하게 하기 위하여 필요한 정보가 이용가능할때까지 예비 스테이션(reservation station)(도시안됨)에서 유지될 수 있다. 예컨대, 브랜치 명령어는, 브랜치 명령어가 특정 레지스터에 저장된 타겟 어드레스로 분기되고 타겟 어드레스가 아직 이용가능하지 않은 경우에, 예비 스테이션에서 유지될 수 있다. 타겟 어드레스의 값은 다른 후속하여 실행된 명령어의 함수로서 결정될 수 있다. 브랜치 명령어는, 후속 명령어가 실행되고 특정 레지스터를 업데이트하고 타겟 어드레스가 이용가능하게 될때까지, 유지된다. 타겟 어드레스가 이용가능하게 된후에, 브랜치 명령어는 추가 실행을 위하여 해제(release)된다. 이러한 방식으로 실행된 명령어들은 원래의 프로그램 시퀀스보다 오히려 이용가능한 자원들에 기초하여 병렬로 실행된다. 명령어들이 하부 파이프라인들(210, 220)에서 실행된후에, 결과들은 수집되어 적절한 시퀀스로 재정렬되며, 그 결과 프로세서(100)는 정확하게 업데이트될 수 있다.
예비 스테이션내에서는 여러 명령어들이 동시에 유지될 수 있으며, 각각의 명령어는 추가 정보, 프로세서 자원들 등을 대기한다. 일반적으로, 다수의 명령어들은 프로세서(100)에 의하여 동일한 프로세서 사이클동안 예비 스테이션으로부터 해제될 수 있다. 따라서, 다수의 브랜치 명령어들이 동일한 프로세서 사이클동안 예비 스테이션으로부터 해제될 수 있다는 것이 가능하다.
프로세서(100)는 명령어들이 하부 파이프라인(210, 220)에서 실행될때 명령어들을 계속해서 모니터링한다. 브랜치 명령어가 예비 스테이션으로부터 해제되거나 또는 최종 실행을 준비할때, 브랜치 명령어와 연관된 예측의 처리는 각각의 하부 파이프라인(210, 220)의 분석 스테이지(215)내의 분석 로직(225)에 의하여 수행된다. 분석 스테이지(215)는 도 3을 참조로 하여 기술될 것이다.
분석 로직(225)은 예측된 상태의 정확성(correctness)을 검증하며, 오예측의 경우에 보정된 상태를 선택한다. 예컨대, 만일 예측된 상태가 타겟 어드레스이고 타겟 어드레스가 결정된 실제 타겟 어드레스와 매칭되지 않으면, 오예측이 발생한다. 오예측의 경우에, 분석 로직(225)은 보정된 상태 뿐만아니라 플러시(flush)될 필요가 있는 명령어들을 식별하는 정보를 포함하는 피드백을 페치 스테이지(202)에 제공한다. 플러시된 명령어들은 부정확한 예측에 기초하여 사전에 페치된 명령어들이다. 적절한 명령어들이 플러시된후에, 페치 로직은 보정된 상태에 기초하여 명령어들을 리-페치(re-fetch)하는 것을 시작한다. 만일 예측이 정확하다고 분석 로직(225)이 결정하면, 분석 로직(225)은 액션(action)을 취하지 않으며, (예측에 기초하여) 추론적으로 페치된 명령어들이 후속하여 실행된다.
도 3은 하부 파이프라인(210, 220)중 어느 하나의 파이프라인의 분석 스테이지(215)와 연관된 프로세스 흐름(300)을 기술한 흐름도를 도시한다. 프로세스 흐름(300)은 예측된 브랜치 명령어들의 모든 그들의 종속성들(dependency)이 분석되었을때 시작 블록(302)에서 시작한다. 브랜치 종속성은 예측이 기초하는 모든 피연산자들(operand)이 이용가능할때 분석된다. 이러한 분석은 하부 파이프라인들(210, 220)중 어느 하나의 파이프라인의 분석 스테이지(215)에서 이루어진다.
결정 블록(312)에서는 브랜치 분석 스테이지(215)에 동시에 입력되는 다수의 예측된 브랜치들이 존재하는지의 여부가 결정된다. 이전에 논의된 바와같이, 다수의 브랜치 명령어들은 동일한 프로세서 사이클동안 동일한 하부 파이프라인(210 또는 220)의 분석 스테이지(215)에 입력될 수 있다. 본 발명의 일 양상은 동일한 하부 파이프라인(210 또는 220)에서 다수의 브랜치 예측들을 동시에 분석한다. 대안 실시예에서, 하부 파이프라인(210)의 분석 스테이지(215)에 입력되는 브랜치 예측과 하부 파이프라인(220)의 분석 스테이지(215)에 입력되는 브랜치 예측은 동시에 분석될 수 있다. 만일 프로세서(100)가 추가 하부 파이프라인들을 가지면, 본 발명의 다른 실시예는 하부 파이프라인들중 하나에서 다수의 브랜치 예측들을 분석할 수 있다.
프로세서(100)는 이러한 평가를 수행하기 위하여 하부 파이프라인들(210, 220) 모두를 모니터링한다. 만일 분석 스테이지(215)에 동시에 입력되는 다수의 브랜치 예측들이 존재한다고 프로세서(100)가 결정하면, 프로세스 흐름(300)은 다중 동시적인 브랜치 분석 흐름(320)으로 진행한다. 다중 동시적인 브랜치 분석 흐름(320)은 브랜치 분석 스테이지(215)에 동시에 입력되는 2개 이상의 예측된 브랜치 명령어들을 분석하는 방법을 결정하며, 도 4와 관련하여 추가로 논의된다. 만일 단지 하나의 브랜치 예측이 분석 스테이지(215)에 입력되면, 프로세스 흐름(300)은 결정 블록(314)으로 계속된다.
결정 블록(314)에서, 브랜치 예측 결과들은 브랜치가 정확하게 예측되었는지의 여부를 결정하기 위하여 해석된다. 만일 조건부 브랜치 명령어에 대한 예측이 결정 블록(314)에서 정확하게 예측되면(예컨대, 조건부 브랜치 명령어의 예측된 타겟 어드레스가 분석된 타겟 어드레스와 매칭되면), 하부 파이프라인들(210, 220) 뿐만아니라 상부 파이프(250)의 나머지 명령어들은 정확하게 예측되며, 그 다음에 프로세스 흐름(300)은 종료 블록(350)으로 진행한다.
만일 결정 블록(314)에서 오예측이 발생하였다고 브랜치 예측 결과들이 보여주면(예컨대, 예측된 타겟 어드레스가 분석된 타겟 어드레스와 매칭되지 않으면), (브랜치 예측의 명령어 순서 값에 기초하여) 오예측된 명령어보다 더 최근의 모든 명령어들은 블록(316)에서 지시된 바와같이 상부 파이프(250) 및 하부 파이프라인들(210, 220)로부터 플러시된다. 프로세스 흐름(300)은 브랜치의 보정된 상태 정보가 페치 스테이지(202)내의 페치 로직에 공급되는 블록(318)으로 진행한다. 페치 로직은 브랜치의 보정된 상태에 기초하여 명령어들을 페치한다.
도 4는 다중 동시적인 브랜치 분석 프로세스 흐름(320)을 더 상세히 도시한다. 다중 동시적인 브랜치 분석 프로세스 흐름(320)은 2개 이상의 예측된 브랜치들이 동일한 프로세서 사이클동안 분석 스테이지(215)에 도달할때 시작한다. 2개 이상의 예측된 브랜치들이 분석 스테이지(215)에 동시에 입력될때, 프로세서(100)는 동일한 프로세서 사이클동안 양 브랜치들의 분석을 조절한다. 이러한 분석은 어느 한 브랜치가 오예측되었는지를 결정하는 단계 및 파이프라인을 재지정(redirect)하는 것과 같은 적절한 액션들을 취하는 단계를 포함한다.
도 4에 도시된 바와같이, 다중 동시적인 브랜치 분석 프로세스 흐름(320)은 먼저 블록(402)에서 분석한 브랜치의 보정된 상태중 하나를 선택한다. 보정된 상태들중 하나의 선택은 오예측이 발생하였는지를 다중 동시적인 브랜치 분석 프로세스 흐름(320)이 결정하기전에 발생한다. 다중 동시적인 브랜치 분석 프로세스 흐름(320)에서 보정된 상태들중 하나를 초기에 선택함으로서, 오예측이 예상되어 추가 시간이 절약될 수 있다. 만일 오예측이 발생하지 않았으면, 상기와 같은 선택에 의하여 추가 처리 시간이 낭비되지 않는다.
특정 브랜치의 보정된 상태의 선택은 여러 인자들(factor)에 기초할 수 있다. 일 실시예에 있어서, 보정된 상태의 선택은 분석한 브랜치들의 상대 연령들(age)에 기초하며, 가장 오래된 브랜치 명령어가 선택된다. 대안 실시예에 있어서, 보정된 상태의 선택은 하부 파이프라인들(210 또는 220)중 어느 것이 가장 최근에 오예측하였는지의 여부에 기초할 수 있다. 또 다른 실시예에 있어서, 선택은 하부 파이프라인(210 또는 220)중 어느 것이 마지막으로 예측하였는지의 여부에 기 초할 수 있다. 또 다른 실시예에 있어서, 명령어의 타입은 보정된 상태를 선택하기 위한 기준으로서 사용될 수 있다. 대안적으로, 보정된 상태는 랜덤하게 선택될 수 있다. 선택 프로세스와 관계없이, 선택된 보정된 상태는 오예측의 경우에 미래의 명령어 페치를 위한 페치 로직을 조정하기 위하여 사용될 수 있다.
보정된 상태의 선택은 프로세서(100)의 실행 속도에 영향을 미칠 수 있다. 프로세서의 설계에 따라, 전술한 양상들의 각각은 속도 측면에서 여러 장점들을 가질 수 있다. 예컨대, 예측을 마지막으로 수행한 하부 파이프라인(210 또는 220)에 기초하여 보정된 상태를 선택하는 것은 하부 파이프라인(210 또는 220)중 어느 것이 마지막으로 오예측하였는지의 여부를 결정하는 것보다 빠르게 수행할 수 있다. 보정된 상태의 유효성(validity)은 다중 동시적인 브랜치 분석 프로세스 흐름(320)에서 나중에 검증된다.
이전에 기술된 실시예들을 사용하는 프로세서(100)의 일 장점은 가장 오래된 브랜치 예측이 오예측되었다는 것을 프로세서(100)가 예상한다는 점이다. 따라서, 프로세서(100)는 브랜치가 단일 사이클에서 오예측되었는지를 정확하게 결정하는데 필요한 연장 시간(extra time)을 수용하기 위하여 프로세서 주파수를 감소시키는 대신에 상부 파이프(250) 및 하부 파이프라인들(210, 220)을 플러싱(flushing)하는 것과 같은 적절한 액션을 취한다. 만일 프로세서(100)가 정확한 오예측 브랜치를 선택하면, 높은 클록 주파수는 어떤 브랜치 예측이 가장 오래된 오예측 브랜치에 대응하는지를 결정하기 위하여 대기하기전에 프로세서(100)가 명령어들을 플러싱하고 리-페치하는 것을 시작하기 때문에 달성될 수 있다. 프로세서(100)에 부여된 증가된 클록 속도는 불량하게 보정된 상태를 선택한 것으로 인하여 느려진 임의의 클록 사이클들보다 훨씬 더 빠르다.
보정된 상태 정보가 블록(402)에서 선택된후에, 다중 동시적인 브랜치 분석 프로세스 흐름(320)은 결정 블록(404)으로 진행한다. 결정 블록(404)에서, 분석 로직(225)은 임의의 브랜치 명령어에 대한 오예측이 발생하였는지의 여부를 결정한다. 만일 결정 블록(404)에서 오예측이 발생하지 않았다면, 다중 동시적인 브랜치 분석 프로세스 흐름(320)은 블록(450)에서 종료한다. 이러한 경우에, 양 예측들은 정확하며, 상부 파이프(250) 및 하부 파이프라인들(210, 220)에 로드된 명령어들은 유효하며, 보정은 필요치 않다.
만일 오예측이 발생하였다면, 다중 동시적인 브랜치 분석 프로세스 흐름(320)은 상부 파이프(250)의 모든 명령어들이 플러시되는 블록(406)으로 진행한다. 상부 파이프(250)의 모든 명령어들이 아직 프로그램 순서에 있기 때문에, 명령어들은 어느 분석 브랜치보다 더 최근 명령어들이다. 상부 파이프(250)의 명령어들이 어느 한 분석한 브랜치 명령어보다 더 최근 명령어들이면, 명령어들은 오예측된 경로 아래에서 페치되며 플러시된다.
상부 파이프(250)가 블록(406)에서 플러시된후, 다중 동시적인 브랜치 분석 프로세스 흐름(320)은 블록(408)으로 계속된다. 블록(408)에서, 페치 로직은 상부 파이프(250)에서의 페칭을 재지정하기 위하여 선택된 브랜치의 보정된 상태를 사용한다. 다중 동시적인 브랜치 분석 프로세스 흐름(320)은 결정 블록(410)으로 계속된다. 결정 블록(410)에서, 보정된 상태 정보의 선택은 보정된 상태가 선택된 브 랜치 명령어에 오예측된 브랜치 명령어가 대응하는지를 체크함으로서 검증된다. 만일 검증이 결정 블록(410)에서 성공적이면, 블록(418)에서 프로세서(100)는 명령어 순서 값에 기초하여 하부 파이프라인들(210, 220)로부터 가장 최근의 명령어들을 플러시한다. 블록(418)으로부터, 다중 동시적인 브랜치 분석 프로세스 흐름(320)은 종료되며 블록(450)으로 진행한다.
만일 블록(410)에서 검증이 실폐하였으면(즉, 가장 오래된 오예측 브랜치가 선택되지 않았으면), 모든 명령어들은 블록(412)에서 상부 파이프(250)로부터 다시 플러시된다. 블록(412)에서 명령어들의 플러싱은 상부 파이프(250)로부터 블록(408)에서 페치된 명령어들을 효율적으로 제거한다. 제 2 브랜치의 보정된 상태 정보는 블록(414)에서 페치 로직에 공급된다. 페치 로직은 제 2 브랜치의 보정된 상태에 기초하여 명령어들을 페치한다. (명령어 순서 값에 기초하여) 제 2 브랜치 예측보다 더 최근의 모든 명령어들은 단계(416)에서 하부 파이프라인들(210, 220)로부터 플러시된다. 명령어들이 하부 파이프라인들(210, 220)로부터 플러시된후에, 다중 동시적인 브랜치 분석 프로세스 흐름(320)은 단계(450)에서 종료한다.
여기에서 제시된 실시예들과 관련하여 기술된 다양한 예시적인 논리 블록들, 모듈들, 회로들, 엘리먼트들 및/또는 컴포넌트들은 범용 프로세서; 디지털 신호 프로세서(DSP); 주문형 집적회로(ASIC); 필드 프로그램가능 게이트 어레이(FPGA); 또는 다른 프로그램가능 논리 컴포넌트; 이산 게이트 또는 트랜지스터 로직; 이산 하드웨어 컴포넌트들; 또는 여기에서 제시된 기능들을 수행하도록 설계된 것들의 조합을 통해 구현 또는 수행될 수 있다. 범용 프로세서는 마이크로 프로세서 일 수 있지만; 대안적 실시예에서, 이러한 프로세서는 임의의 기존 프로세서, 제어기, 마이크로 제어기, 또는 상태 머신일 수 있다. 프로세서는 예를 들어, DSP 및 마이크로프로세서, 복수의 마이크로프로세서들, DSP 코어와 결합된 하나 이상의 마이크로 프로세서, 또는 이러한 구성들의 조합과 같이 계산 장치들의 조합으로서 구현될 수 있다.
비록 특정 실시예들이 여기에서 기술되고 제시되었을지라도, 당업자는 동일한 목적을 달성하기 위하여 의도된 임의의 구조가 기술된 특정 실시예들 대신에 대체될 수 있고 본 발명이 다른 환경들의 다른 응용들을 가진다는 것을 인식할 것이다. 본 출원은 본 발명의 임의의 적용들 또는 변형들을 커버하는 것으로 의도된다. 이하의 청구범위는 여기에서 제시된 특정 실시예들로 본 발명의 범위를 제한하는 것으로 결코 의도되지 않는다.

Claims (28)

  1. 동시적인 예측된 브랜치 명령어들의 검증전에 상기 동시적인 예측된 브랜치 명령어들을 분석하기 위한 방법으로서,
    2개 이상의 예측된 브랜치 명령어들을 처리하는 단계 ― 상기 각각의 예측된 브랜치 명령어는 예측된 상태 및 보정된 상태를 가지며, 상기 예측된 브랜치 명령어들은 분석 스테이지에 동시에 입력됨 ―;
    상기 예측된 브랜치 명령어들중 하나로부터 상기 보정된 상태들중 하나를 선택하는 단계;
    상기 예측된 브랜치 명령어들중 적어도 하나가 오예측(mispredict)하였다는 것을 결정하는 단계; 및
    상기 선택된 보정된 상태에 기초하여 미래의 명령어 페치(fetch)들을 제어하는 단계를 포함하는,
    예측된 브랜치 명령어들을 분석하기 위한 방법.
  2. 제 1항에 있어서, 상기 예측된 상태는 브랜치 방향을 포함하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  3. 제 1항에 있어서, 상기 예측된 상태는 프로세서의 모드를 포함하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  4. 제 1항에 있어서, 상기 예측된 상태는 타겟 어드레스를 포함하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  5. 제 1항에 있어서, 상기 선택된 보정된 상태는 상기 예측된 브랜치 명령어들중 가장 오래된 명령어에 대응하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  6. 제 1항에 있어서, 상기 선택된 보정된 상태는 랜덤하게 선택되는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  7. 제 1항에 있어서, 상기 선택된 보정된 상태는 어떤 파이프라인이 마지막으로 예측하였는지의 여부에 기초하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  8. 제 1항에 있어서, 상기 선택된 보정된 상태는 어떤 파이프라인이 마지막으로 오예측하였는지의 여부에 기초하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  9. 제 1항에 있어서, 성기 선택된 보정된 상태는 상기 예측된 브랜치 명령어의 타입(type)에 기초하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  10. 다수의 파이프라인들에서 동시적인 예측된 브랜치 명령어들의 검증전에 상기 동시적인 예측된 브랜치 명령어들을 분석하기 위한 방법으로서,
    2개 이상의 예측된 브랜치 명령어들을 처리하는 단계 ― 상기 각각의 예측된 브랜치 명령어는 예측된 상태 및 보정된 상태를 가지며, 상기 예측된 브랜치 명령어들은 개별 파이프라인들의 분석 스테이지에 동시에 입력됨 ―;
    상기 예측된 브랜치 명령어들중 하나로부터 상기 보정된 상태들중 하나를 선택하는 단계;
    상기 예측된 브랜치 명령어들중 적어도 하나가 오예측(mispredict)하였다는 것을 결정하는 단계; 및
    상기 선택된 보정된 상태에 기초하여 미래의 명령어 페치들을 제어하는 단계를 포함하는,
    예측된 브랜치 명령어들을 분석하기 위한 방법.
  11. 제 10항에 있어서, 상기 예측된 상태는 브랜치 방향을 포함하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  12. 제 10항에 있어서, 상기 예측된 상태는 프로세서의 모드를 포함하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  13. 제 10항에 있어서, 상기 예측된 상태는 타겟 어드레스를 포함하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  14. 제 10항에 있어서, 상기 선택된 보정된 상태는 상기 예측된 브랜치 명령어들중 가장 오래된 명령어에 대응하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  15. 제 10항에 있어서, 상기 선택된 보정된 상태는 랜덤하게 선택되는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  16. 제 10항에 있어서, 상기 선택된 보정된 상태는 어떤 파이프라인이 마지막으로 예측하였는지의 여부에 기초하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  17. 제 10항에 있어서, 상기 선택된 보정된 상태는 어떤 파이프라인이 마지막으로 오예측하였는지의 여부에 기초하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  18. 제 10항에 있어서, 성기 선택된 보정된 상태는 상기 예측된 브랜치 명령어의 타입에 기초하는, 예측된 브랜치 명령어들을 분석하기 위한 방법.
  19. 동시적인 예측된 브랜치 명령어들의 검증전에 상기 동시적인 예측된 브랜치 명령어들을 분석하기 위한 시스템으로서,
    다수의 브랜치 명령어들을 예측하도록 구성된 예측 로직 ― 상기 각각의 예측된 브랜치 명령어는 예측된 상태 및 보정된 상태를 가짐 ―;
    2개 이상의 예측된 브랜치 명령어들이 분석 스테이지에 동시에 도달할때를 결정하고, 상기 브랜치 명령어들중 적어도 하나가 오예측하였을때 상기 예측된 브랜치 명령어들중 하나로부터 상기 보정된 상태들중 하나를 선택하도록 구성된 분석 로직; 및
    상기 선택된 보정된 상태에 기초하여 명령어들을 페치하도록 구성된 페치 로직을 포함하는,
    예측된 브랜치 명령어들을 분석하기 위한 시스템.
  20. 제 19항에 있어서, 상기 예측된 상태는 브랜치 방향을 포함하는, 예측된 브랜치 명령어들을 분석하기 위한 시스템.
  21. 제 19항에 있어서, 상기 시스템은 프로세서인, 예측된 브랜치 명령어들을 분석하기 위한 시스템.
  22. 제 20항에 있어서, 상기 예측된 상태는 상기 프로세서의 모드를 포함하는, 예측된 브랜치 명령어들을 분석하기 위한 시스템.
  23. 제 19항에 있어서, 상기 예측된 상태는 타겟 어드레스를 포함하는, 예측된 브랜치 명령어들을 분석하기 위한 시스템.
  24. 제 19항에 있어서, 상기 선택된 보정된 상태는 상기 예측된 브랜치 명령어들중 가장 오래된 명령어에 대응하는, 예측된 브랜치 명령어들을 분석하기 위한 시스템.
  25. 제 19항에 있어서, 상기 선택된 보정된 상태는 랜덤하게 선택되는, 예측된 브랜치 명령어들을 분석하기 위한 시스템.
  26. 제 19항에 있어서, 상기 선택된 보정된 상태는 어떤 파이프라인이 마지막으로 예측하였는지의 여부에 기초하는, 예측된 브랜치 명령어들을 분석하기 위한 시스템.
  27. 제 19항에 있어서, 상기 선택된 보정된 상태는 어떤 파이프라인이 마지막으로 오예측하였는지의 여부에 기초하는, 예측된 브랜치 명령어들을 분석하기 위한 시스템.
  28. 제 19항에 있어서, 상기 선택된 보정된 상태는 상기 예측된 브랜치 명령어의 타입에 기초하는, 예측된 브랜치 명령어들을 분석하기 위한 시스템.
KR1020097008607A 2006-09-27 2007-09-27 동시적인 예측된 브랜치 명령어들을 분석하기 위한 방법 및 시스템 KR101073732B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/535,536 2006-09-27
US11/535,536 US7617387B2 (en) 2006-09-27 2006-09-27 Methods and system for resolving simultaneous predicted branch instructions

Publications (2)

Publication Number Publication Date
KR20090061667A true KR20090061667A (ko) 2009-06-16
KR101073732B1 KR101073732B1 (ko) 2011-10-13

Family

ID=38924371

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097008607A KR101073732B1 (ko) 2006-09-27 2007-09-27 동시적인 예측된 브랜치 명령어들을 분석하기 위한 방법 및 시스템

Country Status (7)

Country Link
US (2) US7617387B2 (ko)
EP (1) EP2069915B1 (ko)
JP (2) JP5221546B2 (ko)
KR (1) KR101073732B1 (ko)
CN (1) CN101523344B (ko)
AT (1) ATE511674T1 (ko)
WO (1) WO2008039947A1 (ko)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7617387B2 (en) * 2006-09-27 2009-11-10 Qualcomm Incorporated Methods and system for resolving simultaneous predicted branch instructions
CN102184091A (zh) * 2011-04-18 2011-09-14 孙瑞琛 一种分支预测方法及装置
US20140156977A1 (en) * 2011-12-28 2014-06-05 Mark J. Dechene Enabling and disabling a second jump execution unit for branch misprediction
US20140195790A1 (en) * 2011-12-28 2014-07-10 Matthew C. Merten Processor with second jump execution unit for branch misprediction
US9268569B2 (en) * 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict
US9411590B2 (en) 2013-03-15 2016-08-09 Qualcomm Incorporated Method to improve speed of executing return branch instructions in a processor
US10108419B2 (en) * 2014-09-26 2018-10-23 Qualcomm Incorporated Dependency-prediction of instructions
US10853076B2 (en) * 2018-02-21 2020-12-01 Arm Limited Performing at least two branch predictions for non-contiguous instruction blocks at the same time using a prediction mapping
US10782976B2 (en) * 2018-05-07 2020-09-22 Dejan Spasov Issuing and flushing instructions from reservation stations using wrap bits and indexes
US20190369999A1 (en) * 2018-06-04 2019-12-05 Advanced Micro Devices, Inc. Storing incidental branch predictions to reduce latency of misprediction recovery
US11086629B2 (en) * 2018-11-09 2021-08-10 Arm Limited Misprediction of predicted taken branches in a data processing apparatus
US20210149676A1 (en) * 2019-11-14 2021-05-20 Higon Austin R&D Center Corporation Branch Prediction Method, Branch Prediction Unit and Processor Core
CN111459549B (zh) * 2020-04-07 2022-11-01 上海兆芯集成电路有限公司 具有高度领先分支预测器的微处理器
CN112256331B (zh) * 2020-12-22 2021-04-27 鹏城实验室 虚拟机指令解析加速方法、装置和计算机存储介质
US11663013B2 (en) 2021-08-24 2023-05-30 International Business Machines Corporation Dependency skipping execution
US11809874B2 (en) * 2022-02-01 2023-11-07 Apple Inc. Conditional instructions distribution and execution on pipelines having different latencies for mispredictions
US11915001B1 (en) 2022-12-26 2024-02-27 Rebellions Inc. Neural processor and method for fetching instructions thereof

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5287467A (en) * 1991-04-18 1994-02-15 International Business Machines Corporation Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit
US5434985A (en) * 1992-08-11 1995-07-18 International Business Machines Corporation Simultaneous prediction of multiple branches for superscalar processing
JPH0756735A (ja) * 1993-08-16 1995-03-03 Nkk Corp 並列演算処理装置
SG52391A1 (en) * 1994-01-03 1998-09-28 Intel Corp Method and apparatus for implementing a four stage branch resolution system in a computer processor
US5586278A (en) * 1994-03-01 1996-12-17 Intel Corporation Method and apparatus for state recovery following branch misprediction in an out-of-order microprocessor
WO1996025705A1 (en) * 1995-02-14 1996-08-22 Fujitsu Limited Structure and method for high-performance speculative execution processor providing special features
US5943494A (en) * 1995-06-07 1999-08-24 International Business Machines Corporation Method and system for processing multiple branch instructions that write to count and link registers
US5740417A (en) * 1995-12-05 1998-04-14 Motorola, Inc. Pipelined processor operating in different power mode based on branch prediction state of branch history bit encoded as taken weakly not taken and strongly not taken states
US5752014A (en) * 1996-04-29 1998-05-12 International Business Machines Corporation Automatic selection of branch prediction methodology for subsequent branch instruction based on outcome of previous branch prediction
JP3717524B2 (ja) * 1996-07-16 2005-11-16 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ストアおよびロードミス命令を完了するための複数のポインタを備えるロード/ストアユニット
US5758143A (en) 1996-10-07 1998-05-26 International Business Machines Corporation Method for updating a branch history table in a processor which resolves multiple branches in a single cycle
JPH10133874A (ja) * 1996-11-01 1998-05-22 Mitsubishi Electric Corp スーパスカラプロセッサ用分岐予測機構
JPH10333908A (ja) * 1997-05-30 1998-12-18 Mitsubishi Electric Corp 分岐予測方法
US6119075A (en) * 1997-11-26 2000-09-12 Digital Equipment Corporation Method for estimating statistics of properties of interactions processed by a processor pipeline
US6157998A (en) * 1998-04-03 2000-12-05 Motorola Inc. Method for performing branch prediction and resolution of two or more branch instructions within two or more branch prediction buffers
US6260138B1 (en) * 1998-07-17 2001-07-10 Sun Microsystems, Inc. Method and apparatus for branch instruction processing in a processor
JP2000132391A (ja) * 1998-10-23 2000-05-12 Nec Corp 分岐予測機構
US6460132B1 (en) * 1999-08-31 2002-10-01 Advanced Micro Devices, Inc. Massively parallel instruction predecoding
US6578134B1 (en) * 1999-11-29 2003-06-10 Ati International Srl Multi-branch resolution
US6757816B1 (en) * 1999-12-30 2004-06-29 Intel Corporation Fast branch misprediction recovery method and system
SE0003446L (sv) * 2000-09-27 2002-03-28 Ericsson Telefon Ab L M En pipelinemikroprocessor och ett förfarnade relaterande därtill
WO2002082717A1 (en) * 2001-04-05 2002-10-17 Kent Ridge Digital Labs Method and apparatus for constructing efficient elliptic curve cryptosystems
US7107438B2 (en) 2003-02-04 2006-09-12 Via Technologies, Inc. Pipelined microprocessor, apparatus, and method for performing early correction of conditional branch instruction mispredictions
US7000233B2 (en) * 2003-04-21 2006-02-14 International Business Machines Corporation Simultaneous multithread processor with result data delay path to adjust pipeline length for input to respective thread
JP4009248B2 (ja) * 2003-12-05 2007-11-14 富士通株式会社 分岐予測装置および分岐予測方法
US7949861B2 (en) * 2005-06-10 2011-05-24 Qualcomm Incorporated Method and apparatus for managing instruction flushing in a microprocessor's instruction pipeline
US7617387B2 (en) 2006-09-27 2009-11-10 Qualcomm Incorporated Methods and system for resolving simultaneous predicted branch instructions

Also Published As

Publication number Publication date
US7617387B2 (en) 2009-11-10
EP2069915A1 (en) 2009-06-17
US20080077781A1 (en) 2008-03-27
US20100023696A1 (en) 2010-01-28
CN101523344B (zh) 2013-01-23
KR101073732B1 (ko) 2011-10-13
EP2069915B1 (en) 2011-06-01
US8082428B2 (en) 2011-12-20
CN101523344A (zh) 2009-09-02
JP2013122774A (ja) 2013-06-20
JP2010505210A (ja) 2010-02-18
JP5221546B2 (ja) 2013-06-26
ATE511674T1 (de) 2011-06-15
WO2008039947A1 (en) 2008-04-03

Similar Documents

Publication Publication Date Title
KR101073732B1 (ko) 동시적인 예측된 브랜치 명령어들을 분석하기 위한 방법 및 시스템
US7487340B2 (en) Local and global branch prediction information storage
KR101074621B1 (ko) 프로액티브 브랜치 타겟 어드레스 캐시 관리를 위한 방법들 및 장치
US9021240B2 (en) System and method for Controlling restarting of instruction fetching using speculative address computations
TWI416407B (zh) 執行複數快速條件分支指令的方法以及相關之微處理器以及電腦程式產品
US20110320787A1 (en) Indirect Branch Hint
US20120079255A1 (en) Indirect branch prediction based on branch target buffer hysteresis
US20070288733A1 (en) Early Conditional Branch Resolution
JP2001147807A (ja) 改良された分岐制御命令を利用するためのマイクロプロセッサ、分岐目標命令メモリ、命令ロード制御回路、パイプラインへの命令供給維持方法、分岐制御メモリ、およびプロセッサ
JP2001142705A (ja) プロセッサおよびマイクロプロセッサ
WO2008067277A2 (en) Methods and apparatus for recognizing a subroutine call
US8301871B2 (en) Predicated issue for conditional branch instructions
US20070288732A1 (en) Hybrid Branch Prediction Scheme
US20100287358A1 (en) Branch Prediction Path Instruction
US20070288731A1 (en) Dual Path Issue for Conditional Branch Instructions
US20080162908A1 (en) structure for early conditional branch resolution
US20070288734A1 (en) Double-Width Instruction Queue for Instruction Execution
US20040225866A1 (en) Branch prediction in a data processing system
US10437596B2 (en) Processor with a full instruction set decoder and a partial instruction set decoder
JP3721002B2 (ja) メモリ要求を形成するために並列に生成される複数の取出アドレスのうちの1つを選択する、プロセッサおよび命令取出方法
US20080162905A1 (en) Design structure for double-width instruction queue for instruction execution
US7343481B2 (en) Branch prediction in a data processing system utilizing a cache of previous static predictions
JP2001142707A (ja) プロセッサおよびそれを用いて実行されるプログラム分岐に対する例外チェックの実行方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20140929

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20150930

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20160929

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee