KR20210018415A - 예측 실패 복구에 대한 레이턴시를 줄이기 위한 이차적 분기 예측 저장 - Google Patents

예측 실패 복구에 대한 레이턴시를 줄이기 위한 이차적 분기 예측 저장 Download PDF

Info

Publication number
KR20210018415A
KR20210018415A KR1020217000083A KR20217000083A KR20210018415A KR 20210018415 A KR20210018415 A KR 20210018415A KR 1020217000083 A KR1020217000083 A KR 1020217000083A KR 20217000083 A KR20217000083 A KR 20217000083A KR 20210018415 A KR20210018415 A KR 20210018415A
Authority
KR
South Korea
Prior art keywords
branch
block
prediction
instruction
branch instruction
Prior art date
Application number
KR1020217000083A
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 KR20210018415A publication Critical patent/KR20210018415A/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/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/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/262Arrangements for next microinstruction selection
    • G06F9/264Microinstruction selection based on results of processing
    • 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
    • G06F9/30058Conditional branch instructions
    • 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
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

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

분기 예측기는 제1 분기 인스트럭션들의 제1 결과를 예측한다. 페치 로직은 제1 결과에 의해 표시된 제1 경로를 따라 추론적 실행을 위한 인스트럭션들을 페치한다. 제1 예측 결과가 취득되는 것에 응답하여 제1 블록의 나머지를 나타내는 정보가 저장된다. 제1 분기 인스트럭션이 수행되지 않는 것에 응답하여, 분기 예측기는 나머지 블록에 기초하여 재시작된다. 일부 경우에, 제1 블록으로부터의 추론적 경로들을 따라 제2 블록들에 대응하는 엔트리들은 제1 블록의 주소를 분기 예측 구조에 대한 인덱스로 사용하여 액세스된다. 제2 블록들에서 분기 명령들의 결과들은 분기 조건부 로직의 해당 인스턴스 세트를 사용하여 동시에 예측되며, 예측 결과들은 나머지 블록과 조합하여 사용되어 예측 실패에 대한 응답으로 분기 예측기를 재시작한다.

Description

예측 오류 복구의 지연을 단축하기 위해 부수적 분기 예측을 저장
처리 유닛들은 분기 예측을 사용하여 분기 인스트럭션의 결과를 추측하여 처리 유닛이 분기 인스트럭션을 평가하기 전에 예측 분기를 따라 후속 인스트럭션들을 추론적으로 실행하기 시작할 수 있도록 한다. 처리 유닛은 분기 예측 구조의 정보를 사용하여 분기 인스트럭션의 결과를 예측한다. 예를 들어, 처리 유닛은 if-then-else문 및 case 문과 같은 소프트웨어 구성들을 구현하는 조건부 분기 인스트럭션들의 결과를 예측할 수 있다. 분기 예측 구조들의 예들은 프로그램의 흐름을 임의의 인스트럭션으로 리다이렉트하는 간접 분기 예측기들, 처리 유닛에서 실행되는 서브루틴들에 대한 리턴 주소들을 포함하는 리턴 주소 스택, 조건부 분기의 (수행되거나 수행되지 않은) 방향을 예측하는 조건부 분기 예측기들, 및 분기 인스트럭션들의 위치, 유형 및 타겟 주소들을 예측하는 정보를 포함하는 분기 타겟 버퍼를 포함한다.
분기 예측 구조들의 일부 구현예들은 예측 알고리즘의 일부로서 처리 유닛에서 이전에 실행되었거나 현재 실행중인 프로세스들에 의해 실행된 분기 인스트럭션들의 결과들의 분기 이력을 사용한다. 예를 들어, 분기 인스트력션이 이전에 프로그램 흐름을 제1 주소로 시간의 90 %로 보내고 제2 주소로 시간의 10 %로 보낸 경우, 분기 예측 구조의 해당 엔트리는 분기 인스트럭션이 프로그램 흐름을 제1 주소로 보낼 것으로 예측할 것이며, 이에 따라 프로세스가 분기 인스트럭션의 평가를 기다리지 않고 제1 주소에서 시작하는 분기를 따라 인스트럭션들을 추론적으로 실행하도록 할 수 있다. 분기 인스트럭션이 평가될 때 예측 분기가 잘못된 것으로 판명되면, 잘못 예측된 분기에 따른 추론적 실행이 중단되고 처리 유닛의 상태가 분기 인스트럭션의 상태로 롤백되어 올바른 분기에 따른 실행을 시작한다. 보다 구체적으로, 분기 예측 유닛 및 페치 유닛 둘 다 분기의 올바른 타겟으로부터 처리되거나, 또는 분기가 수행되지 않은 경우 분기 이후의 주소로부터 처리되도록 롤백된다.
본 개시는 첨부된 도면들을 참조함으로써 더 잘 이해될 수 있으며, 그 많은 특징들 및 이점들이 당업자에게 명백해질 수 있다. 서로 다른 도면들에서 동일한 참조 부호들의 사용은 유사하거나 동일한 아이템들을 나타낸다.
도 1은 일부 실시예들에 따른 처리 시스템의 블록도이다.
도 2는 일부 실시예들에 따른 프로세서 코어를 포함하는 처리 시스템의 일부의 블록도이다.
도 3은 일부 실시예들에 따른 예측 블록에서 분기 인스트럭션들의 서로 다른 가능한 결과들에 대응하는 예측 블록 및 블록 세트의 블록도이다.
도 4는 일부 실시예들에 따른 분기 타겟 버퍼 및 분기 예측 구조를 포함하는 처리 시스템의 일부의 블록도이다.
도 5는 일부 실시예들에 따른 분기 예측 복구에 대한 레이턴시를 감소시키기 위해 저장된 예측 정보를 사용하여 분기 예측 실패로부터 복구하는 방법의 흐름도이다.
도 6은 일부 실시예들에 따른 "사전 예측" 분기 예측을 구현하는 처리 시스템의 일부의 블록도이다.
도 7은 일부 실시예들에 따른 "사전 예측" 분기 예측에 대한 분기 예측 복구에 대한 레이턴시를 감소시키기 위해 저장된 예측 정보를 사용하여 분기 예측 실패로부터 복구하는 방법의 제1 부분의 흐름도이다.
도 8은 일부 실시예들에 따른 "사전 예측" 분기 예측에 대한 분기 예측 복구에 대한 레이턴시를 감소시키기 위해 저장된 예측 정보를 사용하여 분기 예측 실패로부터 복구하는 방법의 제2 부분의 흐름도이다.
처리 유닛들의 일부 실시예들은 동시에 다수의 인스트럭션들을 실행하는데, 예를 들어 처리 유닛은 사이클 당 4 내지 8개의 인스트럭션들을 실행할 수 있다. 따라서, 분기 예측기는 분기 인스트럭션들을 포함하는 인스트럭션 블록(본원에서는 이를 예측 블록이라고 함) 내에서 다수의 분기 인스트럭션들의 결과들을 동시에 예측한다. 예측 블록은 이전 분기 인스트럭션의 경계 주소 또는 타겟 주소와 같은 시작 주소에서 시작한다. 예측 블록은 후속 경계 주소(예를 들어, 64 바이트 캐시 라인 경계에 대응하는 주소)와 같은 종료 주소 또는 예측 블록에서 처음 수행된 분기 인스트럭션의 주소에서 끝난다. 분기 예측기가 두 분기 인스트럭션들의 결과들을 동시에 예측하도록 구성된 경우, 분기 예측기는 예측 블록의 주소를 두 분기들의 주소들, 두 분기들의 유형들, 수행된 분기들의 타겟 주소들, 및 임의의 추가 분기 인스트럭션들이 예측 블록에 있는지 여부에 대한 표시를 저장하는 예측 구조(예컨대, 분기 타겟 버퍼, BTB)로의 인덱스로 사용한다.
분기 예측기는 두 개의 분기 인스트럭션들의 결과들에 의해 예측된 경로를 따라 인스트럭션들을 페치하도록 페치 로직에 지시한다. 예를 들어, 제1 분기 인스트럭션이 수행되지 않으면, 분기 예측기는 프로그램 흐름이 제2 분기 인스트럭션으로 순차적으로 진행되도록 제2 분기 명령을 포함하는 경로를 따라 인스트럭션들을 페치하도록 페치 로직에 지시한다. 그런 다음, 분기 예측기는 제2 분기 인스트럭션의 예측된 결과에 기초하여 후속 인스트럭션들을 페치하도록 페치 로직에 지시한다. 그러나, 분기 예측기가 제1 분기 인스트럭션들이 수행되었다고 예측하면, 프로그램은 제2 분기 인스트럭션으로 흐르지 않고 제2 분기 인스트럭션에 대해 생성된 예측 정보는 폐기된다. 일부 경우에, 분기 예측기는 제1 분기 인스트럭션의 결과를 잘못 예측하여, 처리 유닛이 분기 인스트럭션의 상태로 롤백한 다음 제2 분기 인스트럭션을 포함하는 순차적 경로를 따라 인스트럭션들을 실행하게 한다. 그러나, 제2 분기 예측 정보는 제2 분기 인스트럭션의 예측된 결과를 다시 계산해야 하는 분기 예측기에서 더 이상 사용할 수 없다. 제2 분기 인스트럭션의 예측된 결과를 다시 계산하는 것은 분기 예측 파이프라인의 레이턴시를 증가시킨다.
"사전 예측" 기술들에서, 제1 블록의 주소는 분기 예측 구조 및 분기 예측기 저장소에서 정보에 액세스하기위한 인덱스로 사용된다. 정보는 제1 블록에서 분기 인스트럭션들의 타겟들인 잠재적인 후속 블록 세트에 대응하는 엔트리 세트를 포함한다. 분기 예측기가 제1 블록에서 분기 인스트럭션들의 결과를 예측하는 것에 응답하여 상기 세트로부터 한 엔트리 서브셋이 선택된다. 예측된 결과는 제2 블록의 분기 인스트럭션들에 대한 분기 예측 정보를 포함하는 엔트리 브셋에 대응하는 분기 인스트럭션들을 포함하는 제2 블록을 나타낸다. 분기 예측기는 제1 블록에서 결과가 정확하게 예측되었는지 여부의 결정 전에 엔트리 서브셋에 있는 정보를 사용하여 제2 블록에서 분기 인스트럭션들의 결과들을 예측한다. 제2 블록의 예측 주소는 제2 블록의 분기 인스트럭션들 중 하나의 결과로 예측된 주소에서 제3 블록의 분기 인스트럭션들의 결과들을 예측하는 데 사용되는 정보에 대한 인덱스로 사용된다. 제1 블록의 분기 결과들 또는 타겟들이 잘못 예측된 경우, 처리 유닛은 제1 블록의 잘못 예측된 분기 인스트럭션의 끝에 있는 상태로 롤백되고 올바른 경로를 따라 실행을 시작한다. 분기 인스트럭션이 "수행되지 않았고" 실제 분기 결과가 "취득되었다"고 잘못된 예측된 경우, 올바른 경로는 제1 블록의 분기 인스트럭션들의 타겟들이 되는 잠재적인 후속 블록 세트 중 다른 하나에서 시작된다. 분기 인스트럭션이 "수행되었고" 실제 분기 결과가 "취득되지 않았다"고 잘못 예측된 경우, 제2 블록으로 이동하기 전에 제1 블록의 나머지 부분이 예측되고 페치된다. 따라서, 제1 블록의 초기 분기 예측이 잘못된 경우, 처리 유닛은 올바른 경로를 기반으로 분기 예측기를 롤백하고 제2 블록의 예측 결과를 재계산해야 할 필요가 있으며, 이는 분기 예측기의 레이턴시를 증가시킨다.
도 1 내지 9는 제1 분기 인스트럭션의 제1 결과 및 제2 분기 인스트럭션의 제2 결과를 동시에 예측함으로써 분기 예측 레이턴시를 감소시키는 기술들을 개시한다. 분기 예측기는 제1 결과에 의해 나타낸 경로를 따라 추론적 실행을 위한 인스트럭션들을 페치하기 시작하도록 페치 로직에 지시한다. 분기 예측기는 또한 본원에서 나머지 블록 예측이라고도 하는 제2 예측 결과를 저장한다. 제2 분기 인스트럭션의 부재 시, 나머지 블록 예측은 후속 메모리 경계까지 나머지 블록에 추가 분기가 없음을 나타내는 정보를 저장한다. 제1 분기 인스트럭션의 제1 결과의 예측 실패에 응답하여, 페치 유닛은 제1 분기의 올바른 타겟에서 재시작되고 분기 예측기는 저장된 제2 예측 결과의 타겟에 기초하여 재시작되며, 이는 제2 분기를 다시 예측하지 않아도 되므로 시간을 절약할 수 있다. 나머지 블록 예측은 분기 예측 파이프라인의 후기 단계에 투입되어 정상적인 메커니즘에 따라 분기 예측을 페치, 디코딩 및 확인하는 데 사용하기 위해 나머지 프로세서 로직에 전달될 수 있다. 게다가, 나머지 블록은 원래 분기 예측을 수행하는 데 사용되는 파이프라인 흐름의 부산물로 생성되고 저장된다. 따라서, 분기 예측 파이프라인은 1차 흐름과 동시에 또는 예측 실패에 응답하여, 분기 예측기가 파이프라인 아래로 추가 흐름을 시작할 필요없이 롤백되고 재시작된다.
일부 실시예들에서, 제1 및 제2 분기 인스트럭션들은 제1 및 제2 분기 인스트럭션들을 동시에 처리하는 분기 예측기의 인스턴스에 의해 처리되는 예측 블록에 있다. 제2 예측 결과를 포함하는 나머지 블록은 제2 분기 인스트럭션을 포함하지 않는 "수행된" 경로에 따른 예측을 나타내는 제1 결과에 응답하여 저장된다. 예측 실패에 응답하여, 분기 예측기는 세 개의 주소들, 즉 (1) 제2 결과가 분기가 수행되었다는 것을 나타내는 경우 제2 분기 인스트럭션의 타겟 주소, (2) 예측 블록에 제3 분기 인스트럭션이 있는 경우 예측 블록의 제2 분기 인스트럭션 다음의 인스트럭션의 주소, 및 (3) 예측 블록에 추가 분기 인스트럭션들이 없는 경우 후속 메모리 경계 중 하나에서 분기 예측을 시작한다. 분기 예측기의 일부 실시예들은 제3 분기 인스트럭션이 예측 블록에 있는지를 나타내는 정보를 저장한다. 페치 유닛은 제1 분기의 올바른 타겟에서 재시작되며, 이는 이 경우에 제1 분기에 대한 순차적인 주소이다.
일부 실시예들에서, 분기 예측기는 제1 블록의 주소를 분기 예측 구조 및 분기 예측기 저장소에서 정보에 액세스하기 위한 인덱스로 사용한다. 정보는 제1 블록의 모든 분기들이 수행되지 않은 것으로 예측되는 경우 잠재적으로 제1 블록 또는 제1 블록을 뒤따르는 블록에서 분기 인스트럭션들의 타겟들이 되는 제2 블록 세트에 대응하는 엔트리 세트를 포함한다. 분기 예측기는 제1 블록의 분기 인스트럭션들의 결과가 제2 블록들 중 하나가 될 것이고 처리 유닛이 예측된 제2 블록에서 인스트럭션들의 실행을 시작한다고 예측한다. 그러나, 예측된 제2 블록의 결과들만을 예측하는 분기 예측기 조건부 로직의 단일 사본 대신, 예측된 제2 블록 및 세트의 대체 제2 블록들에서 분기 인스트럭션들의 결과들을 동시에 예측하기 위해 분기 예측기 조건부 로직의 다수의 사본들이 인스턴스화된다. 제1 블록의 각 잠재적 결과에 대해 하나의 대체 제2 블록이 존재한다. 일부 실시예들에서, 각 블록은 최대 2개의 분기들을 보유하며 제1 블록에 대해 세 가지 가능한 예측 결과들, 즉 (1) 수행된 제1 분기, (2) 수행되지 않은 제1 분기 및 수행된 제2 분기, 또는 (3) 둘 다 수행되지 않은 제1 및 제2 분기들이 있다. 세 개의 가능한 제2 블록들은 세 가지 예측 결과들에 해당한다.
제1 블록에 대한 예측이 이루어지면, 세 개의 가능한 제2 블록들 중 하나가 예측된 제2 블록으로 선택되고 나머지 두 개는 대체 예측들로 간주된다. 분기 예측 구조에 대한 조건부 로직의 다수의 인스턴스들은 제1 블록의 예측 결정 전에 제2 블록 세트에 해당하는 엔트리 세트의 분기 예측 정보를 사용하여 (예측 및 대체) 제2 블록에서 분기 인스트럭션들의 결과들을 예측한다. 예측된 제2 블록을 나타내는 제1 블록의 분기 인스트럭션들의 예측 결과에 응답하여, 예측된 제2 블록의 주소는 제3 블록에 대한 분기 예측기 저장소의 분기 예측 구조에 대한 인덱스로 사용된다. 분기 예측기는 또한 제2 블록에 대한 대체 예측들을 저장한다. 제1 분기의 결과의 예측 실패가 실행 유닛에 의해 발견되는 것에 응답하여, 페치 유닛은 제1 분기의 올바른 타겟에서 재시작되고 분기 예측기는 저장된 대체 제2 블록 예측 결과의 타겟에 기초하여 재시작되며, 이는 나머지 제1 블록 예측 및 제2 블록 예측을 다시 예측하지 않아도 되므로 시간을 절약할 수 있다. 나머지 제1 블록 예측(해당되는 경우) 및 제2 블록 예측은 분기 예측 파이프라인의 후기 단계에 투입되어 정상적인 메커니즘에 따라 분기 예측을 페치, 디코딩 및 확인하는 데 사용하기 위해 나머지 프로세서 로직에 전달될 수 있다. 제1 블록은 예측이 수행되었지만 수행되지 않을 실행 시간에 결정된 경우 나머지 블록 예측을 갖는다.
도 1은 일부 실시예들에 따른 처리 시스템(100)의 블록도이다. 처리 시스템(100)은 동적 랜덤 액세스 메모리(DRAM)와 같은 비일시적 컴퓨터 판독 가능 매체를 사용하여 구현되는 메모리(105) 또는 기타 저장 컴포넌트를 포함하거나 이에 대한 액세스를 갖는다. 그러나, 일부 경우에, 메모리(105)는 정적 랜덤 액세스 메모리(SRAM), 비휘발성 램 등을 포함하는 다른 유형의 메모리를 사용하여 구현된다. 메모리(105)는 프로세싱 시스템(100)에서 구현된 프로세싱 유닛들 외부에서 구현되기 때문에 외부 메모리로 지칭된다. 처리 시스템(100)은 또한 메모리(105)와 같은 처리 시스템(100)에서 구현된 엔티티들 간의 통신을 지원하기 위한 버스(110)를 포함한다. 처리 시스템(100)의 일부 실시예들은 명확성을 위해 도 1에 도시되지 않은 다른 버스들, 브리지들, 스위치들, 라우터들 등을 포함한다.
처리 시스템(100)은 디스플레이(120)에 표시하기 위해 이미지들을 렌더링하는 그래픽 처리 장치(GPU)(115)를 포함한다. 예를 들어, GPU(115)는 디스플레이(120)에 제공되는 픽셀 값들을 생성하기 위해 오브젝트들을 렌더링하며, 이는 픽셀 값들을 사용하여 렌더링된 오브젝트들을 나타내는 이미지를 디스플레이한다. GPU(115)는 인스트럭션들을 동시에 또는 병렬로 실행하는 복수의 프로세서 코어들(121, 122, 123)(본원에서는 "프로세서 코어들(121-123)"로 총칭함)을 구현한다. GPU(115)에 구현된 다수의 프로세서 코어들(121-123)은 설계 선택의 문제이다. GPU(115)의 일부 실시예들은 범용 컴퓨팅에 사용된다. GPU(115)는 메모리(105)에 저장된 프로그램 코드(125)와 같은 인스트럭션들을 실행하며, GPU(115)는 실행된 인스트럭션들의 결과들과 같은 정보를 메모리(105)에 저장한다.
처리 시스템(100)은 또한 버스(110)에 연결되어 버스(110)를 통해 GPU(115) 및 메모리(105)와 통신하는 중앙 처리 장치(CPU)(130)를 포함한다. CPU(130)는 인스트럭션들을 동시에 또는 병렬로 실행하는 복수의 프로세서 코어들(131, 132, 133)(본원에서는 "프로세서 코어들(131-133)"로 총칭함)을 구현한다. CPU(130)에 구현된 다수의 프로세서 코어들(131-133)은 설계 선택의 문제이다 프로세서 코어들(131-133)은 메모리(105)에 저장된 프로그램 코드(135)와 같은 인스트럭션들을 실행하며, CPU(130)는 실행된 인스트럭션들의 결과들과 같은 정보를 메모리(105)에 저장한다. CPU(130)는 또한 GPU(115)에 대한 드로우(draw) 호출을 발생시켜 그래픽 처리를 개시할 수 있다. CPU(130)의 일부 실시예들은 인스트럭션들을 동시에 또는 병렬로 실행하는 다수의 프로세서 코어들(명확성을 위해도 1에는 도시되지 않음)을 구현한다.
입력/출력(I/O) 엔진(145)은 디스플레이(120)와 연관된 입력 또는 출력 동작들뿐만 아니라, 키보드, 마우스, 프린터, 외부 디스크 등과 같은 처리 시스템(100)의 다른 요소들을 처리한다. I/O 엔진(145)은 I/O 엔진(145)이 메모리(105), GPU(115) 또는 CPU(130)와 통신할 수 있도록 버스(110)에 결합된다. 예시된 실시예에서, I/O 엔진(145)은 컴팩트 디스크(CD), 디지털 비디오 디스크(DVD) 등과 같은 비일시적 컴퓨터 판독 가능 매체를 사용하여 구현되는 외부 저장 컴포넌트(150)에 저장된 정보를 판독한다. I/O 엔진(145)은 또한 GPU(115) 또는 CPU(130)에 의한 처리 결과들과 같은 정보를 외부 저장 컴포넌트(150)에 기록할 수 있다.
도 2는 일부 실시예들에 따른 프로세서 코어(205)를 포함하는 처리 시스템의 일부(200)의 블록도이다. 프로세서 코어(205)는 도 1에 도시된 프로세서 코어들(121-123, 131-133)의 일부 실시예들을 구현하는 데 사용된다. 처리 시스템의 부분(200)은 또한 도 1에 도시된 메모리(105)의 일부 실시예들을 구현하는 데 사용되는 메모리(210)를 포함한다. 프로세서 코어(200)는 조건부 분기 예측기 저장 및 조건부 분기 예측 로직을 포함하는 분기 예측 유닛(215)을 포함한다. 조건부 분기 예측기 저장소는 메모리(210)에 위치들의 주소들을 저장하고 조건부 분기 예측 로직은 아래에서 상세히 논의되는 바와 같이 분기 인스트럭션들의 결과들을 예측한다. 메모리(210)에 저장된 정보의 일부 사본들은 또한 캐시(220)에 저장된다. 예를 들어, 자주 액세스되는 인스트럭션들은 캐시(220)의 캐시 라인들 또는 캐시 블록들에 저장된다.
페치 유닛(225)은 분기 예측 유닛(215)으로부터 수신된 주소들에 기초하여 메모리(210) 또는 캐시(220)로부터 인스트럭션들과 같은 정보를 페치한다. 페치 유닛(225)은 캐시(220) 또는 메모리(210)로부터 인스트럭션들을 나타내는 바이트들을 판독하고 디코드 유닛(230)에 인스트럭션을 전송한다. 디코드 유닛(230)은 인스트럭션 바이트들을 검사하고 인스트럭션의 기능을 결정한다. 디코딩 유닛(230)은 프로세서 코어(205)에 의해 수행될 일련의 동작들을 생성하기 위해 인스트럭션을 번역(즉, 디코딩)한다. 이러한 동작들은 스케줄러(235)에 기록된다. 스케줄러(235)는 동작을 위한 소스 값들이 언제 준비되었는지를 결정하고 소스 값들을 하나 이상의 실행 유닛들(231, 232, 233)로 전송하며, 이를 본원에서는 총칭하여 동작을 수행하기 위한 "실행 유닛들(231-233)"이라고 한다. 결과는 레지스터 파일(240)에 다시 기록된다.
분기 예측 유닛(215)의 일부 실시예들은 현재 프로세스 또는 프로세서 코어(205)에서 이전에 실행된 프로세스에 의해 이전에 실행된 분기 인스트럭션들과 관련된 엔트리들을 포함한다. 분기 예측 유닛(215)의 각 엔트리에 저장된 분기 예측 정보는 분기 인스트럭션이 프로그램 흐름을 인스트럭션의 주소로 지시할 가능성을 나타낸다. 분기 예측 유닛(215)의 엔트리들은 해당 분기 인스트럭션의 주소에 기초하여 액세스된다. 예를 들어, 분기 인스트럭션의 물리적 주소, 가상 주소 또는 캐시 라인 주소를 나타내는 비트(또는 그 서브 셋)의 값들은 분기 예측 유닛(215)에 대한 인덱스로 사용된다. 또 다른 예의 경우, 비트(또는 그 서브셋)의 해시 값들은 분기 예측 유닛(215)에 대한 인덱스로 사용된다. 분기 예측 구조들의 예들은 간접 분기 예측기, 리턴 주소 스택, 분기 타겟 버퍼, 조건부 분기 예측기, 분기 이력 또는 분기 예측 정보를 저장하는 데 사용되는 임의의 기타 예측기 구조를 포함한다.
스케줄러(235)는 프로세서 코어(205)에 의한 인스트럭션들의 실행을 스케줄링한다. 스케줄러(235)의 일부 실시예들은 분기 인스트럭션에 의해 표시되는 메모리(210)(또는 관련 캐시(220))의 주소에서 인스트럭션으로 프로그램 흐름을 리다이렉트하는 분기 인스트럭션을 뒤따르는 인스트럭션들의 추론적 실행을 수행한다. 분기 인스트럭션들은 조건이 참인지 거짓인지에 따라 프로그램 흐름을 주소로 리다이렉트하는 조건부 분기 인스트럭션들을 포함한다. 예를 들어, 조건부 분기 인스트럭션들은 if-then-else 문과 case 문과 같은 소프트웨어 구성들을 구현하는 데 사용된다. 분기 인스트럭션들은 또한 항상 프로그램 흐름을 인스트럭션에 의해 표시된 주소로 리다이렉트하는 무조건부 분기 인스트럭션들을 포함한다. 예를 들어, JMP 인스트럭션은 항상 인스트럭션에 의해 표시된 주소로 점프한다. 일부 경우에, 타겟 주소는 레지스터 또는 메모리 위치에 제공되므로 분기가 실행될 때마다 타겟이 다를 수 있다. 이러한 분기들은 간접 분기들이라고 불린다.
스케줄러(235)의 일부 실시예들은 분기 인스트럭션에 대한 목적지 주소를 예측하기 위해 리턴된 분기 예측 정보를 사용한다. 그런 다음, 프로세서 코어(205)는 프로그램 흐름의 예측된 분기를 따라 후속 인스트럭션들뿐만 아니라 목적지 주소에서 인스트럭션을 추론적으로 실행할 수 있다. 분기 인스트럭션이 평가될 때 예측 분기가 잘못된 것으로 판명되면, 잘못 예측된 분기에 따른 추론적 실행이 중단되고 프로세서 코어(205)의 상태가 분기 인스트럭션의 상태로 롤백되어 올바른 분기에 따른 실행을 시작한다.
분기 예측 유닛(215)의 조건부 예측 로직은 예측 블록 내에서 분기 인스트럭션들의 결과들을 동시에 예측한다. 일부 실시예들에서, 분기 예측 유닛(215)은 인스트럭션들의 제1 블록에서 제1 및 제2 분기들의 제1 및 제2 결과들을 동시에 예측한다. 페치 유닛(225)은 제1 결과에 의해 표시된 제1 경로를 따라 추론적 실행을 위한 인스트럭션들을 페치한다. 분기 예측 유닛(215)이 제1 분기 명령이 수행되는 것으로 예측한다면, 프로그램 흐름이 제2 분기 인스트럭션을 접하지 않는 경우, 제2 분기 인스트럭션에 대한 예측 결과는 일반적으로 폐기된다. 그러나, 예시된 실시예에서, 제2 결과는 제1 결과가 수행되는 것에 응답하여 분기 예측 유닛(215)의 대체 예측 저장 어레이에 저장된다. 분기 예측 유닛(215)에 의한 예측 실패에 응답하여, 즉 분기 예측 유닛(215)은 제1 분기 인스트럭션이 수행될 것이라고 예측했지만 실제 결과는 제1 분기 인스트럭션이 수행되지 않았고, 분기 예측 유닛(215)은 저장된 제2 예측 결과에 기초하여 재시작된다. 일부 실시예들에서, 분기 예측 유닛(215)의 조건부 분기 로직은 조건 분기 예측기 저장소에 대한 인덱스로서 제1 블록의 주소를 사용하여 제1 분기 인스트럭션 또는 제2 분기 인스트럭션으로부터의 추론적 경로들을 따라 제2 블록에 대응하는 조건부 분기 예측기 저장소의 엔트리들에 액세스한다. 그런 다음, 분기 예측 유닛(215)은 분기 조건부 예측 로직의 해당 인스턴스 세트를 사용하여 제2 블록 세트에서 분기 인스트럭션들의 결과들을 동시에 예측한다. 제2 블록에 대한 대체 예측들은 분기 예측 유닛(215)의 대체 예측 저장 어레이에 저장되고, 하기에 상세히 논의되는 바와 같이, 예측 실패에 응답하여 분기 예측 유닛(215)을 재시작하는데 사용된다.
도 3은 일부 실시예들에 따른 예측 블록(300)에서 분기 인스트럭션들의 서로 다른 가능한 결과들에 대응하는 예측 블록(300) 및 블록(305, 310, 315) 세트의 블록도이다. 예측 블록(300)은 분기 인스트럭션들(320, 325) 및 인스트럭션들(330, 335)을 포함한다. 예측 블록(300)의 일부 실시예들은 추가적인 분기 인스트럭션들(명확성을 위해 도 3에는 도시되지 않음)을 포함한다. 블록들(305, 310, 315)은 각각 인스트럭션들(340, 345, 350, 355, 360, 365)을 포함한다. 블록(305)은 분기 인스트럭션(320)의 타겟인 제1 주소로 식별되고, 블록(310)은 분기 인스트럭션(325)의 타겟인 제2 주소로 식별되며, 블록(315)은 분기 인스트럭션(325)에 후속하는 제3 주소로 식별된다. 예시된 실시예에서, 제3 주소는 인스트럭션(360)과 같은 블록들(300, 315) 사이의 캐시 라인 경계와 같은 경계에서의 후속 인스트럭션을 위한 것이다. 다른 실시예들에서, 제3 주소는 인스트럭션(335)과 같은 블록(300)의 후속 인스트럭션을 위한 것이다.
도 2에 도시된 분기 예측 유닛(215)과 같은 분기 예측 구조는 예측 블록 내에서 다수의 분기 인스트럭션들의 결과들을 동시에 예측한다. 예시된 실시예에서, 분기 예측 구조는 분기 인스트럭션(320) 및 분기 인스트럭션(325)의 결과들을 동시에 예측한다. 분기 인스트럭션(320)의 가능한 결과들은, 프로그램 흐름이 블록(305)에서 인스트럭션(340)의 타겟 주소로 분기되는 경우 "수행"되며, 프로그램 흐름이 예측 블록(300)에서 인스트럭션(330)에 순차적으로 계속되는 경우 "수행되지 않는다". 분기 인스트럭션(325)의 가능한 결과들은, 프로그램 흐름이 블록(310)에서 인스트럭션(350)의 타겟 주소로 분기되는 경우 "수행되거나", 프로그램 흐름이 예측 블록(300)에서 인스트럭션(335)에 순차적으로 계속되는 경우 "수행되지 않는다".
분기(325)의 예측 결과는 대체 예측 저장 어레이, 예를 들어 도 2에 도시된 분기 예측 유닛(215)에서 구현되는 어레이에 저장된다. 분기 예측 구조의 일부 실시예들은 분기 인스트럭션(320)의 예측 결과가 취득되는 것에 응답하여 예측 결과들을 저장한다. 그 경우, 추론적 실행은 블록(305)에서 인스트럭션(340)으로 분기되고 프로그램 흐름은 분기 인스트럭션(325)을 만나지 않는다. 그러나, 예측 결과가 잘못 예측된 경우, 인스트럭션들의 페치는 잘못 예측된 분기 인스트럭션(320)으로 롤백되고 분기 예측기는 분기 인스트럭션(325)의 저장된 예측 결과를 사용하여 재시작된다. 따라서, 분기 예측기가 분기 인스트럭션(325)의 결과를 다시 예측할 필요가 없기 때문에 예측 실패로부터 복구하는 데 필요한 레이턴시가 감소된다.
블록들(305, 310, 315)의 인스트럭션들(340, 345, 350, 355, 360, 365)은 하나 이상의 분기 인스트럭션들을 포함할 수 있다. 일부 실시예들에서, 조건부 예측 로직의 다수의 인스턴스들은 블록들(305, 310, 315)에서 분기 인스트럭션들의 결과들을 동시에 예측하는 데 사용된다. 예를 들어, 블록(300)의 주소는 블록들(305, 310, 315)에 대한 예측 정보와 같은 조건부 분기 예측기 저장소의 정보에 액세스하는 데 사용될 수 있다. 조건부 예측 로직의 다수의 인스턴스들은 액세스된 정보를 사용하여 블록들(305, 310, 315)에서 분기 인스트럭션들의 결과들을 예측한다. 하기에 상세하게 논의된 바와 같이, 추론적 실행은 블록들(305, 310, 315) 중 예측된 블록을 포함하는 경로를 따라 진행되고 다른 블록들(305, 310, 315)의 분기 인스트럭션들의 예측 결과들이 저장된다. 분기 인스트럭션들(320, 325) 중 하나 이상의 예측 실패에 응답하여, 저장된 결과들은 아래에서 상세히 논의되는 바와 같이 조건부 예측 로직을 재시작하는 데 사용된다.
도 4는 일부 실시예들에 따른 분기 타겟 버퍼 및 조건부 분기 예측기를 포함하는 분기 예측 유닛(215)의 일부의 블록도이다. 주소(405)는 인스트럭션 블록의 시작 주소를 나타낸다. 분기 타겟 버퍼의 엔트리들은 엔트리들과 연관된 블록들의 시작 주소들로 인덱싱된다. 예시된 실시예에서, 블록 내의 분기 인스트럭션들에 대한 분기 예측 정보를 포함하는 분기 타겟 버퍼의 엔트리(415)에 대한 인덱스(410)는 주소(405)와 동일한 값을 포함한다. 따라서 인덱스(410)는 분기 타겟 버퍼의 엔트리(415)에 액세스하는 데 사용된다. 예를 들어, 도 3에 도시된 블록(300)의 주소는 블록(300)에서 분기들(320, 325)에 대응하는 분기 타겟 버퍼의 엔트리에 대한 인덱스로 사용된다.
엔트리(415)는 2개의 분기 인스트럭션들에 대한 분기 예측 정보를 포함한다. 예를 들어, 엔트리(415)는 주소(405)에 대한 제 1 분기 인스트럭션의 위치를 나타내는 오프셋(420) 및 주소 (405)에 대한 제2 분기 인스트럭션의 위치를 나타내는 오프셋(425)을 포함한다. 엔트리는 또한 제1 및 제2 분기 인스트럭션들의 유형들(430, 440) 및 제1 및 제2 분기 인스트럭션들의 타겟 주소들(435, 445)을 식별하는 정보를 포함한다. 프로그램 흐름은 제1 분기 인스트럭션이 수행되면 제1 분기 인스트럭션으로부터 타겟 주소(435)로 분기된다. 그렇지 않으면, 프로그램 흐름은 제2 분기 인스트럭션에 도달할 때까지 블록의 인스트럭션들과 함께 순차적으로 계속된다. 프로그램 흐름은 제2 분기 인스트럭션이 수행되면 제2 분기 인스트럭션으로부터 타겟 주소(445)로 분기하고, 그렇지 않으면 프로그램 흐름은 블록의 인스트럭션들과 함께 순차적으로 계속된다. 오버플로우 표시기(450)는 다음 순차 경계 이전에 추가 분기 인스트럭션들이 있는지 여부를 표시한다. 일부 실시예들에서, 순차적 경계들은 인스트럭션 캐시 라인 경계들과 일치한다. 다른 실시예들에서, 순차적 경계들은 다른 정렬된 주소들에 설정된다. 도 4에 도시된 엔트리(415)는 분기 타겟 버퍼에 있는 엔트리의 한 예이다. 엔트리(415)의 일부 실시예들은 상이한 방식으로 구성되거나 구조화된 서로 다른 분기 예측 정보를 포함한다.
분기 예측 구조는 조건부 분기 예측기 저장소(460) 및 조건부 예측 로직(465)을 포함한다. 조건부 분기 예측기 저장소(460)는 분기 인스트럭션들의 결과들을 예측하는 데 사용되는 정보를 저장한다. 인덱스(410)는 주소(405)에 의해 표시된 블록과 연관된 저장된 정보에 액세스하기 위해 조건부 분기 예측기 저장소(460)에 제공된다. 일부 실시예들에서, 분기 이력 정보(455)와 같은 추가 정보가 조건 분기 예측기 저장소(460)에 제공된다. 주소(405)에서 시작하는 블록과 관련된 액세스된 정보는 조건부 예측 로직(465)에 제공되며, 이는 또한 엔트리(415)로부터 블록의 분기 인스트럭션들에 대한 분기 예측 정보를 수신한다. 조건부 예측 로직(465)은 엔트리(415) 및 조건부 분기 예측기 저장소(460)로부터 액세스된 정보를 사용하여 블록의 분기 인스트럭션들의 결과들을 예측한다. 예시된 실시예에서, 조건부 예측 로직(465)은 제1 분기 인스트럭션이 수행되지 않고 제2 분기 인스트럭션이 수행된다고 예측한다. 따라서, 조건부 예측 로직(465)은 제1 블록의 끝이 제2 분기 인스트럭션(오프셋_2)의 위치에 있고 제2 분기 인스트럭션의 타겟 주소가 T_주소_2라고 예측한다.
분기 예측기 저장소(460)의 일부 실시예들은 또한 하나 이상의 분기들이 "수행"될 것으로 예측되는 경우 나머지 블록에 대한 분기 예측 정보를 저장하는 데 사용되는 대체 예측 저장 어레이(462)를 포함한다. 분기 예측 정보는 나머지 블록의 분기(있는 경우), 분기의 예측된 조건부 결과, 분기의 예측 타겟, 나머지 블록 끝의 위치 또는 동일한 정보의 유사한 표현을 설명하는 정보를 포함한다. 대체 예측 저장 어레이(462)의 각 예측 블록과 관련된 분기 예측 정보는 대응하는 예측 블록 번호에 기초하여 인덱싱된다. 대체 예측 저장 어레이(462)에 저장된 분기 예측 정보는 본원에 논의되는 바와 같이, 예측 실패의 경우 분기 예측기를 재시작하는 데 사용된다.
도 5는 일부 실시예들에 따른 분기 예측 구조를 재시작하기 위해 저장된 예측 정보를 사용하여 분기 예측 실패로부터 복구하는 방법(500)의 흐름도이다. 방법(500)은 도 1에 도시된 처리 시스템(100) 및 도 2에 도시된 처리 시스템의 일부(200)의 일부 실시예들에서 구현된다.
블록(505)에서, 분기 예측기는 예측 블록이라고 하는 제1 블록에서 제1 및 제2 분기들의 결과들을 동시에 예측한다. 예측 블록은 또한 오름차순으로 할당되는 예측 블록 번호가 할당되며, 저장된 예측 블록의 최대 수를 초과하면 0으로 래핑(wrapping)된다. 그런 다음, 방법(500)은 결정 블록(510)으로 흐른다.
결정 블록(510)에서, 분기 예측기는 제1 또는 제2 분기 인스트럭션이 수행될 것으로 예측되는지, 예를 들어, 프로그램 흐름이 제1 분기 인스트럭션 또는 제2 분기 인스트럭션의 타겟 어드레스로 분기할 것으로 예측되는지를 결정한다. 만약 그렇다면, 방법(500)은 블록(515)으로 흐르고 나머지 블록 예측이 유지된다. 예를 들어, 제1 분기 인스트럭션이 수행되는 것으로 예측되면, 분기 예측기가 제1 분기 인스트럭션의 결과를 정확하게 예측한 경우 프로그램 흐름이 제2 분기 인스트럭션을 접하지 않더라도 나머지 블록은 제2 분기 인스트럭션의 예측된 결과를 포함한다. 나머지 블록에 대한 분기 예측 정보는 대체 예측 저장 어레이에 기록된다. 그런 다음, 방법(500)은 블록(520)으로 흐른다. 제1 분기 인스트럭션도 제2 분기 인스트럭션도 수행되지 않을 것으로 예측되면, 방법(500)은 직접 블록(520)으로 흐른다.
블록(520)에서, 페치 유닛은 분기 예측기에 의해 예측 경로를 따라 추론적 실행을 위한 인스트럭션들을 페치하기 시작하도록 지시된다.
결정 블록(525)에서, 처리 시스템은 제1 블록의 제1 및 제2 분기 인스트럭션들의 결과들이 잘못 예측되었는지를 결정한다. 그렇지 않고, 분기 예측기가 제1 및 제2 분기 인스트럭션들의 결과들을 정확하게 예측한 경우, 방법(500)은 블록(530)으로 흐르고 분기 예측기에 의한 제1 블록의 처리가 수행된다. 제1 블록의 제1 및 제2 분기 인스트럭션들의 결과들 중 적어도 하나가 잘못 예측된 경우, 방법(500)은 결정 블록(535)으로 흐른다.
결정 블록(535)에서, 처리 시스템은 잘못 예측된 분기가 실제로 수행되었는지를 결정하는 것으로, 예를 들어 분기 예측기는 분기 인스트럭션들 중 하나가 수행되지 않을 것으로 예측했고, 실제 결과는 분기 인스트럭션이 수행되었고 프로그램 흐름이 인스트럭션의 타겟 주소로 분기되었다고 결정한다. 그렇지 않은 경우, 분기 예측기는 분기가 수행되었고 실제 결과는 분기가 수행되지 않았다는 결과가 될 것으로 예측했다. 그런 다음, 방법(500)은 블록(540)으로 흐른다. 그렇다면, 분기 예측기는 분기가 수행되지 않았고 실제 결과는 분기가 수행되었다는 결과가 될 것으로 예측했다. 그런 다음, 방법(500)은 블록(545)로 흐른다.
블록(540)에서, 프로그램 흐름이 잘못 예측된 분기 인스트럭션으로 롤백된다. 예를 들어, 분기 예측기가 제1 분기 인스트럭션이 수행될 것이라고 예측하고 실제 결과가 제1 분기 인스트럭션이 수행되지 않은 경우, 프로그램 흐름은 제1 분기 인스트럭션으로 롤백되고 페치 유닛은 예측 블록의 제1 분기 인스트럭션을 뒤따르는 다음 인스트럭션으로 인스트럭션들을 페치하기 시작한다. 저장된 나머지 블록(블록(515)로부터)은 잘못 예측된 분기의 예측 블록 번호를 사용하여 대체 예측 저장 어레이로부터 판독된다. 분기 예측기는 저장된 제2 예측 결과의 타겟에 기초하여 다시 시작되며, 이는 제2 분기를 다시 예측할 필요가 없으므로 시간이 절약된다. 나머지 블록 예측은 분기 예측 파이프라인의 후기 단계에 투입되어 정상적인 메커니즘에 따라 분기 예측을 페치, 디코딩 및 확인하는 데 사용하기 위해 나머지 프로세서 로직에 전달될 수 있다. 결과적으로, 분기 예측기는 다음 블록에서 예측을 시작하는데, 이 다음 블록은 제2 분기 인스트럭션이 수행될 것으로 예측되는 경우 제2 분기 인스트럭션의 타겟 주소에 있는 블록이거나, 제2 분기 인스트럭션이 수행되지 않을 것으로 예측되는 경우 제2 블록에 후속하는 블록이다. 제2 분기 인스트럭션에 후속하는 블록들은 예측 블록에 추가 분기 인스트럭션을 포함하는 블록(예측 블록이 두 개 이상의 분기 인스트럭션들을 포함하는 경우) 또는 예측 블록에 추가 분기 인스트럭션들이 없는 경우 예측 블록을 뒤따르는 다음 블록 경계에서 시작하는 블록을 포함한다.
블록(545)에서, 프로그램 흐름은 잘못 예측된 분기 인스트럭션으로 롤백되고 분기 예측 및 인스트럭션 페치 둘 다 잘못 예측된 분기 인스트럭션의 실제 타겟에서 시작된다. 예를 들어, 분기 예측기가 제1 분기 인스트럭션이 수행되지 않을 것이라고 예측하고 제1 분기 인스트럭션의 실제 결과가 수행된 경우, 프로그램 흐름은 제1 분기 인스트럭션으로 롤백되고 페치 유닛은 제1 분기 인스트럭션의 타겟 주소에서 인스트럭션들을 페치하기 시작한다. 분기 예측기는 또한 타겟 주소에서 시작하는 블록에서 인스트럭션들의 결과들을 예측하기 시작한다.
도 6은 일부 실시예들에 따른 "사전 예측" 분기 예측을 구현하는 처리 시스템의 일부(600)의 블록도이다. 처리 시스템의 일부(600)는 도 1에 도시된 처리 시스템(100) 및 도 2에 도시된 처리 시스템의 일부(200)의 일부 실시예들을 구현하는 데 사용된다. 처리 시스템의 일부(600)는 이전 블록 주소를 분기 타겟 버퍼 메모리 (610)에 대한 인덱스(605)로 사용하여 "사전 예측" 분기 예측을 수행하여 이전 블록 내에서 분기 인스트럭션들의 예측 결과들과 관련된 블록들에 대한 분기 예측 정보에 액세스한다. 예시된 실시예에서, 일부(600)는 블록당 두 개의 분기 인스트럭션들의 결과들을 동시에 예측한다. 그러나, 일부(600)의 일부 실시예들은 블록당 더 많은 분기 인스트럭션들의 결과들을 동시에 예측한다.
인덱스(605)는 이전 블록에서 두 개의 분기 인스트럭션들의 결과들과 연관된 세 개의 블록들에 대한 분기 타겟 버퍼 메모리(610)의 엔트리들에 액세스하는 데 사용된다. 예를 들어, 제1 블록에 대해 세 가지 가능한 예측 결과들, 즉 (1) 수행된 제1 분기, (2) 수행되지 않은 제1 분기 및 수행된 제2 분기, 또는 (3) 둘 다 수행되지 않은 제1 및 제2 분기들이 있다. 세 가지 가능한 결과들은 인덱스(605)와 관련된 세 가지 블록들에 대응한다. 예를 들어, 블록(305)은 도 3에 도시된 블록(300)의 분기 인스트럭션(320)에서 수행되는 제1 분기에 대응한다. 블록(310)은 도 3에 도시된 블록(300)의 분기 인스트럭션(320)에서 수행되지 않은 제1 분기 및 분기 인스트럭션(325)에서 수행된 제2 분기에 대응한다. 블록(315)은 도 3에 도시된 블록(300)의 분기 인스트럭션들(320, 325)에서 수행되지 않은 제1 및 제2 분기 둘 다에 대응한다.
분기 타겟 버퍼 메모리(610)의 일부 실시예들은 분기 타겟 버퍼 엔트리들에 대한 연관 액세스를 구현한다. 예를 들어, 분기 타겟 버퍼가 4-방향 설정 연관이면, 인덱스(605)에 기초하여 분기 타겟 버퍼 메모리(610)로부터 4개의 엔트리들이 판독된다. 분기 타겟 버퍼 히트 로직(615)의 다수의 인스턴스들은 이전 블록의 분기 인스트럭션들의 결과들과 연관된 블록들의 태그들을 분기 타겟 버퍼 메모리(610)로부터 판독되는 엔트리들의 태그들과 비교하는 데 사용된다. 분기 타겟 버퍼 히트 로직(615)의 각 인스턴스는 예측된 다음(제2) 블록과 두 개의 대체 다음(제2) 블록들을 식별하기 위해 블록들 중 하나에 대한 태그를 개별적으로 비교한다. 제2 블록들은 조건부 예측 로직(620)의 해당 인스턴스들에 제공된다.
일부(600)는 분기 인스트럭션들의 결과들을 예측하는 데 사용되는 정보를 저장하는 조건부 분기 예측기 저장소(625)를 포함한다. 인덱스(605)는 인덱스(605)에 포함된 이전 블록의 주소에 의해 표시된 제2 블록들과 관련된 저장된 정보에 액세스하기 위해 조건부 분기 예측기 저장소(625)에 제공된다. 일부 실시예들에서, 분기 이력 정보(630)와 같은 추가 정보가 조건부 분기 예측기 저장소(625)에 제공된다. 제2 블록 세트와 연관된 액세스된 정보는 조건부 예측 로직(620)의 다수의 인스턴스들에 제공되며, 이는 또한 분기 타겟 버퍼 히트 로직(615)의 다수의 인스턴스들로부터 대응하는 제2 블록의 분기 인스트럭션들에 대한 분기 예측 정보를 수신한다. 조건부 예측 로직(620)의 인스턴스들은 분기 타겟 버퍼 히트 로직(615) 및 조건부 분기 예측기 저장소(625)의 해당 인스턴스들로부터 수신된 정보를 사용하여 제2 블록들에서 분기 인스트럭션들의 결과들(635)을 예측한다. 본원에 논의된 바와 같이, 결과들(635)은 각 블록들의 분기 인스트럭션들이 수행될 것으로 예측되는지 수행되지 않을 것으로 예측되는지 여부, 제2 블록의 종료 주소들, 분기 인스트럭션이 수행될 것으로 예측되는 경우의 타겟 주소들과 같은 후속 인스트럭션들의 주소들을 나타낸다.
분기 예측기 저장소(625)의 일부 실시예들은 예측 블록 및 대체 블록들의 나머지 블록에 대한 분기 예측 정보를 저장하는 데 사용되는 대체 예측 저장 어레이(627)를 포함한다. 분기 예측 정보는 나머지 블록의 분기(있는 경우), 분기의 예측된 조건부 결과, 분기의 예측 타겟, 나머지 블록 끝의 위치 또는 동일한 정보의 유사한 표현을 설명하는 정보를 포함한다. 유사한 정보는 대체 블록들에 저장된다. 예를 들어, 대체 예측 저장 어레이(627)는 분기(들), 분기(들)의 예측된 조건부 결과(들), 분기(들)의 타겟(들) 및 블록 끝의 위치 또는 동일한 정보의 유사한 표현을 설명하는 데 사용되는 정보를 저장할 수 있다. 추가적으로, 대체 제2 블록 예측에 대응하는 제1 블록의 결과를 나타내는 표시가 저장된다. 대체 예측 저장 어레이(627)의 분기 예측 정보는 대응하는 예측 블록 번호들에 기초하여 인덱싱된다. 대체 예측 저장 어레이(627)에 저장된 분기 예측 정보는 하기에 논의되는 바와 같이, 예측 실패의 경우 분기 예측기를 재시작하는 데 사용된다.
도 7은 일부 실시예들에 따른 "사전 예측" 분기 예측 동안 분기 예측 실패에 응답하여 프로그램 흐름 및 분기 예측기를 롤백하는 방법의 제1 부분(700)의 흐름도이다. 방법의 제1 부분(700)은 도 1에 도시된 처리 시스템(100) 및 도 2에 도시된 처리 시스템의 일부(200)의 일부 실시예들에서 구현된다.
블록(705)에서, 분기 예측기는 제1 블록에서 제1 및 제2 분기들의 결과들을 동시에 예측한다. 본원에 논의된 바와 같이, 제1 블록에서 제1 및 제2 분기들의 결과들의 서로 다른 조합들은 서로 다른 목적지 제2 블록들에 대응한다. 분기 예측기는 제1 및 제2 분기들의 예측 결과들에 기초하여 제2 블록들 중 하나를 "예측된" 제2 블록으로 식별한다. 다른 결과들에 해당하는 제2 블록들은 "대체" 제2 블록들로 식별된다. 그런 다음, 방법의 일부(700)는 결정 블록(710)으로 흐른다.
결정 블록(710)에서, 분기 예측기는 제1 또는 제2 분기 인스트럭션이 수행될 것으로 예측되는지, 예를 들어, 프로그램 흐름이 제1 분기 인스트럭션 또는 제2 분기 인스트럭션의 타겟 어드레스로 분기할 것으로 예측되는지를 결정한다. 그렇다면, 방법의 일부(700)는 블록(715)으로 흐르고 나머지 블록 예측은 유지된다. 예를 들어, 제1 분기 인스트럭션이 수행되는 것으로 예측되면, 분기 예측기가 제1 분기 인스트럭션의 결과를 정확하게 예측한 경우 프로그램 흐름이 제2 분기 인스트럭션을 접하지 않더라도 나머지 블록은 제2 분기 인스트럭션의 예측된 결과를 포함한다. 나머지 블록에 대한 정보는 예측 블록 번호에 해당하는 대체 예측 저장 어레이의 엔트리에 이를 기록함으로써 유지된다. 그런 다음, 방법의 일부(700)는 블록(720)으로 흐른다. 제1 분기 인스트럭션도 제2 분기 인스트럭션도 수행되지 않을 것으로 예측되면, 방법의 일부(700)는 직접 블록(720)으로 흐른다.
블록(720)에서, 조건부 예측 로직의 다수의 인스턴스들은 예측 및 대체 제2 블록들 각각에서 제1 및 제2 분기 인스트럭션들의 결과들을 예측하는 데 사용된다. 일부 실시예들에서, 조건부 예측 로직의 제1 인스턴스는 예측된 제2 블록에서 제1 및 제2 분기 인스트럭션들의 결과들을 예측하고, 제2 인스턴스는 대체 제2 블록들 중 하나에서 제1 및 제2 분기 인스트럭션들의 결과들을 예측하며, 제3 인스턴스는 대체 제2 블롤들 중 다른 하나에서 제1 및 제2 분기 인스트럭션들의 결과들을 예측한다. 그러나, 다른 실시예들에서, 제2 블록들 중 일부 또는 전부는 더 많거나 더 적은 분기 인스트럭션들을 포함한다.
블록(725)에서, 제1 예측 블록의 예측 블록 번호에 대응하는 대체 예측 저장 어레이의 엔트리에 정보를 기록함으로써 대체 제2 블록들에서 분기 인스트럭션들의 결과들의 예측들이 유지된다. 저장되는 정보는 분기(들), 분기(들)의 예측된 조건부 결과(들), 분기들의 타겟(들) 및 블록 끝의 위치 또는 동일한 정보의 유사한 표현을 설명하는 데 사용되는 정보이다. 추가적으로, 대체 제2 블록 예측에 대응하는 제1 블록의 결과를 나타내는 표시가 저장된다.
블록(730)에서, 페치 유닛은 분기 예측기에 의한 예측 경로를 따라 추론적 실행을 위한 인스트럭션들을 페치하기 시작하도록 지시된다. 예시된 실시예에서, 페치 유닛은 예측된 제2 블록을 포함하는 경로를 따라 인스트럭션들을 페치하기 시작한다.
결정 블록(730)에서, 처리 시스템은 제1 블록의 제1 및 제2 분기 인스트럭션들의 결과들이 잘못 예측되었는지를 결정한다. 그렇지 않고, 분기 예측기가 제1 및 제2 분기 인스트럭션들의 결과들을 정확하게 예측한 경우, 방법(700)은 블록(740)으로 흐르고 분기 예측기에 의한 제1 블록의 처리가 수행된다. 제1 블록에서 제1 및 제2 분기 인스트럭션들의 결과들 중 적어도 하나가 잘못 예측되는 경우, 방법의 일부(700)은 노드(1)로 흐른다.
도 8은 일부 실시예들에 따른 "사전 예측" 예측 동안 분기 예측 실패에 응답하여 프로그램 흐름을 롤백하고 분기 예측기를 재시작하는 방법의 제2 부분(800)의 흐름도이다. 방법의 제2 부분(800)은 도 1에 도시된 처리 시스템(100) 및 도 2에 도시된 처리 시스템의 일부(200)의 일부 실시예들에서 구현된다. 방법의 제2 부분(800)은 도 7에 도시 된 노드(1)에 대응하는 노드(1)에서 시작된다.
블록(805)에서, 프로그램 흐름은 제1 블록의 제1 분기 인스트럭션 또는 제2 분기 인스트럭션일 수 있는 예측 실패된 분기 인스트럭션으로 롤백된다.
결정 블록(810)에서, 처리 시스템은 예측 실패된 분기가 실제로 수행되었는지를 결정하는 것으로, 예를 들어 분기 예측기는 제1 블록의 분기 인스트럭션들 중 하나가 수행되지 않을 것으로 예측했고, 실제 결과는 분기 인스트럭션이 수행되었고 프로그램 흐름이 분기 인스트럭션의 타겟 주소로 분기되었다고 결정한다. 그렇지 않고, 분기 예측기는 분기가 수행될 것으로 예측했고 실제 결과는 분기가 수행되지 않았다면, 방법의 일부(800)는 블록(815)으로 흐른다.
블록(815)에서, 제1 블록(도 7의 블록(715)으로부터)에 대한 저장된 나머지 블록이 잘못 예측된 분기의 예측 블록 번호를 사용하여 대체 예측 저장 어레이로부터 판독된다. 나머지 블록 예측은 분기 예측 파이프라인의 후기 단계에 투입되어 정상적인 메커니즘에 따라 분기 예측을 페치, 디코딩 및 확인하는 데 사용하기 위해 나머지 프로세서 로직에 전달될 수 있다. 결과적으로, 분기 예측기는 다음 블록에서 예측을 시작하는데, 이 다음 블록은 제2 분기 인스트럭션이 수행될 것으로 예측되는 경우 대체 제2 블록들 중 한 하나, 예를 들어 제2 분기 인스트럭션의 타겟 주소에 있는 블록이거나, 제2 분기 인스트럭션이 수행되지 않을 것으로 예측되는 경우 제2 분기 인스트럭션에 후속하는 블록이다. 제2 분기 인스트럭션에 후속하는 블록들은 제1 블록에 추가 분기 인스트럭션을 포함하는 블록(제1 블록이 두 개 이상의 분기 인스트럭션들을 포함하는 경우) 또는 제1 블록에 추가 분기 인스트럭션들이 없는 경우 제1 블록을 뒤따르는 다음 블록 경계에서 시작하는 블록을 포함한다.
예측 실패된 분기가 실제로 수행되었고(결정 블록(810)에서 결정된 대로), 분기 예측기가 분기가 수행되지 않았고 실제 결과가 분기가 수행되었다고 하는 결과가 될 것이라고 예측한 경우, 방법의 일부(800)는 블록(820)으로 흐른다.
블록(820)에서, 제1 블록으로부터 실제로 수행된 분기에 해당하는 대체 제2 블록의 분기 인스트럭션들의 결과들의 예측들은 분기 예측 파이프라인의 후기 단계에 투입되어(해당되는 경우, 나머지 예측이 투입된 후에만), 정상적인 메커니즘들에 따라 분기 예측을 페칭, 디코딩 및 확인하는 데 사용하기 위해 나머지 프로세서 로직에 전달될 수 있다. 따라서, 분기 예측기는 분기 예측 실패에 응답하여 제2 블록의 예측들을 반복할 필요가 없다.
블록(825)에서, 분기 예측기는 대체 제2 블록을 뒤따르는 블록에서 분기 인스트럭션들의 결과들을 예측하기 시작한다. 분기 예측기의 일부 실시예들은 (분기 인스트럭션이 수행될 것으로 예측되는 경우) 대체 제2 블록의 분기 인스트럭션의 타겟 주소, (대체 제2 블록에 추가 분기 인스트럭션들이 있고 분기 인스트럭션이 수행되지 않을 것으로 예측되는 경우) 대체 제2 블록의 후속 분기 인스트럭션들의 주소, 또는 (대체 제2 블록에 추가 분기 인스트럭션들이 없고 분기 인스트럭션이 수행되지 않을 것으로 예측되는 경우) 순서대로 대체 제2 블록을 뒤따르는 블록의 후속 분기 인스트럭션들의 주소에 대응하는 블록에서 분기 인스트럭션들의 결과들을 예측하기 시작한다.
도 7 및 8에 도시된 방법의 예시된 실시예를 구현하는 처리 시스템은 모든 대체 제2 블록들에 대한 예측 결과들을 저장한다. 다른 실시예들에서, 모든 예측 결과들보다 더 적은 결과들이 저장된다. 예를 들어, 처리 시스템은 단일 대체 제2 블록에 대한 예측 결과들을 저장할 수 있다. 저장을 위해 선택된 대체 제2 블록은 대체 제2 블록들이 프로그램 흐름의 실제 경로에 있을 가능성, 신뢰도 척도에 기초하여, 또는 모든 경우에 제1 대체 제2 블록을 선택하는 것과 같은 임의의 선택 기준을 사용하여 선택된다. 이러한 실시예에서 예측 실패 복구가 대체 예측 저장 어레이에서 제2 블록에 대한 대체 예측을 찾지 못하면, 분기 예측기는 제2 블록의 타겟 대신에 제1 블록의 타겟에서 재시작된다.
본원에 개시된 바와 같이, 방법은, 분기 예측기에서, 제1 인스트럭션 블록에서 제1 분기 인스트럭션의 제1 결과를 예측하는 단계; 제1 예측 결과에 의해 표시된 제1 경로를 따라 추론적 실행을 위한 인스트럭션들을 페치하기 시작하도록 페치 로직에 지시하는 단계; 제1 예측 결과가 취득되는 것에 응답하여 제1 블록의 나머지를 나타내는 나머지 블록을 저장하는 단계; 및 제1 분기 인스트럭션이 수행되지 않는 것에 응답하여, 나머지 블록에 기초하여 분기 예측기를 재시작하는 단계를 포함한다. 일 양태에서, 제1 분기의 제1 결과를 예측하는 단계는 제1 인스트럭션 블록에서 제1 분기 인스트럭션의 제1 결과 및 제2 분기 인스트럭션의 제2 결과를 동시에 예측하는 단계를 포함한다. 다른 양태에서, 나머지 블록을 저장하는 단계는 제1 예측 결과가 취득되고 제1 경로가 제2 분기 인스트럭션을 포함하지 않는 것에 응답하여 제2 예측 결과를 나타내는 정보를 포함하는 나머지 블록을 저장하는 단계를 포함한다. 또 다른 양태에서, 분기 예측기를 재시작하는 단계는 제2 예측 결과를 나타내는 나머지 블록의 정보에 기초하여 분기 예측기를 재시작하는 단계를 포함한다.
다른 양태에서, 분기 예측기를 재시작하는 단계는, 제2 예측 결과가 제2 분기 인스트럭션이 수행됨을 나타내는 것에 응답하는 제2 분기 인스트럭션의 타겟 주소; 제2 예측 결과가 제2 분기 인스트럭션이 수행되지 않고 제1 블록이 적어도 하나의 제3 분기 인스트럭션을 포함함을 나타내는 것에 응답하는 제2 분기 인스트럭션에 후속하는 인스트럭션의 주소; 및 제2 예측 결과가 제2 분기 인스트럭션이 수행되지 않고 제1 블록이 적어도 하나의 제3 분기 인스트럭션을 포함하지 않음을 나타내는 것에 응답하는 제1 블록의 경계 중 하나에 의해 식별된다. 또 다른 양태에서, 제1 블록은 후속 메모리 경계 이전의 제2 분기 인스트럭션을 포함하지 않으며, 나머지 블록은 제1 블록이 후속 메모리 경계 이전의 제2 분기 인스트럭션을 포함하지 않음을 나타내는 정보를 포함한다. 또 다른 양태에서, 분기 예측기를 재시작하는 단계는 나머지 블록에 표시된 후속 메모리 경계에서 분기 예측기를 재시작하는 단계를 포함한다. 다른 양태에서, 인덱스로서 제1 블록의 주소를 사용하여 분기 예측 구조의 정보에 액세스하는 단계로서, 상기 정보는 제1 블록으로부터의 추론적 경로들을 따라 제2 블록 세트에 대응하는 엔트리 세트를 포함한다.
본원에 개시된 바와 같이, 장치는, 제1 인스트럭션 블록에서 제1 분기 인스트럭션의 제1 결과를 예측하도록 구성된 분기 예측기; 제1 예측 결과에 의해 표시된 제1 경로를 따라 추론적 실행을 위한 인스트럭션들을 페치하는 페치 로직; 및 제1 예측 결과가 취득되는 것에 응답하여 제1 블록의 나머지를 나타내는 정보를 저장하는 분기 예측기의 대체 예측 저장 어레이로서, 제1 분기 인스트럭션이 수행되지 않는 것에 응답하여, 분기 예측기가 나머지를 나타내는 정보에 기초하여 재시작되는, 상기 대체 예측 저장 어레이를 포함한다. 일 양태에서, 분기 예측기는 제1 인스트럭션 블록에서 제1 분기 인스트럭션의 제1 결과 및 제2 분기 인스트럭션의 제2 결과를 동시에 예측도록 구성된다. 다른 양태에서, 대체 예측 저장 어레이는 제1 예측 결과가 취득되고 제1 경로가 제2 분기 인스트럭션을 포함하지 않는 것에 응답하여 제2 예측 결과를 나타내는 정보를 포함하는 나머지 블록을 저장하도록 구성된다. 또 다른 양태에서, 분기 예측기는 제2 예측 결과를 나타내는 나머지 블록의 정보에 기초하여 재시작된다.
다른 양태에서, 분기 예측기는, 제2 예측 결과가 제2 분기 인스트럭션이 수행됨을 나타내는 것에 응답하는 제2 분기 인스트럭션의 타겟 주소; 제2 예측 결과가 제2 분기 인스트럭션이 수행되지 않고 제1 블록이 적어도 하나의 제3 분기 인스트럭션을 포함함을 나타내는 것에 응답하는 제2 분기 인스트럭션에 후속하는 인스트럭션의 주소; 및 제2 예측 결과가 제2 분기 인스트럭션이 수행되지 않고 제1 블록이 적어도 하나의 제3 분기 인스트럭션을 포함하지 않음을 나타내는 것에 응답하는 제1 블록의 경계 중 하나에 의해 식별된 제2 블록에서 분기 예측을 시작하기 위해 재시작된다. 또 다른 양태에서, 제1 블록은 후속 메모리 경계까지 제2 분기 인스트럭션을 포함하지 않으며, 나머지 블록은 후속 메모리 경계까지 제2 분기 인스트럭션을 포함하지 않음을 나타내는 정보를 포함한다. 또 다른 양태에서, 분기 예측기는 나머지 블록에 표시된 후속 메모리 경계에서 재시작하도록 구성된다. 또 다른 양태에서, 장치는 제1 블록으로부터의 추론적 경로를 따라 제2 블록 세트에 대응하는 엔트리 세트를 저장하도록 구성된 분기 예측 구조를 포함하고, 분기 예측기는 제1 블록의 주소를 인덱스로 사용하여 분기 예측 구조에 액세스하도록 구성된다.
본원에 개시된 바와 같이, 방법은, 분기 예측기에서, 제1 인스트럭션 블록에서 제1 분기 인스트럭션의 제1 결과를 예측하는 단계; 분기 예측기의 대체 예측 저장 어레이에서, 제1 결과가 취득될 것으로 예측되는지 수행되지 않을 것으로 예측되는지 여부에 기초하여 나머지 블록을 선택적으로 저장하는 단계로서, 상기 나머지 블록은 제1 블록의 나머지를 나타내는, 상기 저장하는 단계; 및 제1 분기 인스트럭션이 수행될 것으로 예측되고 제1 분기 인스트럭션의 실제 결과가 취득되지 않는 것에 응답하여, 나머지 블록에 기초하여 분기 예측기를 재시작하는 단계를 포함한다. 일 양태에서, 나머지 블록을 선택적으로 저장하는 단계는 제1 블록의 제2 분기 인스트럭션의 제2 예측 결과를 나타내는 정보 및 제1 블록이 후속 메모리 경계까지 임의의 분기 인스트럭션들을 포함하지 않음을 나타내는 정보 중 적어도 하나를 저장하는 단계를 포함한다.
일부 실시예들에서, 상기에 설명된 장치들 및 기술들은 도 1-8을 참조하여 상술한 처리 시스템과 같은, 하나 이상의 집적 회로(IC) 장치들(집적 회로 패키지 또는 마이크로칩이라고도 함)를 포함하는 시스템에서 구현된다. EDA(electronic design automation) 및 CAD(computer aided design) 소프트웨어 툴은 이러한 IC 장치들의 설계 및 제작에 사용될 수 있다. 이러한 설계 툴은 일반적으로 하나 이상의 소프트웨어 프로그램들로 표현된다. 하나 이상의 소프트웨어 프로그램들은 회로를 제조하는 제조 시스템을 설계 또는 적응시키기 위한 프로세스의 적어도 일부를 수행하기 위해 하나 이상의 IC 장치들의 회로를 나타내는 코드 상에서 동작하도록 컴퓨터 시스템을 조작하기 위해 컴퓨터 시스템에 의해 실행 가능한 코드를 포함한다. 이 코드는 명령들, 데이터 또는 명령들 및 데이터의 조합을 포함할 수 있다. 설계 툴 또는 제작 툴을 나타내는 소프트웨어 명령들은 일반적으로 컴퓨팅 시스템에 액세스 가능한 컴퓨터 판독 가능 저장 매체에 저장된다. 마찬가지로, IC 장치의 설계 또는 제조의 하나 이상의 단계들을 나타내는 코드는 동일한 컴퓨터 판독 가능 저장 매체 또는 다른 컴퓨터 판독 가능 저장 매체에 저장되고 그로부터 액세스될 수 있다.
컴퓨터 판독 가능 저장 매체는 컴퓨터 시스템에 명령들 및/또는 데이터를 제공하기 위해 사용하는 동안 컴퓨터 시스템에 의해 액세스 가능한 임의의 비-일시적 저장 매체, 또는 비-일시적 저장 매체들의 조합을 포함할 수 있다. 이러한 저장 매체들은, 제한하는 것은 아닌, 광학 매체(예를 들어, 콤팩트 디스크(CD), 디지털 다목적 디스크(DVD), 블루 레이 디스크), 자기 매체(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비-휘발성 메모리(예를 들어, 판독 전용 메모리(ROM) 또는 플래시 메모리), 또는 마이크로 전자 기계 시스템(MEMS) 기반 저장 매체를 포함할 수 있다. 컴퓨터 판독 가능 저장 매체는 컴퓨팅 시스템(예를 들어, 시스템 RAM 또는 ROM)에 내장되거나, 컴퓨팅 시스템(예: 자기 하드 드라이브)에 고정 부착되거나, 컴퓨팅 시스템(예를 들어, 광 디스크 또는 범용 직렬 버스(USB)-기반 플래시 메모리)에 제거 가능하게 부착되거나, 또는 유선 또는 무선 네트워크(예를 들어, 네트워크 액세스 가능 저장소(NAS))를 통해 컴퓨터 시스템에 결합될 수 있다.
일부 실시예들에서, 상술된 기술들의 특정 양태들은 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서들에 의해 구현될 수 있다. 소프트웨어는 비-일시적 컴퓨터 판독 가능 저장 매체에 저장되거나 아니면 유형적으로(tangibly) 구현된 하나 이상의 실행 가능 명령 세트들을 포함한다. 소프트웨어는 하나 이상의 프로세서들에 의해 실행 시 상술한 기술들 중 하나 이상의 측면들을 수행하도록 하나 이상의 프로세서를 조작하는 명령들 및 특정 데이터를 포함할 수 있다. 비-일시적 컴퓨터 판독 가능 저장 매체는 예를 들어, 자기 또는 광 디스크 저장 장치, 플래시 메모리와 같은 솔리드 스테이트 저장 장치, 캐시, 랜덤 액세스 메모리(RAM) 또는 기타 비-휘발성 메모리 장치 또는 장치들 등을 포함할 수 있다. 비-일시적 컴퓨터 판독 가능 저장 매체에 저장된 실행 가능 명령들은 소스 코드, 어셈블리어 코드, 객체 코드, 또는 하나 이상의 프로세서들에 의해 해석되거나 아니면 실행 가능한 기타 명령 포맷일 수 있다.
일반적인 설명에서 상술한 모든 활동들 또는 요소들이 필요한 것은 아니며, 특정 활동 또는 장치의 일부가 필요하지 않을 수 있으며, 설명된 것들 외에 하나 이상의 추가 활동들이 수행될 수 있거나, 또는 요소들이 포함될 수 있음에 유의한다. 또한, 활동들이 나열되는 순서가 반드시 수행되는 순서는 아니다. 또한, 개념들은 특정 실시예들을 참조하여 설명되었다. 그러나, 당업자는 이하의 청구 범위에 기재된 본 개시의 범위를 벗어나지 않고 다양한 수정들 및 변경들이 이루어질 수 있음을 이해한다. 따라서, 명세서 및 도면들은 제한적인 의미라기 보다는 예시적인 것으로 간주되어야 하며, 이러한 모든 수정들은 본 개시의 범위 내에 포함되는 것으로 의도된다.
이점들, 다른 장점들 및 문제들에 대한 해결책들이 특정 실시예들과 관련하여 상기에 설명되었다. 그러나, 이점들, 장점들, 문제에 대한 솔루션들 및 이점, 장점 또는 솔루션을 발생시키거나 더 두드러지게 만들 수 있는 임의의 특징(들)은 일부 또는 모든 청구항들의 중요하거나, 요구되거나 또는 필수 특징으로 해석되어서는 안된다. 게다가, 개시된 주제는 본원의 교시의 이점을 갖는 당업자에게 명백하게 다르지만 동등한 방식으로 수정 및 실시될 수 있으므로, 위에 개시된 특정 실시예들은 단지 예시일 뿐이다. 이하의 청구 범위에 기재된 것 이외에, 본원에 도시된 구성 또는 설계의 세부 사항들에 대한 제한은 없다. 따라서, 상기 개시된 특정 실시예들은 변경되거나 수정될 수 있으며, 이러한 모든 변형들은 개시된 주제의 범위 내에서 고려된다는 것은 명백하다. 따라서, 본원에서 요구되는 보호는 아래의 청구 범위에 명시된 바와 같다.

Claims (18)

  1. 방법에 있어서,
    분기 예측기에서, 제1 인스트럭션 블록에서 제1 분기 인스트럭션의 제1 결과를 예측하는 단계;
    상기 제1 예측 결과에 의해 표시된 제1 경로를 따라 추론적 실행을 위한 인스트럭션들을 페치하기 시작하도록 페치 로직에 지시하는 단계;
    상기 제1 예측 결과가 취득되는 것에 응답하여 상기 제1 블록의 나머지를 나타내는 나머지 블록을 저장하는 단계; 및
    상기 제1 분기 인스트럭션이 수행되지 않는 것에 응답하여, 상기 나머지 블록에 기초하여 상기 분기 예측기를 재시작하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 제1 분기의 상기 제1 결과를 예측하는 단계는 상기 제1 인스트럭션 블록에서 상기 제1 분기 인스트럭션의 상기 제1 결과 및 제2 분기 인스트럭션의 제2 결과를 동시에 예측하는 단계를 포함하는, 방법.
  3. 제2항에 있어서, 상기 나머지 블록을 저장하는 단계는 상기 제1 예측 결과가 취득되고 상기 제1 경로가 상기 제2 분기 인스트럭션을 포함하지 않는 것에 응답하여 상기 제2 예측 결과를 나타내는 정보를 포함하는 나머지 블록을 저장하는 단계를 포함하는, 방법.
  4. 제2항에 있어서, 상기 분기 예측기를 재시작하는 단계는 상기 제2 예측 결과를 나타내는 상기 나머지 블록의 상기 정보에 기초하여 상기 분기 예측기를 재시작하는 단계를 포함하는, 방법.
  5. 제2항에 있어서, 상기 분기 예측기를 재시작하는 단계는,
    상기 제2 예측 결과가 상기 제2 분기 인스트럭션이 수행됨을 나타내는 것에 응답하는 상기 제2 분기 인스트럭션의 타겟 주소;
    상기 제2 예측 결과가 상기 제2 분기 인스트럭션이 수행되지 않고 상기 제1 블록이 적어도 하나의 제3 분기 인스트럭션을 포함함을 나타내는 것에 응답하는 상기 제2 분기 인스트럭션에 후속하는 인스트럭션의 주소; 및
    상기 제2 예측 결과가 상기 제2 분기 인스트럭션이 수행되지 않고 상기 제1 블록이 상기 적어도 하나의 제3 분기 인스트럭션을 포함하지 않음을 나타내는 것에 응답하는 상기 제1 블록의 경계 중 하나에 의해 식별된 제2 블록에서 분기 예측을 시작하기 위해 상기 분기 예측기를 재시작하는 단계를 포함하는, 방법.
  6. 제1항에 있어서, 상기 제1 블록은 후속 메모리 경계 이전의 제2 분기 인스트럭션을 포함하지 않으며, 상기 나머지 블록은 상기 제1 블록이 상기 후속 메모리 경계 이전의 상기 제2 분기 인스트럭션을 포함하지 않음을 나타내는 정보를 포함하는, 방법.
  7. 제6항에 있어서, 상기 분기 예측기를 재시작하는 단계는 상기 나머지 블록에 표시된 상기 후속 메모리 경계에서 상기 분기 예측기를 재시작하는 단계를 포함하는, 방법.
  8. 제1항에 있어서,
    상기 1 블록의 주소를 인덱스로 사용하여 분기 예측 구조의 정보에 액세스하는 단계를 더 포함하며, 상기 정보는 상기 1 블록으로부터의 추론적 경로들을 따라 제2 블록 세트에 대응하는 엔트리 세트를 포함하는, 방법.
  9. 장치에 있어서,
    제1 인스트럭션 블록에서 제1 분기 인스트럭션의 제1 결과를 예측하도록 구성된 분기 예측기;
    상기 제1 예측 결과에 의해 표시된 제1 경로를 따라 추론적 실행을 위한 인스트럭션들을 페치하는 페치 로직; 및
    상기 제1 예측 결과가 취득되는 것에 응답하여 상기 제1 블록의 나머지를 나타내는 정보를 저장하는 상기 분기 예측기의 대체 예측 저장 어레이를 포함하며,
    상기 제1 분기 인스트럭션이 수행되지 않는 것에 응답하여, 상기 분기 예측기는 상기 나머지를 나타내는 상기 정보에 기초하여 재시작되는, 장치.
  10. 제9항에 있어서, 상기 분기 예측기는 상기 제1 인스트럭션 블록에서 상기 제1 분기 인스트럭션의 상기 제1 결과 및 제2 분기 인스트럭션의 제2 결과를 동시에 예측도록 구성되는, 장치.
  11. 제10항에 있어서, 상기 대체 예측 저장 어레이는 상기 제1 예측 결과가 취득되고 상기 제1 경로가 상기 제2 분기 인스트럭션을 포함하지 않는 것에 응답하여 상기 제2 예측 결과를 나타내는 정보를 포함하는 나머지 블록을 저장하도록 구성되는, 장치.
  12. 제10항에 있어서, 상기 분기 예측기는 상기 제2 예측 결과를 나타내는 상기 나머지 블록의 상기 정보에 기초하여 재시작되는, 장치.
  13. 제10항에 있어서, 상기 분기 예측기는,
    상기 제2 예측 결과가 상기 제2 분기 인스트럭션이 수행됨을 나타내는 것에 응답하는 상기 제2 분기 인스트럭션의 타겟 주소;
    상기 제2 예측 결과가 상기 제2 분기 인스트럭션이 수행되지 않고 상기 제1 블록이 적어도 하나의 제3 분기 인스트럭션을 포함함을 나타내는 것에 응답하는 상기 제2 분기 인스트럭션에 후속하는 인스트럭션의 주소; 및
    상기 제2 예측 결과가 상기 제2 분기 인스트럭션이 수행되지 않고 상기 제1 블록이 상기 적어도 하나의 제3 분기 인스트럭션을 포함하지 않음을 나타내는 것에 응답하는 상기 제1 블록의 경계 중 하나에 의해 식별된 제2 블록에서 분기 예측을 시작하기 위해 재시작되는, 장치.
  14. 제9항에 있어서, 상기 제1 블록은 후속 메모리 경계까지 제2 분기 인스트럭션을 포함하지 않으며, 상기 나머지 블록은 후속 메모리 경계까지 상기 제2 분기 인스트럭션을 포함하지 않음을 나타내는 정보를 포함하는, 장치.
  15. 제14항에 있어서, 상기 분기 예측기는 상기 나머지 블록에 표시된 상기 후속 메모리 경계에서 재시작하도록 구성되는, 장치.
  16. 제9항에 있어서,
    상기 제1 블록으로부터의 추론적 경로를 따라 제2 블록 세트에 대응하는 엔트리 세트를 저장하도록 구성된 분기 예측 구조로서, 상기 분기 예측기는 상기 제1 블록의 주소를 인덱스로 사용하여 상기 분기 예측 구조에 액세스하도록 구성되는, 상기 분기 예측 구조를 더 포함하는, 장치.
  17. 방법에 있어서,
    분기 예측기에서, 제1 인스트럭션 블록에서 제1 분기 인스트럭션의 제1 결과를 예측하는 단계;
    상기 분기 예측기의 대체 예측 저장 어레이에서, 상기 제1 결과가 취득될 것으로 예측되는지 수행되지 않을 것으로 예측되는지 여부에 기초하여 나머지 블록을 선택적으로 저장하는 단계로서, 상기 나머지 블록은 상기 제1 블록의 나머지를 나타내는, 상기 저장하는 단계; 및
    상기 제1 분기 인스트럭션이 수행될 것으로 예측되고 상기 제1 분기 인스트럭션의 실제 결과가 취득되지 않는 것에 응답하여, 상기 나머지 블록에 기초하여 상기 분기 예측기를 재시작하는 단계를 포함하는, 방법.
  18. 제17항에 있어서, 상기 나머지 블록을 선택적으로 저장하는 단계는 상기 제1 블록의 제2 분기 인스트럭션의 제2 예측 결과를 나타내는 정보 및 상기 제1 블록이 후속 메모리 경계까지 임의의 분기 인스트럭션들을 포함하지 않음을 나타내는 정보 중 적어도 하나를 저장하는 단계를 포함하는, 방법.
KR1020217000083A 2018-06-04 2019-05-22 예측 실패 복구에 대한 레이턴시를 줄이기 위한 이차적 분기 예측 저장 KR20210018415A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/997,344 US20190369999A1 (en) 2018-06-04 2018-06-04 Storing incidental branch predictions to reduce latency of misprediction recovery
US15/997,344 2018-06-04
PCT/US2019/033511 WO2019236294A1 (en) 2018-06-04 2019-05-22 Storing incidental branch predictions to reduce latency of misprediction recovery

Publications (1)

Publication Number Publication Date
KR20210018415A true KR20210018415A (ko) 2021-02-17

Family

ID=68693792

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217000083A KR20210018415A (ko) 2018-06-04 2019-05-22 예측 실패 복구에 대한 레이턴시를 줄이기 위한 이차적 분기 예측 저장

Country Status (6)

Country Link
US (1) US20190369999A1 (ko)
EP (1) EP3803577A4 (ko)
JP (1) JP2021527248A (ko)
KR (1) KR20210018415A (ko)
CN (1) CN112384894A (ko)
WO (1) WO2019236294A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2577051B (en) * 2018-09-11 2021-03-03 Advanced Risc Mach Ltd Branch prediction using branch target buffer
US11379239B2 (en) 2019-03-26 2022-07-05 Arm Limited Apparatus and method for making predictions for instruction flow changing instructions
US10901742B2 (en) * 2019-03-26 2021-01-26 Arm Limited Apparatus and method for making predictions for instruction flow changing instructions
US11915002B2 (en) * 2022-06-24 2024-02-27 Microsoft Technology Licensing, Llc Providing extended branch target buffer (BTB) entries for storing trunk branch metadata and leaf branch metadata

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4991080A (en) * 1986-03-13 1991-02-05 International Business Machines Corporation Pipeline processing apparatus for executing instructions in three streams, including branch stream pre-execution processor for pre-executing conditional branch instructions
JPH0820950B2 (ja) * 1990-10-09 1996-03-04 インターナショナル・ビジネス・マシーンズ・コーポレイション マルチ予測型分岐予測機構
US5848433A (en) * 1995-04-12 1998-12-08 Advanced Micro Devices Way prediction unit and a method for operating the same
US5903750A (en) * 1996-11-20 1999-05-11 Institute For The Development Of Emerging Architectures, L.L.P. Dynamic branch prediction for branch instructions with multiple targets
US6502188B1 (en) * 1999-11-16 2002-12-31 Advanced Micro Devices, Inc. Dynamic classification of conditional branches in global history branch prediction
US6976156B1 (en) * 2001-10-26 2005-12-13 Lsi Logic Corporation Pipeline stall reduction in wide issue processor by providing mispredict PC queue and staging registers to track branch instructions in pipeline
JP2005078234A (ja) 2003-08-29 2005-03-24 Renesas Technology Corp 情報処理装置
US7490229B2 (en) * 2004-03-30 2009-02-10 Sun Microsystems, Inc. Storing results of resolvable branches during speculative execution to predict branches during non-speculative execution
US7590830B2 (en) * 2004-05-28 2009-09-15 Sun Microsystems, Inc. Method and structure for concurrent branch prediction in a processor
TWI328771B (en) * 2005-07-15 2010-08-11 Nvidia Corp Pipelined central processing unit structure and method of processing a sequence of instructions
WO2007099604A1 (ja) * 2006-02-28 2007-09-07 Fujitsu Limited コンピュータの分岐予測装置
US7617387B2 (en) * 2006-09-27 2009-11-10 Qualcomm Incorporated Methods and system for resolving simultaneous predicted branch instructions
US20080209190A1 (en) * 2007-02-28 2008-08-28 Advanced Micro Devices, Inc. Parallel prediction of multiple branches
US7890739B2 (en) * 2008-02-19 2011-02-15 Oracle America, Inc. Method and apparatus for recovering from branch misprediction
EP2616928B1 (en) * 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US8874884B2 (en) * 2011-11-04 2014-10-28 Qualcomm Incorporated Selective writing of branch target buffer when number of instructions in cache line containing branch instruction is less than threshold
US9092225B2 (en) 2012-01-31 2015-07-28 Freescale Semiconductor, Inc. Systems and methods for reducing branch misprediction penalty
US10534611B2 (en) * 2014-07-31 2020-01-14 International Business Machines Corporation Branch prediction using multi-way pattern history table (PHT) and global path vector (GPV)
US20170083333A1 (en) * 2015-09-21 2017-03-23 Qualcomm Incorporated Branch target instruction cache (btic) to store a conditional branch instruction
US20170123798A1 (en) * 2015-11-01 2017-05-04 Centipede Semi Ltd. Hardware-based run-time mitigation of blocks having multiple conditional branches

Also Published As

Publication number Publication date
CN112384894A (zh) 2021-02-19
WO2019236294A1 (en) 2019-12-12
EP3803577A1 (en) 2021-04-14
EP3803577A4 (en) 2022-02-23
US20190369999A1 (en) 2019-12-05
JP2021527248A (ja) 2021-10-11

Similar Documents

Publication Publication Date Title
US11416256B2 (en) Selectively performing ahead branch prediction based on types of branch instructions
KR20210018415A (ko) 예측 실패 복구에 대한 레이턴시를 줄이기 위한 이차적 분기 예측 저장
TWI519955B (zh) 預取單元、資料預取方法以及電腦程式產品
KR20210019584A (ko) 다중 테이블 분기 타겟 버퍼
JP2016536665A (ja) 推論的ベクトル演算の実行を制御するためのデータ処理装置及び方法
KR20190039290A (ko) 분기 타깃 버퍼 압축
WO2022237585A1 (zh) 处理方法及装置、处理器、电子设备及存储介质
US20140250289A1 (en) Branch Target Buffer With Efficient Return Prediction Capability
JP7269318B2 (ja) 早期リターン予測を有する分岐ターゲットバッファ
JP2007272681A (ja) キャッシュメモリ装置及びそのキャッシュラインの入れ替え方法
US20230205700A1 (en) Selective speculative prefetch requests for a last-level cache
JP2009020695A (ja) 情報処理装置及びシステム
JP2006048422A (ja) ローディング装置、ローディング方法、ローディングプログラム及びローディングプログラムを記録したコンピュータ読み取り可能な記録媒体
JP5068552B2 (ja) プリフェッチ方法、及びキャッシュ機構用ユニット
JP4728877B2 (ja) マイクロプロセッサおよびパイプライン制御方法
US20220075624A1 (en) Alternate path for branch prediction redirect
CN103514124B (zh) 缩短存储操作繁忙时间
KR20240072241A (ko) 재참조 간격 예측 캐시 교체 정책을 위한 재참조 표시자
JP2014059665A (ja) マイクロコンピュータ及びマイクロコンピュータにおける命令処理方法
JP2016139332A (ja) 検証支援方法、検証支援プログラム、および検証支援装置