KR101536179B1 - 브랜치 명령 내의 인코딩된 바이모달 브랜치 예측자 - Google Patents

브랜치 명령 내의 인코딩된 바이모달 브랜치 예측자 Download PDF

Info

Publication number
KR101536179B1
KR101536179B1 KR1020137014862A KR20137014862A KR101536179B1 KR 101536179 B1 KR101536179 B1 KR 101536179B1 KR 1020137014862 A KR1020137014862 A KR 1020137014862A KR 20137014862 A KR20137014862 A KR 20137014862A KR 101536179 B1 KR101536179 B1 KR 101536179B1
Authority
KR
South Korea
Prior art keywords
branch
instruction
bimodal
prediction
bits
Prior art date
Application number
KR1020137014862A
Other languages
English (en)
Other versions
KR20130111583A (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 KR20130111583A publication Critical patent/KR20130111583A/ko
Application granted granted Critical
Publication of KR101536179B1 publication Critical patent/KR101536179B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

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

브랜치 예측 지원을 갖는 각각의 브랜치 명령은 브랜치 명령 내의 아키텍처 규정 비트 위치들 내의 브랜치 예측 비트들을 갖는다. 명령 캐시는, 브랜치 명령이 실행될 때 동적으로 결정되는 업데이트된 브랜치 예측 비트들을 통해 브랜치 명령들을 수정하는 것을 지원한다.

Description

브랜치 명령 내의 인코딩된 바이모달 브랜치 예측자{BIMODAL BRANCH PREDICTOR ENCODED IN A BRANCH INSTRUCTION}
본 발명은 일반적으로 브랜치 예측을 지원하는 프로세싱 시스템들에서 전력 및 구현 복잡성을 감소시키고 성능을 개선하기 위한 기술들에 관한 것이며, 더욱 상세하게, 다중-레벨 메모리 계층에 저장된 브랜치 명령에 브랜치 예측 정보를 동적으로 인코딩하기 위한 유리한 기술들에 관한 것이다.
셀 전화들, 랩탑 컴퓨터들, PDA들(personal digital assistants) 등과 같은 많은 휴대용 제품들은 통신 및 멀티미디어 애플리케이션들을 지원하는 프로그램들을 실행하는 하나 이상의 프로세서들을 포함한다. 이러한 제품들에 대한 프로세서들은 전통적으로 명령 캐시, 데이터 캐시 및 시스템 메모리를 포함하는 다중-레벨들의 캐시들을 갖는 계층적 메모리 구성을 갖는다. 프로세서들은 또한 그러한 제품들에 대한 복수의 계산적으로 집약적인 기능들을 지원하기 위해 높은 성능 및 효율로 동작할 필요가 있다. 프로세서들은 통상적으로 파이프라이닝되고, 조건부 브랜치 명령들의 실행을 지원한다.
파이프라이닝된 프로세서 상의 조건부 브랜치 명령의 실행은 파이프라인을 중지시켜 조건의 결정을 계류시킬 수 있다. 프로세서를 중지시키는 것을 회피하기 위해, 프로세서가 예측된 브랜치 작동에 기초하여 추측에 근거하여 명령들을 페칭 및 실행하도록 허용하는 일부 형태의 브랜치 예측이 파이프라인에서 이미 통상적으로 사용된다. 조건부 브랜치가 잘못 예측되면, 연관된 추측에 근거하여 페칭된 명령들은 파이프라인으로부터 플러싱(flush)되고, 새로운 명령들이 결정된 브랜치 어드레스로부터 페칭된다. 그러한 잘못된 예측은 프로세서 성능을 감소시키고, 전력 사용을 증가시킨다.
브랜치 예측에 대한 종래의 접근법들은 브랜치 예측 회로들의 구현 비용 및 복잡성으로 인해 제한되고, 이들 모두는 전력을 소모한다.
본 발명의 몇몇 양상들 중에서, 본 발명은 낮은 구현 비용을 갖고 전력 사용을 감소시키는 개선된 브랜치 예측 능력들에 대한 필요성을 인지한다. 이러한 목적들을 위해, 본 발명의 실시예는 명령 캐시 내의 브랜치 명령에 바이모달 브랜치 예측자(predictor) 비트들을 저장하는 방법을 적용한다. 브랜치 타겟 어드레스는 명령 캐시로부터 페칭된 브랜치 명령에 저장된 바이모달 브랜치 예측자 비트들에 기초하여 예측된다. 브랜치 명령의 실행에 응답하여, 브랜치 예측 정확성의 평가에 기초하여 바이모달 브랜치 예측자 비트들을 변경할지에 대한 결정이 이루어진다. 페칭된 브랜치 명령 내의 바이모달 브랜치 예측자 비트들로부터 변경된 바이모달 브랜치 예측자 비트들이 명령 캐시에 저장된다.
본 발명의 또 다른 실시예는 브랜치 예측 장치를 다룬다. 명령 캐시는 명령 페치 어드레스에 브랜치 명령을 저장 및 제공하도록 구성되고, 브랜치 명령은 바이모달 브랜치 예측자 비트들을 갖는다. 파이프라인 스토리지는 브랜치 명령의 명령 페치 어드레스를 저장하도록 구성된다. 예측 회로는 제공된 브랜치 명령과 연관된 조건의 평가에 기초하여 바이모달 예측 비트들을 변경할지를 결정하도록 구성된다. 기록 제어 논리 회로는 제공된 브랜치 명령 내의 바이모달 브랜치 예측 비트들로부터 변경된 바이모달 브랜치 예측 비트들을, 명령 캐시 내의 저장된 명령 페치 어드레스에서의 브랜치 명령에 저장하도록 구성된다.
본 발명의 또 다른 실시예는 바이모달 브랜치 예측을 위한 방법을 다룬다. 조건부 브랜치 명령과 연관된 브랜치 예측 비트들은 실행 동안에 동적으로 생성된다. 동적으로 생성된 브랜치 예측 비트들은 명령 캐시 내의 조건부 브랜치 명령에 저장된다.
본 발명의 보다 완전한 이해뿐만 아니라 본 발명의 추가 특징들 및 이점들은 다음의 상세한 설명 및 첨부한 도면들로부터 명백해질 것이다.
도 1은 본 발명의 실시예가 유리하게 사용될 수 있는 예시적인 무선 통신 시스템의 블록도.
도 2는 본 발명에 따른, 메모리 계층에 저장된 브랜치 명령들로 인코딩된 바이모달 브랜치 예측자를 저장하기 위한 프로세싱 컴플렉스의 기능적 블록도.
도 3은 본 발명에 따른, 바이모달 브랜치 예측자 비트들의 동적인 인코딩을 지원하는 예시적인 32-비트 및 16-비트 조건부 브랜치 명령들 포맷을 예시한 도면.
도 4는 본 발명에 따른, 프로세서 파이프라인의 스테이지들에 연결된 예시적인 레벨 1 명령 캐시 서브시스템을 예시한 도면.
도 5는 본 발명에 따른, Icache 내의 브랜치 명령에서 바이모달 브랜치 예측 비트들을 판독 및 기록하기 위한 프로세스를 예시한 도면.
본 발명은 본 발명의 몇몇 실시예들이 도시되는 첨부한 도면들을 참조하여 이제 더 충분하게 설명될 것이다. 그러나, 이러한 발명은 다양한 형태들로 구현될 수 있으며, 본 명세서에 제시된 실시예들로 제한되는 것으로 해석되어서는 안 된다. 오히려, 이러한 실시예들은 본 발명이 철저하고 완전해지고, 당업자들에게 본 발명의 범위를 충분히 전달하도록 제공된다.
본 발명의 교시들에 따라 동작들을 수행할 때 또는 수행하기 위해서 동작되기 위한 컴퓨터 프로그램 코드 또는 "프로그램 코드"는 처음에 C, C++, JAVA®, Smalltalk, JavaScript®, Visual Basic®, TSQL, Perl과 같은 고급 프로그래밍 언어 또는 다양한 다른 프로그래밍 언어들로 기록될 수 있다. 이러한 언어들 중 하나로 기록되는 프로그램은 고급 프로그램 코드를 네이티브(native) 어셈블러 프로그램으로 변환함으로써 타겟 프로세서 아키텍처로 컴파일링된다. 또한, 타겟 프로세서 아키텍처에 대한 프로그램들은 네이티브 어셈블러 언어로 직접 기록될 수 있다. 네이티브 어셈블러 프로그램은 기계 레벨 바이너리 명령들의 명령 연상 표현(instruction mnemonic representation)들을 사용한다. 본 명세서에 사용되는 바와 같은 프로그램 코드 또는 컴퓨터 판독 가능 매체는 프로세서에 의해 이해 가능한 포맷을 가지는 객체 코드와 같은 기계 언어 코드를 지칭한다.
도 1은 본 발명의 실시예가 유리하게 사용될 수 있는 예시적인 무선 통신 시스템(100)을 도시한다. 예시를 위해서, 도 1은 3 개의 원격 유닛들(120, 130 및 150) 및 2 개의 기지국들(140)을 도시한다. 공통 무선 통신 시스템들이 더욱 많은 원격 유닛들 및 기지국들을 가질 수 있다는 것이 인지될 것이다. 컴포넌트들(125A, 125C, 125B, 125D)로 각각 표현되는 바와 같은 하드웨어 컴포넌트들, 소프트웨어 컴포넌트들, 또는 이 둘 다를 포함하는 원격 유닛들(120, 130, 150) 및 기지국들(140)은 아래에 추가로 논의되는 바와 같이 본 발명을 구현하기 위해서 적응되었다. 도 1은 기지국들(140)로부터 원격 유닛들(120, 130 및 150)로의 순방향 링크 신호들(180), 및 원격 유닛들(120, 130 및 150)로부터 기지국들(140)로의 역방향 링크 신호들(190)을 도시한다.
도 1에서, 원격 유닛(120)은 모바일 전화로서 도시되고, 원격 유닛(130)은 휴대용 컴퓨터로서 도시되며, 원격 유닛(150)은 무선 로컬 루프 시스템에서의 고정 위치 원격 유닛으로서 도시된다. 예로서, 원격 유닛들은 대안적으로, 셀 전화들, 페이저(pager)들, 워키 토키(walkie talkie)들, 핸드헬드 개인용 통신 시스템(PCS) 유닛들, 개인용 데이터 보조기들과 같은 휴대용 데이터 유닛들, 또는 미터 판독 장비와 같은 고정 위치 데이터 유닛들일 수 있다. 도 1이 본 발명의 교시들에 따른 원격 유닛들을 도시하지만, 본 발명은 이러한 예시적으로 도시되는 유닛들로 제한되지 않는다. 본 발명의 실시예들은 브랜치 예측을 지원하고 캐시들을 갖는 메모리 계층을 지원하는 임의의 프로세서 시스템에서 적절히 사용될 수 있다.
브랜치 예측 기술들은 정적 및 동적 예측들을 위한 기술들을 포함할 수 있다. 몇몇의 브랜치 명령들의 가능한 작동은 프로그래머 및/또는 컴파일러에 의해 정적으로 예측될 수 있다. 예를 들면, 브랜치 명령은, 루프의 시작에서 이전 어드레스에 대한 브랜치들인 루프 출구 평가들과 같은 런-타임 속성들에 기초하여 정적으로 예측될 수 있다. 그러한 "백워드(backward)" 브랜치들은 항상 루프에 머물도록 취해지는 것으로 예측된다. "백워드" 브랜치들은 루프에서 나갈 때 잘못 예측될 것이고, 브랜치는 브랜치 후에 다음 명령으로 빠짐으로써 취해지지 않고, 이로써 루프를 나온다. 또한, 특정 프로그램에 대해, "포워드" 브랜치들이 드물게 취해지는 것으로 결정될 수 있다. 따라서, "백워드" 브랜치는 정적으로 "취해지는 것"으로 예측될 수 있고, "포워드" 브랜치는 정적으로 "취해지지 않는 것"으로 예측된다.
동적 예측은 일반적으로 특별 브랜치 이력 메모리 회로에 저장된 특정 브랜치의 작동의 이력의 평가에 기초한다. 프로그램들의 분석은 일반적으로, 최근의 과거 브랜치 평가 패턴들이 미래의 브랜치 명령들의 작동의 양호한 표시자일 수 있다는 것을 표시한다. 간단한 브랜치-이력 브랜치 예측자의 일 예로서, 복수의 1-비트 플래그들은 조건부 브랜치 명령의 어드레스와 연관된 각각의 1-비트 플래그로 유지될 수 있다. 각각의 플래그는 연관된 조건부 브랜치가 "취해지는 것"으로 평가될 때 설정되고, 연관된 조건부 브랜치가 "취해지지 않는 것"으로 평가될 때 리셋된다. 이어서, 조건부 브랜치의 다음 발생의 예측은 간단히 연관된 플래그의 값일 수 있다. 몇몇의 브랜치 명령들에 대해, 이러한 예측자는 정확한 예측들을 산출할 수 있다.
브랜치 예측 정확성을 최대화하는 것에 밀접하게 관련된 설계 목적은 잘못된 브랜치 예측들의 부정적인 영향을 최소화는 것이다. 위에 설명되고 동적 브랜치 예측자로서 1-비트 플래그를 사용하는 "백워드" 브랜치 조건을 고려하라. 프로세서가 루프 내에 있는 동안에, 브랜치가 취해지고, 연관된 플래그는 루프를 통해 각각의 사이클에서 계속 "1"이고, "백워드" 브랜치 명령의 미래의 실행들에 대해 예측이 "취해진다". 루프에서 나올 때, "백워드" 브랜치는 "취해지는 것"으로 잘못 예측되고, 잘못된 명령들이 파이프라인에 프리페칭된다. 프로세서는 성능의 손실 및 전력 낭비를 발생시키면서 알려진 브랜치 오예측 복구 방법들에 따라 잘못된 브랜치 예측으로부터 복구한다. 이러한 이벤트로 인해, 연관된 1 비트 플래그는 "취해지지 않은" 브랜치 이력을 반영하도록 리셋된다. 그러나, "백워드" 브랜치 명령의 다음 실행은 루프의 제 1 사이클에 있을 가능성이 가장 높을 것이며, "취해지지 않은" 플래그에 기초한 예측은 부정확할 것이다. 이러한 시나리오에서, 단일-비트 브랜치 평가 이력은 각각의 루프 출구 브랜치 평가에 대해 2 개의 오예측들을 발생시키는데, 하나의 오예측은 루프 출구의 단부에 있고, 또 다른 오예측은 루프의 제 1 사이클에서 "백워드" 브랜치 명령의 다음의 후속 실행에 있다.
잘못 예측된 브랜치 평가의 효과를 최소화하기 위한 하나의 기술은 강한 또는 약한 예측을 나타내기 위해 신뢰 요인에 의해 브랜치 예측을 가중화하는 것이다. 신뢰 요인은, 예를 들면, 2-비트 포화 카운터의 상태에 의해 표현되는 브랜치 이력에 기초하는 바이모달 브랜치 예측자에 의해 생성될 수 있다. 이러한 기술을 사용하여 예측되는 각각의 브랜치에 대해 별개의 카운터 또는 별개의 2-비트 이력 스토리지가 요구된다. 각각의 카운터는 다음과 같이 가중된 예측 값을 각각 나타내는 4 개의 상태들 중 하나를 가정한다.
11 - 취해지는 것으로 강하게 예측됨
10 - 취해지는 것으로 약하게 예측됨
01 - 취해지지 않는 것으로 약하게 예측됨
00 - 취해지지 않는 것으로 강하게 예측됨
예를 들면, 카운터는 대응하는 조건부 브랜치 명령이 "취해지는 것"으로 평가할 때마다 증가되고, 명령이 "취해지지 않는 것"으로 평가될 때마다 감소된다. 증가는 "취해지는 것으로 강하게 예측된" 상태를 향한 방향으로 이동하는 2 개의 상태들 사이의 순방향 전환이고, 감소는 "취해지지 않는 것으로 강하게 예측된" 상태로 향한 방향으로 이동하는 2 개의 상태들 사이의 역방향 전환이다. 예를 들면, "01"의 취해지지 않는 것으로 약하게 예측된 상태로부터의 증가는 "10"의 취해지는 것으로 약하게 예측된 상태로의 순방향 전환이다. 증가가 0b11에서 정지하고, 감소가 0b00에서 정지하기 때문에, 이러한 증가/감소는 "포화"이다. 따라서, 브랜치 예측은, 2 비트 포화 카운터 출력의 최상위 비트(MSB)를 검사함으로써 결정될 바와 같이, 취해진 또는 취해지지 않은 예측뿐만 아니라, 카운터 값의 양자의 비트들을 활용하는 예측의 세기 또는 신뢰도를 나타내는 가중 요인을 포함한다.
바이모달 브랜치 예측자를 구현하기 위한 대안적인 기술은 유한 상태 머신에 기초한다. 별개의 유한 상태 머신 예측자는 예측되는 각각의 브랜치에 대해 사용된다. 유한 상태 머신 예측자는 4 개의 상태들을 갖는데, 각각의 상태는 다음과 같은 가중된 예측 값을 나타낸다.
11 - 취해진 것으로 강하게 예측됨
10 - 취해진 것으로 약하게 예측됨
00 - 취해지지 않은 것으로 약하게 예측됨
01 - 취해지지 않은 것으로 강하게 예측됨
유한 상태 머신 예측자는, 현재 상태 및 연관된 조건부 브랜치 명령이 "취해진 것"으로 평가되는지에 의존하여 가중된 예측 값들의 2 개의 상태들 사이에서 순방향 전환들 "01" → "00" → "10" → "11" ― "11"에서 포화함― 을 한다. 유한 상태 머신 예측자는, 현재 상태 및 연관된 조건부 브랜치 명령이 "취해지지 않은 것"으로 평가되는지에 의존하여 가중된 예측 값들의 2 개의 상태들 사이에서 역방향 전환들 "11" → "10" → "00" → "01" ― "00"에서 포화함― 을 한다. 유한 상태 머신 예측자를 통해, 가중된 예측 값의 최상위 비트는 P 비트로 라벨링되고, 가중된 예측 값의 최하위 비트는 Q 비트로 라벨링되고, 예측의 세기를 나타낸다.
위에 고려된 "백워드" 브랜치 명령과 같은 브랜치 명령은 단일-비트 플래그 예측자를 사용하여 2 번 잘못 예측히기보다는, 바이모달 브랜치 예측자를 사용하여 한번만 잘못 예측할 것이다. 루프 출구에서 브랜치 예측은 "강하게 취해진 것"으로부터 "약하게 취해진 것"으로 예측자를 이동시킬 것이다. 실제 예측은 바이모달이고, 위에 설명된 연관된 2-비트 카운터 또는 유한 상태 머신 예측자로서 구현될 수 있는 바이모달 예측자 회로의 MSB에 의해 표현된다. 따라서, "백워드" 브랜치 명령의 다음 발생은 "취해지는 것"으로 예측될 것이고, 이것은 정확할 수 있고, 예측자는 "강하게 취해진" 상태로 다시 이동할 것이다. 가중된 예측 값의 이진 값은 범위의 양 단부에서 더 큰 신뢰도를 갖고 범위의 중간을 향해 더 낮은 신뢰도를 갖는 브랜치 예측 신뢰도의 세기를 결정한다.
그러한 바이모달 예측 시스템을 구현하는 비용은, 브랜치 카운터 또는 유한 상태 머신 예측자와 브랜치 명령의 어드레스를 연관시키기 위해 브랜치 이력 테이블 등 및 수단을 요구하여 비용이 많이 든다. 큰 프로그램들의 지원을 위해 5 내지 7 개의 명령들에 직면될 수 있는(encountered) 경우, 브랜치 이력 테이블은 매우 클 수 있다.
도 2는 본 발명에 따른, 메모리 계층(202)에 저장된 브랜치 명령들에 인코딩된 바이모달 브랜치 예측자를 저장하기 위한 프로세싱 컴플렉스(200)의 기능적 블록도이다. 프로세서 컴플렉스(200)는 메모리 계층(202), 및 프로세서 파이프라인(206), 제어 회로(208) 및 레지스터 파일(RF)(210)을 갖는 프로세서(204)를 포함한다. 메모리 계층(202)은 레벨 1 명령 캐시(L1 Icache)(230), 레벨 1 데이터 캐시(L1 Dcache)(232) 및 메모리 시스템(234)을 포함한다. 제어 회로(208)는 프로그램 카운터(PC)(209)를 포함한다. 프로세서 컴플렉스에 접속될 수 있는 주변 디바이스들이 논의를 명확히 하기 위해 도시되지 않는다. 프로세서 컴플렉스(200)는, 더 높은 레벨들의 캐시 및 메인 메모리를 포함할 수 있는 메모리 시스템(234)과 연관되고 L1 Dcache(232)에 저장된 데이터를 활용하여, L1 Icache(230)에 저장되는 프로그램 코드를 실행하기 위해 도 1의 하드웨어 컴포넌트들(125A-125D)에서 적절히 사용될 수 있다. 프로세서(204)는 범용 프로세서, 다중-스레드 프로세서, 디지털 신호 프로세서(DSP), ASP(application specific processor) 등일 수 있다. 프로세싱 컴플렉스(200)의 다양한 컴포넌트들은 주문형 집적 회로(ASIC) 기술, 필드 프로그래밍 가능 게이트 어레이(FPGA) 기술 또는 다른 프로그래밍 가능 논리, 이산 게이트 또는 트랜지스터 논리, 또는 의도된 애플리케이션에 대해 적절한 임의의 다른 이용 가능한 기술을 사용하여 구현될 수 있다.
프로세서 파이프라인(206)은, 예를 들면, 6 개의 주요 스테이지들: 명령 페치 스테이지(214), 예측 논리 회로(217) 및 바이모달 예측자 회로(218)를 갖는 디코드 및 예측 스테이지(216), 디스패치 스테이지(219), 판독 레지스터 스테이지(220), 실행 스테이지(222) 및 라이트 백(write back) 스테이지(224)를 포함한다. 단일 프로세서 파이프라인(206)이 도시되지만, 본 발명의 메모리 계층(202) 및 디코드 및 예측 스테이지(216)를 사용하는 명령들의 프로세싱은 병렬 파이프라인들을 구현하는 슈퍼스칼라(superscalar) 설계들 및 다른 아키텍처들에 적용 가능하다. 예를 들면, 높은 클록 레이트들에 대해 설계된 슈퍼스칼라 프로세서는 다수의 스레드들을 지원하는 둘 이상의 병렬 파이프라인들을 가질 수 있고, 각각의 파이프라인은 높은 클록 레이트를 지원하기 위해서 명령 페치 스테이지(214), 디코드 스테이지(216), 디스패치 스테이지(219), 판독 레지스터 스테이지(220), 실행 스테이지(222) 및 라이트백 스테이지(224)를 전체 프로세서 파이프라인 심도(depth)를 증가시키는 둘 이상의 파이프라이닝된(pipelined) 스테이지들로 분할할 수 있다. 또한, 설계, 구현, 또는 다른 이유들에 대해, 예측 논리 회로(217) 및 바이모달 예측자 회로(218)는, 예를 들면, 제어 회로(208)에서와 같이 프로세서(204)의 어딘가에 위치될 수 있다.
프로세서 파이프라인(206)의 제 1 스테이지에서 시작하여, 프로그램 카운터(PC)(209)와 연관된 명령 페치 스테이지(214)는 추후 스테이지들에 의한 프로세싱을 위해서 L1 Icache(230)로부터 명령들을 페칭한다. L1 Icache(230)에서 명령 페치가 잘못된 경우 ― 페칭될 명령이 L1 Icache(230)에 있지 않음을 의미함 ― , 명령은 레벨 2(L2) 캐시와 같은 다중 레벨들의 캐시 및 메인 메모리를 포함할 수 있는 메모리 시스템(234)으로부터 페칭된다. 명령들은 다른 소스들, 이를테면, 부트(boot) 판독 전용 메모리(ROM), 하드 드라이브, 광 디스크로부터 또는 네트워크와 같은 외부 인터페이스로부터 메모리 시스템(234)으로 로딩될 수 있다. 이어서, 페칭된 명령은 디코드 스테이지(216)에서 디코딩된다.
디스패치 스테이지(219)는 하나 이상의 디코딩된 명령들을 취하며, 이들을 하나 이상의 명령 파이프라인들에 디스패치한다. 판독 레지스터 스테이지(220)는 RF(210)로부터 데이터 오퍼랜드들을 페칭한다. 실행 스테이지(222)는 디스패치된 명령을 실행하고, 라이트-백 스테이지(224)는 결과를 RF(210)에 기록한다. 실행 스테이지(222)로부터의 결과 오퍼랜드들은 조건부 브랜치 명령에 의해 사용되는 조건을 결정하기 위해 다수의 실행 사이클들을 취할 수 있다. 이러한 사이클들 동안, 프로세서 파이프라인(206)은 결과 오퍼랜드가 이용 가능할 때까지 대기하여야 한다. 결과들이 프로그램 순서와 비교하여 잘못된 순서로 라이트 백 스테이지(224)로부터 수신될 수 있기 때문에, 라이트 백 스테이지(224)는 RF(210)에 결과들을 기록할 때 프로그램 순서를 보존하기 위해서 프로세서 설비들을 사용한다.
프로세서 컴플렉스(200)는 컴퓨터 판독 가능 저장 매체 상에 저장된 프로그램의 제어 하에 명령들을 실행하도록 구성될 수 있다. 예를 들어, 컴퓨터 판독 가능 저장 매체는 L1 Dcache(232) 및 메모리 시스템(234)으로부터 획득된 데이터 상에서의 동작을 위해서, 프로세서 컴플렉스(200)와 로컬적으로 직접 연관될 수 있거나(이를테면, L1 Icache(230)로부터 이용 가능할 수 있음) 또는 예를 들어, 입력/출력 인터페이스(미도시)를 통해 연관될 수 있다. L1 Icache(230)로부터 페칭된 조건부 브랜치 명령(Cbranch)은 명령 페치 스테이지(214)에서 수신된다. L1 Icache(230)에 Cbranch과 함께 동적으로 저장된 바이모달 예측 비트들은, 페칭된 조건부 브랜치 명령이 취해지거나 취해지지 않는지를 예측하기 위해 디코드 및 예측 스테이지(216)에서 리트리브(retrive) 및 사용된다. 추가적인 명령들은 예측에 기초하여 추측에 근거하여 페칭될 수 있다. Cbranch가 실행 스테이지(22)에 있을 때, 조건이 결정되고, Cbranch가 취해지는 경우에 바이모달 예측자의 상태의 순방향 전환들을 하고, Cbranch가 취해지지 않는 경우에 바이모달 예측자의 상태의 역방향 전환들을 하도록 예측 신호(223)를 통해 바이모달 예측자 회로(218)에 통지된다. 이어서, 바이모달 예측자 회로(218)의 업데이트된 상태는 L1 Icache(230)에서 다음에 이용 가능한 기록 사이클에서 연관된 Cbranch에 바이모달 예측 비트들을 저장하도록 바이모달 비트 신호(240)를 통해 전달된다. 저장된 Cbranch 명령 내의 변경된 바이모달 브랜치 예측자 비트들은, 다음에 Cbranch 명령이 Cbranch 명령의 기능에 영향을 주지 않고 페칭될 때, 다음의 브랜치 타겟 어드레스의 예측에 영향을 준다. L1 Icache(230) 및 디코드 및 예측 스테이지(216)를 사용하는 프로세서 파이프라인(206)의 더 상세한 설명은 상세한 코드 예들을 통해 아래에 제공된다.
도 3은 본 발명에 따른, 바이모달 브랜치 예측자 비트들의 동적 인코딩을 각각 지원하는 예시적인 32-비트 및 16-비트 조건부 브랜치 명령 포맷들(302 및 304)을 예시한다. 32-비트 조건부 브랜치 명령 포맷(302)은 제 1 조건 코드 선택 필드(306), 제 1 오피코드(opcode)(308), 예측 비트(310), 24-비트 사인 오프셋(312) 및 Q 비트(314)를 포함한다. 16-비트 조건부 브랜치 명령 포맷(304)은 제 2 오피코드(320), 제 2 조건 코드 선택 필드(322), 및 하프-워드 어드레스 경계들 상에서 16-비트 명령들의 어드레스들을 식별하기 위한 8-비트 사인 오프셋(324)을 포함한다.
예측 비트(310)와 같이, 조건부 브랜치 명령들 내의 예측 비트들은 프로그램을 로딩하기 전에 정적으로 결정된다. 예를 들면, 백워드 브랜치 명령의 24-비트 사인 오프셋 필드(312)로부터 결정될 수 있은 바와 같은 백워드 브랜치는 P 비트(310)를 1 값으로 단언함으로써 "취해지는 것"으로서 컴파일러에 의해 예측될 수 있다. 바이모달 예측자 회로(218)의 유한 상태 머신 구현을 통해, Q 비트(314)는 강한 예측을 표시하기 위해 1 값으로 설정될 수 있다. 대안적으로, Q 비트(314)는 약한 예측을 표시하기 위해 0 값으로 설정될 수 있다. 예를 들면, Q-비트(314)에 대한 초기 또는 디폴트 설정이 제로일 수 있다. 대안적인 실시예에서, 바이모달 예측자 비트들 양자는 프로그램의 분석에 의해 정적으로 결정되고, 프로그램을 실행하기 전에 브랜치 명령에 규정될 수 있다. 예를 들면, 루프 백 기능으로서 사용되는 조건 브랜치(Cbranch) 명령을 갖는 프로그램 맥락에서, P 비트(310)는 "1"로 설정될 수 있고, Q 비트(314)는 약하게 취해진 상태를 나타내는 "0"으로 설정될 수 있다. 루프를 통한 제 1 사이클 상에서, Cbranch 명령은 취해지는 것으로 예측될 가능성이 가장 클 것이고, 또한 취해지는 것으로 평가될 가능성이 가장 클 것이다. 취해진 것의 평가는 바이모달 예측자 회로로 하여금 "11"의 강하게 취해진 상태로 진행하게 할 것이다.
바이모달 예측자 회로(218)의 2 비트 포화 카운터 구현을 통해, 취해진 것 또는 취해지지 않는 것의 예측은 2 비트 포화 카운터 출력의 최상위 비트(MSB)를 검사함으로써 결정될 수 있다. 예측의 세기 또는 신뢰도는 카운터 값의 비트들 양자를 검사함으로써 이루어질 수 있다. 예를 들면, 2 비트 포화 카운터 출력의 exclusive or not(┑XOR)은 예측의 세기의 이진 표시를 제공하고, 여기서 "1"은 강한 예측을 나타내고, "0"은 약한 예측을 나타낸다. 위에 설명된 바와 같은 2 비트 포화 카운터의 가중된 예측 값들을 사용함으로써, "10"의 취해진 것으로 약하게 예측된 상태 또는 "01"의 취해지지 않은 것으로 약하게 예측된 상태와 같은 원하는 상태는 프로그램을 로딩하기 전에 조건부 브랜치 명령에서 선택되고, 초기에 설정될 수 있다. 바이모달 예측자 회로(218)의 양자의 비트들은 가중된 예측 값의 상태 변화를 결정하기 위해 검사된다.
예측 비트(310) 및 Q 비트(314)는 조건부 브랜치 명령과 연관된 바이모달 예측자 회로의 최상위 비트(MSB) 및 최하위 비트(LSB) 각각에 의해 동적으로 결정된다. 조건부 브랜치 명령은 제 1 오피코드(308)의 인코딩에 의해 디코드 동안에 식별될 수 있다. Q 비트(314)는 32-비트 조건부 브랜치 명령 포맷(302)의 비트-0 위치에 위치된다. 어드레스의 비트-0 위치는 일반적으로 하프-워드 어드레스 경계들 상에서 16-비트 명령을 식별하기 위해 16-비트 및 32-비트 명령들을 갖는 프로세서에서 사용된다. 그러나, 비트-0 위치는 32-비트 조건부 브랜치 명령 포맷(302)에서 어드레싱 목적들을 위해 사용되지 않는데, 왜냐하면, 정의에 의해, 모든 32-비트 명령들이 워드 정렬되고, 비트-0이 16-비트 어드레스 비트를 나타내기 때문이다. 대안적으로, Q 비트는 별개의 어레이에 각각의 조건부 브랜치 명령에 대해 저장될 수 있고, 반면에 예측 비트는 조건부 브랜치 명령에 저장된 상태에 있다.
도 4는 본 발명에 따른, 프로세서 파이프라인(206)의 스테이지들에 연결된 예시적인 레벨 1 명령 캐시(L1 Icache) 서브시스템(400)을 예시한다. L1 Icache 서브시스템(400)은 L1 Icache(230) 및 프로세서 파이프라인(206)의 다수의 스테이지들을 포함한다. L1 Icache(230)는 ICAM(instruction content addressable memory)(402), IRAM(instruction random access memory)(403) 및 기록 제어 논리(404)를 포함한다.
명령이 페칭될 때, 프로세서 파이프라인(206)의 명령 페치 스테이지(214)는 L1 Icache(230)의 ICAM(402)에서 수신되는 페치 어드레스(408)를 발행한다. 페치 어드레스(408)는, 예를 들면, 캐시 라인 어드레스 및 캐시 라인 어드레스에 의해 어드레싱되는 캐시 라인 내의 브랜치 명령 위치에 대한 오프셋을 포함한다. 페치 어드레스(408)는, 페치 어드레스(408)에서의 명령이 캐시의 IRAM(403)에서 발견되는지를 결정하기 위해 ICAM(402) 내의 엔트리들과 비교된다. 매치가 ICAM(402)에서 결정되면, ICAM(402) 내의 매칭 엔트리와 연관된 IRAM(403)에서의 라인을 선택하기 위해 히트(hit) 표시(410)가 생성된다. 예를 들면, 제 1 명령(Instr. 1)(414), P 비트(417) 및 Q 비트(418)를 갖는 조건부 브랜치 명령(Cbranch)(416), 및 부가적인 명령들(420)을 포함하는 명령 라인(412)이 선택될 수 있다.
선택된 명령 라인(412)은 L1 Icache(230)의 출력(424)으로 지향되고, 명령 페치 스테이지(214)에서 수신된다. Cbranch(416)에 대한 프로세서 파이프라인(206)의 다음 스테이지에서, 디코드 및 예측 스테이지(216)는 Cbranch(416)가 취해지거나 취해지지 않는지를 예측하기 위해 P 비트(417) 및 Q 비트(418)를 사용한다. 예측에 기초하여, PC(209)는 이에 따라 조절되고, 명령 페치 스테이지(214)는 취해지거나 취해지지 않은 어드레스에서 다음의 페치 어드레스를 생성한다. Cbranch(416)의 어드레스 및 예측 P 비트(417) 및 Q 비트(418)는 조건 결정 후의 추후 검사를 위해 파이프라인 버퍼(412)에 저장된다.
Cbranch(416)는, 예를 들면, 디스패치 스테이지(219), 판독 레지스터 스테이지(220)를 통해 프로세서 파이프라인(206) 아래로 계속되고, 조건이 결정되는 실행 스테이지(222)에 도달한다. 예측 신호(223)는, 조건이 "취해지는 것"으로 표시하는 경우에 바이모달 예측자 회로(BP)(218)에서 순방향 전환을 하고, 조건이 "취해지지 않는 것"으로 표시하는 경우에 BP(218)에서 역방향 전환들을 하도록 디코드 및 예측 스테이지(216)에 통지한다. 이어서, 디코드 및 예측 스테이지(216)는 BP(218)로부터 선택된 바이모달 브랜치 비트들을 바이모달 비트 신호(240)를 통해 기록 제어 논리(404)에 전달한다. 최종 바이모달 브랜치 비트 값들이 이전 P 비트(417) 및 Q 비트(418) 값들과 상이하면, 기록 제어 논리(404)는 L1 Icache(230) 내의 Cbranch 명령(416) 내의 연관된 P 비트 및 Q 비트 값들을 업데이트함으로써 최종 P 비트 및 Q 비트 값들이 저장되게 한다. 따라서, 이전 P 비트(417) 및 이전 Q 비트(418) 값들이 대체될 수 있다. 예를 들면, 가장 최근 버전의 P 비트 및 Q 비트는 명령 라인(412) 내의 Cbranch 위치에서 로딩될 내부 신호(430)를 통해 전달될 수 있다. 대안적인 접근법에서, 가장 최근 버전의 P 비트 및 Q 비트로 업데이트된 페칭된 Cbranch 명령은 명령 라인(412) 내의 Cbranch 위치에서 로딩될 내부 신호(430)를 통해 전달될 수 있다. 내부 신호들(428 및 432)은, 명령 캐시 라인 내의 다른 명령 위치들에 저장될 수 있는 조건부 브랜치 명령들의 액세스를 지원하기 위해 그 다른 명령 위치들과 연관된다. 조건부 브랜치 명령이 Icache로부터 판독될 때 내지 브랜치 예측 정보가 다시 Icache에 기록될 포인트 사이의 시간 동안에 Icache 라인이 Icache로부터 대체되면, 브랜치 예측 정보가 플러싱되고, 캐시가 업데이트되지 않는다.
Cbranch 명령이 L1 Icache(230)에서 발견되지 않는다면, 누락(miss)이 표시되고, 페치 어드레스가 메모리 계층 내의 다음 레벨의 메모리로 포워딩된다. 예를 들면, 통합된 레벨 2 캐시(L2 캐시)가 사용될 수 있다. L2 캐시에서의 히트를 통해, L2 캐시로부터 액세스된 Cbranch 명령은 로딩을 위해 L1 Icache(230)로 포워딩되고, 동시에 프로세서 파이프라인(206) 내의 명령 페치 스테이지(214)로 포워딩된다. Cbranch에 대한 바이모달 예측 비트들에 대한 업데이트들을 결정할 때, L1 Icache(230) 내의 Cbranch는 P 비트 및 Q 비트의 가장 최근 값들로 동적으로 업데이트된다. 예를 들면, L1 Icache가 단일 포트 디바이스이면, Cbranch 명령의 업데이트는 L1 Icache가 일반적으로 업데이트를 통해 우선 순위를 갖는 명령들을 페칭하는 경우에 중지될 수 있다. L1 Icache가 2 개의 포트 디바이스이면, Cbranch 명령의 업데이트는 하나의 포트를 사용하여 실행될 수 있고, 반면에 명령들은 제 2 포트를 사용하여 Icache로부터 페칭된다. 브랜치 예측 정보는 또한, Cbranch 명령을 갖는 캐시 라인이 L1 Icache에 존재할지라도 L2 캐시로 포워딩된다. L1 라인이, 예를 들면, LRU(least recently used)와 같은 대체 정책에 기초하여 대체되면, 다음에 라인이 L2 캐시로부터 페칭될 때, L2 캐시에 저장된 Cbranch 명령으로부터 가장 최근의 예측 정보가 이용 가능하게 되는데, 왜냐하면 L2 캐시 라인이 이미 업데이트되었기 때문이다. 또 다른 접근법에서, L1 Icache가 브랜치 정보로 업데이트될 때, Cbranch 명령을 갖는 명령 라인과 연관된 태그 내의 더티 비트(dirty bit)가 설정된다. L1 Icache 내의 더티 비트가 대체될 때, 오래된 더티 라인이 L2 캐시에서 업데이트된다.
도시된 예시적인 파이프라인(206)에 대해, 파이프라인에서 4 개의 백 투 백(back to back) 조건부 브랜치들의 가능성을 고려하기 위해 4 개의 바이모달 예측자 회로들이 디코드 및 예측 스테이지(216)에 위치될 수 있다. 바이모달 예측자 회로들의 수는 파이프라인의 심도에 따라 변동한다. 더 큰 심도를 갖는 파이프라인들에 대해, 4 개를 초과하는 바이모달 예측자 회로들이 요구될 것이고, 요건들에 의존하여, "n" 개의 바이모달 예측자 회로들을 구현할 수 있고, 여기서 "n"은 파이프라인 심도에 의해 지원되는 수 미만이다. 그러한 경우에, "n+1" 조건부 브랜치 명령을 수신할 때, 그러한 브랜치는 이용 가능한 예측 지원을 갖지 않을 것이고, 중지될 것이다. 예를 들면, 예측된 브랜치 타겟 어드레스에서의 추측적인 액세스는, "n+1" 브랜치에 대한 조건이 결정될 때 브랜치 타겟 어드레스가 생성될 수 있을 때까지 중지될 것이다.
예를 들면, 각각의 조건부 브랜치 명령과 연관된 바이모달 카운터들을 사용하는 브랜치 예측은 통상적으로 바이모달 카운터 비트 및 연관된 조건부 브랜치 명령에 대한 대응 값을 저장하기 위해 별개의 브랜치 예측 어레이를 갖는 예측 논리 회로를 사용한다. 회로 요건들에 의해 용량 면에서 제약되는 그러한 브랜치 예측 어레이는 본 발명에 의해 요구되지 않는다. 따라서, 본 발명에 따른 하드웨어 회로 구현은 브랜치 예측의 효과를 유지하면서 감소된다. 또한, 본원에 기재된 바와 같은 브랜치 예측은 각각의 브랜치 명령과 함께 바이모달 예측 정보를 저장하고, 브랜치 예측 어레이에 의해 용량 면에서 제한되지 않을 수 있다. 따라서, 브랜치 예측 어레이를 사용하는 접근법들과 비교하여 전력 사용이 최소화된다.
도 5는 본 발명에 따른, Icache 내의 브랜치 명령에 바이모달 브랜치 예측 비트들을 판독 및 기록하기 위한 프로세스를 예시한다. 구현 세부 사항들을 강조하고 명확히 하기 위해 이전 도면들에 대한 참조들이 이루어진다. 제 1 단계(502)에서, 프로세싱 컴플렉스(200) 상에서 프로그램이 시작된다. 또한, 프로세스(500)가 프로세서 파이프라인(206)을 통해 흐름에 따라, 프로세스(500)가 하나의 조건부 브랜치 명령의 경로를 따른다.
단계(504)에서, 명령이 L1 Icache(230)로부터 페칭된다. 결정 단계(506)에서, 페칭된 명령이 조건부 브랜치(Cbranch) 명령인지에 대한 결정이 이루어진다. 페칭된 명령이 Cbranch 명령이 아니면, 프로세스(500)는 단계(504)로 복귀한다. 페칭된 명령이 Cbranch 명령이면, 프로세스(500)는 단계(508)로 진행된다.
단계(508)에서, 페칭된 Cbranch 명령이 디코드 및 예측 스테이지(216)에서 디코딩되고, 바이모달 예측 비트들이 조건부 브랜치 명령으로부터 선택된다. 단계(510)에서, Cbranch 명령의 페치 어드레스 및 선택된 바이모달 예측 비트들은 도 5의 파이프라인 버퍼(421)에 저장된다. 단계(512)에서, 브랜치 타겟 어드레스는 바이모달 예측 비트들에 기초하여 예측된다. 결정 단계(514)에서, 페치 어드레스가 업데이트되어야 하는지에 대한 결정이 이루어진다. 페치 어드레스가 예측된 브랜치 타겟 어드레스로 변경될 필요가 있다면, 프로세스(500)는 단계(516)로 진행된다. 단계(516)에서, 명령 페치 스테이지(214)에서 사용되는 페치 어드레스는 예측된 브랜치 타겟 어드레스에 기초하여 단계(504)에서 명령을 페칭하기 위해 추측에 근거하여 업데이트되고, 프로세스(500)는 단계(518)로 진행된다. 결정 단계(514)로 복귀하여, 페치 어드레스가 변경될 필요가 없다면, 프로세스(500)는 단계(518)로 진행된다.
단계(518)에서, Cbranch 명령에 대한 조건이, 예를 들면, 실행 스테이지(222)에서 결정되고, 프로세스(500)는 결정 단계들(520 및 521)로 동시에 진행된다. 단계(518)에서 결정된 조건은 바이모달 브랜치 예측 정확성을 결정하기 위해 사용된다. 결정 단계(520)에서, Cbranch 명령이 잘못 예측되었는지에 대한 결정이 이루어진다. Cbranch 명령이 잘못 예측되었다면, 프로세스(500)는 단계(522)로 진행된다. 단계(522)에서, 프로세서 파이프라인(206)은 플러싱되고, 페치 어드레스는 정정된 페치 어드레스로 설정된다. Cbranch 명령이 잘못 예측되지 않았다면, 프로세스(500)는 단계(524)로 진행된다. 단계(524)에서, 프로세스 파이프라인(206)은 정상 파이프 동작들에 따라 계속된다.
결정 단계(521)에서, Cbranch 명령이 취해지는 것으로 평가된다는 것을 조건이 표시하는지에 대한 결정이 이루어진다. Cbranch 명령이 취해지는 것으로 평가되지 않는다면, 다시 말해서, Cbranch 명령이 취해지지 않는 것으로 평가되면, 프로세스(500)는 단계(526)로 진행된다. 단계(526)에서, 바이모달 예측자 회로는 역방향으로 조절되고, 예측 값은 "00"의 바이모달 예측 값에서 포화되고, 프로세스(500)는 결정 단계(530)로 진행된다. 결정 단계(520)로 복귀하여, Cbranch 명령이 취해지는 것으로 평가되면, 프로세스(500)는 단계(528)로 진행된다. 단계(528)에서, 바이모달 예측자 회로가 순방향으로 조절되고, 예측 값은 "11"의 바이모달 예측 값에서 포화되고, 프로세스(500)는 결정 단계(530)로 진행된다.
결정 단계(530)에서, 바이모달 예측자 회로 비트들이 페칭된 Cbranch 명령으로부터 선택된 바이모달 예측 비트들과 상이한지에 대한 결정이 이루어진다. 바이모달 예측자 회로 비트들이 페칭된 Cbranch 명령으로부터 선택된 바이모달 예측 비트들과 동일하면, 프로세스(500)는 단계(504)로 진행된다. 바이모달 예측자 회로 비트들이 Cbranch 명령의 바이모달 예측 비트들과 상이하면, 프로세스(500)는 단계(532)로 진행된다. 단계(532)에서, L1 Icache 내의 Cbranch 명령과 저장된 바이모달 예측 비트들은 이용 가능한 Icache write cycle로 업데이트된다. 이어서, 프로세스(500)는 단계(504)로 진행된다.
본원에 개시된 실시예들에 관련하여 설명된 방법들은 하드웨어의 조합으로, 및 프로세서에 의해 실행되는 비일시적인 신호들을 저장하는 소프트웨어 모듈로 구현될 수 있다. 소프트웨어 모듈은 랜덤 액세스 메모리(RAM), 플래시 메모리, 판독 전용 메모리(ROM), 전기적으로 프로그래밍 가능 판독 전용 메모리(EPROM), 하드 디스크, 제거 가능 디스크, 테이프, 콤팩트 디스크 판독 전용 메모리(CD-ROM) 또는 당분야에 알려진 임의의 다른 형태의 저장 매체에 상주할 수 있다. 저장 매체는, 프로세서가 저장 매체로부터 정보를 판독하고, 일부 경우들에서 저장 매체에 정보를 기록할 수 있도록 프로세서에 연결될 수 있다. 프로세서에 연결된 저장 매체는 회로 구현에 직접 연결 통합될 수 있거나, 다운 로딩 기술들을 사용하여 직접적인 액세스들 또는 데이터 스트리밍을 지원하는 하나 이상의 인터페이스들을 활용할 수 있다.
본 발명이 프로세서 시스템들에서 사용하기 위한 예시적인 실시예들에 관련하여 개시되지만, 매우 다양한 구현들이 위의 논의 및 아래에 오는 청구항들과 일치하게 당업자들에 의해 사용될 수 있다는 것이 인지될 것이다. 본원의 기술은 레벨 3 캐시들 및 메인 메모리를 포함하는 모든 레벨들의 메모리 계층에 대해 스케일링 가능하다. 또한, 조건부 브랜치 명령은 단일 비교 브랜치 명령 내의 비교 명령과 조합될 수 있다. 단일 비교 브랜치 명령은 비교 브랜치 명령의 명령 포맷 내의 바이모달 브랜치 예측 비트들을 포함한다. 예를 들면, 명령 포맷들에서 사용되지 않는 비트들은 바이모달 브랜치 예측 비트들에 대해 사용될 수 있다. 또한, 조건부 브랜치 명령은 단일 로드 내의 로드 명령, 및 바이모달 브랜치 예측 비트들을 또한 포함하는 브랜치 명령과 조합될 수 있다.

Claims (24)

  1. 명령 캐시 내의 브랜치 명령에 바이모달(bimodal) 브랜치 예측자(predictor) 비트들을 저장하는 방법으로서,
    명령 캐시로부터 페칭된(fetched) 브랜치 명령에 저장된 바이모달 브랜치 예측자 비트들에 기초하여 브랜치 타겟 어드레스를 예측하는 단계 ― 상기 바이모달 브랜치 예측자 비트들의 최하위 비트(LSB)는 강한(strong) 예측 또는 약한(weak) 예측을 표시함 ―;
    상기 브랜치 명령의 실행에 응답하여, 브랜치 예측 정확성의 평가에 기초하여 상기 바이모달 브랜치 예측자 비트들을 변경할지를 결정하는 단계; 및
    상기 페칭된 브랜치 명령 내의 상기 바이모달 브랜치 예측자 비트들로부터 변경된 바이모달 브랜치 예측자 비트들을 상기 명령 캐시에 저장하는 단계를 포함하는,
    명령 캐시 내의 브랜치 명령에 바이모달 브랜치 예측자 비트들을 저장하는 방법.
  2. 제 1 항에 있어서,
    상기 바이모달 브랜치 예측자 비트들은 강하게 취해진(taken), 약하게 취해진, 약하게 취해지지 않은, 및 강하게 취해지지 않은 브랜치 예측 표시를 표시하는 바이모달 예측자 회로로부터의 비트들인,
    명령 캐시 내의 브랜치 명령에 바이모달 브랜치 예측자 비트들을 저장하는 방법.
  3. 제 1 항에 있어서,
    상기 바이모달 브랜치 예측자 비트들의 최하위 비트(LSB)는, 32-비트 브랜치 명령의 동작을 규정하는데 사용되지 않는 상기 32-비트 브랜치 명령 내의 비트 위치에 할당되고,
    16-비트 브랜치 명령 내의 대응하는 비트 위치는 상기 16-비트 브랜치 명령의 동작을 규정하는데 사용되는,
    명령 캐시 내의 브랜치 명령에 바이모달 브랜치 예측자 비트들을 저장하는 방법.
  4. 제 1 항에 있어서,
    상기 바이모달 예측자 비트들은 프로그램의 분석에 의해 정적으로 결정되고, 상기 프로그램을 실행하기 전에 메모리에 로딩된 브랜치 명령에서 규정되는,
    명령 캐시 내의 브랜치 명령에 바이모달 브랜치 예측자 비트들을 저장하는 방법.
  5. 제 1 항에 있어서,
    상기 브랜치 명령이 페칭된 후에 명령 페치 어드레스를 파이프라인 스테이지들에서 저장하는 단계 ― 상기 명령 페치 어드레스는 캐시 라인 어드레스, 및 상기 캐시 라인 어드레스에 의해 어드레싱되는 캐시 라인 내의 브랜치 명령 위치에 대한 오프셋임 ― ; 및
    상기 변경된 바이모달 브랜치 예측자 비트들을 저장하기 위해, 저장된 캐시 라인 어드레스 및 상기 캐시 라인 내의 오프셋을 상기 명령 페치 어드레스로서 선택하는 단계를 더 포함하는,
    명령 캐시 내의 브랜치 명령에 바이모달 브랜치 예측자 비트들을 저장하는 방법.
  6. 제 1 항에 있어서,
    상기 명령 캐시는 레벨 1 명령 캐시인,
    명령 캐시 내의 브랜치 명령에 바이모달 브랜치 예측자 비트들을 저장하는 방법.
  7. 제 1 항에 있어서,
    상기 변경된 바이모달 브랜치 예측자 비트들을 갖는 브랜치 명령으로 레벨 2 명령 캐시를 업데이트하는 단계를 더 포함하는,
    명령 캐시 내의 브랜치 명령에 바이모달 브랜치 예측자 비트들을 저장하는 방법.
  8. 제 1 항에 있어서,
    저장된 브랜치 명령 내의 상기 변경된 바이모달 브랜치 예측자 비트들은, 다음에 상기 브랜치 명령이 상기 브랜치 명령의 기능에 영향을 주지 않고 페칭될 때, 다음 브랜치 타겟 어드레스의 예측에 영향을 주는,
    명령 캐시 내의 브랜치 명령에 바이모달 브랜치 예측자 비트들을 저장하는 방법.
  9. 제 1 항에 있어서,
    상기 변경된 바이모달 브랜치 예측자 비트들은, 상기 변경된 바이모달 브랜치 예측자 비트들을 갖는 브랜치 명령을 저장함으로써 상기 명령 캐시에 저장되는,
    명령 캐시 내의 브랜치 명령에 바이모달 브랜치 예측자 비트들을 저장하는 방법.
  10. 브랜치 예측 장치로서,
    명령 페치 어드레스에 브랜치 명령을 저장 및 제공하도록 구성된 명령 캐시 ― 상기 브랜치 명령은 바이모달 브랜치 예측자 비트들을 갖고, 상기 바이모달 브랜치 예측자 비트들의 최하위 비트(LSB)는 강한 예측 또는 약한 예측을 표시함 ― ;
    상기 브랜치 명령의 상기 명령 페치 어드레스를 저장하도록 구성된 파이프라인 스토리지(storage);
    제공된 브랜치 명령과 연관된 조건의 평가에 기초하여 상기 바이모달 브랜치 예측자 비트들을 변경할지를 결정하도록 구성된 예측 회로; 및
    상기 제공된 브랜치 명령 내의 바이모달 브랜치 예측자 비트들로부터 변경된 바이모달 브랜치 예측자 비트들을, 상기 명령 캐시 내의 저장된 명령 페치 어드레스에서 상기 브랜치 명령에 저장하도록 구성된 기록 제어 논리 회로를 포함하는,
    브랜치 예측 장치.
  11. 제 10 항에 있어서,
    상기 기록 제어 논리 회로는 추가로, 페칭된 브랜치 명령 내의 바이모달 브랜치 예측자 비트들로부터 변경된 바이모달 브랜치 예측자 비트들을 갖는 상기 브랜치 명령을 상기 명령 캐시 내의 저장된 명령 페치 어드레스에 저장하는,
    브랜치 예측 장치.
  12. 제 10 항에 있어서,
    상기 브랜치 명령과 결합된 비교 명령은 비교 및 브랜치 명령인,
    브랜치 예측 장치.
  13. 제 10 항에 있어서,
    상기 브랜치 명령과 결합된 로드(load) 명령은 로드 및 브랜치 명령인,
    브랜치 예측 장치.
  14. 제 10 항에 있어서,
    상기 브랜치 예측 회로는,
    강하게 취해진, 약하게 취해진, 약하게 취해지지 않은, 및 강하게 취해지지 않은 상태들을 갖는 2 비트 카운터를 더 포함하고,
    상기 2 비트 카운터는 강하게 취해진 것을 나타내는 3의 이진 카운트에서 포화하는 각각의 취해진 브랜치에 대해 증가되고, 강하게 취해지지 않은 것을 나타내는 제로의 이진 카운트에서 포화하는 각각의 취해지지 않은 브랜치에 대해 감소되도록 구성되고,
    상기 2 비트 카운터 상태들의 exclusive or not (NOT XOR)은 상기 바이모달 브랜치 예측자 비트들의 최하위 비트(LSB)를 제공하는,
    브랜치 예측 장치.
  15. 바이모달 브랜치 예측을 위한 방법으로서,
    실행 동안에 조건부 브랜치 명령과 연관된 브랜치 예측 비트들을 동적으로 생성하는 단계 ― 상기 브랜치 예측 비트들의 최하위 비트(LSB)는 강한 예측 또는 약한 예측을 표시함 ―; 및
    동적으로 생성된 브랜치 예측 비트들을 명령 캐시 내의 상기 조건부 브랜치 명령에 저장하는 단계를 포함하는,
    바이모달 브랜치 예측을 위한 방법.
  16. 제 15 항에 있어서,
    상기 조건부 브랜치 명령이 취해지는 것으로 평가되면, 포화적인 강하게 취해진 상태를 향해 이동하는 가중된 예측 값들의 현재 상태 및 다음 상태 사이에서 순방향 전환을 하는 단계; 및
    상기 조건부 브랜치 명령이 취해지지 않는 것으로 평가되면, 포화적인 강하게 취해지지 않은 상태를 향해 이동하는 가중된 예측 값들의 현재 상태 및 다음 상태 사이에서 역방향 전환을 하는 단계를 더 포함하는,
    바이모달 브랜치 예측을 위한 방법.
  17. 제 16 항에 있어서,
    상기 가중된 예측 값들의 현재 상태 및 다음 상태는 상기 조건부 브랜치 명령을 실행하는 것의 강하게 취해진, 약하게 취해진, 약하게 취해지지 않은, 및 강하게 취해지지 않은 이력을 나타내는 유한 상태 머신 예측자의 상태들인,
    바이모달 브랜치 예측을 위한 방법.
  18. 제 15 항에 있어서,
    상기 조건부 브랜치 명령에 의해 규정된 조건의 취해지거나 취해지지 않은 해결책에 기초하여 바이모달 예측 회로를 조절하는 단계; 및
    상기 바이모달 예측 회로에 의해 표현된 브랜치 예측 비트들이 상기 조건부 브랜치 명령으로부터 디코딩된 바이모달 예측 비트들과 동일할 때, 상기 조건부 브랜치 명령으로 저장된 상기 브랜치 예측 비트들을 업데이트하지 않기로 동적으로 결정하는 단계를 더 포함하는,
    바이모달 브랜치 예측을 위한 방법.
  19. 제 15 항에 있어서,
    상기 브랜치 예측 비트들은, 바이모달 예측 회로의 약하게 취해진 상태를 표시하는 1의 최상위 비트 및 0의 최하위 비트로 초기에 설정되는,
    바이모달 브랜치 예측을 위한 방법.
  20. 제 15 항에 있어서,
    상기 조건부 브랜치 명령의 어드레스 및 상기 브랜치 예측 비트들을 임시 버퍼에 저장하는 단계;
    상기 조건부 브랜치 명령에 의해 규정된 조건의 취해지거나 취해지지 않은 해결책에 기초하여 조절된 바이모달 예측 회로 값과 저장된 브랜치 예측 비트들을 비교하는 단계; 및
    동적으로 결정된 브랜치 예측 비트들을 저장할 곳을 식별하기 위해 상기 조건부 브랜치 명령의 저장된 어드레스를 리트리브(retrieve)하는 단계를 더 포함하는,
    바이모달 브랜치 예측을 위한 방법.
  21. 제 15 항에 있어서,
    상기 조건부 브랜치 명령은 상기 브랜치 예측 비트들을 포함하는 고정된 명령 세트 아키텍처를 갖고, 상기 브랜치 예측 비트들의 최하위 비트(LSB)는 상기 조건부 브랜치 명령의 동작을 규정하는데 사용되지 않는 상기 조건부 브랜치 명령 내의 비트 위치에 할당되는,
    바이모달 브랜치 예측을 위한 방법.
  22. 제 15 항에 있어서,
    페칭된 조건부 브랜치 명령으로부터 리트리브된 상기 브랜치 예측 비트들에 따라 상기 페칭된 조건부 브랜치 명령이 취해질지 또는 취해지지 않을지를 예측하는 단계를 더 포함하는,
    바이모달 브랜치 예측을 위한 방법.
  23. 제 22 항에 있어서,
    상기 예측에 기초하여 명령들을 추론적으로(speculatively) 페칭하는 단계를 더 포함하는,
    바이모달 브랜치 예측을 위한 방법.
  24. 제 15 항에 있어서,
    취해진 상태를 갖는 상기 브랜치 예측 비트들의 최상위 비트 및 약한 예측을 갖는 상기 브랜치 예측 비트들의 최하위 비트(LSB)에 따라 페칭된 조건부 브랜치 명령이 취해질지를 예측하는 단계를 더 포함하고,
    상기 브랜치 예측 비트들은 상기 페칭된 조건부 브랜치 명령들로부터 리트리브되는,
    바이모달 브랜치 예측을 위한 방법.
KR1020137014862A 2010-11-08 2011-11-07 브랜치 명령 내의 인코딩된 바이모달 브랜치 예측자 KR101536179B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/941,105 2010-11-08
US12/941,105 US9122486B2 (en) 2010-11-08 2010-11-08 Bimodal branch predictor encoded in a branch instruction
PCT/US2011/059658 WO2012064677A1 (en) 2010-11-08 2011-11-07 Bimodal branch predictor encoded in a branch instruction

Publications (2)

Publication Number Publication Date
KR20130111583A KR20130111583A (ko) 2013-10-10
KR101536179B1 true KR101536179B1 (ko) 2015-07-13

Family

ID=45217633

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137014862A KR101536179B1 (ko) 2010-11-08 2011-11-07 브랜치 명령 내의 인코딩된 바이모달 브랜치 예측자

Country Status (7)

Country Link
US (1) US9122486B2 (ko)
EP (1) EP2638463A1 (ko)
JP (1) JP5745638B2 (ko)
KR (1) KR101536179B1 (ko)
CN (1) CN103238134B (ko)
TW (1) TW201235940A (ko)
WO (1) WO2012064677A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9519479B2 (en) 2013-11-18 2016-12-13 Globalfoundries Inc. Techniques for increasing vector processing utilization and efficiency through vector lane predication prediction
US9690587B2 (en) 2014-04-08 2017-06-27 International Business Machines Corporation Variable updates of branch prediction states
US10853074B2 (en) * 2014-05-01 2020-12-01 Netronome Systems, Inc. Table fetch processor instruction using table number to base address translation
US9442726B1 (en) 2015-12-15 2016-09-13 International Business Machines Corporation Perceptron branch predictor with virtualized weights
US10474462B2 (en) * 2016-02-29 2019-11-12 Qualcomm Incorporated Dynamic pipeline throttling using confidence-based weighting of in-flight branch instructions
CN105867884B (zh) * 2016-03-24 2018-06-15 清华大学 一种改进型PAp分支预测方法
US11086629B2 (en) * 2018-11-09 2021-08-10 Arm Limited Misprediction of predicted taken branches in a data processing apparatus
US11163577B2 (en) 2018-11-26 2021-11-02 International Business Machines Corporation Selectively supporting static branch prediction settings only in association with processor-designated types of instructions

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040059899A1 (en) * 2002-09-20 2004-03-25 International Business Machines Corporation Effectively infinite branch prediction table mechanism
EP2063355A1 (en) * 2007-11-22 2009-05-27 Sony Computer Entertainment Europe Ltd. Branch prediction method

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100310581B1 (ko) 1993-05-14 2001-12-17 피터 엔. 데트킨 분기목표버퍼의추측기록메카니즘
US5878255A (en) 1995-06-07 1999-03-02 Advanced Micro Devices, Inc. Update unit for providing a delayed update to a branch prediction array
US5887159A (en) 1996-12-11 1999-03-23 Digital Equipment Corporation Dynamically determining instruction hint fields
JP2943772B2 (ja) 1997-06-20 1999-08-30 日本電気株式会社 分岐予測方式
GB2389211B (en) 1998-12-31 2004-02-04 Intel Corp A method and apparatus for improved predicate prediction
US6351796B1 (en) 2000-02-22 2002-02-26 Hewlett-Packard Company Methods and apparatus for increasing the efficiency of a higher level cache by selectively performing writes to the higher level cache
US20030126414A1 (en) 2002-01-02 2003-07-03 Grochowski Edward T. Processing partial register writes in an out-of order processor
US7752426B2 (en) 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
US7587580B2 (en) 2005-02-03 2009-09-08 Qualcomm Corporated Power efficient instruction prefetch mechanism
US7461243B2 (en) 2005-12-22 2008-12-02 Sun Microsystems, Inc. Deferred branch history update scheme
US20070260862A1 (en) 2006-05-03 2007-11-08 Mcfarling Scott Providing storage in a memory hierarchy for prediction information
US7523298B2 (en) 2006-05-04 2009-04-21 International Business Machines Corporation Polymorphic branch predictor and method with selectable mode of prediction
US7487340B2 (en) 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US20080040576A1 (en) 2006-08-09 2008-02-14 Brian Michael Stempel Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set
US20080072024A1 (en) 2006-09-14 2008-03-20 Davis Mark C Predicting instruction branches with bimodal, little global, big global, and loop (BgGL) branch predictors
TWI379230B (en) * 2008-11-14 2012-12-11 Realtek Semiconductor Corp Instruction mode identification apparatus and instruction mode identification method
CN101763249A (zh) 2008-12-25 2010-06-30 世意法(北京)半导体研发有限责任公司 对非控制流指令减少分支检验
US20130283023A1 (en) 2012-04-18 2013-10-24 Qualcomm Incorporated Bimodal Compare Predictor Encoded In Each Compare Instruction

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040059899A1 (en) * 2002-09-20 2004-03-25 International Business Machines Corporation Effectively infinite branch prediction table mechanism
EP2063355A1 (en) * 2007-11-22 2009-05-27 Sony Computer Entertainment Europe Ltd. Branch prediction method

Also Published As

Publication number Publication date
CN103238134A (zh) 2013-08-07
JP2013545194A (ja) 2013-12-19
CN103238134B (zh) 2016-03-30
KR20130111583A (ko) 2013-10-10
TW201235940A (en) 2012-09-01
EP2638463A1 (en) 2013-09-18
US9122486B2 (en) 2015-09-01
WO2012064677A1 (en) 2012-05-18
JP5745638B2 (ja) 2015-07-08
US20120117327A1 (en) 2012-05-10

Similar Documents

Publication Publication Date Title
KR101536179B1 (ko) 브랜치 명령 내의 인코딩된 바이모달 브랜치 예측자
KR101459536B1 (ko) 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치
JP5335946B2 (ja) 電力的に効率的な命令プリフェッチ機構
EP2864868B1 (en) Methods and apparatus to extend software branch target hints
KR100930199B1 (ko) 루프―종료 브랜치들에 의한 브랜치 히스토리 레지스터의업데이트 억제
US9367471B2 (en) Fetch width predictor
EP1974254B1 (en) Early conditional selection of an operand
CN114647447A (zh) 基于上下文的存储器间接分支目标预测
US9489204B2 (en) Method and apparatus for precalculating a direct branch partial target address during a misprediction correction process

Legal Events

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

Payment date: 20180628

Year of fee payment: 4