KR20150054966A - 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 방향 히스토리(들)를 스왑하는 것, 및 관련 시스템들 및 방법들 - Google Patents

분기 예측 테이블 스왑 명령(들)에 응답하여 분기 방향 히스토리(들)를 스왑하는 것, 및 관련 시스템들 및 방법들 Download PDF

Info

Publication number
KR20150054966A
KR20150054966A KR1020157009176A KR20157009176A KR20150054966A KR 20150054966 A KR20150054966 A KR 20150054966A KR 1020157009176 A KR1020157009176 A KR 1020157009176A KR 20157009176 A KR20157009176 A KR 20157009176A KR 20150054966 A KR20150054966 A KR 20150054966A
Authority
KR
South Korea
Prior art keywords
branch
bpt
branch prediction
instruction
history
Prior art date
Application number
KR1020157009176A
Other languages
English (en)
Other versions
KR101705211B1 (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 KR20150054966A publication Critical patent/KR20150054966A/ko
Application granted granted Critical
Publication of KR101705211B1 publication Critical patent/KR101705211B1/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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques

Abstract

분기 예측 테이블 스왑 명령(들)에 응답하여 분기 방향 히스토리(들)를 스왑하는 것, 및 관련 시스템들 및 방법들이 개시된다. 일 실시예에서, 분기 히스토리 관리 회로는 분기 예측 테이블 스왑 명령을 프로세싱하도록 구성된다. 분기 예측 테이블 스왑 명령에 응답하여, 분기 히스토리 관리 회로는 캐시 메모리로부터의 현재 소프트웨어 코드 영역에 할당된 이전 분기 방향 히스토리 세트를, 분기 예측 시 이용하기 위한 분기 예측 테이블(BPT)로 스왑하도록 구성된다. 현재 분기 방향 히스토리 세트는 BPT 밖으로 스왑되며, 중복 기재되는 것을 피하기 위해 캐시 메모리에 저장된다. 이러한 방식으로, 특정한 소프트웨어 코드 영역들에 할당된 분기 방향 히스토리 세트들은 특정한 소프트웨어 코드 영역들을 프로세싱할 때 분기 예측을 위해 이용된다. 따라서, 명령 프로세싱 시스템의 명령 프로세싱 스루풋 및 분기 예측 정확성은 증가된다.

Description

분기 예측 테이블 스왑 명령(들)에 응답하여 분기 방향 히스토리(들)를 스왑하는 것, 및 관련 시스템들 및 방법들{SWAPPING BRANCH DIRECTION HISTORY(IES) IN RESPONSE TO A BRANCH PREDICTION TABLE SWAP INSTRUCTION(S), AND RELATED SYSTEMS AND METHODS}
[0001] 본 개시의 기술은 일반적으로, 중앙 처리 유닛(CPU)-기반 시스템들에서 조건부 분기 컴퓨터 명령들에 대한 조건부 분기들의 리졸루션(resolution)들을 예측하기 위해 분기 방향 히스토리를 이용하는 것에 관한 것이다.
[0002] 컴퓨터 플랫폼 진화의 핵심(heart)은 프로세서에 있다. 프로세서의 물리적 설계가 진화함에 따라, 정보를 프로세싱하고 기능들을 수행하는 방법들이 또한 변화한다. 예를 들어, 명령들의 "파이프라이닝(pipelining)"은 프로세서 설계들에서 구현되었다. 프로세서 파이프라인은 많은 스테이지들로 구성되며, 여기서 각각의 스테이지는 명령을 실행하는 것과 연관된 기능을 수행한다. 각각의 스테이지는 파이프 스테이지 또는 파이프 세그먼트로 지칭된다. 스테이지들은 파이프라인을 형성하기 위해 함께 연결된다. 명령들은 파이프라인의 한쪽 단부로 들어가고, 다른쪽 단부를 나간다. 파이프라이닝의 하나의 이점은, 명령들이 병렬로 평가되기 때문에, 명령들의 실행이 오버랩된다는 것이다. 파이프라이닝은 또한, ILP(instruction level parallelism)로 지칭된다.
[0003] 이와 관련하여, 도 1은 중앙 처리 유닛 (CPU)(12)의 예시적 명령 프로세싱 시스템(10)을 예시한다. 명령들은 도 1의 명령 스트림(14)으로 표현되는 연속 흐름으로 프로세싱된다. 명령 프로세싱 시스템(10)은 명령 파이프라인(15)을 이용한다. 명령 파이프라인(15)은 명령 인출, 명령 디코딩, 명령 실행 및 명령 커밋(commit) 스테이지들을 포함하는 복수의 파이프 스테이지들로 구성된다. 예시된 예에서, 명령 스트림(14)은, 컴퓨터 실행가능한 프로그램의 명령들에 대한 저장을 제공하는 명령 메모리(16)로부터 발신된다. 명령 인출 회로(18)는 명령 메모리(16)로부터 그리고/또는 명령 캐시(22)로부터의 명령(20)(예를 들어, 명령들(20(0)-20(W)))을 판독하며, 전형적으로 레지스터들(24(0)-24(X)) 중 하나에 저장되는 프로그램 카운터를 증분시킬 수 있다. 레지스터들(24(0)-24(X))은 명령 프로세싱 시스템(10)의 아키텍처 레지스터(architectural register)들이며, 이는 범용 레지스터(GPR)들 및/또는 다른 아키텍팅된(architected) 레지스터들(비-제한적 예들로서, 프레임 포인터, 스택 포인터, 링크 레지스터 및/또는 프로그램 카운터)을 포함할 수 있다.
[0004] 명령(20)이 명령 인출 회로(18)에 의해 인출된 이후, 명령(20)은 명령 디코드 회로(26)에 의해 디코딩된다. 명령 디코드 회로(26)는 명령(20)을 프로세서-특정 마이크로명령들로 번역(translate)하며, 레지스터들(24(0)-24(X)) 중 적절한 하나로부터, 또는 데이터 메모리(미도시) 및/또는 데이터 캐시(미도시)로부터, 명령(20)(만약 있다면)에 의해 요구되는 오퍼랜드(operand)들을 리트리브(retrieve)한다. 명령 디코드 회로(26)는 디코딩을 위해 다수의 명령들(28(0)-28(Y))의 세트를 홀딩할 수 있다. 명령들(20)은 명령 실행 파이프라인(들)(32)의 명령 큐(30)로 발행된다. 명령들(20)의 실제 실행은 명령 실행 파이프라인(32)(예를 들어, 명령 실행 파이프라인들(32(0)-32(Z)))에서 발생한다. 실행되는 명령들(20) 중 어떤 것이 필요한지를 결정하고, 이러한 결과들을, 예를 들어, 레지스터들(24)(비-제한적 예로서, 레지스터들(24(0)-24(X))), 데이터 메모리 및/또는 실행되는 명령들(20)의 결과들을 가지는 데이터 캐시를 업데이트함으로써 커밋하는 명령 커밋 회로(34)가 제공된다.
[0005] 명령들(20)은 조건부 분기 명령들을 포함할 수 있다. 조건부 분기 명령들은 취해질 수도 있고 또는 취해지지 않을 수도 있다. 조건부 분기 명령이 실행되고 분기 조건이 결정될 때까지는, 조건부 분기 명령이 취해질 것인지의 여부가 알려지지 않는다. 그러나, 조건부 분기 명령의 범위를 벗어난(beyond) 명령들은 조건부 분기 명령을 실행하기 전에 명령 파이프라인(15)으로 인출될 수 있다. 예를 들어, 분기가 취해지면, 분기가 취해지지 않았을 경우 실행되었을, 명령 파이프라인(15)으로 인출된 명령들(20)은 명령 파이프라인(15)으로부터 플러싱(flush)되어야 할 수 있다. 결과적으로, 명령 프로세싱은 명령 파이프라인(15)을 리필(refill)하기 위해, 명령 파이프라인(15)에서의 클럭 사이클 스테이지들의 수만큼 지연될 수 있다.
[0006] 명령 파이프라인(15)의 명령 플러싱을 감소시키기 위해, 분기 예측 시스템(36)이 명령 프로세싱 시스템(10)에서 이용될 수 있다. 분기 예측 시스템(36)은 조건부 분기 명령들의 방향을 예측한다. 이와 관련하여, 분기 예측 시스템(36)은 커밋된(committed) 분기 명령들(38)의 히스토리에 기초하여 조건부 분기 명령의 방향을 예측하는 분기 예측(40)을 제공한다. 분기 예측(40)은 명령 프로세싱 시스템(10)의 명령 프로세싱 회로(42)(비-제한적 예들로서, 명령 인출 회로(18) 및/또는 명령 디코드 회로(26))에 제공된다. 분기 예측(40)에 기초하여, 프로세서는 조건부 분기 명령의 분기 타겟 어드레스에서의 명령들(20)을 명령 파이프라인(15)으로 인출하거나, 다음의 순차적 명령들(20)을 명령 파이프라인(15)으로 인출할 수 있다. 그러나, 종래의 방법들을 이용하여 제공되는 분기 예측들은 원하는 만큼 정확하지 않을 수 있다.
[0007] 본 개시의 실시예들은 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 방향 히스토리(들)를 스왑하는 것, 및 관련 시스템들 및 방법들을 제공한다. 분기 예측 테이블(BPT)은 조건부 분기 명령들의 분기 방향을 예측하기 위해 명령 프로세싱 시스템 내의 분기 예측 시스템에 의해 이용된다. 분기 예측은 BPT에서 현재 로딩되는 분기 방향 히스토리 세트에 기초한다. 분기 방향 히스토리 세트는 이전에 커밋된 분기 명령들의 리졸브(resolve)된 분기 방향들에 기초하여 파퓰레이팅(populate)된다. CPU 내의 서로 다른 소프트웨어 코드 영역들이 서로 다른 분기 패턴들을 가질 수 있기 때문에, 분기 예측 정확성은 서로 다른 소프트웨어 코드 영역들에 할당된 서로 다른 분기 방향 히스토리 세트들을 이용함으로써 증가될 수 있다.
[0008] 이와 관련하여, 일 실시예에서, 분기 히스토리 관리 회로는 중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위해 제공된다. 분기 히스토리 관리 회로는 분기 예측 테이블 스왑 명령의 실행에 응답하도록 구성된다. 분기 예측 테이블 스왑 명령의 실행에 응답하여, 분기 히스토리 관리 회로는 적어도 하나의 분기 예측 테이블(BPT)에서 분기 예측을 위해 이용되는 현재 분기 방향 히스토리 세트를 캐시에 저장된 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑하도록 구성된다. "이전 분기 방향 히스토리 세트"라는 용어는, 이전 분기 방향 히스토리 세트가 이미(yet) 분기 예측을 위해 이용되었는지 여부에 관계없이, 분기 방향 히스토리 세트 스왑을 수행하기 전 BPT에 존재하는 분기 방향 히스토리 세트를 의미한다. 이러한 방식으로, 분기 예측들은 더 정확할 수 있다. 결과적으로, 명령 프로세싱 시스템의 명령 프로세싱 스루풋은 명령 파이프라인으로 도입되는 감소된 수들의 버블들 및/또는 감소된 명령 파이프라인 플러싱으로 인하여 증가될 수 있다.
[0009] 비-제한적 예들로서, 분기 예측 테이블 스왑 명령은 프로그래머 및/또는 컴파일러가 분기 예측 시스템에 의한 이용을 위해 어떤 코드 영역(들)이 분기 방향 히스토리 세트와 연관되는지를 제어하게 한다. 프로그래머 및/또는 컴파일러는 프로그래머의 그리고/또는 컴파일러의 코드에 대한 지식, 분석 및/또는 프로파일링에 기초하여 이러한 선택들을 수행할 수 있다. 따라서, 분기 예측 정확성은 프로그래머의 그리고/또는 컴파일러의 제어 하에 증가될 수 있다.
[0010] 또 다른 실시예에서, 중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위해 분기 히스토리 관리를 제공하기 위한 수단이 개시된다. 분기 히스토리 관리를 제공하기 위한 수단은 분기 예측 테이블 스왑 명령의 실행에 응답하는 수단을 포함한다. 분기 예측 테이블 스왑 명령의 실행에 응답하여, 수단은 적어도 하나의 분기 예측 테이블(BPT)에서 분기 예측을 위해 이용되는 현재 분기 방향 히스토리 세트를 캐시에 저장된 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑하도록 구성된다.
[0011] 또 다른 실시예에서, 중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위해 분기 히스토리 관리 회로를 동작시키는 방법이 개시된다. 방법은 분기 예측 테이블 스왑 명령의 실행에 응답한다. 분기 예측 테이블 스왑 명령의 실행에 응답하여, 방법은 적어도 하나의 분기 예측 테이블(BPT)에서 분기 예측을 위해 이용되는 현재 분기 방향 히스토리 세트를 캐시에 저장된 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑하는 단계를 포함한다.
[0012] 또 다른 실시예에서, 캐시가 개시된다. 캐시는 복수의 이전 분기 방향 히스토리 세트들을 저장하도록 구성된다. 캐시는 분기 예측 테이블 스왑 명령의 실행에 응답한다. 분기 예측 테이블 스왑 명령의 실행에 응답하여, 캐시는 중앙 처리 유닛(CPU) 내의 분기 예측 회로에 의해 현재 분기 방향 히스토리로서 이용될 복수의 이전 분기 방향 히스토리 세트들 중 하나를 분기 예측 테이블(BPT)에 제공하도록 구성된다. 캐시는 또한, BPT로부터 축출되는 축출된 분기 방향 히스토리 세트를 복수의 이전 분기 방향 히스토리 세트들 중 하나로 저장하도록 구성된다.
[0013] 또 다른 실시예에서, 중앙 처리 유닛(CPU) 명령 프로세싱 시스템에서 분기 예측을 수행하기 위한 분기 예측 시스템이 개시된다. 분기 예측 시스템은 캐시를 포함한다. 캐시는 복수의 이전 분기 방향 히스토리 세트들을 저장하도록 구성된다. 캐시는 분기 예측 테이블 스왑 명령의 실행에 응답한다. 분기 예측 테이블 스왑 명령의 실행에 응답하여, 캐시는 중앙 처리 유닛(CPU) 내의 분기 예측 회로에 의해 현재 분기 방향 히스토리로서 이용될 복수의 이전 분기 방향 히스토리 세트들 중 하나를 분기 예측 테이블(BPT)에 제공하도록 구성된다. 캐시는 BPT로부터 축출되는 축출된 분기 방향 히스토리 세트를 복수의 이전 분기 방향 히스토리 세트들 중 하나로 저장하도록 추가로 구성된다. 분기 예측 시스템 또한, 분기 히스토리 관리 회로를 포함한다. 분기 히스토리 관리 회로는 분기 예측 테이블 스왑 명령의 실행에 응답하도록 구성된다. 분기 예측 테이블 스왑 명령의 실행에 응답하여, 분기 히스토리 관리 회로는 적어도 하나의 BPT에서 분기 예측을 위해 이용되는 현재 분기 방향 히스토리 세트를 캐시에 저장된 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑하도록 구성된다.
[0014] 또 다른 실시예에서, 비-일시적 컴퓨터 판독가능한 매체가 개시된다. 컴퓨터 판독가능한 매체 상에는 컴퓨터 실행가능한 명령들이 저장된다. 명령들은 적어도 하나의 분기 예측 테이블 스왑 명령을 포함한다. 명령들은 프로세서로 하여금 분기 히스토리 관리 회로를 동작시키는 방법을 구현하게 한다. 명령들은, 분기 예측 테이블 스왑 명령의 실행에 응답하여, 적어도 하나의 분기 예측 테이블(BPT)에서 분기 예측을 위해 이용되는 현재 분기 방향 히스토리 세트를 캐시에 저장된 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑하는 것을 포함한다.
[0015] 도 1은 이전에 커밋된 분기 명령들에 기초하여 조건부 분기 명령의 분기 방향을 예측하기 위해 분기 예측을 제공하는 분기 예측 시스템을 포함하는 예시적 명령 프로세싱 시스템의 블록도이다.
[0016] 도 2는 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 예측 테이블(BPT) 내의 분기 방향 히스토리(들)를 스왑하도록 구성되는 분기 히스토리 관리 회로를 이용하는 예시적 분기 예측 시스템의 블록도이다.
[0017] 도 3은 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 예측 테이블(BPT) 내의 분기 방향 히스토리(들)를 스왑하도록 구성되는 분기 히스토리 관리 회로를 이용하는, 도 2의 분기 예측 시스템의 예시적 프로세스를 예시하는 흐름도이다.
[0018] 도 4는 캐시에의 저장을 위해, 축출된 분기 방향 히스토리 세트들을 큐잉하기 위한 큐를 추가로 이용하는, 도 2의 분기 예측 시스템의 블록도이다.
[0019] 도 5는 액티브(active) BPT 및 쉐도우(shadow) BPT를 이용하는, 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 예측 테이블(BPT) 내의 분기 방향 히스토리(들)를 스왑하도록 구성되는 분기 히스토리 관리 회로를 이용하는 대안적 분기 예측 시스템의 블록도이다.
[0020] 도 6은 BPT가 분기 예측 시 이용에 유효한지 여부를 표시하는 BPT 유효성 표시자를 이용하는, 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 예측 테이블(BPT) 내의 분기 방향 히스토리(들)를 스왑하도록 구성되는 분기 히스토리 관리 회로를 이용하는 대안적 분기 예측 시스템의 블록도이다.
[0021] 도 7은, 분기 예측 테이블 스왑 명령(들)에 응답하여, 캐시 내의 복수의 BPT들로부터 현재 BPT를 선택하고 캐시 내의 현재 BPT에 직접적으로 액세스하여 이를 직접적으로 업데이트하는, 분기 예측 테이블(BPT) 내의 분기 방향 히스토리(들)를 스왑하도록 구성되는 분기 히스토리 관리 회로를 이용하는 대안적 분기 예측 시스템의 블록도이다.
[0022] 도 8은 분기 예측을 위해 이용되는 분기 히스토리(들)를 관리하기 위한, 도 2 및 도 4-7의 분기 히스토리 관리 회로들 및/또는 분기 예측 시스템들을 포함하는(그러나, 이들에 제한되는 것은 아님), 본 개시에 따른 명령 프로세싱 시스템들을 포함할 수 있는 예시적 프로세서-기반 시스템의 블록도이다.
[0023] 이제 도시 도면들을 참조하여, 본 개시의 몇몇 예시적 실시예들이 설명된다. "예시적"이라는 용어는 본원에서 "예, 예시 또는 예증으로서 제공되는"의 의미로 이용된다. "예시적"으로서 본원에 설명되는 임의의 실시예가 반드시 다른 실시예들보다 선호되거나 또는 유리한 것으로 해석되는 것은 아니다.
[0024] 본 개시의 실시예들은 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 방향 히스토리(들)를 스왑하는 것, 및 관련 시스템들 및 방법들을 제공한다. 분기 예측 테이블(BPT)은 조건부 분기 명령들의 분기 방향을 예측하기 위해 명령 프로세싱 시스템 내의 분기 예측 시스템에 의해 이용된다. 분기 예측은 BPT에서 현재 로딩되는 분기 방향 히스토리 세트에 기초한다. 분기 방향 히스토리 세트는 이전에 커밋된 분기 명령들의 리졸브(resolve)된 분기 방향들에 기초하여 파퓰레이팅(populate)된다. CPU 내의 서로 다른 소프트웨어 코드 영역들이 서로 다른 분기 패턴들을 가질 수 있기 때문에, 분기 예측 정확성은 서로 다른 소프트웨어 코드 영역들에 할당된 서로 다른 분기 방향 히스토리 세트들을 이용함으로써 증가될 수 있다.
[0025] 이와 관련하여, 일 실시예에서, 중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로가 개시된다. 분기 히스토리 관리 회로는 분기 예측 테이블 스왑 명령의 실행에 응답하도록 구성된다. 분기 예측 테이블 스왑 명령의 실행에 응답하여, 분기 히스토리 관리 회로는 적어도 하나의 분기 예측 테이블(BPT)에서 분기 예측을 위해 이용되는 현재 분기 방향 히스토리 세트를 캐시에 저장된 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑하도록 구성된다. 이러한 방식으로, 분기 예측들은 더 정확할 수 있다. 결과적으로, 명령 프로세싱 시스템의 명령 프로세싱 스루풋은 명령 파이프라인으로 도입되는 감소된 수들의 버블들 및/또는 감소된 명령 파이프라인 플러싱으로 인하여 증가될 수 있다.
[0026] 이와 관련하여, 비-제한적 예들로서, 분기 예측 테이블 스왑 명령은 프로그래머 및/또는 컴파일러가 분기 예측 시스템에 의한 이용을 위해 어떤 소프트웨어 코드 영역(들)이 분기 방향 히스토리 세트와 연관되는지를 제어하게 한다. 프로그래머 및/또는 컴파일러는 프로그래머의 그리고/또는 컴파일러의 코드에 대한 지식, 분석 및/또는 프로파일링에 기초하여 이러한 선택들을 수행할 수 있다. 따라서, 분기 예측 정확성은 프로그래머의 그리고/또는 컴파일러의 제어 하에 증가될 수 있다.
[0027] 이와 관련하여, 도 2는 분기 예측 테이블 스왑 명령에 응답하여 분기 예측 테이블 내의 분기 방향 히스토리 세트를 스왑하도록 구성되는 회로를 포함하는 대안적 분기 예측 시스템(36(1))을 예시한다. 더 구체적으로, 분기 예측 시스템(36(1))에 분기 히스토리 관리 회로(44)가 제공된다. 분기 히스토리 관리 회로(44)는 분기 예측 테이블 스왑 명령(52)에 응답하여 BPT(46) 내의 BPT 엔트리들(48) 사이에서 분기 방향 히스토리 세트를 스왑하도록 구성된다. 분기 히스토리 관리 회로(44)는 새롭게 인출된 조건부 분기 명령이 리졸브할 방향을 예측하는데 이용될 수 있는 이전에 커밋된 분기 명령들(38)에 기초하여 정보를 유지한다.
[0028] 이와 관련하여, 도 2를 계속 참조하면, 분기 히스토리 관리 회로(44)는 BPT(46)를 이용한다. BPT(46)는 복수의 BPT 엔트리들(48)(예를 들어, BPT 엔트리들(48(0)-48(N)))을 포함한다. 각각의 BPT 엔트리(48)는 조건부 분기 명령(들)의 하나 또는 둘 이상의 이전 실행들이 취해졌었는지 또는 취해지지 않았었는지를 표시하는 정보를 저장한다. 따라서, 각각의 BPT 엔트리(48)는 새롭게 인출된 조건부 분기 명령(들)의 분기가 취해질 가능성이 있을 것인지 또는 취해질 가능성이 없을 것인지를 표시하는 분기 예측(40)을 제공하는데 이용될 수 있다. 비-제한적 예로서, 각각의 BPT 엔트리(48)는 포화 카운터(saturating counter)를 포함할 수 있다. 포화 카운터는, BPT 엔트리(48)로 인덱싱하는 조건부 분기 명령이 취해지는 것으로 리졸브할 때 증분될 수 있고, BPT 엔트리(48)로 인덱싱하는 조건부 분기 명령이 취해지지 않는 것으로 리졸브할 때 감소될 수 있다. 결과적으로, 포화 카운터의 최고 차수 비트(highest order bit)는 조건부 분기 명령이 취해질 것인지(1) 또는 취해지지 않을 것인지(0)를 예측하는데 이용될 수 있다.
[0029] 이러한 실시예에서, BPT(46)에 대한 메모리 크기 요건들을 감소시키고 메모리 상태를 유지할 시 전력을 보존하기 위해, 더 작은 크기의 BPT(46)가 이용될 수 있다. 그러나, 더 작은 크기의 BPT(46)는 리졸브될 각각의 고유한 분기 조건에 대한 BPT 엔트리(48)를 제공할 수 없을 수 있다. 예를 들어, BPT(46)는 조건부 분기 명령의 메모리 어드레스에 기초하여 인덱싱될 수 있다. 결과적으로, 둘 또는 셋 이상의 서로 다른 조건부 분기 명령들이 BPT(46)의 동일한 BPT 엔트리(48)로 인덱싱할 수 있기 때문에, BPT 엔트리들(48)은 앨리언싱(aliase)될 수 있다. 둘 또는 셋 이상의 서로 다른 조건부 분기 명령들의 히스토리들이 동일한 BPT 엔트리(48)를 업데이트하는데 이용되기 때문에, BPT(46) 내의 BPT 엔트리(48)의 앨리언싱은 BPT 엔트리(48)에 기초하여 분기 예측들(40)의 정확성을 감소시킬 수 있다. 조건부 분기 명령의 메모리 어드레스에 기초하여 BPT(46)를 인덱싱하는 것에 대한 대안으로서, BPT(46)는 "분기 패턴 히스토리" 또는 "패턴 히스토리"로 지칭되는, 최근에 커밋된 분기 명령들(38)이 리졸브한 방향들의 패턴에 기초하여 인덱싱될 수 있다. 분기 패턴 히스토리에 의해 인덱싱되는 BPT(46)는 또한, 패턴 히스토리 테이블(PHT)로 지칭될 수 있다. 특정 패턴 히스토리 이후 실행하는 현재 조건부 분기 명령이 동일한 패턴 히스토리 이후 실행하는 이전 조건부 분기 명령과 동일한 방향으로 리졸브할 가능성이 있을 수 있기 때문에, 분기 패턴 히스토리에 기초하여 BPT(46)를 인덱스하는 것이 유리할 수 있다.
[0030] 그러나, 명령들(20)의 서로 다른 소프트웨어 코드 영역들은 특정 패턴 히스토리들을 서로 다르게 리졸브할 수 있다. 서로 다른 소프트웨어 코드 영역들은, 비-제한적 예들로서, 서로 다른 소프트웨어 애플리케이션들, 프로세스들, 스레드들, 라이브러리들 또는 서브루틴들에서 제공될 수 있다. 게다가, 명령 프로세싱 시스템(10)은 컨텍스트 스위칭, 서브루틴 호들 및/또는 서브루틴 리턴들로 인하여 서로 다른 소프트웨어 코드 영역들 사이에서 실행을 스위칭할 수 있다. 실행이 패턴 히스토리를 서로 다르게 리졸브하는 소프트웨어 코드 영역으로 스위칭할 때, 분기 예측들(40)의 정확성은 초기에 감소된다. 이것은, 분기 예측들(40)이 서로 다른 소프트웨어 코드 영역에 기초하여 분기 방향들(40)을 예측하도록 업데이트되는 앨리어싱된 BPT 엔트리들(48)에 기초하기 때문에 발생한다. 앨리어싱된 BPT 엔트리들(48)이 현재 소프트웨어 코드 영역에 기초하여 업데이트됨에 따라, 분기 예측들(40)의 정확성은 향상될 수 있다. 그러나, 실행이 다시 또 다른 소프트웨어 코드 영역으로 스위칭할 때, 분기 예측들(40)의 정확성은 다시 감소될 수 있다.
[0031] 따라서, 본원에 개시되는 실시예들에서, 분기 예측들(40)의 정확성은, 분기 예측 테이블 스왑 명령에 기초하여 명령들(20)의 서로 다른 소프트웨어 코드 영역들에 대한 서로 다른 분기 방향 히스토리 세트들을 BPT(46) 안팎으로 스왑 인 및 스왑 아웃함으로써 증가된다. 분기 예측 테이블 스왑 명령에 응답하여, 명령 파이프라인 내에서 프로세싱되는 현재 소프트웨어 코드 영역에 대한 분기 방향 히스토리 세트는 그 현재 소프트웨어 코드 영역에서 조건부 분기 명령들에 대한 분기 예측들(40)을 수행하기 위해 BPT(46)로 로딩된다. 현재 소프트웨어 코드 영역에서 조건부 분기 명령들을 실행 및 리졸브한 결과로서, BPT(46)에서 로딩된 대응하는 분기 방향 히스토리 세트는 현재 소프트웨어 코드 영역에서 실행되는 조건부 분기 명령들의 리졸루션들에 기초하여 업데이트된다.
[0032] 후속 분기 예측 테이블 스왑 명령에 의해 표시되는 바와 같이, 서로 다른 소프트웨어 코드 영역이 명령 파이프라인에서 프로세싱될 때, 현재 분기 방향 히스토리 세트는, 서로 다른 소프트웨어 코드 영역에서 조건부 분기 명령들의 리졸루션들에 의해 중복 기재되지 않도록, BPT(46)로부터 캐시 메모리로 축출된다. 서로 다른 소프트웨어 코드 영역에 할당된 서로 다른 분기 방향 히스토리 세트는, 새로운(즉, 현재) 분기 방향 히스토리 세트가 되도록, 캐시로부터 BPT(46)로 로딩된다. 축출된 분기 방향 히스토리 세트에 할당된 소프트웨어 코드 영역이 추후에 명령 파이프라인에서 다시 한번 프로세싱될 때, 축출된 분기 방향 히스토리 세트는 BPT(46)로 다시 로딩될 수 있다. 따라서, BPT(46)에 의해 수행되는 분기 예측들(40)은, 특정 소프트웨어 코드 영역들에 대한 분기 방향 히스토리 세트들을 유지하는 이러한 특정 소프트웨어 코드 영역들에 할당된 분기 방향 히스토리 세트들의 이용에 의해 더 정확해질 것이다. 이러한 증가된 분기 예측 정확성의 결과로서, 분기 히스토리 관리 회로(44)를 이용하는 명령 프로세싱 시스템의 명령 프로세싱 스루풋이 증가될 수 있다.
[0033] 도 2를 계속 참조하면, 분기 히스토리 관리 회로(44)는, 그 각각이 서로 다른 소프트웨어 코드 영역과 연관되는 복수의 이전 분기 방향 히스토리 세트들(50)(비-제한적 예들로서, 이전 분기 방향 히스토리 세트들(50(0)-50(M)))을 저장하도록 구성되는 캐시(58)를 이용한다. 본원에 이용되는 바와 같이, "이전 분기 방향 히스토리"는 적어도 하나의 특정 분기 명령 및/또는 적어도 하나의 특정 분기 명령 패턴이 더 종종 취해졌는지 또는 더 종종 취해지지 않았는지를 표시하는 정보로 구성된다. "이전 분기 방향 히스토리 세트"는 이전 분기 방향 히스토리들의 세트(예를 들어, 포화 카운터들의 세트)를 포함한다. "이전 분기 방향 히스토리 세트(50)"라는 용어는 이전 분기 방향 히스토리 세트가 이미 분기 예측을 위해 이용되었는지 여부에 관계없이, 분기 방향 히스토리 세트 스왑을 수행하기 전 BPT(46) 내의 BPT 엔트리(48)에 존재하는 분기 방향 히스토리 세트를 의미한다.
[0034] 캐시(58)는 다양한 타입들의 캐시들 중 임의의 것일 수 있다. 비-제한적 예들로서, 캐시(58)는 데이터 캐시, 레벨 1 데이터 캐시, 레벨 2 데이터 캐시, 멀티-레벨 데이터 캐시 및/또는 이전 분기 방향 히스토리 세트 캐시를 포함할 수 있다. 예를 들어, 캐시(58)는 도 1의 명령 프로세싱 시스템(10)의 다른 데이터를 저장하는 데이터 캐시일 수 있다. 대안적으로, 캐시(58)는 오직 분기 예측 정보를 저장하도록만 구성될 수 있다. 예를 들어, 캐시(58)는 오직 복수의 이전 분기 방향 히스토리 세트들(50) 및/또는 다른 분기 예측 정보를 저장하도록만 구성되는 특수화된 캐시일 수 있다. 캐시(58)는 분기 히스토리 관리 회로(44)와 동일한 반도체 다이 상에 제공될 수 있다. 대안적으로, 캐시(58)는 (예를 들어, 분기 히스토리 관리 회로(44)와 서로 다른 반도체 다이 상에) 별개의 캐시로서 제공될 수 있다.
[0035] 도 2 및 도 3의 흐름도를 계속 참조하면, 분기 히스토리 관리 회로(44)는 분기 예측 테이블 스왑 명령(52)의 실행(도 3의 블록(61))에 응답하도록 구성된다. 분기 예측 테이블 스왑 명령(52)의 실행에 응답하여, 분기 히스토리 관리 회로(44)는, BPT(46)에서 분기 예측(40)을 위해 이용되는 현재 분기 방향 히스토리 세트(예를 들어, BPT 엔트리들(48(0)-48(N))의 컨텐츠)가 복수의 이전 분기 방향 히스토리 세트들(50(0)-50(M)) 중 하나와 BPT(46)(예를 들어, 새로운 분기 방향 히스토리 세트(56))로 스왑하도록 구성된다(도 3의 블록(65)).
[0036] 이와 관련하여, 분기 예측 테이블 스왑 명령(52)은 캐시(58) 내의 복수의 이전 분기 방향 히스토리 세트들(50(0)-50(M)) 중 어떤 이전 분기 방향 히스토리 세트(50)가 BPT(46)로 스왑될 것인지를 표시하는 오퍼랜드(62)를 포함할 수 있다. 오퍼랜드(62)는 BPT(46)로 스왑할 이전 분기 방향 히스토리 세트(50)의 어드레스 및/또는 인덱스를 포함할 수 있다. 분기 예측 테이블 스왑 명령(52)이 실행 및/또는 커밋하였다는 표시의 수신에 응답하여, 분기 히스토리 관리 회로(44)는 BPT(46)로부터 현재 분기 방향 히스토리 세트(예를 들어, BPT 엔트리들(48(0)-48(N))의 컨텐츠)를 축출할 수 있다. 분기 히스토리 관리 회로(44)는 또한, 새로운 분기 방향 히스토리 세트(56)로서 복수의 이전 분기 방향 히스토리 세트들(50) 중 하나를 BPT(46)로 로딩할 수 있다. 분기 히스토리 관리 회로(44)는 또한, 축출된 분기 방향 히스토리 세트(54)를 복수의 이전 분기 방향 히스토리 세트들(50) 중 하나로 선택적으로 저장할 수 있다(도 3의 블록(67)).
[0037] 도 3을 계속 참조하면, 도 6과 관련하여 더 상세하게 아래에서 논의될 바와 같이, 분기 히스토리 관리 회로(44)는 스왑 전에 BPT(46)에 저장된 현재 분기 방향 히스토리 세트를 분기 예측(40)에 대해 무효인 것으로 세팅하도록 선택적으로 구성될 수 있다(도 3의 블록(63)). 이것은 분기 히스토리 관리 회로(44)가 스왑 동안, 분기 예측(40)을 위해 BPT(46)에 저장된 현재 분기 방향 히스토리 세트를 이용하는 것을 막는다(도 3의 블록(63)). 그 다음, 분기 히스토리 관리 회로(44)는 분기 방향 히스토리 세트 스왑이 수행된 이후, BPT(46)에 저장된 새로운 현재 분기 방향 히스토리 세트(56)를 분기 예측(40)에 대해 유효인 것으로 세팅하도록 구성될 수 있다(도 3의 블록(69)). 이것은, 분기 히스토리 관리 회로(44)가 분기 방향 히스토리 세트 스왑이 수행된 이후, 분기 예측(40)을 위해, BPT(46)에 저장된 새로운 현재 분기 방향 히스토리 세트(56)를 이용할 수 있기 위한 것이다.
[0038] 특정 소프트웨어 코드 영역은 캐시(58) 내의 특정 이전 분기 방향 히스토리 세트(50)와 연관될 수 있다. 연관을 유지하기 위해, 축출된 분기 방향 히스토리 세트(54)는, 그것을 로딩하였던 캐시(58)의 동일한 엔트리에(예를 들어, 동일한 캐시 어드레스 및/또는 동일한 캐시 인덱스에) 저장될 수 있다. 이와 관련하여, 분기 히스토리 관리 회로(44)는 BPT(46)로 가장 최근에 스왑된 이전 분기 방향 히스토리 세트(50)의 어드레스 및/또는 인덱스를 저장하기 위한 BPT 어드레스 레지스터(64)를 더 포함할 수 있다. 스왑을 시작할 때, 축출된 분기 방향 히스토리 세트(54)는 BPT 어드레스 레지스터(64)에 의해 표시되는 이전 분기 방향 히스토리 세트(50)로 기재될 수 있다. 그 이후, BPT 어드레스 레지스터(64)는 분기 예측 테이블 스왑 명령(52)의 오퍼랜드(62)에 의해 표시되는 인덱스 또는 어드레스로 세팅될 수 있다. 이러한 방식으로, 축출된 분기 방향 히스토리 세트(54)는 분기 방향 히스토리 세트를 이전에 로딩하였던 이전 분기 방향 히스토리 세트(50)로 저장될 수 있다. 결과적으로, 특정 소프트웨어 코드 영역에 대한 이전 분기 방향 히스토리 세트(50)는 그 소프트웨어 코드 영역에 대해 축출된 분기 방향 히스토리 세트(54)에 기초하여 업데이트된다. 이러한 방식으로, 분기 예측 정확성이 증가된다.
[0039] 분기 예측 테이블 스왑 명령(52)은 다양한 타입들의 명령들 중 임의의 것으로서 제공될 수 있다. 이와 관련하여, 분기 예측 테이블 스왑 명령(52)은 기계 캐시 명령, 오브젝트 코드 명령, 어셈블리 언어 명령, C 언어 명령 및/또는 더 상위-레벨 언어 명령(비-제한적 예들로서, C++ 명령, 스몰토크(Smalltalk) 명령 및/또는 JAVA 명령)을 포함할 수 있다. 도 2에 예시된 바와 같이, 분기 예측 테이블 스왑 명령(52)은 "BPT_SWAP"와 같은 동작 코드(60)(또한 "오피코드"로 지칭됨)를 포함할 수 있다. 그러나, 대안적 신택스(syntax)는 또한, 분기 예측 테이블 스왑 명령(52)의 동작 코드(60)를 표현하는데 이용될 수 있다. 분기 예측 테이블 스왑 명령(52)은 명령 프로세싱 시스템(10)의 아토믹 명령(atomic instruction)일 수 있다. 분기 예측 테이블 스왑 명령(52)은 명령 프로세싱 시스템(10)의 하나 또는 둘 이상의 클럭 사이클들 동안 실행될 수 있다.
[0040] 분기 예측을 위해 BPT(46)에 의해 이용되는 현재 분기 방향 히스토리 세트의 스와핑을 트리거하기 위해 분기 예측 테이블 스왑 명령(52)을 제공하기 위한 몇몇 이점들이 존재한다. 분기 예측 테이블 스왑 명령(52)은 소프트웨어 프로그래머 및/또는 컴파일러가 캐시(58) 내의 이전 분기 방향 히스토리 세트(50)로 어떤 소프트웨어 코드 영역들을 할당할 것인지를 선택하는 것을 가능하게 한다. 프로그래머 및/또는 컴파일러는 명령 프로세싱 시스템(10) 상에서 실행할 소프트웨어의 지식, 분석 및/또는 프로파일링에 기초하여 이러한 선택들을 수행할 수 있다. 이러한 방식으로, 분기 예측들(40)의 정확성이 증가될 수 있다. 프로그래머 및/또는 컴파일러는 또한, 너무 적은 이전 분기 방향 히스토리 세트들(50)이 존재하지 않도록 분기 예측 테이블 스왑 명령들(52)의 호출(invocation)들을 할 수 있으며, 이는 과도한 앨리어싱으로 인하여 감소된 정확성을 가지는 분기 예측들(40)을 초래할 수 있다. 프로그래머 및/또는 컴파일러는 또한, 너무 많은 이전 분기 방향 히스토리 세트들(50)이 존재하지 않도록 분기 예측 테이블 스왑 명령들(52)의 호출들을 할 수 있으며, 이는 캐시(58)의 과도한 캐시 메모리 크기를 야기할 수 있다. 이러한 방식으로, 분기 예측들(40)의 정확성이 증가될 수 있다.
[0041] 본원에 논의된 바와 같이, 서로 다른 소프트웨어 코드 영역들에 대해 BPT(46)로 서로 다른 이전 분기 방향 히스토리 세트들(50)을 스왑하는 것은 BPT(46)의 분기 예측 정확성을 증가시킬 수 있다. 증가된 분기 예측 정확성은 감소된 크기의 BPT(46)에 대해 트레이드 오프될 수 있다. BPT(46) 내의 BPT 엔트리들(48)의 수를 감소시키는 것은 앨리어싱의 양을 증가시키고, 이에 따라, BPT(46)의 정확성을 감소시킨다. 따라서, BPT(46)의 크기는, 서로 다른 이전 분기 방향 히스토리 세트들(50)을 이용하는 것으로부터 얻어지는 정확성의 정도(amount)가 BPT(46)의 감소된 크기로 인하여 손실되는 정확성의 정도와 실질적으로 동일하거나 또는 그 초과이도록 감소될 수 있다. 이러한 방식으로, 모든 분기 예측들을 위해 이용되는 더 큰 크기의 BPT의 정확성을 유지하거나 초과하는, 분기 예측 테이블 스왑 명령(52)에 응답하는 감소된 크기의 BPT(46)가 이용될 수 있다.
[0042] 이제 도 4를 참조하면, 축출된 분기 방향 히스토리 세트(54)를 저장하기 위해, 중간 큐가 이용될 수 있다. 결과적으로, 새로운 분기 방향 히스토리 세트(56)는, 축출된 분기 방향 히스토리 세트(54)가 캐시(58)에 저장되기 전에 BPT(46(1))로 로딩될 수 있다. 이러한 방식으로, BPT(46(1)) 내의 이전 분기 방향 히스토리 세트(50)를 스왑하는데 요구되는 시간의 양이 감소될 수 있다. 이와 관련하여, 분기 예측 시스템(36(2))의 분기 히스토리 관리 회로(44(1))는 BPT 저장 큐(78)를 이용한다. BPT 저장 큐(78)는, 축출된 분기 방향 히스토리 세트(들)(54)가 캐시(58)에 저장될 때까지, BPT(46(1))로부터 축출된 현재 분기 방향 히스토리 세트(들)(54)를 수신 및 저장하도록 구성된다.
[0043] BPT 어드레스 레지스터(64)의 현재 값은 또한, BPT(46(1))로부터 축출된 분기 방향 히스토리 세트(54)와 함께 BPT 저장 큐(78)에 저장될 수 있다. 그 이후, 축출된 분기 방향 히스토리 세트(54)는 BPT 어드레스 레지스터(64)의 큐잉된 값에 의해 표시되는 어드레스(또는 인덱스)에서 캐시(58)에 저장될 수 있다. 이러한 방식으로, 분기 히스토리 관리 회로(44(1))는 BPT(46(1))로부터 축출된 분기 방향 히스토리 세트(54)를 저장하기 위해 어떤 이전 분기 방향 히스토리 세트(50)를 이용할 것인지를 결정할 수 있다. 그 이후, 이전 분기 방향 히스토리 세트(50)는 BPT(46(1))로 스왑되고, BPT 어드레스 레지스터(64)는 BPT(46(1))로 스왑되는 이전 분기 방향 히스토리 세트(50)의 어드레스(또는 인덱스)로 세팅된다. 이러한 방식으로, 축출된 분기 방향 히스토리 세트(54)는 분기 방향 히스토리 세트를 이전에 로딩하였던 이전 분기 방향 히스토리 세트(50)로 저장될 수 있다.
[0044] 도 4를 계속 참조하면, 분기 히스토리 관리 회로(44(1))는 BPT 액세스 회로(70)를 더 포함할 수 있다. BPT 액세스 회로(70)는 명령 프로세싱 시스템(10)으로부터 커밋된 분기 명령들(38)을 수신하도록 구성된다. BPT 액세스 회로(70)는 커밋된 분기 명령들(38)의 (예를 들어, 취해진 또는 취해지지 않은) 방향들에 기초하여 BPT(46(1))의 BPT 엔트리들(48)을 업데이트하도록 추가로 구성된다(BPT 엔트리 업데이트(72)). 이와 관련하여, BPT 액세스 회로(70)는 커밋된 분기 명령들(38)에 기초하여 BPT 엔트리들(48(0)-48(N))의 포화 카운터들을 증분 및/또는 감소시킬 수 있다. BPT 액세스 회로(70)는 또한, 조건부 분기 명령의 분기가 취해질 것인지 또는 취해지지 않을 것인지를 예측하는 분기 예측(40)을 제공하도록 구성된다. 비-제한적 예로서, 분기 예측(40)은 BPT 엔트리(48)의 포화 카운터의 최고 차수 비트(즉, 최상위 비트)에 기초하여 이루어질 수 있다. BPT 액세스 회로(70)의 BPT 인덱스 레지스터(76)는 BPT(46(1))의 현재 선택된 BPT 엔트리(48)의 인덱스를 저장하는데 이용될 수 있다. 동일한 엘리먼트 번호들을 가지는 동일한 엘리먼트들은 다시 설명되지 않는다.
[0045] 이제 도 5를 참조하면, 새로운 분기 방향 히스토리 세트(56)가 로딩되는 동안 BPT(46)로부터의 분기 예측들(40)을 계속 제공하기 위해, 액티브 BPT 및 쉐도우 BPT가 이용될 수 있다. 이와 관련하여, 도 5는 액티브 BPT가 되도록 스위칭될 수 있는 쉐도우 BPT 및 액티브 BPT를 이용하는 분기 예측 시스템(36(3))의 분기 히스토리 관리 회로(44(2))를 예시한다. 분기 히스토리 관리 회로(44(2))는 또한, BPT들(46)(비-제한적 예들로서, BPT(46(2A)) 및 BPT(46(2B))) 중 어떤 것이 액티브 BPT인지를 표시하는 현재 BPT 레지스터(90)를 이용한다. 액티브 BPT가 액티브 상태를 유지하는 동안 쉐도우 BPT가 이전 분기 방향 히스토리 세트(50)와 동시에 로딩될 수 있기 때문에, 액티브 BPT 및 쉐도우 BPT 둘 모두를 이용하는 것이 유리하다. 따라서, 쉐도우 BPT가 로딩되는 동안, BPT 액세스 회로(70(1))는 액티브 BPT로부터 선택된 BPT 엔트리들(48)(비-제한적 예들로서, 선택된 BPT 엔트리들(48A, 48B))에 기초하여 분기 예측들(40)을 계속 제공할 수 있다. 또한, 수신되는 커밋된 분기 명령들(38)은 (비-제한적 예들로서, BPT 엔트리 업데이트들(72A, 72B)을 통해) 액티브 BPT의 대응하는 BPT 엔트리들(48)을 업데이트하는데 계속 이용될 수 있다. 이러한 방식으로, 더 긴 시간 기간이 캐시(58)로부터 새로운 분기 방향 히스토리(56)를 로딩하는데 요구되는 경우에도 불구하고, 이전 분기 방향 히스토리 세트(50)가 로딩되는 동안, 액티브 BPT는 분기 예측(40) 및 BPT 엔트리 업데이트들(72)을 위해 계속 이용될 수 있다.
[0046] 비-제한적 예로서, BPT(46(2A))가 액티브 BPT이고, BPT(46(2B))가 쉐도우 BPT이라고 가정하기로 하자. 커밋된 분기 명령(38)의 수신 시, BPT 액세스 회로(70(1))는 현재 액티브 BPT(BPT(46(2A)))의 BPT 엔트리(48)를 업데이트한다(BPT 엔트리 업데이트(72A)). 분기 예측을 위해, BPT 액세스 회로(70(1))는 액티브 BPT(BPT(46(2A)))로부터 현재 선택된 BPT 엔트리(48)(선택된 BPT 엔트리(48A))에 기초하여 분기 예측(40)을 제공한다. 분기 예측 테이블 스왑 명령(52)에 응답하여, BPT 로드 회로(88)는 캐시(58)로부터의 새로운 분기 방향 히스토리 세트(56)(새로운 분기 방향 히스토리 세트(56B))를 쉐도우 BPT(BPT(46(2B)))로 로딩한다. 쉐도우 BPT(BPT(46(2B)))로의 이전 분기 방향 히스토리 세트(50)의 로딩의 완료 시, 현재 BPT 레지스터(90)는 액티브 BPT가 되도록 쉐도우 BPT(BPT(46(2B)))를 변경하도록 세팅된다. 그 이후, BPT 축출 회로(84)는, 이제 쉐도우 BPT인 이전 액티브 BPT(BPT(46(2A)))로부터 분기 방향 히스토리(축출된 분기 방향 히스토리 세트(54A))를 축출한다.
[0047] 이제, 커밋된 분기 명령(38)의 수신 시, BPT 액세스 회로(70(1))는 현재 액티브 BPT(BPT(46(2B)))의 BPT 엔트리(48)를 업데이트한다(BPT 엔트리 업데이트(72B)). 분기 예측을 위해, BPT 액세스 회로(70(1))는 액티브 BPT(BPT(46(2B)))로부터 선택된 BPT 엔트리(48)(선택된 BPT 엔트리(48B))에 기초하여 분기 예측(40)을 제공한다. 또 다른 분기 예측 테이블 스왑 명령(52)에 응답하여, BPT 로드 회로(88)는 캐시(58)로부터의 새로운 분기 방향 히스토리 세트(56)(새로운 분기 방향 히스토리 세트(56A))를 쉐도우 BPT(BPT(46(2A)))로 로딩한다. 쉐도우 BPT(BPT(46(2A)))로의 새로운 분기 방향 히스토리 세트(56A)의 로딩의 완료 시, 현재 BPT 레지스터(90)는 액티브 BPT가 되도록 쉐도우 BPT(BPT(46(2A)))를 변경하도록 세팅된다. 그 이후, BPT 축출 회로(84)는, 다시 한번 쉐도우 BPT인 이전 액티브 BPT(BPT(46(2B)))로부터 분기 방향 히스토리(축출된 분기 방향 히스토리 세트(54B))를 축출한다. 이러한 방식으로, 분기 예측들(40)은 새로운 분기 방향 히스토리 세트(56)가 캐시(58)로부터 로딩되는 동안, BPT(46)로부터 계속 제공될 수 있다.
[0048] 메모리-제약 명령 프로세싱 시스템(10)에서, 액티브 BPT 및 쉐도우 BPT 둘 모두를 이용할 때 요구되는 것보다 더 적은 메모리 셀들을 이용하는 분기 히스토리 관리 회로(44)를 이용하는 것이 바람직할 수 있다. 이와 관련하여, 도 6은 단일 BPT(46(3))를 이용하는, 분기 예측 시스템(36(4))의 분기 히스토리 관리 회로(44(3))를 예시한다. 그러나, 분기 예측 테이블 스왑 명령(52)에 응답하여, BPT(46(3))로의 새로운 분기 방향 히스토리 세트(56)의 로딩이 완료될 때까지, 분기 예측들(40)을 위해 BPT(46(3))를 이용하는 것이 바람직하지 않을 수도 있다. 이와 관련하여, 분기 히스토리 관리 회로(44(3))는, 분기 예측(40)을 제공하기 위해 BPT(46(3))가 현재 이용될 수 있는지 여부를 표시하는 BPT 유효 비트(92)를 이용한다. BPT 유효 비트(92)는 분기 예측 테이블 스왑 명령(52)의 실행에 응답하여 무효인 것으로 세팅될 수 있다. 그 이후, BPT 유효 비트(92)는, BPT(46(3))로의 새로운 분기 방향 히스토리 세트(56)의 로딩의 완료에 응답하여, 유효인 것으로 세팅될 수 있다. 따라서, BPT 유효 비트(92)가 유효하면, 분기 예측들(40)은 단지, BPT(46(3))에 기초하여 제공될 수 있다. 이것은 무효 BPT 엔트리(48)에 기초하여 분기 예측(40)을 제공하는 것을 피할 수 있다.
[0049] BPT 유효 비트(92)가 BPT(46(3))가 무효하다고 표시하면, 디폴트 규칙은 조건부 분기 명령의 분기 방향을 예측하는데 이용될 수 있다. 비-제한적 예로서, 디폴트 규칙은 BTFNT(backward taken, forward not-taken) 규칙일 수 있다. 조건부 분기 명령의 타겟 어드레스가 조건부 분기 명령의 어드레스 미만이면, BTFNT 규칙은 조건부 분기가 취해질 것이라고 예측한다(backward taken). 그렇지 않으면, BTFNT 규칙은 조건부 분기가 취해지지 않을 것이라고 예측한다(forward not-taken). 루핑 명령(비-제한적 예들로서, WHILE 루프, FOR 루프, DO 루프, DO UNTIL 루프, REPEAT UNTIL 루프 등)이 일반적으로, 루프를 나가기 전에 루프의 더 이전의(earlier) 부분으로 다시 분기할 가능성이 있기 때문에, BTFNT 규칙은 명령들을 루핑하는데 유리하다. BPT(46(3))가 유효하지 않을 때 분기 예측에 대한 디폴트 규칙을 적용하고, BPT(46(3))가 유효한 동안 분기 예측을 위해 BPT(46(3))로부터 동적으로-획득된 BPT 엔트리(48)를 적용함으로써, 분기 예측들(40)은 단일 BPT(46(3))가 캐시(58)로부터 로딩되는 동안에도 계속 제공될 수 있다.
[0050] 이제 도 7을 참조하면, 분기 예측 테이블 스왑 명령(들)(52)에 응답하여 분기 예측을 위해 이용되는 분기 방향 히스토리 세트를 스왑하는데 요구되는 시간의 양을 감소시키기 위해 BPT(들)(46)에 대한 추가 메모리를 이용하는 것이 바람직할 수 있다. 이와 관련하여, 도 7은 액티브 BPT(46(4))로서 직접 액세스될 수 있는 이전 분기 방향 히스토리 세트들(50(0)-50(M))을 가지는 캐시(58(1))를 이용하는, 분기 예측 시스템(36(5))의 분기 히스토리 관리 회로(44(4))를 예시한다. 분기 히스토리 관리 회로(44(4))는, 액티브 BPT(46(4))로서 이용되는, 캐시(58(1)) 내의 어떤 이전 분기 방향 히스토리(50)를 스위칭함으로써, 분기 예측(40)을 위해 이용되는 현재 분기 방향 히스토리 세트를 스왑한다. 이와 관련하여, 캐시(58(1)) 내의 어떤 이전 분기 방향 히스토리 세트(50)가 액티브 BPT(46(4))로서 직접 액세스하여야 하는지를 표시하기 위해, 현재 BPT 레지스터(94)가 이용된다. 분기 예측 테이블 스왑 명령(52)의 실행 시, 분기 히스토리 관리 회로(44(4))는 캐시(58(1)) 내의 현재 액티브 BPT를 선택하기 위해, 분기 예측 테이블 스왑 명령(52)의 어드레스 오퍼랜드(62)의 값을 수신하여 현재 BPT 레지스터(94)에 저장한다. 그 다음, BPT 액세스 회로(70(3))는 액티브 BPT(46(4))로서 캐시(58(1)) 내에서 선택된 이전 분기 방향 히스토리 세트(50)에 직접 액세스한다. 이러한 방식으로, 이전 분기 방향 히스토리 세트들(50)은 분기 예측을 위해 이용되는 분기 방향 히스토리 세트를 스왑하기 위해, 캐시(58(1))로부터 축출되거나 그리고/또는 캐시(58(1))로 로딩될 필요가 없다. 결과적으로, 분기 예측을 위해 이용되는 분기 방향 히스토리 세트를 스왑하는데 요구되는 시간의 양은 감소된다.
[0051] 본원에 설명된 실시예들 중 임의의 것은 추가 컴포넌트들을 더 포함하고 그리고/또는 추가적 변화를 겪을 수 있다. 비-제한적 예로서, 본원에 설명된 분기 예측 시스템들(36)은, 새롭게 인출된 명령이 그 명령이 디코딩되기 이전에, 조건부 분기 명령인지 또는 조건부 분기 명령이 아닌지를 인지하기 위한 능력을 명령 프로세싱 시스템에 제공하기 위한 분기 타겟 캐시를 더 포함할 수 있다. 분기 타겟 캐시는 분기 타겟 어드레스 캐시(BTAC) 및/또는 분기 타겟 명령 캐시(BTIC)로 구현될 수 있다. BTIC로 구현될 때, BTIC는 추가적으로 조건부 분기 명령들의 분기 타겟 명령들을 캐싱한다.
[0052] 본원에 개시된 실시예들에 따라, 분기 예측 테이블 스왑 명령(들)에 응답하여 BPT에서 분기 방향 히스토리(들)를 스왑하기 위한 명령 프로세싱 시스템들, 분기 예측 시스템들 및/또는 분기 히스토리 관리 회로들은, 임의의 프로세서-기반 디바이스에 또는 반도체 다이에 제공되거나 또는 이들에 통합될 수 있다. 예들은, 제한 없이, 셋탑 박스, 엔터테인먼트 유닛, 네비게이션 디바이스, 통신 디바이스, 고정된 위치 데이터 유닛, 모바일 위치 데이터 유닛, 모바일 폰, 셀룰러 폰, 컴퓨터, 휴대용 컴퓨터, 데스크탑 컴퓨터, 개인용 디지털 보조기(PDA), 모니터, 컴퓨터 모니터, 텔레비전, 튜너(tuner), 라디오, 위성 라디오, 음악 플레이어, 디지털 음악 플레이어, 휴대용 음악 플레이어, 디지털 비디오 플레이어, 비디오 플레이어, 디지털 비디오 디스크(DVD) 플레이어, 및 휴대용 디지털 비디오 플레이어를 포함한다.
[0053] 이와 관련하여, 도 8은 프로세서-기반 시스템(96)의 일 예를 예시한다. 프로세서-기반 시스템(96)은, 각각이 하나 또는 둘 이상의 프로세서들(100)을 포함하는 하나 또는 둘 이상의 중앙 처리 유닛(CPU)들(98)을 포함한다. 하나 또는 둘 이상의 프로세서들(100)은 명령 프로세싱 시스템(IPS)(10(1))을 포함할 수 있다. 명령 프로세싱 시스템(10(1))은 본원에 개시된 실시예들의 임의의 결합, 비-제한적 예들로서, 도 2 및 도 4-7의 분기 예측 시스템들(36)(비-제한적 예들로서, 분기 예측 시스템들(36(1)-36(5)))을 각각 포함할 수 있다. CPU(들)(98)는 일시적으로 저장된 데이터로의 신속한 액세스를 위해 프로세서(들)(100)에 커플링된 캐시 메모리(102)를 가질 수 있다. 캐시 메모리(102)는 캐시(58)로서 이용될 수 있다. CPU(들)(98)는 시스템 버스(104)에 커플링되며, 프로세서-기반 시스템(96)에 포함된 마스터 디바이스들 및 슬래이브 디바이스들을 상호 커플링시킬 수 있다. 잘 알려져 있는 바와 같이, CPU(들)(98)는 시스템 버스(104)를 통해 어드레스, 제어 및 데이터 정보를 교환함으로써 이러한 다른 디바이스들과 통신한다. 예를 들어, CPU(들)(98)는 슬래이브 디바이스의 일 예로서, 버스 트랜잭션 요청들을 메모리 제어기(106)로 통신할 수 있다. 도 8에 예시되지 않았지만, 다수의 시스템 버스들(104)이 제공될 수 있다.
[0054] 다른 마스터 및 슬래이브 디바이스들이 시스템 버스(104)에 연결될 수 있다. 도 8에 예시된 바와 같이, 이러한 디바이스들은 예들로서, 메모리 시스템(108), 하나 또는 둘 이상의 입력 디바이스들(110), 하나 또는 둘 이상의 출력 디바이스들(112), 하나 또는 둘 이상의 네트워크 인터페이스 디바이스들(114) 및 하나 또는 둘 이상의 디스플레이 제어기들(116)을 포함할 수 있다. 입력 디바이스(들)(110)는 입력 키들, 스위치들, 음성 프로세서들 등을 포함하는(그러나, 이들에 제한되지 않음) 임의의 타입의 입력 디바이스를 포함할 수 있다. 출력 디바이스(들)(112)는 오디오, 비디오, 다른 시각적 표시자들 등을 포함하는(그러나, 이들에 제한되지 않음) 임의의 타입의 출력 디바이스를 포함할 수 있다. 네트워크 인터페이스 디바이스(들)(114)는 네트워크(118)로의 그리고 네트워크(118)로부터의 데이터의 교환을 허용하도록 구성되는 임의의 디바이스들일 수 있다. 네트워크(118)는 유선 또는 무선 네트워크, 사설 또는 공공 네트워크, 근거리 네트워크(LAN), 원근거리 네트워크(WLAN: wide local area network) 및 인터넷을 포함하는(그러나, 이들에 제한되지 않음) 임의의 타입의 네트워크일 수 있다. 네트워크 인터페이스 디바이스(들)(114)는 원하는 임의의 타입의 통신 프로토콜을 지원하도록 구성될 수 있다. 메모리 시스템(108)은 하나 또는 둘 이상의 메모리 유닛들(120(0-N))을 포함할 수 있다.
[0055] CPU(들)(98)는 또한, 하나 또는 둘 이상의 디스플레이들(122)에 전송된 정보를 제어하기 위해 시스템 버스(104)를 통해 디스플레이 제어기(들)(116)에 액세스하도록 구성될 수 있다. 디스플레이 제어기(들)(116)는 디스플레이될 정보를 디스플레이(들)(122)에 적합한 포맷으로 프로세싱하는 하나 또는 둘 이상의 비디오 프로세서들(124)을 통해 디스플레이될 정보를 디스플레이(들)(122)에 전송한다. 디스플레이(들)(122)는 캐소드 레이 튜브(CRT: cathode ray tube), 액정 디스플레이(LCD: liquid crystal display), 플라즈마 디스플레이, 발광 다이오드(LED: light emitting diode) 디스플레이 등을 포함하는(그러나, 이들에 제한되지 않음) 임의의 타입의 디스플레이를 포함할 수 있다.
[0056] 당업자들은 본원에 개시되는 실시예들과 관련하여 설명되는 다양한 예시적인 논리 블록들, 모듈들, 회로들 및 알고리즘들이 전자 하드웨어, 메모리 또는 다른 컴퓨터 판독가능한 매체에 저장되어 프로세서 또는 다른 프로세싱 디바이스에 의해 실행되는 명령들, 또는 이 둘의 결합들로서 구현될 수 있다는 것을 추가로 인식할 것이다. 본원에 설명된 마스터 디바이스들 및 슬래이브 디바이스들은 예들로서, 임의의 회로, 하드웨어 컴포넌트, 집적 회로(IC) 또는 IC 칩에서 이용될 수 있다. 본원에 개시되는 메모리는 임의의 타입 및 크기의 메모리일 수 있으며, 원하는 임의의 타입의 정보를 저장하도록 구성될 수 있다. 이러한 상호교환가능성을 명백하게 예시하기 위해, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들 및 단계들이 일반적으로 그들의 기능에 관하여 위에서 설명되었다. 이러한 기능이 어떻게 구현되는지는 특정 애플리케이션, 설계 선택들 및/또는 전체 시스템에 부과되는 설계 제약들에 의존한다. 당업자들은 각각의 특정 애플리케이션에 대해 다양한 방식들로, 설명된 기능을 구현할 수 있지만, 이러한 구현 결정들이 본 개시의 범위로부터의 이탈을 야기하게 하는 것으로 해석되어서는 안 된다.
[0057] 본원에 개시되는 실시예들과 관련하여 설명되는 다양한 예시적인 논리 블록들, 모듈들 및 회로들은, 프로세서, DSP(digital signal processor), ASIC(Application Specific Integrated Circuit), FPGA(field-programmable gate array) 또는 다른 프로그래머블 로직 디바이스, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트들, 또는 본원에 설명되는 기능들을 수행하도록 설계되는 이들의 임의의 결합으로 구현 또는 수행될 수 있다. 프로세서는 마이크로프로세서일 수 있지만 대안적으로, 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로제어기 또는 상태 머신일 수 있다. 프로세서는 또한 컴퓨팅 디바이스들의 결합 예를 들어, DSP 및 마이크로프로세서의 결합, 복수의 마이크로프로세서들, DSP 코어와 결합한 하나 또는 둘 이상의 마이크로프로세서들, 또는 임의의 다른 이러한 구성으로 구현될 수 있다.
[0058] 본원에 개시되는 실시예들은 하드웨어에 저장된 명령들에서 그리고 하드웨어에서 구현될 수 있으며, 예를 들어, RAM(Random Access Memory), 플래시 메모리, ROM(Read Only Memory), EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable Programmable ROM), 레지스터들, 하드 디스크, 이동식(removable) 디스크, CD-ROM(compact disc read-only memory) 또는 당해 기술분야에 알려져 있는 임의의 다른 형태의 컴퓨터 판독가능한 매체 내에 상주할 수 있다. 예시적인 저장 매체는 프로세서가 저장 매체로부터 정보를 판독하고 저장 매체에 정보를 기록할 수 있도록 프로세서에 커플링된다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 프로세서 및 저장 매체는 ASIC 내에 상주할 수 있다. ASIC는 원격국 내에 상주할 수 있다. 대안적으로, 프로세서 및 저장 매체는 원격국, 기지국 또는 서버에 개별 컴포넌트들로서 상주할 수 있다.
[0059] 또한, 본원에서의 예시적인 실시예들 중 임의의 것에서 설명되는 동작 단계들이 예들 및 논의를 제공하기 위해 설명된다는 점에 주목하여야 한다. 설명되는 동작들은 예시되는 시퀀스들 외에 다수의 상이한 시퀀스들에서 수행될 수 있다. 또한, 단일 동작 단계에서 설명되는 동작들은 실제로 다수의 상이한 단계들에서 수행될 수 있다. 추가적으로, 예시적인 실시예들에서 논의되는 하나 또는 둘 이상의 동작 단계들이 결합될 수 있다. 흐름도들에 예시되는 동작 단계들은 당업자에게 용이하게 명백한 것처럼, 다수의 상이한 변경들이 취해질 수 있다는 것이 이해될 것이다. 당업자들은 또한 정보 및 신호들이 다양한 상이한 기술들 및 기법들 중 임의의 것을 이용하여 표현될 수 있다는 것을 이해할 것이다. 예를 들어, 위의 설명의 전체에 걸쳐 참조될 수 있는 데이터, 명령들, 커맨드들, 정보, 신호들, 비트들, 심볼들 및 칩들은 전압들, 전류들, 전자기파들, 자기장들 또는 입자들, 광 필드들 또는 입자들 또는 이들의 임의의 결합으로 표현될 수 있다.
[0060] 본 개시의 이전의 설명은 임의의 당업자가 본 개시를 실시하거나 또는 이용할 수 있도록 제공된다. 본 개시에 대한 다양한 변경들은 당업자들에게 용이하게 명백할 것이고, 본원에서 정의되는 일반적인 원리들은 본 개시의 사상 또는 범위로부터 벗어나지 않고 다른 변화들에 적용될 수 있다. 따라서, 본 개시는 본원에 설명되는 예들 및 설계들에 제한되는 것으로 의도된 것이 아니라, 오히려 본원에 개시되는 원리들 및 신규한 특징들과 일치하는 가장 넓은 범위를 따를 것이다.

Claims (30)

  1. 중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT: branch prediction table)을 관리하기 위한 분기 히스토리 관리 회로로서,
    분기 예측 테이블 스왑 명령의 실행에 응답하여, 적어도 하나의 분기 예측 테이블(BPT)에서 분기 예측을 위해 이용되는 현재 분기 방향 히스토리 세트를 캐시에 저장된 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑(swap)하도록 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  2. 제 1 항에 있어서,
    적어도 하나의 BPT는 분기 명령의 분기 방향을 예측하기 위한 예측 표시자를 포함하는 적어도 하나의 BPT 엔트리를 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  3. 제 2 항에 있어서,
    분기 리졸루션(resolution) 회로로부터 제공되는 분기 리졸루션들에 기초하여 상기 적어도 하나의 BPT 엔트리를 업데이트하고; 그리고
    상기 분기 명령의 상기 분기 방향을 예측하는데 이용하기 위해, 선택된 적어도 하나의 BPT 엔트리를 분기 예측 회로에 제공하도록 구성되는 BPT 액세스 회로를 더 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  4. 제 1 항에 있어서,
    상기 분기 히스토리 관리 회로는, 단일 BPT 내의 상기 현재 분기 방향 히스토리 세트를 상기 캐시에 저장된 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑할 때, BPT 유효성 표시자를 무효인 것으로 세팅하고 유지하도록 추가로 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  5. 제 4 항에 있어서,
    상기 BPT 유효성 표시자가 무효인 것으로 세팅되면, 분기 명령의 분기 방향을 예측하기 위해 BTFNT(backward taken, forward not-taken) 규칙을 적용하도록 추가로 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  6. 제 1 항에 있어서,
    상기 적어도 하나의 BPT는 액티브(active) BPT 및 쉐도우(shadow) BPT를 포함하고,
    상기 분기 히스토리 관리 회로는 어떤 적어도 하나의 BPT가 상기 액티브 BPT인지를 표시하도록 현재 BPT 레지스터를 세팅하도록 추가로 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  7. 제 6 항에 있어서,
    분기 리졸루션의 수신에 응답하여 상기 액티브 BPT의 엔트리를 업데이트하고; 그리고
    분기 예측을 위해 상기 액티브 BPT의 선택된 엔트리를 제공하도록 추가로 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  8. 제 7 항에 있어서,
    상기 분기 예측 테이블 스왑 명령의 실행에 응답하여,
    상기 복수의 이전 분기 방향 히스토리 세트들 중 하나를 상기 쉐도우 BPT에 로딩하고; 그리고
    상기 쉐도우 BPT를 상기 액티브 BPT로 변경하도록 상기 현재 BPT 레지스터를 세팅하도록 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  9. 제 1 항에 있어서,
    상기 분기 예측 테이블 스왑 명령의 실행에 응답하여 분기 예측 테이블 스왑 표시를 수신하고;
    상기 분기 예측 테이블 스왑 표시의 수신에 응답하여,
    상기 적어도 하나의 BPT로부터 상기 현재 분기 방향 히스토리 세트를 축출하고;
    상기 복수의 이전 분기 방향 히스토리 세트들 중 하나를 상기 적어도 하나의 BPT에 로딩하고; 그리고
    축출된 분기 방향 히스토리 세트를 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나로 저장하도록 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  10. 제 9 항에 있어서,
    상기 적어도 하나의 BPT에 가장 최근에 로딩되었던, 상기 캐시 내의 이전 분기 방향 히스토리 세트의 어드레스를 BPT 어드레스 레지스터에 저장하도록 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  11. 제 10 항에 있어서,
    상기 축출된 분기 방향 히스토리 세트를 상기 BPT 어드레스 레지스터에 의해 어드레싱되는 상기 이전 분기 방향 히스토리 세트로 저장하도록 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  12. 제 1 항에 있어서,
    상기 적어도 하나의 BPT로부터 축출된 현재 분기 방향 히스토리 세트를 수신하고; 그리고
    상기 축출된 분기 방향 히스토리 세트를 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나로 저장하도록 구성되는 BPT 저장 큐를 더 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  13. 제 1 항에 있어서,
    상기 분기 예측 테이블 스왑 명령의 어드레스 오퍼랜드를 수신하고;
    상기 어드레스 오퍼랜드에 기초하여 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나를 선택하고; 그리고
    상기 적어도 하나의 BPT로서 상기 캐시 내의 선택된 이전 분기 방향 히스토리 세트에 액세스함으로써, 상기 현재 분기 방향 히스토리 세트를 스왑하도록 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리 회로.
  14. 중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리를 제공하기 위한 수단으로서,
    분기 예측 테이블 스왑 명령의 실행에 응답하여, 적어도 하나의 분기 예측 테이블(BPT)에서 분기 예측을 위해 이용되는 현재 분기 방향 히스토리 세트를 캐시에 저장된 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑하기 위한 수단을 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리를 제공하기 위한 수단.
  15. 제 14 항에 있어서,
    상기 분기 예측 테이블 스왑 명령의 실행에 응답하여 분기 예측 테이블 스왑 표시를 수신하기 위한 수단; 및
    상기 적어도 하나의 BPT로부터 상기 현재 분기 방향 히스토리 세트를 축출하기 위한 수단;
    상기 복수의 이전 분기 방향 히스토리 세트들 중 하나를 상기 적어도 하나의 BPT에 로딩하기 위한 수단; 및
    축출된 분기 방향 히스토리 세트를 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나로 저장하기 위한 수단을 포함하는, 상기 분기 예측 테이블 스왑 표시의 수신에 응답하는 수단을 더 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리를 제공하기 위한 수단.
  16. 제 14 항에 있어서,
    상기 현재 분기 방향 히스토리 세트를 스왑하기 위한 수단은,
    상기 분기 예측 테이블 스왑 명령의 어드레스 오퍼랜드를 수신하기 위한 수단;
    상기 어드레스 오퍼랜드에 기초하여 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나를 선택하기 위한 수단; 및
    상기 적어도 하나의 BPT로서 상기 캐시 내의 선택된 이전 분기 방향 히스토리 세트에 액세스하기 위한 수단을 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하기 위한 분기 히스토리 관리를 제공하기 위한 수단.
  17. 중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하도록 분기 히스토리 관리 회로를 동작시키는 방법으로서,
    분기 예측 테이블 스왑 명령의 실행에 응답하여, 적어도 하나의 분기 예측 테이블(BPT)에서 분기 예측을 위해 이용되는 현재 분기 방향 히스토리 세트를 캐시에 저장된 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑하는 단계를 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하도록 분기 히스토리 관리 회로를 동작시키는 방법.
  18. 제 17 항에 있어서,
    단일 BPT 내의 상기 현재 분기 방향 히스토리 세트를 상기 캐시에 저장된 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑할 때, BPT 유효성 표시자를 무효인 것으로 세팅하고 유지하는 단계를 더 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하도록 분기 히스토리 관리 회로를 동작시키는 방법.
  19. 제 17 항에 있어서,
    상기 분기 예측 테이블 스왑 명령의 실행에 응답하여 분기 예측 테이블 스왑 표시를 수신하는 단계;
    상기 분기 예측 테이블 스왑 표시의 수신에 응답하여,
    상기 적어도 하나의 BPT로부터 상기 현재 분기 방향 히스토리 세트를 축출하는 단계;
    상기 복수의 이전 분기 방향 히스토리 세트들 중 하나를 상기 적어도 하나의 BPT에 로딩하는 단계; 및
    축출된 분기 방향 히스토리 세트를 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나로 저장하는 단계를 더 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하도록 분기 히스토리 관리 회로를 동작시키는 방법.
  20. 제 17 항에 있어서,
    상기 적어도 하나의 BPT로부터 축출된 현재 분기 방향 히스토리 세트를 수신하는 단계; 및
    상기 축출된 분기 방향 히스토리 세트를 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나로 저장하는 단계;
    상기 축출된 현재 분기 방향 히스토리 세트를 BPT 저장 큐에 인큐잉(enqueue)하는 단계; 및
    상기 BPT 저장 큐로부터 상기 축출된 현재 분기 방향 히스토리 세트를 디큐잉(dequeue)하는 단계를 더 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하도록 분기 히스토리 관리 회로를 동작시키는 방법.
  21. 제 17 항에 있어서,
    상기 현재 분기 방향 히스토리 세트를 스왑하는 단계는,
    상기 분기 예측 테이블 스왑 명령의 어드레스 오퍼랜드를 수신하는 단계;
    상기 어드레스 오퍼랜드에 기초하여 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나를 선택하는 단계; 및
    상기 적어도 하나의 BPT로서 상기 캐시 내의 선택된 이전 분기 방향 히스토리 세트에 액세스하는 단계를 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에 의해 분기 예측을 위해 이용되는 적어도 하나의 분기 예측 테이블(BPT)을 관리하도록 분기 히스토리 관리 회로를 동작시키는 방법.
  22. 캐시로서,
    복수의 이전 분기 방향 히스토리 세트들을 저장하고;
    분기 예측 테이블 스왑 명령의 실행에 응답하여,
    중앙 처리 유닛(CPU) 내의 분기 예측 회로에 의해 현재 분기 방향 히스토리로서 이용될 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나를 분기 예측 테이블(BPT)로 제공하고; 그리고
    상기 BPT로부터 축출되는 축출된 분기 방향 히스토리 세트를 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나로 저장하도록 구성되는,
    캐시.
  23. 제 22 항에 있어서,
    상기 BPT는 패턴 히스토리 테이블(PHT)을 포함하는,
    캐시.
  24. 중앙 처리 유닛(CPU) 명령 프로세싱 시스템에서 분기 예측을 수행하기 위한 분기 예측 시스템으로서,
    복수의 이전 분기 방향 히스토리 세트들을 저장하고;
    분기 예측 테이블 스왑 명령의 실행에 응답하여,
    중앙 처리 유닛(CPU) 내의 분기 예측 회로에 의해 현재 분기 방향 히스토리로서 이용될 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나를 분기 예측 테이블(BPT)로 제공하고; 그리고
    상기 BPT로부터 축출되는 축출된 분기 방향 히스토리 세트를 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나로 저장하도록 구성되는,
    캐시; 및
    상기 분기 예측 테이블 스왑 명령의 실행에 응답하여,
    적어도 하나의 BPT에서 분기 예측을 위해 이용되는 상기 현재 분기 방향 히스토리 세트를 상기 캐시에 저장된 상기 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑하도록 구성되는,
    분기 히스토리 관리 회로를 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에서 분기 예측을 수행하기 위한 분기 예측 시스템.
  25. 제 24 항에 있어서,
    복수의 커밋된 명령들 중 커밋된(committed) 분기 명령들을 검출하고; 그리고
    상기 커밋된 분기 명령들의 분기 리졸루션들을 상기 분기 히스토리 관리 회로의 상기 적어도 하나의 BPT를 업데이트하기 위한 상기 분기 히스토리 관리 회로에 제공하도록 구성되는,
    분기 리졸루션 회로를 더 포함하는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에서 분기 예측을 수행하기 위한 분기 예측 시스템.
  26. 제 25 항에 있어서,
    상기 분기 리졸루션 회로는 명령 프로세싱 시스템의 명령 커밋 회로로부터 상기 복수의 커밋된 명령들을 수신하도록 추가로 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에서 분기 예측을 수행하기 위한 분기 예측 시스템.
  27. 제 24 항에 있어서,
    상기 분기 예측 회로는 상기 적어도 하나의 BPT의 선택된 엔트리에 기초하여 상기 분기 명령의 실행 전에 분기 명령의 분기 방향 예측을 제공하도록 추가로 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에서 분기 예측을 수행하기 위한 분기 예측 시스템.
  28. 제 27 항에 있어서,
    상기 분기 예측 회로는 상기 분기 명령의 상기 분기 방향의 예측을, 명령 프로세싱 시스템의 인출 회로 및 상기 명령 프로세싱 시스템의 디코딩 회로로 이루어진 그룹으로부터의 적어도 하나에 제공하도록 추가로 구성되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에서 분기 예측을 수행하기 위한 분기 예측 시스템.
  29. 제 24 항에 있어서,
    명령 프로세싱 시스템 내에 배치되는,
    중앙 처리 유닛(CPU) 명령 프로세싱 시스템에서 분기 예측을 수행하기 위한 분기 예측 시스템.
  30. 적어도 하나의 분기 예측 테이블 스왑 명령을 포함하는 컴퓨터 실행가능한 명령들이 저장되어 있는 비-일시적 컴퓨터 판독가능한 매체로서,
    상기 명령들은, 프로세서로 하여금, 분기 히스토리 관리 회로를 동작시키는 방법을 구현하게 하며, 상기 방법은, 상기 적어도 하나의 분기 예측 테이블 스왑 명령의 실행에 응답하여, 적어도 하나의 분기 예측 테이블(BPT)에서 분기 예측을 위해 이용되는 현재 분기 방향 히스토리 세트를 캐시에 저장된 복수의 이전 분기 방향 히스토리 세트들 중 하나와 스왑하는 단계를 포함하는,
    적어도 하나의 분기 예측 테이블 스왑 명령을 포함하는 컴퓨터 실행가능한 명령들이 저장되어 있는 비-일시적 컴퓨터 판독가능한 매체.

KR1020157009176A 2012-09-12 2013-09-12 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 방향 히스토리(들)를 스왑하는 것, 및 관련 시스템들 및 방법들 KR101705211B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/611,597 US9395984B2 (en) 2012-09-12 2012-09-12 Swapping branch direction history(ies) in response to a branch prediction table swap instruction(s), and related systems and methods
US13/611,597 2012-09-12
PCT/US2013/059532 WO2014043399A1 (en) 2012-09-12 2013-09-12 Swapping branch direction history(ies) in response to a branch prediction table swap instruction(s), and related systems and methods

Publications (2)

Publication Number Publication Date
KR20150054966A true KR20150054966A (ko) 2015-05-20
KR101705211B1 KR101705211B1 (ko) 2017-02-09

Family

ID=49237689

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157009176A KR101705211B1 (ko) 2012-09-12 2013-09-12 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 방향 히스토리(들)를 스왑하는 것, 및 관련 시스템들 및 방법들

Country Status (4)

Country Link
US (1) US9395984B2 (ko)
KR (1) KR101705211B1 (ko)
CN (1) CN104603747B (ko)
WO (1) WO2014043399A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9442726B1 (en) 2015-12-15 2016-09-13 International Business Machines Corporation Perceptron branch predictor with virtualized weights
US10223118B2 (en) * 2016-03-24 2019-03-05 Qualcomm Incorporated Providing references to previously decoded instructions of recently-provided instructions to be executed by a processor
CN109783143B (zh) * 2019-01-25 2021-03-09 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
US11194582B2 (en) 2019-07-31 2021-12-07 Micron Technology, Inc. Cache systems for main and speculative threads of processors
US11200166B2 (en) 2019-07-31 2021-12-14 Micron Technology, Inc. Data defined caches for speculative and normal executions
US11048636B2 (en) * 2019-07-31 2021-06-29 Micron Technology, Inc. Cache with set associativity having data defined cache sets
US11010288B2 (en) 2019-07-31 2021-05-18 Micron Technology, Inc. Spare cache set to accelerate speculative execution, wherein the spare cache set, allocated when transitioning from non-speculative execution to speculative execution, is reserved during previous transitioning from the non-speculative execution to the speculative execution

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5394529A (en) * 1990-06-29 1995-02-28 Digital Equipment Corporation Branch prediction unit for high-performance processor
US6877089B2 (en) * 2000-12-27 2005-04-05 International Business Machines Corporation Branch prediction apparatus and process for restoring replaced branch history for use in future branch predictions for an executing program
US7370183B2 (en) * 2003-04-11 2008-05-06 Board Of Regents, The University Of Texas System Branch predictor comprising a split branch history shift register
JP2009535750A (ja) * 2006-05-04 2009-10-01 インターナショナル・ビジネス・マシーンズ・コーポレーション 多形的分岐予測子を実装するための方法および装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574871A (en) 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
DE69727773T2 (de) 1996-12-10 2004-12-30 Texas Instruments Inc., Dallas Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
US6108775A (en) * 1996-12-30 2000-08-22 Texas Instruments Incorporated Dynamically loadable pattern history tables in a multi-task microprocessor
CN1200343C (zh) * 2002-03-22 2005-05-04 中国科学院计算技术研究所 适用于上下文切换的分支预测方法
JP4052887B2 (ja) 2002-06-28 2008-02-27 富士通株式会社 記憶装置、分岐履歴記憶装置及びその制御方法
JP3798998B2 (ja) 2002-06-28 2006-07-19 富士通株式会社 分岐予測装置および分岐予測方法
JP4009248B2 (ja) 2003-12-05 2007-11-14 富士通株式会社 分岐予測装置および分岐予測方法
US20070266228A1 (en) * 2006-05-10 2007-11-15 Smith Rodney W Block-based branch target address cache
US7487340B2 (en) 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
CN102520913B (zh) * 2011-11-03 2014-03-26 浙江大学 基于分组更新历史信息的并行分支预测装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5394529A (en) * 1990-06-29 1995-02-28 Digital Equipment Corporation Branch prediction unit for high-performance processor
US6877089B2 (en) * 2000-12-27 2005-04-05 International Business Machines Corporation Branch prediction apparatus and process for restoring replaced branch history for use in future branch predictions for an executing program
US7370183B2 (en) * 2003-04-11 2008-05-06 Board Of Regents, The University Of Texas System Branch predictor comprising a split branch history shift register
JP2009535750A (ja) * 2006-05-04 2009-10-01 インターナショナル・ビジネス・マシーンズ・コーポレーション 多形的分岐予測子を実装するための方法および装置

Also Published As

Publication number Publication date
WO2014043399A1 (en) 2014-03-20
US20140075166A1 (en) 2014-03-13
CN104603747B (zh) 2018-06-05
CN104603747A (zh) 2015-05-06
KR101705211B1 (ko) 2017-02-09
US9395984B2 (en) 2016-07-19

Similar Documents

Publication Publication Date Title
KR101705211B1 (ko) 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 방향 히스토리(들)를 스왑하는 것, 및 관련 시스템들 및 방법들
CN108780398B (zh) 在基于处理器系统中基于负载路径历史使用地址预测表以提供负载地址预测
US10255074B2 (en) Selective flushing of instructions in an instruction pipeline in a processor back to an execution-resolved target address, in response to a precise interrupt
US20170046154A1 (en) Storing narrow produced values for instruction operands directly in a register map in an out-of-order processor
US9830152B2 (en) Selective storing of previously decoded instructions of frequently-called instruction sequences in an instruction sequence buffer to be executed by a processor
EP3433728B1 (en) Providing references to previously decoded instructions of recently-provided instructions to be executed by a processor
US11068273B2 (en) Swapping and restoring context-specific branch predictor states on context switches in a processor
US11392537B2 (en) Reach-based explicit dataflow processors, and related computer-readable media and methods
US10956162B2 (en) Operand-based reach explicit dataflow processors, and related methods and computer-readable media
CA2939834C (en) Speculative history forwarding in overriding branch predictors, and related circuits, methods, and computer-readable media
US20160077836A1 (en) Predicting literal load values using a literal load prediction table, and related circuits, methods, and computer-readable media
WO2019045940A1 (en) INSERTING INSTRUCTION BLOCK HEADER DATA CACHING IN SYSTEMS BASED ON BLOCK ARCHITECTURE PROCESSOR
CN112789594B (zh) 提供预测指令调度节流以防止基于无序处理器(oop)的设备中的资源溢出
US20160291981A1 (en) Removing invalid literal load values, and related circuits, methods, and computer-readable media
US20190294443A1 (en) Providing early pipeline optimization of conditional instructions in processor-based systems
US20230418615A1 (en) Providing extended branch target buffer (btb) entries for storing trunk branch metadata and leaf branch metadata
US20160092232A1 (en) Propagating constant values using a computed constants table, and related apparatuses and methods

Legal Events

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