KR101081674B1 - 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법 - Google Patents

워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR101081674B1
KR101081674B1 KR1020097011477A KR20097011477A KR101081674B1 KR 101081674 B1 KR101081674 B1 KR 101081674B1 KR 1020097011477 A KR1020097011477 A KR 1020097011477A KR 20097011477 A KR20097011477 A KR 20097011477A KR 101081674 B1 KR101081674 B1 KR 101081674B1
Authority
KR
South Korea
Prior art keywords
branch
instruction
stage
history information
instructions
Prior art date
Application number
KR1020097011477A
Other languages
English (en)
Other versions
KR20090089358A (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 KR20090089358A publication Critical patent/KR20090089358A/ko
Application granted granted Critical
Publication of KR101081674B1 publication Critical patent/KR101081674B1/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, 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
    • 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/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, 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
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Abstract

브랜치 히스토리 정보를 처리하는 방법이 개시된다. 상기 방법은 명령 캐시로부터 브랜치 명령들을 검색하고 다수의 파이프라인 스테이지들에서 상기 브랜치 명령들을 실행한다. 상기 방법은 브랜치 명령이 식별되었음을 확인한다. 상기 방법은 제 1 파이프라인 스테이지 동안 브랜치 히스토리 정보를 추가적으로 수신하고 상기 제 1 파이프라인 스테이지 동안 제 1 레지스터로 상기 브랜치 히스토리 정보를 로딩한다. 상기 방법은 추가적으로 제 2 파이프라인 스테이지 동안 상기 브랜치 히스토리 정보를 제 2 레지스터로 로딩한다.

Description

워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법{A SYSTEM AND METHOD FOR USING A WORKING GLOBAL HISTORY REGISTER}
본 발명은 일반적으로 컴퓨터 시스템들에 관한 것이고, 더욱 상세하게는 워킹 글로벌 히스토리 레지스터를 이용하기 위한 방법 및 시스템에 관한 것이다.
프로세서는 컴퓨터 플랫폼 발전의 핵심이다. 이전의 프로세서들은 그 시기의 이용 가능한 기술에 의해 제한되었다. 제조 기술의 새로운 진보들은 트랜지스터 설계들을 이전의 프로세서들의 사이즈의 1/1000로 줄이거나 이를 넘어서도록 허용한다. 이러한 더 작은 프로세서 설계들은 더욱 빠르고, 더욱 효율적이고, 이전의 예상들을 넘어서는 프로세싱 능력을 제공하면서 동시에 실질적으로 더 낮은 전력을 사용한다.
프로세서의 물리적인 설계가 발전하는 것처럼, 정보를 처리하고 기능들을 수행하는 혁신적인 방법들 또한 변화하였다. 예를 들어, 명령들의 "파이프라이닝(pipelining)"은 1960년대 초반부터 프로세서 설계들에서 구현되었다. 파이프라이닝의 일례는 실행 파이프라인들을 유닛들 또는 스테이지들로 푸는(break) 개념이고, 이를 통해 명령들이 스트림에서 순차적으로 흐른다. 몇몇의 스테이지들이 몇몇의 명령들의 적절한 부분들을 동시에 처리할 수 있도록 스테이지들은 배열된다. 파이프라이닝의 하나의 장점은 명령들이 병렬로 전개(evaluate)되기 때문에 명령들의 실행이 중첩(overlap)된다는 것이다.
프로세서 파이프라인은 각각의 스테이지가 명령을 실행하는 것과 관련되는 기능을 수행하는, 많은 스테이지로 구성된다. 각각의 스테이지는 파이프 스테이지 또는 파이프 세그먼트로 지칭된다. 스테이지들은 파이프라인을 형성하기 위해 함께 연결된다. 명령들은 파이프라인의 하나의 끝(end)에서 진입(enter)하고, 다른 끝에서 종료(exit)한다.
프로세서에 의해 실행되는 대부분의 프로그램들은 조건 브랜치(branch) 명령들을 포함하고, 상기 명령의 실제 브랜치 행동은 상기 명령이 파이프라인에서 깊게 전개될 때까지 알지 못한다. 브랜치 명령의 실제 전개로부터 초래되는 스톨(stall)을 회피하기 위해, 최신의 프로세서들은 몇몇의 브랜치 예측의 형태를 이용할 수 있고, 그에 의해 조건 브랜치 명령의 브랜치 행동은 파이프라인에서 초기에 예측된다. 상기 예측된 브랜치 전개에 기반하여, 프로세서는 예측된 어드레스 -(만약 브랜치가 취해지도록 예측된다면) 브랜치 타깃 어드레스 또는 (만약 브랜치가 취해지지 않도록 예측된다면) 브랜치 명령 후에 다음의 순차적인 어드레스- 로부터의 명령들을 추론적으로(speculatively) 페치(fetch)하고 실행한다. 조건 브랜치 명령이 취해(taken)지거나 취해지지 않는지(not taken) 여부는 브랜치 지시(direction)의 결정으로 지칭된다. 브랜치 지시의 결정은 예측 시간 및 실제 브랜치 결정(resolution) 시간에 내려질 수 있다. 실제 브랜치 행동이 결정될 때, 만약 브랜치가 잘못 예측되었다면, 추론적으로 페치된 명령들은 파이프라인으로부터 방출(flush)되어야하고, 새로운 명령들이 정정된 어드레스로부터 페치되어야 한다. 잘못된 브랜치 예측에 대응하여 추론적으로 명령들을 페치하는 것은 프로세서 성능 및 전력 소비에 불리하게 영향을 미칠 수 있다. 결론적으로, 브랜치 예측들의 정확도를 개선하는 것이 중요한 프로세서 설계의 목표이다.
브랜치 예측의 한가지 공지된 형태는 브랜치 예측을 2개의 예측자들: 최초의 브랜치 타깃 어드레스 캐시(BTAC) 및 브랜치 히스토리 테이블(BHC)로 분할(partitioning)하는 것을 포함한다. BTAC는 명령 페치 그룹 어드레스에 의해 인덱싱(index)되고, 명령 페치 그룹 어드레스에 대응하는, 또한 브랜치 타깃으로 지칭되는, 다음의 페치 어드레스를 포함한다. 엔트리들은 브랜치 명령이 프로세서 파이프라인을 통해 통과한 후에 BTAC로 더해지고, 그것의 브랜치는 취해진다. 만약 BTAC가 가득 차면, 엔트리들은 다음 엔트리가 더해질 때 (라운드 로빈(round robin) 또는 최근 최소 사용(least-recently used)과 같은) 표준 캐시 교체 알고리즘들을 사용하여 BTAC로부터 제거된다.
BTAC는 매우-어소시에이티브한(highly-associative) 캐시 설계일 수 있고, 명령 실행 파이프라인에서 초기에 액세스된다. 만약 페치 그룹 어드레스가 BTAC 엔트리(BTAC 히트)와 매치(match)되면, 대응하는 다음 페치 어드레스 또는 타깃 어드레스는 다음 사이클에서 페치된다. 이러한 매치 및 타깃 어드레스의 이어지는 페칭은 내재적으로 취해진 브랜치 예측으로 지칭된다. 만약에 매치가 존재하지 않는다면 (BTAC 미스), 다음의 순차적으로 증가된 어드레스는 다음 사이클에서 페치된다. 이러한 노 매치 상황은 또한 내재적으로 취해지지 않은 예측으로 지칭된다.
BTAC들은 패턴 히스토리 테이블(PHT)로도 알려진 브랜치 히스토리 테이블(BHT)와 같은 더 정확한 개별적인 브랜치 지시 예측자와 함께 이용될 수 있다. 종래의 BHT는 개별적인 브랜치 명령들에 대한 더욱 정확한 취해진/취해지지 않은 결정을 생성하기 위해 포화된(saturating) 예측된 지시 카운터들의 세트를 포함할 수 있다. 예를 들어, 각각의 포화된 예측된 지시 카운터는 4개의 상태들 중 하나를 취하는 2-비트 카운터를 포함할 수 있고, 각각은 다음과 같이 가중된 예측 값을 할당받는다:
11 - 강한 예측이 취해짐
10 - 약한 예측이 취해짐
01 - 약한 예측이 취해지지 않음
00 - 강한 예측이 취해지지 않음
예측 값으로도 지칭되는 종래의 BHT의 출력은, 브랜치 명령의 타깃 어드레스 또는 다음 사이클의 다음 이어지는 어드레스를 페치하도록 하는 결정을 내리거나 내리지 않는다. BHT는 알려질 것처럼 브랜치 결과 정보와 함께 일반적으로 업데이트된다.
브랜치 예측들의 정확도를 증가시키기 위해, 피드백으로서 다른 브랜치들로부터의 최근 브랜치 히스토리 정보를 사용하는 다양한 다른 예측 기술들이 구현될 수 있다. 당해 기술분야에 속한 자는 현재의 브랜치 행동은 이전에 실행된 브랜치 명령들의 히스토리와 상호 연관된다는 것을 인식해야 한다. 예를 들어, 이전에 실행된 브랜치 명령들의 히스토리는 조건 브랜치 명령이 어떻게 예측되는지에 영향을 미칠 수 있다.
당해 기술분야에서 글로벌 브랜치 히스토리 레지스터 또는 글로벌 히스토리 시프트 레지스터로도 지칭되는 글로벌 히스토리 레지스터(GHR)는 이전에 실행된 브랜치 명령들의 과거의 히스토리를 추적하는데에 이용될 수 있다. GHR에 의해 저장된 것처럼, 브랜치 히스토리는 개선된 예측 결과들을 달성하기 위해 현재 실행된 브랜치 명령에 이르는 코드 경로에서 마주치는 브랜치 명령들의 시퀀스의 관점을 제공한다.
몇몇의 프로세서들에서, 브랜치 명령의 식별 및 그것에 관련된 예측 정보는 명령 디코딩 스테이지 후에만 발생한다. 일반적으로, 명령 디코딩 스테이지는 명령 실행 시퀀스에서 나중의 스테이지일 수 있다. 명령이 디코딩되어 브랜치 명령으로 확인된 후에, GHR은 적절한 브랜치 히스토리 정보로 로딩된다. 브랜치 히스토리 정보가 식별되므로, 그것은 GHR로 시프트된다. GHR의 출력은 BHT에 저장되는 예측 값을 식별하기 위해 사용되고, 이는 다음의 조건 브랜치 명령을 예측하기 위해 사용된다.
GHR을 사용하는 종래의 프로세서에서, GHR은 복수의 브랜치 명령들이 상대적으로 짧은 시간 주기동안 병렬로 실행될 때 마주치는 실제의 브랜치 히스토리 정보를 나타내지 못한다. 이러한 예에서, GHR은 제 2 브랜치 명령이 예측되기 전에 제 1 브랜치 명령으로부터의 브랜치 히스토리 정보로 업데이트되지 못한다. 그 결과로서, GHR의 부정확한 값이 제 2 조건 브랜치 명령에 대한 BHT에서 엔트리를 식별하기 위해 사용될 수 있다. BHT에서 엔트리를 인덱싱하기 위해 부정확한 값을 이용하는 것은 브랜치 예측의 정확도에 영향을 미칠 수 있다. 프로세서는 제 1 조건 브랜치 명령으로부터의 브랜치 히스토리 정보를 따라갈 수 없다면, GHR에 다른 값이 저장되고 BHT의 다른 엔트리가 제 2 조건 브랜치 명령에 대해 식별될 것이다.
따라서, 더욱 정확한 브랜치 예측들을 달성하기 위해 GHR보다는 브랜치 히스토리 정보를 저장하고 이용할 수 있는 프로세서를 구비하는 산업상의 요구가 존재한다. 본 발명은 이러한 요구를 인식하고 프로세서의 실행 스테이지들에서 브랜치 명령들을 식별하는 프로세서를 개시한다. 브랜치 명령 정보를 입력으로서 이용하면, 프로세서는 순차적인 조건 브랜치 명령들에 대한 예측 값들의 선택을 조종(steer)할 수 있다.
브랜치 히스토리 정보를 처리하는 방법이 개시된다. 상기 방법은 제 1 파이프라인 스테이지 동안 브랜치 명령들을 식별하고 상기 제 1 파이프라인 스테이지 동안 제 1 레지스터에서 상기 브랜치 히스토리 정보를 로딩한다. 상기 방법은 제 2 파이프라인 스테이지에서 상기 브랜치 명령들을 확인하고 상기 브랜치 히스토리 정보는 상기 제 2 파이프라인 스테이지 동안 제 2 레지스터로 로딩된다.
브랜치 히스토리 정보를 포함하는 제 1 레지스터 및 브랜치 히스토리 정보를 포함하는 제 2 레지스터를 포함하는 파이프라인 프로세서가 개시된다. 파이프라인 프로세서는 다수의 파이프라인 스테이지들을 포함하고, 상기 제 1 레지스터에는 브랜치 명령이 식별될 때 제 1 파이프라인 스테이지에서 상기 브랜치 히스토리 정보가 로딩되며, 제 2 레지스터에는 제 2 파이프라인 스테이지 동안 브랜치 히스토리 정보가 로딩된다.
브랜치 히스토리 정보를 처리하는 방법이 개시된다. 상기 방법은 브랜치 명령을 페치하고, 제 1 파이프라인 스테이지 동안 상기 브랜치 명령들을 식별하며, 그리고 상기 제 1 파이프라인 스테이지 동안 제 1 레지스터에서 상기 브랜치 히스토리 정보를 로딩한다. 상기 방법은 제 2 파이프라인 스테이지에서 상기 브랜치 명령들을 확인하고, 상기 브랜치 히스토리 정보는 상기 제 2 파이프라인 스테이지 동안 제 2 레지스터로 로딩된다.
본 발명의 추가적인 특징들 및 장점들 뿐만 아니라, 본 발명의 더욱 완전한 이해는 다음의 상세한 설명 및 첨부되는 도면들로부터 명백할 것이다.
도 1은 본 발명의 일 실시예를 이용하여 프로세서의 하이 레벨 로직 하드웨어 블록 다이어그램을 도시한다.
도 2는 도 1의 프로세서에 의해 이용되는 예시적인 브랜치 히스토리 테이블을 나타낸다.
도 3은 워킹 글로벌 히스토리 레지스터를 이용하는 도 1의 프로세서의 로우 레벨 로직 블록 다이어그램을 도시한다.
도 4는 워킹 글로벌 히스토리 레지스터 및 글로벌 히스토리 레지스터의 상세한 도면을 도시한다.
도 5는 도 1의 프로세서에 의해 실행되는 예시적인 그룹의 명령들을 도시한다.
도 6은 도 1의 프로세서의 다양한 스테이지들을 통해 실행되는 것과 같은 도 5의 예시적인 명령들의 그룹의 타이밍 다이어그램을 도시한다.
도 7은 워킹 글로벌 히스토리 레지스터를 이용하여 도 1의 프로세서에 의해 수행되는 명령 프로세스 흐름을 설명하는 플로우 차트를 도시한다.
본 발명이 실시될 수 있는 유일한 실시예들을 나타내려고 하는 것이 아닌 본 발명의 다양한 실시예들의 설명으로서 의도된 첨부된 도면들과 관련하여 상세한 설명이 아래에서 설명된다. 상세한 설명은 본 발명의 완전한 이해를 제공하기 위한 목적을 위해 특정한 상세한 설명들을 포함한다. 그러나 당해 기술분야에 속한 자에게는 본 발명이 이러한 특정한 상세한 설명들 없이 실시될 수 있음이 명백할 것이다. 몇몇의 예들에서, 본 발명의 개념들을 흐리게 하는 것을 방지하기 위해 널리-알려진 구조들 및 컴포넌트들이 블록 다이어그램 형태로 도시된다. 두문자들 및 다른 기술적인 용어는 단지 편의와 명확함을 위해 사용될 수 있고, 본 발명의 범위를 제한하고자 함이 아니다.
도 1은 여기서 설명되는 실시예를 이용하여 슈퍼스칼라(superscalar) 프로세서(100)의 하이 레벨 도면을 도시한다. 프로세서(100)는 전용 고속 버스(104)를 통해 명령 캐시(106)와 연결된 중앙 연산 장치(CPU, 102)를 구비한다. 명령 캐시는 또한 범용 버스(116)를 통해 메모리(114)에 연결된다.
프로세서(100) 내에서, 명령 페치 유닛(IFU, 122)은 메모리(114)로부터 명령 캐시(106)로 명령들의 로딩을 제어한다. 명령 캐시(106)가 명령들로 로딩되면, CPU(102)는 고속 버스(104)를 통해 명령들에 액세스할 수 있다. 명령 캐시(106)는 도 1에 도시된 것처럼 개별적인 메모리 구조일 수 있거나, 또는 CPU(102)의 내부 컴포넌트로서 집적화될 수 있다. 집적화는 CPU(102)의 복잡함 및 전력 손실(dissipation)뿐만 아니라 명령 캐시(106)의 사이즈에 따라 정해질 수 있다. 또한 브랜치 타깃 어드레스 캐시(BTAC,130), 브랜치 히스토리 테이블(BHT, 140) 및 2개의 하위(lower) 파이프라인들(160, 170)은 IFU(122)에 연결된다.
명령들은 명령 캐시(106)로부터 페치되고 디코딩될 수 있으며, 한번에 여러 개의 명령들이 페치되고 디코딩될 수 있다는 것을 인식한다. 명령 캐시(106) 내에서 명령들은 캐시 라인들로서 알려진 섹션들로 그룹화된다. 각각의 캐시 라인은 관련된 데이터뿐만 아니라 복수의 명령들을 포함할 수 있다. 페치되는 명령들의 개수는 각각의 캐시 라인의 명령들의 개수뿐만 아니라 요구되는 페치 대역폭에 의존할 수 있다. IFU(122) 내에서, 페치된 명령들은 동작 유형 및 데이터 의존들에 대해 분석된다. 명령들을 분석한 뒤, 프로세서(100)는 추가적인 실행을 위해 IFU(122)로부터 낮은 기능 유닛들 또는 하위(lower) 파이프라인들(160 또는 170)로 명령들을 분배할 수 있다.
하위 파이프라인들(160, 170)은 계산 논리 유닛들, 플로팅 포인트 유닛들, 저장 유닛들, 로드 유닛들 등을 포함하는 다양한 실행 유닛들(EU, 118)을 포함할 수 있다. 예를 들어, 계산 논리 유닛과 같은 EU(118)는 정수 가산, 감산, 단순 곱셈, 비트(bitwise) 논리 연산들(예를 들어, AND, NOT, OR, XOR), 비트 시프팅 등과 같은 넓은 범위의 계산 기능들을 실행할 수 있다. 또한, 하위 파이프라인들(160, 170)은 조건 브랜치 명령의 실제의 결과들이 식별되는 동안 해결 스테이지(미도시)를 가질 수 있다. 브랜치 명령의 실제 결과들이 식별되면, 프로세서(100)는 실제의 결과들을 예측된 결과들과 비교할 수 있고, 그들이 매치하지 않으면, 잘못된 예측이 발생한 것이다.
당해 기술분야에 속하는 자는 BTAC(130)가 브랜치 타깃 버퍼(BTB) 또는 브랜치 타깃 명령 캐시(BTIC)와 유사할 수 있다. BTB 또는 BTIC는 브랜치의 어드레스 및 타깃 브랜치의 명령 데이터(또는 옵코드(opcode)들) 모두를 저장한다. 설명의 편의를 위해, BTAC(130)는 본 발명의 다양한 실시예들과 관련하여 이용된다. 본 발명의 다른 실시예들은 BTAC(130) 대신에 선택적으로 BTB 또는 BTIC를 포함할 수 있다.
브랜치 명령이 실행되는 첫 번째 시간에, BTAC(130)에 엔트리가 존재하지 않고 BTAC 미스가 일어난다. 브랜치 명령이 그것의 실행을 종료한 후에, BTAC(130)는 프로세서 모드뿐만 아니라 특정한 조건 브랜치 명령의 타깃 어드레스를 나타내기 위해 순차적으로 업데이트될 수 있다(예를 들어, 진보된 RISC 프로세서 구조에서 Arm 대 Thumb 동작). 브랜치 명령이 다시 페치되는 임의의 시간에서, BTAC(130)에 저장된 정보는 페치된 브랜치 명령을 완전히 디코딩하지 않더라도 다음의 프로세서 사이클에서 페치될 것이다.
BTAC 히트(예를 들어, 페치 그룹 어드레스가 BTAC(130)에서 어드레스와 매치할 때)는 조건 또는 비조건 브랜치 명령에 대해 일어날 수 있다. 이것은 BTAC(130)가 비조건 브랜치 명령들뿐만 아니라 조건 브랜치 명령들 모두에 관련되 는 정보를 저장할 수 있는 사실에 기인한다. 비조건 브랜치 명령에 대한 BTAC 히트의 경우에, 브랜치 명령이 비조건적이라는 사실뿐만 아니라 예측된 타깃 어드레스, 프로세서의 예측된 모드는 저장될 수 있다. 비조건 브랜치 명령 어드레스가 BTAC(130)의 엔트리에 저장되는 상황들에서, 엔트리는 취해지는 브랜치 지시를 표시할 것이다.
도 2는 프로세서(100)에 의해 이용되는 예시적인 브랜치 히스토리 테이블(BHT, 140)의 더욱 상세한 설명을 도시한다. BHT(140)는 m개의 어드레스 비트들을 가진 어드레스를 이용하여 인덱싱되는 2m개의 라인들(202)로 구성될 수 있다. 일 실시예에서, 어드레스의 9개의 비트들이 사용되고, 이는 512라인들을 가지는 BHT(140)를 초래한다. 각각의 라인(202) 내에, 2n개의 카운터들(204)이 존재하고, n은 적절한 카운터를 선택하기 위해 이용되는 비트들의 수이다. 또한, 어드레스의 3개의 비트들은 카운터(204)를 선택하기 위해 이용될 수 있고, 라인(202) 당 8개의 카운터들(204)을 가진 BHT(140)를 초래한다. 일 예시적인 실시예에서, 페치 그룹 어드레스 비트들(12 내지 4)은 BHT(140)의 라인(202)을 선택하기 위해 이용될 수 있다. 페치 그룹 어드레스의 비트들(3-1)은 특정 카운터(204)를 선택하기 위해 이용될 수 있다.
프로세서(100)는 명령 디코딩 스테이지에 앞선 명령 실행 프로세스에서 더 일찍 브랜치 명령들을 식별할 수 있다. 브랜치 명령들이 더 일찍 식별되면, 예측 값(조건 브랜치 명령) 또는 취해진 브랜치 지시(비조건 브랜치 명령)와 같은 브랜치 히스토리 정보가 또한 동시에 식별될 수 있다. 워킹 글로벌 히스토리 레지스터(WGHR)는 명령 실행 프로세스에서 더 일찍 브랜치 히스토리 정보를 수신하고 처리하기 위해 프로세서(100)에 의해 이용될 수 있다. 예를 들어, WGHR은 비조건적인 브랜치 명령들의 브랜치 지시들뿐만 아니라 조건적인 브랜치 명령들의 예측 값들을 저장할 수 있다. 선택적으로, WGHR은 조건 브랜치 명령들의 예측 값들만 저장할 수 있다. WGHR의 출력은 다음의 조건 브랜치 명령에 대해 BHT(140)에서 대응하는 엔트리를 인덱싱하기 위해 이용될 수 있다.
도 4는 워킹 글로벌 히스토리 레지스터(WGHR, 416)를 포함하는 프로세서(100)의 하위 레벨 논리 블록 다이어그램(400)을 도시한다. 상위(upper) 파이프(450)는 하위 레벨 블록 다이어그램(400)에 있다. 상위 파이프의 위(top)는 페치 논리 회로(402)에 연결된다. 상위 파이프(450)는 명령 캐시 1 스테이지(IC1, 404), 명령 캐시 2 스테이지(IC2, 406), 명령 데이터 정렬 스테이지(IDA, 408) 및 디코딩 스테이지(DCD, 410)인 4개의 명령 실행 스테이지들을 포함한다. 파이프 스테이지들은 본 발명의 범위를 한정하지 않으면서 상위 파이프(450)로부터 추가되거나 제외될 수 있음을 주목해야 한다. 상위 파이프(450), 워킹 글로벌 히스토리 레지스터(WGHR, 416), 글로벌 히스토리 레지스터(GHR, 414), 브랜치 정정 논리 회로(BCL, 440), 선택 먹스(mux)(422) 및 어드레스 해싱 논리 회로(420)뿐만 아니라 페치 논리 회로(402) 또한 IFU(122) 내에 위치할 수 있다.
프로세서(100)는 명령들을 실행하는 것을 시작하고, 페치 논리 회로(402)는 IC1 스테이지(404) 동안 어떤 명령들이 페치되는지를 결정한다. 명령들을 검색(retrieve)하기 위해, 페치 논리 회로(402)는 명령 캐시(106)로 페치 그룹 어드 레스를 전송한다. 만약 페치 그룹 어드레스가 명령 캐시(106) 내에서 발견된다면(예를 들어, 명령 캐시 히트), 명령들은 IC2 스테이지(406) 동안 명령 캐시(106)의 히트 캐시 라인으로부터 판독된다.
병렬적으로, IC1 스테이지(404) 동안, 프로세서(100)는 BTAC(130)로 페치 그룹 어드레스를 전송한다. 만약 프로세서(100)가 BTAC 히트를 마주치면, 페치 그룹 어드레스에 대한 BTAC 내에 저장된 정보는 IC2 스테이지(406) 동안 수신된다. 이전에 언급한 것처럼, BTAC(130) 내에 저장된 정보는 취해진 브랜치 지시(비조건적인 브랜치 명령의 경우)뿐만 아니라 브랜치 타깃, 프로세서 모드와 같은 브랜치 정보를 포함할 수 있다.
IC1 스테이지(404) 동안 또한, 페치 논리 (회로)는 페치 그룹 어드레스를 어드레스 해싱 논리 회로(420)로 전송한다. 어드레싱 해싱 논리 회로(420) 내에서, 페치 그룹 어드레스의 비트들(12 - 4)은 선택 먹스(422)의 출력과 배타적 논리합(XOR'd)으로 연산된다. 어드레스 해싱 논리 회로(420)의 출력(예를 들어, XOR 함수)은 어드레스 인덱스를 BHT(140)로 제공한다. 이전에 언급한 것처럼, 페치 그룹 어드레스의 비트들(3-1)은 적절한 카운터(204)를 선택하기 위해 선택 비트들을 제공할 수 있다.
IC2 스테이지(406) 동안, 프로세서(100)는 명령 페치 그룹 어드레스를 명령 캐시(106), BTAC(130) 및 BHT(140)로 전송하는 것으로부터의 결과들을 판독한다. IC2 스테이지(406)에서, 프로세서(100)는 만약 BTAC 히트가 일어나는지 여부를 결정한다. BTAC 히트가 IC2 스테이지(406) 동안 확인될 때, 프로세서(100)는 브랜치가 조건 또는 비조건 브랜치 명령인지를 또한 결정한다. IC2 스테이지(406)에서 BHT(140)로부터의 예측 값은 또한 수신되고 저장된다.
명령 캐시(106)의 각각의 캐시 라인은 복수의 명령들을 포함할 수 있기 때문에, 개별적인 명령들은 캐시 라인으로부터 분리될 필요가 있을 수 있다. 마찬가지로, 데이터는 캐시 라인의 명령들과 얽힐(interwinded) 수 있다. 캐시 라인으로부터의 정보는 적절하게 명령들을 분석하고 실행하기 위해 포맷되고 정렬될 필요가 있을 수 있다. 명령들의 개별적인 실행가능한 명령들로의 정렬 및 포맷은 IDA 스테이지(408) 동안 일어난다.
명령들이 IDA 스테이지(408) 동안 처리된 후에, 그들은 디코딩(DCD) 스테이지(410)를 통하여 통과된다. DCD 스테이지(410) 동안, 명령들은 명령의 유형 및 어떤 추가적인 정보나 자원들이 추가적인 프로세싱을 위하여 필요할 수 있는지를 결정하기 위해 분석된다. 명령의 유형 또는 현재의 명령 로드에 의존하여, 프로세서(100)는 명령을 DCD 스테이지(410)에 홀드(hold)할 수 있거나, 또는 프로세서(100)는 추가적인 실행을 위해 하위 파이프라인들(160 또는 170) 중 어느 하나로 명령을 통과시킬 수 있다. DCD 스테이지(410)에서, 프로세서(100)는 조건 브랜치 명령으로 명령을 확인하고, BHT(140)로부터 명령의 예측 값(IC2 스테이지(406) 동안 판독함)을 확인한다. 예측 값의 정확도는 하위 파이프라인들(160 또는 170) 중 어느 하나의 나중의 명령 실행의 스테이지 동안 확인될 것이다. 브랜치 예측이 틀린(incorrect) 것으로 결정(예를 들어, 잘못된 예측)될 때까지, 프로세서(100)는 예측 값이 참된 값으로 추측하고 이러한 예측에 기반하여 페칭 명령들을 진행한다.
상위 파이프(450)는 워킹 글로벌 히스토리 레지스터(WGHR, 416)에 연결된다. WGHR(416)은 프로세서(100)가 DCD 스테이지(410)에 앞서 식별된 브랜치 명령들과 관련된 브랜치 히스토리 정보를 저장하고 처리하도록 허용한다. 일 실시예에서, WGHR(416)은 BTAC 히트가 일어날 때 조건 브랜치 명령에 대한 BHT(140)로부터 예측값으로 로딩될 수 있다. 앞서 설명한 것처럼, BTAC 히트는 페치되는 명령이 브랜치 명령이고 브랜치 히스토리 정보(예를 들어, 조건 브랜치 명령에 대한 예측 값 또는 비조건 브랜치 명령에 대한 취해진 지시)와 관련되었는지를 의미한다. 이러한 조건에 기반하여, 프로세서(100)는 DCD 스테이지(410) 동안 브랜치 명령이 확인될 때까지 기다리는 것과는 반대로 이어지는 브랜치 예측들에 대해 더 일찍 브랜치 히스토리 정보를 이용할 수 있다(즉, 브랜치 히스토리 정보가 더욱 최근 것임). WGHR(414)의 출력은 BHT(140)의 다음 엔트리에 대한 어드레스 인덱스를 결정하기 위해 어드레스 해싱 논리 회로(420)로 전송된다.
브랜치 히스토리 정보가 이용 가능하게 되는 시기는, 얼마나 빠르게 브랜치 히스토리 정보가 BHT(140)로부터 검색될 수 있는지 그리고 얼마나 빠르게 BTAC 히트가 확인 응답될 수 있는지에 의존한다. 몇몇의 프로세서 설계들에서, 브랜치 히스토리 정보 및 BTAC 히트는 IC2 스테이지(406) 동안 수신될 수 있다. 다른 프로세서 설계들에서, 브랜치 히스토리 정보 및 BTAC 히트는 IDA 스테이지(408) 동안 수신될 수 있다. 다시 위에서 설명된 스테이지들과 다른 스테이지들을 통합하는 다른 프로세서 설계들에서, 브랜치 히스토리 정보 및 BTAC 히트는 디코딩 스테이지에 앞서 상기 스테이지들 동안 이용 가능할 수 있다.
일 실시예에서, 조건 브랜치 명령들에 대한 브랜치 히스토리 정보는 IC2 스테이지(406) 동안(BTAC 히트가 일어날 때) WGHR(416)로 시프트된다. 다시 다른 실시예에서, 조건 브랜치 명령들 및 비조건 브랜치 명령들 모두에 대한 브랜치 히스토리 정보는 WGHR(416)로 시프트된다. 추가적인 실시예에서, WGHR(416)은 IDA 스테이지(408) 동안 브랜치 히스토리 정보로 업데이트될 수 있다. 이러한 상황은 예측 값이 BHT(140)에 저장되었을 때 또는 BTAC 히트 정보가 IDA 스테이지(408)까지 이용 가능하지 않을 때 일어날 수 있다.
선택 먹스(422)는 WGHR(416)의 출력을 수신하도록 구성된다. 일 실시예에서, WGHR(416)의 출력은 프로세서(100)에 의해 처리되는 마지막 9개의 브랜치 명령들의 브랜치 히스토리를 포함하는 9개의 비트 값이다. 다음의 조건 브랜치 명령을 위하여 선택 먹스(422)의 출력은 BHT(140)로 인덱싱되는 어드레스 해싱 논리 회로(420)로의 입력으로 이용된다.
GHR(414)은 GHR(414)이 DCD 스테이지(410) 동안 브랜치 히스토리 정보로 로딩될 수 있는 것을 제외하고는 WGHR(416)과 매우 유사하게 동작한다. GHR(414)의 내용들은 브랜치 명령이 DCD 스테이지(410)를 통해 통과하면 WGHR(416)의 내용들을 반영(mirror)할 것이다. 환경들에 의존하여 GHR의 출력은 예측 값을 인덱싱하기 위해 이용될 수 있다.
GHR(414)의 출력은 선택 먹스(422)에 연결된다. BTAC 미스가 일어나고 DCD 스테이지(410) 동안 명령이 취해진 브랜치 명령으로서 확인되는 것으로 결정될 때, 선택 먹스(422)는 인덱싱을 위한 어드레스 해싱 논리 회로(420)에 의해 이용되는 GHR(414)의 출력을 선택하도록 지시한다. 이러한 예에서, WGHR(416)이 아직 취해진 브랜치에 대한 브랜치 히스토리 정보를 가지지 않았기 때문에(BTAC 미스로 인해) GHR(414)은 이용된다. 선택적으로, WGHR(416)이 현재의 브랜치 명령에 대해 BHT(140)를 인덱싱하기에 앞서 순차적인 페치된 브랜치 명령에 의해 업데이트될 수 있기 때문에, BTAC 미스가 일어날 때 GHR(414)의 출력은 또한 어드레스 해싱 논리 회로(420)에 의해 이용될 수 있다. 이러한 예에서, WGHR(414)은 현재의 브랜치 명령에 대한 적절한 값을 나타내지 못하고, 만약 어드레스 해싱 논리 회로(420)에 의해 이용되면 BHT(140)에 틀린 엔트리가 인덱싱될 수 있다.
GHR(414)의 출력은 또한 브랜치 정정 논리 회로(BCL, 440)에 연결된다. 잘못된 예측이 발생하면, BCL(440)은 복원 목적들을 위해 이용되는 브랜치 히스토리 정보의 "참된(true)" 카피를 제공하기 위해 GHR(414)을 이용한다. 잘못된 예측이 일어나면, BCL(440)은 GHR(414) 및 WGHR(416) 모두에서 브랜치 히스토리 정보를 복원한다. 위에서 언급한 것처럼, 브랜치 명령이 해결 스테이지에 도달하고 실제의 결과들이 예측된 결과들에 매치하지 않을 때, 잘못된 예측이 일어난다.
잘못된 예측이 일어날 때, BCL(440)은 페치 논리 회로(402)가 잘못 예측된 조건 브랜치 명령에 기반하여 페치되는 명령들을 플러싱(flush)하도록 지시하는 정보를 페치 논리 회로(402)로 전송한다. 더욱 효율적이기 위해, BCL(440)은 정정 브랜치 히스토리 정보를 선택 먹스(422)에 제공하는 동시에 GHR(414) 및 WGHR(416)을 정정 브랜치 히스토리 정보로 복원할 수 있다. 잘못된 예측이 일어날 때, 프로세서(100)는 적절한 카운터(204)를 인덱싱하는 데 이용하기 위해 어드레스 해싱 논 리 회로(420)로 지시되는 BCL(440)의 출력(선택 먹스(422)를 통해)을 선택할 수 있다.
프로세서(100)가 잘못된 예측을 마주칠 때, BCL(440)은 GHR 및 WGHR을 그들의 적절한 값들로 복원한다. 일 실시예에서, BCL(440)은 GHR(414)이 조건 브랜치 명령에 대해 예측 값으로 로딩된 후에 GHR(414)의 스냅샷을 취할 수 있다. BCL(440)은 그 후 GHR(414)의 가장 최근의 예측 값(예를 들어, MSB)을 인버팅할 수 있다. 예측 값의 반대를 취함으로써, BCL(440)은 잘못된 예측이 일어나면 GHR(414) 및 WGHR(416)에서 나타내어야할 정정된 값을 준비한다. 예를 들어, 만약 DCD 스테이지(410) 동안 조건 브랜치 명령 및 그것의 예측 값을 식별한 이후라면, GHR(414) 및 BCL(440)은 값 "101011111"(MSB => LSB)으로 로딩된다. BCL(440)은 조건 브랜치 명령에 대응하는 MSB를 플립(flip)할 수 있고 조건 브랜치 명령에 링크된 정정된 값 "001011111"을 저장할 수 있다. 따라서 만약 조건 브랜치 명령이 틀리게 예측되면, 정정된 값은 GHR(414), WGHR(416) 및 선택 먹스(422)로 전송될 준비가 된다.
도 5는 WGHR(416), GHR(414) 및 BCL(440)의 상세한 도면(500)을 도시한다. 상세한 도면(500) 내에서, WGHR 선택 먹스(502)는 BCL(440)로부터 정정된 브랜치 히스토리 정보뿐만 아니라 IC2 스테이지(406), DCD 스테이지(410)로부터 브랜치 히스토리 정보를 수신한다. GHR 선택 먹스(504)는 DCD 스테이지(410)로부터 브랜치 히스토리 정보를 수신하고 BCL(440)로부터 정정된 브랜치 히스토리 정보를 수신한다.
WGHR 선택 먹스(502)는 어떤 입력이 브랜치 히스토리 정보를 WGHR(416)에 로딩하기 위해 사용될지를 선택한다. 잘못된 예측이 일어날 때, BCL(440)로부터의 입력은 IC2 스테이지(406) 또는 DCD 스테이지(410)로부터 전송된 정보보다 우선권을 갖는다. 잘못된 예측 다음에 이어지는 브랜치 히스토리 정보가 틀리게 예측된 브랜치 경로에 따라 페치된 조건 브랜치 명령들과 관련될 수 있기 때문에 BCL(440)은 우선권을 갖는다. 그러므로 IC2 스테이지 또는 DCD 스테이지(410)에 의해 통과된 브랜치 히스토리 정보는 또한 부정확할 수 있다.
만약 잘못된 예측이 일어나지 않는다면, WGHR 선택 먹스(502)를 위한 입력 선택은 가장 높은 우선권으로부터 가장 낮은 우선권으로 나열된 다음의 예들에 따라서 결정될 수 있다:
a) 만약 브랜치 명령이 IC2 스테이지(406) 동안 BTAC 미스를 리턴(return)하지만 DCD 스테이지(410) 동안 디코딩된 후에 취해진 예측을 종료하면, DCD 스테이지(410) 동안 확인된 브랜치 히스토리 값은 WGHR(416)로 시프트된다. 방출될 필요가 있는 예측된 취해진 브랜치 명령 이후에 명령들이 페치되었기 때문에, DCD 스테이지(410)는 이 경우에 우선권을 갖는다. 그러므로, 동일한 프로세서 사이클 동안 WGHR(416)에 기록될 준비가 될 수 있는 이어지는 브랜치 명령에 대해 IC2 스테이지(406) 동안 식별되는 임의의 브랜치 히스토리 정보는 폐기된다.
b) 만약 DCD 스테이지(410)가 BTAC 미스와 관련된 브랜치 명령을 실행하지 않으면, IC2 스테이지(406)는 다음의 가장 높은 우선권을 가질 것이다. BTAC 히트가 브랜치 명령에 대해 일어나는 한, IC2 스테이지(406) 동안 식별되는 브랜치 히 스토리 정보는 WGHR(416)로 시프트된다.
c) 만약 브랜치 명령이 BTAC 히트로서 이전에 식별되었고 관련된 브랜치 히스토리 정보가 이미 설명된 예(b)에 따라서 로딩된다면, WGHR(416)은 DCD 스테이지(410)로부터 한번 이상 다시 기록될(rewriten)될 것이다. 물론, 만약 조건 브랜치 명령이 BTAC 미스이고 브랜치 명령이 예측이 취해지지 않음이면, WGHR(416)은 이러한 브랜치 히스토리 정보로 기록된다. WGHR(416)의 기록(writing)은 디코딩 스테이지(410)를 통해 명령이 통과한 후에 GHR(414) 및 WGHR(416)이 동기화될 것임을 보장한다.
GHR 선택 먹스(504)는 GHR(414)을 업데이트하기 위해 이용되는 적절한 입력을 선택한다. WGHR 선택 로직(502)과 유사하게, GHR 선택 먹스(504)는 BCL(440)로부터의 입력에게 위에서 설명한 것과 동일한 이유로 가장 높은 우선권을 부여한다. 따라서 잘못된 예측이 일어나지 않으면, GHR(414)은 특정한 브랜치 명령에 대해 DCD 스테이지(410) 동안 식별되는 브랜치 히스토리 정보로 업데이트된다.
도 6은 상위 파이프라인(450)를 통해 이동하는 명령들(500)의 예시적인 그룹의 타이밍 다이어그램(600)을 도시한다. 명령들(500)의 예시적인 그룹 내에 복수의 브랜치 명령들이 존재한다. 도 6의 X-축(602)은 프로세서 사이클을 묘사하고 Y-축(604)은 GHR(414) 및 WGHR(416)의 내용들뿐만 아니라 명령이 통과하는 상위 파이프(450) 내에서의 실행 스테이지를 도시한다. GHR(414) 및 WGHR(416)의 내용들은 하나의 프로세서 사이클 동안 기록되고 다음의 프로세서 사이클의 시작점에서 래치(latch)된다. 타이밍 다이어그램에 나타난 것처럼, GHR(414) 및 WGHR(416)의 래치된 내용들이 도시된다. 설명의 편의를 위해, GHR(414) 및 WGHR(416)의 3개의 최상위 비트들만이 도시된다. 명령들이 실행되면, 명령들은 Y-축(604)으로 내려간다.
프로세서 사이클 1에서, 페치 논리 회로(402)는 명령(A)에 대해 명령 캐시(106), BTAC(130) 및 어드레스 해싱 논리 회로(420)로 페치 그룹 어드레스를 전송한다. 이는 명령(A)이 IC1 스테이지(404)로 진입하는 것으로 타이밍 다이어그램(600)에 도시된다. 또한 프로세서 사이클 1에서, GHR(414) 및 WGHR(416)의 3개의 최상위 비트들은 모두 0이고, 이는 3개의 실행된 마지막 브랜치 명령들이 모두 취해지지 않았음을 표시한다.
프로세서 사이클 2에서, 명령 캐시(106), BTAC(130) 및 BHT(140)로 페치 그룹 어드레스를 전송한 결과들이 수신된다. 이는 명령(A)이 IC2 스테이지(406)로 진입하는 것으로 타이밍 다이어그램에 도시된다. 명령 캐시(106)가 복수의 명령들을 저장하기 때문에, 또한 명령(A+4)은 IC2 스테이지(406)의 명령(A)과 함께 검색된 것으로 도시된다. IC2 스테이지(406) 내의 논리 회로는 BTAC(130) 및 BHT(140)로부터 수신된 정보를 분석한다. IC2 스테이지(406) 동안, 프로세서(100)는 명령(A)이 BHT(140)로부터 리턴되는 예측 값뿐만 아니라 조건 브랜치 명령(BTAC 히트로부터의 정보에 기반한)임을 결정한다. 이러한 예에서, 명령(A)은 취해지는 것으로 예측된다. 명령(A)에 대한 BHT(140)의 실제의 엔트리는 강하게 취해짐(11) 또는 약하게 취해짐(10) 중 하나일 수 있다. 프로세서 사이클 2의 종료시점에서, 프로세서(100)는 조건 브랜치 명령(A)과 관련되는 예측 값을 나타내기 위해 WGHR(416)의 MSB에서 "1"을 로드한다. 명령(A)이 예측이 취해짐이기 때문에, 다음의 순차적인 명령(A+4)은, 명령(A+4)이 실행될 다음의 명령이 아닐 것이기 때문에 명령(A)이 IC2 스테이지(406)를 통해 통과한 후에 방출된다. 타이밍 다이어그램(600)에서 도시된 것처럼, 값 "100"은 프로세서 사이클 3의 시작점에서 WGHR(416)로 래치된다.
프로세서 사이클 3 동안, 명령(A)은 IDA 스테이지(408)로 진입한다. IDA 스테이지(408)에 있는 동안, 명령(A)은 포맷되고 정렬되며, DCD 스테이지(410)로 진입하기 위해 명령을 준비한다. 명령(A)이 IDA 스테이지(408)를 통해 이동하는 동안, 명령(B)에 대한 페치 그룹 어드레스는 IC1 스테이지(404) 동안 명령 캐시(106), BTAC(130) 및 BHT(140)로 전송된다.
프로세서 사이클 4에서, 명령(A)은 DCD 스테이지(410)로 진입하고, 명령들(B, B+4)에 대한 페치 요청으로부터의 결과들은 수신되고, 명령(B+8)에 대한 페치 그룹 어드레스는 명령 캐시(106), BTAC(130) 및 BHT(140)로 전송된다(IC1 스테이지(404)). WGHR(416)의 내용들("100")은 선택 먹스(422)에 의해 선택되고 명령(B+8)에 대해 BHT(140)로 엔트리를 인덱싱하기 위한 어드레스 해싱 논리 회로(420)에 의해 이용된다. 명령(A)이 DCD 스테이지(410)에 있을 때, 프로세서(100)는 명령(A)이 조건 브랜치 명령임을 확인하고 결과로서 예측 값("1")은 GHR(414)로 시프트된다. 프로세서(100)는, 프로세서(100)가 GHR(414)을 래치할 때 프로세서 사이클 5의 시작점까지 명령(A)으로부터 GHR(414)의 업데이트된 값을 알지 못할 것이다. 프로세서 사이클 4의 종료점에서, 명령(A)은 상위 파이프(450)를 떠나고, 추가적인 실행을 위해 하위 파이프(160 또는 170)로 지시된다.
WGHR(416)을 이용하지 않고 브랜치 히스토리 정보 및 실행된 명령들(500)의 예시적인 그룹을 저장하기 위해 오직 GHR을 이용하는 종래의 프로세서에서, 명령(B+8)에 대해 BHT로부터 리턴된 예측된 값은 정확하지 않을 수 있다. 이는 어드레스 해싱 논리 회로가 명령(B+8)에 대한 BHT의 엔트리를 결정하기 위해 프로세서 사이클 4에서 GHR의 값을 이용할 것이기 때문이다(예를 들어, 값 "000"은 이용되었다). GHR의 이러한 값은, 명령(A)에 대한 브랜치 히스토리 정보가 정확하게 나타나지 않았기 때문에 프로세서에 의해 마주치는 실제의 브랜치 히스토리를 정확하게 나타내지 않는다. 만약 동일한 명령 시퀀스가 순차적으로 실행되었으나, 이번에는 명령(B+8)을 페치할 때 프로세서가 지연(delay)을 경험하였다면(즉, 어드레스 해싱 논리 회로가 BHT 엔트리에 액세스하기 위해 GHR의 값을 이용할 때까지 GHR의 내용들은 업데이트되었음), BHT로의 상이한 엔트리가 액세스될 수 있다. 이러한 경우에, 브랜치 히스토리 정보를 저장하기 위해 단지 GHR만을 이용하는 프로세서는, 동일한 명령 실행 시퀀스를 가지는 동일한 조건 브랜치 명령에 대해 2개의 상이한 BHT 엔트리들에 액세스할 수 있다.
일 실시예에서, 명령(A)이 DCD 스테이지(410) 내에 있을 때, WGHR(416)은 GHR(414)이 로딩되는 동시에 예측 값으로 다시 재기록된다. 동시에 동일한 예측값으로 양쪽의 레지스터들을 기록함으로써, 2개의 레지스터들은 명령(A)에 대해 동기화된다. 2개의 조건 브랜치 명령들이 다른 명령어에 이어서 즉시 취해지는 것으로 예측되는 것은 드물기 때문에, 2개의 레지스터들의 동기화가 임의의 브랜치 히스토 리 정보를 손실할 가능성은 거의 없다.
프로세서 사이클 5에서, 명령들(B+8, B+12)이 IC2 스테이지(406)로 진입하는 동안 명령들(B, B+4)은 IDA 스테이지(408)로 진입한다. 또한 프로세서 사이클 5에서, 명령들(B+16, B+20)에 대한 페치 그룹 어드레스는 명령 캐시(106), BTAC(130) 및 BHT(140)로 전송된다. IC2 스테이지(406)에서, 명령(B+8)은 BTAC 히트를 리턴한다. 명령(B+8)이 BTAC 히트이기 때문에, 프로세서(100)는 또한 명령(B+8)이 조건 브랜치 명령임을 결정하고, IC2 스테이지(406) 동안 BHT(140)로부터 리턴된 그것의 예측 값은 WGHR(416)로 시프트된다. 이러한 예에서, 명령(B+8)은 또한 예측이 취해짐이다. BHT(140)의 실제 엔트리는 강하게 취해짐(11) 또는 약하게 취해짐(10) 중 하나일 수 있다. 명령(B+8)이 예측이 취해진 브랜치 명령이기 때문에, 명령들(B+12, B+16, 및 B+20)은, 명령(B+8)이 IC2 스테이지(406)를 떠나고 (BTAC 히트로부터 수신된)타깃 어드레스 표시 명령(C)이 페치 논리 회로(402)로 지시된 후에 페치 논리 회로(402)에 의해 방출될 것이다. WGHR(416)의 내용들은 취해짐의 예측 값("1")으로 업데이트되고, 상기 값은 타이밍 다이어그램(600)에 나타난 것처럼 프로세서 사이클 6의 시작점에서 래치된다.
프로세서 사이클 6에서, 명령(B+8)이 IDA 스테이지(408)로 진입하는 동안 명령들(B, B+4)은 DCD 스테이지(410)로 진입한다. 또한, 프로세서 사이클 6동안, 명령(C)에 대한 페치 그룹 어드레스는 명령 캐시(106), BTAC(130) 및 BHT(140)으로 전송된다(IC1 스테이지(404)). 프로세서 사이클 6의 종료시점에서, 명령(B,B+4)은 상위 파이프(450)를 떠나고 추가적인 실행을 위해 하위 파이프라인들(160 또는 170)로 지시된다.
프로세서 사이클 7에서, 명령(B+8)은 DCD 스테이지(410) 동안 처리된다. DCD 스테이지(410) 동안, 명령(B+8)은 조건 브랜치 명령으로 확인되고 그것의 예측 값은 또한 확인된다. 명령(B+8)에 대해 식별되는 예측 값은 GHR(414)로 시프트되고 프로세서 사이클 7 동안 WGHR(416)로 리로딩(reload)된다. 명령들(C, C+4)은 IC2 스테이지(406) 동안 명령 캐시(106)로부터 리턴된다. 프로세서 사이클 7의 종료시점에서, 명령(B+8)은 상위 파이프(450)를 떠나고 추가적인 실행을 위해 하위 파이프라인들(160 또는 170)로 지시된다.
(파이프라인의 깊이(depth)에 기반하여) 브랜치 명령들이 서로에 대하여 매우 근접하게 실행될 수 있는 코드 세그먼트에서, 가장 최근의 브랜치 히스토리 정보가 브랜치 예측들을 처리하기 위해 이용된다.
프로세서 사이클 8 동안, GHR(414)의 값은 WGHR(416)와 함께 래치된다. 명령들(C, C+4)은 IDA 스테이지(410) 동안 처리되고 명령들(C, C+4) 다음의 임의의 순차적인 명령들은 페치되고 실행될 수 있다.
도 7은 워킹 글로벌 히스토리 레지스터(WGHR, 416)를 이용하여 명령들을 실행하는 프로세서(100)에 의해 취해지는 명령 프로세스 플로우(700)를 도시하는 플로우 차트이다. 명령 프로세스 플로우(700)는 블록(702)에서 시작한다. 명령 프로세스 플로우는 페치 논리 회로(402)가 (BHT(140)으로 인덱싱하기 위해) BTAC(130) 및 어드레스 해싱 논리 회로(420)로 페치 그룹 어드레스를 전송하는 블록(704)으로 진행한다. 위에서 설명한 것처럼, 페치 그룹 어드레스의 전송이 IC1 스테이지(404) 동안 프로세서(100)에서 일어날 수 있다. 블록(704)에서, (페치된 명령이 브랜치 명령인지 여부를 결정하기 위한) BTAC(130)의 탐색(searching)의 결과들이 리턴된다. 결과들은 IC2 스테이지(406) 동안 리턴된다. 블록(704)으로부터, 명령 프로세스 플로우(700)는 결정 블록(706)으로 진행한다. 프로세서(100)는 BTAC 히트가 결정 블록(706)에서 일어났는지 여부를 결정한다. 이러한 결정은 또한 IC2 스테이지(406) 동안 일어날 수 있다. 위에서 설명한 것처럼, BTAC 히트는 조건 브랜치 명령 또는 취해진 비조건 브랜치 명령에 대해 일어날 수 있다. BTAC 히트가 존재하지 않으면(예를 들어, BTAC 미스), 명령 프로세스 플로우(700)는 바로 블록(712)으로 진행한다.
만약 BTAC 히트가 존재하면, 명령 프로세스 플로우(700)는 블록(710)으로 진행한다. 블록(710)에서, WGHR(416)은 BHT(140)로부터 검색되는 예측 값을 WGHR(416)로 시프팅함으로써 업데이트된다. 예를 들어, 만약 브랜치 명령이 예측이 취해짐이면 "1"이 WGHR(416)로 시프트되거나 또는, 만약 예측이 취해지지 않으면 "0"이 시프트된다. 구현에 의존하여, 예측 값은 디코딩 스테이지에 앞서 임의의 프로세서 실행 스테이지 동안 리턴될 수 있다. 위에서 설명된 실시예에서 WGHR(416)은 IC2 스테이지(406) 동안 업데이트된다.
명령 프로세서 플로우(700)는 명령이 디코딩 스테이지(예를 들어, DCD 스테이지(410))를 통해 통과하는 블록(712)으로 진행한다. 디코딩 스테이지 동안, 블록(712)에서, 명령은 브랜치 명령으로 확인될 수 있다. 명령이 디코딩 스테이지에서 실행된 후에, 명령 프로세스 플로우(700)는 결정 블록(714)으로 진행한다. 만약 결정 블록(714)에서 명령이 브랜치 명령이 아니면, 명령 프로세스 플로우(700)는 블록(720)에서 종료한다.
만약 블록(714)에서 프로세서(100)가 명령이 브랜치 명령임을 확인하면, 명령 프로세스 플로우(700)는 블록(716)으로 진행한다. 블록 716에서, WGHR(416) 및 GHR(414)은 적절한 브랜치 히스토리 정보로 업데이트되고, 명령 프로세스 플로우는 블록(720)에서 끝난다.
여기서 설명된 실시예들과 관련하여 설명된 다양한 예시적인 논리 블록들, 모듈들, 회로들, 구성 요소들, 및/또는 컴포넌트들이 범용 프로세서, 디지털 신호 처리기(DSP), 주문형 집적회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA), 또는 다른 프로그래머블 논리 장치, 이산 게이트 또는 트랜지스터 논리, 이산 하드웨어 컴포넌트들, 또는 이러한 기능들을 구현하도록 설계된 것들의 조합을 통해 구현 또는 수행될 수 있다. 범용 프로세서는 마이크로 프로세서일 수 있지만, 대안적 실시예에서, 이러한 프로세서는 기존 프로세서, 제어기, 마이크로 제어기, 또는 상태 머신일 수 있다. 프로세서는 예를 들어, DSP 및 마이크로프로세서, 복수의 마이크로프로세서들, DSP 코어와 결합된 하나 이상의 마이크로 프로세서, 또는 이러한 구성들의 조합과 같이 계산 장치들의 조합으로서 구현될 수 있다.
여기서 특정 실시예들이 도시되고 설명되었더라도, 당해 기술분야에 속한 자는, 동일한 목적을 달성하기 위해 계산되는 임의의 배열이 도시된 특정 실시예들을 대체할 수 있고, 본 발명이 다른 환경들에서 다른 애플리케이션들을 가지고 있음을 인식해야 한다. 이러한 애플리케이션은 본 발명의 임의의 변경들 또는 변형들을 커버하도록 의도된다. 다음의 청구항들은 여기서 설명된 특정 실시예들로 본 발명의 범위를 한정하고자 의도된 방식에 해당하는 것은 아니다.

Claims (22)

  1. 브랜치 히스토리 정보를 처리하는 방법으로서,
    제 1 파이프라인 스테이지에서 브랜치 명령을 식별하는 단계;
    상기 제 1 파이프라인 스테이지 동안 상기 브랜치 히스토리 정보를 제 1 레지스터로 로딩하는 단계;
    제 2 파이프라인 스테이지에서 상기 브랜치 명령을 확인하는 단계를 포함하고,
    상기 브랜치 히스토리 정보는 상기 제 2 파이프라인 스테이지 동안 제 2 레지스터로 로딩되는, 브랜치 히스토리 정보를 처리하는 방법.
  2. 제1항에 있어서,
    상기 브랜치 명령을 식별하는 단계는 브랜치 타깃 어드레스 캐시(BTAC) 히트가 수신될 때 발생하는, 브랜치 히스토리 정보를 처리하는 방법.
  3. 제1항에 있어서,
    상기 브랜치 명령을 식별하는 단계는 브랜치 타깃 명령 캐시(BTIC) 히트가 수신될 때 발생하는, 브랜치 히스토리 정보를 처리하는 방법.
  4. 제1항에 있어서,
    상기 제 1 파이프라인 스테이지는 명령 캐시 스테이지인, 브랜치 히스토리 정보를 처리하는 방법.
  5. 제1항에 있어서,
    상기 제 1 레지스터 및 상기 제 2 레지스터는 시프트 레지스터들인, 브랜치 히스토리 정보를 처리하는 방법.
  6. 제5항에 있어서,
    상기 제 1 레지스터 및 상기 제 2 레지스터는 9-비트 시프트 레지스터들인, 브랜치 히스토리 정보를 처리하는 방법.
  7. 제1항에 있어서,
    상기 제 1 레지스터 및 제 2 레지스터는 조건 브랜치 명령들에 대한 브랜치 히스토리 정보를 저장하는, 브랜치 히스토리 정보를 처리하는 방법.
  8. 제1항에 있어서,
    상기 제 1 레지스터 및 제 2 레지스터는 조건 브랜치 명령들 및 비조건 브랜치 명령들에 대한 브랜치 히스토리 정보를 저장하는, 브랜치 히스토리 정보를 처리하는 방법.
  9. 제1항에 있어서,
    상기 제 2 파이프라인 스테이지는 디코딩 스테이지인, 브랜치 히스토리 정보를 처리하는 방법.
  10. 파이프라인 프로세서로서,
    브랜치 히스토리 정보를 포함하는 제 1 레지스터,
    브랜치 히스토리 정보를 포함하는 제 2 레지스터,
    복수의 파이프라인 스테이지들을 포함하고,
    상기 제 1 레지스터에는 브랜치 명령이 식별될 때 제 1 파이프라인 스테이지 동안 상기 브랜치 히스토리 정보가 로딩되고, 상기 제 2 레지스터에는 제 2 파이프라인 스테이지 동안 상기 브랜치 히스토리 정보가 로딩되는, 파이프라인 프로세서.
  11. 제10항에 있어서,
    상기 브랜치 명령은 브랜치 타깃 어드레스 캐시(BTAC) 히트가 발생할 때 식별되는, 파이프라인 프로세서.
  12. 제10항에 있어서,
    상기 브랜치 명령은 브랜치 타깃 명령 캐시(BTIC) 히트가 발생할 때 식별되는, 파이프라인 프로세서.
  13. 제10항에 있어서,
    상기 제 1 파이프라인 스테이지는 명령 캐시 스테이지인, 파이프라인 프로세서.
  14. 제10항에 있어서,
    상기 제 2 파이프라인 스테이지는 명령 디코딩 스테이지인, 파이프라인 프로세서.
  15. 제10항에 있어서,
    상기 브랜치 히스토리 정보는 조건 브랜치 명령들에 대한 브랜치 히스토리 정보를 더 포함하는, 파이프라인 프로세서.
  16. 제10항에 있어서,
    상기 브랜치 히스토리 정보는 조건 브랜치 명령들 및 비조건 브랜치 명령들에 대한 브랜치 히스토리 정보를 더 포함하는, 파이프라인 프로세서.
  17. 제10항에 있어서,
    상기 제 1 레지스터 및 상기 제 2 레지스터는 시프트 레지스터들인, 파이프라인 프로세서.
  18. 제10항에 있어서,
    상기 제 2 레지스터는 브랜치 정정 논리 회로로의 입력을 제공하기 위해 사용되는, 파이프라인 프로세서.
  19. 브랜치 히스토리 정보를 처리하는 방법으로서,
    브랜치 명령을 페치(fetch)하는 단계;
    제 1 파이프라인 스테이지에서 상기 브랜치 명령을 식별하는 단계;
    상기 제 1 파이프라인 스테이지 동안 제 1 레지스터로 상기 브랜치 히스토리 정보를 로딩하는 단계; 및
    제 2 파이프라인 스테이지에서 상기 브랜치 명령을 확인하는 단계를 포함하고,
    상기 브랜치 히스토리 정보는 상기 제 2 파이프라인 스테이지 동안 제 2 레지스터로 로딩되는, 브랜치 히스토리 정보를 처리하는 방법.
  20. 제19항에 있어서,
    상기 브랜치 명령을 식별하는 단계는, 브랜치 타깃 어드레스 캐시(BTAC) 히트가 수신될 때 발생하는, 브랜치 히스토리 정보를 처리하는 방법.
  21. 제19항에 있어서,
    상기 제 1 파이프라인 스테이지는 명령 캐시 스테이지인, 브랜치 히스토리 정보를 처리하는 방법.
  22. 제19항에 있어서,
    상기 제 2 파이프라인 스테이지는 디코딩 스테이지인, 브랜치 히스토리 정보를 처리하는 방법.
KR1020097011477A 2006-11-03 2007-10-25 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법 KR101081674B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/556,244 US7984279B2 (en) 2006-11-03 2006-11-03 System and method for using a working global history register
US11/556,244 2006-11-03

Publications (2)

Publication Number Publication Date
KR20090089358A KR20090089358A (ko) 2009-08-21
KR101081674B1 true KR101081674B1 (ko) 2011-11-09

Family

ID=38926137

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097011477A KR101081674B1 (ko) 2006-11-03 2007-10-25 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법

Country Status (8)

Country Link
US (1) US7984279B2 (ko)
EP (1) EP2084602B1 (ko)
JP (1) JP5209633B2 (ko)
KR (1) KR101081674B1 (ko)
CN (1) CN101529378B (ko)
AT (1) ATE496329T1 (ko)
DE (1) DE602007012131D1 (ko)
WO (1) WO2008055045A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5145809B2 (ja) * 2007-07-31 2013-02-20 日本電気株式会社 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム
US20100031011A1 (en) * 2008-08-04 2010-02-04 International Business Machines Corporation Method and apparatus for optimized method of bht banking and multiple updates
US8078851B2 (en) * 2008-12-18 2011-12-13 Faraday Technology Corp. Processor and method for recovering global history shift register and return address stack thereof by determining a removal range of a branch recovery table
JP5367416B2 (ja) * 2009-03-04 2013-12-11 光洋サーモシステム株式会社 搬送ロボット装置
US20140195790A1 (en) * 2011-12-28 2014-07-10 Matthew C. Merten Processor with second jump execution unit for branch misprediction
US9229723B2 (en) 2012-06-11 2016-01-05 International Business Machines Corporation Global weak pattern history table filtering
US9858081B2 (en) * 2013-08-12 2018-01-02 International Business Machines Corporation Global branch prediction using branch and fetch group history
US10372590B2 (en) 2013-11-22 2019-08-06 International Business Corporation Determining instruction execution history in a debugger
JP5863855B2 (ja) * 2014-02-26 2016-02-17 ファナック株式会社 分岐命令を高速に処理するためのインストラクションキャッシュを有するプログラマブルコントローラ
CN113721985B (zh) * 2021-11-02 2022-02-08 超验信息科技(长沙)有限公司 Risc-v向量寄存器分组设置方法、装置及电子设备
US20230315468A1 (en) * 2022-03-30 2023-10-05 Advanced Micro Devices, Inc. Enforcing consistency across redundant tagged geometric (tage) branch histories

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010049782A1 (en) 1999-02-18 2001-12-06 Wei C Hsu Hardware/software system for instruction profiling and trace selection using branch history information for branch predictions
US20060277397A1 (en) 2005-06-02 2006-12-07 Sartorius Thomas A Method and apparatus for predicting branch instructions

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5155818A (en) * 1988-09-28 1992-10-13 Data General Corporation Unconditional wide branch instruction acceleration
US5604877A (en) * 1994-01-04 1997-02-18 Intel Corporation Method and apparatus for resolving return from subroutine instructions in a computer processor
JPH08106387A (ja) 1994-10-06 1996-04-23 Oki Electric Ind Co Ltd 命令プリフェッチ回路及びキャッシュ装置
US5918245A (en) * 1996-03-13 1999-06-29 Sun Microsystems, Inc. Microprocessor having a cache memory system using multi-level cache set prediction
US5860017A (en) * 1996-06-28 1999-01-12 Intel Corporation Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction
US5838962A (en) * 1997-04-09 1998-11-17 Hewlett-Packard Company Interrupt driven dynamic adjustment of branch predictions
US6157988A (en) * 1997-08-01 2000-12-05 Micron Technology, Inc. Method and apparatus for high performance branching in pipelined microsystems
US6622240B1 (en) * 1999-06-18 2003-09-16 Intrinsity, Inc. Method and apparatus for pre-branch instruction
SE0003446L (sv) * 2000-09-27 2002-03-28 Ericsson Telefon Ab L M En pipelinemikroprocessor och ett förfarnade relaterande därtill
US6886093B2 (en) * 2001-05-04 2005-04-26 Ip-First, Llc Speculative hybrid branch direction predictor
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
US20040225866A1 (en) * 2003-05-06 2004-11-11 Williamson David James Branch prediction in a data processing system
US20050228977A1 (en) * 2004-04-09 2005-10-13 Sun Microsystems,Inc. Branch prediction mechanism using multiple hash functions
US7181190B2 (en) 2004-04-30 2007-02-20 Microsoft Corporation Method for maintaining wireless network response time while saving wireless adapter power
DE112004002877T5 (de) * 2004-06-02 2007-05-03 Intel Corporation, Santa Clara TLB-korrelierter Verzweigungsvorhersager und Verfahren zu seiner Verwendung
US7752426B2 (en) * 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
TW200739419A (en) * 2006-04-07 2007-10-16 Univ Feng Chia Prediction mechanism of a program backward jump instruction

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010049782A1 (en) 1999-02-18 2001-12-06 Wei C Hsu Hardware/software system for instruction profiling and trace selection using branch history information for branch predictions
US20060277397A1 (en) 2005-06-02 2006-12-07 Sartorius Thomas A Method and apparatus for predicting branch instructions

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Proc. of the 20th annual international symposium on Computer architecture ISCA'93, 1993. ACM, Yeh, T. et al "A comparison of dynamic branch predictors that use two levels of branch history"

Also Published As

Publication number Publication date
JP5209633B2 (ja) 2013-06-12
US20080109644A1 (en) 2008-05-08
ATE496329T1 (de) 2011-02-15
DE602007012131D1 (de) 2011-03-03
WO2008055045A1 (en) 2008-05-08
CN101529378A (zh) 2009-09-09
EP2084602A1 (en) 2009-08-05
US7984279B2 (en) 2011-07-19
CN101529378B (zh) 2013-04-03
EP2084602B1 (en) 2011-01-19
JP2010509680A (ja) 2010-03-25
KR20090089358A (ko) 2009-08-21

Similar Documents

Publication Publication Date Title
KR101081674B1 (ko) 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법
US7278012B2 (en) Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
US6553488B2 (en) Method and apparatus for branch prediction using first and second level branch prediction tables
US6170054B1 (en) Method and apparatus for predicting target addresses for return from subroutine instructions utilizing a return address cache
US7685410B2 (en) Redirect recovery cache that receives branch misprediction redirects and caches instructions to be dispatched in response to the redirects
US6189091B1 (en) Apparatus and method for speculatively updating global history and restoring same on branch misprediction detection
US6550004B1 (en) Hybrid branch predictor with improved selector table update mechanism
KR20070118135A (ko) 인덱스당 2개 이상의 분기 타겟 어드레스를 저장하는 분기타겟 어드레스 캐시
JP5231403B2 (ja) スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ
US20070266228A1 (en) Block-based branch target address cache
JP2009048633A (ja) 分岐先アドレス・キャッシュを備えたプロセッサおよびデータを処理する方法
JPH08249181A (ja) ブランチ予測式データ処理装置および動作方法
EP2220556B1 (en) A method and a system for accelerating procedure return sequences
JP2010501913A (ja) 可変長命令セット内の分岐命令の最後の粒度(granularity)と関連付けられたキャッシュ分岐情報
JP2005165950A (ja) 分岐予測装置および分岐予測方法
US10007524B2 (en) Managing history information for branch prediction
US6421774B1 (en) Static branch predictor using opcode of instruction preceding conditional branch
US10318303B2 (en) Method and apparatus for augmentation and disambiguation of branch history in pipelined branch predictors
EP0912930A1 (en) A functional unit with a pointer for mispredicted branch resolution, and a superscalar microprocessor employing the same

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: 20141030

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161028

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20170929

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee