KR101493019B1 - 희소 및 조밀 예측 캐쉬들을 갖는 하이브리드 브랜치 예측 장치 - Google Patents

희소 및 조밀 예측 캐쉬들을 갖는 하이브리드 브랜치 예측 장치 Download PDF

Info

Publication number
KR101493019B1
KR101493019B1 KR1020117007675A KR20117007675A KR101493019B1 KR 101493019 B1 KR101493019 B1 KR 101493019B1 KR 1020117007675 A KR1020117007675 A KR 1020117007675A KR 20117007675 A KR20117007675 A KR 20117007675A KR 101493019 B1 KR101493019 B1 KR 101493019B1
Authority
KR
South Korea
Prior art keywords
cache
branch
entry
instruction
sparse
Prior art date
Application number
KR1020117007675A
Other languages
English (en)
Other versions
KR20110081963A (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 KR20110081963A publication Critical patent/KR20110081963A/ko
Application granted granted Critical
Publication of KR101493019B1 publication Critical patent/KR101493019B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer

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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

마이크로프로세서에 있어서 브랜치 예측을 위한 시스템 및 방법이 개시된다. 하이브리드 장치(hybrid device)는 명령어 캐쉬의 각 엔트리 내의 흔히 있는 작은 개수보다 많지 않은 브랜치들에 대한 브랜치 예측 정보를 희소 캐쉬(sparse cache)에 저장한다. i-캐쉬 라인이 추가의 브랜치들을 포함하는 흔치않은 경우에 대하여, 장치는 해당 브랜치 예측 정보를 조밀 캐쉬(dense cache)에 저장한다. 희소 캐쉬의 각 엔트리는 해당 명령어 캐쉬 라인이 추가의 브랜치 명령어들을 포함하는지 여부를 표시하는 비트 벡터(bit vector)를 저장한다. 이 표시는 저장공간으로서 조밀 캐쉬의 엔트리를 선택하는데에도 역시 이용될 수 있다. 제2 희소 캐쉬는 제1 희소 캐쉬로부터 퇴거(evicted) 엔트리 전부를 저장한다.

Description

희소 및 조밀 예측 캐쉬들을 갖는 하이브리드 브랜치 예측 장치{HYBRID BRANCH PREDICTION DEVICE WITH SPARSE AND DENSE PREDICTION CACHES}
본 발명은 마이크로프로세서와 관련되고, 더욱 상세하게는 브랜치 예측 메카니즘(branch prediction mechanism)과 관련된다.
현대 마이크로프로세서들은 하나 이상의 프로세서 코어들 또는 프로세서들을 포함할 수 있으며, 각 프로세서는 소프트웨어 응용프로그램(software application)의 명령어(instruction)들을 수행할 수 있다. 이러한 프로세서들은 전형적으로 파이프라인(pipeline) 구조를 가지고, 파이프라인 단계(pipeline stage)들 사이에 놓여지는 저장 소자들(예컨대 레지스터와 어레이)과 직렬로 연결되는 하나 이상의 데이터 처리 단계들을 포함한다. 한 단계의 출력은 한 클럭 사이클(clock cycle) 내지 위상(phase)을 정의하는 클록 신호의 천이(transition)(클럭 사이클의 일부분일 수도 있음) 동안에 다음 단계의 입력으로 된다. 파이프라인은 명령어 처리과정의 각 부분들이 수행되는 임의의 개수의 단계들로 나누어질 수 있지만, 일반적으로 명령어 처리과정은 명령어 펫치(fetch) 단계, 명령어 디코딩(decoding) 단계, 명령어 실행(execution) 단계 그리고 명령어에 의해 확인되는 목적지에 실행된 결과를 저장하는 단계들을 포함한다.
이상적으로, 매 클럭 사이클마다 파이프라인의 각 단계에서 명령어가 유용하게 실행된다. 하지만, 파이프라인에서 스톨(stall)은 특정 파이프라인 단계 동안 유용한 작업이 수행되지않게 할 수도 있다. 일부 스톨들은 수 클럭 사이클 동안 지속될 수도 있고 프로세서의 성능을 상당히 감소시킬 수도 있다. 스톨의 예들에는 데이터 캐쉬(data cache) 또는 명령어 캐쉬 미스(instruction cache miss), 명령어들간의 데이터 의존성(dependency) 그리고 잘못 예측된 브랜치 명령어와 같은 제어 흐름(control flow)의 예측 오류(misprediction) 등이 있다.
스톨이 프로세서 성능에 미치는 부정적인 영향은 파이프라인 단계들을 오버랩(overlap)시킴으로써 감소될 수도 있다. 다른 기법은 명령어의 비순차적 실행(out-of-order execution)을 가능하게 하는 것인데, 데이터 의존성 스톨을 감소시키는 데에 도움이 된다. 게다가, 수퍼스칼라(superscalar) 구조를 가진 코어는 동적 스케쥴링(dynamic scheduling)에 기하여 가변 개수의 명령어들을 내보낸다. 하지만, 순차적 리타이어먼트(in-order retirement)는 모든 스톨 사이클들의 은폐(hiding)를 막을 수도 있는데 이로 인해 여러 클럭 사이클의 스톨이 여전히 프로세서의 성능을 감소시킨다. 그러므로, 성능 손실을 감소시키는 또 다른 방법은 다중 사이클(multi-cycle) 스톨의 발생을 감소시키는 것이다. 이러한 다중 사이클 스톨의 한 원인이 브랜치 명령어와 같은 제어 흐름 명령어의 예측 오류이다.
브랜치 명령어는 조건부(conditional) 또는 무조건부(unconditional) 그리고 직접(direct) 또는 간접(indirect)과 같이 많은 유형을 포함한다. 조건부 브랜치 명령어는 명령어 스트림(instruction stream)에서 어느 경로를 수행할지를 결정하는 기능을 수행한다. 브랜치 명령어에서 명령어 내에 인코딩되어 있는 특정 조건이 만족되지 않았다고 결정되면, 브랜치 명령어는 낫테이큰(not-taken)으로 여겨지고 프로그램 순서에서 그 다음 순서의 명령어가 수행된다. 하지만, 브랜치 명령어에서 특정 조건이 만족된 것으로 결정되면, 브랜치 명령어는 테이큰(taken)으로 여겨진다. 따라서, 프로그램 순서에서 바로 그 다음 순서의 명령어가 아니라 브랜치 타겟 어드레스(target address)에 위치한 명령어가 그 다음으로 수행된다. 무조건부 브랜치 명령어는 항상 테이큰으로 여겨지는 조건부 브랜치 명령어로 고려되어진다. 명령어 내에 테스트될 특정 조건이 없으며, 다음 명령어가 순차적인 순서가 아니라 항상 전혀 다른 순서에서 실행된다.
게다가, 브랜치 타겟 어드레스는 브랜치 명령어 자체 내에 저장될 수도 있는 옵셋(offset)으로 특정될 수도 있는데, 이 옵셋은 프로그램 카운터(program counter, PC) 레지스터에 저장되는 선형 어드레스(linear address) 값에 상대적이다. 이러한 유형의 브랜치 타겟 어드레스를 직접(direct)이라고 한다. 브랜치 타겟 어드레스는 또한 레지스터 또는 메모리 내의 값에 의하여 특정될 수도 있는데, 레지스터나 메모리 위치는 브랜치 명령어 내에 저장될 수 있다. 이러한 유형의 브랜치 타겟 어드레스를 간접(indirect)이라고 한다. 또한, 간접 브랜치 명령어에서, 브랜치 타겟 어드레스를 특정하는 레지스터는 서로 다른 값들로 로드(load)될 수도 있다.
무조건부 간접 브랜치 명령어의 예들에는 프로그램 코드 내에서 서브루틴(subroutine)을 구현하기 위해 이용될 수 있는 프로시져 호출(procedure call)이나 반환(return)이 포함되는데, 이들에는 브랜치 타겟 어드레스를 주기 위해 반환 어드레스 스택(return address stack, RAS)이 이용될 수도 있다. 또 다른 예는 switch-case 문(statement)을 구현하기 위해 이용될 수 있는 간접 점프(jump) 명령어이고, switch-case 문은 C++나 자바(Java)와 같은 객체지향 프로그램에서 빈번히 이용된다.
조건부 브랜치 명령어의 한 예는 프로그램 코드 내의 루프(예컨대, "for"나 "while" 루프 구조)를 구현하기 위해 이용될 수도 있는 브랜치 명령어이다. 조건부 브랜치 명령어는 테이큰으로 여겨지기 위해서는 특정 조건을 만족해야 한다. 특정 조건의 한 예는 특정 레지스터가 영(zero)의 저장값을 가지고 있는지가 될 수 있다. 이 특정 레지스터는 조건부 브랜치 명령어 내에 인코딩된다. 소프트웨어 응용프로그램 코드 안의 명령어들로 인해 생기는 루프 내에서 이 특정 레지스터의 저장된 값이 계속 감소될 수도 있다. 특정 레지스터의 출력은 전용 영검출 조합형 로직(zero detect combinational logic)으로 입력될 수 있다.
더욱이, 조건부 브랜치 명령어들은 서로 간에 약간의 의존성을 가질 수 있다. 예를 들면, 프로그램에 다음과 같은 간단한 경우가 있을 수 있다.
if(value==0) value==1;
if(value==1)
위의 경우를 구현하기 위해 이용될 조건부 브랜치 명령어들은 조건 예측의 정확도를 개선하기 위해 이용될 수도 있는 글로벌 히스토리(global history)를 가질 것이다. 한 실시예에서는, 예측이 2 비트 카운터로 구현될 수 있다. 브랜치 예측에 대해서는 다음에 더욱 상세히 설명한다.
현대 마이크로프로세서에서는 브랜치 명령어 조건의 결과가 결정되고 브랜치 타겟 어드레스가 결정되기 위해서 다중 클럭 사이클이 필요할 수 있다. 특정한 파이프라인에서 실행되고 있는 특정한 쓰레드(thread)에 대하여, 브랜치 명령어가 디코딩되어 조건 결과와 브랜치 타겟 어드레스 모두를 알 때까지 브랜치 명령어나 그 뒤의 명령어들에 의해 유용한 작업이 수행되지 않을 수도 있다. 이러한 스톨 사이클들은 프로세서의 성능을 감소시킨다.
스톨이 아니라, 명령어가 펫치된 직후 조건부 브랜치의 조건과 브랜치 타겟 어드레스의 예측이 이루어질 수 있다. 언제 예측이 준비되는지에 관한 정확한 단계는 파이프라인 구현에 따라 결정된다. 브랜치 조건을 예측하기 위해서, 명령어 캐쉬(i-cache)와 같은 메모리로부터 명령어를 펫치하기 위해 이용되는 PC가 브랜치 예측 로직을 인덱스(index)하는데에 이용될 수 있다. PC를 이용하는 초기의 결합 예측 방식(combined prediction scheme)의 한 예가 Digital Western Research Laboratory Technical Note TN-36에 기재된 Scott McFarling의 1993년 논문인 "Combining Branch Predictors"에서 기술되어 있는 지셀렉트(gselect) 브랜치 예측 방법이고, 본 명세서에서 전체로서 참조하여 원용한다. PC에 저장된 선형 어드레스가 해싱 함수(hashing function)에서 글로벌 히스토리 레지스터에 저장된 값과 결합될 수 있다. 해싱 함수의 출력과 PC가 패턴 히스토리 테이블(pattern history table, PHT), 브랜치 타겟 버퍼(branch target buffer, BTB) 등과 같은 예측 테이블들을 인덱스하는데에 이용될 수 있다. 글로벌 히스토리 레지스터를 테이큰이나 낫테이큰이 아닌 현재 브랜치 명령어의 브랜치 타겟 어드레스 정보로 업데이트함으로써 조건부 브랜치 방향 예측(예컨대 테이큰 및 낫테이큰 결과 예측) 및 BTB 예측이나 간접 타겟 어레이 예측과 같은 간접 브랜치 타겟 어드레스 예측 모두의 예측 정확도가 증가될 수 있다. 많은 다른 방법들이 브랜치 예측 메카니즘의 다양한 실시예들에 포함될 수 있다.
브랜치 예측의 높은 정확도는 마이크로프로세서의 전력효율이나 성능을 향상시키는 데에 기여한다. 예측된 명령어 스트림으로부터의 명령어들은 브랜치 명령어가 실행되기 전에 투기적으로(speculatively) 실행될 수 있고, 어떤 경우라도 브랜치 명령어가 실행되기 전에 프로세서의 파이프라인에 놓여진다. 예측된 명령어 스트림이 맞다면, 클럭 사이클당 실행되는 명령어들의 수는 증가한다. 하지만, 예측된 명령어 스트림이 틀리다면(예컨대 하나 이상의 브랜치 명령어들이 잘못 예측되면), 잘못 예측된 명령어 스트림으로부터의 명령어들은 파이프라인에서 버려지고 클럭 사이클당 실행되는 명령어들의 수는 감소한다.
종종, 브랜치 예측 메카니즘은 특정 브랜치 명령어에 대하여 더 정확하게 동작하도록 하기 위해 이전에 실행된 브랜치 명령어들의 히스토리를 포함한다. 이러한 브랜치 예측 히스토리를 위해 브랜치 명령어에 부합하는 데이터를 저장장치에 가지고 있을 것이 전형적으로 요구된다. 또한, 브랜치 타겟 버퍼(BTB)도 타겟 어드레스 예측에 사용되는 타겟 어드레스들을 전체적으로 또는 부분적으로 저장하는데에 이용될 수 있다. 히스토리 및 어드레스 정보를 포함하는 브랜치 예측 데이터가 저장장치로부터 퇴거되거나(evicted) 아니면 상실되는 경우에는, 나중에 브랜치 명령어에 대한 데이터가 재생성될 필요가 있을 수 있다.
위 문제에 대한 하나의 해결책은 브랜치 예측 저장장치의 크기를 늘리는 것일 수 있다. 하지만, 브랜치 예측 저장장치의 크기를 늘리는 것은 게이트 면적과 브랜치 예측 메카니즘의 크기에 있어서 상당한 증가를 요구할 수 있다. 결과적으로, 게이트 면적과 전력 소모를 감소시키기 위하여 브랜치 예측 저장장치의 크기를 감소시킴으로써, 브랜치 동작에 관한 귀중한 데이터가 퇴거될 수도 있고 재생성되어야 한다.
위의 상황에 비추어, 브랜치 예측 메카니즘의 게이트 수 내지는 크기에 있어서 상당한 증가가 요구되지 않으면서 브랜치 예측 능력을 개선하기 위한 효율적인 방법 및 메카니즘이 요구된다.
마이크로프로세서에 있어서 브랜치 예측을 위한 시스템 및 방법이 고려된다.
한 실시예에서는, 마이크로프로세서 내의 하이브리드 브랜치 예측 장치가 제공된다. 명령어 캐쉬(i-캐쉬)의 각 엔트리 내의 미리 결정된 개수의 브랜치들에 대한 브랜치 예측 정보를 위한 저장공간을 할당하는 것이 아니라, 하이브리드 장치는 명령어 캐쉬의 각 엔트리 내에 있는 보통의 작은 개수보다 많지 않은 브랜치들을 위한 제1 저장장치에 브랜치 예측 정보를 저장한다. i-캐쉬 라인이 추가의 브랜치들을 포함하는 좀 더 흔치않은 경우에 대하여, 장치는 해당 브랜치 예측 정보를 제2 저장장치에 저장한다.
또한 희소 캐쉬(sparse cache)와 조밀 캐쉬(dense cache)를 포함하는 하이브리드 브랜치 예측 장치도 고려된다. 희소 캐쉬의 각 엔트리는 명령어 캐쉬의 엔트리 또는 캐쉬 라인에 해당된다. 이들 해당 엔트리는 명령어 펫치 리퀘스트(request) 동안에 프로세서로부터 보내지는 동일한 어드레스에 의해 선택될 수 있다. 희소 캐쉬의 각 엔트리는 명령어 캐쉬 라인 내의 미리 결정된 개수보다 많지 않은 브랜치 명령어들에 대한 브랜치 예측 정보를 저장한다. 또한, 각 엔트리는 이 명령어 캐쉬 라인이 추가의 브랜치 명령어들을 포함할 수 있는지 여부에 대하여 비트 벡터와 같은 표시를 저장한다. 이 표시는 또한 추가의 브랜치에 대한 브랜치 예측 정보를 저장하기 위한 조밀 캐쉬의 엔트리를 선택하는데에 이용될 수도 있다. 하이브리드 브랜치 예측 장치는 또한 제1 희소 캐쉬로부터 퇴거 엔트리들을 저장하기 위해 제2 희소 캐쉬도 포함한다. 전체 엔트리는 저장되므로 어떠한 브랜치 예측 정보도 상실되지 않고 이후에 재생성될 필요가 없다.
도 1은 프로세서 코어의 한 실시예에 대한 일반화된 블록선도이다.
도 2는 브랜치 예측 유닛(unit)의 한 실시예를 예시한 일반화된 블록선도이다.
도 3은 i-캐쉬 저장장치의 배치에 대한 한 실시예를 예시한 일반화된 블록선도이다.
도 4는 하이브리드 브랜치 예측법을 갖는 프로세서 코어의 한 실시예를 예시한 일반화된 블록선도이다.
도 5는 브랜치 예측 유닛의 한 실시예를 예시한 일반화된 블록선도이다.
도 6은 희소(sparse) 캐쉬 저장장치의 배치에 대한 한 실시예를 예시한 일반화된 블록선도이다.
도 7은 조밀(dense) 브랜치 캐쉬 저장장치의 배치에 대한 한 실시예를 예시한 블록선도이다.
도 8은 브랜치 예측을 효율적으로 개선하기 위한 방법의 한 실시예에 대한 흐름도이다.
본 발명은 다양한 형태로 변경가능하고 대체가능할 수 있지만, 구체적인 실시예들이 도면에서 예로서 도시되고 본 명세서에서 상세히 설명된다. 하지만, 도면과 상세한 설명은 본 발명을 개시된 특정 형태로 제한하고자 하는 것이 아니라, 반대로 본 발명이 첨부된 청구항들에 의해서 정의되는 본 발명의 사상 및 범위 내에 속하는 모든 변경들, 균등물들 및 대체물들을 커버하고자 하는 것이라는 것을 이해하여야 한다.
아래의 설명에서, 본 발명의 완전한 이해를 돕기 위하여 많은 구체적 세부사항들이 제시된다. 하지만, 본 기술분야의 통상의 기술자는 본 발명이 이러한 구체적 세부사항들 없이 실시될 수도 있다는 것을 인지하여야 한다. 일부 경우들에서는, 잘 알려진 회로들, 구조들 및 기법들은 본 발명을 모호하게 하지 않기 위하여 상세히 소개되지 않았다.
도 1을 참조하면, 비순차적 실행(out-of-order execution)을 수행하는 프로세서 코어(100)의 일반화된 블록선도에 대한 실시예가 도시되어 있다. 코어(100)는 미리 정의된 명령어 세트 아키텍쳐(instruction set architecture, ISA)에 따라 명령어들을 실행하기 위한 회로망을 포함한다. 예를 들면, x86 명령어 세트 아키텍쳐가 선택될 수도 있다. 그 대신에, 임의의 다른 명령어 세트 아키텍쳐가 선택될 수도 있다. 한 실시예에서는, 코어(100)가 단일 프로세서 구성(single-processor configuration)에 포함될 수도 있다. 다른 실시예에서는, 코어(100)가 다중 프로세서 구성(multi-processor configuration)에 포함될 수도 있다. 또 다른 실시예에서는, 코어는 다중 노드(multi-node) 시스템의 프로세싱 노드 내의 다중 코어 구성에 포함될 수도 있다.
명령어 캐쉬(i-캐쉬)(102)는 소프트웨어 응용프로그램을 위한 명령어들을 저장할 수 있고 데이터 캐쉬(d-캐쉬)(116)는 명령어들에 의해 수행되는 계산에서 사용되는 데이터를 저장할 수 있다. 일반적으로 말하자면, 캐쉬는 하나 이상의 블록(block)들을 저장할 수 있고, 각 블록은 시스템 메모리(그림에 없음)의 해당 어드레스에 저장된 데이터의 복사본이다. 본 명세서에서 사용된 것처럼, "블록(block)"은 연속된 메모리 위치들에 저장된 바이트(byte)들의 집합이며, 일관성(coherency)을 위해 하나의 단위로서 취급된다. 일부 실시예들에서는, 또한 캐쉬에서 블록을 할당(allocation)하고 반환(deallocation)하는 단위가 될 수도 있다. 한 블록 내의 바이트 수는 설계시의 선택에 따라 달라질 수도 있고, 임의의 크기일 수도 있다. 한 예로서, 32 바이트 및 64 바이트가 자주 사용된다.
도시된 캐쉬들(102,116)은 프로세서 코어(100) 내에 집적될 수도 있다. 대신에, 캐쉬들(102,116)은 원한다면 백사이드 캐쉬(backside cache) 구성이나 인라인(inline) 구성으로 코어(100)에 연결될 수도 있다. 또한, 캐쉬들(102,116)은 캐쉬들의 계층구조(hierarchy)로서 구현될 수도 있다. 한 실시예에서는, 캐쉬들(102,116)이 각각 L1과 L2 캐쉬에 해당할 수도 있다. 또 다른 실시예에서는, 캐쉬들(102,116)이 L3 캐쉬 구조로서 구현되는 또 다른 캐쉬(그림에 없음)를 공유할 수도 있다. 대신에, 캐쉬들(102,116) 각각이 L1 캐쉬 구조에 해당할 수도 있고 공유 캐쉬(shared cache) 구조는 L2 캐쉬 구조일 수도 있다. 원한다면 다른 조합들이 가능하고 선택될 수도 있다.
캐쉬들(102,116)과 임의의 공유 캐쉬들은 해당 캐쉬 컨트롤러에 연결되는 캐쉬 메모리를 각각 포함할 수 있다. 코어(100)가 다중 코어 시스템에 포함된다면, 메모리 컨트롤러(그림에 없음)는 패킷들을 라우팅하고, 데이터 처리를 위해 패킷들을 받고, 코어 내의 로직에서 사용되는 내부 클럭에 패킷들을 동기화하기 위해 이용될 수 있다. 또한, 다중 코어 시스템에서, 메모리 블록의 다중 복사본이 다중 프로세서들의 다중 캐쉬들에 존재할 수도 있다. 따라서, 캐쉬 일관성(cache coherency)을 위한 회로가 메모리 컨트롤러에 포함될 수도 있다. 주어진 블록이 하나 이상의 캐쉬에 저장될 수도 있고 나아가 캐쉬된 복사본(cached copy)들 중 하나가 메모리 시스템 내의 복사본에 비해 수정될 수도 있기 때문에, 컴퓨팅 시스템은 보통 캐쉬와 메모리 시스템 간에 일관성을 유지한다. 한 블록의 업데이트가 미리 정의된 일관성 프로토콜(coherency protocol)에 따라 다른 캐쉬들의 복사본에 반영된다면 일관성이 유지된다. 여러 구체적인 일관성 프로토콜들이 잘 알려져 있다.
i-캐쉬 미스가 없다면 명령어 펫치 유닛(instruction fetch unit, IFU)(104)은 i-캐쉬(102)로부터 클럭 사이클당 복수의 명령어들을 펫치할 수 있다. IFU(104)는 i-캐쉬(102)로부터 펫치할 다음 명령어들의 어드레스를 가리키는 포인터를 가지고 있는 프로그램 카운터(PC) 레지스터를 포함할 수 있다. 브랜치 예측 유닛(122)은 IFU(104)에 연결될 수도 있다. 유닛(122)은 바로 순차적으로 다음 명령어를 수행하는 것에서 명령어 스트림의 흐름을 바꾸는 명령어들의 정보를 예측하도록 구성될 수 있다. 예측 정보의 한 예에는 순차적으로 다음 명령어가 실행되어야 할지 또는 명령어 스트림 내의 새로운 위치에 있는 명령어가 다음에 실행되어야 할지를 결정하는 조건이 만족되었는지 여부에 대해 예측하는 1 비트값이 포함될 수 있다. 예측 정보의 또 다른 예는 다음에 실행될 명령어로서 순차적으로 다음 명령어와는 다른 명령어의 어드레스일 수 있다. 실제 결과와 예측이 맞았는지 여부에 대한 결정은 이후 파이프라인 단계에서 이루어질 수 있다. 또한, 대체가능한 실시예에서는, IFU(104)와 유닛(122)이 두 개의 분리된 유닛들로 구현되는 것이 아니라, IFU(104)가 유닛(122)을 포함할 수도 있다.
디코더 유닛(106)은 복수의 펫치된 명령어들의 오피코드(opcode)를 디코딩한다. 디코더 유닛(106)은 재정렬 버퍼(reorder buffer)(118)와 같은 순차적 리타이어먼트 큐(retirement queue), 레저베이션 스테이션(108) 및 로드/스토어 유닛(114)에 엔트리(entry)들을 할당할 수 있다. 레저베이션 스테이션(108)에 엔트리들을 할당하는 것은 디스패치(dispatch)로 여겨진다. 레저베이션 스테이션(108)은 명령어들이 그들의 오퍼런드(operand)가 이용가능해질 때까지 기다리는 명령어 큐로서 역할할 수 있다. 오퍼런드들이 이용가능하고 하드웨어 자원(resource)도 역시 이용가능할 때, 명령어는 레저베이션 스테이션(108)으로부터 정수 및 부동 소수점 기능 유닛(integer & floating point functional unit)(110) 또는 로드/스토어 유닛(114)으로 비순차적으로 내보내질 수 있다. 기능 유닛(110)은 덧셈, 뺄셈, 곱셈, 나눗셈 및 제곱근과 같은 컴퓨터 계산을 위한 연산 로직 유닛(arithmetic logic unit, ALU)을 포함할 수 있다. 브랜치 명령어의 결과를 결정하고 계산된 결과를 예측된 값과 비교하기 위한 로직이 포함될 수도 있다. 매치(match)가 없으면 예측 오류가 발생한 것이고, 브랜치 명령어 후의 뒤이은 명령어들은 제거되어야 하고 올바른 PC 값으로 새로운 펫치가 수행되어야 한다.
로드/스토어(load/store) 유닛(114)은 메모리 액세스 명령어를 실행하기 위해 큐와 로직을 포함할 수 있다. 또한 로드 명령어가 최근에 올바르게 수행된 스토어 명령어로부터 전달(forward)되었거나 바이패스(bypass)된 데이터를 받았는지를 확실히 하기 위해 검증 로직(verification logic)이 로드/스토어 유닛(114)에 있을 수도 있다.
기능 유닛(110)과 로드/스토어 유닛(114)으로부터의 결과들이 공용 데이터 버스에 보내질 수 있다. 이 결과들은 재정렬 버퍼(118)에 보내질 수도 있다. 여기서, 그 결과들을 받고, 리타이어먼트라고 표시되며, 큐(queue)의 헤드(head)에 오게되는 명령어는 그 결과들을 레지스터 파일(register file)(120)로 보낼 수도 있다. 레지스터 파일(120)은 구조적으로 프로세서 코어(100)의 범용 레지스터(general-purpose register)들로 기능할 수 있다. 한 실시예에서는, 레지스터 파일(120)은 32개의 32-비트 레지스터들을 포함할 수 있다. 그리고 나서 재정렬 버퍼 내의 명령어가 순차적으로 리타이어(retire)될 수 있고 큐의 헤드 포인터는 프로그램 순서에서 바로 다음 명령어를 가리키도록 조정될 수 있다.
공용 데이터 버스(112) 상의 결과들은 그 결과들을 기다리는 명령어들의 오퍼런드에 값을 전달하기 위하여 레저베이션 스테이션으로 보내질 수도 있다. 기다리고 있는 이들 명령어가 오퍼런드에 대한 값들을 갖게 되고 하드웨어 자원이 명령어들을 수행하기 위해 이용가능해지면, 이들 명령어들은 레저베이션 스테이션(108)로부터 기능 유닛(110)이나 로드/스토어 유닛(114)의 적절한 자원들로 비순차적으로 보내진다. 공용 데이터 버스(112) 상의 결과들은 제어 흐름 예측 정보 및/또는 PC값을 업데이트하기 위해 IFU(104)와 브랜치 예측 유닛(122)으로 보내질 수도 있다.
도 2는 브랜치 예측 유닛(200)의 한 실시예를 예시한 것이다. 명령어의 어드레스는 프로그램 카운터 레지스터(PC)(210)에 저장된다. 한 실시예에서는, 어드레스가 32-비트 또는 64-비트 값일 수도 있다. 글로벌 히스토리 쉬프트 레지스터(GSR)(240)는 수개의 마지막 조건부 브랜치 명령어들의 예측 결과들에 대한 최근 히스토리를 포함할 수 있다. 한 실시예에서는, GSR(240)은 하나의 엔트리를 가지는 10-비트 쉬프트 레지스터일 수도 있다. 다른 실시예에서는, GSR(240)이 다른 개수의 비트들을 포함할 수도 있다. GSR(240)에 저장되는 정보는 글로벌 히스토리를 이용하여 현재 조건부 브랜치 명령어의 조건이 만족되었는지 여부를 예측하는데 이용될 수 있다. 예를 들면, 한 실시예에서는, GSR(240)이 프로그램 실행에서 마지막 10개의 조건부 브랜치 명령어들에 대해 1-비트의 테이큰/낫테이큰 결과들을 가지고 있는 10-비트 쉬프트 레지스터일 수도 있다. 한 실시예에서는, 논리값 "1"이 테이큰 결과를 가리키고 로직 "0"이 낫테이큰 결과를 가리킬 수도 있고, 또는 그 반대의 경우일 수도 있다. 게다가, 대체적인 실시예에서는, 브랜치별 기준(per-branch basis)에 해당하거나 브랜치 히스토리를 갖는 테이블 내의 결합 브랜치 히스토리(combined branch history)에 해당하는 정보가 GSR(240)에 이용될 수도 있다. 브랜치 예측에 이용되는 글로벌 히스토리 정보를 제공하기 위하여 하나 이상의 브랜치 히스토리 테이블(BHT)들이 이러한 실시예들에서 이용될 수도 있다.
충분한 어드레스 비트들(예컨대 PC(210)에 저장된 현재 브랜치 명령어의 PC값)이 현재 브랜치 명령어를 확인하는데 이용된다면, GSR(240)에 저장된 글로벌 히스토리와 함께 이 비트들을 해싱하여 이들 중 하나의 요소만을 가질 때보다 더 유용한 예측정보를 가질 수 있다. 한 실시예에서는, PC의 하위 10개 비트와 GSR의 10개 비트가 해싱될 수도 있다. 대체 실시예에서는, PC의 하위 10개 비트가 아닌 비트들, 가능한 연속적인 비트들이 GSR의 비트들과 해싱될 수도 있다. 또한, GSR(240)의 여러 부분들이 PC(210)와 분리되어 해싱될 수도 있다. 예를 들면, 26-비트 GSR(240)이 제1 해싱 함수에서 하위 13개 비트가 PC(210)와 결합될 수도 있고 제2 해싱 함수에서 상위 13개 비트가 PC(210)와 결합될 수도 있다. 그런 다음 두 개의 별도의 출력들이 예측 로직 및 테이블(260)로 전달될 수도 있다. 수많은 이러한 대안들이 가능하고 고려된다.
한 실시예에서는, PC 비트들과 GSR 비트들의 해싱이 비트들의 접합(concatenation)을 포함할 수도 있다. 대체 실시예에서는, 해싱 함수의 결과가 PC 비트들과 GSR 비트들의 배타적 논리합(exclusive OR)을 포함할 수도 있다. 해싱 로직(250)에서 수행되는 다른 해싱 함수들은 하나 이상의 패턴 히스토리 테이블(PHT)들 및/또는 예측 로직(260)에 포함된 다른 테이블의 인덱스를 결정하는데 이용될 수도 있다. 한 실시예에서는, PC만으로 예측 로직(260) 내의 BTB를 인덱스하는데 이용될 수도 있다. 본 명세서에서 이용되는 것처럼, 참조 번호 뒤에 문자가 따라오는 참조 요소들은 참조 번호만으로 총괄적으로 참조될 수도 있다. 예를 들면, 예측 테이블들 중에서 262a 내지 262d는 262로서 총괄적으로 참조될 수도 있다.
한 실시예에서는, 예측 테이블(262)이 조건부 브랜치를 위한 PHT일 수도 있고, PHT의 각 엔트리는 2-비트 카운터를 가지고 있을 수도 있다. 특정한 2-비트 카운터는 조건부 브랜치 명령어 결과(예컨대 테이큰 또는 낫테이큰)의 지난 동작에 근거하여 증가될 수도 있고 감소될 수도 있다. 미리 결정된 문턱값(threshold value)에 도달하면, 저장된 예측값이 테이큰 또는 낫테이큰의 1-비트의 예측값 사이에서 뒤바뀔 수도 있다. 2-비트 카운터 시나리오에서는, PHT의 각 엔트리가 4가지 상태, 즉 강한 낫테이큰 예측, 낫테이큰 예측, 강한 테이큰 예측 및 테이큰 예측 중에서 어느 하나를 가질 수 있는데 각 상태는 1-비트 테이큰/낫테이큰 예측값과 부합한다.
그 대신에, 하나 이상의 예측 테이블들(262)이 위에서 논의된 것처럼 해싱 로직(250)의 출력에 의해서 인덱스될 수 있고 한 실시예에서는 이 테이블들(262)은 훈련된 4-비트 웨이트(weight)를 저장할 수도 있다. 한 실시예에서는, 두 개의 테이블들(262)이 동일한 클럭 사이클에 인덱스될 수도 있다. 한 실시예에서는, 이들 두 테이블(262)이 해싱 로직(250)으로부터 나오는 동일한 출력에 의해 인덱스된다. 대체 실시예에서는, 이들 두 테이블(262)이 해싱 로직(250) 내의 별도의 해싱 함수들의 별도의 출력들에 의해 인덱스될 수도 있다. 읽혀진 두 개의 해당 웨이트들은 2 비트만큼 부호 확장되고 예측 로직(260) 내에서 서로 더해질 수도 있다. 그 대신에 이들 두 부호 확장된 값이 역시 함께 더해진 후 바이어스(bias) 웨이트에 더해질 수도 있다. 역시 2 비트만큼 부호 확장되는 이 바이어스 웨이트는 브랜치 예측 저장장치로부터 읽혀질 수 있는데, 나중에 더 자세히 설명될 것이다. 6-비트 합의 MSB(most significant byte)가 조건부 브랜치 명령어들의 예측된 방향을 가리키는데 이용될 수 있다.
한 실시예에서는, 이들 테이블(262)은 브랜치 예측 저장장치로부터의 브랜치 번호(예컨대 1, 2, 등)를 그 입력으로서 포함하는 해싱 로직(250)의 출력에 의해 엑세스될 수도 있다. 이들 브랜치 번호는 동일 클럭 사이클 내에 예측되는 별도의 브랜치 명령어들을 구별하기 위해 이용될 수 있다. 예를 들면, 테이블(262)의 행 엑세스에는 한 실시예로 GSR(240)의 하위 7개 비트와 같이 해싱되지 않은 GSR(240)의 일부분이 이용될 수도 있다. 이들 테이블(262)의 출력은 해싱 출력을 셀렉트 라인(select line)으로 이용하는 멀티플렉서(multiplexer)에 의해 줄여질 수도 있다. 로직(250) 내의 해싱 함수의 입력은 한 실시예로 23번 비트 내지 7번 비트의 범위와 같은 GSR(240)의 다른 부분, PC(210) 및 해당 브랜치 번호를 포함할 수 있다.
예측값(예컨대 테이큰/낫테이큰 또는 브랜치 타겟 어드레스 또는 양자 모두)이 일단 결정되면, 그 값은 GSR(240)에 투기적으로(speculatively) 쉬프트되어 입력될 수 있다. 한 실시예에서는, 단지 테이큰/낫테이큰 값만이 GSR(240)에 쉬프트되어 입력된다. 다른 실시예에서는, 브랜치 타겟 어드레스의 일부분이 GSR(240)에 쉬프트되어 입력된다. GSR(240)을 업데이트하는 방법에 대한 결정은 업데이트 로직(230)에서 수행된다. 이후 파이프라인 단계에서 예측 오류로 결정된 경우에는, 그 값은 올바른 결과로 고쳐질 수 있다. 하지만, 또한 이 과정은 펫치되어 파이프라인을 현재 거치고 있는 명령어들을 브랜치 예측 오류로 인해 종료시키고 올바른 PC로부터 명령어들을 다시 펫치하는 것을 포함한다. 이들 단계에는 프로세서 성능을 저하시키는 파이프라인 스톨들이 포함된다.
한 실시예에서는, PHT 또는 예측 로직 및 테이블(260) 내의 다른 로직으로부터의 1-비트 테이큰/낫테이큰 예측이 i-캐쉬의 인덱스에 이용되는 그 다음 PC를 결정하고 동시에 GSR(240)을 업데이트하는데에 이용될 수도 있다. 예를 들면, 한 실시예에서는, 예측이 테이큰이면 브랜치 타겟 어드레스가 그 다음 PC를 결정하는데에 이용될 수도 있다. 예측이 낫테이큰이면, 순차적으로 다음 PC가 그 다음 PC를 결정하는데에 이용될 수도 있다.
한 실시예에서는, 업데이트 로직(230)이 GSR(240)이 업데이트되는 방식을 결정할 수 있다. 예를 들면, 글로벌 히스토리 업데이트가 요구되는 조건부 브랜치의 경우에, 업데이트 로직(230)이 1-비트 테이큰/낫테이큰 예측 비트를 GSR(240)의 가장 최근에 해당하는 위치로 쉬프트하도록 결정할 수도 있다. 대체 실시예에서는, 브랜치가 GSR에 값을 주지 않을 수도 있다. 다른 실시예에서는, GSR(240)과 PC(210)의 해싱이 예측 로직(260) 내의 간접 예측 어레이를 인덱스하는데 이용될 수 있기 때문에 간접 브랜치와 같은 경우에 대해서는 브랜치 타겟 어드레스의 일부분이 GSR(240)의 입력이 될 수도 있다. 브랜치 타겟 어드레스의 일부분(예컨대 한 실시예에서는 4개 비트)은 브랜치 타겟 어드레스의 중간 부분으로부터 선택될 수도 있다. 브랜치 타겟 어드레스의 상위 비트들은 메모리에서 비슷한 위치에 있는 명령어들간에는 보통 변하지 않고, 하위 비트들은 메모리 내의 서로 다른 라인들, 워드들, 바이트들을 엑세스하기 때문에 자주 변한다. 예를 들면, 한 실시예에서는, 브랜치 타겟 어드레스의 7번 내지 4번 비트들이 이용될 수도 있다.
대체 실시예에서는, 업데이트 로직(230)이 GSR(240)에 대해 쉬프트 연산을 수행하지 않을 수도 있고, 오히려 브랜치 타겟 어드레스의 하나 이상의 비트들과 GSR(240)의 하나 이상의 선택된 비트들에 대해 배타적 논리합을 수행할 수도 있다. 그런 다음 GSR(240)의 선택된 비트들이 배타적 논리합의 결과로 대체된다. 예를 들면, 브랜치 타겟 어드레스의 7번 내지 5번 비트들과 같이 브랜치 타겟 어드레스의 3개 비트들과 GSR(240)의 가장 최근에 해당하는 3개 비트들을 배타적 논리합한 결과가 GSR(240)의 가장 최근에 해당하는 3개 비트들을 대체할 수도 있다. 업데이트 로직(230)에 대해 다른 실시예들이 구현될 수도 있다. 각 경우에, 간접 브랜치 명령어의 발생을 현재 브랜치 예측 메카니즘과 연관시키기 위하여 간접 브랜치 명령어의 브랜치 타겟 어드레스의 일부분이 글로벌 히스토리를 업데이트하는데 이용될 수 있다. 주어진 브랜치 또는 주어진 유형의 브랜치가 GSR에 값을 제공할지 여부는 설계시의 선택사항이다.
업데이트 로직(230)의 각 구현예에서, GSR(240)에 저장되는 새로운 글로벌 히스토리로 인해 조건부 브랜치 방향 예측(예컨대 테이큰/낫테이큰 결과 예측)과 BTB 예측 또는 간접 타겟 어레이 예측과 같은 간접 브랜치 타겟 어드레스 예측 모두의 정확도가 증가될 수 있다. 다이 면적, 전력 소모 및 클럭 사이클의 증가에 무시할 수 있을 만큼의 영향만 주고서 정확도의 개선을 달성할 수 있다.
소프트웨어 응용프로그램의 명령어들은 여러가지 방식으로 도 1의 i-캐쉬(102)와 같은 명령어 캐쉬 내에 저장될 수 있다. 예를 들면, 도 3은 4-웨이 세트 연관 캐쉬 구조(4-way set-associative cache organization)를 이용하여 명령어들이 저장되는 i-캐쉬 저장장치의 배치(300)의 한 실시예를 예시한 것이다. ISA에 따라 가변 길이 명령어들일 수 있는 명령어부(338)는 4-웨이 세트 연관 캐쉬(330) 내의 캐쉬 라인의 데이터 부분이거나 블록 데이터일 수 있다. 한 실시예에서는, 캐쉬 라인의 명령어부(338)가 64 바이트를 포함할 수도 있다. 대체 실시예에서는, 이와 다른 크기가 선택될 수도 있다.
연속된 바이트들로 저장될 수 있는 명령어부(338)는 하나 이상의 브랜치 명령어들을 포함할 수 있다. 일부 캐쉬 라인은 몇 안 되는 브랜치 명령어를 가질 수도 있고 다른 캐쉬 라인은 복수의 브랜치 명령어를 가질 수도 있다. 캐쉬 라인당 브랜치 명령어들의 개수는 일정하지 않다. 그러므로, 모든 브랜치에 대한 정보를 제공하기 위해서는 해당 캐쉬 라인에 대한 브랜치 예측 정보의 저장장치에 대해 큰 수의 브랜치 명령어들이 캐쉬 라인 내에 저장된다고 가정할 필요가 있을 수 있다. 하지만, 이러한 저장장치는 많은 다이 면적이 반드시 요구되고 전력 소모가 증가될 것이다. 흔히 있는 개수(낮은 수일 수 있음)의 캐쉬 라인당 브랜치 명령어들에 대한 정보와 흔치 않은 경우로서 캐쉬 라인 내에 추가의 브랜치들이 있음을 나타내는 표시를 저장하기 위한 주 저장장치(primary storage)를 가지는 하이브리드 저장장치(hybrid storage)가 더 효율적일 수 있다. 하이브리드 저장 방식 내에 주 저장장치에 의해 표시되는 추가의 브랜치들을 위해 부 저장장치(secondary storage)가 있을 수 있다. 이러한 하이브리드 저장 방식에 대한 더 자세한 내용은 뒤에 제공한다.
캐쉬(330)의 4개 웨이들 각각은 또한 상태 정보(334)를 가지는데, 상태 정보(334)는 유효 비트(valid bit)와 캐쉬 라인의 다른 상태 정보를 포함할 수 있다. 예를 들면, 상태 필드는 MOESI 방식의 상태들과 같이 해당 캐쉬 블록의 상태를 확인하는데에 이용되는 인코딩된 비트들을 포함할 수 있다. 게다가, 블록 상태부(334) 내의 필드는 퇴거(eviction)에 사용하기 위한 것으로 LRU(Least Recently Used) 정보의 표시에 이용되는 비트들을 포함할 수 있다. LRU 정보는 캐쉬 세트(332) 내의 어느 엔트리가 최근에 가장 적게 참조되었는지를 표시하는데에 이용될 수 있고, 캐쉬 컨트롤러에서 사용되는 캐쉬 교체 알고리듬(cache replacement algorithm)과 관련하여 이용될 수 있다.
프로세서 코어로부터 캐쉬(330)에 보내진 어드레스(310)는 해당 캐쉬 세트(332)를 선택하기 위해 블록 인덱스(318)을 포함할 수 있다. 한 실시예에서는, 블록 상태부(334)와 블록 태그(336)가 동일 어레이 내의 연속된 비트들이 아니라 분리된 어레이 내에 저장될 수도 있다. 블록 태그(336)는 선택된 캐쉬 세트(332) 내에서 4개의 캐쉬 라인들 중 어느 것이 엑세스되고 있는지를 결정하는데 이용될 수 있다. 게다가, 어드레스(310)의 옵셋(320)은 캐쉬 라인 내의 특정 바이트나 워드를 표시하는데 이용될 수 있다.
다음으로 도 4를 보면, 하이브리드 브랜치 예측을 갖는 프로세서 코어(400)의 한 실시예에 대한 일반화된 블록선도가 도시되어 있다. 도 1의 회로 부분들과 일치하는 회로 부분들은 도 1과 동일하게 번호를 매겼다. i-캐쉬 서브시스템(subsystem)에 대한 캐쉬 계층구조의 첫번째 두 레벨들은 i-캐쉬(410)와 캐쉬(412)로 명시적으로 도시되어 있다. 한 실시예에서, 캐쉬들(410,412)은 L1 캐쉬 구조와 L2 캐쉬 구조로서 각각 구현될 수도 있다. 한 실시예에서는, 캐쉬(412)가 명령어와 데이터 모두를 저장하는 분리된 제2 레벨 캐쉬(split second-level cache)일 수도 있다. 대체 실시예에서는, 캐쉬(412)가 둘 이상의 코어들 간의 공유 캐쉬(shared cache)일 수도 있고 메모리 컨트롤러 내에 캐쉬 일관성 제어 회로를 필요로 한다. 다른 실시예에서는, L3 캐쉬 구조가 칩 상(on-chip)에 또는 칩 외부(off-chip)에 존재할 수도 있고, 캐쉬(412)가 아니라 L3 캐쉬가 다중 코어들 간에 공유될 수도 있다.
앞서 언급된 바와 같이, i-캐쉬(410)로부터 펫치되고 있는 어드레스들의 유용한 비율에 대하여, 단지 몇 개의 브랜치 명령어들만이 해당 i-캐쉬 라인에 포함될 수 있다. 일반적으로 말하자면, 대다수 응용프로그램 코드의 많은 비율에 대하여, 브랜치들은 i-캐쉬 라인 내에서 단지 드물게(sparsely) 발견된다. 그러므로, 특정한 i-캐쉬 라인에 해당하는 브랜치 예측 정보들을 저장하기 위해 많은 수의 브랜치들에 대한 정보를 저장하기 위한 회로망이 할당될 필요가 없을 수도 있다. 예를 들면, 브랜치 예측 유닛(122)에 의해 사용될 브랜치 예측 정보를 저장하기 위한 회로망과 다이 면적이 하이브리드 브랜치 예측 장치(440)에서 더 효율적으로 할당될 수 있다. 희소 브랜치 캐쉬(sparse branch cache)(420)에는 미리 결정되어 있는 통상의 저빈도수(sparse number)의 i-캐쉬 라인당 브랜치 명령어들에 대한 브랜치 예측 정보가 저장될 수 있다. i-캐쉬(410) 내의 각 캐쉬 라인은 희소 브랜치 캐쉬(420)에 대응되는 엔트리를 가질 수 있다. 한 실시예에서는, 브랜치들의 통상의 저빈도수가 i-캐쉬(410) 내의 각 64-바이트 캐쉬 라인에 대하여 2개일 수도 있다. i-캐쉬(410) 내의 각 라인에 대하여 단지 저빈도수의 브랜치들만을 위한 예측 정보를 저장함으로써, i-캐쉬(410) 내의 각 라인에 대하여 미리 결정된 최대 개수의 브랜치들에 대한 정보를 가지는 저장장치와 비교하여 희소 브랜치 캐쉬(420)는 크기 면에서 대단히 감소될 수 있다. 다이 면적 요구조건, 용량성 부하(capacitive loading), 전력 소모들이 각각 감소될 수 있다.
한 실시예에서는, i-캐쉬(410)가 4-웨이 세트 연관 캐쉬로서 구성될 수도 있다. 희소 브랜치 캐쉬(420)는 직접 매핑 캐쉬(direct-mapped cache)로서 구성될 수도 있다. 희소 브랜치 캐쉬(420)의 각 엔트리는 i-캐쉬(410) 내의 캐쉬 라인에 대응될 수 있다. 희소 브랜치 캐쉬(420)의 각 엔트리는 i-캐쉬(410)의 해당 라인 내에서의 미리 결정된 저빈도수의 브랜치 명령어들에 해당되는 브랜치 예측 정보를 포함할 수 있는데, 한 실시예에서는 저빈도수의 브랜치 명령어들의 개수는 2개일 수 있다. 브랜치 예측 정보는 나중에 더욱 상세히 설명한다. 대체 실시예에서는, 다른 개수의 브랜치 명령어들이 저빈도인 것으로 결정될 수도 있고 i-캐쉬(410) 내의 라인의 크기가 다를 수도 있다. 희소 브랜치 캐쉬(420)는 IFU(104)로부터 i-캐쉬(410)로 보내지는 동일한 선형 어드레스에 의해 인덱스될 수 있다. i-캐쉬(410)와 희소 브랜치 캐쉬(420) 모두는 캐쉬 라인 경계에 해당하는 선형 주소 내의 비트들의 서브세트에 의해 인덱스될 수 있다. 예를 들면, 한 실시예에서는, 선형 어드레스는 리틀 엔디안(little endian) 바이트 순서를 갖는 32 비트를 포함할 수 있고 i-캐쉬(410) 내의 한 라인은 64 바이트를 포함할 수 있다. 그러므로, 캐쉬들(410,420)은 선형 어드레스 중에서 6번 비트 이상의 상위 비트들에 해당하는 동일한 부분에 의해 각각 인덱스될 수 있다.
제2 희소 브랜치 캐쉬(422)는 코어(400)에서 제1 희소 캐쉬(420)로부터 퇴거 라인을 저장하기 위하여 이용될 수 있다. 희소 캐쉬들(420,422)은 동일한 캐쉬 구조를 가질 수도 있다. 한 라인이 i-캐쉬(410)로부터 퇴거되어 캐쉬(412)에 놓여질 때, 제1 희소 캐쉬(420)의 해당 엔트리는 제1 희소 캐쉬(420)로부터 퇴거되어 제2 희소 캐쉬(422)에 저장될 수 있다. 이런 방식으로, 전에 퇴거된 캐쉬 라인이 캐쉬(412)로부터 i-캐쉬(410)로 교체될 때, 이 캐쉬 라인 내의 브랜치들에 대한 해당 브랜치 예측 정보도 역시 제2 희소 캐쉬(422)로부터 제1 희소 캐쉬(420)로 대체된다. 그러므로, 해당 브랜치 예측 정보는 다시 만들어질 필요가 없다. 브랜치 예측 정보를 다시 만드는 과정이 없기 때문에 프로세서 성능이 개선될 수 있다.
더 조밀하게 짜여진 브랜치 명령어들을 포함하고 있는 응용프로그램 코드 내의 영역들에 대하여, i-캐쉬(410) 내의 캐쉬 라인은 저빈도수의 브랜치들보다 더 많은 브랜치들을 포함할 수 있다. 희소 브랜치 캐쉬(420)의 각 엔트리에는 i-캐쉬(410)의 한 라인 내에 브랜치의 저빈도수를 넘는 추가의 브랜치들이 있음을 나타내는 표시가 저장될 수 있다. 추가의 브랜치들이 존재하면, 해당 브랜치 예측 정보는 조밀 브랜치 캐쉬(430)에 저장될 수 있다.
조밀 브랜치 캐쉬(430)의 각 엔트리는 i-캐쉬(410) 내의 한 라인의 일부분에 해당될 수 있다. 예를 들면, i-캐쉬(410)는 64-바이트 라인들을 가질 수 있고 조밀 브랜치 캐쉬(430)의 각 엔트리는 64-바이트 라인의 8-바이트 부분에 해당할 수도 있다. 희소 브랜치 캐쉬(420)의 각 엔트리는 해당 64-바이트 라인의 어느 8-바이트 부분이 추가의 브랜치들을 가질 수 있는지를 지정하기 위하여 비트들의 벡터를 가질 수 있으며, 64-바이트 라인은 흔히 있는 저빈도수의 브랜치들보다 많은 브랜치들을 가진다. 벡터 비트들의 개수와 i-캐쉬 라인의 해당 부분의 해당 크기는 응용프로그램 코드에서 조밀하게 짜여진 브랜치들이 있는 영역의 동작을 효율적으로 포착하도록 선택될 수 있다.
한 실시예에서는, 조밀 브랜치 캐쉬(430)가 4-웨이 세트 연관 캐쉬로서 구성될 수도 있다. 그러므로, 조밀 브랜치 캐쉬(430)에는 64-바이트 라인의 8-바이트 부분마다 4개의 브랜치 명령어들에 대한 브랜치 예측 정보가 저장될 수 있다. 64-바이트 라인 내에 8개의 8-바이트 부분들을 가지고 있으므로, 조밀 브랜치 캐쉬(430)는 단일 64-바이트 라인내의 32개의 브랜치 명령어들에 대한 브랜치 예측 정보를 저장할 수 있다. 이 실시예에서는, 희소 브랜치 캐쉬(420)와 조밀 브랜치 캐쉬(430)의 하이브리드 조합에 의해 i-캐쉬(410) 내의 64-바이트 라인에 대해 34개의 브랜치 명령어들(2개의 희소 브랜치들과 32개의 조밀 브랜치들)에 대한 브랜치 예측 정보를 저장할 수 있다. 캐쉬들(410,412,420,422,430)의 크기, 연관성, 밀도는 대상 구조에서 실행될 응용프로그램들에 대하여 성능과 전력 소모 간에 최선의 균형을 제공할 수 있도록 선택될 수 있다.
도 5를 보면, 브랜치 예측 유닛(500)의 일반화된 블록선도에 대한 한 실시예가 도시되어 있다. 도 2의 회로 부분들과 일치하는 회로 부분들은 동일하게 번호를 매겼다. 여기서, 저장된 하이브리드 브랜치 예측 정보는 예측 로직 및 테이블(260)과 해싱 로직(250)에 전달될 수 있다. 한 실시예에서는, 하이브리드 브랜치 예측 정보는 i-캐쉬로부터 희소 브랜치 캐쉬(420,422)와 조밀 브랜치 캐쉬(430) 같은 별도의 캐쉬들에 저장될 수도 있다. 한 실시예에서는, 이 정보는 동일한 클럭 사이클 내에 예측되고 있는 브랜치 명령어들을 구별하기 위한 브랜치 번호, 특정한 조건부 브랜치 명령어 타입 등을 표시하는 브랜치 타입 정보, 테이블(260) 내에서 테이블 엔트리들과 더해질 웨이트 정보, 해당 캐쉬 라인 내의 브랜치 명령어의 마지막 바이트를 가리키는 포인터와 같은 추가의 어드레스 정보 및 해당 브랜치 타겟 어드레스 정보를 포함할 수 있다.
앞서 논의된 바와 같이, 저장된 하이브리드 브랜치 정보로부터 읽혀진 바이어스 웨이트 정보는 예측 로직 및 테이블(260) 내의 테이블들로부터 읽혀진 2개의 해당 부호 확장된 웨이트 값들과 더해질 수 있다. 이 바이어스 웨이트는 합산되기 전에 역시 부호 확장될 수 있고 6-비트 합의 MSB(most-significant-byte)는 조건부 브랜치 명령어들의 예측 방향을 표시하는데에 이용될 수 있다.
도 6은 희소 캐쉬 저장장치의 배치(600)의 한 실시예를 도시한 것인데, 브랜치 예측 정보가 여기에 저장된다. 한 실시예에서는, 캐쉬(630)이 직접 매핑 캐쉬로서 구성될 수도 있다. 미리 결정된 저빈도수의 엔트리들(634)은 직접 매핑 캐쉬(630) 내의 캐쉬 라인의 데이터 부분에 저장될 수도 있다. 한 실시예에서는, 저빈도수는 2개로 결정될 수도 있다. 각 엔트리(634)는 i-캐쉬(410)의 해당 라인 내의 특정 브랜치에 대한 브랜치 예측 정보를 저장할 수 있다. 해당 라인내에 저빈도수의 브랜치들을 넘어 추가의 브랜치들이 존재할 수 있다는 표시는 조밀 브랜치 표시부(636)에 저장된다.
한 실시예에서는, 각 엔트리(634)가 유효 비트와 다른 상태 정보를 포함하는 상태 필드(640)를 포함할 수 있다. 엔드 포인터(end pointer) 필드(642)는 i-캐쉬(410)의 한 라인 내에서 해당 브랜치 명령어의 마지막 바이트의 표시를 저장할 수 있다. 예를 들면, 해당 64-바이트 i-캐쉬 라인에 대하여, 엔드 포인터 필드(642)는 64개 바이트 중 임의의 것을 가리키기 위하여 6개 비트를 포함할 수도 있다. 이 포인터는 i-캐쉬(410)와 희소 브랜치 캐쉬(420) 모두를 인덱스하기 위해 이용되는 선형 어드레스에 덧붙여질 수 있고 전체 어드레스 값은 브랜치 예측 유닛(500)으로 보내질 수 있다.
예측 정보 필드(644)는 브랜치 예측 유닛(500)에서 이용되는 데이터를 포함할 수 있다. 예를 들면, 특정 브랜치 명령어가 직접인지, 간접인지, 조건부인지, 무조건부인지 또는 다른 것인지 표시하기 위해 브랜치 타입 정보가 포함될 수도 있다. 게다가, 예측 로직 및 테이블(260)에서 바이어스 웨이트가 웨이트 테이블의 웨이트들과 합해질 수도 있다. 브랜치 예측 유닛(500)과 관련하여 앞서 논의된 바와 같이, 한 실시예에서는, 4-비트 웨이트가 예측 테이블(260) 내의 2개의 별도 테이블들로부터 읽혀질 수도 있다. 이들 테이블은 PC(210)와 GSR(240)을 조합하는 해싱 함수의 출력에 의해서 인덱스될 수 있다. 읽혀지는 해당 2개의 웨이트들은 2 비트만큼 부호 확장되고 또한 2 비트만큼 부호 확장되는 예측 정보 필드(644)의 바이어스 웨이트에 더해질 수 있다. 6-비트 합의 MSB는 조건부 브랜치 명령어들의 예측 방향을 표시하는데 이용될 수 있다.
해당 브랜치 타겟 어드레스 값이 부분적으로 어드레스 필드(646)에 저장될 수 있다. 보통의 경우에는 브랜치 타겟이 브랜치 명령어 자체와 동일한 페이지 내에 위치할 수 있기 때문에 단지 부분적인 브랜치 타겟 어드레스만이 필요할 수 있다. 한 실시예에서는, 한 페이지가 4 킬로바이트를 포함할 수 있고 단지 12 비트의 브랜치 타겟 어드레스만이 어드레스 필드(646)에 저장될 필요가 있다. 어드레스 필드(646)의 크기가 더 작으면 다이 면적, 용량성 부하 및 전력 소모를 감소시키는데에 더 도움이 된다. 어드레스 필드(646)에 저장된 것보다 추가의 비트들이 요구되는 브랜치 타겟에 대하여 별도의 아웃-오브-페이지(out-of-page) 어레이가 이용될 수 있다.
조밀 브랜치 표시부 필드(636)는 비트 벡트를 포함할 수 있고, 벡터의 각 비트는 i-캐쉬(410)의 해당 라인 내의 일부분에 대하여 추가의 브랜치들이 존재할 가능성을 표시한다. 예를 들면, 표시부 필드(636)는 8-비트 벡터를 포함할 수도 있다. 각 비트는 i-캐쉬(410)의 64-바이트 라인 내의 별도의 8-바이트 부분에 해당할 수 있다. 한 실시예에서는, 첫번째 비트가 i-캐쉬(410)의 해당 라인에서 데이터의 첫번째 8개 바이트에 해당할 수도 있다. 벡터에서 각 연속되는 비트는 그 캐쉬 라인에서 데이터의 다음 연속되는 8개 바이트에 해당할 수도 있다. 한 실시예에서는, 표시부 필드(636)에서 하나 이상의 셋 비트(set bit)들이 저빈도수의 브랜치들을 넘어 추가의 브랜치들이 64-바이트 캐쉬 라인에 존재할 수 있다는 것을 표시할 수도 있다. 표시부 필드(636)의 특정 셋 비트는 해당 8개 바이트 그룹에 추가의 브랜치가 존재한다는 것을 표시할 수 있다. 이 경우에, 조밀 브랜치 캐쉬(430)가 인덱스된다. 한 실시예에서는, 조밀 브랜치 캐쉬(430)가 희소 브랜치 캐쉬(420)와 병렬로 인덱스될 수도 있지만, 전력을 아끼기 위하여 표시부 필드(636)에서 셋 비트가 있을 때에는 조밀 브랜치 캐쉬(430)만이 인덱스될 수도 있다.
도 7은 조밀 브랜치 캐쉬 저장장치의 배치(700)에 대한 하나의 실시예를 예시한 것이다. 한 실시예에서는, 추가적인 브랜치 예측 정보가 4-웨이 세트 연관 캐쉬 구성을 이용하여 저장된다. 캐시(730)의 캐쉬 세트(732) 내의 4개의 캐쉬 라인들 각각은 i-캐쉬(410)의 64-바이트 캐쉬 라인 내의 8-바이트 영역에 해당할 수 있다. 캐쉬(730)의 4개의 웨이들 각각은 상태 정보(734)를 가질 수 있고, 상태 정보(734)는 유효 비트와 해당 캐쉬 라인의 다른 상태 정보를 포함할 수 있다.
해당 캐쉬 세트(732)를 선택하기 위하여 프로세서 코어로부터 캐쉬(730)에 주어지는 어드레스(310)는 옵셋(320)의 일부분과 블록 인덱스(318)를 포함할 수 있다. 조밀 브랜치 캐쉬(430)는 i-캐쉬(410) 및 희소 브랜치 캐쉬(420)와는 서로 다른 어드레스 가능한 경계(addressable boundary)를 이용할 수 있다. 예를 들면, 한 실시예에서는, 캐쉬들(410,420)은 64-바이트 경계를 갖는 데이터를 어드레스할 수 있고, 조밀 브랜치 캐쉬(430)는 8-바이트 경계를 갖는 데이터를 어드레스할 수 있다. 그러므로, 캐쉬(730)를 인덱스하기 위하여 전체 6개 비트 중에서 3개 비트와 같이 옵셋(320)의 일부분이 추가적으로 필요할 수 있다. 한 실시예에서는, 블록 상태부(734)와 블록 태그(736)가 동일한 어레이 내의 연속된 비트들이 아니라, 별도의 어레이에 저장될 수도 있다. 선택된 캐쉬 세트(732) 내에서 4개의 캐쉬 라인들 중 어느 것이 엑세스되고 있는지를 결정하기 위하여 블록 태그(336)가 이용될 수 있다. 브랜치 예측 정보는 블록 데이터(738)의 연속된 비트들에 저장될 수 있다.
한 실시예에서는, 각 블록 데이터(738)가 i-캐쉬(410)의 한 라인 내에서 해당 브랜치 명령어의 마지막 바이트에 대한 표시를 가지고 있는 엔드 포인터 필드(740)를 포함할 수 있다. 예를 들면, 해당 64-바이트 i-캐쉬 라인에 대해, 해당 8-바이트 영역 내에서 임의의 바이트를 가리키기 위하여 엔드 포인터 필드(740)가 3개 비트를 포함할 수 있다. 이 포인터 값은 i-캐쉬(410) 및 희소 브랜치 캐쉬(420) 모두를 인덱스하는데에 이용되는 선형 어드레스 값에 붙여질 수 있고, 전체 어드레스 값은 브랜치 예측 유닛(500)에 보내질 수 있다.
한 실시예에서는, 예측 정보 필드(742)가 희소 캐쉬(420)에서 브랜치 예측 필드(644)와 유사한 데이터를 포함할 수 있다. 이 정보는 브랜치 예측 유닛(500)에서 이용될 수 있다. 특정 브랜치 명령어가 직접인지, 간접인지, 조건부인지, 무조건부인지 또는 다른 것인지를 표시하기 위하여 브랜치 타입 정보가 포함될 수 있다. 게다가, 예측 로직 및 테이블(260)에서 웨이트 테이블 내의 웨이트들과 더해질 수 있는 바이어스 웨이트가 저장될 수 있다. 비슷하게, 브랜치 타겟 어드레스 필드(744)는 희소 캐쉬(420) 내의 어드레스 필드(646)와 유사한 데이터를 포함할 수 있다. 보통의 경우에는 브랜치 타겟이 브랜치 명령어 자체와 동일한 페이지 내에 위치하기 때문에 단지 부분적인 브랜치 타겟 어드레스만이 필요할 수 있다. 한 실시예에서는, 한 페이지는 4 킬로바이트를 포함할 수 있고 브랜치 타겟 어드레스 중 전체 32개 비트가 아니라 단지 12개 비트만이 어드레스 필드(744)에 저장될 필요가 있다. 어드레스 필드(744)의 크기가 작으면 다이 면적, 용량성 부하 및 전력 소모를 줄이는데 더욱 도움이 된다. 필드(744)에 저장되는 것보다 더 많은 비트가 요구되는 브랜치 타겟들에 대하여, 별도의 아웃-오브-페이지 어레이가 이용될 수 있다.
도 8은 브랜치 예측의 효율적인 개선을 위한 방법(800)을 예시한 것이다. 방법(800)은 대체 실시예를 얻어내기 위해 당해 기술분야의 숙련된 자들에 의해 수정될 수도 있다. 또한, 이 실시예에서는 단계들이 순차적인 순서로 도시되었다. 하지만, 일부 단계들은 도시된 것과는 다른 순서로 발생할 수도 있고, 일부 단계들은 동시에 수행될 수도 있고, 일부 단계들은 다른 단계들과 조합될 수도 있으며, 일부 단계들은 또 다른 실시예에서는 없을 수도 있다. 도시된 실시예에서는, 802 단계에서 프로세서가 명령어들을 펫치한다. 명령어 데이터의 연속된 바이트들을 펫치하기 위하여 프로그램 카운터에 저장된 선형 어드레스가 i-캐쉬(410)로 전달될 수 있다. i-캐쉬(410) 내의 캐쉬 라인의 크기에 따라, 프로그램 카운터의 전체 내용이 i-캐쉬(410)로 전달되지 않을 수도 있다. 또한, 804 단계에서 동일한 어드레스가 희소 브랜치 캐쉬(420)에 전달될 수 있다.
L1 희소 브랜치 캐쉬(420)에서 캐쉬 히트(cache hit)가 없다면(806 조건 단계), 808 단계에서 해당 캐쉬 라인을 L2 희소 브랜치 캐쉬로부터 가져온다. 미스(miss)가 일어났다면, 해당 캐쉬 라인은 i-캐쉬(410)에도 역시 없을 수 있고 제2 레벨 캐쉬(412)로부터 가져올 필요가 있다. L1 희소 브랜치 캐쉬(420)에서 요청한 라인이 엑세스된다면, 810 조건 단계에서 희소 브랜치 엔트리가 유효한 것인지 검사한다. 한 실시예에서는, 희소 브랜치 엔트리가 코드 실행 중에 순차적으로 채워질 수도 있다. 그러므로, 희소 브랜치 캐쉬(420) 내의 유효한 엔트리들 사이에서 유효하지 않은 엔트리들의 갭(gap)이 없을 수도 있다. 일단 유효하지 않은 엔트리가 발견되면, i-캐쉬(410)의 해당 라인 내에 브랜치 명령어들이 더 이상 없다는 표시일 수 있다. 유효하지 않은 엔트리들이 발견되지 않으면, i-캐쉬(410)내의 해당 라인은 적어도 희소 브랜치 명령어들의 최대 개수를 가질 수 있다. 이 해당 i-캐쉬 라인 내에 미리 결정된 개수의 희소 브랜치보다 많은 브랜치 명령어들이 있다면, 희소 브랜치 캐쉬(420)에 저장된 조밀 브랜치 표시부(636) 내의 비트 벡터에 의해 표시될 수 있다.
유효한 희소 브랜치 엔트리들이 없다면(810 조건 단계), i-캐쉬(410)의 라인 내에 브랜치 명령어들이 아예 없을 수도 있고 또는 코드 실행 중에 브랜치 명령어들이 아직 발견되지 않았을 수도 있다. 이런 경우에, 흐름은 802 단계로 돌아간다. 그렇지 않으면, 첫번째 희소 브랜치 엔트리를 조사한다. 희소 브랜치 엔트리들은 순차적으로 채워지고 적어도 하나의 엔트리가 유효하기 때문에, 첫번째 희소 브랜치 엔트리는 유효하여야 한다. 각 희소 브랜치 엔트리의 상태부 필드(640) 내의 유효 비트가 셋되었는지 여부를 알아내는 경우과 같이 희소 브랜치 엔트리들은 병렬로 조사될 수 있다. 여기서, 흐름을 순차적으로 설명한다. 현재의 희소 브랜치 엔트리가 유용한 브랜치 예측 정보를 가지는지(812 조건 단계)를 결정하기 위하여 현재 희소 브랜치 엔트리의 해당 유효 비트를 조사한다. 유효 비트가 유용한 정보가 저장되어 있다고 표시한다면, 814 단계에서 엔드 포인터 필드(642), 브랜치 예측 정보 필드(644) 및 브랜치 타겟 어드레스 필드(646)에 저장된 해당 정보가 희소 브랜치 캐쉬(420)에서 프로세서로 전달된다. 그런 후에 그 다음 희소 브랜치 엔트리의 유효 비트를 조사한다.
미리 결정된 저빈도수의 브랜치 엔트리들을 전부 조사하지 않았다면(816 조건 단계), 방법(800)에 대한 제어 흐름은 812 단계로 돌아간다. 그렇지 않은 경우에는, 조밀 브랜치 표시부 필드(636)에서 조밀 비트 벡터가 셋(set) 비트인지 조사할 수 있다(818 조건 단계). 이 벡터 내의 비트들이 하나 이상 셋되어 있다면, 820 단계에서 i-캐쉬(410)와 희소 브랜치 캐쉬(420)를 엑세스하기 위하여 이용된 것보다 더 많은 LSB들을 갖는 프로그램 카운터 값의 일부분에 의해 조밀 브랜치 캐쉬(430)가 인덱스될 수 있다. 이는 조밀 브랜치 표시부 필드(636)에서 각 비트가 예컨대 64-바이트 i-캐쉬 라인보다 더 적은 8-바이트 영역에 해당될 수 있기 때문에 조밀 캐쉬가 더 세세한 단위로 어드레스될 수 있기 때문이다.
조밀 브랜치 캐쉬(430)가 세트 연관이라면, 조밀 브랜치 캐쉬 중에서 어드레스의 태그 필드와 블록 상태부 필드(734) 내의 유효 비트가 프로세서에 보내질 해당 캐쉬 라인을 결정하는데 이용될 수 있다. 이 캐쉬 라인은 엔드 포인터 필드(740), 브랜치 예측 정보 필드(742) 및 브랜치 타겟 어드레스 필드(744)에 저장된 정보들을 포함할 수 있다. 방법(800) 내의 제어 흐름은 802 단계로 돌아간다. 동일 클럭 사이클에서 병렬로 예측되는 브랜치 명령어들의 개수는 브랜치 예측 유닛(500) 내의 회로에 따라 결정될 수 있다. 예를 들면, 한 실시예에서는, 1개의 클럭 사이클에서 2개의 희소 브랜치 명령어들에 대한 브랜치 예측 정보를 희소 브랜치 캐쉬(420)에서 브랜치 예측 유닛(500)으로 보내는 것이 가능할 수도 있다. 조밀 브랜치 캐쉬(430)으로부터의 브랜치 예측 정보는 그 다음 클럭 사이클에서 보내질 수 있다. 클럭 사이클당 조밀 브랜치들에 해당되는 브랜치 예측 정보의 개수 또는 클럭 사이클당 예측되는 조밀 블랜치들의 개수는 선택된 실시예에 따라 결정된다.
위의 실시예들이 상당히 자세히 설명되었지만, 일단 위의 개시가 충분히 이해된다면 수많은 변경들과 수정들이 가능할 수 있음은 당해 기술분야의 숙련된 자들에게 명백할 것이다. 아래의 청구항들은 이러한 모든 변경들과 수정들을 수용하는 것으로 이해되도록 의도하는 바이다.

Claims (20)

  1. 명령어 캐쉬(instruction cache)와;
    제1 복수의 엔트리들을 포함하는 제1 희소 캐쉬(sparse cache)-상기 각 엔트리(entry)들은 상기 명령어 캐쉬의 엔트리에 각각 대응됨-와;
    제2 복수의 엔트리들을 포함하는 조밀 캐쉬(dense cache)를 포함하며,
    상기 제1 희소 캐쉬의 각 엔트리는:
    제1 개수보다 많지 않은 브랜치 명령어에 대한 브랜치 예측 정보(branch prediction information)를 저장하고;
    상기 명령어 캐쉬의 대응되는 엔트리가 상기 제1 개수의 브랜치 명령어들보다 더 많은 수의 브랜치 명령어들을 포함하는지 여부에 대한 표시를 저장하고,
    상기 조밀 캐쉬(dense cache)의 엔트리 각각은 상기 제1 개수의 브랜치 명령어들에 포함되지 않는 추가의 브랜치 명령어에 대한 브랜치 예측 정보를 저장하도록 구성되는 것인 마이크로프로세서.
  2. 제1항에 있어서,
    상기 제1 희소 캐쉬의 퇴거(evicted) 엔트리들 전체를 저장하도록 구성되는 제2 희소 캐쉬를 더 포함하는 마이크로프로세서.
  3. 제2항에 있어서,
    상기 명령어 캐쉬의 엔트리와 대응되는 상기 제1 희소 캐쉬에서의 엔트리가 동일한 어드레스에 의해 선택되는 것인 마이크로프로세서.
  4. 제3항에 있어서,
    상기 희소 캐쉬의 엔트리에서 상기 저장된 표시는 상기 조밀 캐쉬의 엔트리들을 선택하는데에 이용되는 비트 벡터(bit vector)를 포함하며,
    각 비트는 상기 명령어 캐쉬의 엔트리 내의 다른 영역에 대응되는 것인 마이크로프로세서.
  5. 제4항에 있어서,
    상기 브랜치 예측 정보는 상기 명령어 캐쉬의 엔트리 내의 대응되는 브랜치 명령어의 위치를 표시하는 엔드 포인터(end pointer)를 포함하는 것인 마이크로프로세서.
  6. 제5항에 있어서,
    상기 브랜치 예측 정보는 브랜치 예측 유닛에 의해 이용되는 바이어스 웨이트 값(bias weight value)과 브랜치 명령어의 타입(type)을 표시하는 것인 마이크로프로세서.
  7. 제6항에 있어서,
    상기 브랜치 예측 정보는 브랜치 예측 유닛에 의해 이용되는 브랜치 타겟 어드레스를 포함하는 것인 마이크로프로세서.
  8. 브랜치 예측을 개선하기 위한 방법으로서,
    명령어 캐쉬(instruction cache)의 엔트리(entry) 내의 제1 개수보다 많지 않은 브랜치 명령어에 대한 브랜치 예측 정보를 희소 캐쉬(sparse cache)의 엔트리내에 저장하는 단계와;
    상기 명령어 캐쉬의 대응되는 엔트리가 상기 제1 개수의 브랜치 명령어들보다 더 많은 수의 브랜치 명령어를 포함하는지 여부에 대한 표시를 상기 희소 캐쉬의 상기 엔트리에 저장하는 단계와;
    상기 제1 개수의 브랜치 명령어들에 포함되지 않는 추가의 브랜치 명령어에 대한 브랜치 예측 정보를 조밀 캐쉬의 엔트리 내에 저장하는 단계를 포함하는 브랜치 예측 개선 방법.
  9. 제8항에 있어서,
    상기 제1 희소 캐쉬의 퇴거(evicted) 엔트리들을 제2 희소 캐쉬 내에 저장하는 단계를 더 포함하는 브랜치 예측 개선 방법.
  10. 제9항에 있어서,
    상기 명령어 캐쉬의 엔트리와 대응되는 상기 제1 희소 캐쉬에서의 엔트리를 동일한 어드레스에 의해 선택하는 단계를 더 포함하는 브랜치 예측 개선 방법.
  11. 제10항에 있어서,
    상기 희소 캐쉬의 엔트리에서의 상기 저장된 표시는 상기 조밀 캐쉬에서의 엔트리들을 선택하는데에 이용되는 비트 벡터(bit vector)를 포함하며,
    각 비트는 상기 명령어 캐쉬의 엔트리 내의 다른 영역에 대응되는 것인 브랜치 예측 개선 방법.
  12. 제11항에 있어서,
    상기 명령어 캐쉬의 엔트리 내의 브랜치 명령어의 위치를 상기 브랜치 예측 정보에 포함되는 대응되는 엔드 포인터(end pointer)에 의해 표시하는 단계를 더 포함하는 브랜치 예측 개선 방법.
  13. 제12항에 있어서,
    브랜치 예측 유닛에 의해 이용되는 바이어스 웨이트 값(bias weight value)과 브랜치 명령어의 타입(type)을 상기 브랜치 예측 정보 내에 표시하는 단계를 더 포함하는 브랜치 예측 개선 방법.
  14. 제13항에 있어서,
    상기 브랜치 예측 정보는 브랜치 예측 유닛에 의해 이용되는 브랜치 타겟 어드레스를 포함하는 것인 브랜치 예측 개선 방법.
  15. 제1 복수의 엔트리들을 포함하는 제1 희소 캐쉬-상기 각 엔트리들은 명령어 캐쉬의 엔트리에 대응함-와;
    제2 복수의 엔트리들을 포함하는 조밀 캐쉬를 포함하며,
    상기 제1 희소 캐쉬의 각 엔트리는:
    제1 개수보다 많지 않은 브랜치 명령어에 대한 브랜치 예측 정보를 저장하고;
    상기 명령어 캐쉬의 대응되는 엔트리가 상기 제1 개수의 브랜치 명령어들보다 더 많은 수의 브랜치 명령어들을 포함하는지 여부에 대한 표시를 저장하고;
    상기 조밀 캐쉬의 엔트리 각각은 상기 제1 개수의 브랜치 명령어들에 포함되지 않는 추가의 브랜치 명령어에 대한 브랜치 예측 정보를 저장하도록 구성되는 것인 하이브리드 브랜치 예측 장치.
  16. 제15항에 있어서,
    상기 제1 희소 캐쉬의 퇴거(evicted) 엔트리들 전체를 저장하도록 구성되는 제2 희소 캐쉬를 더 포함하는 하이브리드 브랜치 예측 장치.
  17. 제16항에 있어서,
    상기 희소 캐쉬의 엔트리에 상기 저장된 표시는 상기 조밀 캐쉬의 엔트리를 선택하는데에 이용되는 비트 벡터(bit vector)를 포함하며,
    각 비트는 상기 명령어 캐쉬의 엔트리 내의 다른 영역에 대응되는 것인 하이브리드 브랜치 예측 장치.
  18. 삭제
  19. 삭제
  20. 삭제
KR1020117007675A 2008-09-05 2009-09-04 희소 및 조밀 예측 캐쉬들을 갖는 하이브리드 브랜치 예측 장치 KR101493019B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/205,429 US8181005B2 (en) 2008-09-05 2008-09-05 Hybrid branch prediction device with sparse and dense prediction caches
US12/205,429 2008-09-05
PCT/US2009/056136 WO2010028316A1 (en) 2008-09-05 2009-09-04 Hybrid branch prediction device with sparse and dense prediction caches

Publications (2)

Publication Number Publication Date
KR20110081963A KR20110081963A (ko) 2011-07-15
KR101493019B1 true KR101493019B1 (ko) 2015-02-12

Family

ID=41217601

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117007675A KR101493019B1 (ko) 2008-09-05 2009-09-04 희소 및 조밀 예측 캐쉬들을 갖는 하이브리드 브랜치 예측 장치

Country Status (6)

Country Link
US (1) US8181005B2 (ko)
EP (1) EP2347332B1 (ko)
JP (1) JP5255701B2 (ko)
KR (1) KR101493019B1 (ko)
CN (1) CN102160033B (ko)
WO (1) WO2010028316A1 (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8489866B2 (en) 2010-06-30 2013-07-16 International Business Machines Corporation Branch trace history compression
US8635408B2 (en) * 2011-01-04 2014-01-21 International Business Machines Corporation Controlling power of a cache based on predicting the instruction cache way for high power applications
US9235419B2 (en) * 2012-06-11 2016-01-12 International Business Machines Corporation Branch target buffer preload table
US8972665B2 (en) 2012-06-15 2015-03-03 International Business Machines Corporation Cache set selective power up
US20140115257A1 (en) * 2012-10-22 2014-04-24 Advanced Micro Devices, Inc. Prefetching using branch information from an instruction cache
US9489203B2 (en) 2012-12-11 2016-11-08 Advanced Micro Devices, Inc. Pre-fetching instructions using predicted branch target addresses
US9489204B2 (en) 2013-03-15 2016-11-08 Qualcomm Incorporated Method and apparatus for precalculating a direct branch partial target address during a misprediction correction process
WO2014143053A1 (en) 2013-03-15 2014-09-18 Intel Corporation Dead block predictors for cooperative execution in the last level cache
US9639368B2 (en) * 2014-06-13 2017-05-02 International Business Machines Corporation Branch prediction based on correlating events
GB2534522B (en) 2014-07-25 2016-12-28 Imagination Tech Ltd Conditional branch prediction using a long history
US9940236B2 (en) * 2014-12-17 2018-04-10 Intel Corporation Pointer chasing across distributed memory
US10936713B2 (en) 2015-12-17 2021-03-02 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10235176B2 (en) 2015-12-17 2019-03-19 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10474462B2 (en) * 2016-02-29 2019-11-12 Qualcomm Incorporated Dynamic pipeline throttling using confidence-based weighting of in-flight branch instructions
US10175982B1 (en) * 2016-06-16 2019-01-08 Apple Inc. Storing taken branch information
US10831678B2 (en) * 2017-11-21 2020-11-10 Arm Limited Multi-tier cache placement mechanism
US20210042100A1 (en) 2018-02-02 2021-02-11 Dover Microsystems, Inc. System and method for translating mapping policy into code
WO2019152772A1 (en) 2018-02-02 2019-08-08 The Charles Stark Draper Laboratory, Inc. Systems and methods for policy execution processing
CN110462587A (zh) * 2018-03-29 2019-11-15 深圳市大疆创新科技有限公司 分支预测的方法与装置
US11797398B2 (en) 2018-04-30 2023-10-24 Dover Microsystems, Inc. Systems and methods for checking safety properties
WO2020097179A1 (en) 2018-11-06 2020-05-14 Dover Microsystems, Inc. Systems and methods for stalling host processor
US11841956B2 (en) 2018-12-18 2023-12-12 Dover Microsystems, Inc. Systems and methods for data lifecycle protection
US11636040B2 (en) 2019-05-24 2023-04-25 Texas Instruments Incorporated Methods and apparatus for inflight data forwarding and invalidation of pending writes in store queue
CN112559049A (zh) 2019-09-25 2021-03-26 阿里巴巴集团控股有限公司 用于指令高速缓存的路预测方法、访问控制单元以及指令处理装置
US11726783B2 (en) * 2020-04-23 2023-08-15 Advanced Micro Devices, Inc. Filtering micro-operations for a micro-operation cache in a processor
US11520701B2 (en) * 2021-04-02 2022-12-06 Tenstorrent Inc. Data structure optimized dedicated memory caches
US11630670B2 (en) 2021-07-21 2023-04-18 Apple Inc. Multi-table signature prefetch
CN113504943B (zh) * 2021-09-03 2021-12-14 广东省新一代通信与网络创新研究院 用于降低资源使用的混合分支预测装置实现方法及系统
WO2023237195A1 (en) * 2022-06-09 2023-12-14 Huawei Technologies Co., Ltd. Sparse correlations in dynamic branch prediction

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920020314A (ko) * 1991-04-05 1992-11-21 아오이 죠이치 브랜치 예측 테이블을 사용하는 브랜치 예측 방법 및 장치
US20070266228A1 (en) 2006-05-10 2007-11-15 Smith Rodney W Block-based branch target address cache

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5136697A (en) * 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
US5163140A (en) * 1990-02-26 1992-11-10 Nexgen Microsystems Two-level branch prediction cache
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
DE69715280T2 (de) * 1996-03-25 2003-08-07 Sun Microsystems Inc Verfahren zur Sprungvorhersage in einem mehrstufigen Cachespeichersystem
US5752259A (en) * 1996-03-26 1998-05-12 Advanced Micro Devices, Inc. Instruction cache configured to provide instructions to a microprocessor having a clock cycle time less than a cache access time of said instruction cache
US5954816A (en) * 1996-11-19 1999-09-21 Advanced Micro Devices, Inc. Branch selector prediction
US6018786A (en) * 1997-10-23 2000-01-25 Intel Corporation Trace based instruction caching
US5974542A (en) 1997-10-30 1999-10-26 Advanced Micro Devices, Inc. Branch prediction unit which approximates a larger number of branch predictions using a smaller number of branch predictions and an alternate target indication
US6108774A (en) * 1997-12-19 2000-08-22 Advanced Micro Devices, Inc. Branch prediction with added selector bits to increase branch prediction capacity and flexibility with minimal added bits
WO2002084509A1 (en) * 2001-02-24 2002-10-24 International Business Machines Corporation A novel massively parrallel supercomputer
US6804799B2 (en) * 2001-06-26 2004-10-12 Advanced Micro Devices, Inc. Using type bits to track storage of ECC and predecode bits in a level two cache
US7024545B1 (en) * 2001-07-24 2006-04-04 Advanced Micro Devices, Inc. Hybrid branch prediction device with two levels of branch prediction cache
US20040148497A1 (en) * 2003-01-27 2004-07-29 Ali Vahidsafa Method and apparatus for determining an early reifetch address of a mispredicted conditional branch instruction in an out of order multi-issue processor
US20050228977A1 (en) * 2004-04-09 2005-10-13 Sun Microsystems,Inc. Branch prediction mechanism using multiple hash functions
US20070186049A1 (en) * 2006-02-03 2007-08-09 International Business Machines Corporation Self prefetching L2 cache mechanism for instruction lines

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920020314A (ko) * 1991-04-05 1992-11-21 아오이 죠이치 브랜치 예측 테이블을 사용하는 브랜치 예측 방법 및 장치
US20070266228A1 (en) 2006-05-10 2007-11-15 Smith Rodney W Block-based branch target address cache

Also Published As

Publication number Publication date
EP2347332A1 (en) 2011-07-27
US8181005B2 (en) 2012-05-15
KR20110081963A (ko) 2011-07-15
CN102160033A (zh) 2011-08-17
WO2010028316A1 (en) 2010-03-11
CN102160033B (zh) 2014-03-19
JP2012502367A (ja) 2012-01-26
US20100064123A1 (en) 2010-03-11
EP2347332B1 (en) 2012-11-07
JP5255701B2 (ja) 2013-08-07

Similar Documents

Publication Publication Date Title
KR101493019B1 (ko) 희소 및 조밀 예측 캐쉬들을 갖는 하이브리드 브랜치 예측 장치
US7376817B2 (en) Partial load/store forward prediction
US5832297A (en) Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US5887152A (en) Load/store unit with multiple oldest outstanding instruction pointers for completing store and load/store miss instructions
JP5894120B2 (ja) ゼロサイクルロード
US5848433A (en) Way prediction unit and a method for operating the same
US7779232B2 (en) Method and apparatus for dynamically managing instruction buffer depths for non-predicted branches
US9367471B2 (en) Fetch width predictor
US20110093658A1 (en) Classifying and segregating branch targets
US11868469B2 (en) Processor that mitigates side channel attacks by preventing all dependent instructions from consuming architectural register result produced by instruction that causes a need for an architectural exception
US11797673B2 (en) Processor that mitigates side channel attacks by expeditiously initiating flushing of instructions dependent upon a load instruction that causes a need for an architectural exception
US5774710A (en) Cache line branch prediction scheme that shares among sets of a set associative cache
US10067875B2 (en) Processor with instruction cache that performs zero clock retires
US8171240B1 (en) Misalignment predictor
US11099850B2 (en) Branch prediction circuitry comprising a return address prediction structure and a branch target buffer structure
US20130138888A1 (en) Storing a target address of a control transfer instruction in an instruction field
US7962722B2 (en) Branch target address cache with hashed indices
US20220197662A1 (en) Accessing A Branch Target Buffer Based On Branch Instruction Information
EP3321810B1 (en) Processor with instruction cache that performs zero clock retires
US20230367600A1 (en) Affinity groups in a micro-operations cache of a processor

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180118

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190116

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20200115

Year of fee payment: 6