KR101376900B1 - 이력에 의한 다음 인출 예측기 트레이닝 - Google Patents
이력에 의한 다음 인출 예측기 트레이닝 Download PDFInfo
- Publication number
- KR101376900B1 KR101376900B1 KR1020120109481A KR20120109481A KR101376900B1 KR 101376900 B1 KR101376900 B1 KR 101376900B1 KR 1020120109481 A KR1020120109481 A KR 1020120109481A KR 20120109481 A KR20120109481 A KR 20120109481A KR 101376900 B1 KR101376900 B1 KR 101376900B1
- Authority
- KR
- South Korea
- Prior art keywords
- branch
- predictor
- prediction data
- given
- history
- Prior art date
Links
- 238000012549 training Methods 0.000 title claims abstract description 46
- 238000000034 method Methods 0.000 claims abstract description 24
- 230000004044 response Effects 0.000 claims description 9
- 230000006870 function Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 11
- 238000012986 modification Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 5
- 238000013519 translation Methods 0.000 description 5
- 230000014616 translation Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 3
- 238000012797 qualification Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000005265 energy consumption Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
효율적인 분기 예측을 위한 시스템 및 방법. 프로세서는 두 개의 분기 예측기를 포함한다. 제1 분기 예측기는 신속하게 분기 데이터, 이를테면, 분기 방향과 분기 대상 주소를 생성한다. 제2 분기 예측기는 더 늦은 시간에 더 높은 예측 정확도로 분기 예측 데이터를 생성한다. 제어 로직은, 제1 및 제2 분기 예측 데이터 각각으로부터의 분기 예측 데이터가 일치하는지 여부를 결정할 수 있다. 불일치가 발생하는 경우, 제1 예측기는 제2 분기 예측기에 의해 생성된 분기 예측 데이터로 트레이닝될 수 있다. 저장된 이력의 표시는, 주어진 분기 명령어가 그것의 분기 방향에 관해 자주 교번하는 패턴을 보인다는 것을 나타낼 수 있다. 이러한 동작은, 트레이닝이 변화하는 분기 방향을 따라잡을 수 없으므로 인해, 일관된 분기 예측 오류를 초래할 수 있다. 이러한 조건이 발생하는 것으로 결정되면, 제어 로직은 제1 예측기의 트레이닝을 방지할 수 있다.
Description
본 발명은 마이크로프로세서에 관한 것으로, 특히, 분기 예측 메커니즘(branch prediction mechanisms)에 관한 것이다.
각각의 클록 사이클 동안, 마이크로프로세서는 이상적으로 파이프라인의 각 스테이지를 위한 명령어의 유용한 실행을 생성한다. 그러나, 파이프라인에서의 스톨(stall)은 하나 이상의 특정한 파이프라인 스테이지들동안 수행되는 유용한 작업을 방지할 수 있다. 일부 스톨들은 여러 클록 사이클동안 지속되어 프로세서 성능을 상당히 감소시킬 수 있다. 스톨의 예는 잘못 예측된 분기 명령어(mispredicted branch instruction)이다.
스톨들의 부정적 영향을 감소시키기 위한 기술들은, 파이프라인 스테이지들을 오버랩하는 것, 순서가 뒤바뀐(out-of-order) 명령어들의 실행을 허용하는 것, 및 동시 멀티-스레딩을 지원하는 것을 포함한다. 그러나, 여러 클록 사이클의 스톨은, 모든 스톨 사이클의 은폐(hiding)를 방지할 수 있는 순차적 탈락(in-order retirement)로 인해 프로세서의 성능을 여전히 감소시킨다. 이러한 성능 손실을 방지하기 위해, 멀티-사이클 스톨들의 발생을 감소시키기 위한 기술들이 사용될 수 있다. 그러한 기술의 하나의 예는 분기 예측(branch prediction)이다.
분기 예측 기술들은 분기 명령어(branch instruction)의 조건의 평가를 예측한다. 추가로, 분기 예측 기술들은 분기 대상 주소(branch target address)를 예측할 수 있다. 분기 예측 로직은 높은 정확성을 제공하기 위해 복잡할 수 있다. 따라서, 분기 예측 로직은, 조건 및 분기 대상 주소에 대한 결과들을 생성하기 위한, 평가들 및 산출들을 수행하기 위해, 다수의 클록 사이클을 사용할 수 있다. 그러나, 이러한 다수의 클록 사이클 동안, 명령어들은 명령어 캐시(instruction cache)로부터 인출(fetch)되고 있다. 이러한 인출된 명령어들은, 분기 예측 로직이 다른 명령어들이 인출되어야 한다고 판단하는 경우, 플러시(flush)될 수 있다.
분기 예측 로직은 더 빠른 결과들을 위해 정확도를 트레이드 오프하는 로직을 활용할 수 있다. 그러나, 정확도가 낮으면, 달라지는 분기 패턴을 갖는 소형의 반복 루프 분기는 제대로 평가되지 않게 되는 상황을 초래할 수 있다. 이러한 경우는, 대다수의 시간동안 예측 오류(mispredictions)를 초래하여 대응하는(corresponding) 파이프 라인에서 명령어가 지속적으로 플러시되게 된다.
상술한 바를 고려하면, 효율적인 분기 예측을 위한 효율적인 방법들 및 메커니즘들이 요망된다.
효율적인 분기 예측을 위한 시스템들 및 방법들이 개시된다. 하나의 실시예에서, 프로세서는 2개의 분기 예측기(branch predictor)를 포함한다. 제1 분기 예측기는 분기 예측 데이터, 이를테면, 분기 방향 및 분기 대상 주소를 신속하게 생성할 수 있다. 일부 실시예들에서, 제1 분기 예측기는 단일 사이클 내에 분기 예측 데이터를 생성한다. 제2 분기 예측기는 더 늦은 시간에 더 높은 예측 정확도로 분기 예측 데이터를 생성할 수 있다. 제어 로직은, 제1 및 제2 분기 예측기 각각으로부터의 분기 예측 데이터가 일치하는지 여부를 결정할 수 있다.
제어 로직이 불일치가 발생한 것으로 결정하면, 제어 로직은 제1 예측기를 트레이닝할 수 있다. 트레이닝은, 제2 분기 예측기에 의해 생성된 분기 예측 데이터에 의해 제1 예측기에 저장된 값들을 업데이트하는 것을 포함할 수 있다. 그러나, 불일치가 검출됨에도 불구하고, 제어 로직은 트레이닝을 수행하지 않도록 결정할 수 있다. 제1 예측기 또는 또 다른 위치는 특정한 분기 명령어들에 대한 이력(hysteresis)의 표시를 저장할 수 있다. 이력의 표시는, 주어진 분기 명령어가 그것의 분기 방향에 대하여 자주 교번하는 패턴(frequently alternating pattern)을 보인다는 것을 나타낼 수 있다. 그러한 거동은, 트레이닝이 변화하는 분기 방향을 따라잡을 수 없으므로 인해 분기 예측 오류를 초래할 수 있다. 그러한 조건이 발생하는 것으로 결정되는 경우, 제어 로직은 제1 예측기의 트레이닝을 방지할 수 있다.
이러한 및 다른 실시예들은 다음의 설명 및 도면들을 참조하면 더 잘 인식될 것이다.
도 1은 프로세서의 프론트-엔드의 하나의 실시예의 일반화된 블록도이다.
도 2는 다음 인출 예측기의 하나의 실시예의 일반화된 블록도이다.
도 3은 효율적인 다음 인출 예측을 위한 방법의 하나의 실시예를 도시하는 일반화된 흐름도이다.
도 4는 다음 인출 예측기에 대한 트레이닝 업데이트 로직(400)의 하나의 실시예를 도시하는 일반화된 블록도이다.
도 5는 효율적인 분기 예측 트레이닝을 위한 방법의 하나의 실시예를 도시하는 일반화된 흐름도이다.
도 2는 다음 인출 예측기의 하나의 실시예의 일반화된 블록도이다.
도 3은 효율적인 다음 인출 예측을 위한 방법의 하나의 실시예를 도시하는 일반화된 흐름도이다.
도 4는 다음 인출 예측기에 대한 트레이닝 업데이트 로직(400)의 하나의 실시예를 도시하는 일반화된 블록도이다.
도 5는 효율적인 분기 예측 트레이닝을 위한 방법의 하나의 실시예를 도시하는 일반화된 흐름도이다.
본 발명은 다양한 수정들 및 대안적인 형태들을 허용하지만, 그의 특정 실시예들은 도면들에 예로서 도시되고 여기에 상세하게 설명될 것이다. 그러나, 도면들 및 그에 대한 상세한 설명은 개시된 특정한 형태로 본 발명을 제한하기 위해 의도된 것이 아니고, 반대로, 첨부된 청구항들에 의해 정의된 바와 같은 본 발명의 사상 및 범위 내에 있는 모든 수정들, 등가물들 및 대안들을 커버하기 위한 의도라는 것이 이해되어야 한다. 이 출원 전체에 걸쳐 사용된 바와 같은, 단어 "할 수 있다(may)"는 필수적 의미(즉, 해야한다(must)를 의미)하기 보다는 오히려, 허용적 의미(즉, 할 가능성을 갖는다(having the potential to)는 의미)로 사용된다. 마찬가지로, 단어 "포함한다(include, includes)" 및 "포함하는(including)"은 포함한다는 것을 의미하지만, 이로 제한되지는 않는다.
다양한 유닛들, 회로들, 또는 다른 구성요소들은 작업(task) 또는 작업들을 수행"하도록 구성된(configured to)"으로 설명될 수 있다. 이러한 맥락에서, "하도록 구성된"은 일반적으로 동작 동안 작업 또는 작업들을 수행"하는 회로를 갖는(having circuitry that)"다는 것을 의미하는 구조에 대한 폭넓은 설명(broad recitation)이다. 예를 들어, 유닛/회로/구성요소는 유닛/회로/구성요소가 현재 온(on)이 아닌 경우에도 작업을 수행하도록 구성될 수 있다. 일반적으로, "하도록 구성된"에 대응하는하는 구조를 형성하는 회로는 하드웨어 회로들을 포함할 수 있다. 마찬가지로, 다양한 유닛들/회로들/구성요소들은, 설명에 있어서의 편의를 위해, 작업 또는 작업들을 수행하는 것으로 기재될 수 있다. 그러한 기재는 문구 "하도록 구성된"을 포함하는 것으로 해석되어야 한다. 하나 이상의 작업을 수행하도록 구성되는 유닛/회로/구성요소의 열거는 그 유닛/회로/구성요소에 대해 미국 특허법 35 U.S.C. §112 6조 해석을 인보크하지 않도록 분명히 의도된다.
다음의 설명에서, 본 발명의 철저한 이해를 제공하기 위해, 수많은 특정 상세들이 명시되어 있다. 그러나, 당업자는, 본 발명이 이러한 특정 상세들 없이 실행될 수 있다는 것을 인식해야 한다. 일부 예에서, 공지된 회로들, 구조들, 및 기술들은 본 발명을 왜곡시키지 않기 위해 상세히 도시되지 않았다.
도 1을 참조하면, 프로세서(100)의 프론트-엔드의 하나의 실시예를 도시하는 일반화된 블록도가 도시된다. 파이프라인(100)은 명령어들의 처리를 위해 적어도 하나의 멀티-스테이지 파이프라인을 활용할 수 있다. 명령어-캐시(i-캐시)(120)는 소프트웨어 애플리케이션을 위한 명령어들을 저장할 수 있다. 주소 선택기(110)에 의해 운반된 프로그램 카운터(PC) 주소에 의해 표시되는 하나 이상의 명령어들은 i-캐시(120)로부터 인출(fetch)될 수 있다. 다수의 명령어들은, i-캐시 미스들(misses)이 존재하지 않는 경우, 클록 사이클마다 i-캐시(120)로부터 인출될 수 있다.
프로세서(100)는, 하나 이상의 가상 주소 공간이 실행 소프트웨어에 보이게 되도록 허용하는 주소 변환 체계(address translation scheme)를 구현할 수 있다. 가상 주소 공간 내에서의 메모리 액세스들은 프로세서(100)에서 사용가능한 실제 물리적 메모리에 대응하는 물리적 주소 공간으로 변환될 수 있다. 주소 변환을 채용하는 프로세서(100)의 실시예들에서, i-캐시(120)는 가상 주소 비트들보다는 물리적 주소 비트들을 사용하여 부분적으로 또는 완전히 어드레스될 수 있다. 예를 들어, i-캐시(120)는 캐시 인덱싱(cache indexing)을 위한 가상 주소 비트들 및 캐시 태그들을 위한 물리적 주소 비트들을 사용할 수 있다.
캐시 액세스를 수행할 때 전체 메모리 변환을 수행하는 비용을 피하기 위해, 프로세서(100)는, 설명을 용이하게 하기 위해 도시되지 않은, 변환 색인 버퍼(translation lookaside buffer; TLB)에, 최근 및/또는 자주 사용된 가상-물리적 주소 변환들(virtual-to-physical address translations)의 세트를 저장할 수 있다.
증분기(incrementer; 112)는 다음 순차적 PC 주소를 생성할 수 있다. 하나의 실시예에서, 다음 인출 예측기(next fetch predictor; 130) 및 분기 예측기(branch predictor; 150) 각각은 주소 선택기(110)에서 명령어들의 인출을 변경할 수 있다. 예를 들어, 무조건 분기 연산코드(unconditional branch opcode)와 연관된 절대 주소 값은 주소 선택기(110)로 전송될 수 있다. 이 주소 값은 또한 분기 대상 주소(branch target address) 또는 다음 인출 프로그램 카운터(PC) 주소로 지칭될 수 있다. 다음 인출 예측기(130) 및 분기 예측기(150) 각각은 예측된 분기 대상 주소들을 주소 선택기(110)로 전송할 수 있다.
다음 인출 예측기(130)는 주어진 분기 명령어에 대한 빠른 예측에 기초하여 비-순차적 PC 주소를 생성할 수 있다. 하나의 실시예에서, 다음 인출 예측기(130)는 다음 인출 테이블(132) 및 다음 인출 제어 로직(134)을 포함한다. 하나의 실시예에서, 다음 인출 제어 로직(134)은, 해시 함수(hash function)에서, i-캐시(120)로부터 명령어들을 인출하는데 사용된 PC 주소의 적어도 일부를, 그 자체의 다른 부분 또는 다른 값들과 결합시킨다(combine). 이 특정한 해시 함수는 비교적 빠른 배타적 논리합(exclusive-or; XOR) 조합(combinatorial)(또는 결합(combinational)) 함수일 수 있다. 이 해시 함수의 출력은 다음 인출 테이블(132)을 인덱싱하는데 사용될 수 있다. 다음 인출 테이블(132) 내의 히트(hit)는 i-캐시(120)로부터 명령어들을 인출하는데 사용할 다음 PC 주소를 제공할 수 있다. 하나의 실시예에서, 다음 인출 예측기는 단일 사이클 예측기이다.
분기 예측기(150)는 또한 i-캐시(120)로부터 명령어들을 인출하는데 사용된 PC 주소의 적어도 일부를 수신할 수 있다. 분기 예측기(150)는, 또한, 별도의 해시 함수에서, 수신된 PC 주소의 적어도 일부를 그 자체의 또 다른 부분 또는 다른 값들, 이를테면, 히스토리 정보와 결합할 수 있다. 다양한 해시 함수들은, 분기 예측 데이터를 제공하는데 사용된 하나 이상의 패턴 히스토리 테이블들(PHTs), 분기 대상 버퍼들(BTBs), 및/또는 다른 테이블들에 대한 인덱스를 결정하기 위해 수행될 수 있다. 분기 예측 데이터는 분기 방향 및 분기 대상 주소를 포함할 수 있다. 분기 예측기(150)는, 분기 명령어의 조건의 결과(outcome)의 결정 및 분기 대상 주소의 결정 둘 다를 위해 다수의 클록 사이클을 활용할 수 있다.
분기 예측기(150)는 다음 인출 예측기(130)보다 더 높은 예측 정확도를 갖는 분기 예측 데이터를 제공할 수 있다. 그러나, 분기 예측기(150)는 보다 정확한 분기 예측 데이터를 생성하기 위해 다수의 사이클을 활용한다. 따라서, 다음 인출 예측기(130)는 신속한, 초기 분기 예측을 제공하는데 사용될 수 있다. 그 다음에, 분기 예측기(150)는 더 늦은 시간에(at later time) 초기 분기 예측을 확인할 수 있다.
다음 인출 예측기(130)에 의해 생성된 예측 데이터는 프로세서를 위해 파이프라인(100)을 따라 저장 및 스테이지화(stage)될 수 있다. 스테이지화된 예측 데이터는 분기 예측기(150)에 의해 더 늦은(later) 파이프 스테이지에서 생성된 예측 데이터에 비교될 수 있다. 다음 인출 예측기(130)가, 더 늦은 시간에 분기 예측기(150)에 의해 생성된 예측 데이터와 일치하지 않는 분기 예측 데이터를 생성하는 경우, 다음 인출 예측기(130)는 분기 예측기(150)에 의해 생성된 예측 데이터에 의해 업데이트되거나 트레이닝될 수 있다. 여기에 사용된 바와 같이, 다음 인출 예측기(130)를 트레이닝하는 것은, 분기 예측기(150)에 의해 생성된 분기 예측 데이터로, 다음 인출 예측기(130)에 저장된 파라미터들을 업데이트 또는 기록하는 것을 포함할 수 있다. 자주 교번하는 패턴(frequently alternating pattern)을 갖는 분기 명령어는 많은 수의 분기 예측 오류(branch mispredictions)를 야기할 수 있다. 많은 수의 분기 예측 오류는, 분기 예측기(150)에 의한 다음 인출 예측기(130)의 트레이닝이 자주 교번하는 패턴을 따라잡을 수 없음으로 인한 결과일 수 있다.
하나의 실시예에서, 다음 인출 테이블(132)은, 대응하는 분기 명령어가 이력(hysteresis)을 나타내었는지 여부에 대한 표시를 저장할 수 있다. 이력은, 대응하는 분기 명령어가 그것의 분기 방향에 대해 자주 교번하는 패턴을 갖는다는 것을 나타낼 수 있다. 예를 들어, 대응하는 분기 명령어는 취해진(taken)과 취해지지 않은(not-taken) 사이에서 자주 교체될 수 있다. 일부 실시예들에서, 다음 인출 테이블(132)의 각각의 엔트리는 이력 비트를 저장할 수 있다. 하나의 예에서, 설정 이력 비트는, 대응하는 분기 명령어가 자주 교번하는 패턴을 나타낼 수 있다는 것을 표시할 수 있다. 재설정 이력 비트는, 대응하는 분기 명령어가 자주 교번하는 패턴을 나타낼 수 없다는 것을 표시할 수 있다.
동일한 분기 명령어에 대해, 다음 인출 예측기(130)에 의해 생성된 분기 예측 데이터와 분기 예측기(150)에 의해 생성된 분기 예측 데이터 사이에서 불일치가 발견될 때, 제어 로직은 다음 인출 예측기(130)를 트레이닝할지 여부를 결정할 수 있다. 이 제어 로직은 분기 명령어에 대한 이력의 대응하는 표시를 활용할 수 있다. 이력의 표시는 다음 인출 예측기(130)의 후속 트레이닝을 방지할 수 있다. 분기 예측을 개선하기 위해 이력의 표시를 활용하는 방법들 및 메커니즘들의 추가 설명이 바로 제공된다. 우선, 파이프라인(100)의 추가 설명이 제공된다.
디코드 유닛(140)은 다수의 인출된 명령어들의 연산코드들(opcodes)을 디코딩할 수 있다. 대안적으로, 명령어들은 마이크로-명령어들(micro-instructions) 또는 마이크로-연산(micro-ops)으로 나뉠 수 있다. 여기에 사용된 바와 같이, "명령어들" 및 "마이크로-연산"이라는 용어들은, 본 발명이 양쪽의 구현을 활용하는 아키텍처와 함께 사용될 수 있으므로, 교체 사용이 가능하다(interchangeable). 디코드 유닛(140)은, 추가 디코드된 정보를 갖는 명령어들을, 더 늦은 파이프 스테이지들에서 명령어 처리를 위해 프로세서(100) 내의 다른 구성요소들로 전송할 수 있다. 예를 들어, 디코드 유닛(140)은 디스패치 큐(dispatch queue) 내에 엔트리들을 할당할 수 있다. 레지스터 이름 변경(renaming), 명령어 스케줄링, 산술 연산들 실행 및/또는 메모리 액세스 수행과, 순차적 탈락(in-order retiring)은, 이후의 명령어 처리 단계들의 일부 예들이다. 명령어-처리 유닛(160)은 일반적으로 이러한 단계들 중 하나를 수행할 수 있다.
이제, 도 2를 참조하면, 다음 인출 예측기(200)의 하나의 실시예의 일반화된 블록도가 도시된다. 도시된 바와 같이, 다음 인출 예측기(200)는 현재 인출 PC(202)를 수신한다. 수신된 현재 인출 PC(202)는, 현재 분기 명령어를 식별하는, i-캐시(120)로부터 명령어들을 인출하는데 사용된 주소의 충분한 수의 비트들을 포함할 수 있다. 현재 인출 PC(202)는 주소 선택기(110)로부터의 것일 수 있다. 현재 인출 PC(202)와 함께 인출된 다수의 명령어들 내에서 두 개 이상의 분기 명령어들 사이의 차이를 분명히 보여주고(disambiguate) 에일리어싱(aliasing)을 피하기 위해 하나 이상의 방법들이 사용될 수 있다.
하나의 실시예에서, 수신된 현재 인출 PC(202)의 비트들의 해싱(hashing)은 해시 함수(220)에 의해 자체적으로 수행될 수 있다. 하나의 예에서, 현재 인출 PC(202)의 오프셋 부분은 해시 함수(220) 내의 배타적 논리합(XOR) 조합 함수에 의해 현재 인출 PC(202)의 상위 비트들과 결합될 수 있다. 다른 예들에서, 오프셋 부분은 현재 인출 PC(202)의 상위 비트들 각각 이외의 비트들과 결합될 수 있다. 또한, 비-연속 비트들 및 다른 조합 로직이 사용될 수 있다. 다른 값들(도시되지 않음), 이를테면, 히스토리 정보, 카운트 값 등이 사용될 수 있다. 많은 이러한 대안들이 가능하고 고려된다. 그러나, 다양한 실시예들에서, 단일 클록 사이클 이후에, 다음 인출 예측기(200)에 의한 분기 예측 데이터의 생성이 예상될 수 있다. 따라서, 해시 함수(220)의 기능은 신속하고 효율적인 해싱 산출들(hashing calculations)을 지향할 수 있다.
다음 인출 예측기(200)는 다음 인출 테이블(240)을 포함할 수 있다. 다음 인출 테이블(240)은 적어도 해시 함수(220)의 출력에 의해 인덱싱될 수 있다. 다음 인출 테이블(240)은 분기 명령어들에 대응하는 정보를 저장할 수 있고, 분기 예측 데이터를 생성하는데 사용될 수 있다. 분기 예측 데이터는 분기 방향 및 분기 대상 주소; 이를테면, 예측된 다음 인출 PC 주소를 포함할 수 있다. 다음 인출 테이블(240)은 조건 및 무조건 분기 명령어들에 대한 정보를 저장할 수 있다. 또한, 다음 인출 테이블(240)은 직접 및 간접 분기 명령어들에 대한 정보를 저장할 수 있다.
조건 분기 명령어는 명령어 스트림에서 취할(take) 경로의 결정을 수행한다. 분기 명령어가 조건이 만족되지 않는다고 결정하는 경우, 분기 명령어는 취해지지 않는(non-taken) 것으로 간주되고, 프로그램 순서에서 다음 순차적인 명령어가 실행된다. 그러나, 분기 명령어가 조건이 만족된다고 결정하는 경우, 분기 명령어는 취해진(taken) 것으로 간주된다. 취해진 분기 명령어에 대해, 프로그램 순서에서 다음 순차적인 명령어가 아니라, 그보다는 산출된 분기 대상 주소에 위치하는 명령어가 실행된다. 무조건 분기 명령어는 항상 취해진 조건 분기 명령어(taken conditional branch instruction)로 간주된다. 테스트하기 위한 조건은 존재하지 않고, 명령어들의 실행은 순차적인 순서보다는 상이한 시퀀스로 발생한다.
직접 분기 명령어에 대해, 분기 대상 주소는, 프로그램 카운터(PC) 값에 관하여, 분기 명령어 자체에 저장될 수 있는, 오프셋에 의해 지정될 수 있다. 간접 분기 명령어에 대해, 분기 대상 주소는 레지스터 또는 메모리 내의 값에 의해 지정될 수 있고, 여기서 레지스터 또는 메모리 위치는 분기 명령어에서 식별될 수 있다. 또한, 분기 대상 주소를 지정하는 레지스터 또는 메모리 위치는 상이한 값들로 로드될 수 있다.
하나의 실시예에서, 다음 인출 테이블(240)은 다수의 엔트리(242a-242g)를 갖는다. 엔트리들(242a-242g) 각각은 여러 필드들, 이를테면, 적어도 필드들(250-256)을 포함할 수 있다. 하나의 실시예에서, 필드(250)는 상태 정보, 이를테면, 적어도 유효 비트를 저장한다. 필드(252)는 해시 출력 식별자(ID)를 저장한다. 이 식별자 값은 더 이른 시간에 해시 함수(220)에 의해 생성된 값일 수 있다. 하나의 실시예에서, 필드(252)는 해시되는 인출 PC 주소의 추가 비트들을 저장할 수 있다. 다른 실시예들에서, 해시 출력 ID는 다음 인출 테이블(240)에 신속하고 분명한(distinct) 룩업을 제공하기에 충분하다.
테이블(240) 내의 필드(254)는 대응하는 분기 명령어에 대해 예측된 다음 인출 PC 주소 값을 저장할 수 있다. 필드(256)는, 대응하는 분기 명령어가 이력을 갖는 분기 동작(behavior)을 보여주는지(demonstrate) 여부에 대한 표시를 저장할 수 있다. 예를 들어, 대응하는 분기 명령어는 그것의 분기 방향에 대해 자주 교번하는 패턴을 가질 수 있다. 극단적인 경우에, 대응하는 분기 명령어는, 분기 명령어의 각각의 실행 동안, 취해진(T) 방향과 취해지지 않은 방향(NT) 사이에서 교번할 수 있다. 패턴은 T, NT, T, NT 등처럼 보일 수 있다. 이러한 패턴은 다음 인출 예측기(200)를 트레이닝하는 동안 검출하기 어려울 수 있다. 다음 인출 예측기(200)는 대응하는 분기 명령어의 각각의 발생 후에 재트레이닝(retrain)될 수 있지만, 재트레이닝은 다음 인출 예측기(200)가 분기 명령어를 다시 잘못 예측하는 것을 초래할 수 있다. 따라서, 필드(256)에 저장된 이력의 표시는, 대응하는 분기 명령어의 적어도 하나의 발생에 대해 재트레이닝을 중단시키는데 사용될 수 있다. 하나의 실시예에서, 필드(256)는 이력을 나타내는 단일 비트를 저장한다.
적어도 해시 함수(220)의 출력은 다음 인출 테이블(240)을 인덱싱하는데 사용될 수 있다. 해시 함수(220)의 출력의 비교는 엔트리들(242a-242g)의 필드(252)에 저장된 해시 출력 ID들과 함께 수행될 수 있다. 일치가 발견되는 경우, 필드들(254 및 256)에 저장된 이력의 표시 및 대응하는 다음 인출 PC는 다음 인출 테이블(240)로부터 판독될 수 있다. 대응하는 분기 명령어를 식별하는데 사용될 수 있는 히트 상태 및 해시 출력 ID는 필드들(254 및 256)에 저장된 데이터와 그룹화될 수 있다. 이 데이터 모두는 스테이지화되고 이후의 파이프 스테이지들로 전송되어, 분기 예측기(150)에서 제어 로직에 의해 사용될 수 있다. 분기 예측기(150)는, 수신된 데이터가 더 늦은 시간에 생성하는 분기 예측 데이터와 일치(agree)하는지 여부를 확인할 수 있다. 분기 예측기(150)에 데이터를 전송하는 것 외에, 다음 인출 테이블(240)로부터 판독된 다음 인출 PC가 주소 선택기(110)로 전송될 수 있다.
다음 인출 예측기(200)는 또한 분기 예측기(150)로부터 정보를 수신할 수 있다. 이 정보는, 분기 예측기(150)가, 다음 분기 예측 데이터(200)로부터의 분기 예측 데이터가 분기 예측기(150)에 의해 생성된 분기 예측 데이터와 일치하는지 여부를 확인한 후에 수신될 수 있다. 다음 인출 예측기(200)는, 주어진 분기 명령어에 대한 트레인 제어 신호(204), 해시 출력 ID(206), 다음 인출 PC 주소(208), 및 이력의 표시(210)를 수신할 수 있다. 분기 예측기로부터 수신된 이 데이터는 업데이트 로직(230)으로 전송될 수 있다. 업데이트 로직은, 언제 다음 인출 테이블(240)에 데이터를 기록할지 및 엔트리들(242a-242g) 중 어느 엔트리를 수정할지 결정할 수 있다.
트레인 제어 신호(204)는 다음 인출 테이블(240) 내에서 특정한 엔트리를 수정하기 위한 분기 예측기(150)로부터의 표시일 수 있다. 해시 출력 ID(206)는 다음 인출 테이블(240)로 인덱싱하는데 및 엔트리들(242a-242g) 중 주어진 엔트리를 식별하는데 사용될 수 있다. 다음 인출 PC(208)는 식별된 엔트리의 필드(254)에 저장된 PC 값을 덮어쓰는데(overwrite) 사용될 수 있다. 마찬가지로, 수신된 이력의 표시(210)는 식별된 엔트리의 필드(256)에 저장된 표시를 덮어쓰는데 사용될 수 있다.
트레인 제어 신호(204) 또는 다음 인출 예측기(200)로 전송된 다른 표시자들은 식별된 엔트리에 덮어쓸 필드들을 식별할 수 있다. 일부 경우에는, 다음 인출 PC와 이력의 표시 모두 업데이트될 수 있다. 다른 경우에는, 이들 두 개의 값 중 하나는 업데이트되지만 두 개의 값 중 다른 하나는 수정되지 않는다. 어떤 경우에는, 다음 인출 예측기(200) 및 분기 예측기(150)에 의해 생성된 분기 예측 데이터 사이의 불일치가 결정되지만, 다음 인출 예측기(200)의 트레이닝은 발생하지 않는다. 이러한 경우들에 대해, 트레인 신호(204)는, 대응하는 분기 명령어에 대해 다음 인출 테이블(240)에서 수정들이 수행되지 않는다는 것을 나타낸다.
이제, 도 3을 참조하면, 효율적인 다음 인출 예측을 위한 방법(300)의 하나이 실시예의 일반화된 흐름도가 도시된다. 논의를 위해, 이 실시예, 및 나중에 설명된 방법들의 후속 실시예들에서의 단계들은 순차적인 순서로 도시된다. 그러나, 다른 실시예들에서, 일부 단계들은 도시된 것과는 다른 순서로 발생할 수 있고, 일부 단계들은 동시에 수행될 수 있고, 일부 단계들은 다른 단계들과 결합될 수 있고, 일부 단계들은 빠질 수 있다.
블록 302에서, 주어진 프로그램 카운터(PC)가 인출 명령어들로 전송된다. 블록 304에서, 주어진 PC의 하나 이상의 비트는 해싱 함수를 사용하여 다른 제어 값들과 결합된다. 이전에 설명된 바와 같이, 다른 제어 값들은 주어진 PC 내에 있는 다른 비트들일 수 있다. 블록 306에서, 적어도 해싱 함수의 출력은 다음 인출 테이블을 인덱싱하는데 사용된다. 다음 인출 테이블에서 미스(miss)가 발생하면(조건부 블록 308), 그 후 블록 310에서, 명령어들을 인출하기 위해 다음 순차적 PC를 사용하기 위한 표시가 전송될 수 있다. 표시는 다음 인출 예측기로부터 주소 선택기로 전송될 수 있다.
다음 인출 테이블에서 히트가 발생하면(조건부 블록 308), 그 후 블록 312에서, 히트에 대응하는 엔트리에 저장된 다음 인출 PC가 명령어들을 인출하는데 사용하기 위해 전송될 수 있다. 다음 인출 PC는 주소 선택기로 전송될 수 있다. 블록 314에서, 분기 예측 데이터는, 분기 예측 데이터를 확인하기 위해, 제2 분기 예측기, 이를테면, 분기 예측기(150)로 전송될 수 있다. 분기 예측 데이터는 적어도 다음 인출 PC, 이력의 표시, 및 히트/미스(hit/miss) 상태를 포함할 수 있다. 히트/미스 상태는 예측된 취해진/취해지지 않은(taken/not-taken) 분기 방향을 표시할 수 있다.
이제, 도 4를 참조하면, 다음 인출 예측기에 대한 트레이닝 업데이트 로직(400)의 하나의 실시예를 도시하는 일반화된 블록도가 도시된다. 하나의 실시예에서, 트레이닝 업데이트 로직(400)은, 다음 인출 예측기를 확인하는데 사용된 다음 인출 예측기 및 분기 예측기 각각으로부터의 분기 예측 데이터 사이의 불일치를 결정하는 것에 응답하여 출력을 생성하는데 활용된다. 예를 들어, 이러한 두 개의 예측기 각각에 의해 생성된 다음 인출 PC 주소는 동일한 것이 아닐 수 있다. 통상적으로, 다음 인출 예측기의 트레이닝이 뒤따를 것이다. 그러나, 그의 방향과 같은, 대응하는 분기 명령어의 자주 교번하는 패턴으로 인한 일관된 예측 오류들을 방지하기 위해, 트레이닝 업데이트 로직(400)은 트레이닝이 스킵될 수 있는지 여부를 결정할 수 있다. 일부 실시예들에서, 불일치 자격 취득(mismatch qualification)은, 불일치가 발생하지 않을 때 에너지 소비를 절약하기 위해, 트레이닝 업데이트 로직(400) 내에서 로직 업프론트(logic upfront)를 가능하게 할 수 있다. 다른 실시예들에서, 불일치 자격 취득은, 트레이닝 업데이트 로직(400)의 결과들에서 사용되어 결과들이 사용될 것인지 여부를 결정할 수 있다.
하나의 실시예에서, 업데이트 로직(420)은 보다 정확한 분기 예측기로부터 예측된 분기 방향, 이를테면 취해진 상태 신호(410)를 수신한다. 또한, 업데이트 로직(420)은 빠른 분기 예측기로부터 예측된 분기 방향 및 이력의 표시를 수신할 수 있다. 하나의 실시예에서, 빠른 분기 예측기는 다음 인출 테이블을 갖는 단일-사이클 다음 인출 예측기일 수 있다. 예측된 분기 방향은 테이블 히트 상태에 의해 표시될 수 있다. 이력의 표시는 (예를 들어) 다음 인출 테이블의 각각의 엔트리에 저장된 단일 비트일 수 있다. 따라서, 업데이트 로직(420)은 다음 인출 예측기로부터 히트 상태(412) 및 단일 이력 비트(414)를 수신한다. 빠른 분기 예측기 및 결과로 얻은 분기 예측 데이터에 대한 다른 실시예들이 가능하고 고려된다.
트레이닝이 발생할 수 있는지 여부를 결정하기 위해, 업데이트 로직(420) 내의 제어 로직 및 알고리즘들은 여러 다른 방식으로 구현될 수 있다. 일부 구현 예들은, 조합 로직 게이트들, 상태 다이어그램, 필드-프로그램가능 게이트 어레이(FPGA), 및 하드웨어 기술 언어 또는 하이-레벨 C 프로그래밍 언어와 같은 프로그래밍 언어들에서의 프로그램 코드를 포함할 수 있다. 프로그램 코드는 비-일시적 저장 매체, 이를테면, 하드 디스크, 마더 보드 상의 컴퓨터 시스템 메모리, 플로피 디스크 또는 다른 이동식 메모리 저장소 등에 저장될 수 있다. 프로그램 코드의 명령어들은 프로세서에 로드되고 프로세서 내에 있는 하드웨어에서 실행되어 프로그램 코드에 의해 기술된 알고리즘을 수행할 수 있다. 하나의 실시예에서, 업데이트 로직(420)은, 빠른 분기 예측기, 이를테면, 다음 인출 예측기에 의해 사용된 다음 인출 PC 주소가 보다 정확한 분기 예측기에 의해 생성된 다음 인출 PC 주소에 의해 덮어 쓰이는지 여부를 결정하기 위해, 두 개의 분기 예측기로부터 수신된 값들을 사용할 수 있다.
업데이트 로직(420)에서 로우(442)는, 로우(440)와 컬럼들(424-430)에 도시된 조건들이 참(true)으로 평가되는지 여부에 기초하여 다음 인출 PC 주소에 대한 특정한 업데이트 시나리오들을 도시한다. 하나의 예에서, 로우(440) 및 컬럼(428)에 도시된 바와 같이, 다음 인출 예측기가 재설정 이력 비트(NOT hysteresis)를 제공하고 - 재설정 비트는 대응하는 분기 명령어에 대해 검출된 이력이 존재하지 않음을 나타낼 수 있음 -, 확인(verifying) 분기 예측기가 취해진 분기 방향(taken branch direction)을 생성하는 경우, 트레이닝이 발생한다. 트레이닝은, 다음 인출 예측기에 저장된 대응하는 분기 명령어에 대한 다음 인출 PC 주소를, 확인 분기 예측기에 의해 생성된 다음 인출 PC 주소로 덮어쓰는 단계를 포함할 수 있다. 다시 도 2를 참조하면, 신호들(204-210)은 로부터 다음 인출 예측기(200)로 전송될 수 있다. 신호들(204-210) 내의 정보는 엔트리들(242a-242g) 중 특정한 엔트리를 식별하고 적어도 다음 인출 PC 주소를 저장하는 필드(254)를 덮어쓰는데 사용될 수 있다.
도 4의 업데이트 로직(420)의 로우(440) 및 컬럼(428)에 표시된 평가된 조건에 계속해서, 다음 인출 예측기에 저장된 대응하는 분기 명령어에 대한 이력 비트가 설정될 수 있다. 이력 비트를 설정하는 것은 다음 인출 예측기에 저장된 다음 인출 PC 주소를 덮어쓰는 것에 추가적인 것일 수 있다. 도 2를 다시 참조하면, 신호들(204-210) 내의 정보는, 더 이전에 설명된 바와 같이, 엔트리들(242a-242g) 중 특정한 엔트리를 식별하고, 적어도 대응하는 분기 명령어에 대한 이력의 표시를 저장하는 필드(256)를 덮어쓰는데 사용될 수 있다. 도 4를 참조하면, 업데이트 로직(420) 내의 로우(444)는, 컬럼들(424-430)에 도시된 조건들이 참(true)인 것으로 평가되는지 여부에 기초하여 대응하는 분기 명령어에 대한 이력을 표시하기 위한 특정한 업데이트 시나리오들을 도시한다.
다시, 로우(440)과 컬럼들(424-430)의 각각에 표시된 조건들은 다음 인출 예측기와 (보다 정확한) 확인 분기 예측기 사이의 분기 예측 데이터의 불일치로 자격이 취득(qualify)될 수 있다. 이 자격 취득(qualification)은 업데이트 로직(420) 내의 알고리즘들을 활용하기 전에 발생할 수 있다. 대안적으로, 이 자격 취득은, 업데이트 로직(420) 내의 알고리즘들을 사용하여 결과들이 발견된 후에 발생할 수 있다. 또 다른 예에서, 로우(440) 및 컬럼(430)에 도시된 바와 같이, 다음 인출 예측기가 다음 인출 테이블 내의 히트 상태, 및 재설정 이력 비트 - 재설정 비트는 대응하는 분기 명령어에 대해 검출된 이력이 존재하지 않는다는 것을 나타냄 - 를 제공한다면, 트레이닝이 발생한다. 이 경우에 트레이닝은, 다음 인출 예측기에 저장된 대응하는 분기 명령어에 대한 다음 인출 PC 주소를 무효화하는 것(invalidating)을 포함할 수 있다. 이러한 특정한 다음 인출 PC 주소를 무효화하는 것은 다음 인출 테이블(240) 내의 엔트리들(242a-242g) 중 대응하는 엔트리를 무효화함으로써 달성될 수 있다. 추가로, 대응하는 이력 비트는 식별된 엔트리 내에 설정될 수 있다.
업데이트 로직(420)에서 로우(440)과 컬럼들(424 및 426)에 의해 식별된 경우들 각각에 대해, 트레이닝이 스킵될 수 있다. 이러한 경우들에는 다음 인출 예측기와 (보다 정확한) 확인 분기 예측기 사이의 분기 예측 데이터에서 검출된 불일치에도 불구하고 트레이닝이 스킵될 수 있다. 스킵된 트레이닝은 그것의 분기 방향에서 자주 교번하는 패턴을 나타내는 특정한 분기 명령어에 대한 분기 예측 정확도를 증가시킬 수 있다. 하나의 예에서, i-캐시(120)는 클록 사이클 당 4개의 인출된 명령어들을 제공하고, (보다 정확한) 확인 분기 예측기는 분기 예측 데이터를 생성하기 위해 5번의 클록 사이클을 활용한다. 다음 인출 예측기와 보다 정확한 분기 예측기 사이에 불일치가 검출되는 시간까지, 20개의 명령어들이 플러시될 자격을 취득한다. 이러한 20개의 명령어들을 처리하는데 에너지가 소비되고, 작업의 결과는 사용되지 않는다. 따라서, 트레이닝이 특정 조건들에 대해 스킵될 수 있다고 결정하는 것은, 에너지 소비를 줄이고 파이프라인 전체를 유용한 작업으로 유지할 수 있다.
로우(440)와 컬럼(424)은, 다음 인출 예측기가 설정 이력 비트를 제공하는 경우를 도시하는데, 설정 비트는 대응하는 분기 명령어에 대한 검출된 이력을 나타낼 수 있다. 컬럼(424)에 도시된 경우에는, 다음 인출 예측기가 다음 인출 테이블 내에 히트 상태를 제공하거나, 또는 (보다 정확한) 확인 분기 예측기가 예측된 취해진 분기 방향을 제공한다. 로우(442)는, 이 경우에 대해, 다음 인출 예측기에 저장된 다음 인출 PC 주소가 유지될 수 있다는 것을 도시한다. 다음 인출 예측기 내의 대응하는 분기 명령어에 대해 어떠한 수정 또는 트레이닝도 발생하지 않는다. 로우(444)는 이 경우에 대해 대응하는 이력 비트가 재설정될 수 있다는 것을 도시하고, 재설정 값은 대응하는 분기 명령어에 대해 검출된 이력이 존재하지 않는다는 것을 나타낼 수 있다.
로우(440) 및 컬럼(426)은, 다음 인출 예측기가 설정 이력 비트를 제공하는 경우를 도시하고, 설정 비트는 대응하는 분기 명령어에 대해 검출된 이력을 나타낼 수 있다. 컬럼(426)에 표시된 경우에는, 다음 인출 예측기는 다음 인출 테이블 내에 미스 상태(miss status)를 제공한다. 또한, (보다 정확한) 확인 분기 예측기는 예측된 취해지지 분기 방향을 제공한다. 로우(442)는 이 경우에 대해 다음 인출 예측기에 저장된 다음 인출 PC 주소가 유지될 수 있다는 것을 도시한다. 다음 인출 예측기 내의 대응하는 분기 명령어에 대해 어떠한 수정 또는 트레이닝도 발생하지 않는다. 로우(444)는 이 경우에 대해 대응하는 이력 비트가 또한 유지될 수 있다는 것을 도시한다.
이제, 도 5를 참조하면, 효율적인 분기 예측 트레이닝을 위한 방법(500)의 하나의 실시예의 일반화된 흐름도가 도시된다. 논의를 위해, 이 실시예 및 나중에 설명된 방법들의 후속 실시예들에서의 단계들은 순차적 순서로 표시된다. 그러나, 다른 실시예들에서, 일부 단계들은 표시된 것과는 다른 순서로 발생할 수 있고, 일부 단계들은 동시에 수행될 수 있고, 일부 단계들은 다른 단계들과 결합될 수 있고, 일부 단계들은 빠질 수 있다.
블록(502)에서, 주어진 분기 명령어에 대해, 제1 분기 예측기에 의해 제1 예측 데이터가 생성된다. 블록(504)에서, 동일한 주어진 분기 명령어에 대해, 제1 예측기보다 더 높은 정확도를 갖는 제2 예측기에 의해 더 늦은 시간에 제2 예측 데이터가 생성된다. 블록(506)에서, 제1 및 제2 예측 데이터가 비교된다. 제1 및 제2 분기 예측 데이터 사이에 불일치가 발생하는 것으로 결정되지 않는 경우(조건부 블록(508)), 그 다음에 블록(510)에서, 제1 예측기에 대해 수행될 트레이닝이 존재하지 않는다는 표시가 생성될 수 있다. 2개의 분기 예측기는 주어진 분기 명령어에 대해 동일한 결과들을 생성한다.
제1 및 제2 분기 예측 데이터 사이에 불일치가 발생하는 것으로 결정되는 경우(조건부 블록(508)), 그 다음에 블록(512)에서, 제1 및 제2 예측 데이터 및 주어진 분기 명령어에 대응하는 이력의 표시에 기초하여, 제1 예측기를 트레이닝하기 위한 조건이 존재하는지 여부에 대한 결정이 행해진다. 도 4를 다시 간단히 참조하면, 이러한 조건들은 업데이트 로직(420)의 로우(440)과 컬럼들(424-430)에 의해 지정될 수 있다. 제1 예측기를 트레이닝하기 위한 적어도 하나의 조건이 존재하는 것으로 결정되는 경우(조건부 블록(514)), 그 다음 블록(516)에서, 결정된 조건에 기초하여 주어진 분기 명령어에 대해, 제1 예측기에서의 예측된 방향, 분기 대상 주소 및 이력의 표시 중 하나 이상이 업데이트될 수 있다. 보다 정확한 제2 분기 예측기에 의해 생성된 분기 예측 데이터는 제1 예측기에 저장된 값들을 업데이트하는데 사용될 수 있다.
제1 예측기를 트레이닝하기 위한 어떠한 조건도 존재하지 않는 것으로 결정되는 경우(조건부 블록(514)), 그 방법(500)의 제어 흐름은 블록(510)으로 이동하고 제1 예측기에 대해 수행될 트레이닝이 존재하지 않는다는 것을 나타내기 위한 표시가 생성될 수 있다. 다양한 실시예에서, 적어도 주어진 분기 명령어가 그것의 분기 방향에서 자주 교번하는 패턴을 보인다는 것을 검출하는 것은 제1 예측기의 트레이닝을 방지할 수 있다. 다시 도 4를 참조하면, 업데이트 로직(420)은 제1 예측기의 트레이닝을 방지하기 위한 조건들을 결정하기 위해 이력을 활용하는 하나의 실시예를 도시할 수 있다.
위의 실시들은 상당히 상세히 설명되었지만, 상기 개시가 완전히 이해되는 당업자에게는, 수많은 변형과 수정이 명백하게 될 것이다. 다음 청구항들은 그러한 변형들 및 수정들 모두를 수용하는 것으로 해석되도록 의도된다.
Claims (20)
- 프로세서로서,
주어진 분기 명령어(given branch instruction)에 대해 제1 분기 예측 데이터(branch prediction data)를 생성하도록 구성된 제1 분기 예측기;
제1 분기 예측기보다 늦은 때에, 상기 주어진 분기 명령어에 대해 제2 분기 예측 데이터를 생성하도록 구성된 제2 분기 예측기; 및
상기 제1 분기 예측 데이터와 상기 제2 분기 예측 데이터 사이에 불일치가 존재한다는 결정에 응답하여, 상기 제1 분기 예측기를 트레이닝하고,
상기 주어진 분기 명령어가 이력(hysteresis)을 갖는다는 표시(indication)를 발견한 것에 응답하여, 상기 주어진 분기 명령어에 대해 상기 제1 분기 예측기를 트레이닝하는 것을 방지하도록 구성된 제어 로직
을 포함하는 프로세서. - 제1항에 있어서, 상기 이력은, 상기 주어진 분기 명령어가 그것의 분기 방향에 대해 자주 교번하는 패턴(frequently alternating pattern)을 갖는다는 것을 나타내는 프로세서.
- 제2항에 있어서, 제1 분기 예측기를 트레이닝할지를 결정하는 것은, 상기 이력, 상기 제1 및 제2 분기 예측 데이터에 기초하여 조합 출력(combinational output)을 결정하는 것을 포함하는, 프로세서.
- 제3항에 있어서, 상기 출력은 상기 주어진 분기 명령어가 이력을 갖는다는 것을 나타내고, 상기 제1 및 제2 분기 예측 데이터 중 적어도 하나는 상기 주어진 분기 명령어가 취해진다(taken)는 것을 나타내는 프로세서.
- 제3항에 있어서, 상기 출력은 상기 주어진 분기 명령어가 이력을 갖는다는 것을 나타내고, 상기 제1 및 제2 분기 예측 데이터 각각은 상기 주어진 분기 명령어가 취해지지 않는다(not-taken)는 것을 나타내는 프로세서.
- 제4항에 있어서, 상기 제1 분기 예측기는 복수의 엔트리를 갖는 테이블을 포함하고, 각각의 엔트리는 다음 인출 프로그램 카운터(program counter; PC) 주소 및 이력 표시를 저장하도록 구성되는 프로세서.
- 제4항에 있어서, 상기 제2 분기 예측기는 상기 제1 분기 예측기보다 더 높은 분기 예측 정확도를 갖는 프로세서.
- 제4항에 있어서, 상기 제2 분기 예측기는 상기 제1 분기 예측 데이터를 생성하는 상기 제1 분기 예측기보다 더 늦은 파이프 스테이지(later pipe stage)에서 상기 제2 분기 예측 데이터를 생성하는 프로세서.
- 주어진 분기 명령어에 대해 제1 분기 예측기에 의해 제1 분기 예측 데이터를 생성하는 단계;
제1 분기 예측기보다 늦은 때에, 상기 주어진 분기 명령어에 대해 제2 분기 예측기에 의해 제2 분기 예측 데이터를 생성하는 단계;
상기 제1 분기 예측 데이터와 상기 제2 분기 예측 데이터 사이에 불일치가 존재하고, 상기 분기 명령어가 이력을 갖는다는 표시가 없다는 결정에 응답하여, 상기 제1 분기 예측기를 트레이닝하는 단계; 및
상기 주어진 분기 명령어가 이력을 갖는다는 표시를 발견한 것에 응답하여, 상기 주어진 분기 명령어에 대해 상기 제1 분기 예측기를 트레이닝하는 것을 방지하는 단계
를 포함하는 방법. - 제9항에 있어서, 상기 이력은, 상기 주어진 분기 명령어가 그것의 분기 방향에 대해 자주 교번하는 패턴을 갖는다는 것을 나타내는 방법.
- 제10항에 있어서, 제1 분기 예측기를 트레이닝할지를 결정하는 것은, 상기 이력, 상기 제1 및 제2 예측 데이터에 기초하여 조합 출력을 결정하는 것을 포함하는 방법.
- 제11항에 있어서, 상기 출력은, 상기 주어진 분기 명령어가 이력을 갖는다는 것을 나타내고, 상기 제1 및 제2 분기 예측 데이터 중 적어도 하나는, 상기 주어진 분기 명령어가 취해진다는 것을 나타내는 방법.
- 제11항에 있어서, 상기 출력은, 상기 주어진 분기 명령어가 이력을 갖는다는 것을 나타내고, 상기 제1 및 제2 분기 예측 데이터 각각은, 상기 주어진 분기 명령어가 취해지지 않는다는 것을 나타내는 방법.
- 제12항에 있어서, 상기 제1 분기 예측기의 트레이닝이 존재하지 않음에도 불구하고 상기 주어진 분기 명령어가 이력을 갖지 않는다는 것을 나타내기 위해 상기 제1 분기 예측기를 업데이트하는 단계를 더 포함하는 방법.
- 제11항에 있어서, 상기 출력이, 상기 주어진 분기 명령어가 이력을 갖지 않는다는 것을 나타내고, 상기 제2 분기 예측 데이터가, 상기 주어진 분기 명령어가 취해진다는 것을 나타낸다고 결정하는 것에 응답하여, 상기 제1 분기 예측기를 트레이닝하고 상기 주어진 분기 명령어가 이력을 갖는다는 것을 나타내도록 상기 표시를 설정하는 단계를 더 포함하는 방법.
- 제11항에 있어서, 상기 출력이, 상기 주어진 분기 명령어가 이력을 갖지 않는다는 것을 나타내고, 상기 제1 분기 예측 데이터가, 상기 주어진 분기 명령어가 취해진다는 것을 나타낸다고 결정하는 것에 응답하여, 상기 제1 분기 예측기를 트레이닝하고 상기 주어진 분기 명령어가 이력을 갖는다는 것을 나타내도록 상기 표시를 설정하는 단계를 더 포함하는 방법.
- 분기 예측을 수행하도록 동작가능한 프로그램 명령어들을 포함하는 컴퓨터 판독가능 저장 매체로서, 상기 프로그램 명령어들은:
주어진 분기 명령어에 대해 제1 분기 예측기에 의해 제1 분기 예측 데이터를 생성하고;
제1 분기 예측기보다 늦은 때에, 상기 주어진 분기 명령어에 대해 제2 분기 예측기에 의해 제2 분기 예측 데이터를 생성하고;
상기 제1 분기 예측 데이터와 상기 제2 분기 예측 데이터 사이에 불일치가 존재하고, 상기 분기 명령어가 이력을 갖는다는 표시가 없다는 결정에 응답하여, 상기 제1 분기 예측기를 트레이닝하고;
상기 주어진 분기 명령어가 이력을 갖는다는 표시를 발견한 것에 응답하여, 상기 주어진 분기 명령어에 대해 상기 제1 분기 예측기를 트레이닝하는 것을 방지
하도록 실행가능한, 컴퓨터 판독가능 저장 매체. - 제17항에 있어서, 상기 이력은, 상기 주어진 분기 명령어가 그것의 분기 방향에 대해 자주 교번하는 패턴을 갖는다는 것을 나타내는, 컴퓨터 판독가능 저장 매체.
- 제18항에 있어서, 제1 분기 예측기를 트레이닝할지를 결정하는 것은, 상기 이력, 상기 제1 및 제2 예측 데이터에 기초하여 조합 출력을 결정하는 것을 포함하는, 컴퓨터 판독가능 저장 매체.
- 제19항에 있어서, 상기 출력은, 상기 주어진 분기 명령어가 이력을 갖는다는 것을 나타내고, (1) 상기 제1 및 제2 분기 예측 데이터 중 적어도 하나는, 상기 주어진 분기 명령어가 취해진다는 것을 나타내거나, 또는 (2) 상기 제1 및 제2 분기 예측 데이터 각각은 상기 주어진 분기 명령어가 취해지지 않는다는 것을 나타내는, 컴퓨터 판독가능 저장 매체.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/313,691 | 2011-12-07 | ||
US13/313,691 US8959320B2 (en) | 2011-12-07 | 2011-12-07 | Preventing update training of first predictor with mismatching second predictor for branch instructions with alternating pattern hysteresis |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130064002A KR20130064002A (ko) | 2013-06-17 |
KR101376900B1 true KR101376900B1 (ko) | 2014-03-20 |
Family
ID=47189708
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020120109481A KR101376900B1 (ko) | 2011-12-07 | 2012-09-28 | 이력에 의한 다음 인출 예측기 트레이닝 |
Country Status (7)
Country | Link |
---|---|
US (1) | US8959320B2 (ko) |
EP (1) | EP2602711B1 (ko) |
JP (1) | JP5927616B2 (ko) |
KR (1) | KR101376900B1 (ko) |
CN (1) | CN103150142B (ko) |
TW (1) | TWI499975B (ko) |
WO (1) | WO2013085599A1 (ko) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9811340B2 (en) * | 2012-06-18 | 2017-11-07 | Intel Corporation | Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor |
CN104423929B (zh) * | 2013-08-21 | 2017-07-14 | 华为技术有限公司 | 一种分支预测方法及相关装置 |
US9582285B2 (en) | 2014-03-24 | 2017-02-28 | Qualcomm Incorporated | Speculative history forwarding in overriding branch predictors, and related circuits, methods, and computer-readable media |
US9639368B2 (en) | 2014-06-13 | 2017-05-02 | International Business Machines Corporation | Branch prediction based on correlating events |
KR101624636B1 (ko) * | 2015-03-03 | 2016-05-27 | 주식회사 에이디칩스 | 명령어 패치 장치 및 방법 |
CN105867880B (zh) * | 2016-04-01 | 2018-12-04 | 中国科学院计算技术研究所 | 一种面向间接跳转分支预测的分支目标缓冲器及设计方法 |
CN106406814B (zh) * | 2016-09-30 | 2019-06-14 | 上海兆芯集成电路有限公司 | 处理器和将架构指令转译成微指令的方法 |
US10747539B1 (en) | 2016-11-14 | 2020-08-18 | Apple Inc. | Scan-on-fill next fetch target prediction |
US10613867B1 (en) * | 2017-07-19 | 2020-04-07 | Apple Inc. | Suppressing pipeline redirection indications |
US10929136B2 (en) | 2018-04-11 | 2021-02-23 | Futurewei Technologies, Inc. | Accurate early branch prediction using multiple predictors having different accuracy and latency in high-performance microprocessors |
CN111638912B (zh) * | 2019-09-19 | 2023-03-10 | 中国科学院信息工程研究所 | 一种轻量级的处理器芯片分支预测器内容隔离方法及电子装置 |
US11269642B2 (en) | 2019-09-20 | 2022-03-08 | Microsoft Technology Licensing, Llc | Dynamic hammock branch training for branch hammock detection in an instruction stream executing in a processor |
US11379240B2 (en) * | 2020-01-31 | 2022-07-05 | Apple Inc. | Indirect branch predictor based on register operands |
US11294684B2 (en) | 2020-01-31 | 2022-04-05 | Apple Inc. | Indirect branch predictor for dynamic indirect branches |
CN113918225A (zh) * | 2021-11-04 | 2022-01-11 | 成都海光微电子技术有限公司 | 指令预测方法、指令数据处理装置、处理器以及存储介质 |
US12014180B2 (en) | 2022-06-08 | 2024-06-18 | Ventana Micro Systems Inc. | Dynamically foldable and unfoldable instruction fetch pipeline |
US12008375B2 (en) | 2022-06-08 | 2024-06-11 | Ventana Micro Systems Inc. | Branch target buffer that stores predicted set index and predicted way number of instruction cache |
US12014178B2 (en) | 2022-06-08 | 2024-06-18 | Ventana Micro Systems Inc. | Folded instruction fetch pipeline |
US12106111B2 (en) | 2022-08-02 | 2024-10-01 | Ventana Micro Systems Inc. | Prediction unit with first predictor that provides a hashed fetch address of a current fetch block to its own input and to a second predictor that uses it to predict the fetch address of a next fetch block |
US11816489B1 (en) * | 2022-08-02 | 2023-11-14 | Ventana Micro Systems Inc. | Microprocessor with prediction unit pipeline that provides a next fetch address at a rate of one per clock cycle |
US12020032B2 (en) | 2022-08-02 | 2024-06-25 | Ventana Micro Systems Inc. | Prediction unit that provides a fetch block descriptor each clock cycle |
US11836498B1 (en) | 2022-08-02 | 2023-12-05 | Ventana Micro Systems Inc. | Single cycle predictor |
US12118360B2 (en) | 2023-01-05 | 2024-10-15 | Ventana Micro Systems Inc. | Branch target buffer miss handling |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040225870A1 (en) * | 2003-05-07 | 2004-11-11 | Srinivasan Srikanth T. | Method and apparatus for reducing wrong path execution in a speculative multi-threaded processor |
JP2008532142A (ja) | 2005-02-24 | 2008-08-14 | クゥアルコム・インコーポレイテッド | ループ終結分岐により分岐履歴レジスタの更新を抑制すること |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7023A (en) * | 1850-01-15 | peters | ||
US9012A (en) * | 1852-06-15 | Improved valve or gate for oblique-float paddle-wheels | ||
US4022A (en) * | 1845-05-01 | Improvement in machines for hackling and cleaning hemp and flax | ||
US5758142A (en) * | 1994-05-31 | 1998-05-26 | Digital Equipment Corporation | Trainable apparatus for predicting instruction outcomes in pipelined processors |
JP3494484B2 (ja) | 1994-10-12 | 2004-02-09 | 株式会社ルネサステクノロジ | 命令処理装置 |
CN1153133C (zh) * | 1996-12-09 | 2004-06-09 | 松下电器产业株式会社 | 采用小规模硬件作高命中率分支预测的信息处理装置 |
US6374349B2 (en) * | 1998-03-19 | 2002-04-16 | Mcfarling Scott | Branch predictor with serially connected predictor stages for improving branch prediction accuracy |
US6553488B2 (en) * | 1998-09-08 | 2003-04-22 | Intel Corporation | Method and apparatus for branch prediction using first and second level branch prediction tables |
US6115810A (en) * | 1998-09-16 | 2000-09-05 | Sun Microsystems, Inc. | Bi-level branch target prediction scheme with mux select prediction |
US6647490B2 (en) | 1999-10-14 | 2003-11-11 | Advanced Micro Devices, Inc. | Training line predictor for branch targets |
US6721877B1 (en) | 2000-05-25 | 2004-04-13 | Advanced Micro Devices, Inc. | Branch predictor that selects between predictions based on stored prediction selector and branch predictor index generation |
US20060036837A1 (en) | 2004-08-13 | 2006-02-16 | Stark Jared W | Prophet/critic hybrid predictor |
US7434037B2 (en) | 2006-04-07 | 2008-10-07 | International Business Machines Corporation | System for target branch prediction using correlation of local target histories including update inhibition for inefficient entries |
US7523298B2 (en) * | 2006-05-04 | 2009-04-21 | International Business Machines Corporation | Polymorphic branch predictor and method with selectable mode of prediction |
US7707398B2 (en) | 2007-11-13 | 2010-04-27 | Applied Micro Circuits Corporation | System and method for speculative global history prediction updating |
CN101763248A (zh) | 2008-12-25 | 2010-06-30 | 世意法(北京)半导体研发有限责任公司 | 用于多模式分支预测器的系统和方法 |
CN104636274B (zh) * | 2010-03-29 | 2018-01-26 | 威盛电子股份有限公司 | 数据预取方法以及微处理器 |
-
2011
- 2011-12-07 US US13/313,691 patent/US8959320B2/en active Active
-
2012
- 2012-09-24 EP EP12185670.2A patent/EP2602711B1/en active Active
- 2012-09-25 WO PCT/US2012/056983 patent/WO2013085599A1/en active Application Filing
- 2012-09-26 TW TW101135374A patent/TWI499975B/zh active
- 2012-09-28 JP JP2012230298A patent/JP5927616B2/ja active Active
- 2012-09-28 KR KR1020120109481A patent/KR101376900B1/ko active IP Right Grant
- 2012-09-28 CN CN201210543904.XA patent/CN103150142B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040225870A1 (en) * | 2003-05-07 | 2004-11-11 | Srinivasan Srikanth T. | Method and apparatus for reducing wrong path execution in a speculative multi-threaded processor |
JP2008532142A (ja) | 2005-02-24 | 2008-08-14 | クゥアルコム・インコーポレイテッド | ループ終結分岐により分岐履歴レジスタの更新を抑制すること |
Also Published As
Publication number | Publication date |
---|---|
EP2602711B1 (en) | 2014-12-24 |
US8959320B2 (en) | 2015-02-17 |
KR20130064002A (ko) | 2013-06-17 |
CN103150142A (zh) | 2013-06-12 |
CN103150142B (zh) | 2015-10-21 |
EP2602711A1 (en) | 2013-06-12 |
JP2013120597A (ja) | 2013-06-17 |
TWI499975B (zh) | 2015-09-11 |
WO2013085599A1 (en) | 2013-06-13 |
US20130151823A1 (en) | 2013-06-13 |
TW201324343A (zh) | 2013-06-16 |
JP5927616B2 (ja) | 2016-06-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101376900B1 (ko) | 이력에 의한 다음 인출 예측기 트레이닝 | |
EP1851620B1 (en) | Suppressing update of a branch history register by loop-ending branches | |
US9367471B2 (en) | Fetch width predictor | |
US20060218385A1 (en) | Branch target address cache storing two or more branch target addresses per index | |
JP2011100466A5 (ko) | ||
JP2008532142A5 (ko) | ||
JP2009536770A (ja) | ブロックに基づく分岐先アドレスキャッシュ | |
JP5231403B2 (ja) | スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ | |
KR101081674B1 (ko) | 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법 | |
KR20070107772A (ko) | 비정렬 메모리 액세스 예측 | |
US20080040576A1 (en) | Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set |
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: 20170220 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20180219 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20200218 Year of fee payment: 7 |