KR102077753B1 - 레벨 1 명령 캐시 및 분기 예측 유닛에서의 대역폭 증가 - Google Patents
레벨 1 명령 캐시 및 분기 예측 유닛에서의 대역폭 증가 Download PDFInfo
- Publication number
- KR102077753B1 KR102077753B1 KR1020167013001A KR20167013001A KR102077753B1 KR 102077753 B1 KR102077753 B1 KR 102077753B1 KR 1020167013001 A KR1020167013001 A KR 1020167013001A KR 20167013001 A KR20167013001 A KR 20167013001A KR 102077753 B1 KR102077753 B1 KR 102077753B1
- Authority
- KR
- South Korea
- Prior art keywords
- branch
- predicted
- prediction
- btb
- index
- Prior art date
Links
- 238000000034 method Methods 0.000 claims description 24
- 230000006870 function Effects 0.000 claims description 4
- 238000004519 manufacturing process Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 13
- 238000012545 processing Methods 0.000 description 11
- 238000003491 array Methods 0.000 description 8
- 230000002902 bimodal effect Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 4
- 238000012549 training Methods 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000000926 separation method Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 108010001267 Protein Subunits Proteins 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012913 prioritisation Methods 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 238000009738 saturating Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- 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/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- 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
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
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
프로세서에서 분기 예측을 수행하기 위한 프로세서, 디바이스, 및 비-일시적인 컴퓨터 판독가능 매체가 제공된다. 프로세서는 프론트 엔드 유닛을 포함한다. 프론트 엔드 유닛은, 레벨 1 분기 목표 버퍼(branch target buffer; BTB), BTB 인덱스 예측기(BTB index predictor; BIP), 및 레벨 1 해시 퍼셉트론(hash perceptron; HP)을 포함한다. BTB는 목표 어드레스를 예측하도록 구성된다. BIP는 프로그램 카운터 및 전역 히스토리에 기초하여 예측을 생성하도록 구성되며, 여기에서 예측은 추론적인 부분적 목표 어드레스, 전역 히스토리 값, 전역 히스토리 시프트 값, 및 웨이 예측(way prediction)을 포함한다. HP는 분기 명령이 분기될지 또는 비분기될지 여부를 예측하도록 구성된다.
Description
관련 출원에 대한 상호 참조
본 출원은 2013년 10월 25일자로 출원된 미국 가특허 출원 번호 61/895,624호에 대한 이익을 주장하며, 이는 그 전체가 완전하게 기술되는 것처럼 본원에 참조로서 포함된다.
개시된 실시예들은 전반적으로 프로세서에 관한 것으로서, 더 구체적으로, 프로세서 내의 레벨 1 명령 캐시 및 분기 예측 유닛에 관한 것이다.
중앙 프로세싱 유닛(central processing unit; CPU)들 및 그래픽 프로세싱 유닛(graphical processing unit; GPU)들을 포함하는 프로세서들이 다양한 애플리케이션들에서 사용된다. 표준 구성은 프로세서를 캐시, 시스템 메모리, 또는 유사한 것과 같은 저장 유닛에 연결하는 것이다. 프로세서들은 필요할 때 저장 유닛으로부터 명령들을 페치(fetch)하기 위한 페치 동작을 실행할 수 있다. 프로세서 파이프라인은 프로세싱 명령들에 대한 몇몇 단계들을 포함한다. 일 구현예에 있어, 4 단계 파이프라인이 사용될 수 있으며, 이는 페치 단계, 디코딩 단계, 실행 단계, 및 라이트-백(write-back) 단계를 포함한다. 명령들은 순차적으로 파이프라인 단계들을 통해 진행한다.
프로세서의 동작을 가속하기 위하여, 가득 찬 파이프라인을 갖는 것이 바람직하다. 파이프라인을 채우기 위한 하나의 방식은 이전의 명령들이 프로세싱되고 있는 동안 후속 명령들을 페치하는 것이다. 몇몇 명령들을 미리 페치하기는 것을 가능하게 하기 위하여, 분기 예측이 사용될 수 있다. 분기 예측기(branch predictor)는, 분기 명령이 파이프라인에서의 실행 단계에 도달하기 전에 분기 명령의 방향(즉, 분기되거나(taken) 또는 비-분기되거나(not-taken)) 및 분기 목표 어드레스를 예측한다.
이는 명령의 "프리-페칭(pre-fetching)" 및 명령의 "추론적인 실행(speculatively executing)으로서 알려져 있다. 분기 명령이 실행 단계에 도달할 때까지 예측이 정확한지 여부를 알 수 없기 때문에, 명령이 추론적으로 실행된다. 분기 명령의 실제 방향을 알지 못하는 상태에서 명령들을 프리-페치하고 추론적으로 실행하는 것이 명령 프로세싱의 가속을 야기할 수 있지만, 분기 방향들이 오예측(mispredict)된 경우 이는 부정적인 효과를 가질 수 있고 파이프라인 지연(stalling)을 야기할 수 있다. 분기 오예측이 발생한 경우, 파이프라인이 비워지고(flushed) 정확한 분기 방향으로부터의 명령들이 실행되어야만 한다. 이는 시스템의 성능에 심각한 충격을 줄 수 있다.
몇몇 상이한 유형들의 분기 예측기들이 사용되어 왔다. 바이모달(bimodal) 예측기는 특정 분기의 실행의 최근 히스토리에 기초하여 예측을 생성하며, 분기(taken) 또는 비-분기(not-taken)의 예측을 제공한다. 전역(global) 예측기는, 관심이 있는 특정 분기뿐만 아니라 모든 분기의 실행의 최근 히스토리에 기초하여 예측을 생성한다. 전역 공유 히스토리 버퍼, 패턴 히스토리 테이블, 및 추가적인 로컬 포화 카운터(local saturating counter)를 갖는 2-레벨 적응성 예측기가 또한 사용될 수 있으며, 그 결과 로컬 예측기의 출력들 및 전역 예측기가 최종 예측을 제공하기 위하여 서로 배타적 논리합 연산된다. 2개 이상의 예측 메커니즘들이 동시에 사용될 수 있으며, 최종 예측은 어떤 예측기가 과거에 최상의 예측들을 생성하였는지를 기억하는 메타(meta)-예측기 또는 홀수의 상이한 예측기들에 기반한 다수 투표 기능(majority vote function) 중 하나에 기초하여 이루어진다.
도 1은 기존의 레벨 1 분기 예측기(100)의 블록도이다. 분기 예측기(100)는 제 1 예측기(P1)(102), 제 2 예측기(P2)(104), 멀티플렉서(mux)(106), 및 선택기(chooser)(108)를 포함한다. 프로그램 카운터(110)(예측되는 분기의 어드레스) 및 다른 입력들(112)이 제 1 예측기(102) 및 제 2 예측기(104) 둘 모두에 의해 평가되며, 그 각각이 그 자체적인 예측을 생성한다.
프로그램 카운터(110)는 또한 선택기(108)에 대한 입력으로서 제공되며, 선택기는 어느 예측기(제 1 예측기(102) 또는 제 2 예측기(104) 중 하나)가 더 정확한지를 결정하기 위하여 프로그램 카운터(110)를 사용한다. 선택기(108)는 멀티플렉서(106)에 대한 선택자(selector)로서 공급되는 예측 선택(114)을 생성한다. 선택된 예측기의 출력이 분기 예측기(100)의 예측(116)으로서 사용된다.
도 2는 다른 기존의 레벨 1 분기 예측기(200)의 블록도이다. 일 구현예에 있어, 레벨 1 예측기(200)는 맥팔링 하이브리드 예측기(McFarling hybrid predictor)일 수 있다. 분기 예측기(200)는 구성에 있어 분기 예측기(100)와 유사하지만, 컴포넌트들 중 일부에 대해 상이한 구현을 갖는다. 분기 예측기(200)는, (바이모들 카운터들의 어레이로서 구현된) 제 1 예측기(202), (바이모달 카운터들의 어레이로서 구현된) 제 2 예측기(204), 멀티플렉서(mux)(206), 및 바이모달 선택기(208)를 포함한다. 각각의 예측기(202, 204)는 그 자체적인 예측을 생성한다. 제 2 예측기(204)는 XOR 유닛(210) 및 바이모달 카운터들의 어레이(212)를 포함한다.
프로그램 카운터(220)(분기 어드레스)가 제 1 예측기(202), 제 2 예측기(204), 및 선택기(208)에 대한 입력으로서 공급된다. 제 1 예측기(202)는, 프로그램 카운터(220)의 하위(low order) 어드레스 비트들에 의해 인덱싱(index)된 포화 바이모달 2 비트 카운터에 그것의 예측을 기초한다.
전역 히스토리(222)는 (분기 어드레스에 의해 인덱싱된) 가장 최근의 N개의 분기들에 의해 분기된 방향의 히스토리를 유지하며, 이는 제 2 예측기(204)에 대한 입력으로서 공급된다. XOR 유닛(210)은 프로그램 카운터(220) 및 전역 히스토리(222)에 대해 배타적 논리합 연산을 수행하며, 이는 어레이(212) 내로의 인덱스로서 사용되는 해시(hash)를 생성한다.
선택기(208)는 테이블에서 어느 예측기(제 1 예측기(202) 또는 제 2 예측기(204) 중 하나)가 더 정확한지를 조회(lookup)하기 위하여 프로그램 카운터(220)를 사용한다. 선택기(208)는 멀티플렉서(206)에 대한 선택자로서 공급되는 예측 선택(224)을 생성한다. 선택된 예측기가 분기 예측기(200)의 레벨 1 예측(226)으로서 사용된다.
도 3은 해시형 퍼셉트론(hashed perceptron)으로서 알려진 기존의 레벨 2 분기 예측기(300)의 블록도이다. 해시형 퍼셉트론(300)은 바이어스 가중치 어레이(bias weight array)(302), 복수의 가중치 어레이들(3041, 3042, 304n), 및 가산기(306)를 포함한다. 프로그램 카운터(310)는 바이어스 가중치 어레이(302) 및 가중치 어레이들(3041-304n)에 대한 입력으로서 공급된다.
바이어스 가중치 어레이(302)는, 각각의 가중치가 복수의 비트들(예를 들어, 4 또는 8 비트)인 가중치들의 어레이이다. 바이어스 가중치 어레이(302)는 가산기(306)에 공급되는 가중치 값을 획득하기 위하여 프로그램 카운터(310) 또는 프로그램 카운터(310)의 해시를 사용하여 인덱싱된다.
각각의 가중치 어레이(3041-304n)는 가중치 값을 획득하기 위하여 전역 히스토리(312)의 상이한 비트들 및 프로그램 카운터(310)의 해시에 의해 인덱싱된다. 각각의 가중치 유닛(3041-304n)은, 전역 히스토리(312)의 부분과 프로그램 카운터(310)에 대한 배타적 논리합 연산을 수행함으로써 해시를 생성하기 위한 XOR 유닛(314)을 포함한다. 전역 히스토리는, 현재의 분기를 포함하지 않는, 분기가 분기되었는지 또는 비분기되었는지 여부에 대한 모든 분기들의 과거 결론들의 리스트이다. 전역 히스토리의 최하위 비트들은 직면했던 가장 최근의 분기들에 관한 정보를 포함하며, 반면 전역 히스토리의 최상위 비트들은 직면했던 더 오래된 분기들에 관한 정보를 포함한다.
가산기(306)는 합계 값을 획득하기 위하여 바이어스 가중치 어레이(320) 및 가중치 어레이들(3041-304n)의 각각으로부터 획득된 가중치들을 가산하며, 합계 값의 최상위 비트(most significant bit; MSB)가 예측(316)이다. 예를 들어, 합계 값의 MSB가 "1"인 경우 예측은 "비분기"이며, 합계 값의 MSB가 "0"인 경우 예측은 "분기"이다.
해시형 퍼셉트론(300)의 일 구현에 있어, 가중치 값들의 모두가 부정확한 예측을 야기할 수 있는 가산기(306)의 오버플로우를 방지하기 위하여 부호-확장(sign-extend)된다는 것을 주의해야 한다. 바이어스 가중치 어레이(302) 및 가중치 어레이들(3041-304n)의 각각 내로의 인덱스를 생성하기 위하여 해시 함수를 사용하는 것이 (인덱스를 구성하는 비트들의 수와 관련하여) 작은 인덱스를 생성하며, 이는 프로그램 카운터(310) 및 전역 히스토리(312) 둘 모두가 각기 많은 수의 비트들을 포함할 수 있기 때문이다.
분기 예측기들은 전형적으로 크고 복잡한 구조들이다. 결과적으로, 이들은 분기들을 예측하기 위하여 많은 양의 전력을 소비하며 레이턴시(latency) 페널티를 초래한다. 더 양호한 분기 예측을 갖는 것이 바람직하며, 이는 더 양호한 분기 예측이 프로세서의 전력 효율 및 성능에 대해 영향을 갖기 때문이다.
일부 실시예들은 프론트 엔드 유닛(front end unit)을 포함하는 프로세서를 제공한다. 프론트 엔드 유닛은, 레벨 1 분기 목표 버퍼(branch target buffer; BTB), BTB 인덱스 예측기(BTB index predictor; BIP), 및 레벨 1 해시 퍼셉트론(hash perceptron; HP)을 포함한다. BTB는 목표 어드레스를 예측하도록 구성된다. BIP는 프로그램 카운터 및 전역 히스토리에 기초하여 예측을 생성하도록 구성되며, 여기에서 예측은 추론적인 부분적 목표 어드레스, 전역 히스토리 값, 전역 히스토리 시프트 값, 및 웨이 예측(way prediction)을 포함한다. HP는 분기 명령이 분기될지 또는 비분기될지 여부를 예측하도록 구성된다.
일부 실시예들은 프로세서에서 분기 예측을 수행하기 위한 방법을 제공하며, 프로세서는 레벨 1 분기 목표 버퍼(branch target buffer; BTB) 및 BTB 인덱스 예측기(BTB index predictor; BIP)를 포함한다. BTB 및 BIP를 조회하는데 사용하기 위하여 인덱스가 생성된다. 조회는 목표 어드레스를 예측하기 위하여 인덱스를 사용하여 BTB에서 수행된다. 추론적인 부분적 목표 어드레스를 예측하기 위하여 조회가 BIP에서 인덱스를 사용하여 수행된다. BTB로부터의 목표 어드레스 및 BIP로부터의 추론적인 부분적 목표 어드레스는 다음 플로우(flow)에 대한 인덱스를 생성하기 위해 사용된다.
일부 실시예들은 프로세서에서 분기 예측을 수행하기 위한 범용 컴퓨터에 의한 실행을 위한 명령들의 세트를 저장하는 비-일시적인 컴퓨터-판독가능 저장 매체를 제공하며, 프로세서는 레벨 1 분기 목표 버퍼(branch target buffer; BTB) 및 BTB 인덱스 예측기(BTB index predictor; BIP)를 포함한다. 명령들의 세트는, 코드 생성 세그먼트, 제 1 코드 수행 세그먼트, 제 2 코드 수행 세그먼트, 및 코드 사용 세그먼트를 포함한다. 코드 생성 세그먼트는 BTB 및 BIP를 조회하는데 사용하기 위한 인덱스를 생성한다. 제 1 코드 수행 세그먼트는 목표 어드레스를 예측하기 위하여 인덱스를 사용하여 BTB에서 조회를 수행한다. 제 2 코드 수행 세그먼트는 추론적인 부분적 목표 어드레스를 예측하기 위하여 인덱스를 사용하여 BIP에서 조회를 수행한다. 코드 사용 세그먼트는 다음 플로우에 대한 인덱스를 생성하기 위해 BTB로부터의 목표 어드레스 및 BIP로부터의 추론적인 부분적 목표 어드레스를 사용한다.
더 상세한 이해는 첨부된 도면들과 함께 예시적으로 주어지는 다음의 설명으로부터 얻어질 수 있다.
도 1은 기존의 레벨 1 분기 예측기의 블록도이다.
도 2는 다른 기존의 레벨 1 분기 예측기의 블록도이다.
도 3은 기존의 레벨 2 분기 예측기(해시형 퍼셉트론)의 블록도이다.
도 4는 하나 이상의 개시된 실시예들이 구현될 수 있는 예시적인 디바이스의 블록도이다.
도 5는 BTB 인덱스 예측기(BIP) 및 BTB 웨이 예측기의 블록도이다.
도 6은 BIP 내의 단일 엔트리(entry)의 도면이다.
도 7은 BP 매칭 신호를 생성하기 위해 BIP를 사용하는 방법의 순서도이다.
도 8은 명령 태그(instruction tag; IT) 및 명령 캐시(instruction cache; IC) 파이프라인들의 블록도이다.
도 1은 기존의 레벨 1 분기 예측기의 블록도이다.
도 2는 다른 기존의 레벨 1 분기 예측기의 블록도이다.
도 3은 기존의 레벨 2 분기 예측기(해시형 퍼셉트론)의 블록도이다.
도 4는 하나 이상의 개시된 실시예들이 구현될 수 있는 예시적인 디바이스의 블록도이다.
도 5는 BTB 인덱스 예측기(BIP) 및 BTB 웨이 예측기의 블록도이다.
도 6은 BIP 내의 단일 엔트리(entry)의 도면이다.
도 7은 BP 매칭 신호를 생성하기 위해 BIP를 사용하는 방법의 순서도이다.
도 8은 명령 태그(instruction tag; IT) 및 명령 캐시(instruction cache; IC) 파이프라인들의 블록도이다.
도 4는 하나 이상의 개시된 실시예들이 구현될 수 있는 예시적인 디바이스(400)의 블록도이다. 디바이스(400)는, 예를 들어, 컴퓨터, 게이밍 디바이스, 핸드헬드 디바이스, 셋-탑 박스, 텔레비전, 모바일 폰, 또는 태블릿 컴퓨터를 포함할 수 있다. 디바이스(400)는, 프로세서(402), 메모리(404), 저장부(406), 하나 이상의 입력 디바이스들(408), 및 하나 이상의 출력 디바이스들(410)을 포함한다. 디바이스(400)는 또한 선택적으로 입력 드라이버(412) 및 출력 드라이버(414)를 포함할 수 있다. 디바이스(400)가 도 4에 도시되지 않은 추가적인 컴포넌트들을 포함할 수 있다는 것이 이해되어야 한다.
프로세서(402)는 중앙 프로세싱 유닛(CPU), 그래픽 프로세싱 유닛(GPU)를 포함할 수 있으며, CPU 및 GPU는 동일한 다이(die) 또는 하나 이상의 프로세서 코어들 상에 위치되고, 여기에서 각각의 프로세서 코어는 CPU 또는 GPU일 수 있다. 메모리(404)는 프로세서(402)와 동일한 다이 상에 위치될 수 있거나, 또는 프로세서(402)와 별개로 위치될 수 있다. 메모리(404)는 휘발성 또는 비-휘발성 메모리, 예를 들어, 랜덤 액세스 메모리(random access memory; RAM), 동적 RAM, 또는 캐시를 포함할 수 있다.
저장부(406)는 고정형 또는 착탈가능 저장부, 예를 들어, 하드 디스크 드라이브, 고체 상태 드라이브, 광 디스크, 또는 플래시 디바이스를 포함할 수 있다. 입력 디바이스들(408)은, 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크, 가속도계, 자이로스코프, 생체인식 스캐너, 또는 네트워크 연결부(예를 들어, 무선 IEEE 802 신호들의 송신 및/또는 수신을 위한 무선 근거리 영역 네트워크 카드)를 포함할 수 있다. 출력 디바이스들(410)은, 디스플레이, 스피커, 프린터, 촉각 피드백 디바이스, 하나 이상의 조명들, 안테나, 또는 네트워크 연결부(예를 들어, 무선 IEEE 802 신호들의 송신 및/또는 수신을 위한 무선 근거리 영역 네트워크 카드)를 포함할 수 있다.
입력 드라이버(412)는 프로세서(402) 및 입력 디바이스들(408)과 통신하며, 프로세서(402)가 입력 디바이스들(408)로부터의 입력을 수신하는 것을 가능하게 한다. 출력 드라이버(414)는 프로세서(402) 및 출력 디바이스들(410)과 통신하며, 프로세서(402)가 출력 디바이스들(410)로 출력을 전송하는 것을 가능하게 한다. 입력 드라이버(412) 및 출력 드라이버(414)가 선택적인 컴포넌트이며, 입력 드라이버(412) 및 출력 드라이버(414)가 존재하지 않는 경우 디바이스(400)가 동일한 방식으로 동작할 것임을 주의해야 한다.
프로세서 내의 프론트 엔드 유닛(Front End unit; FE)은 명령들의 페칭 및 디코딩 유닛(Decode unit; DE)으로의 명령들의 전송을 담당한다. FE는 2개의 서브-유닛들, 즉, 분기 예측부(Branch Prediction; BP) 및 명령 캐시(Instruction Cache; IC)를 포함한다. BP 서브-유닛은 각각의 어드레스에서 페치하기 위한 특정 바이트들 및 페치 어드레스들의 시퀀스를 예측한다. IC 서브-유닛은 페이지 변환(translation)을 수행하고, 캐시 계층으로부터 특정 바이트들을 페치한다. FE가 다른 서브-유닛들 및 기능을 포함하지만, 이러한 기능이 본 개시와 관련되지 않으며, 따라서 본원에서 추가로 설명되지 않는다는 것을 주의해야 한다.
FE 내에 3개의 메인 파이프라인들, 즉, BP 파이프라인, 명령 태그(IT) 파이프라인, 및 IC 파이프라인이 존재한다. BP 파이프라인과 명령 페칭(IT/IC) 파이프라인들을 분리하는 예측 큐(prediction queue; PRQ)가 BP 파이프라인들과 IT/IC 파이프라인 사이에 존재한다. BP 파이프라인은 예측 어드레스들을 생성하며, PRQ는 IT/IC 파이프라인이 이들을 프로세싱할 수 있을 때까지 어드레스들을 홀딩한다. PRQ는 페치 어드레스들의 순차적인(in-order) 큐이다. 이는 IT/IC 파이프라인에 의해 판독되고 갱신된다.
각 사이클에서, 예측된 가상 페치 어드레스(프로그램 카운터(Program Counter; PC)) 및 최근의 분기 거동(behavior)(전역 히스토리(Global History; GHist))를 나타내는 벡터가 BP 파이프라인 아래로 흐른다. 각각의 플로우는 페치될 다음의 최대 64 바이트들을 발견할 수 있다. PC는 분기 목표 버퍼(BTB) 내의 엔트리를 조회하는데 사용된다. BTB 엔트리는 분기들을 식별하며 그들의 목표들을 예측한다. PC 및 GHist는 해시 퍼셉트론(HP) 테이블들을 액세스하는데 사용된다. HP 테이블들은 조건부 분기들의 방향(즉, 분기 또는 비분기)을 예측하는데 사용된다.
반환 및 가변 목표 분기들은 그들의 예측을 보조하기 위해 사용되는 추가적인 구조들을 갖는다. BTB가 분기된 분기가 호출(call)이라는 것을 나타내는 경우, 호출 후 명령의 어드레스가 스택 상으로 푸시된다. 연관된 반환 명령이 BTB로부터 예측된 목표를 사용하는 대신에 스택으로부터 이러한 어드레스를 팝(pop)할 것이다. BTB가 분기가 가변 목표를 갖는다는 것을 나타내는 경우, 페치 어드레스 및 전역 히스토리가 간접 목표 어레이(indirect target array; ITA) 내의 어드레스를 조회하기 위해 사용된다.
BTB 및 HP 구조들 둘 모두가 2 레벨 구조들로서 구현된다. 레벨 1(L1) BTB 및 L1 HP로부터 예측된 페치 방향의 변화(리다이렉트(redirect))는 BP 파이프라인 내로 하나의 버블(bubble)(예를 들어, "무 연산(no operation)")을 삽입한다. 분기가 L1 BTB 내에 있지만 L2 BTB에서 발견되는 가변 목표를 가지는 경우, 또는 L2 HP가 L1 예측기로부터의 방향 예측을 오버라이드(override)하는 경우, 3개의 버블들이 BP 파이프라인 내로 삽입된다. 마지막으로, 가변 목표를 갖는 L2 BTB 내의 분기는 BP 파이프라인 내로 4개의 버블들을 삽입한다.
이러한 메인 예측기들에 더하여, FE의 효율을 개선하도록 설계된 2개의 구조들이 존재한다. 이상에서 언급된 바와 같이, 전형적인 분기 또는 비분기 시 분기가 BP 파이프라인 내로 버블을 도입한다. BTB 및 HP를 액세스하는 것과 병렬로, PC 및 GHist가 BTB 인덱스 예측기(BIP)로부터 엔트리를 판독하기 위해 사용된다. 이러한 엔트리는 BTB 및 HP 어레이 인덱스들을 예측하기 위해 사용되며, 다음의 사이클에서 이러한 구조들을 액세스하기 위해 사용된다. BIP가 다음 명령의 인덱스를 정확히 예측할 때, 버블이 밀어 넣어진다. 반복 루프들을 찾는 것을 시도하기 위해 예측된 어드레스 스트림을 끊임없이 스캐닝하고 있는 루프 예측기가 존재한다. 루프 예측기가 루프를 추적할 때, 큰 예측 어레이들이 턴 오프될 수 있으며, 예측은, 최대 사이클 당 하나의 분기된 분기의 레이트(rate)로, 이러한 더 작은 구조로 만들어질 수 있다.
어드레스들이 예측됨에 따라, 이들이 3개의 상이한 구조들에 기입된다. 분기 및 히스토리 정보와 함께 각각의 어드레스가 분기 상태 레지스터(branch status register; BSR)에 기입된다. 이는, 분기들이 발견되고, 오예측되며, 및 폐기될 때 예측 구조들을 트레이닝하기 위해 사용된다. 각각의 어드레스가 PRQ에 기입되며, 그 결과 IC 파이프라인이 연관된 데이터를 페치할 수 있다. 마지막으로, 각각의 어드레스는 DE 유닛 내의 페치 어드레스 선입선출 큐(fetch address first in first out(FIFO) queue; FaFifo)에 기입된다.
각각의 사이클에서, PRQ로부터 예측된 가상 페치 어드레스(virtual fetch address; VA)가 IT 파이프라인 아래로 흐른다. 이는 가상 어드레스를 물리적 어드레스(physical address; PA)로 변환하는 것을 시도할 때 명령 변환 색인 버퍼(instruction translation lookaside buffer; ITLB)의 2개의 레벨들 중 첫번째 레벨을 액세스한다. 성공적인 경우, IT 파이라인은 다음으로 이러한 물리적 어드레스를 취하고, 이를 IC를 액세스하기 위해 사용한다. ITLB 조회와 병렬로, IC 마이크로태그(microtag; uTag)에 대한 액세스가 시작된다. 이러한 조회는 ITLB로부터 PA가 획득될 때 종료된다. 마이크로태그는 IC 데이터 어레이들 중 어떠한 웨이가 액세스되어야 하는지(캐시 라인이 어디에 위치될 수 있는지)를 예측한다. 데이터 액세스와 병렬로, 풀(full) 태그 조회가 마이크로태그 히트(hit) 신호들을 검증하기 위해 수행된다. 이러한 플로우의 결과들(ITLB 히트, 부분적 PA, IC 히트, IC 웨이)이 PRQ에 다시 기입된다.
L1 ITLB 미스가 존재할 때, 변환 색인 버퍼(translation lookaside buffer; TLB) 미스 어드레스 버퍼(miss address buffer; MAB)가 할당되며, L2 ITLB에서의 조회가 시도된다. L2 ITLB에서의 미스가 또한 존재하는 경우, 로드/저장 유닛(load/store unit; LS)으로의 페이지 워크 요청(page walk request)이 개시된다. L2 ITLB 히트 엔트리 또는 페이지 워크 요청의 결과 중 하나가 L1 ITLB에 설치된다. 명령 캐시에 미스가 존재하는 경우, IC 메모리 어드레스 버퍼(memory address buffer; MAB)가 할당 되며, 미싱 라인에 대한 필 요청(fill request)이 L2 ITLB로 전송된다. (페이지 워크의 속성들에 의해 표시되는 바와 같이) 특정 PA가 캐시가능한 경우, 데이터가 반환될 때 데이터가 IC 내로 기입된다. 특정 PA가 캐시가능하지 않은 경우, 프로세스를 PRQ 내의 가장 오래될 어드레스를 기다리며, 그런 다음 결과적인 페치 데이터를 DE에 직접적으로 전달한다.
미스가 존재할 때, PRQ 내의 더 젊은 엔트리들은 계속해서 프로세싱된다. 이는 미스된 더 오래된 페치보다 더 젊은 페치들에 대한 캐시 라인들을 프리페치하기 위한 시도이다.
IC 파이프라인은, 사이클 당 명령 데이터의 32 바이트들을 페치할 수 있는 3 단계 파이프라인이다. 64 바이트 예측 윈도우 내의 예측된 시작 및 종료 위치에 의존하여 PRQ 내의 각각의 어드레스는 모든 데이터를 DE로 전달하기 위하여 IC 파이프라인 아래로의 하나의 플로우 또는 2개의 플로우들을 필요로 한다. 가장 오래된 PRQ 엔트리가 기다리고 있는 반환 L2 캐시 미스가 그 엔트리에 대해 IC 파이프라인을 웨이크 업(wake up)할 수 있으며, 데이터 어레이들이 갱신되고 있는 동안 L2 필 데이터가 DE로 직접적으로 바이패스(bypass)될 수 있다.
예측, 태그 및 캐시 파이프라인들 모두가 스레드(thread) 우선순위화 알고리즘에 기초하여 2개의 스레드들로부터의 액세스를 인터리빙(interleave)함으로써 동시 멀티스레딩을 처리한다(handle simultaneous multithreading; SMT). 일반적으로, 스레드 스케줄링은 라운드 로빈(round robin) 기술을 사용하여 BP, IT, 및 IC 파이프라인들 내에서 독립적으로 수행된다. 주어진 사이클 내에서, 스레드들 중 하나가 블럭되고 다른 스레드가 선택될 수 있는 경우, 그 사이클에서 그 다른 스레드가 선택될 것이다.
도 5는 BTB 인덱스 예측기 및 BTB 웨이 예측기의 블록도이다. 도 5는 BTB 인덱스 예측기 및 BTB 웨이 예측기를 구현하는 프로세서(500)의 일 부분만을 도시하며; 명료성의 목적을 위해 도 5에 도시되지 않은 프로세서(500)의 다른 엘러먼트들이 존재한다. 도 5의 하단의 라벨들 - BP0, BP1, 및 BP2 - 은 상이한 컴포넌트들이 동작하는 BP 파이프라인의 사이클을 나타낸다.
프로그램 카운터(PC)(502) 및 전역 히스토리(GHist)(504)가 입력들로서 제공된다. 제 1 멀티플렉서(510)는 PC(502) 및 목표 PC(Target_BP2)(512)를 수신하며, 선택 신호(514)가 선택된 PC(PC_BP0)(516)로서 PC(502) 및 목표 PC(512) 중 하나를 선택한다. 선택 신호(514)는, 실행(execution; EX) 유닛 또는 디코딩(DE) 유닛으로부터의 리다이렉트에 기초하거나, 또는 그 이후의 BP 파이프라인으로부터의 더 높은 우선순위의 예측에 기초한다. 선택 신호(514)가 프로세서(500)의 다른 부분으로부터 유래되지만, 명료성의 목적들을 위하여 선택 신호(514)의 잠재적인 소스들로의 연결 라인들이 도시되지 않는다는 것을 주의해야 한다.
선택된 PC(516) 및 예측된 목표 PC(Pred Target_BP1)(518)가 제 2 멀티플렉서(520)에 대한 입력들로서 공급되며, 선택 신호(522)는 예측된 PC(Pred PC_BP0)(524)로서 선택된 PC(516) 또는 예측된 목표 PC(518) 중 하나를 선택한다. 선택 신호(522)는, EX 유닛 또는 DE 유닛으로부터의 리다이렉트에 기초하거나, 또는 그 이후의 BP 파이프라인으로부터의 더 높은 우선순위의 예측에 기초하거나, 또는 (예측된 목표 PC(518)가 무가치하다는 것을 나타내며, 선택된 PC(516)가 선택된다는 것을 의미하는) BIP 오예측을 갖는 BP2 사이클 내에 유효한 op가 존재하는지에 기초한다. 선택 신호(522)가 프로세서(500)의 다른 부분으로부터 유래되지만, 명료성의 목적들을 위하여 선택 신호(522)의 잠재적인 소스들로의 연결 라인들이 도시되지 않는다는 것을 주의해야 한다.
예측된 PC(524)는 가능한 어드레스들의 세트(528)를 생성하는 L1 BTB(526)에 대한 입력(인덱스)로서 공급된다. 가능한 어드레스들의 세트(528)는 제 3 멀티플렉서(530)에 대한 입력들로서 공급되며, 선택 신호(532)(이하에서 설명되는 분기/비분기 신호)가 목표 PC(512)로서 가능한 어드레스들의 세트(528) 중 하나를 선택하고, 이는 다시 제 1 멀티플렉서(510)로 피드백되며 제 1 비교기(534)로 피드포워드된다.
L1 BTB(526)는 세트-결합(set-associative) 구조이며, 그 결과 조회가 수행된다. 어드레스의 일부 비트들은 구조를 판독하는데 사용되며, 어드레스의 일부 해시된 비트들은 어드레스와의 매칭이 존재하는지 여부를 결정하기 위해 태그와 비교하는데 사용된다. 몇몇 "웨이들"(몇몇 상이한 가능한 결과들) 사이의 태그 비교 및 선택이 일반적인 2-사이클 조회에서 많은 시간을 소요한다.
사이클마다, 목표 PC(512)를 예측하기 위하여 L1 BTB(526)가 판독된다. 그런 다음 목표 PC(512)는 다음 목표 PC를 예측하기 위하여 L1 BTB를 다시 판독하기 위한 인덱스를 생성하기 위해 다음 플로우에서 사용된다. 이는 동일한 캐시 라인 또는 분기된 분기가 이어지는 임의의 비-순차적인 캐시 라인 내에 존재할 수 있다. 제 1 플로우로부터 목표 PC를 생성하기 위하여 시간이 소요되기 때문에, 다음 플로우에 대한 L1 BTB의 판독이 지연된다. 이러한 버블을 밀어 넣기 위하여, 이하에서 설명되는 바와 같이 BTB 인덱스 예측기(BIP)가 사용된다.
전형적인 예측은 2개의 사이클들마다 하나의 분기되는 분기를 예측한다. 각각의 분기는 L1 BTB(526)를 통과한다. 다음 사이클(BP2)에서, 목표 PC(512)가 결정되어야 하며, 이는 L1 BTB(526)의 전방의 멀티플렉서들(510, 520) 내로 2 사이클 반환된다(BP0으로). 요약하면, 가능한 어드레스들(528)이 L1 BTB(526)로부터 획득되며, 가능한 어드레스들 중 하나가 (목표 PC(512)로서) 선택되고, 선택된 어드레스가 반환된다.
예측된 PC(524)의 일부 비트들 및 GHist의 일부 비트들의 조합이 BTB 인덱스 예측기(BIP)(536)에 공급된다. 일 구현예에 있어, 이러한 조합은 예측된 PC(524) 비트들과 GHist 비트들의 배타적 논리합이다. BIP(536)는 제 2 멀티플렉서(520)로 피드백되고 제 1 비교기(534)로 피드포워드되는 예측된 목표 어드레스(Pred Target BP_1)(518) 및 제 1 GHist 시프터(540) 및 제 2 비교기(542)로 공급되는 예측된 전역 히스토리 시프트 값(Pred GHist shift_BP1)(538)을 생성한다.
BIP(536)는 L1 BTB(526)와 병렬로 액세스된다. L1 BTB(526)는 (다음 플로우의 BTB/해시 퍼셉트론(HP) 인덱스를 구성하기 위해 또한 사용되는) 현재 플로우의 분기 목표를 예측하며, 반면 BIP(536)는 L1 BTB(526) 및 L1 HP(560) 내로의 조회를 수행하기 위한 인덱스를 생성하는데 사용되는 추론적인 부분적 목표 어드레스를 (VA[19:1] 및 GHist 둘 모두의 함수로서) 예측한다. BIP(536)는 가상 어드레스 및 전역 히스토리의 해시에 의해 인덱싱되고 직접-매핑되며, 이는 L1 BTB(526) 및 L1 HP(560)가 바로 다음의 사이클에서 예측된 인덱스로 판독되는 것을 가능하게 한다. BIP 예측이 정확할 때, 이는 분기 및 비분기 분기 버블을 밀어 넣는다.
L1 BTB(526) 구현(크기 및 배치) 및 L1 BTB 판독 펄스 리다이렉트 타이밍 제한들이 단지 두 사이클에 한번씩 마지막 L1 BTB 리다이렉트의 오프에 기초하여 L1 BTB 예측이 생성되고 판독되는 것을 가능하게 한다. L1 BTB 리다이렉트마다에 대하여, 이는 백-투-백(back-to- back) L1 BTB 판독들 사이에 버블 사이클을 생성한다. 교번하는 사이클마다 실행 중인 2개의 스레드들이 존재하고 백-투-백 사이클들에서 L1 BTB를 점유하는 이상적인 상황에서, 이러한 문제가 발생하지 않을 것이다. 단지 하나의 활성 스레드 또는 백-투-백 동일 스레드 할당이 존재하는 경우에 있어, 2 사이클마다 버블이 존재할 것이며, 이는 성능을 손상한다.
일 구현예에 있어, BIP(536)는 직접-매핑된 256 엔트리 구조이고, 엔트리들이 경쟁적으로 공유된다. BIP(536)는 인덱스 입력을 제공받고, 값은 BIP로부터 획득되며, 이러한 값이 정확한 것으로 추정된다. 추가적인 비교들 또는 검증들이 이러한 시점에 요구되지 않는다. 다음 사이클에서, BIP(536)의 결과가 사용되며, 그런 다음 결과가 그 콘텍스트에서 사용되기에 올바른 결과였는지 여부가 알려질 것이다(결과가 정확한지 여부가 알려지기 이전에 결과가 사용된다). 프로세서의 물리적 레이아웃의 일 구현예에 있어, BIP(536)는 L1 BTB(526) 및 L1 HP(560) 근처에 위치된다.
도 6은 BIP(536) 내의 단일 엔트리(600)의 콘텐츠를 도시한다. 엔트리(600)는 추론적인 인덱스(602), 전역 히스토리의 최하위 비트(LSB)들(604), 전역 히스토리 시프트 값(606), 및 웨이 예측(608)을 포함한다.
추론적인 인덱스(602)는 19 비트 길이일 수 있으며, 하위 VA 비트들 19:1을 포함한다. BIP(536), L1 BTB(526), 및 L1 HP(560)는 다음 사이클 플로우에 대한 그들의 판독 인덱스를 생성하기 위하여 이러한 비트들을 필요로 한다.
전역 히스토리의 LSB(604)는 2 비트 길이일 수 있으며 다음 사이클의 추론적인 전역 히스토리 값을 예측하기 위해 사용되고, 이는 판독 인덱스를 생성하기 위하여 BIP(536), L1 BTB(526), 및 L1 HP(560)에 의해 요구된다.
전역 히스토리 시프트 값(606)은 2 비트 길이일 수 있으며 전역 히스토리 테이블을 구축하는 것을 도울 수 있고, 전역 히스토리의 LSB를 0, 1, 또는 2 비트만큼 시프트할지를 나타낼 수 있다. 전역 히스토리 시프트 값(606)이 0보다 더 큰 경우, 시프트될 값들 및 시프트 양이 공급된다. 각각의 조건부 분기는 분기가 분기될지 또는 분기되지 않을지 여부에 의존하여 전역 히스토리 테이블 내로 0 또는 1을 시프트한다. 예를 들어: 하나의 분기되지 않은 분기가 존재하는 경우 0이 시프트되며; 하나의 분기된 분기가 존재하는 경우 1이 시프트되고; 하는 등이다.
웨이 예측(608)은 4 비트 길이일 수 있고, 다음 플로우에 대해 요구되는 정보(VA, GHist, 웨이)를 저장할 가능성이 가장 큰 L1 BTB 웨이(원-핫((one-hot))를 예측하기 위해 사용된다. 웨이 예측(608)의 4 비트들 모두가 설정되는 경우, L1 BTB 및 L2 BTB의 모든 웨이들이 BTB 미스를 확인하기 위해 판독된다.
다시 도 5를 참조하면, BIP 인덱스 예측을 사용하면, 매 사이클마다 하나의 분기되는 분기가 예측된다. BIP(536)가 인덱스들을 획득하고, L1 BTB(526)가 조회된 것과 동일한 방식으로 조회된다. 조회의 결과(예측된 목표 PC(518))가 즉시 (멀티플렉서(520)를 통해) 입력으로 다시 멀티플렉싱되며, 이는 다음 사이클에서 L1 BTB(526)의 다른 조회를 가능하게 한다. 예측된 목표 PC(518)는 L1 BTB(526)에서 나오는 목표 PC(512)보다 덜 정확하지만, 예측된 목표 PC(518)가 정확할 때, 매 사이클마다 하나의 예측이 이루어질 수 있다. 다음 사이클에서, 각각의 예측에 대하여, BIP(536)로부터 나온 "빠른" 예측이 이것이 정확하지 여부를 결정하기 위해 조사된다. 빠른 예측이 정확한 경우, 이것은 폐기될 필요가 없다. 빠른 예측이 부정확한 경우, (멀티플렉서(520)의 출력으로 이것을 선택하지 않음으로써) 빠른 예측이 폐기되며, 매 2 사이클마다 하나의 분기를 예측하는 이전의 거동으로 되돌아간다.
(예를 들어, 분기들이 없는 코드의 섹션에서의) 순차적인 예측들과 함께 존재하는 잠재적인 "문제"는 프로세싱이 계속해서 BIP에 의해 시도된 예측을 겪는다는 것이며, 이는 심지어 예측되어야 할 분기들이 없는 경우에도 2 사이클들을 소요함으로써 프로세싱을 느리게 할 수 있다. 그러나 전체적으로는, 순 성능 이득이 존재한다.
L1 BTB(526)는 페치되는 어드레스의 해시된 버전의 비트들로 인덱싱된다. L1 HP(560)는 예측된 마지막 몇몇 분기들의 히스토리 및 페치되는 어드레스의 조합으로 해시된다. BIP(536)는 이러한 문제에 있어, BIP(536)가 어드레스 비트들 및 히스토리 비트들의 조합으로 해시된다는 점에 있어서 해시 퍼셉트론에 더 가깝다. 히스토리 비트들의 최적 수는 작으며: 예를 들어, 이상에서 언급된 바와 같이, 2개의 히스토리 비트들이 일 구현예에서 사용된다. 히스토리 비트들을 결과로 해시하는 것이 단지 어드레스 비트들만을 사용하는 것보다 더 양호한 예측을 획득하는 것을 돕는다.
BIP(536)으로부터 나오는 예측된 PC(518)는 다음 액세스를 위해 (단순한 어드레스 대신에) BIP(536) 및 L1 BTB(526)로 즉시 피드백되는 인덱스이다. 예측된 인덱스는 BIP(536)으로부터 판독되며, 가능한 어드레스들(528)이 L1 BTB(526)로부터 판독된다. 정보의 부분들 둘 모두가 다음 사이클로 피드백되며, 목표 어드레스(목표 PC(512)) 및 결과적인 인덱스가 예측된 인덱스(예측된 목표 PC(518))와 매칭되는지 여부를 결정하기 위해 (제 1 비교기(534)에서) 비교가 이루어진다.
BIP(536)의 전반적인 트레이닝은 예측 파이프라인 내에서 이루어진다. 예측된 목표 PC(518)가 획득될 때, 인덱스가 이로부터 연산되며, 예측된 목표 PC(518)가 그 인덱스에서 BIP(536)로 다시 기입된다. (예를 들어, 동일한 최근 히스토리에 기초하여) 실행 플로우가 코드 내의 동일한 지점으로 복귀할 때, BIP(536)로부터 판독되는 것은 (코드가 이러한 지점에 있었던 마지막 시간의) 그 시점에서의 지식을 반영한다. 분기가 BIP(536)에 의해 예측된 시간으로부터 트레이닝을 위해 이것이 BIP에 기입될 때까지의 상당히 빠른 턴어라운드(turnaround)가 존재한다. 이러한 것이 이러한 추론적인 구조이고 이것이 정확했는지 또는 부정확했는지 여부가 즉시 확인될 수 있기 때문에, 빠른 트레이닝의 부정적인 면이 크지 않다.
GHist(504) 및 목표 시프트된 GHist(Target GHist_BP2)(544)가 제 4 멀티플렉서(546)에 공급되며, 선택 신호(548)는 전역 히스토리 예측(GHist_BP0)(550)으로서 GHist(504) 또는 목표 시프트된 GHist(544) 중 하나를 선택하기 위해 사용된다. 선택 신호(548)는, EX 유닛 또는 DE 유닛으로부터의 리다이렉트에 기초하거나, 또는 그 이후의 BP 파이프라인으로부터의 더 높은 우선순위의 예측에 기초한다. 선택 신호(548)가 프로세서(500)의 다른 부분으로부터 유래되지만, 명료성의 목적들을 위하여 선택 신호(548)의 잠재적인 소스들로의 연결 라인들이 도시되지 않는다는 것을 주의해야 한다.
제 1 GHist 시프터(540)는 전역 히스토리를 시프트하기 위하여 예측된 GHist 시프트(538)를 적용하고, 예측된 목표 전역 히스토리(Pred Target GHist_BP1)(552)를 생성한다. GHist 예측(550) 및 예측된 목표 GHist(552)가 제 5 멀티플렉서(554)에 공급되고, 선택 신호(556)는 예측된 전역 히스토리(Pred GHist_BP0)(558)로서 GHist 예측(550) 또는 예측된 목표 GHist(552) 중 하나를 선택하기 위해 사용된다. 선택 신호(556)는, EX 유닛 또는 DE 유닛으로부터의 리다이렉트에 기초하거나, 또는 그 이후의 BP 파이프라인으로부터의 더 높은 우선순위의 예측에 기초하거나, 또는 BIP 오예측을 갖는 BP2 사이클 내에 유효한 op가 존재하는지에 기초한다. 선택 신호(556)가 프로세서(500)의 다른 부분으로부터 유래되지만, 명료성의 목적들을 위하여 선택 신호(556)의 잠재적인 소스들로의 연결 라인들이 도시되지 않는다는 것을 주의해야 한다.
예측된 GHist(558)는 L1 해시 퍼셉트론(HP)(560)에 공급되며, 이는 분기/비분기 신호(532)를 생성한다. 분기/비분기 신호(532)가 분기/비분기 GHist 시프터(562)에 제공되며, 이는 분기/비분기 신호(532)를 제 3 멀티플렉서(530)로 전달하고 제 2 비교기(542) 및 제 2 GHist 시프터(566)로 전역 히스토리 시프트 값(GHist shift_BP2)(564)을 생성한다. 제 2 GHist 시프터(566)는 목표 GHist(544)를 생성하기 위하여 GHist 시프트 값(564)를 사용하고, 목표 GHist(544)를 제 4 멀티플렉서(546)로 전달한다.
제 1 비교기(534)는 이들이 매칭되는지 여부를 결정하기 위하여 목표 PC(512)와 예측된 목표 PC(518)를 비교하고, 매칭 값(568)을 AND 게이트(570)로 출력한다. 제 2 비교기(542)는 이들이 매칭되는지 여부를 결정하기 위하여 예측된 GHist 시프트 값(538)과 GHist 시프트 값(564)을 비교하고, 매칭 신호(572)를 AND 게이트(570)로 출력한다. AND 게이트(570)는 BIP 매칭 신호(574)를 출력한다.
비교기들(534, 542) 둘 모두가 매칭을 나타내는 경우, BIP 매칭 신호(574)는 긍정적인 매칭(즉, BIP(536)가 정확한 예측을 생성했다는 것)을 나타내며 어떤 것도 파이프라인으로부터 내보내질 필요가 없다. 비교기들(534, 542) 둘 모두가 매칭을 나타내지 않는 경우, BIP 매칭 신호(574)는 BIP 예측이 부정확했다는 것을 나타내며, 파이프라인으로부터 플로우를 내보내고 BP2 사이클로부터의 목표 어드레스(512)를 다시 BP0 멀티플렉서(510) 내로 피드백한다.
이는 스루풋의 상당한 개선이다. BIP(536)가 없다면, 파이프라인 내에 버블이 존재할 것이다. 분기 예측기의 프론트 엔드가 기계의 스루풋을 제한하고 있는 경우, 매 사이클마다 버블이 존재할 것이다. 구멍을 막는 BIP(536)를 사용함으로써, 명령들의 연속적인 스트림이 존재하며 더 적은 프론트 엔드 버블들이 존재한다. 기계를 가득 찬 상태로 유지하는 것을 도움으로써, 기계가 매 사이클마다 더 많은 명령들을 프로세싱하기 위해 시도함에 따라, BIP를 사용하는 대가는 기계가 더 와이드해질 수록 증가한다.
도 7은 BP 매칭 신호를 생성하기 위해 BIP를 사용하는 방법(700)의 순서도이다. BTB, BIP, 및 HP에서 조회를 수행하기 위해 사용될 인덱스가 생성된다(단계(702)). 다음 단계들(704, 710, 및 712)이 병렬로 수행될 수 있지만, 설명의 목적을 위해 개별적으로 설명된다는 것을 주의해야 한다.
인덱스는 가능한 어드레스들의 세트를 생성하기 위하여 BTB에서 조회를 수행하기 위해 사용된다(단계(704)). 가능한 어드레스들의 세트로부터 목표 PC가 선택된다(단계(706)). 목표 PC는 다음 플로우에서 사용될 인덱스를 생성하기 위해 사용되며(단계(708)), 방법(700)의 이러한 부분은 다음 플로우에 대한 인덱스를 생성하기 위하여 단계(702)로 복귀한다.
인덱스는 또한 예측된 목표 PC 및 전역 히스토리(GHist) 시프트를 생성하기 위하여 BIP에서 조회를 수행하기 위해 사용된다(단계(710)). 인덱스 및 GHist는 분기/비분기 신호를 생성하기 위하여 HP에서 조회를 수행하기 위해 사용된다(단계(712)). GHist는 분기/비분기 신호에 기초하여 갱신되며(단계(714)), 갱신된 GHist가 HP의 후속 조회들에서 사용된다. 분기/비분기 신호는 또한 GHist 시프트를 생성하는데 사용된다(단계(716)).
BTB로부터의 목표 PC 및 BIP로부터의 예측된 목표 PC는 제 1 매칭 신호를 생성하기 위해 비교된다(단계(718)). BIP로부터의 GHist 시프트 및 HP로부터의 GHist 시프트는 제 2 매칭 신호를 생성하기 위해 비교된다(단계(720)). 제 1 매칭 신호 및 제 2 매칭 신호는 BP 매칭 신호를 생성하게 위하여 함께 논리적으로 AND연산되며(단계(722)), 방법이 종료한다(단계(724)).
L1
BTB
웨이
예측기
BIP(536)는 또한, 인덱스 예측과 유사한 방식으로, 이상에서 설명된 바와 같이 L1 BTB 웨이를 예측하기 위해 사용된다. BIP(536)의 출력의 부분(웨이 예측(608))은 결과를 히트시키기 위해 살펴볼 "웨이들"을 알려준다. 예측된 L1 BTB 웨이 외의 모든 웨이들이 L1 BTB 상에서의 판독 전력을 절감하기 위하여 턴 오프된다. (도 5에는 도시되지 않은) L2 BTB 웨이들이 또한 L2 BTB 전력을 절감하기 위하여 턴 오프된다.
L1 BTB 웨이들 전부를 판독하는 것에 더하여 BIP 웨이 예측(608)이 "1111"을 예측하는 경우에 있어, L2 BTB가 파워 업되고 판독된다. 이는 BTB 미스 케이스가 또한 예측되는 것을 가능하게 한다.
L1 BTB 히트가 존재하지 않고, "1111" 조합이 예측되지 않았으며 그에 따라 모든 가능한 BTB 위치들이 탐색된 경우, BTB 미스가 존재한다는 것을 확인하기 위하여 BIP 리플로우(reflow)가 수행된다. 목표 PC로 리다이렉트하는 대신에, 이러한 경우는 그 자체를 취소하며, 그 자체로 다시 L1 리다이렉트를 수행하지만, 전체 L1 BTB 및 전체 L2 BTB가 판독되게끔 하는 강제 판독 조건을 갖는다.
BIP의 이러한 부분에 대한 트레이닝이 더 복잡하다. 현재 플로우로부터의 인덱스가 취해지며, 다음 플로우로 피드백된다. BTB는 인덱스를 가지고 판독되며, 다음 플로우가 BTB에서 히트하는 웨이, 즉, 판독될 웨이가 결정된다.
파이프라인의 말단에서, 이러한 예측을 위해 사용된 인덱스 및 다음 예측의 인덱스 또는 목표가 수집된다. 다음 예측의 인덱스가 BIP 내로 넣어지며, (그 안에서 이것이 히트하는 웨이를 확인하기 위하여) 다음 플로우의 BTB 히트 정보가 수집되고, 그 정보가 이러한 예측과 함께 BIP 내로 기입된다.
제 1 예에 있어서: 코드는 루프 내에 있으며, 주어진 분기는 BTB의 웨이 3에 있다. BIP는 그 인덱스 및 웨이 3을 가리키도록 트레이닝된다. 그러면 루프를 통한 각각의 반복(iteration)에서, 그 결과를 찾기 위하여 BTB의 모든 4개의 웨이들을 판독하는 대신에, 단지 웨이 3만이 판독되도록 요구된다. 예측이 정확할 때, 이것은 히트가 존재할 것을 예측하며, 그 안에 히트가 존재하는 웨이를 예측하고, 비-예측된 웨이들이 파워 오프될 수 있기 때문에, 이것이 전력을 절감한다. L2 BTB 구조는 전체적으로 턴 오프될 수 있으며, 이는 L1 BTB 내에 히트가 존재할 것이 알려지며 그에 따라 L2 BTB가 요구되지 않을 것이기 때문이다.
제 2 예에 있어서: (BTB에 어떠한 어드레스도 저장되는 있지 않은 순차적인 페치들과 같은) BTB에서의 미스가 예측되는 경우에 있어, BIP는 4개의 모든 웨이들을 판독하도록 트레이닝된다. 4개의 모든 웨이들이 BTB로부터 판독되는 경우, 히트들이 존재하지 않았다는 것이 확인될 수 있으며, 이는 BIP 웨이 예측이 유용했다는 표시이다.
BIP가 "웨이 3"을 판독할 것을 나타내고 미스가 존재하는 경우(분기가 다른 웨이들 중 하나 내에 있었을 것이 가능하다는 것을 의미함), 플로우가 모든 웨이들에서 그 분기를 찾기 위해 재수행되어야 한다는 점에서, 부정적인 면이 있다. 일반적으로, BIP 예측이 부정확한 웨이를 가질 때, 이는 또한 부정확한 인덱스를 가지며, 그 결과 플로우가 BIP 인덱스 매칭 메커니즘에 의해 거의 대부분 내보내졌을 것이다.
본원에서 설명된 바와 같은 BIP 웨이 예측기는 캐시 웨이 예측기와 근본적으로 상이하다. BIP의 예측이 그것의 인덱스 예측기의 연속에 더 가까우며, 즉, 인덱스 예측기가 인덱스의 M 비트들을 제공하고, 웨이 예측기가 특정한 웨이로 이를 증대시킨다. BIP에서의 하나의 조회가 하드웨어의 다음 BTB 조회를 지시한다. 따라서 BIP 웨이 예측을 사용하는 하나의 플로우는 하나의 BIP 엔트리를 판독할 것이며, 그러면 이는 판독하기 위한 하나(또는 그 이상의) BTB 웨이(들)를 가리킨다. 반면, 캐시 웨이 예측기는 캐시에 각각의 엔트리에 대한 엔트리를 가지며, 이는 데이터 및 태그와 직렬로 조회된다. N 웨이 세트 결합 캐시에 대하여, 이러한 조회의 결과가 캐시 그 자체에 N개의 엔트리들보다 더 적은 것이 존재한다는 것을 나타낼 것이라는 희망을 가지고, N개의 엔트리들이 웨이 예측기에서 조회될 것이다.
IT 및 IC 파이프들의 분리
도 8은 프로세서(800)의 일 부분 내의 명령 태그(IT) 및 명령 캐시(IC) 파이프라인들의 블록도이다. 도 8은 IT 파이프라인 및 IC 파이프라인을 구현하는 프로세서(800)의 일 부분만을 도시하며; 명료성의 목적을 위해 도 8에 도시되지 않은 프로세서(800)의 다른 엘러먼트들이 존재한다. 도 8의 하단의 라벨들 - IT0, IT1, IT2, IC0, 및 IC1 - 은 상이한 컴포넌트들이 동작하는 IT 파이프라인 및 IC 파이프라인의 사이클을 나타낸다.
예측된 PC(802)는 L1 ITLB(804) 및 uTag 조회 디바이스(806)에 공급된다. L1 ITLB 내에 히트가 존재하는 경우, L1 ITLB는 물리적인 어드레스(PA)(808)를 출력한다. PA(808)는, 제 1 비교기(810), PA 선택 디바이스(812), 태그 조회 디바이스(814), 및 제 2 비교기(816)에 공급된다.
uTag 조회 디바이스(806)는 제 1 비교기(810)에 공급되는 uTag(818)를 생성하기 위하여 예측된 PC(802)를 사용한다. uTag 조회는 IT0 사이클에서 시작되며, IT1 사이클에서 종료된다. 제 1 비교기(810)는 매칭 신호(820)를 생성하기 위하여 PA(808)와 uTag(818)를 비교한다. 매칭 신호(820)는 태그 조회 디바이스(814) 및 웨이 선택 디바이스(822)에 공급된다.
웨이 선택 디바이스(822)는 명령 캐시(826) 내의 웨이(824)를 선택하기 위하여 예측된 PC(802) 및 매칭 신호(820)를 사용한다. 제 1 비교기(810)로부터의 히트 정보는 웨이(824)가 유용한 데이터를 가질 수 있는 IC(826) 내의 웨이라는 것을 나타내며; 히트는 캐시 엔트리의 태그 비트들의 서브세트에 기초한다. PA 선택 디바이스(812)는 선택된 PA(828)를 생성하기 위하여 예측된 PC(802) 및 PA(808)를 사용한다. 명령 캐시(826)는 프로세싱을 위한 명령(830)을 선택하기 위하여 웨이(824) 및 선택된 PA(828)를 사용한다.
태그 조회 디바이스(814)는 제 2 비교기(816)로 공급되는 태그(832)를 선택하기 위하여 PA(808) 및 매칭 신호(820)를 사용한다. 제 2 비교기(816)는 히트 신호(834)를 생성하기 위하여 PA(808)와 태그(832)를 사용한다.
IT2 사이클에서, 태그 조회가 완료된다. 부분적 매칭이 존재하는 모든 것에 대하여, 태그의 나머지가 완전한 매칭이 존재한다는 것을 확인하기 위하여 판독된다. 그러면, 캐시 내의 이러한 위치가 찾아지고 있는 데이터를 갖는 위치라는 것이 확실하게 알려질 것이다. 일반적으로, 부분적 히트는 캐시의 데이터를 판독하는 것을 제어하는데 사용될 수 있는 충분한 정보를 갖는다. 부분적 태그가 복수의 히트들을 야기하는 경우, 각각의 웨이에 대해 판독된 태그의 나머지가 다음 사이클에서 완전하고 검증된 히트 신호를 획득하기 위하여 완전한 어드레스와 비교될 수 있다(이러한 것이 IT 및 IC 파이프라인들이 연결되었을 때 수행되도록 요구되는 것이다). 그 이후, 데이터 어레이(명령 캐시)가 정확한 엔트리를 판독하기 위해 재-판독될 수 있다.
IT 파이프라인의 말단에서, 히트가 존재하는 경우, 그 정보(거기서 발견된 어드레스 및 웨이)를 PRQ에 저장한다. 그 이후, 데이터가 캐시로부터 판독되어야 하며, 완전한 태그 조회가 수행될 필요가 없다. 이전에 히트됐던 인덱스 및 웨이만이 PRQ로부터 판독될 필요가 있으며, 그 정보가 데이터 어레이를 액세스하는데 사용될 수 있다. 따라서 데이터 어레이가 액세스될 때 태그 파이프라인 및 태그 액세스들이 이로부터 분할 수 있다.
캐시 라인의 절반 이상을 획득한 페치들(즉, 긴 페치) 또는 캐시 미스를 가지면, 각각의 어드레스(예측된 PC(802))가 BP 파이프라인으로부터 나타남에 따라 태그 파이프라인이 즉시 실행될 것이다. 그러면, IC 파이프라인은 매 페치에 대하여 (하나 대신에) 2개의 선택들을 수행해야만 하고, 따라서 IC 파이프라인이 독립적으로 선택할 수 있다고 하더라도, 이는 IT 파이프라인에 뒤질 것이다.
(IT 및 IC 파이프라인들의 뒤를 잇는) DE 파이프 라인이 가득 채워지는 경우, (히트 또는 미스를 결정하기 위한) 태그 조회들이 DE 파이프라인으로 데이터를 전송하기 위하여 데이터 어레이를 파워 업하지 않고 계속해서 수행될 수 있다.
IT 파이프라인이 IC 파이프라인에 앞선 몇몇 페치들인 경우, 이점이 존재한다. 현재 캐시 미스가 존재하는 경우, 이는 IT 파이프라인에서 학습된다. 요청이 L2 캐시로 전송되며, 따라서, IC 파이프라인이 그 데이터를 캐치 업(catch up)하고 사용하기를 원할 때, 데이터가 L2 캐시로부터 돌아오는 것이 가능하다(그리고 IT 파이프 라인이 흐르도록 원해지는 경우 이와 함께 일렬로 세워질 수 있다). 다시 말해서, 더 많은 프리페치 거동이 획득될 수 있다.
IT 파이프라인과 IC 파이프라인을 분리하는 것의 영향은 기계의 다른 부분들에서 이루어지는 것과 유사하다. 바꾸어 말하면, 파이프라인들을 분리하는 것이 버블들을 숨기거나 또는 버블들의 영향을 감소시킨다. (각각이 독립적인 이유들을 위해 지연될 수 있는) 2개의 상이한 파이프라인들이 존재하기 때문에, 버블들의 영향이 합산되는 것이 바람직하지 않다. 분리가 없다면, 하나의 파이프라인에 버블이 존재하는 경우, 이는 파이프라인을 통해 다른 종속적인 파이프라인들로 진행할 것이다.
IC 파이프라인이 IT 파이프라인과 함께 즉시 선택되는 경우, 그렇지 않았다면 필요했었을 것보다 데이터 캐시의 더 많은 웨이들이 파워 업되어야 할 것이며, 이는 계속해서 이루어져야 할 것이다. 태그 파이프라인이 데이터 파이프라인을 앞지르자마자, 데이터 파이프라인은 판독되어야 할 필요가 있는 명령 캐시 데이터 어레이들의 부분들을 더 정밀하게 파워 업 할 수 있다.
분리의 부작용은 히트가 존재하였을 수 있는 웨이들 및 인덱스들을 저장하기 위하여 PRQ를 사용하는 것이다. 이에 더하여, 그 라인을 캐시로부터 제거하는 동작이 존재하는 경우, PRQ 내의 히트 표시는 "비 히트(not hit)"로 변경되어야만 한다. 이러한 방식으로 PRQ를 사용하는 것은 오버헤드를 유지하는 어떤 기록(IT 파이프라인의 밖의 정보가 PRQ에 저장됨)을 수반할 것이며, 이는 이러한 기록이 유지될 필요가 없을 것이기 때문이다. 태그 엔트리가 무효화되는 경우, PRQ 내의 엔트리가 또한 무효화되어야 할 것이다.
본원의 개시에 기초하여 다수의 변형들이 가능하다는 것이 이해되어야 한다. 특징들 및 엘러먼트들이 이상에서 특정 조합들로 설명되었지만, 각각의 특징 또는 엘러먼트는 다른 특징들 및 엘러먼트들 없이 단독으로 또는 다른 특징들 및 엘러먼트들과 또는 이들 없이 다양한 조합들로 사용될 수 있다.
제공된 방법은 범용 컴퓨터, 프로세서, 또는 프로세서 코어 내에 구현될 수 있다. 적절한 프로세서들은, 예로서, 범용 프로세서, 전용 프로세서, 통상의 프로세서, 디지털 신호 프로세스(DSP), 복수의 마이크로프로세서들, DSP 코어와 연관된 하나 이상의 마이크로프로세서들, 제어기, 마이크로제어기, 응용 특정 집적 회로(ASIC)들, 필드 프로그램가능 게이트 어레이(FPGA) 회로들, 임의의 다른 유형의 집적 회로(IC), 및/또는 상태 머신을 포함한다. 이러한 프로세서들은, 프로세싱된 넷리스트(netlist)들을 포함하는 다른 매개 데이터 및 하드웨어 기술 언어(hardware description language; HDL) 명령들(이러한 명령들은 컴퓨터 판독가능 매체 상에 저장될 수 있음)의 결과들을 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 프로세싱의 결과들은, 그 다음에 실시예들의 측면들을 구현하는 프로세서를 제조하기 위해 반도체 제조 프로세서에서 사용되는 마스크워크(maskwork)들일 수 있다.
본원에서 제공된 방법들 또는 순서도들이, 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비-일시적인 컴퓨터-판독가능 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어, 또는 펌웨어로 구현될 수 있다. 비-일시적인 컴퓨터-판독가능 매체들의 예들은, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스들, 내부적 하드 디스크들 및 착탈가능 디스크들과 같은 자기 매체들, 자기-광 매체들, 및 CD-ROM 디스크들 및 디지털 다기능 디스크(DVD)들과 같은 광 매체들을 포함한다.
추가적인
실시예들
1. 프로세서로서, 명령 태그(instruction tag; IT) 파이프라인 및, 상기 IT 파이프라인 및 명령 캐시(instruction cache; IC) 파이프라인이 서로 독립적으로 동작할 수 있도록 상기 IT 파이프라인과 통신하지만 상기 IT 파이프라인으로부터 분리된 상기 IC 파이프라인을 포함하는, 프로세서.
2. 실시예 1에 있어서, 상기 IT 파이프라인은, 예측된 어드레스를 수신하고 물리적인 어드레스를 출력하도록 구성된 레벨 1 명령 변환 색인 버퍼(instruction translation lookaside buffer; ITLB); 및 상기 예측된 어드레스를 수신하고 마이크로태그(microtag)를 출력하도록 구성된 마이크로태그 조회 디바이스를 포함하는, 프로세서.
3. 실시예 2에 있어서, 상기 IT 파이프라인은, 상기 ITLB로부터의 상기 물리적 어드레스 및 상기 마이크로태그 조회 디바이스로부터의 상기 마이크로태그의 비교에 기초하여 매칭 신호를 생성하도록 구성된 제 1 비교기를 더 포함하는, 프로세서.
4. 실시예 3에 있어서, 상기 IC 파이프라인은, 상기 예측된 어드레스 및 상기 제 1 비교기로부터의 상기 매칭 신호에 기초하여 명령 캐시 내의 웨이를 선택하도록 구성된 웨이 선택 디바이스를 포함하는, 프로세서.
5. 실시예 4에 있어서, 상기 IC 파이프라인은, 상기 예측된 어드레스 및 상기 ITLB로부터의 상기 물리적 어드레스에 기초하여 물리적인 어드레스를 선택하도록 구성된 물리적 어드레스 선택 디바이스를 더 포함하는, 프로세서.
6. 실시예 5에 있어서, 상기 명령 캐시는 상기 물리적 어드레스 선택 디바이스로부터의 상기 선택된 물리적인 어드레스 및 상기 웨이 선택 디바이스로부터의 상기 선택된 웨이에 기초하여 명령을 선택하도록 구성되는, 프로세서.
7. 실시예 3에 있어서, 상기 IT 파이프라인은, 상기 예측된 어드레스 및 상기 제 1 비교기로부터의 상기 매칭 신호에 기초하여 태그를 선택하도록 구성된 태그 조회 디바이스를 더 포함하는, 프로세서.
8. 실시예 7에 있어서, 상기 IT 파이프라인은, 상기 ITLB로부터의 상기 물리적인 어드레스 및 상기 태그 조회 디바이스로부터의 상기 선택된 태그에 기초하여 히트 신호를 생성하도록 구성된 제 2 비교기를 더 포함하는, 프로세서.
Claims (24)
- 프로세서로서,
상기 프로세서는 프론트 엔드 유닛(front end unit)을 포함하고,
상기 프론트 엔드 유닛은,
분기 예측(Branch Prediction, BP) 파이프 라인(pipeline)과;
입력 프로그램 카운터(input program counter), 이전의 추론적인 부분적 목표 어드레스(prior speculative partial target address), 및 이전의 목표 어드레스(prior target address)에 기초하여, 인덱스(index)를 선택하는 제 1 선택 회로와;
상기 인덱스에 기초하여 제 1 예측된 프로그램 카운터(predicted program counter)를 생성하는 레벨 1(level 1) 분기 목표 버퍼(Branch Target Buffer, BTB)와;
상기 인덱스 및 전역 히스토리(global history)에 기초하여 예측을 생성하는 BTB 인덱스 예측기(BTB Index Predictor. BIP)와, 여기서
상기 예측은 제 2 예측된 프로그램 카운터, 제 1 예측된 전역 히스토리 시프트 값(predicted global history shift value), 및 웨이 예측(way prediction)을 포함하며;
상기 인덱스에 기초하여 제 2 예측된 전역 히스토리 시프트 값 및 분기 성립 신호를 생성하는 레벨 1 해시 퍼셉트론(Hash Perceptron, HP)과, 여기서
상기 분기 성립 신호는 분기 명령이 성립하는지 여부의 추정을 나타내며;
제 1 매칭 신호(match signal)를 생성하기 위해 상기 제 1 예측된 프로그램 카운터와 상기 제 2 예측된 프로그램 카운터를 비교하는 제 1 비교기와;
제 2 매칭 신호를 생성하기 위해 상기 제 1 예측된 전역 히스토리 시프트 값과 상기 제 2 예측된 전역 히스토리 시프트 값을 비교하는 제 2 비교기와, 여기서
상기 제 1 매칭 신호와 상기 제 2 매칭 신호는 병렬로 생성되며; 그리고
상기 제 1 매칭 신호와 상기 제 2 매칭 신호를 비교함으로써 BP 비교 신호를 생성하는 로직 게이트(logic gate)를
포함하고,
상기 BP 파이프라인은 상기 BP 비교 신호에 기초하여 선택적으로 비워지며(flushed),
상기 제 1 예측된 프로그램 카운터와, 상기 예측과, 그리고 상기 분기 성립 신호는 동일한 분기 예측 사이클(branch prediction cycle) 동안 병렬로 생성되는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 BIP는 또한, 상기 예측을 생성하기 위해 상기 인덱스와 상기 전역 히스토리를 결합하는 것을 특징으로 하는 프로세서. - 제2항에 있어서,
상기 BIP는 또한, 상기 인덱스와 상기 전역 히스토리를 결합하기 위해 배타적 논리합 연산(exclusive OR operation)을 수행하는 것을 특징으로 하는 프로세서. - 제2항에 있어서,
상기 BIP는 또한, 상기 인덱스와 상기 전역 히스토리를 결합하기 위해 해시 함수(hash function)를 사용하는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 BIP로부터의 상기 제 2 예측된 프로그램 카운터는, 상기 제 1 선택 회로에 의해 수신되고, 상기 예측 직후의 싸이클에서 상기 이전의 추론적인 부분적 목표 어드레스로서 사용되는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 이전의 추론적인 부분적 목표 어드레스는 상기 BIP로부터 수신되고,
상기 이전의 목표 어드레스는 상기 BTB로부터 수신되는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 프론트 엔드 유닛은 또한,
입력 전역 히스토리로부터의 상기 전역 히스토리, 상기 BIP로부터의 상기 제 1 예측된 전역 히스토리 시프트 값, 그리고 목표 전역 히스토리를 선택하는 제 2 선택 회로를 포함하는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 BTB는 또한, 상기 웨이 예측 이외의 모든 웨이들을 턴 오프(turn off)하는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 BTB는 또한, 직전 사이클로부터의 상기 웨이 예측에 기초하여 웨이를 판독하는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 프로세서는 또한,
상기 BP 파이프라인과 병렬인 명령 태그(Instruction Tag, IT) 파이프라인과; 그리고
상기 IT 파이프라인과 통신하는 명령 캐시(Instruction Cache, IC) 파이프라인을 포함하며,
상기 IC 파이프라인은 상기 IT 파이프라인과 상기 IC 파이프라인이 서로 독립적으로 동작할 수 있도록 상기 IT 파이프라인로부터 분리되어 있는 것을 특징으로 하는 프로세서. - 분기 예측을 수행하기 위한 방법으로서, 상기 방법은,
프로세서의 제 1 선택 회로에 의해, 입력 프로그램 카운터, 이전의 추론적인 부분적 목표 어드레스, 및 이전의 목표 어드레스에 기초하여, 인덱스를 생성하는 단계와;
상기 프로세서의 레벨 1 분기 목표 버퍼(BTB)에 의해, 제 1 예측된 프로그램 카운터를 예측하기 위해 상기 인덱스를 사용하여 상기 BTB에서 조회(lookup)를 수행하는 단계와;
상기 프로세서의 BTB 인덱스 예측기(BIP)에 의해, 상기 인덱스 및 전역 히스토리를 사용하여 상기 BIP에서 조회를 수행함으로써 예측을 예측하는 단계와, 여기서
상기 예측은 제 2 예측된 프로그램 카운터, 제 1 예측된 전역 히스토리 시프트 값, 및 웨이 예측을 포함하며;
상기 프로세서의 레벨 1 해시 퍼셉트론(HP)에 의해, 상기 인덱스를 사용하여 상기 HP에서 조회를 수행함으로써 분기가 성립하는지 여부의 추정을 나타내는 분기 성립 신호 및 제 2 예측된 전역 히스토리 시프트 값을 생성하는 단계와;
상기 프로세서의 제 1 비교기에 의해, 제 1 매칭 신호를 생성하기 위해 상기 제 1 예측된 프로그램 카운터와 상기 제 2 예측된 프로그램 카운터를 비교하는 단계와;
상기 프로세서의 제 2 비교기에 의해, 제 2 매칭 신호를 생성하기 위해 상기 제 1 예측된 전역 히스토리 시프트 값과 상기 제 2 예측된 전역 히스토리 시프트 값을 비교하는 단계와, 여기서
상기 제 1 매칭 신호와 상기 제 2 매칭 신호는 병렬로 생성되며; 그리고
상기 제 1 매칭 신호와 상기 제 2 매칭 신호의 비교에 기초하여 분기 예측(BP) 파이프라인을 선택적으로 비우는 단계를 포함하고,
상기 수행하는 단계, 상기 예측하는 단계, 그리고 상기 HP에 의해 생성하는 단계는 동일한 분기 예측 사이클 동안 병렬로 수행되는 것을 특징으로 하는 분기 예측을 수행하기 위한 방법. - 제11항에 있어서,
상기 예측하는 단계는,
가능한 어드레스들의 세트를 생성하기 위해 상기 인덱스를 사용하는 것과, 그리고
상기 가능한 어드레스들의 세트로부터 상기 제 2 예측된 프로그램 카운터를 선택하는 것을 포함하는 것을 특징으로 하는 분기 예측을 수행하기 위한 방법. - 제11항에 있어서,
상기 방법은 또한, 상기 분기 성립 신호에 기초하여 상기 전역 히스토리를 갱신하는 것을 포함하는 것을 특징으로 하는 분기 예측을 수행하기 위한 방법. - 제11항에 있어서,
상기 제 1 예측된 전역 히스토리 시프트 값은 상기 인덱스를 사용하여 상기 BIP에서 조회를 수행함으로써 예측되는 것을 특징으로 하는 분기 예측을 수행하기 위한 방법. - 제11항에 있어서,
상기 방법은 또한, 상기 BTB에 의해, 상기 인덱스를 사용하여 상기 BIP에서 조회를 수행함으로써 웨이 예측을 예측하는 것을 포함하는 것을 특징으로 하는 분기 예측을 수행하기 위한 방법. - 제15항에 있어서,
상기 방법은 또한, 상기 웨이 예측 이외의 상기 BTB 내의 모든 웨이들을 턴 오프하는 것을 포함하는 것을 특징으로 하는 분기 예측을 수행하기 위한 방법. - 제15항에 있어서,
상기 방법은 또한, 직전 사이클로부터의 상기 웨이 예측에 기초하여 상기 BTB에서 상기 웨이를 판독하는 것을 포함하는 것을 특징으로 하는 분기 예측을 수행하기 위한 방법. - 프로세서에서 분기 예측을 수행하기 위해 범용 컴퓨터에 의한 실행을 위한 명령들의 세트를 저장하는 비-일시적인 컴퓨터-판독가능 저장 매체로서, 상기 명령들의 세트는,
입력 프로그램 카운터, 이전의 추론적인 부분적 목표 어드레스, 및 이전의 목표 어드레스에 기초하여, 인덱스를 생성하기 위한 생성 코드 세그먼트와;
제 1 예측된 프로그램 카운터를 예측하기 위해 상기 인덱스를 사용하여 상기 프로세서의 레벨 1 분기 목표 버퍼(BTB)에서 조회를 수행하기 위한 제 1 수행 코드 세그먼트와;
예측을 예측하기 위해 상기 인덱스를 사용하여 상기 프로세서의 BTB 인덱스 예측기(BIP)에서 조회를 수행하기 위한 제 2 수행 코드 세그먼트와, 여기서
상기 예측은 제 2 예측된 프로그램 카운터, 제 1 예측된 전역 히스토리 시프트 값, 및 웨이 예측을 포함하며;
분기가 성립하는지 여부의 추정을 나타내는 분기 성립 신호 및 제 2 예측된 전역 히스토리 시프트 값을 생성하기 위해 상기 인덱스를 사용하여 상기 프로세서의 레벨 1 해시 퍼셉트론(HP)에서 조회를 수행하기 위한 제 3 수행 코드 세그먼트와;
제 1 매칭 신호를 생성하기 위해 상기 제 1 예측된 프로그램 카운터와 상기 제 2 예측된 프로그램 카운터를 비교하기 위한 제 1 비교 코드 세그먼트와;
제 2 매칭 신호를 생성하기 위해 상기 제 1 예측된 전역 히스토리 시프트 값과 상기 제 2 예측된 전역 히스토리 시프트 값을 비교하기 위한 제 2 비교 코드 세그먼트와, 여기서
상기 제 1 매칭 신호와 상기 제 2 매칭 신호는 병렬로 생성되며; 그리고
상기 제 1 매칭 신호와 상기 제 2 매칭 신호의 비교에 기초하여 분기 예측(BP) 파이프라인을 선택적으로 비우기 위한 비움 코드 세그먼트를 포함하고,
상기 제 1 수행과, 상기 제 2 수행과, 그리고 상기 제 3 수행은 동일한 분기 예측 사이클 동안 병렬로 수행되는 것을 특징으로 하는 비-일시적인 컴퓨터-판독가능 저장 매체. - 제18항에 있어서,
상기 명령들은 디바이스를 제조하기 위해 사용되는 하드웨어 기술 언어(Hardware Description Language, HDL) 명령들인 것을 특징으로 하는 비-일시적인 컴퓨터-판독가능 저장 매체. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361895624P | 2013-10-25 | 2013-10-25 | |
US61/895,624 | 2013-10-25 | ||
PCT/US2014/062107 WO2015061648A1 (en) | 2013-10-25 | 2014-10-24 | Bandwidth increase in branch prediction unit and level 1 instruction cache |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160078380A KR20160078380A (ko) | 2016-07-04 |
KR102077753B1 true KR102077753B1 (ko) | 2020-04-07 |
Family
ID=52993597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167013001A KR102077753B1 (ko) | 2013-10-25 | 2014-10-24 | 레벨 1 명령 캐시 및 분기 예측 유닛에서의 대역폭 증가 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10127044B2 (ko) |
EP (1) | EP3060983B1 (ko) |
JP (1) | JP6523274B2 (ko) |
KR (1) | KR102077753B1 (ko) |
CN (1) | CN106030516B (ko) |
WO (1) | WO2015061648A1 (ko) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160239309A1 (en) * | 2015-02-12 | 2016-08-18 | International Business Machines Corporation | Branch target buffer column predictor |
KR102635965B1 (ko) * | 2015-06-26 | 2024-02-13 | 삼성전자주식회사 | 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법 |
US10402200B2 (en) * | 2015-06-26 | 2019-09-03 | Samsung Electronics Co., Ltd. | High performance zero bubble conditional branch prediction using micro branch target buffer |
US10157137B1 (en) | 2015-09-22 | 2018-12-18 | Apple Inc. | Cache way prediction |
US20170153894A1 (en) * | 2015-11-27 | 2017-06-01 | Arm Limited | Apparatus and method for branch prediction |
US9442726B1 (en) | 2015-12-15 | 2016-09-13 | International Business Machines Corporation | Perceptron branch predictor with virtualized weights |
US10223123B1 (en) * | 2016-04-20 | 2019-03-05 | Apple Inc. | Methods for partially saving a branch predictor state |
US10606599B2 (en) * | 2016-12-09 | 2020-03-31 | Advanced Micro Devices, Inc. | Operation cache |
US10282296B2 (en) | 2016-12-12 | 2019-05-07 | Intel Corporation | Zeroing a cache line |
US10394559B2 (en) | 2016-12-13 | 2019-08-27 | International Business Machines Corporation | Branch predictor search qualification using stream length prediction |
US11281586B2 (en) * | 2017-05-09 | 2022-03-22 | Andes Technology Corporation | Processor and way prediction method thereof |
US10540287B2 (en) * | 2017-05-12 | 2020-01-21 | Samsung Electronics Co., Ltd | Spatial memory streaming confidence mechanism |
US10540181B2 (en) * | 2018-01-19 | 2020-01-21 | Marvell World Trade Ltd. | Managing branch prediction information for different contexts |
US10599437B2 (en) | 2018-01-19 | 2020-03-24 | Marvell World Trade Ltd. | Managing obscured branch prediction information |
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 |
US20190369999A1 (en) | 2018-06-04 | 2019-12-05 | Advanced Micro Devices, Inc. | Storing incidental branch predictions to reduce latency of misprediction recovery |
US10776119B2 (en) * | 2018-06-15 | 2020-09-15 | Marvell Asia Pte, Ltd. | Combined conditional branch and indirect branch target predictor |
US11301253B2 (en) * | 2018-08-10 | 2022-04-12 | Arm Limited | Branch prediction structure indexed based on return address popped from a call-return stack |
US11029959B2 (en) * | 2018-09-04 | 2021-06-08 | Arm Limited | Branch target look up suppression |
CN111507463B (zh) * | 2019-01-30 | 2023-06-20 | 芯立嘉集成电路(杭州)有限公司 | 神经形态的符码处理器及操作所述符码处理器的方法 |
CN110825442B (zh) * | 2019-04-30 | 2021-08-06 | 成都海光微电子技术有限公司 | 一种指令预取方法及处理器 |
US11294681B2 (en) * | 2019-05-31 | 2022-04-05 | Texas Instruments Incorporated | Processing device with a microbranch target buffer for branch prediction using loop iteration count |
CN114003292B (zh) * | 2021-12-30 | 2022-03-15 | 中科亿海微电子科技(苏州)有限公司 | 一种分支预测方法、装置及处理器核 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040225872A1 (en) | 2002-06-04 | 2004-11-11 | International Business Machines Corporation | Hybrid branch prediction using a global selection counter and a prediction method comparison table |
US20110078425A1 (en) | 2009-09-25 | 2011-03-31 | Shah Manish K | Branch prediction mechanism for predicting indirect branch targets |
JP2012173967A (ja) | 2011-02-21 | 2012-09-10 | Nec Corp | 分岐予測装置及び分岐予測方式 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100310581B1 (ko) * | 1993-05-14 | 2001-12-17 | 피터 엔. 데트킨 | 분기목표버퍼의추측기록메카니즘 |
US5604909A (en) | 1993-12-15 | 1997-02-18 | Silicon Graphics Computer Systems, Inc. | Apparatus for processing instructions in a computing system |
US5574871A (en) * | 1994-01-04 | 1996-11-12 | Intel Corporation | Method and apparatus for implementing a set-associative branch target buffer |
JP3599409B2 (ja) * | 1994-06-14 | 2004-12-08 | 株式会社ルネサステクノロジ | 分岐予測装置 |
US7000096B1 (en) * | 2000-08-03 | 2006-02-14 | International Business Machines Corporation | Branch prediction circuits and methods and systems using the same |
US7165169B2 (en) | 2001-05-04 | 2007-01-16 | Ip-First, Llc | Speculative branch target address cache with selective override by secondary predictor based on branch instruction type |
US7203825B2 (en) * | 2001-10-03 | 2007-04-10 | Intel Corporation | Sharing information to reduce redundancy in hybrid branch prediction |
US7082520B2 (en) * | 2002-05-09 | 2006-07-25 | International Business Machines Corporation | Branch prediction utilizing both a branch target buffer and a multiple target table |
US20050216714A1 (en) * | 2004-03-25 | 2005-09-29 | Intel Corporation | Method and apparatus for predicting confidence and value |
US7590830B2 (en) * | 2004-05-28 | 2009-09-15 | Sun Microsystems, Inc. | Method and structure for concurrent branch prediction in a processor |
US7328332B2 (en) * | 2004-08-30 | 2008-02-05 | Texas Instruments Incorporated | Branch prediction and other processor improvements using FIFO for bypassing certain processor pipeline stages |
US7752426B2 (en) * | 2004-08-30 | 2010-07-06 | Texas Instruments Incorporated | Processes, circuits, devices, and systems for branch prediction and other processor improvements |
KR100630702B1 (ko) * | 2004-10-05 | 2006-10-02 | 삼성전자주식회사 | 명령어 캐쉬와 명령어 변환 참조 버퍼의 제어기, 및 그제어방법 |
US7278012B2 (en) * | 2005-06-02 | 2007-10-02 | Qualcomm Incorporated | Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions |
US20070083735A1 (en) * | 2005-08-29 | 2007-04-12 | Glew Andrew F | Hierarchical processor |
US7644258B2 (en) * | 2005-08-29 | 2010-01-05 | Searete, Llc | Hybrid branch predictor using component predictors each having confidence and override signals |
US9405544B2 (en) * | 2013-05-14 | 2016-08-02 | Apple Inc. | Next fetch predictor return address stack |
-
2014
- 2014-10-24 JP JP2016525857A patent/JP6523274B2/ja active Active
- 2014-10-24 EP EP14856053.5A patent/EP3060983B1/en active Active
- 2014-10-24 CN CN201480065959.1A patent/CN106030516B/zh active Active
- 2014-10-24 KR KR1020167013001A patent/KR102077753B1/ko active IP Right Grant
- 2014-10-24 US US14/522,831 patent/US10127044B2/en active Active
- 2014-10-24 WO PCT/US2014/062107 patent/WO2015061648A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040225872A1 (en) | 2002-06-04 | 2004-11-11 | International Business Machines Corporation | Hybrid branch prediction using a global selection counter and a prediction method comparison table |
US20110078425A1 (en) | 2009-09-25 | 2011-03-31 | Shah Manish K | Branch prediction mechanism for predicting indirect branch targets |
JP2012173967A (ja) | 2011-02-21 | 2012-09-10 | Nec Corp | 分岐予測装置及び分岐予測方式 |
Also Published As
Publication number | Publication date |
---|---|
US10127044B2 (en) | 2018-11-13 |
JP6523274B2 (ja) | 2019-05-29 |
CN106030516A (zh) | 2016-10-12 |
EP3060983B1 (en) | 2020-01-08 |
CN106030516B (zh) | 2019-09-03 |
EP3060983A4 (en) | 2017-05-17 |
WO2015061648A1 (en) | 2015-04-30 |
US20150121050A1 (en) | 2015-04-30 |
JP2016534429A (ja) | 2016-11-04 |
EP3060983A1 (en) | 2016-08-31 |
KR20160078380A (ko) | 2016-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102077753B1 (ko) | 레벨 1 명령 캐시 및 분기 예측 유닛에서의 대역폭 증가 | |
US7631146B2 (en) | Processor with cache way prediction and method thereof | |
EP3156896B1 (en) | Single cycle multi-branch prediction including shadow cache for early far branch prediction | |
US10402200B2 (en) | High performance zero bubble conditional branch prediction using micro branch target buffer | |
US7945763B2 (en) | Single shared instruction predecoder for supporting multiple processors | |
US20180101385A1 (en) | Branch predictor that uses multiple byte offsets in hash of instruction block fetch address and branch pattern to generate conditional branch predictor indexes | |
US11687343B2 (en) | Data processing apparatus and method for providing candidate prediction entries | |
US8578141B2 (en) | Loop predictor and method for instruction fetching using a loop predictor | |
CN106681695B (zh) | 提前取出分支目标缓冲器 | |
US20080148020A1 (en) | Low Cost Persistent Instruction Predecoded Issue and Dispatcher | |
US20120166775A1 (en) | Combined level 1 and level 2 branch predictor | |
JP2009048633A (ja) | 分岐先アドレス・キャッシュを備えたプロセッサおよびデータを処理する方法 | |
US11579884B2 (en) | Instruction address translation and caching for primary and alternate branch prediction paths | |
JP2009536770A (ja) | ブロックに基づく分岐先アドレスキャッシュ | |
WO1998012631A1 (en) | A cache line branch prediction scheme that shares among sets of a set associative cache | |
JP2019526873A (ja) | 分岐ターゲットバッファの圧縮 | |
JP2019537163A (ja) | オペレーションキャッシュ | |
CN101681258A (zh) | 使用可变长度指令集处理器中分支目标地址缓存的分支预测 | |
KR101049319B1 (ko) | 분기 타겟 어드레스 캐시에서 룩업들을 감소시키는 방법 및장치 | |
CN106293639B (zh) | 使用微分支目标缓冲器的高性能零气泡条件分支预测 | |
US20040225866A1 (en) | Branch prediction in a data processing system | |
US20190187990A1 (en) | System and method for a lightweight fencing operation | |
US9778934B2 (en) | Power efficient pattern history table fetch in branch predictor | |
US20050027921A1 (en) | Information processing apparatus capable of prefetching instructions | |
US10318303B2 (en) | Method and apparatus for augmentation and disambiguation of branch history in pipelined branch predictors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |