KR20200090103A - 분기 예측기 - Google Patents

분기 예측기 Download PDF

Info

Publication number
KR20200090103A
KR20200090103A KR1020200001902A KR20200001902A KR20200090103A KR 20200090103 A KR20200090103 A KR 20200090103A KR 1020200001902 A KR1020200001902 A KR 1020200001902A KR 20200001902 A KR20200001902 A KR 20200001902A KR 20200090103 A KR20200090103 A KR 20200090103A
Authority
KR
South Korea
Prior art keywords
branch
instruction
prediction
branch prediction
static
Prior art date
Application number
KR1020200001902A
Other languages
English (en)
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 KR20200090103A publication Critical patent/KR20200090103A/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
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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
    • 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
    • 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

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)
  • Executing Machine-Instructions (AREA)

Abstract

장치는, 명령들에 응답하여 데이터 처리를 행하는 처리회로와, 지정된 분기 명령의 적어도 한 개의 특성에 근거하여 색인이 붙여진 분기 예측 상태 정보에 근거하여, 분기를 타는 것과 분기를 타지 않은 것 중에서 한가지로서 이 지정된 분기 명령에 대한 분기 결과를 예측하는 분기 예측기를 구비한다. 정적 분기 예측 동작 모드에서, 분기 예측기는, 정적 분기 예측 모드에 있는 동안 처리회로에 의해 실행되는 분기 명령들의 실제 분기 결과에 무관하게 설정된 분기 예측 상태 정보의 정적값들에 근거하여 분기 결과를 예측한다. 분기 예측 상태 정보의 정적값들은 프로그래밍 가능하다.

Description

분기 예측기{BRANCH PREDICTOR}
본 발명은 데이터 처리 분야에 관한 것이다. 특히, 본 발명은 분기 예측에 관한 것이다.
데이터 처리장치는 분기 명령들이 실제로 실행되기 전에 분기 명령들의 결과를 예측하는 분기 예측기를 갖는다. 분기 명령이 실제로 실행되기 전에 분기 결과를 예측함으로써, 분기 명령의 실행이 완료하기 전에 분기를 따르는 후속 명령들이 페치되어 예측적으로 실행되기 시작할 수 있다. 예측이 올바르면, 분기의 결과가 실제로 알려지는 경우에만 후속 명령들이 페치되고, 디코드되고 실행되었던 것보다 후속 명령들이 더 빠르게 실행될 수 있기 때문에 성능이 절감된다.
적어도 일부 실시예는, 명령들에 응답하여 데이터 처리를 행하는 처리회로와, 지정된 분기 명령의 적어도 한 개의 특성에 근거하여 색인이 붙여진 분기 예측 상태 정보에 근거하여, 분기를 타는 것(taken)과 분기를 타지 않은 것(non-taken) 중에서 한가지로서 상기 지정된 분기 명령에 대한 분기 결과를 예측하는 분기 예측기를 구비하고, 정적 분기 예측 동작 모드에서는, 상기 분기 예측기는, 정적 분기 예측 모드에 있는 동안 상기 처리회로에 의해 실행되는 분기 명령들의 실제 분기 결과에 무관하게 설정된 상기 분기 예측 상태 정보의 정적값들에 근거하여 분기 결과를 예측하도록 구성되고. 상기 분기 예측 상태 정보의 상기 정적값들은 프로그래밍 가능한 장치를 제공한다.
적어도 일부 실시예는, 지정된 분기 명령의 적어도 한 개의 특성에 근거하여 색인이 붙여진 분기 예측 상태 정보에 근거하여, 분기를 타는 것과 분기를 타지 않은 것 중에서 한가지로서 상기 지정된 분기 명령에 대한 분기 결과를 예측하는 단계를 포함하고, 정적 분기 예측 동작 모드에서는, 정적 분기 예측 모드에 있는 동안 실행되는 분기 명령들의 실제 분기 결과에 무관하게 설정된 상기 분기 예측 상태 정보의 정적값들에 근거하여 분기 결과가 예측되고, 상기 분기 예측 상태 정보의 상기 정적값들은 프로그래밍 가능한 데이터 처리장치의 분기 예측방법을 제공한다.
적어도 일부 실시예는, 명령들에 응답하여 데이터 처리를 행하는 처리회로와, 지정된 분기 명령의 적어도 한 개의 특성에 근거하여 색인이 붙여진 분기 예측 상태 정보의 옵코드 색인화(opcode-indexed) 테이블에 근거하여, 분기를 타는 것과 분기를 타지 않은 것 중에서 한가지로서 상기 지정된 분기 명령에 대한 분기 결과를 예측하는 분기 예측기를 구비하고, 상기 적어도 한 개의 특성은 상기 지정된 분기 명령의 옵코드로부터 유도된 정보를 포함하는 장치를 제공한다.
이하, 다음의 첨부도면에 도시된 실시예를 참조하여 본 발명을 더욱 상세히 설명한다.
도 1은 분기 예측기를 갖는 데이터 처리 시스템의 일례를 개략적으로 나타낸 것이다.
도 2는 프로그래밍 가능한 분기 예측 상태 정보의 첫 번째 예를 나타낸 것이다.
도 3은 프로그래밍 가능한 분기 예측 상태 정보의 두 번째 예를 나타낸 것이다.
도 4는 분기 예측 상태 정보를 학습시키는 프로파일링 모드를 개략적으로 나타낸 것이다.
도 5는 분기 예측 상태 정보에 근거하여 분기가 행해지지만, 분기 예측 상태 정보가 실행된 분기 명령들의 실제 분기 결과에 따라 갱신되지 않는 정적 분기 예측 모드를 개략적으로 나타낸 것이다.
도 6은 예측 테이블들 중에서 한 개로서 분기 명령의 옵코드에 근거하여 색인이 붙여진 테이블을 사용하는 퍼셉트론 분기 예측기의 일례를 나타낸 것이다.
도 7은 예측 테이블들 중에서 한 개로서 분기 예측의 옵코드에 근거하여 색인이 붙여진 테이블을 사용하는 TAGE 분기 예측기의 일례를 나타낸 것이다.
장치는, 명령들에 응답하여 데이터 처리를 행하는 처리회로와, 일반적인 분기 명령의 적어도 한 개의 특성에 근거하여 색인이 붙여진 분기 예측 상태 정보에 근거하여, 분기를 타는 것과 분기를 타지 않은 것 중에서 한가지로서 지정된 분기 명령에 대한 분기 결과를 예측하는 분기 예측기를 구비한다. 분기를 타는 것/분기를 타지 않는 것의 결과는 분기 예측기에 의해 예측된 분기의 유일한 특성이 아닐 수도 있다. 예를 들어, 분기 예측기는 분기 명령의 분기 대상 어드레스 등의 다른 측면이나 분기 유형 등의 다른 특성을 더 예측할 수도 있다. 그러나, 분기를 타는 것 또는 분기를 타지 않는 것의 결과의 예측은, 분기 후의 다음의 명령이 (결과가 분기를 타지 않는 것인 경우에 실행되는) 분기로부터 순차적으로 뒤따르는 명령인지 또는 (결과가 분기를 타는 것인 경우에 실행되는) 분기의 대상 어드레스에 위치한 명령인지 판정하는데 유용할 수 있다.
분기 예측에 대한 한가지 접근방법은, 일부 고정된 규칙을 사용하여 지정된 분기 명령에 대한 예측을 결정하는 정적 분기 예측을 이용하는 것이다. 정적 분기 예측은, 동적 런타임 이력이나 분기가 실행되는 상황(context)에 대한 상황 정보(예를 들어, 분기가 실행되기 전에 실행된 이전 명령들로부터 유도된 상황 정보)를 사용하지 않고, 분기 명령 그 자체의 특성 및/또는 사전에 결정된 상태에 근거하여 행해지는 예측이다. 예를 들어, 정적 분기 예측에 대한 간단한 방식은, 모든 분기가 분기를 타지 않는 것으로 예측되는 것이다. 정적 분기 예측에 대한 규칙의 또 다른 예는, 분기 명령 그 자체의 어드레스에 대한 분기 대상 어드레스를 결정하기 위한 양의 어드레스 오프셋을 갖는 순방향 분기들은 분기를 타지 않는 것으로 예측하는 한편, 음의 분기 오프셋을 갖는 역방향 분기들은 분기를 타는 것으로 예측되는 것일 수 있다. 이와 같은 규칙은, 루프가 완료될 때까지 특정한 횟수동안 분기를 탄 후, 1회 분기를 타지 않으므로, 역방향 분기들이 분기를 타지 않는 것보다는 분기를 타는 루프에서 역방향 분기들이 자주 사용된다는 사실을 이용한다. 그러나, 이와 같은 정정 예측 함수들의 문제점은, 정적 분기 예측에 대한 규칙이 유연하지 않으며 모든 분기들에 적용되고, 정적 분기 예측 규칙에 의해 정의된 거동을 따르지 않는 상당한 수의 분기들이 존재한다는 것이다. 따라서, 정적 예측 함수는 다수의 분기들에 잘 들어맞지 않으므로, 비교적 열악한 성능을 제공한다.
따라서, 가장 최근의 프로세서에서는, 분기 예측기가, 분기 예측이 실행된 분기 명령들의 실제 분기 결과에 근거하여 학습된 분기 예측 상태 정보에 근거하여 행해지는 동적 분기 예측 접근방법을 이용한다. 이에 따르면, 분기 예측 상태 정보가 계속해서 갱신되어 처리회로에 의해 실제로 보이는 분기들의 거동을 반영함으로써, 다음에 처리회로가 볼 때 분기 예측기가 지정된 분기의 결과를 올바르게 예측할 수 있는 가능성을 증가시킨다. 이 때문에, 분기 예측기가 실행된 분기 명령들의 실제 분기 결과로부터 학습하는 동적 분기 예측 모드를 사용하는 것은 성능을 향상시키는데 유용할 수 있다.
그러나, 일부 응용 분야에 대해, 지정된 소프트웨어가 그것의 실행 대기시간에 대한 일정한 결정론적인 경계를 갖고 실행되는 것이 중요할 수 있다. 예를 들어, 차량 내부의 조종이나 브레이크 시스템을 제어하는 것과 같이, 안전이 중요한 응용분야에 대해 설계된 프로세서에서는, 처리회로 상에서 실행할 때 코드의 거동이 결정론적으로, 처리가 가능한 가장 높은 성능을 가질 필요가 없더라도, 대기시간에 대한 일정한 결정론적인 한계 내에서 처리를 완료하는 것이 보장되어야 하는 것이 중요할 수 있다. 동적 분기 예측의 사용은, 명령들에 대해 행해진 분기 예측의 차이에 의해 발생된 이들 명령들의 동일한 시퀀스의 실행의 서로 다른 인스턴스들과 관련된 가변의 대기시간으로 인해 결정론적이 아닌 다수의 이해하기 곤란한 성능상의 지터(jitter)를 도입할 수 있다. 일련의 분기 명령들이 분기 예측기에 의해 잘못 예측되면, 이것은 분기가 올바르게 예측되는 다른 경우보다 훨씬 더 열악한 성능을 발생할 수 있다. 따라서, 일부 응용분야에 대해서는 동적 분기 예측이 덜 선호될 수도 있다.
이하에서 설명하는 기술에서는, 분기 예측기가, 정적 분기 예측 모드에 있는 동안 처리회로에 의해 실행되는 분기 명령들의 실제 분기 결과에 무관하게 설정된 분기 예측 상태 정보의 정적값들에 근거하여 분기 결과가 예측되는 정적 분기 예측 동작 모드를 갖는다. 분기 예측 상태 정보의 정적값들은 프로그래밍 가능하다. 따라서, 정적 분기 예측 동작 모드에서는, 지정된 세트의 분기들에 대해 행해진 분기 예측이 정적으로 고정되고 실행되는 분기 명령들의 실제 결과에 근거한 분기 예측 상태 정보의 학습이 존재하지 않기 때문에, 성능이 결정론적이기는 하지만, 정적값들이 프로그래밍 가능하므로, 다양한 소프트웨어 작업부하(workload)에 대해 분기 예측 상태 정보를 적용하는 것이 가능하며, 이 작업부하에 대한 예측된 분기 거동을 반영하도록 지정된 소프트웨어 작업부하에 대한 분기 예측 상태 정보의 정적값들을 구성함으로써 성능이 향상될 수 있다. 따라서, 프로그래밍 가능한 정적 분기 예측 기능을 제공함으로써, 동적 분기 예측 또는 프로그래밍 불가능한 정적 분기 예측에 의해 제공될 수 있는 성능과 결정론 사이의 더 양호한 균형을 제공할 수 있다.
분기 예측 상태 정보의 정적값들의 프로그래밍은 다양하게 행해질 수 있다. 일부 실시예에서는, 분기 예측 상태 정보의 정적값들의 프로그래밍이 처리회로에 의해 실행된 특정한 명령들에 응답하여 행해질 수도 있다.
예를 들어, 처리회로는, 처리회로에 의해 실행된 분기 예측 상태 프로그래밍 명령에 따라 분기 예측 상태 정보의 적어도 서브셋을 프로그래밍한다. 에를 들어, 분기 예측 상태 프로그래밍 명령은, 분기 예측 상태 정보의 서브셋을 포함하는 시스템 레지스터에 설정될 데이터를 지정하는 시스템 레지스터 갱신 명령일 수도 있다. 또 다른 예는, 분기 예측 상태 프로그래밍 명령이 분기 예측 상태 정보의 적어도 서브셋을 기억하는 레지스터에 매핑된 어드레스를 대상 어드레스로서 지정되는 스토어(store) 명령인 경우일 수도 있다. 이와 같은 두 번째 예에서는, 분기 예측 상태 정보가 메모리 매핑된 예측 테이블에 효율적으로 기억된다. 분기 예측 상태의 정적값들의 전체 테이블이 한 개의 명령으로 프로그래밍되는 것이 필수적인 것은 아니다. 예를 들어, 일부 경우에는, 분기 예측 상태 정보가 다수의 레지스터들에 걸쳐 기억되고, 각각의 레지스터를 개별적으로 프로그래밍하기 위해 별개의 분기 예측 상태 프로그래밍 명령들이 필요할 수도 있다.
처리회로는 다수의 특권 레벨들 중에서 한 개에서 명령들의 실행을 지원해도 된다. 일부 실시예에서, 분기 예측 상태 프로그래밍 명령이 특정한 임계 특권 레벨보다 특권을 덜 갖는 특권 레벨에서 실행되는 것이 시도될 때 처리회로가 예외를 기동할 수도 있다. 예를 들어, 이것은 특권을 갖는 소프트웨어만이 분기 예측 상태 정보를 갱신할 수 있도록 보장하는데 유용할 수 있다. 예를 들어, 프로그래밍 가능한 정적 분기 예측 상태 정보의 갱신은, 운영체계 소프트웨어 또는 운영체계보다 높은 특권 레벨에서 실행되는 소프트웨어에 한정될 수도 있다. 이것은 어플리케이션들 사이에서 전환될 때, 운영체계가 이와 같은 들어오는 어플리케이션에 대한 적절한 세트의 분기 예측 상태에서 프로그래밍을 할 수 있으므로, 이 어플리케이션의 실행중에 사용될 정적 분기 예측 규칙들의 세트가, 동일한 세트의 분기 예측 상태가 모든 어플리케이션에 대해 사용되었던 경우보다, 이 어플리케이션의 예측된 거동에 더 명확하게 대상이 될 수 있다.
일부 구현예에서는, 처리장치가, 분기 예측 상태 정보를 설정하기 위해 실제 분기 명령으로부터 학습할 수 있는 능력을 갖지 않을 수 있다. 예를 들어, 실제 분기 결과에 응답하여 분기 예측 상태 정보를 갱신하는 회로가 존재하지 않을 수도 있다. 그 대신에, 이와 같은 시스템에서는, 정적 분기 예측 상태 정보로 설정하기 위한 프로그래밍 가능한 값들의 세트가 메모리 또는 일부의 사전에 구성된 기억 장소에 기억되어, 지정된 어플리케이션으로 전환할 때, 운영체계나 이 어플리케이션을 관리하는 다른 소프트웨어가 사전에 구성된 기억 장소로부터 분기 예측기를 위해 사용할 값들의 세트를 판독한 후, 시스템이 정적 분기 예측 모드에 있을 때 사용할 분기 예측 상태의 정적값들로서의 역할을 하는 프로그래밍 가능한 상태 정보에 이것들을 기록할 수도 있다. 예를 들어, 지정된 어플리케이션을 위해 사용될 분기 예측 상태값들의 세트는, 리터럴(literal) 값들로서 어플리케이션 그 자체의 프로그램 코드 내에 포함되거나, 관련된 프로그램 코드가 장치 상에 (에를 들어, 관련된 어플리케이션의 소프트웨어 이미지의 일부로서) 설치되었을 때 메모리의 지정된 영역에 기억될 수도 있다.
지정된 어플리케이션에 대한 분기 예측 상태 정보의 정적값들의 세트가 사전에 고정된 경우에는, 전술한 것과 같이 브레이크 제어 등의 원하는 응용분야에서 장치가 사용되고 있는 경우에 프로그램 코드를 실행할 실제 프로세서 구현 상에서의 학습에 근거하지 않고, 예를 들어, 개발자가 사용하는 원격지 장치 상에서, 소프트웨어를 개발시에 코드 프로파일링을 실행함으로써 정적값들이 학습될 수도 있다. 따라서, 지정된 어플리케이션 상태에 대한 분기 예측 상태의 적절한 세트의 학습은, 정적 분기 예측 모드를 지원하는 분기 예측기를 갖는 실제 장치 상에서 행해지는 것이 아니라, 개발 단계 중에 오프라인으로 행해질 수도 있다.
그러나, 다른 접근방법에서는, 정적 분기 예측 모드 이외에, 분기 예측기는, 분기 예측기가 프로파일링 모드에 있는 동안 실행되는 분기 명령들의 실제 분기 결과들에 근거하여 분기 예측 상태 정보를 학습시키는 프로파일링 동작 모드를 더 지원할 수도 있다. 따라서, 프로파일링 모드 중에, 분기 예측기는 실제 분기 결과로부터 학습하여 분기 예측 상태 정보를 학습시킴으로써, 나중에 유사한 명령들이 다시 실행될 때 정확한 예측을 제공할 가능성이 더 높을 수 있다. 장치가 실제로 필드에서 작동할 때 시스템이 나중에 정적 분기 예측 모드로 전환될 수 있으며, 이 시점에서는, 정적 분기 예측 모드 중에 분기 예측 상태 정보의 추가적인 학습이 존재하지 않으므로, 정적 분기 예측 모드에 의해 제공된 결정론은 장치가 특정한 보안 한계 내에 유지되도록 보장하는데 유리할 수 있다. 따라서, 프로파일링 모드의 제공은 장치 그 자체가 지정된 작업이나 어플리케이션에 대해 바람직한 분기 예측 상태들의 세트를 수집할 수 있도록 할 수 있다.
프로파일링 모드와 정적 분기 예측 모드 사이의 전환은 다양하게 제어될 수 있다. 일부 구현예에서는, 모드를 변경하기 위해 전용의 모드 진입 또는 모드 종료 명령이 사용될 수 있다. 이와 달리, 시스템 레지스터 내부의 모드 표시자를 갱신하는 시스템 레지스터 갱신 명령을 사용하여 모드를 변경할 수도 있다. 따라서, 예를 들어, 지정된 보안 어플리케이션에서 사용하기 위해 지정된 처리장치를 환경설정하는 작업자는, 장치 상에 코드를 설치하고, 장치가 공장에 있는 동안 초기 기간 동안 프로파일링 모드에서 코드를 실행하여 각각의 어플리케이션에 대한 적절한 분기 예측 상태 정보를 수집한 후, 장치가 필드에서 사용하기 위해 발매되기 전에 모드를 정적 분기 예측 모드로 전환할 수도 있다.
프로파일링 모드가 제공되는 실시예에서는, 분기 예측 상태 정보가, 지정된 분기 명령들의 적어도 한 개의 특성에 근거하여 색인이 붙여진 포화(saturating) 카운터들의 세트를 구비하는 것이 유용할 수 있다. 포화 카운터들에 특정한 수의 비트들을 제공함으로써, 이것이 일부 히스테리시트(hysteresis)를 제공하여, 지정된 분기 명령 또는 지정된 분기 유형에 대한 한 개의 결과의 단일의 인스턴스의 발생이 동일한 분기 또는 분기 유형에 대한 반대의 결과의 인스턴스들의 이전의 실행을 즉각적으로 무효화하지 않기 때문에, 프로파일링 모드에서 분기 예측 상태 정보의 학습에 도움이 될 수 있다.
에를 들어, 프로파일링 모드에서는, 해결된 분기 명령에 대한 실제 분기 결과의 결정에 응답하여, 분기 예측기가, 해결된 분기 명령의 적어도 한 개의 특성에 근거하여 포화 카운터들 중에서 한 개를 선택하고, 실제 분기 결과가 분기를 타는 것과 분기를 타지 않는 것 중에서 한 개일 때 선택된 포화 카운터를 증분하거나, 실제 분기 결과가 분기를 타는 것과 분기를 타지 않는 것 중에서 나머지 한 개일 때 선택된 포화 카운터를 감분한다. 그후, 정적 분기 예측 모드, 분기 예측기가 선택된 포화 카운터와 임계값 사이의 비교에 근거하여 분기 결과를 예측한다.
프로파일링 모드를 지원하는 시스템에서는, 실행될 때, 처리회로를 기동하여 프로파일링 모드 중에 학습된 분기 예측 상태 정보의 적어도 서브셋의 현재값을 추출하는 분기 예측 상태 추출 명령을 더 지원한다. 이것은, 프로파일링 모드 중에 지정된 어플리케이션에 대해 학습된 상태가 추출된 후 메모리에 보존되어, 대응하는 어플리케이션이 다시 실행될 때 나중에 분기 예측 상태 정보 내부에 다시 프로파일링될 수 있도록 할 수 있다. 예를 들어, 분기 예측 상태 추출 명령은, 지정된 시스템 레지스터로부터 분기 예측 상태를 판독하는 판독 명령이거나, 분기 예측 상태 정보의 적어도 서브셋을 기억하는 레지스터에 매핑된 어드레스를 타겟 어드레스로서 지정하는 로드 명령일 수 있다. 두 번째 예는, 메모리 매핑된 구조가 분기 예측 상태 정보를 위해 사용되는 경우에 유용할 수 있다. 어떤 종류의 분기 예측 상태 추출 명령이 사용되는지에 무관하게, 분기 예측 상태 추출 명령이 분기 예측 상태를 직접 메모리에 전달하거나, 추출된 상태를 범용 레지스터에 전달하고, 그후 이 범용 레지스터로부터 후속하는 스토어 명령이 추출된 분기 예측 상태를 메모리에 보전하여, 필요에 따라 다시 판독될 수 있도록 할 수 있다.
분기 예측 상태 프로그래밍 명령에 대해, 분기 예측 상태 추출 명령의 실행은 특정한 임계 특권 레벨 이상의 특권 레벨로 제한될 수도 있다. 따라서, 임계 특권 레벨보다 특권이 더 적은 상태에서의 분기 예측 상태 추출 명령의 실행은 예외의 신호가 발생하게 한다.
정적 분기 예측 모드 중에, 분기 예측 상태 정보는 지정된 분기 명령의 적어도 한 개의 특성에 근거하여 색인이 붙여진다. 여기에서, "색인이 붙여진다"는 용어는, 어떤 항목의 분기 예측 상태를 지정된 분기 명령에 대해 예측을 하기 위해 사용할지의 선택을 말한다. 따라서, 지정된 분기 명령의 적어도 한 개의 특성에 근거하여 분기 예측 상태의 특정한 항목이 선택된다. 분기의 다양한 특성을 사용하여 분기 예측 상태의 색인을 붙일 수 있다.
일 실시예에서, 지정된 분기 명령의 적어도 한 개의 특성은 지정된 분기 명령의 옵코드로부터 유도된 정보를 포함한다. 옵코드는 실행할 특정한 종류의 명령을 식별하는 명령 인코딩의 일부이다. 일부 시스템은 다수의 다른 분기 유형을 지원한다. 예를 들어, 다양한 분기 명령 유형들은 다음을 포함한다:
· 분기의 결과가 조건 스테이터스 레지스터에 기억된 조건 코드들에 의존하지만 분기 그 자체가 분기를 탈 것인지 아닌지 판정하기 위한 2개의 피연산자들 사이의 비교를 기동하지 않는 분기 명령. 다른 예에서는, 다양한 테스트 조건들을 갖는 조건부 분기 명령이 다양한 분기 유형들로서 간주될 수도 있다(테스트 조건은 분기를 타기 위해 조건 코드들에 의해 만족되는 조건이다). 예를 들어, 조건이 "동등(equal)" 조건을 표시할 때 branch-if-equal(B.EQ) 조건부 분기 명령을 취하는 반면에, 조건 코드가 "동등하지 않음(not equal)" 조건을 표시하는 경우에 branch-if-not-equal(B.NE) 조건부 분기 명령이 분기를 타게 할 수도 있다. 따라서, 일부 실시예에서는, B.NE와 B.EQ 분기 명령들이 서로 다른 분기 유형으로서 취급될 수도 있다. 더욱 일반저그로는, 다양한 테스트 조건들을 지정하는 조건부 분기 명령들이 서브셋들로 분할될 수 있으며, 제1 서브셋의 테스트 조건들을 지정하는 조건부 분기들이 제2 서브셋의 테스트 조건들을 지정하는 조건부 분기와 다른 "분기 유형"으로서 취급된다.
· 분기를 타는지 여부를 판정하기 위해 비교를 더 행하는 비교 및 분기 명령.
· 비교가 디폴트로 지정된 피연산자와 0의 값 사이에서 행해지는 비교 및 제로값이면 분기(compare and branch if zero: CBZ) 명령
· 조건부 분기 동작을 행하는 것 이외에, 분기를 타는 경우에, 분기 이후의 다음의 순차적인 명령의 어드레스가, 분기하고 있는 함수의 처리가 완료한 경우 실행이 향하는 기능 복귀 어드레스로서의 역항을 하는 링크 레지스터에 기록되는, 링크를 갖는 분기 명령.
· 조건부 분기 명령 이외에, 분기를 타는 경우에 분기에 뒤따라 실행된 명령들이 분기 전에 사용되고 있는 명령 세트와는 다른 명령 세트에 따라 디코드되도록, 명령 세트의 변경을 더 기동하는, 분기 및 명령 세트 변경 명령.
이들은 서로 다른 옵코드들에 의해 구별될 수 있는 잠재적인 분기 유형들의 일부 에에 지나지 않으며, 일부 시스템은 이들 분기 유형들의 다양한 조합을 더 지원할 수도 있다. 본 발명자는, 분기 옵코드와 지정된 분기에 대한 가장 가능성이 높은 분기 거동 사이에 상관관계가 존재할 수 있다는 것을 발견하였다. 예를 들어, 일부 분기 옵코드들에 대해서는, 분기 오프셋이 양인 경우에 분기를 보통 타고 음의 오프셋에서는 분기를 타지 않는 반면에, 다른 옵코드에 대해서는 반대의 거동이 보여진다. 다른 옵코드는 그들의 오프셋이 양인지 음인지에 무관하게 보통 분기를 타지 않는다. 따라서, 분기 예측 상태에 색인을 붙일 때 옵코드를 고려함으로써, 다양한 분기 예측 거동이 그들의 가장 높은 가능성을 갖는 거동에 일치하도록 다양한 분기 옵코드 유형들에 대해 선택될 수 있도록 함으로써 성능을 향상시킬 수 있다. 이것은, 성능을 향상시키는데 유용할 수 있지만, 분기 예측 상태에 색인을 붙이는 것의 일부로서 옵코드를 더 고려함으로써, 다수의 동적 분기 예측기들에서 사용되는 분기 명령 어드레스들에 의해 색인이 붙여지는 분기 예측 테이블들로부터 간단한 분기 예측 상태 테이블이 유지될 수 있도록 하며, 명령 어드레스 등의 다른 특성을 고려하지 않더라도, 옵코드에 근거한 색인은 여전히 일부 작업부하에 대해 합당한 레벨의 성능을 제공할 수 있다.
고려할 수 있는 또 다른 특성은, 지정된 분기 명령이 (양의 분기 오프셋을 갖는) 순방향 분기인지 또는 (음의 분기 오프셋을 갖는) 역방향 분기인지의 표시일 수도 있다. 예를 들어, 일 구현에서는, 분기 예측 테이블은 1비트 표시자들 또는 N비트 포화 카운터(이때, N은 2 이상이다)들의 세트를 포함할 수 있으며, 이때 예측을 위해 사용할 특정한 비트 또는 카운터는, 옵코드의 적어도 일부의 조합과, 명령이 순방향 분기인지 또는 역방향 인지의 표시에 근거하여 선택된다. 이것은, 각각의 옵코드에 대해 별개로, 양의 오프셋을 갖는 이 옵코드의 분기들이 분기를 타는 것으로 예측되는지 또는 분기를 타지 않는 것으로 예측되는지와, 이 옵코드를 갖는 음의 오프셋을 갖는 분기들이 분기를 타는 것으로 예측되는지 또는 분기를 타지 않는 것으로 예측되는지의 구성을 허용할 것이다. 이와 같은 정적 예측 기능은, 일부 자동차 벤치마크에 대해, 다수의 더 많은 비트들의 예측 상태를 이용하는 더 복잡한 예측기들보다 성능이 우수한 것으로 밝혀졌다.
분기 예측 상태에 색인을 붙이는데 사용될 수 있는 분기 특성의 또 다른 일면은 지정된 분기 명령에 대한 분기 오프셋의 사이즈일 수 있다. 예를 들어, 분기 오프셋의 사이즈가 특정한 임계값보다 큰지 또는 작은지의 표시가 색인의 일부로서 제공될 수도 있다.
일부 구현예에서, 분기 예측 상태 정보에 대한 색인을 위한 기준으로 사용되는 지정된 분기의 적어도 한 개의 특성은, 지정된 분기 명령에 대한 명령 어드레스에 무관하다. 대부분의 동적 분기 예측기들이 명령 어드레스를 고려하고, 정적 분기 예측기에서는 동일한 전역의 정적 예측 규칙이 모든 분기들에 적용될 것이기 때문에 대부분의 정적 분기 예측기들이 분기 예측 상태 테이블을 전혀 갖고 있지 않으므로, 어드레스에 의해 색인이 붙여지지 않은 분기 예측 상태 테이블은 비교적 드물다. 분기의 명령 어드레스를 무시하는 것은 분기 예측의 낮은 성능을 잠재적으로 일으킬 것으로 생각할 것이다. 그러나, 결정론이 가장 중요한 기준인 안전이 중요하거나 실시간의 응용분야에 대해서는, 이것이 허용될 수 있으며, 색인화가 명령 어드레스 이외의 특성에 근거하는 전술한 것과 같은 정적 분기 예측 모드에 대해 프로그래밍 가능한 상태 테이블을 사용하는 것은 알려진 대기시간 한계를 가지면서 합당한 레벨의 성능을 제공하는데 충분할 수 있다. 예를 들어, 테이블이 적어도 옵코드에 근거하여 색인이 붙여지고 명령 어드레스에 무관한 경우에, 기억된 분기 예측 상태들의 총 비트수 면에서 이것은 매우 저비용으로 합당한 성능을 제공하는 것으로 밝혀졌다.
따라서, 지정된 분기 명령의 옵코드로부터 유도된 정보를 포함하는 지정된 분기의 적어도 한 개의 특성에 근거하여 색인이 붙여지는 옵코드 색인화 테이블에 근거하여 지정된 분기 명령에 대해 분기를 타는 것 또는 분기를 타지 않는 것의 결과를 예측하는 분기 예측기는, 매우 작은 비용으로 합당한 레벨의 예측 성능을 제공하는 방법으로서 다양한 다른 분기 예측기들에서 유용할 수 있다. 따라서, 이와 같은 옵코드 색인화 테이블은 정적 분기 예측 모드를 지원하지 않지만, 장치가 동작가능한 경우 분기 예측 상태가 실제 분기 결과에 근거하여 계속해서 학습되는 동적 분기 예측 모드를 사용하는 분기 예측기에서도 사용될 수 있다.
특히, 옵코드 색인화 테이블이 명령 어드레스에 무관한 특성에 근거하여 색인이 붙여지는 경우, 이것은 매우 낮은 오버헤드를 제공한다. 예를 들어, 일 구현예에서, 본 발명자는, 옵코드의 조합에 근거하여 색인이 붙여지는, 약 150비트의 분기 예측 상태를 사용하는 소형 예측기가, 분기 오프셋이 양인지 음인지에 무관하게, 일부 자동차 벤치마크에서 약 3500비트를 사용하는 더 복잡한 예측기보다 성능이 뛰어날 수 있다는 것을 발견하였다.
일부 구현예에서, 옵코드 색인화 테이블이 예측할 분기 결과를 결정하는데 사용되는 유일한 분기 예측 상태일 수도 있다. 그러나, 다른 경우에는, 이것이 분기 예측을 유도하기 위해 사용된 분기 예측 상태 정보의 다수의 테이블 중에서 한 개로서 포함될 수도 있다.
예를 들어, 어떤 경우에, 옵코드 색인화 테이블은, 지정된 분기의 명령 어드레스와 이전에 실행된 분기들에 대한 이전의 분기 결과들의 이력 중에서 적어도 한 개로부터 유도된 정보에 근거하여 색인이 붙여진 다른 분기 예측 테이블들과 함께, 더 복잡한 예측기의 일부로 사용될 수도 있다. 예를 들어, 전술한 옵코드 색인화 테이블은, 퍼셉트론 또는 TAGE 예측기 등의 더 큰 예측기의 구성요소일 수도 있다. 옵코드 색인이 붙여지는 테이블의 제공은, 예를 들어, 명령 어드레스에 근거한 주 예측이 불충분한 신뢰도를 제공하는 분기들이 존재하는 경우에 고장대체(fallback)로서 기능하여, 더 큰 퍼셉트론이나 TAGE 예측기의 정밀도를 증가시키는데 도움이 될 수도 있다.
도 1은 데이터 처리 시스템(2)의 일례를 개략적으로 나타낸 것이다. 이 시스템은, 명령 캐시(6) 또는 메모리 시스템으로부터 프로그램 명령을 페치하는 페치 스테이지(4)와, 페치된 명령들을 디코드하는 디코드 스테이지(8)와, 명령들이 필요로 하는 피연산자들이 이용가능한지 검사하고 피연산자가 이용가능하면 실행을 위한 명령을 발행하는 발행 스테이지(10)와, 명령을 실행하여 레지스터들(14)로부터 판독된 피연산자들에 대해 데이터 처리를 행하고 처리 결과를 발생하는 실행 스테이지(12)와, 실행 스테이지(12)에 의해 발생된 처리 결과를 다시 레지스터(14)에 기록하는 후기록(writeback) 스테이지(16)를 포함하는 다수의 파이프라인 스테이지들을 포함하는 처리 파이프라인을 구비한다. 실행 스테이지는, 본 실시예에서는, 산술 또는 논리 연산을 행하는 산술/논리 유닛(ALU)(18), 부동소수점 수를 포함하는 연산을 행하는 부동소수점 유닛(20)과, 메모리 시스템으로부터 레지스터들(14) 내부에 데이터를 로드하는 로드 명령 또는 레지스터들(14)로부터 메모리 시스템에 데이터를 기억하는 스토어 명령들 등의 메모리 액세스 동작을 처리하는 로드/스토어 유닛(20)을 포함하는 다수의 실행 유닛을 구비한다. 본 실시예에서, 메모리 시스템은, 명령 캐시(6), 레벨 1 데이터 캐시(24), 데이터와 명령을 위해 사용되는 공유 레벨 2 캐시(26)와, 메인 메모리(28)를 포함한다. 이때, 이것은 가능한 메모리 계층구조의 일례에 지나지 않으며, 캐시 또는 메모리의 다른 구성이 제공될 수도 있다는 것은 자명하다. 또한, 도 1에 도시된 파이프라인 스테이지들의 특정한 구성은 단지 일례이며, 비순차 프로세서의 레지스터 재명명 스테이지 등의 다른 파이프라인 스테이지들이 설치될 수도 있다.
장치(2)는 파이프라인에 의해 실행할 분기 명령들의 결과를 예측하는 분기 예측기(30)를 갖는다. 이와 같은 예측은 분기 예측 상태 스토리지(32)에 기억된 분기 예측 상태 정보에 근거한다. 분기 예측기930)에 의해 행해진 예측에 근거하여, 페치 스테이지(4)는 파이프라인에 의해 실행하기 위한 명령들을 페치하므로, 분기의 결과가 실제로 알려지기 전에, 분기 뒤에 실행할 필요가 있는 것으로 예측된 명령들이 페치된다. 예를 들어, 분기 방향(분기를 타는 것 또는 분기를 타지 않는 것)과 분기 대상 어드레스(분기를 타는 것으로 예측되는 경우 분기 후에 다음에 실행할 명령의 어드레스) 등의 분기의 다양한 특성이 분기 예측기에 의해 예측된다. 분기 대상 어드레스 예측을 위해, 모든 공지된 기술을 사용해도 된다. 이하의 실시예는 분기 방향 예측에 초점을 맞춘다.
도 2는 분기 예측 상태 스토리지(32)에 의해 기억되는 분기 예측 상태의 첫 번째 예를 나타낸 것이다. 이 예에서, 분기 예측 상태는, 분기 명령의 옵코드(35)와 분기 명령이 순방향 분기인지 역방향 분기인지의 표시(38)의 함수로서 유도된 색인값에 근거하여 색인이 붙여지는 1 비트 표시자들(34)의 세트를 포함하는 옵코드 색인화 분기 예측 테이블이다. 예를 들어, 순방향 또는 역방향 분기 표시(38)는 분기에 대한 분기 오프셋의 최상위 비트로서 선택될 수도 있는데, 0은 양의 분기 오프셋을 갖는 순방향 분기를 표시하고 1은 음의 분기 오프셋을 갖는 역방향 분기를 표시한다. 옵코드와 순방향/역방향 분기 표시(38)를 색인 내부에 결합함으로써, 이것은, 분기 예측 상태 테이블(32)이 다음과 같이 분기를 타는지 타지 않는지의 예측의 2차원 테이블로서의 역할을 한다는 것을 효율적으로 의미한다.
순방향 분기 역방향 분기
옵코드 A 1 0
옵코드 B 0 0
옵코드 C 0 1
옵코드 D 1 1
... ... ...
예를 들어, 1의 비트를 분기를 타는 예측을 표시하고, 0의 비트는 분기를 타지 않는 예측을 표시할 수 있으며, 역도 성립한다.
이 테이블은 분기의 명령 어드레스에 무관하게 색인이 붙여지므로, 지정된 분기 옵코드를 갖는 모든 순방향 분기들은 이것들이 프로그램 내부에서 나타나는 위치에 무관하게 그들에 대해 행해진 동일한 분기를 타는 것 또는 분기를 타지 않는 것의 예측을 갖는다는 점에 주목하기 바란다. 사실상, 이와 같은 분기 예측 테이블은, 전통적으로 순방향 분기를 분기를 타지 않는 것으로 취급하고 역방향 분기를 분기를 타는 것으로 취급하는 정적 분기 예측 방식의 확장이지만, 옵코드마다 이와 같은 규칙을 프로그래밍 가능하게 함으로써, 양의 분기 오프셋 또는 음의 분기 오프셋이 분기를 타는 것으로 예측되는지 또는 분기를 타지 않는 것으로 예측되는지가 각각의 옵코드에 대해 별개로 구성될 수 있다. 즉, 이와 같은 테이블의 예는 옵코드마다 2비트, 즉 옵코드의 양의 오프셋에 대해 정적 예측이 취해지는지 여부를 판정하는 한 개의 비트와, 옵코드의 음의 오프셋에 대해 정적 예측이 취해지는지 여부를 판정하는 또 다른 비트를 포함한다.
이들 비트(34)의 값은, 프로파일링 모드에서, 또는 코드 프로파일링에 근거하여 각 비트(34)의 값들을 설정하는 전용 명령에 의해, 전술한 것과 같이 프로그래밍 가능할 수 있다.
도 3은 도 1과 동일한 색인 함수를 사용하지만, 이때에는 분기 예측 상태의 각 항목이 N비트 포화 카운터(36)이고, 이때 N은 2 이상인 또 다른 옵코드 색인화 테이블을 나타낸 것이다. 이와 같은 접근방법은 전술한 것과 같은 프로파일링 모드를 지원하는데 유용할 수 있다. 이와 같은 접근방법에 의해, 분기 예측기(30)가 옵코드(35)와 순방향/역방향 분기 표시(38)에 근거하여 분기 예측 상태의 항목들(36) 중에서 한 개에 색인이 붙여질 때, 카운터가 어떤 임계값(예를 들어, 0)보다 크거나 같은 경우, 분기가 타는 것으로 예측되고, 카운터가 임계값보다 작은 경우에는, 분기를 타지 않는 것으로 예측된다.
도 4는 프로파일링 모드에서 동작하는 분기 예측기(30)의 일례를 개략적으로 나타낸 것이다. 프로파일링 모드에서, 분기 예측기(30)는 실행된 분기 명령들에 대해 실행 스테이지(12)에 의해 제공된 실제 분기 결과들(39)에 근거하여 분기 예측 상태 스토리지(32)에 기억된 상태를 학습시킨다(도 1 참조). 예를 들어, 분기 명령이 실행 스테이지(12)에서 분기를 타는 것으로 판정되면, 분기 예측기(30)는 포화 카운터들(36) 중에서 대응하는 한 개를 증분하고, 다시 이 분기에 대해 분기를 타는 것의 예측이 행해질 가능성을 증가시킨다. 카운터가 그것의 최대의 양의 값에 도달하면, 카운터가 포화되고, 분기를 다시 한번 타는 것으로서 해결되는 경우에 다시 증분하지 않는다. 한편, 실행된 분기가 분기를 타지 않는 것으로 판정되면, 대응하는 카운터가 감분되어, 마찬가지로 카운터의 최대 음의 값에서 포화된다. 이에 따라, 지정된 어플리케이션에 대한 프로그램 코드가 실행될 때, 분기 예측 상태가 그것의 실제의 분기 결과에 근거하여 학습된다. 그후, 도 4에 나타낸 것과 같이, 카운터(36)의 학습된 값들이 지정된 어플리케이션의 실행 기간 후에 추출되고 메모리 시스템에 보존되어, 동일한 어이 가시 실행되는 경우에, 이들 값들이 분기 예측 상태 스토리지(32) 내부에 프로그래밍될 수 있다. 이것은 각각의 어플리케이션에 대해 별개로 행해지는데, 예를 들어, 도 4는 실제 해결 분기 결과에 근거한 학습에 의해 유도된 분기 예측 상태의 세트들을 각각 갖는 2개의 어플리케이션 A 및 B를 나타내고, 각각의 어플리케이션에 대한 분기 예측 상태는 메모리에 보존된다. 예를 들어, 분기 예측 상태 스토리지(32)로부터 분기 예측 상태를 추출하는데 사용되는 명령은, 시스템 레지스터를 판독하는 명령이거나, 분기 예측 상태 스토리지(32)에 대응하는 레지스터들의 메모리 매핑된 세트로부터 데이터를 로드하기 위한 로드 명령일 수도 있다.
이와 달리, 도 5는, 실행된 분기들의 실제 결과(39)에 근거한 분기 예측 상태 스토리지 내부의 분기 상태의 갱신이 존재하지 안는 정적 분기 예측 모드의 일례를 나타낸 것이다. 이와 같은 접근방법에 따르면, 정적 분기 예측 모드에서는, 분기 예측 상태 스토리지(32)의 값들이 고정된다. 이것은, 프로파일링 모드를 지원하지 않는 도 2의 예에 근거할 수 있으며, 이 경우에 정적으로 구성된 분기 예측 상태의 고정된 값들은 개발자가 소를 개발함으로써 코드 프로파일링에 의해 이전에 결정되었을 것이다. 이와 달리, 정적값들은 도 4에 도시된 것과 같은 프로파일링 모드를 사용하여 얻어진 도 3의 예에서 카운터들(36)의 값들일 수 있다. 정적 분기 예측 모드 중에, 지정된 어플리케이션이 실행을 개시하면, 운영체계 또는 어플리케이션의 스케줄링을 관리하는 다른 관리 프로세스가 이 특정한 어플리케이션에 대해 이전에 유도되었던 분기 예측 상태값들의 적절한 세트를 사용하여 분기 예측 상태 스토리지(32)를 프로그래밍한다. 따라서, 어플리케이션으로부터 어플리케이션 B로의 전환시에, 운영체계 또는 다른 감시 소프트웨어가 분기 예측 상태 스토리지를 재프로그래밍하여, 새로운 어플리케이션 B에 대한 이전에 설정된 정적값들을 로드할 수도 있다. 그후, 다시 어플리케이션 A로의 전환시에, 마찬가지로 분기 예측 상태 스토리지(32)가 도 5에 나타낸 것과 같이 다시 재프로그래밍된다. 그러나, 프로그램 값들이 설정되면, 정적 분기 예측 모드중에, 이 어플리케이션의 실행된 분기들에 대해 실행 스테이지(12)에 의해 결정된 실제 분기 결과들(39)에 근거하여 이 분기 예측 상태의 추가적인 갱신이 행해지지 않는다. 이것은, 지정된 소프트웨어를 실행할 때 결정론적 응답 대기시간이 중요한 안전이 중요하거나 실시간의 응용분야에 매우 유용할 수 있다.
따라서, 요약하면, 코드 프로파일링에 근거하여 프로그래밍되어 결정론적 거동을 유지하면서 최상의 성능을 제공하는 정적 분기 예측기가 제공된다. 코드 프로파일링은 소프트웨어/시스템 개발중에 장치 그 자체에 의해 행해질 수 있으며, 필드에서의 정규 동작중에 잠긴다. 더구나, 일부 예에서, 정적 예측 함수는 작업당 기준으로 조정될 수 있다.
결정론에 관심을 갖는 시장에서는, 동적 분기 예측이 결정론의 반대인 성능의 이해하기 곤란한 다수의 지터를 도입하기 때문에 정적 분기 예측이 채용될 수도 있다. 정적 예측의 문제점은, 매우 열악한 예측 정밀도를 제공하는 것으로, 이것은 더 열악한 성능을 의미한다. 정적 예측은 보통 유연하지 않으며, 전통적으로 순방향 분기(양의 오프셋)를 분기를 타지 않는 것으로 취급하고 역방향 분기(음의 오프셋)를 분기를 타는 것으로 취급한다. 이 정적 예측 함수는 다음과 같다: prediction(offset) = offset < 0 ? TAKEN : NOT_TAKEN. 이것은 단일의 변수인 분기 타겟 오프셋을 사용한다.
이와 달리, 전술한 도 2 및 도 3의 예에서는, 정적 예측을 하는데 사용되는 변수들의 수가 확장되고, 예측 함수가 하드웨어로 프로그래밍 가능해진다. 예를 들어, 통상적인 명령 세트 아키텍처에서는, 비교적 적은 수의 조건부 분기 옵코드가 존재하며, 이들의 오프셋의 부호와 분기들의 전형적인 분기를 타는 것 사이의 관계가 다양한 옵코드들에 대해 다르다는 것이 관측될 수 있다. 일부 옵코드는 보통 양의 오프셋에서는 분기를 타고 음의 오프셋에서는 분기를 타지 않는 반면에, 다른 옵코드들은 반대의 거동을 나타낸다. 일부 옵코드는 보통 그들의 오프셋에 무관하게 분기를 타거나 타지 않는다, 따라서, 상기한 정적 예측 함수는 다수의 분기 유형에 잘 들어맞지 않는다. 오프셋 이외에 옵코드를 고려하도록 정적 예측을 확장함으로써, 더 양호한 성능이 달성될 수 있다.
일 실시예에서, 옵코드 당 2 비트, 즉 옵코드의 양의 오프셋에 대해 정적 예측이 분기를 타는지 여부를 판정하는 1 비트와, 음의 오프셋에 대해 정적 예측이 분기를 타는지 여부를 판정하는 또 다른 비트를 사용하여 이것이 프로그래밍 가능하게 될 수 있다. 이들 비트의 최상의 값을 결정하기 위해, 코드가 프로파일링될 수 있다. 프로그래밍 가능한 예측 테이블은, 실제로 옵코드 유형과, 오프셋이 양인지 또는 음인지 나타내는 비트에 의해 색인이 붙여지는 2차원 어레이이다. 이 테이블은, 다음과 같이 예측이 분기를 타는지 또는 아닌지 나타내는 비트들을 기억한다: bit prediction_table[opcode][bit].
그후, 정적 예측 함수는 다음과 같이 된다:
prediction(offset,opcode,prediction_table[][])=prediction_table[opcode][offset<0]
예측 테이블이 고정되면, 이것은 결정론적 정적 예측이 된다.
또 다른 확장은, 예측 테이블에서 옵코드 당 2비트를 사용하는 것 대신에, 도 3에 도시된 것과 같이 옵코드 당 2개의 N비트 포화 카운터를 사용하는 것이다. 한 개의 카운터는 양의 오프셋을 취급하고 나머지는 음의 오프셋을 취급한다. 이들 카운터는, 특권을 갖는 소프트웨어에 의해 프로그래밍 가능한 레지스터들에 기억되고, 추가적인 프로그래밍 레지스터가 시스템이 프로파일링 모드에 있는지 또는 결정론적 모드에 있는지 제어한다. 이에 딸, 예측 테이블은 다음과 같이 정의된다: bit[N-1:0] prediction_table[opcode][bit].
결정론적이 될 필요가 있는 시스템 소프트웨어를 작성할 때, 개발자는 프로파일링 모드에서 소프트웨어를 실행한다. 이 모드에서는, 다음과 같은 알고리즘에 따라 예측 테이블 내부의 각각의 카운터를 자동으로 증분하고 감분한다:
1. 리셋시에, 모든 카운터가 제로이다.
2. 분기를 타는 것으로 알려질 때, 그것의 옵코드 및 오프셋 부호(즉, prediction_table[opcode][offset<0])에 대한 카운터가 프로세서 하드웨어에 의해 증분(포화)된다.
3. 분기를 타지 않는 것으로 해결되면, 그것의 옵코드 및 오프셋 부호에 대한 카운터가 프로세서 하드웨어에 의해 감분(포화)된다.
4. 예측이 행해질 때, 이 예측은 필요한 옵코드와 오프셋에 대해 색인이 붙여진 카운터가 임계값보다 큰지 또는 작은지에 근거하여 행해진다(예를 들어, 임계값이 제로이면, 예측이 색인이 붙여진 카운터의 최상위 비트에 근거할 수 있다).
프로파일링 모드에서는, 카운터가 프로그램의 실행중에 변동하기 때문에, 예측기가 더 이상 정적이 아니다. 그러나, 프로그램의 종료시, 카운터들이 충분히 폭이 크면, 카운터들이 이 프로그램에 대한 분기들의 평균 거동에 근거하는 값에 도달하게 된다. 개발자들은 이들 prediction_table[][] 값을 다시 판독하여 소프트웨어가 결정론적 모드에서 필드에서 실행될 때 사용할 최상의 고정값을 결정할 수 있다. 다양한 어플리케이션들이 서로 다른 전형적인 분기 거동을 표시할 수도 있으므로, 이것을 어플리케이션마다 반복할 수 있다.
작업마다 정적 예측 함수에 대한 바람직한 파라미터들을 얻기 위한 메카니즘을 사용하여, 장치가 필드에서 실행되고 있을 때, 시스템이 자동으로 정적 예측기를 작업마다 바람직한 분기 상태로 프로그래밍할 수 있다. 이것은 (프로파일링 모드에서 실행함으로써 결정되는) 지정된 어플리케이션에 대한 바람직한 예측 테이블 값들을 소프트웨어로 인코드하여 달성될 수 있으며, 이것은 화상의 개시시에 리터럴 풀(literal pool)을 사용하거나, 다른 방식으로 소스 코드로 인코딩함으로써 행해질 수도 있다.
운영체계는, 결정론적(정적 분기 예측) 모드에서 실행되도록 프로그래밍될 수 있다. 결정론적 모드에서는, 프로세서가 prediction_table[][] 카운터들을 자동으로 증분/감분하지 않는다. 특권을 갖는 소프트웨어만 명시적인 기록을 통해 예측 테이블을 수정할 수 있게 된다. 그러나, 결정론적 모드에서는, 정적 예측 함수가 최종 저의와 같다. 결정론적 모드에서는, 새로운 작업의 개시시에, OS가 작업 화상으로부터 얻어진 작업에 대한 최적값들로 prediction_table[][]을 기록할 수 있다. 이에 따라, 각각의 개별적인 작업에 대한 정적 예측 함수가 이 작업에 대해 최적값들인 것으로 결정된 파라미터들을 사용하게 된다.
이것은 1개의 사이즈가 모든 함수에 들어맞는 정적 예측 함수보다 훨씬 더 큰 유연성과 훨씬 더 양호한 성능을 제공한다.
이때, 프로파일링 모드에서 실행될 때, 예측기는 사실상 매우 경량의 동적 예측이다. 동적 예측 성황에서 사용될 수 있는 어플리케이션도 존재한다. 전술한 예측기는 매우 작으며, 예를 들어, 4비트 카운터를 사용하는 일례에서는 160비트만큼 적게 사용한다. 동적 예측기로서 효율적으로 사용될 때, 일부 차량 벤치마크에 대해, 이것은 다수의 더 많은 비트들을 사용하여 훨씬 더 복잡한 예측기의 성능을 실제로 능가할 수 있다. 따라서, 이와 같은 동적 예측기를 그것의 정밀도를 증가시키기 위한 더 큰 예측기의 구성요소로서 사용하는 것도 가능하다.
따라서, 도 2 또는 도 3의 실시예에서 나타낸 옵코드 색인화 테이블(32)은 동적 분기 예측을 이용하는 더 큰 예측기의 일부로 사용될 수도 있다. 도 6은, 옵코드 색인화 테이블이 퍼셉트론 예측기(50) 내부에 설치된 다수의 예측 테이블들(60) 중에서 한 개인 예를 나타낸 것이다. 퍼셉트론 예측에서는, 각각의 테이블들 60, 32가 예측할 분기의 특성 또는 실행되고 있는 프로그램의 거동에 근거하여 색인이 붙여진다. 예를 들어, 도 6에서, 테이블 T0는 예측되고 있는 현재 명령의 명령 어드레스를 나타내는 프로그램 카운터에 근거하여 색인이 붙여지고, 테이블 T1 및 T2는 가장 최근의 X개의 분기들(이때, X는 정수이다)의 분기를 타는 것/분기를 타지 않는 것의 결과를 추적하는 전역 이력 레지스터의 각각의 부분들 GHR0, GHR1과 프로그램 카운터의 결합에 근거하여 색인이 붙여진다. 이때, 전역 이력 레지스터(GHR)는 프로그램 내부에서 가장 최근에 보인 분기들의 분기를 타는 것 또는 분기를 타지 않는 것의 결과를 추적하며, 이들 분기는 임의의 명령 어드레스에서의 분기이며, 현재의 프로그램 카운터와 관련된 분기를 실행하는 차장 최근의 X개의 인스턴스들이 아니다. 이때, 예측 테이블들 T0 내지 T2는 퍼셉트론에 대한 테이블들이 정의될 수 있는 방식의 한가지 예에 지나지 않는다. 옵코드 색인화 테이블(32)은 다른 예측 테이블들 T0 내지 T2와 함께 네 번째 예측 테이블 T3로서 설치된다. 각각의 테이블은 대응하는 속성(프로그램 카운터, 프로그램 카운터와 결합된 GHR0, 프로그램 카운터와 결합된 GHR1, 또는 순방향/역방향 분기 표시(38)와 결합된 옵코드(35))에 근거하여 색인이 붙여진 신뢰도 값들의 세트를 제공한다. 이들 신뢰도 값은 동적 분기 예측 모드에서 코드의 처리중에 실행 스테이지(12)에서 실행된 해결된 분기들의 결로부터 학습된다. 지정된 색인에 대해 각각의 테이블에 의해 출력된 신뢰도 값들(62)은 가산회로(64)에 의해 가산되어, 현재의 분기에 대한 전체 예측 신뢰도를 제공한다. 그후, 현재의 분기에 대한 예측 신뢰도가를 임계값과 비교하여, 임계값보다 큰 경우에는, 분기를 타는 것으로 예측되고, 임계값보다 작은 경우에는, 분기를 타지 않는 것으로 예측된다. 따라서, 옵코드 색인화 테이블(32)은 더 큰 퍼셉트론 예측기의 구성요소의 일부로서 사용되어, 그것의 정밀도를 증가시킬 수 있다.
도 7은 도 2 또는 도 3의 옵코드 색인화 테이블(32)이 다수의 TAGE 예측 테이블들(70)에 의해 행해진 예측을 보완하기 위한 고장대체 예측 테이블로서 사용되는 TAGE 분기 예측기의 두 번째 예를 나타낸 것이다. 본 실시예에서, TAGE 분기 예측기는 예측하려는 분기의 명령 어드레스를 나타내는 프로그램 카운터와 전술한 전역 이력 레지스터(GHR)의 일부의 함수로서 유도된 색인에 근거하여 선택되는 예측 신뢰도들을 제공하는 예측 테이블들(70)의 세트를 사용한다. 각각의 TAGE 테이블(70)은 GHR로부터의 이력 정보의 연속적으로 더 큰 길이들을 사용하는데, 예를 들어, 테이블 T0는 프로그램 카운터와 이력의 첫 번째 부분 GHR0(가장 최근의 분기 이력에 대응하는 부분)의 결합에 근거하여 테이블에 색인이 붙여진다. 테이블 T1은 프로그램 카운터, 이력 부분 GHR0와, GHR0보다 덜 최근의 분기들에 대응하는 전력 이력 레지스터의 또 다른 부분 GHR1의 결합에 근거하여 색인이 붙여지며, 테이블 T2는 테이블 T1에 대하 사용된 GHR0 및 GHR1 이외에 전력 이력 레지스터의 추가적인 부분 GHR2를 고려하여 더 긴 이력에 근거하여 색인이 붙여진다. TAGE 예측기는 각각의 TAGE 테이블들에 의해 행해진 예측들 사이에서 선택하는 선택기(72)를 가지므로, 전력 이력 레지스터로부터 가장 긴 시퀀스의 이력에 대한 적중(hit)을 발생하는 테이블이 TAGE 테이블로부터 전체 예측으로서 그것의 예측 출력을 갖게 된다. 예를 들어, 적중을 발생하는 유일한 테이블이 T0인 경우에는, T0에 의해 행해진 예측이 선택기(72)에 의해 선택된다. 그러나, 테이블 T1이 적중을 발생하면, 테이블 T1이 더 긴 길이의 분기 이력을 고려하였으므로 정밀할 가능성이 더 크기 때문에, 태이블 T1의 예측이 테이블 T0의 예측에 우선하여 선택될 것이다. 따라서, TAGE 접근방법은 증가된 예측 정밀도와 증가된 적중률 사이의 타협을 허용하지만, 때때로 TAGE 테이블들 중에서 어느 것도 적중을 발생하지 않으며, 이 경우에는 고장대체 테이블(32)에 의해 사용된 고정대체 예측을 사용한다. 전술한 옵코드 색인화 테이블(32)은, TAGE 테이블이 충분한 신뢰도를 발생하지 않을 때 사용될 수도 있는 고장대체 예측을 제공하는 비교적 저비용의 방법일 수 있다.
물론, 도 6 및 도 7의 예측기는 일례에 지나지 않으며, 일반적으로 모든 분기 예측기(30)가 분기 예측기의 구성요소로서 옵코드 색인화 테이블(32)을 포함할 수도 있다. 일부 경우에, 이와 같은 분기 예측기는, 테이블 32 내부의 옵코드의 예측 상태가 실행 분기 명령의 결과에 근거하여 계속해서 학습되는 동적 예측 모드를 사용해도 된다. 그러나, 도 5에 도시된 것과 같은 다른 실시예에서는, 예측기가 정적 분기 예측 모드를 사용하여 결정론을 제공함으로써, 옵코드 색인화 테이블의 값들이 프로그래밍에 의해 고정되는 경우, 실제의 분기 결과에 근거한 이 예측 상태의 후속 갱신이 존재하지 않으므로, 결정론적인 응답 시간을 확보한다.
본 발명에서, 단어 "하도록 구성된"은 장치의 구성요소가 정의된 동작을 행할 수 있는 구성을 갖는다는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 배치 또는 상호접속 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 갖거나, 프로세서 또는 기타의 처리장치가 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은 이 장치의 구성요소가 정의된 동작을 제공하기 위해 어떤 식으로 변경될 필요가 있는 것을 시사하는 것은 아니다.
첨부도면을 참조하여 본 발명의 예시적인 실시예들을 상세히 설명하였지만, 본 발명은 이들 실시예에 한정되지 않으며, 첨부된 청구범위의 보호범위 및 사상을 벗어나지 않으면서 본 발명이 속한 기술분야의 당업자에 의해 다양한 변경, 부가 및 변화가 행해질 수 있다는 것은 자명하다. 예를 들면, 종속항들의 특징들의 다양한 조합이 독립항들의 특징과 행해질 수도 있다.

Claims (20)

  1. 명령들에 응답하여 데이터 처리를 행하는 처리회로와,
    지정된 분기 명령의 적어도 한 개의 특성에 근거하여 색인이 붙여진 분기 예측 상태 정보에 근거하여, 분기를 타는 것(taken)과 분기를 타지 않은 것(non-taken) 중에서 한가지로서 상기 지정된 분기 명령에 대한 분기 결과를 예측하는 분기 예측기를 구비하고,
    정적 분기 예측 동작 모드에서는, 상기 분기 예측기는, 정적 분기 예측 모드에 있는 동안 상기 처리회로에 의해 실행되는 분기 명령들의 실제 분기 결과에 무관하게 설정된 상기 분기 예측 상태 정보의 정적값들에 근거하여 분기 결과를 예측하도록 구성되고.
    상기 분기 예측 상태 정보의 상기 정적값들은 프로그래밍 가능한 장치.
  2. 제 1항에 있어서,
    상기 처리회로는, 상기 처리회로에 의해 실행된 분기 예측 상태 프로그래밍 명령에 따라 상기 분기 예측 상태 정보의 적어도 서브셋을 프로그래밍하도록 구성된 장치.
  3. 제 2항에 있어서,
    상기 분기 예측 상태 프로그래밍 명령은,
    시스템 레지스터 갱신 명령과,
    상기 분기 예측 상태 정보의 상기 적어도 서브셋을 기억하는 레지스터에 매핑된 어드레스를 대상 어드레스로서 지정하는 기억 명령 중에서 한가지를 포함하는 장치.
  4. 제 2항에 있어서,
    상기 처리회로는 복수의 특권 레벨들 중에서 한 개에서 명령들을 실행하도록 구성되고, 상기 분기 예측 상태 프로그래밍 명령이 임계 특권 레벨보다 특권을 덜 갖는 특권 레벨에서 실행될 때, 상기 처리회로는 예외를 기동하도록 구성된 장치.
  5. 제 1항에 있어서,
    프로파일링 동작 모드에서, 상기 분기 예측기는 상기 프로파일링 모드에 있는 동안 실행되는 분기 명령들의 실제 분기 결과에 근거하여 상기 분기 예측 상태 정보를 학습하도록 구성된 장치.
  6. 제 5항에 있어서,
    상기 분기 예측 상태 정보는 상기 지정된 분기 명령의 적어도 한 개에 특성에 근거하여 색인이 붙여진 포화 카운터들의 세트를 포함하는 장치.
  7. 제 5항에 있어서,
    상기 처리회로는, 상기 처리회로에 의해 실행된 분기 예측 상태 추출 명령에 따라, 상기 프로파일링 모드 중에 학습된 상기 분기 예측 상태 정보의 적어도 서브셋의 현재 값을 추출하도록 구성된 장치.
  8. 제 7항에 있어서,
    상기 분기 예측 상태 추출 명령은,
    시스템 레지스터 판독 명령과,
    상기 분기 예측 상태 정보의 상기 적어도 서브셋을 기억하는 레지스터에 매핑된 어드레스를 대상 어드레스로서 지정하는 로드 명령 중에서 한가지를 포함하는 장치.
  9. 제 7항에 있어서,
    상기 처리회로는 복수의 특권 레벨들 중에서 한 개에서 명령들을 실행하도록 구성되고, 상기 분기 예측 상태 추출 명령이 임계 특권 레벨보다 특권을 덜 갖는 특권 레벨에서 실행될 때, 상기 처리회로는 예외를 기동하도록 구성된 장치.
  10. 제 1항에 있어서,
    상기 지정된 분기 명령의 상기 적어도 한 개의 특성은 상기 지정된 분기 명령의 옵코드에서 유도된 정보를 포함하는 장치.
  11. 제 1항에 있어서,
    상기 지정된 분기 명령의 상기 적어도 한 개의 특성은 상기 지정된 분기 명령이 순방향 분기인지 또는 역방향 분기인지의 표시를 포함하는 장치.
  12. 제 1항에 있어서,
    상기 지정된 분기 명령의 상기 적어도 한 개의 특성은 상기 지정된 분기 명령에 대한 분기 오프셋의 사이즈를 나타내는 정보를 포함하는 장치.
  13. 제 1항에 있어서,
    상기 적어도 한 개의 특성은 상기 지정된 분기 명령의 명령 어드레스에 무관한 장치.
  14. 지정된 분기 명령의 적어도 한 개의 특성에 근거하여 색인이 붙여진 분기 예측 상태 정보에 근거하여, 분기를 타는 것과 분기를 타지 않은 것 중에서 한가지로서 상기 지정된 분기 명령에 대한 분기 결과를 예측하는 단계를 포함하고,
    정적 분기 예측 동작 모드에서는, 정적 분기 예측 모드에 있는 동안 실행되는 분기 명령들의 실제 분기 결과에 무관하게 설정된 상기 분기 예측 상태 정보의 정적값들에 근거하여 분기 결과가 예측되고,
    상기 분기 예측 상태 정보의 상기 정적값들은 프로그래밍 가능한 데이터 처리장치의 분기 예측방법.
  15. 명령들에 응답하여 데이터 처리를 행하는 처리회로와,
    지정된 분기 명령의 적어도 한 개의 특성에 근거하여 색인이 붙여진 분기 예측 상태 정보의 옵코드 색인화(opcode-indexed) 테이블에 근거하여, 분기를 타는 것과 분기를 타지 않은 것 중에서 한가지로서 상기 지정된 분기 명령에 대한 분기 결과를 예측하는 분기 예측기를 구비하고,
    상기 적어도 한 개의 특성은 상기 지정된 분기 명령의 옵코드로부터 유도된 정보를 포함하는 장치.
  16. 제 15항에 있어서,
    상기 적어도 한 개의 특성은 상기 지정된 분기 명령의 명령 어드레스에 무관한 장치.
  17. 제 15항에 있어서,
    상기 적어도 한 개의 특성은 상기 지정된 분기 명령이 순방향 분기인지 또는 역방향 분기인지의 표시를 더 포함하는 장치.
  18. 제 15항에 있어서,
    상기 분기 예측기는, 상기 옵코드 색인화 테이블과, 상기 지정된 분기 명령의 명령 어드레스와 이전에 실행된 분기들에 대한 이전의 분기 결과들의 이력 중에서 적어도 한가지로부터 유도된 정보에 근거하여 색인이 붙여진 적어도 한 개의 또 다른 테이블을 포함하는 분기 예측 상태 정보의 복수의 테이블들에 근거하여 분기 결과를 예측하도록 구성된 장치.
  19. 제 15항에 있어서,
    상기 분기 예측기는, 동적 분기 예측 모드에 있는 동안 실행되는 분기 명령들의 실제 분기 결과들에 근거하여 상기 옵코드 색인화 테이블을 학습하도록 구성된 장치.
  20. 제 16항에 있어서,
    상기 분기 예측기는, 정적 분기 예측 모드에 있는 동안 실행되는 분기 명령들의 실제 분기 결과들에 무관하게 설정된 상기 옵코드 색인화 테이블의 정적값들에 근거하여 분기 결과를 예측하도록 구성된 장치.
KR1020200001902A 2019-01-18 2020-01-07 분기 예측기 KR20200090103A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/251,539 US10963260B2 (en) 2019-01-18 2019-01-18 Branch predictor
US16/251,539 2019-01-18

Publications (1)

Publication Number Publication Date
KR20200090103A true KR20200090103A (ko) 2020-07-28

Family

ID=71608984

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200001902A KR20200090103A (ko) 2019-01-18 2020-01-07 분기 예측기

Country Status (3)

Country Link
US (1) US10963260B2 (ko)
JP (1) JP7510253B2 (ko)
KR (1) KR20200090103A (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11755327B2 (en) * 2020-03-02 2023-09-12 Microsoft Technology Licensing, Llc Delivering immediate values by using program counter (PC)-relative load instructions to fetch literal data in processor-based devices
US12112178B2 (en) * 2020-12-26 2024-10-08 Intel Corporation Memory-independent and scalable state component initialization for a processor

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0675769A (ja) * 1992-05-26 1994-03-18 Nec Corp 分岐予測機構
JPH06124206A (ja) * 1992-10-13 1994-05-06 Oki Electric Ind Co Ltd 分岐命令予測処理装置及びその処理方法
US7523298B2 (en) * 2006-05-04 2009-04-21 International Business Machines Corporation Polymorphic branch predictor and method with selectable mode of prediction
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

Also Published As

Publication number Publication date
US20200233672A1 (en) 2020-07-23
JP7510253B2 (ja) 2024-07-03
JP2020119504A (ja) 2020-08-06
US10963260B2 (en) 2021-03-30

Similar Documents

Publication Publication Date Title
JP4511461B2 (ja) データ処理システムでの処理動作マスキング
KR100395763B1 (ko) 멀티프로세싱 마이크로프로세서에 적합한 분기 예측기
US7644258B2 (en) Hybrid branch predictor using component predictors each having confidence and override signals
US20130097408A1 (en) Conditional compare instruction
US10664280B2 (en) Fetch ahead branch target buffer
US8572358B2 (en) Meta predictor restoration upon detecting misprediction
US11599361B2 (en) Flushing a fetch queue using predecode circuitry and prediction information
TWI836108B (zh) 資料結構放棄
KR20200090103A (ko) 분기 예측기
US20200050459A1 (en) Call-path-indexed branch prediction structure
JP3486690B2 (ja) パイプライン方式プロセッサ
EP4020167A1 (en) Accessing a branch target buffer based on branch instruction information
US10324727B2 (en) Memory dependence prediction
IE940854A1 (en) Data processor with branch prediction and method of¹operation
US10949208B2 (en) System, apparatus and method for context-based override of history-based branch predictions
JP2006053830A (ja) 分岐予測装置および分岐予測方法
US20230195467A1 (en) Control flow prediction
KR20220113410A (ko) 페치 그룹들의 시퀀스들에 대한 분기 예측 유닛에의 액세스 제어
CN111989674A (zh) 维持推测的状态
JP2010282651A (ja) データ処理システムにおける処理動作マスキング