KR20230084140A - 제어 독립성 기술을 채용한 프로세서에서 처리되는 명령어에 대한 추론성 예측을 행하는 데 사용된 추론성 이력의 복원 - Google Patents

제어 독립성 기술을 채용한 프로세서에서 처리되는 명령어에 대한 추론성 예측을 행하는 데 사용된 추론성 이력의 복원 Download PDF

Info

Publication number
KR20230084140A
KR20230084140A KR1020237010307A KR20237010307A KR20230084140A KR 20230084140 A KR20230084140 A KR 20230084140A KR 1020237010307 A KR1020237010307 A KR 1020237010307A KR 20237010307 A KR20237010307 A KR 20237010307A KR 20230084140 A KR20230084140 A KR 20230084140A
Authority
KR
South Korea
Prior art keywords
instruction
prediction
conditional control
speculative
instructions
Prior art date
Application number
KR1020237010307A
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 KR20230084140A publication Critical patent/KR20230084140A/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, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/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, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers

Abstract

프로세서에서 처리되는 명령어에 대한 추론성 예측을 행하기 위해 사용되는 추론성 이력을 복원하는 것이 개시된다. 프로세서는 조건부 제어 명령어의 상태가 실행 시에 완전히 평가되기 전에 조건부 제어 명령어의 상태 또는 술어의 결과를 추론적으로 예측하도록 구성될 수 있다. 예측은 과거 예측의 결과를 기반으로 업데이트되는 이력에 기반하여 프로세서에 의해 행해진다. 조건부 제어 명령어가 실행 시에 오예측된다면, 프로세서는, 명령어 파이프라인을 중단시키고, 명령어 파이프라인에서 오예측된 조건부 제어 명령어에 대해 보다 신생의 명령어를 다시 플러시하고, 그리고 그 후 정확한 명령어 흐름 경로에 실행을 위한 명령어를 재인출함으로써 오예측 복구를 수행할 수 있다. 프로세서는 보다 신생의 제어 독립성(CI) 조건부 제어 명령어와 연관된 추론성 이력의 엔트리를 복원하도록 구성될 수 있으므로, 오예측 복구 시에 재인출되지 않는 CI 명령어에 후속하는 보다 신생의 인출된 명령어는 보다 정확한 추론성 이력을 사용하게 될 것이다.

Description

제어 독립성 기술을 채용한 프로세서에서 처리되는 명령어에 대한 추론성 예측을 행하는 데 사용된 추론성 이력의 복원
본 개시내용의 기술은 일반적으로 프로세서의 명령어 파이프라인(instruction pipeline)에서 제어 흐름 컴퓨터 명령어("명령어")의 추론성 예측(speculative prediction)에 관한 것으로, 보다 구체적으로, 실행 시 제어 흐름 명령어의 추론성 예측이 오예측으로 결정된 후의 오예측 복구(misprediction recovery)에 관한 것이다.
명령어 파이프라이닝(instruction pipelining)은 프로세서에 의해 실행되는 컴퓨터 명령어의 처리량을 각 명령어의 처리를 일련의 단계(a series of steps)로 분할함으로써 증가시킬 수 있는 처리 기술이다. 이러한 단계는 다수의 스테이지(multiple stages)로 구성된 실행 파이프라인(execution pipeline)에서 실행된다. 실행 파이프라인 내의 모든 스테이지가 명령어들을 동시에 처리할 수 있다면 그리고 명령어 파이프라인(들) 내에서 명령어들이 순차적으로 순서화되면 최적의 프로세서 성능을 얻을 수 있다. 그러나, 명령어 파이프라인에서는 부정확한 계산 결과를 초래하지 않고는 다음 명령어를 실행할 수 없는 구조적 위험이 발생할 수 있다. 예를 들어, 프로세서에서 정확한 인터럽트를 유발하는 제어 흐름 명령어의 실행 결과로서 제어 위험이 발생할 수 있다. 제어 위험을 유발할 수 있는 제어 흐름 명령어의 일 예는 조건부 분기 명령어(conditional branch instruction)이다. 조건부 분기 명령어와 같은 조건부 제어 명령어는 제어 분기 명령어의 상태가 실행될 때 평가된 상태(condition)에 따라 명령어 실행의 흐름 경로를 재지정할 수 있다. 결과적으로, 프로세서는 조건부 제어 명령어가 실행될 때까지는 추가 명령어의 인출을 중단해야 하므로, 프로세서 성능은 저하되고 전력 소비는 증가할 수 있다.
프로세서 성능을 최대화하기 위한 하나의 접근법은 명령어 실행 흐름 경로를 제어할 상태의 결과를 추론성으로 예측하기 위해 예측 회로를 이용하는 것을 포함한다. 예를 들어, 조건부 분기 명령어가 취해질 것인지의 예측은 이전 조건부 분기 명령어의 분기 예측 이력에 기반할 수 있다. 제어 흐름 명령어가 최종적으로 명령어 파이프라인의 실행 스테이지에 도달하여 실행되면, 제어 흐름 명령어의 최종적인 타겟 어드레스는 제어 흐름 명령어가 인출되었을 때 이미 예측된 타겟 어드레스와 비교함으로써 확인(verified)된다. 예측된 어드레스와 실제 타겟 어드레스가 매칭되는 경우(정확한 예측이 이루어졌음을 의미함), 명령어 실행에는 지연이 발생하지 않는데, 그 이유는 조건부 분기 명령어가 명령어 파이프라인의 실행 스테이지에 도달할 때 타겟 어드레스의 후속 명령어가 정확하게 인출되어, 명령어 파이프라인에 이미 존재하고 있을 것이기 때문이다. 그러나, 예측된 어드레스와 실제 타겟 어드레스가 매칭되지 않으면, 명령어 파이프라인에서 정확한 인터럽트를 유발하는 오예측된 분기 위험이 발생한다. 결과적으로, 명령어 파이프라인이 플러시되고, 명령어 파이프라인 인출 유닛이 타겟 어드레스에서 시작하는 새로운 명령어를 인출하도록 재지정되어 지연 및 성능 저하를 유발한다. 이것은 또한 "오예측 페널티(misprediction penalty)"라고도 알려져 있다. 또한, 실행 파이프라인 내의 스테이지는 새로 인출된 명령어가 명령어 파이프라인을 통해 실행 스테이지로 이동할 때까지는 휴면 상태로 유지되어 성능이 저하될 수 있다. 프로세서에서 명령어 처리의 오예측은 결과적인 지연 및 성능 저하 측면에서 비용이 많이 든다.
오예측 페널티를 낮추기 위한 한 가지 방법은 제어 독립성 기술을 사용하는 것이다. 제어 독립성(control independence)(CI)은 명령어 제어 흐름 경로 방향에 관계없이 실행되는 명령어 영역을 의미한다. 다시 말해서, CI 명령어는 분기의 제어 결정과는 독립적이다. 이것은 플로우차트(102)의 형태로 도시된 도 1의 명령어 스트림(100)에 예로서 도시되어 있다. 명령어 스트림(100)은 조건부 분기 명령어(104)를 포함한다. 명령어 실행 흐름 경로는 조건부 분기 명령어(104)의 상태(즉, 술어)의 결정에 따라 흐름 경로 106(1) 또는 흐름 경로 106(2)를 취할 것이다. 프로세서는 조건부 분기 명령어(104)가 명령어 파이프라인의 실행 스테이지에 도달하기 전에 술어의 결과를 추론적으로 예측할 수 있고, 계속 진행하여 예측된 흐름 경로의 명령어를 처리 지연을 피하도록 실행될 명령어 파이프라인 내에 삽입할 수 있다. 명령어 스트림(100)의 제각기의 CD(control dependent) 영역 110(1) 및 110(2) 내의 두 개의 제각기의 명령어 제어 흐름 경로 106(1) 및 106(2) 중 하나 내에 있는 명령어 108(1) 및 108(2)는 CD 명령어 108(1) 및 108(2)이다. CD 명령어는 조건부 분기 명령어(104)의 술어의 결정에 기반하여 취해진 흐름 경로 106(1) 및 106(2)에 따라서만 실행되는 명령어이다. 명령어 스트림(100)의 CI 영역(114) 내에는, 명령어 파이프라인에 삽입되고, 조건부 분기 명령어(104)로부터의 결과로서 어떤 명령어 제어 흐름 경로 106(1) 및 106(2)가 선택되는지에 관계없이, 실행되는 다른 명령어(112)가 있다. 이들 명령어(112)는 또한 CI 명령어(112)로도 알려져 있다. CI 명령어(112)은 제각기의 CD 영역 110(1) 또는 110(2)에서 취해진 흐름 경로 106(1) 및 160(2)의 CD 명령어 108(1) 또는 108(2)에 대한 그들의 데이터 종속성에 기반하여 추가로 분류될 수 있다. CI 명령어(112)(예컨대, 로드 명령어)가 명령어 스트림(100)의 CD 영역 110(1) 또는 110(2)에서 CD 명령어 108(1) 또는 108(2)(예컨대, 저장 명령어)에 의해 생성된 데이터에 종속하는 경우, CI 명령어(112)는 CI, 데이터 종속성(DD)(CIDD) 명령어(112D)이고; 그렇지 않으면, CI, 데이터 독립성(DI)(CIDI) 명령어(112I)이다.
도 1의 명령어 스트림(100) 내의 명령어를 실행할 때 수행되는 제어 독립성 기술은 명령어 스트림(100)의 CI 영역(114) 내의 CI 명령어(112) 중에서 CIDD 명령어(112D)를 식별한다. 제어 독립성 기술은 기능적 정확성을 보장하기 위해 오예측 복구의 일부로서 CIDD 명령어(112D)를 재실행하는 것을 포함한다. 이는, CI 명령어(112) 내의 CIDD 명령어(112D)가 취해진 흐름 경로 106(1) 및 106(2)에 관계없이, 프로세서에 의해 실행될 명령어 파이프라인에 삽입되는 동안, 조건부 분기 명령어(104)의 추론성 예측에 기반하여 실행된 CD 명령어 108(1) 또는 108(2)는 오예측 복구 시에 실행되지 않을 것이기 때문이다. 대신에, 조건부 분기 명령어(104)의 추론성 예측에 기반하여 이전에 실행되지 않았던 CD 명령어 108(1) 또는 108(2)는 오예측 복구 시에 실행될 것이다. 이는, 추론적 오예측에 기반하여 이전에 실행되었던 CD 명령어 108(1) 및 108(2)에 의해 생성되어, CIDD 명령어(112D)에 의해 소비된 데이터가 정확하지 않을 수 있음을 의미한다. 오예측 복구는 오예측 복구 시에 실행되는 CD 명령어 108(1) 또는 108(2)로부터의 CD 생성 데이터를 효과적으로 추가한다. 따라서, 오예측 복구는 추론적 오예측에 기반하여 실행되었던 CD 명령어 108(1) 또는 108(2)를 효과적으로 "제거"하여, 그들의 CD 생성 데이터를 효과적으로 제거한다. 따라서, 추론적 오예측에 기반하여 실행되었던 임의의 로드 기반 CIDD 명령어(112D)는, 제거된 저장된 CD 데이터 및/또는 오예측 복구 이전에 추가된 다른 저장 CD 데이터에 기반했을 수 있다. 로드 기반 명령어는 로드 연산을 수행하여 메모리로부터 레지스터로 데이터를 리트리브(retrieve)하는 임의의 명령어이다.
CIDD 명령어(112D)가 오예측 복구 시에 나중에 제거되는 CD 데이터에 기반하여 실행되는 문제를 해결하기 위해, 프로세서는 오예측 복구 시에 재실행될 모든 로드 기반 CI 명령어(112)를 마킹할 수 있다. 이러한 방식으로, 로드 기반 CIDD 명령어(112D)에 영향을 미치는 임의의 추가된 저장된 CD 데이터는 오예측 복구 시에 로드 기반 CIDD 명령어(112D)의 재실행에 사용될 것이다.
본원에 개시된 예시적인 양태는 프로세서에서 처리되는 명령어에 대한 추론성 예측을 행하는 데 사용되는 추론성 이력을 복원하는 것을 포함한다. 프로세서는 연산과 연관된 값을 추론적으로 예측하도록 구성된다. 예를 들어, 프로세서는, 조건부 제어 명령어(예컨대, 조건부 분기 명령어)의 상태가 실행 시에 완전히 평가되기 전에, 조건부 제어 명령어(예컨대, 조건부 분기 명령어)의 상태 또는 술어의 결과를 추론적으로 예측하도록 구성될 수 있다. 예측은 과거 예측의 결과에 기반하여 업데이트되는 예측 이력을 기반으로 프로세서의 추론성 예측 회로에 의해 이루어진다. 예를 들어, 조건부 제어 명령어의 상태의 결과가 추론적으로 예측된 후, 나중의 실행 시에 이전에 오예측된 것으로 결정되는 경우, 프로세서는, 명령어 파이프라인을 중단(stall)시키고, 명령어 파이프라인에서 오예측된 조건부 제어 명령어에 대해 보다 신생(younger)의 명령어를 다시 플러시하고, 그 후 정확한 명령어 흐름 경로에 실행을 위한 명령어를 재인출함으로써, 오예측 복구를 수행할 수 있다. 프로세서는, 오예측 복구 시에 오예측된 조건부 제어 명령어에 대한 예측 이력의 추론성 부분("추론성 이력")을 다시 복원하고, 오예측된 조건부 제어 명령어에 대한 추론성 이력의 오예측을 수정하도록 구성된다. 정확한 명령어 흐름 경로에서 오예측된 조건부 제어 명령어에 후속하는 인출된 보다 신생의 조건부 제어 명령어의 추론성 예측은 추론성 이력을 다시 업데이트할 것이다. 추론성 이력의 복원은 미래의 조건부 제어 명령어(또는 추론성 이력에 기반하여 행해진 다른 추론)가 정확한 예측을 제공하기 위한 올바른 역사적 맥락을 갖도록 수행된다. 보다 정확한 추론성 예측은 오예측 복구를 줄일 수 있으므로, 오예측 복구와 연관된 플러시 이벤트, 오버헤드 및 파이프라인 중단(pipeline stall)을 감소시킬 수 있다.
오예측된 조건부 제어 명령어에 후속하는 보다 신생의 모든 제어 독립성(CI) 명령어를 플러시할 필요성을 방지하여 오예측 복구 시의 복구 시간을 개선하기 위해, 프로세서는 제어 독립성 기술을 사용할 수 있다. 예를 들어, 제어 독립성 기술은 오예측 복구 시에 이러한 CIDI 명령어를 재인출할 필요 없이, 보다 신생의 CI, 데이터 독립성(DI)(CIDI) 명령어를 식별하고 재생하는 것을 포함할 수 있다. 이는, 보다 노령의 조건부 제어 명령어에 후속하는 보다 신생의 CIDI 명령어가 부정확한 명령어 흐름 경로에서 인출되고 처리되었을 수도 있는 명령어에 대해 제어 종속성도 아니고 데이터 종속성도 아니기 때문이다. 그러나, 프로세서가 보다 신생의 CIDI 명령어를 플러시하는 것을 방지하기 위해 제어 독립성 기술을 사용하는 경우에도, 보다 신생의 CIDI 조건부 제어 명령어의 추론성 예측을 행하는 데 사용되는 추론성 이력은 오예측 복구 전의 부정확한 명령어 흐름 경로에서 이전에 처리된, 보다 신생의 제어 종속성(CD) 조건부 제어 명령어에 기반하여 업데이트되었을 수도 있다. 이는, 오예측 복구가 있는 경우에도, 부정확한 명령어 흐름 경로에서 CD 조건부 제어 명령어에 후속하는 보다 신생의 CIDI 조건부 제어 명령어가 부정확한 추론성 이력으로 예측되었을 수도 있음을 의미한다. 따라서, 추론성 이력이 간단히 복구되면, 추론성 이력은, 부정확한 명령어 흐름 경로가 처리되었을 때 CIDI 명령어가 플러시되지 않기 때문에, 오예측 복구 전에 CIDI 명령어에 대해 이전에 행해진 예측에 대한 정보를 포함할 것이다.
따라서, 본원에 개시된 예시적인 양태에서, 오예측 복구 시에 오예측된 조건부 제어 명령어에 대한 추론성 이력을 다시 복원하는 것 외에도, 프로세서는 또한 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 엔트리를 복원하도록 구성될 수 있다. 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 엔트리는 다시 업데이트되지 않을 수 있는데, 그 이유는 모든 CI 조건부 제어 명령어가 프로세서에 의해 수행되는 제어 독립성 기술에 따라 재인출 및 처리되지 않을 수 있기 때문이다. 따라서, 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 복구 엔트리가 복원되지 않는다면, 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 이러한 엔트리는 업데이트되지 않은 상태로 남을 수 있다(예컨대, 모두 취해지거나 취해지지 않은 것으로 취급될 수 있다). 따라서, 이 경우, 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 엔트리는 복원된 추론성 이력의 일부로 복원되지는 않을 것이다. 이로 인해, 오예측 복구 시에 재인출되지 않는 CI 조건부 제어 명령어(non-re-fetched CI conditional control instruction)에 후속하는 오예측 복구 후의 보다 신생의 인출된 조건부 제어 명령어는 보다 노령의 재인출되지 않는 CI 조건부 제어 명령어에 대해 복원되지 않은 추론성 이력 정보를 포함하는 덜 정확한 추론성 이력을 사용할 수 있다. 이것은 덜 정확한 추론성 예측을 초래할 수 있다. 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 엔트리를 복원함으로써, 오예측 복구 시에 재인출되지 않는 CI 명령어에 후속하는 보다 신생의 인출된 조건부 제어 명령어는 보다 노령의 재인출되지 않는 CI 조건부 제어 명령어에 대해 복원된 추론성 이력 정보를 포함하는 보다 정확한 추론성 이력을 사용할 것이다.
다른 예시적인 양태에서, 오예측된 조건부 제어 명령어 및 보다 신생의 CI 명령어의 추론성 이력을 복원하는 것 외에도, 프로세서는 또한 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 엔트리를 수정하도록 구성될 수 있다. 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 복원 엔트리는 정확하지 않을 수 있는데, 그 이유는 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 이러한 엔트리가 부정확한 명령어 흐름 경로에서의 보다 노령의 CD 명령어 및/또는 오예측 복구 시에 재인출 및 재처리되는 보다 노령의 CI, 데이터 종속성(DD)(CIDD) 명령어로부터의 추론성 이력에 대한 이전의 업데이트에 기반할 수도 있기 때문이다. 따라서, 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 복구 엔트리가 복원되는 것 외에도 수정되지 않으면, 오예측 복구 시에 재인출되지 않는 CI 조건부 제어 명령어에 후속하는 보다 신생의 인출된 조건부 제어 명령어에 대한 추론성 예측은 보다 노령의 재인출되지 않는 CI 조건부 제어 명령어에 대해 수정되지 않은 추론성 이력 엔트리를 포함하는 추론성 이력을 사용할 수 있다. 이것은 덜 정확한 추론성 예측을 초래할 수 있다. 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 엔트리를 수정함으로써, 오예측 복구 시에 재인출되지 않는 CI 명령어에 후속하는 보다 신생의 인출된 조건부 제어 명령어는 보다 노령의 재인출되지 않는 CI 조건부 제어 명령어에 대해 수정된 추론성 이력 정보를 포함하는 정확한 추론성 이력을 사용할 것이다.
이와 관련하여, 일 예시적인 양태에서, 프로세서가 제공된다. 프로세서는 하나 이상의 명령어 파이프라인을 포함하는 명령어 처리 회로를 포함한다. 프로세서는 또한 추론성 예측 이력 표시자를 포함한다. 명령어 처리 회로는 추론성 예측 이력 표시자에 기반하여 명령어 파이프라인에서 명령어 스트림 내의 조건부 제어 명령어의 상태를 추론적으로 예측하도록 구성된다. 명령어 처리 회로는 또한 명령어 스트림 내의 조건부 제어 명령어에 후속하는 제1 CD 명령어 영역 내의 하나 이상의 CD 조건부 제어 명령어의 상태를 추론적으로 예측하도록 구성된다. 명령어 처리 회로는 또한 명령어 스트림 내의 제1 CD 명령어 영역에 후속하는 CI 명령어 영역에서 하나 이상의 CI 조건부 제어 명령어의 상태를 추론적으로 예측하도록 구성된다. 명령어 처리 회로는 또한 CI 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 업데이트하도록 구성된다. 명령어 처리 회로는 또한 조건부 제어 명령어를 실행하여 조건부 제어 명령어의 상태를 결정하도록(resolve) 구성된다. 추론성 예측이 조건부 제어 명령어의 실행에서 결정된 상태와 매칭되지 않는다는 것에 응답하여, 명령어 처리 회로는 또한 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 저장하고, 조건부 제어 명령어의 결정된 상태에 기반하여 조건부 제어 명령어의 제2 CD 명령어 영역 내의 하나 이상의 CD 명령어를 인출하고, 제2 CD 명령어 영역 내의 하나 이상의 CD 조건부 제어 명령어의 상태를 추론적으로 예측하고, 그리고 추론성 예측 이력 표시자 내의 저장된 하나 이상의 CI 예측 엔트리를 복원하도록 구성된다.
다른 예시적인 양태에서, 프로세서에서 조건부 제어 명령어에 대한 추론성 예측을 행하기 위해 사용되는 추론성 이력을 복원하는 방법이 제공된다. 방법은 추론성 예측 이력 표시자에 기반하여 명령어 파이프라인에서 명령어 스트림 내의 조건부 제어 명령어의 상태를 추론적으로 예측하는 단계를 포함한다. 방법은 또한 명령어 스트림 내의 조건부 제어 명령어에 후속하는 제1 CD 명령어 영역 내의 하나 이상의 CD 조건부 제어 명령어의 상태를 추론적으로 예측하는 단계를 포함한다. 방법은 또한 명령어 스트림 내의 제1 CD 명령어 영역에 후속하는 CI 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 상태를 추론적으로 예측하는 단계를 포함한다. 방법은 또한 CI 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 업데이트하는 단계를 포함한다. 방법은 또한 조건부 제어 명령어의 상태를 결정하기 위해 조건부 제어 명령어를 실행하는 단계를 포함한다. 추론성 예측이 조건부 제어 명령어의 실행에서 결정된 상태와 매칭되지 않는다는 것에 응답하여, 방법은 또한 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 저장하는 단계, 조건부 제어 명령어의 결정된 상태에 기반하여 조건부 제어 명령어의 제2 CD 명령어 영역 내의 하나 이상의 CD 명령어를 인출하는 단계, 제2 CD 명령어 영역 내의 하나 이상의 CD 조건부 제어 명령어의 상태를 추론적으로 예측하는 단계, 및 추론성 예측 이력 표시자 내의 저장된 하나 이상의 CI 예측 엔트리를 복원하는 단계를 포함한다.
본 기술 분야의 기술자는 첨부된 도면과 관련하여 바람직한 실시예에 대한 다음의 상세한 설명을 읽은 후에 본 개시내용의 범위를 이해하고 그 추가적인 양태를 실현할 것이다.
본 명세서에 포함되고 본 명세서의 일부를 형성하는 첨부된 도면은 본 개시내용의 여러 양태를 예시하고, 설명과 함께 본 개시내용의 원리를 설명하는 역할을 한다.
도 1은 조건부 분기 명령어, 조건부 분기 명령어의 술어의 예측 또는 결정으로부터 취해진 명령어 제어 흐름 경로에 따라 실행되는 제어 종속성(CD) 명령어, 및 조건부 분기 명령어로부터 취해진 명령어 제어 흐름 경로에 관계없이 실행되는 제어 독립성(CI) 명령어를 예시하는 플로우차트 형태의 명령어 스트림이다.
도 2는 추론성 이력에 기반하여 추론성 예측을 행하도록 구성된 추론성 예측 회로를 포함하는 예시적인 명령어 처리 회로를 포함하는 예시적인 프로세서의 다이어그램으로서, 여기서 프로세서는 오예측 복구 시에 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 엔트리를 복원하도록 구성된다.
도 3a는 도 2의 명령어 처리 회로에 의해 명령어 파이프라인 내로 명령어 스트림으로서 인출되는 순차적인 조건부 제어 명령어 및 추론성 예측 회로에 의해 각각의 조건부 제어 명령어에 대해 행해진 각각의 조건부 제어 명령어의 상태에 대한 추론성 예측을 예시하는 예시적인 예측 분기 복구 트레이스 레코드의 다이어그램이다.
도 3b는 도 2의 명령어 처리 회로에 의해 명령어 파이프라인 내로 명령어 스트림으로서 인출되는 순차적인 조건부 제어 명령어 및 실행 시에 실제로 결정된 조건부 제어 명령어의 상태를 예시하는 예시적인 실제 분기 복구 트레이스 레코드의 다이어그램이다.
도 3c는 추론성 예측을 행하기 위한 도 2의 추론성 예측 회로에 의해 사용되는 예시적인 비추론성 이력의 다이어그램이다.
도 3d는 도 2의 조건부 제어 명령어에서 추론성 예측을 하기 위한 추론성 예측 회로에 의해 사용되는 오예측 복구 전의, 도 3a 및 도 3b의 조건부 제어 명령어의 추론성 예측에 기반한 예시적인 추론성 이력, 및 오예측 복구로 인한 복원된 추론성 이력의 다이어그램이다.
도 4는 오예측 복구 시에 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 엔트리를 복원하는 도 2의 명령어 처리 회로의 예시적인 프로세스를 예시하는 플로우차트이다.
도 5는 도 2의 프로세서에서, 도 2의 명령어 처리 회로에 의해 명령어 스트림으로서 인출되는 순차적인 조건부 제어 명령어에 대한 캡처된 정보 및 각각의 조건부 제어 명령어의 추론성 예측 및 실제 결정된 상태를 예시하는 오예측 복구 전의 예시적인 분기 재정렬 버퍼(BRB) 회로의 다이어그램이다.
도 6은 도 2의 프로세서에서, 명령어 스트림에서 명령어 파이프라인 내로 인출되는 조건부 제어 명령어와 비교하여 조건부 제어 명령어의 순서화 위반을 예시하는 오예측 복구 후의 BRB 회로의 다이어그램이다.
도 7a 내지 도 7c는 도 2의 프로세서에서 또 다른 예시적인 BRB 회로의 다이어그램들로서, 이러한 예시적인 BRB 회로는 제각기 플러시 이벤트 전후에 그리고 재수렴 후에 명령어 스트림에서 명령어 파이프라인 내로 인출되는 다음 조건부 제어 명령어를 가리키도록 인덱싱되어, 명령어 스트림에서 명령어 파이프라인 내로 인출되는 조건부 제어 명령어의 적절한 순서를 유지하도록 구성된다.
도 8a는 도 3a의 예측된 분기 복구 트레이스 레코드의 다이어그램이다.
도 8b는 도 3b의 실제 분기 복구 트레이스 레코드의 다이어그램이다.
도 8c는 도 3c의 비추론성 이력의 다이어그램이다.
도 8d는 도 2의 조건부 제어 명령어에서 추론성 예측을 행하기 위한 추론성 예측 회로에 의해 사용되는 오예측 복구 전의, 도 8a 및 도 8b의 조건부 제어 명령어의 추론성 예측에 기반한 예시적인 추론성 이력, 및 오예측 복구로 인한 복원되고 정확한 추론성 이력의 다이어그램이다.
도 9는 실행을 위한 컴퓨터 명령어를 처리하기 위한 하나 이상의 명령어 파이프라인을 갖는 명령어 처리 회로 및 프로세서를 포함하는 예시적인 프로세서 기반 시스템의 블록도이고, 여기서 프로세서는 도 2의 프로세서를 제한 없이 포함하여, 오예측 복구 시에 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 엔트리를 복원하도록 구성된다.
본원에 개시된 예시적인 양태는 프로세서에서 처리되는 명령어에 대한 추론성 예측을 행하는 데 사용되는 추론성 이력을 복원하는 것을 포함한다. 프로세서는 연산과 연관된 값을 추론적으로 예측하도록 구성된다. 예를 들어, 프로세서는 조건부 제어 명령어(예컨대, 조건부 분기 명령어)의 상태가 실행 시에 완전히 평가되기 전에 조건부 제어 명령어(예컨대, 조건부 분기 명령어)의 상태 또는 술어의 결과를 추론적으로 예측하도록 구성될 수 있다. 예측은 과거 예측의 결과를 기반으로 업데이트되는 예측 이력에 기반하여 프로세서 내의 추론성 예측 회로에 의해 이루어진다. 예를 들어, 조건부 제어 명령어의 상태의 결과가 추론적으로 예측된 후, 실행 시에 이전에 오예측된 것으로 나중에 결정되는 경우, 프로세서는, 명령어 파이프라인을 중단시키고, 명령어 파이프라인에서 오예측된 조건부 제어 명령어에 대해 보다 신생의 명령어를 다시 플러시하고, 그리고 그 후 정확한 명령어 흐름 경로에 실행을 위한 명령어를 재인출함으로써 오예측 복구를 수행할 수 있다. 본원에 개시된 예시적인 양태에서, 프로세서는 보다 신생의 제어 독립성(CI) 조건부 제어 명령어와 연관된 추론성 이력의 엔트리를 복원하도록 구성될 수 있다. 보다 신생의 CI 조건부 제어 명령어와 연관된 추론성 이력의 엔트리를 복원함으로써, 오예측 복구 시에 재인출되지 않는 CI 명령어에 후속하는 보다 신생의 인출된 명령어는 보다 노령의 재인출되지 않는 CI 명령어에 대해 복원된 추론성 이력 정보를 포함하는 보다 정확한 추론성 이력을 사용할 것이다.
도 3a에서 시작하는 프로세서에서 처리되는 명령어에 대한 추론성 예측을 행하는 데 사용되는 추론성 이력을 복원하는 예를 설명하기 전에, 프로세서 기반 시스템(202)의 예시적인 프로세서(200)가 먼저 도 2와 관련하여 아래에서 설명된다.
이와 관련하여, 도 2는 프로세서 기반 시스템(202)의 일부인 예시적인 프로세서(200)의 다이어그램이다. 프로세서(200)는 비제한적인 예로서 순차적인 또는 비순차적인 프로세서(out-of-order processor)(OoP)일 수 있다. 프로세서(200)는 명령어 메모리(210)로부터 명령어(208)를 인출하도록 구성된 명령어 인출 회로(206)를 포함하는 명령어 처리 회로(204)를 포함한다. 명령어 메모리(210)는 일 예로서 프로세서 기반 시스템(202)의 시스템 메모리 내에 제공되거나 시스템 메모리의 일부로서 제공될 수 있다. 이 예에서 명령어 인출 회로(206)는 명령어 처리 회로(204) 내에서 명령어 스트림(212)으로서 명령어 파이프라인(IP) 내로 인출된 명령어(208F)로서 명령어(208)를 제공하여, 디코드 회로(214)에서 디코딩되고 디코딩된 명령어(208D)로서 처리된 후, 실행 회로(216)에서 실행되도록 구성된다. 디코딩된 명령어(208D)를 실행하는 것으로부터 실행 회로(216)에 의해 생성된 생성된 값은 디코딩된 명령어(208D)의 목적지에 의해 표시된 저장 위치에 커밋(즉, 라이트백)된다. 이 저장 위치는, 예로서, 프로세서 기반 시스템(202) 내의 메모리(218)일 수 있거나 물리적 레지스터 파일(physical register file)(PRF)(220) 내의 물리적 레지스터 P0 내지 Px일 수 있다.
계속해서 도 2를 참조하면, 인출된 명령어(208F)가 디코딩된 명령어(208D)로 디코딩되면, 디코딩된 명령어(208D)는 명령어 처리 회로(204)의 재명명/할당 회로(222)에 제공된다. 재명명/할당 회로(222)는 디코딩된 명령어(208D) 내의 임의의 레지스터 이름이 병렬 또는 비순차적 처리를 방지할 임의의 레지스터 종속성을 깨기 위해 재명명될 필요가 있는지를 결정하도록 구성된다. 재명명/할당 회로(222)는 또한 레지스터 맵 테이블(RMT)(224)을 호출하여, 논리적 소스 레지스터 피연산자를 재명명하고/하거나 디코딩된 명령어(208D)의 목적지 레지스터 피연산자를 PRF(220) 내의 이용 가능한 물리적 레지스터 P0 내지 Px에 기입하도록 구성된다. RMT(224)는 제각기의 논리적 레지스터 R0 내지 Rp에 매핑된(즉, 연관된) 복수의 매핑 엔트리를 포함한다. 매핑 엔트리는 PRF(220) 내의 물리적 레지스터 P0 내지 Px를 가리키는 어드레스 포인터의 형태의 정보를 저장하도록 구성된다. PRF(220) 내의 각 물리적 레지스터 P0 내지 Px는 디코딩된 명령어(208D)의 소스 및/또는 목적지 레지스터 피연산자에 대한 데이터를 저장하도록 구성된 데이터 엔트리 226(0) 내지 226(X)를 포함한다.
프로세서(200)는 또한 프로세서(200) 내의 연산과 연관된 값을 추론적으로 예측하도록 구성된 추론성 예측 회로(228)를 포함한다. 예를 들어, 추론성 예측 회로(228)는 어떠한 명령어 흐름 경로 내에서, 처리를 위한 다음 명령어(208)가 명령어 인출 회로(206)에 의해 인출되는지를 관리할 조건부 분기 명령어와 같은 조건부 제어 명령어(208)의 상태를 예측하도록 구성될 수 있다. 예를 들어, 조건부 제어 명령어(208)가 조건부 분기 명령어이면, 추론성 예측 회로(228)는 조건부 분기 명령어(208)의 상태가 나중에 실행 회로(216)에서 "취해진 것" 또는 "취해지지 않은 것"으로 결정될지 여부를 예측할 수 있다. 이 예에서, 추론성 예측 회로(228)는 예측 이력 표시자(230)를 참조하여 추론성 예측을 행하도록 구성된다. 일 예로서, 예측 이력 표시자(230)는 이전 예측의 전체 이력을 포함한다. 예측 이력 표시자(230)는 이 예에서 예측될 현재 조건부 제어 명령어(208)의 프로그램 카운터(PC)로 해싱되어 예측 테이블 회로(232) 내에 예측 인덱스를 생성한다. 예측 테이블 회로(232)는 조건부 제어 명령어(208)에 할당된 예측 인덱스에 기반하여 조건부 제어 명령어(208)에 매핑 가능한 예측 값(예컨대, 카운터 값)을 포함한다. 아래에서 더 자세히 설명되는 바와 같이, 조건부 제어 명령어(208)에 대한 예측 인덱스는 분기 재정렬 버퍼(BRB) 회로(234)에 저장될 수 있다. 예측 테이블 회로(232) 내의 인덱싱된 예측 값은 조건부 제어 명령어(208)에 대한 현재 추론성 예측을 생성하는 데 사용된다. 이러한 방식으로, 새로 인출된 조건부 제어 명령어(208F)의 예측은 명령어 처리 회로(204)에서 조건부 제어 명령어의 최근 및 과거 결정에 기반한다. 예측 값은 명령어 인출 회로(206)가 취해진 명령어 흐름 경로에 또는 취해지지 않은 명령어 흐름 경로에 조건부 분기 명령어(208)에 후속하는(즉, 보다 신생의) 다음 명령어(208)를 인출하는지 여부를 결정하는 데 사용될 것이다.
디코딩된 추론적으로 예측된 조건부 제어 명령어(208D)의 상태의 결과가 실행 시에 오예측된 것으로 결정되면, 명령어 처리 회로(204)는 오예측 복구를 수행할 수 있다. 이와 관련하여, 이 예에서, 실행 회로(216)는 커밋/플러시 회로(238)에 플러시 이벤트(236)를 발행한다. 커밋/플러시 회로(238)는, 명령어 파이프라인(IP)를 중단시키고, 명령어 처리 회로(204) 내의 명령어 파이프라인(IP) 내에 오예측된 조건부 제어 명령어(208)보다 신생의 명령어(208F, 208D)를 플러시하도록 구성된다. 이와 관련하여, 커밋/플러시 회로(238)는, 명령어 파이프라인(IP) 내로 인출된 명령어(208F)의 순서를 저장하고 유지하는 재정렬 버퍼 회로(240)를 참조하도록 구성된다. 재명명/할당 회로(222)는 디코딩된 명령어(208D)가 실행을 위해 스케줄러 회로(242)에 의해 스케줄링되기 전에, 명령어 처리 회로(204)의 순차적인 섹션의 일부로서 재정렬 버퍼 회로(240) 내의 엔트리에 디코딩된 명령어(208D)를 삽입하도록 구성된다. 스케줄러 회로(242)는 디코딩된 명령어(208D)의 종속성에 기반하여 그리고 디코딩된 명령어(208D)의 소스 데이터가 이용 가능할 때 디코딩된 명령어(208D)를 비순차적으로 실행하기 위해 스케줄링할 수 있다. 이러한 방식으로, 재정렬 버퍼 회로(240)는 커밋/플러시 회로(238)에 의해, 플러싱을 위해 오예측된 조건부 제어 명령어(208)보다 신생의 명령어(208)를 식별하는 데 사용될 수 있다. 커밋/플러시 회로(238)는 그 후 결정된 상태에 기반하여 조건부 제어 명령어(208)에 대한 정확한 명령어 흐름 경로로부터 명령어 파이프라인(IP)으로 명령어(208)를 인출할 것을 명령어 인출 회로(206)에게 지시할 수 있다.
오예측된 조건부 제어 명령어(208)가 결정되고 플러시 이벤트(236)가 생성되면, 명령어 처리 회로(204)는 또한 예측 트레이닝의 일부로서 예측 이력 표시자(230) 및 BRB 회로(234)를 업데이트하도록 구성된다. 이는, 오예측된 조건부 제어 명령어(208)에 기반한 예측 이력 표시자(230) 및 BRB 회로(234)의 이전 업데이트가 본질적으로 역전될 수 있어서 플러싱 후 정확한 명령어 흐름 경로에서 오예측된 조건부 제어 명령어(208)로부터의 것을 포함하여 조건부 제어 명령어(208)의 미래 예측에 영향을 미치지 않도록 하기 위함이다. 이와 관련하여, 예측 이력 표시자(230)는 플러시 이벤트(236)에 응답하여 업데이트되므로, 미래 예측은 조건부 제어 명령어(208)의 결정된 상태에 기반하여 예측 정확도를 향상시키게 된다. BRB 회로(234)는 또한 플러시 이벤트(236)에 응답하여 업데이트되므로, 오예측된 조건부 제어 명령어(208)를 예측하기 위해 이전에 인덱싱되고 액세스된 예측 테이블 회로(232) 내의 예측 인덱스에서의 예측 값은 오예측을 레코딩하도록 업데이트(즉, 트레이닝)된다. 예를 들어, 예측 테이블 회로(232) 내의 예측 인덱스에서의 예측 값은 오예측을 나타내기 위해 감소될 수 있다. 예측 테이블 회로(232) 내의 예측 인덱스에서의 예측 값은 정확한 예측을 나타내기 위해 증분될 수 있다. 이러한 방식으로, 예측 테이블 회로(232) 내의 예측 인덱스에서의 예측 값은 (예컨대, 취해지거나 취해지지 않은) 예측을 나타낼 뿐만 아니라, 예측 테이블 회로(232) 내의 동일한 예측 인덱스에서의 예측 값에 액세스하는 미래 예측에 대한 이러한 예측의 신뢰도 또는 강도를 나타내는 데 사용될 수 있다.
도 2의 추론성 예측 회로(228)에 의해 추론적으로 오예측된 조건부 제어 명령어(208)에 대한 오예측 복구를 더 설명하기 위해, 도 3a 내지 도 3d가 제공된다. 도 3a는 도 2의 명령어 처리 회로(204)에서 예측된 인출된 조건부 제어 명령어(208F)의 예시적인 예측 분기 복구 트레이스 레코드(300)의 다이어그램이다. 여기에 도시된 바와 같이, 도 2의 명령어 처리 회로(204)에 의해 인출된 제1 조건부 제어 명령어 208(1)은 분기 PC (BRPC) 0x1015로부터 나온 것으로 도시되어 있다. 추론성 예측 회로(228)는 이 조건부 제어 명령어 208(1)의 상태를 취해지지 않은 것(NT)으로 예측했다. 이와 관련하여, 추론성 예측 회로(228)는 예측 이력 표시자(230)를 사용하여, 전술한 바와 같이 도 2의 예측 테이블 회로(232)에 대한 예측 인덱스를 생성하여, BRPC 0x1015에서 조건부 제어 명령어 208(1)에 대한 NT 예측을 수행한다. 도 3c에 도시된 바와 같이, 이 예에서, 예측 이력 표시자(230)는 비추론성 예측 이력 표시자(230NS) 및 추론성 예측 이력 표시자(230S)로 구성된다. 비추론성 예측 이력 표시자(230NS)는 명령어 처리 회로(204)에서 이전에 실행된 조건부 제어 명령어(208)의 결정된 상태의 레코드를 각각 저장할 수 있는 결정된 엔트리(304)(예컨대, 비트)를 갖는다. 예를 들어, 결정된 엔트리(304)에 저장된 '0' 비트는 NT 결정을 나타낼 수 있고, 결정된 엔트리(304)에 저장된 '1' 비트는 취해진(T) 결정을 나타낼 수 있다. 추론성 예측 이력 표시자(230S)는 또한 명령어 처리 회로(204)에서 아직 실행되지 않은 예측된 조건부 제어 명령어(208)에 대해 행해진 미결정된 예측의 레코드를 각각 저장할 수 있는 미결정된 예측 엔트리(306)(예컨대, 비트)를 갖는 표시자이다. 다시, 일 예로서, 예측 엔트리(306)에 저장된 '0' 비트는 NT 예측을 나타내고, 예측 엔트리(306)에 저장된 '1' 비트는 T 예측을 나타낸다. 따라서, 도 3c에 도시된 바와 같이, 추론성 예측 이력 표시자(230S)에서, 미결정된 예측 엔트리(306)에 레코딩된 '010110' 비트는 NT, T, NT, T, T, NT의 순차적인 예측 이력(가장 왼쪽 비트가 가장 노령이고, 가장 오른쪽 비트가 가장 신생임)을 나타낸다. 추론성 예측 이력 표시자(230S) 내의 가장 왼쪽 예측 엔트리 306(1)에 레코딩된 비트 '0'은 조건부 제어 명령어 208(1)에 대한 NT 예측을 나타낸다. 추론성 예측 이력 표시자(230S)는 비추론성 예측 이력 표시자(230NS)에 부가되어, 조건부 제어 명령어(208)의 예측을 행하기 위해 추론성 예측 회로(228)에 의해 사용되는 예측 이력 표시자(230)를 형성한다. 이러한 방식으로, 예측 이력 표시자(230)는 결정된 예측 및 미결정된 예측을 모두 포함하는 예측의 이력을 반영한다.
계속해서 도 3a를 참조하면, 조건부 제어 명령어 208(1)의 NT 예측의 결과로서, 명령어 인출 회로(206)는 NT 명령어 흐름 경로에서 조건부 제어 명령어 208(1)에 대한 다음의 보다 신생의 명령어(208)를 인출한다. 예측된 분기 복구 트레이스 레코드(300)에 도시된 바와 같이, BRPC 0x1022에서의 조건부 제어 명령어 208(2)는 NT 명령어 흐름 경로에서 조건부 제어 명령어 208(1)에 대해 다음으로 조우되는 조건부 제어 명령어이다. 도 3a에 도시된 바와 같이, 조건부 제어 명령어 208(2)의 상태는 추론성 예측 이력 표시자(230)에 기반하여 추론성 예측 회로(228)에 의해 T로서 예측된다. 추론성 예측 이력 표시자(230S)는 도 3c에 도시된 바와 같이 조건부 제어 명령어 208(1)에 대한 NT 예측에 대해 예측 엔트리 306(1)에서의 레코딩된 '0'을 갖는다. 추론성 예측 회로(228)는 그 후 조건부 제어 명령어 208(2)에 대한 T 예측을 도 3c에 도시된 바와 같이 예측 이력 표시자(230)의 추론성 예측 이력 표시자(230S)에 '1' 비트로서 레코딩한다. 이는 미래의 예측이 조건부 제어 명령어 208(1) 및 조건부 제어 명령어 208(2)에 대한 레코딩된 예측을 포함하는 업데이트된 추론성 예측 이력 표시자(230S)에 기반하도록 하기 위함이다. 도 3a의 예측된 분기 복구 트레이스 레코드(300)는 도 2의 명령어 처리 회로(204)에 의해 처리된 후속하는 보다 신생의 조건부 제어 명령어 208(3) 내지 208(6) 및 추론성 예측 회로(228)에 의해 이루어진 그들의 예측을 도시한 것이다.
도 3b는 실행에 기반하여 조건부 제어 명령어 208(1) 내지 208(6)의 결정된 상태를 나타내는 실제 분기 복구 트레이스 레코드(302)를 도시한 것이다. 도 3b에 도시된 바와 같이, 조건부 제어 명령어 208(1)에 대한 NT 예측은 정확한 것으로 결정되었지만, 조건부 제어 명령어 208(2)에 대한 T 예측은 부정확한 것으로 결정되었다. 조건부 제어 명령어 208(2)에 대한 상태의 정확한 결정은 NT이고, 추론성 예측 회로(228)에 의한 조건부 제어 명령어 208(2)에 대한 이러한 NT의 예측은 부정확하였다. 이는 도 3a의 예측된 분기 복구 트레이스 레코드(300)에 도시된 보다 신생의 조건부 제어 명령어 208(3) 및 208(4)가 오류로 인출되었음을 의미한다. 이는 조건부 제어 명령어 208(3) 및 208(4)가 오예측된 조건부 제어 명령어 208(2)에 대한 제어 종속성(CD)이기 때문이다. 조건부 제어 명령어 208(5) 및 208(6)은 조건부 제어 명령어 208(2)의 병합 지점에 위치한 명령어이다. 따라서, 조건부 제어 명령어 208(5) 및 208(6)은 도 3a 및 도 3b의 예측 및 실제 분기 복구 트레이스 레코드(300, 302)에 제각기 도시된 바와 같이 조건부 제어 명령어 208(2)로부터 취해진 T 및 취해지지 않은 NT 명령어 흐름 경로 모두에 존재하는 CI 명령어이다.
조건부 제어 명령어 208(2)의 오예측의 검출에 응답하여, 도 2의 실행 회로(216)는 플러시 이벤트(236)를 발행하여, 조건부 제어 명령어 208(3) 및 208(4)를 플러시하고, 오예측 복구 시에 조건부 제어 명령어 208(2)로부터 정확한 NT 명령어 흐름 경로에 명령어(208)를 인출한다. 조건부 제어 명령어 208(2)로부터 정확한 NT 명령어 흐름 경로에 인출된 명령어 208F는 실제 분기 복구 트레이스 레코드(302)에서 조건부 제어 명령어 208(7) 내지 208(9), 208(5), 및 208(6)으로 도시되어 있다. 전술한 바와 같이, 새로 인출된 조건부 제어 명령어 208F의 예측은 추론성 예측 이력 표시자(230S)를 포함하는 예측 이력 표시자(230)에 기반하여 이루어진다. 따라서, 이 예에서, 추론성 예측 이력 표시자(230S)는 조건부 제어 명령어 208(2)의 오예측에 기반하여 업데이트되었기 때문에, 만약 추론성 예측 이력 표시자(230S)가 또한 오예측 복구 시에 플러시 이벤트(236)에 응답하여 업데이트되지 않으면, 추론성 예측 이력 표시자(230S)는 예측 이력을 정확하게 반영하지 않을 것이다. 이는 조건부 제어 명령어 208(2) 뿐만 아니라 플러시된 보다 신생의 조건부 제어 명령어 208(3) 및 208(4)에 대한 예측이 추론성 예측 이력 표시자(230S)에 다른 방식으로 여전히 존재할 것이기 때문이다. 추론성 예측 이력 표시자(230S)의 조건부 제어 명령어 208(2)에 대한 예측 엔트리 306(2)는, 추론성 예측 이력 표시자(230S)가 오예측 복구 시에 플러시 이벤트(236)에 응답하여 업데이트되지 않으면, NT(예컨대, '0' 비트) 대신에 T(예컨대, '1' 비트)일 것이다. 또한, 추론성 예측 이력 표시자(230S)의 조건부 제어 명령어 208(3) 및 208(4)에 대한 예측은 부정확할 수 있는데, 이는 조건부 제어 명령어 208(2)의 오예측으로 인해 조건부 제어 명령어 208(3) 및 208(4)만이 인출되었고, 그리고 오예측 복구 시에 명령어 파이프라인(IP)에 플러시되기 때문이다.
따라서, 도 3d에 도시된 바와 같이, 명령어 처리 회로(204)는 오예측 복구 시에 플러시 이벤트(236)에 응답하여 예측 이력 표시자(230)의 추론성 예측 이력 표시자(230S)를 업데이트된 추론성 예측 이력 표시자(230S-U)로서 업데이트하도록 구성될 수 있다. 도 3d는 도 3b의 실제 분기 복구 트레이스 레코드(302)에 따라, 조건부 제어 명령어 208(1) 내지 208(2), 208(7) 내지 208(9), 208(5) 내지 208(6)에 대한 업데이트된 예측을 각각 반영하기 위해 예측 엔트리에 비트 '0000010'(즉, NT, NT, NT, NT, NT, T, NT)을 레코딩한 업데이트된 추론성 예측 이력 표시자(230S-U)를 도시한 것이다.
Figure pct00001
주목할 것은 조건부 제어 명령어 208(2)에 대한 업데이트된 추론성 예측 이력 표시자(230S-U)의 업데이트된 예측 엔트리 306(2)는 이제 NT를 의미하는 '0'이라는 것이다. 새로 인출된 조건부 제어 명령어 208(7) 내지 208(9)는, 조건부 제어 명령어 208(2)에 대한 부정확한 예측 및 조건부 제어 명령어 208(2)에 대한 부정확한 명령어 흐름 경로에 인출되었던 조건부 제어 명령어 208(3) 및 208(4)에 대한 예측을 포함하는 이전의 추론성 예측 이력 표시자(230S) 대신에, 더 정확하고 업데이트된 추론성 예측 이력 표시자(230S-U)에 기반하여 예측된다.
도 2의 프로세서(200)의 명령어 처리 회로(204)는 또한 오예측 복구 시에 모든 CI 명령어의 플러싱을 피하기 위해 제어 독립성 기술을 사용하도록 구성될 수 있다. 예를 들어, 제어 독립성 기술은 도 2의 명령어 처리 회로(204)가 오예측 복구 시에 명령어 스트림(212)의 CI 영역에서 CI 명령어(208)가 CI, 데이터 독립성(DI)(CIDI) 명령어(208)인지 또는 CI, 데이터 종속성(DD)(CIDD) 명령어(208)인지를 식별하는 것을 포함할 수 있다. 예를 들어, 조건부 제어 명령어 208(5) 및 208(6)은 도 3a의 조건부 제어 명령어 208(2)에 대한 CI 명령어 영역(308)에 있다. 조건부 제어 명령어 208(3) 및 208(4)는 도 3a의 조건부 제어 명령어 208(2)에 대한 CD 명령어 영역(310)에 있다. 도 2의 명령어 처리 회로(204)는 오예측된 조건부 제어 명령어(208)에 후속하는 CIDD 명령어(208)를 재인출하고 재처리하므로, 그 데이터 종속성은 정확한 명령어 흐름 경로에 인출된 명령어(208F)에 기반하여 정확하게 결정된다. 그러나, CIDI 명령어(208)는, 그러한 CIDI 명령어를 재인출할 필요 없이 오예측 복구 시에 정확한 명령어 흐름 경로에 보다 노령의 명령어(208)를 인출 및 처리한 후에 간단히 재생(즉, 명령어 파이프라인(IP)에서 처리)될 수 있다. 이는, CIDI 명령어(208)가, 부정확한 명령어 흐름 경로에서 인출되고 오예측된 조건부 제어 명령어(208)에 따라 처리된 CD 명령어(208)에 대해 제어 종속성도 아니고, 데이터 종속성도 아니기 때문이다.
그러나, 명령어 처리 회로(204)가 보다 신생의 CIDI 명령어(208)의 플러싱을 피하기 위해 제어 독립성 기술을 사용하는 경우에도, 보다 신생의 CIDI 조건부 제어 명령어(208)의 추론성 예측을 행하는 데 사용되는 예측 이력 표시자(230, 도 3c)는 부정확한 예측의 레코드를 가질 수 있다. 예측 이력 표시자(230)는 위에서 설명된 바와 같이, 부정확한 명령어 흐름 경로에서 오예측 복구 이전에 예측되었던 보다 신생의 CD 조건부 제어 명령어(208)로부터의 레코딩된 예측을 가질 것이다. 이는, 오예측 복구가 있는 경우에도, 부정확한 명령어 흐름 경로에서 CD 조건부 제어 명령어(208)에 후속하는 보다 신생의 CIDI 조건부 제어 명령어(208)가 부정확한 예측 이력 표시자(230)로 예측되었을 수도 있음을 의미한다.
따라서, 본원에 개시된 예시적인 양태에서, 명령어 처리 회로(204)는 오예측 복구 시에, 보다 신생의 CIDI 조건부 제어 명령어(208)의 상태를 재생 시에 재인출 및 재예측하지 않음에도 불구하고, 추론성 예측 이력 표시자(230S)를 정확하게 복원하도록 구성된다. 이와 관련하여, 도 2의 명령어 처리 회로(204)는 보다 신생의 CIDI 조건부 제어 명령어(208)의 추론성 예측에 기반하여 레코딩된, 추론성 예측 이력 표시자(230S) 내의 예측 엔트리(306)를 복원하도록 구성될 수 있다. 이는 보다 신생의 CIDI 조건부 제어 명령어(208)에 대해 행해진 이전 예측이 도 3d에 도시된 바와 같이 업데이트된 추론성 예측 이력 표시자(230S-U) 내의 예측 엔트리(306)에 레코딩되도록 하기 위함이다. 이러한 방식으로, 그러한 보다 신생의 CI 조건부 제어 명령어(208)에 후속하는 더욱 더 신생의 조건부 제어 명령어는 그러한 보다 신생의 CI 조건부 제어 명령어(208)을 재인출하고 재예측해야 할 필요 없이 정확한 예측 이력 표시자(230)에 기반하여 예측될 것이다. 이 예에서, 보다 신생의 CIDD 조건부 제어 명령어(208)는 오예측 복구 시에 재인출되고 재예측되므로, 이러한 보다 신생의 CIDD 조건부 제어 명령어(208)에 대해 행해진 재예측은 도 3d에 도시된 바와 같이, 복원 없이 업데이트된 예측 이력 표시자(230S-U)에 레코딩될 것이다. 이들 예시적인 기술은 도 3a 내지 도 3d의 예 및 후술되는 도 4의 예시적인 프로세스(400)에 나타나 있다.
이와 관련하여, 이 예에서, 명령어 처리 회로(204)의 명령어 인출 회로(206)는 도 2의 명령어 파이프라인(IP)에서 명령어 스트림(212) 내의 조건부 제어 명령어(208)를 인출하도록 구성된다. 그 후 명령어 처리 회로(204)는 추론성 예측 이력 표시자(230S)에 기반하여 도 2의 명령어 파이프라인(IP)에서 명령어 스트림(212) 내의 조건부 제어 명령어(208)의 상태를 추론적으로 예측하도록 구성된다(도 4의 블록 402). 이에 대한 예는 도 3a의 BRPC 0x1022에서 인출된 조건부 제어 명령어 208(2)이며, 여기서 조건부 제어 명령어 208(2)의 상태는 도 2의 추론성 예측 회로(228)에 의해 T로서 추론적으로 예측된다. 추론성 예측 회로(228)는 조건부 제어 명령어 208(2)의 상태의 추론성 예측에 기반하여 추론성 예측 이력 표시자(230S) 내의 예측 엔트리 306(2)를 업데이트하도록 구성된다.
명령어 인출 회로(206)는 그 후 조건부 제어 명령어(208)의 추론성 예측에 기반하여 조건부 제어 명령어(208)의 제1 CD 명령어 영역(310) 내의 CD 명령어(208) 내지 조건부 제어 명령어(208)를 인출하도록 구성된다. 이에 대한 예는 도 3a에 도시되며, 여기서 인출된 CD 명령어(208F) 내지 조건부 제어 명령어 208(2)는 조건부 제어 명령어 208(2)의 CD 명령어 영역(310) 내의 조건부 제어 CD 명령어 208(3) 및 208(4)이다. 명령어 처리 회로(204)의 추론성 예측 회로(228)는 명령어 스트림(212) 내의 조건부 제어 명령어(208)에 후속하는 제1 CD 명령어 영역(310) 내의 인출된 CD 조건부 제어 명령어(208F)의 상태를 추론적으로 예측하도록 구성된다(도 4의 블록 404). 이에 대한 예가 도 3a에 도시되어 있는데, 여기서 CD 조건부 제어 명령어 208(3) 및 208(4)의 상태는 도 2의 추론성 예측 회로(228)에 의해, 제각기 NT 및 T로서 추론적으로 예측된다. 추론성 예측 회로(228)는 그 후 제1 CD 명령어 영역(310) 내의 CD 조건부 제어 명령어(208)의 각각의 추론성 예측에 기반하여 추론성 예측 이력의 예측 엔트리(306)를 업데이트하도록 구성된다. 이에 대한 예는 도 3c에 도시되어 있는데, 여기서 예측 이력 표시자(230)의 추론성 예측 이력 표시자(230S) 내의 예측 엔트리 306(3) 및 306(4)는 도 2의 추론성 예측 회로(228)에 의해, 제각기 NT 및 T로서의 CD 조건부 제어 명령어 208(3) 및 208(4)의 예측과 함께 레코딩된다. 예측 엔트리 306(3) 및 306(4)는 CD 조건부 제어 명령어 208(3) 및 208(4)의 예측을 레코딩하기 때문에, 도 3c의 추론성 예측 이력 표시자(230S) 내의 예측 엔트리 306(3) 및 306(4)는 CD 예측 엔트리라고 지칭된다.
명령어 인출 회로(206)는 조건부 제어 명령어(208)의 CI 명령어 영역(308) 내의 하나 이상의 CI 명령어(208)를 인출하도록 구성된다. 이에 대한 예는 도 3a에 도시되어 있는데, 여기서 인출된 CI 명령어(208F) 내지 조건부 제어 명령어 208(2)는 조건부 제어 명령어 208(2)의 CI 명령어 영역(308) 내의 조건부 제어 CI 명령어 208(5) 및 208(6)이다. 추론성 예측 회로(228)는 그 후 명령어 스트림(212) 내의 제1 CD 명령어 영역(310)에 후속하는 CI 명령어 영역(308) 내의 하나 이상의 CI 조건부 제어 명령어(208)의 상태를 추론적으로 예측하도록 구성된다(도 4의 블록 406). 이에 대한 예는 도 3a에 도시되어 있는데, 여기서 CI 조건부 제어 명령어 208(5) 및 208(6)의 상태는 도 2의 추론성 예측 회로(228)에 의해, 제각기 T 및 NT로서 추론적으로 예측된다. 추론성 예측 회로(228)는 그 후 CI 명령어 영역(308) 내의 CI 조건부 제어 명령어(208)의 각각의 추론성 예측에 기반하여 추론성 예측 이력 표시자(230S)의 CI 예측 엔트리(306)를 업데이트하도록 구성된다(도 4의 블록 408). 이에 대한 예는 도 3c에 도시되어 있는데, 여기서 추론성 예측 이력 표시자(230S) 내의 예측 엔트리 306(5) 및 306(6)은 도 2의 추론성 예측 회로(228)에 의해, 제각기 T 및 NT로서의 CI 조건부 제어 명령어 208(5) 및 208(6)의 예측과 함께 레코딩된다. 도 3c의 예측 이력 표시자(230) 내의 예측 엔트리 306(5) 및 306(6)은 CI 예측 엔트리라고 지칭되는데, 이는 예측 엔트리 306(5) 및 306(6)이 CI 조건부 제어 명령어 208(5) 및 208(6)의 예측을 레코딩하기 때문이다.
이 예에서, 명령어 처리 회로(204) 내의 실행 회로(216)는 조건부 제어 명령어 208(2)를 실행하여 조건부 제어 명령어 208(2)의 상태를 결정하도록 구성된다(도 4의 블록 410). 실행 회로(216)는 조건부 제어 명령어 208(2)의 상태를 결정한다. 이 예에서, 조건부 제어 명령어 208(2)의 결정된 상태는 도 3b에 도시된 바와 같이 NT이지만, 추론성 예측 회로(228)에 의해 T로서 이전에 예측되었다. 따라서, 추론성 예측 이력 표시자(230S) 내의 예측 엔트리 306(2)는 '1' 비트로 표시된 T의 예측으로 레코딩되었다.
조건부 제어 명령어 208(2)의 추론성 예측이 실행 시에 조건부 제어 명령어 208(2)의 결정된 상태와 매칭되지 않는 것에 응답하여(도 4의 블록 412), 명령어 인출 회로(206)는 명령어 파이프라인(IP)으로의 새로운 명령어(208)의 인출을 중단하도록 구성된다. 추론성 예측 회로(228)는 추론성 예측 이력 표시자(230S) 내의 CI 명령어(208)와 연관된 예측 엔트리(306) 내의 예측 값을 저장하여 이들 예측 값이 오예측 복구 후에 복원될 수 있도록 구성된다(도 4의 블록 414). 이에 대한 예는 도 3d에 도시되어 있는데, 여기서 추론성 예측 이력 표시자(230S) 내의 예측 엔트리 306(5) 및 306(6)의 예측 값 '10'은 이러한 예측 값이 오예측 복구 후에 복원될 수 있도록 저장된다. 명령어 처리 회로(204)는 그 후, CD 예측 엔트리(306)와 연관된 CD 명령어(208)가 플러시될 것이기 때문에, 추론성 예측 이력 표시자(230S)에서 CD 예측 엔트리(306)를 제거한다(도 4의 블록 414). 이에 대한 예는 도 3d에 도시되어 있는데, 여기서 추론성 예측 이력 표시자(230S)는, 추론성 예측 이력 표시자(230S)에서 오예측된 조건부 제어 명령어 208(2)에 대한 예측 엔트리 306(2)에 레코딩된 예측 값 이후에 행해진 예측에 대해 예측 엔트리 306(3) 내지 306(6)에 대한 모든 예측 값을 제거하기 위해 4개의 비트만큼 우측으로 시프트된다.
명령어 인출 회로(206)는 그 후 조건부 제어 명령어 208(2)의 결정된 상태에 기반하여 조건부 제어 명령어 208(2)의 정확한 명령어 흐름 경로에 제2 CD 명령어 영역(312) 내의 하나 이상의 CD 명령어(208)를 언스톨 및 인출한다(도 4의 블록 416). 이것은 도 3b에서 예로서 도시되어 있으며, 여기서 조건부 제어 명령어 208(2)의 정확한 명령어 흐름 경로에 제2 CD 명령어 영역(312) 내의 CD 조건부 제어 명령어 208(7) 내지 208(9)가 인출된다. 추론성 예측 회로(228)는 그 후 제2 CD 명령어 영역(312) 내의 하나 이상의 CD 조건부 제어 명령어(208)의 상태를 추론적으로 예측한다(도 4의 블록 418). 이것은 도 3b에서 예로서 도시되어 있으며, 여기서 추론성 예측 회로(228)는 제2 CD 명령어 영역(312) 내의 CD 조건부 제어 명령어 208(7) 내지 208(9)의 상태를 제각기 NT, NT, NT로서 추론적으로 예측한다. 추론성 예측 회로(228)는 그 후 업데이트된 추론성 예측 이력 표시자(230S-U)에 도시된 바와 같이 추론성 예측 이력 표시자(230S) 내의 CD 조건부 제어 명령어 208(7) 내지 208(9)에 대한 예측 엔트리 306(3) 내지 306(5)를 업데이트한다. 이것은 도 3d에서 예로서 도시되어 있으며, 여기서 예측 엔트리 306(3) 내지 306(5)는 CD 조건부 제어 명령어 208(7) 내지 208(9)에 대한 NT 예측을 레코딩하기 위해 '0' 비트로 업데이트된다. 추론성 예측 회로(228)는 그 후 저장된 CI 예측 엔트리(306)를 추론성 예측 이력 표시자(230S)에 첨부하여, 저장된 CI 예측 엔트리(306)를 추론성 예측 이력 표시자(230S)로 복원하도록 구성되므로, 저장된 CI 예측 엔트리(306)와 연관된 CI 조건부 제어 명령어(208)에 대한 예측은 미래의 보다 신생의 예측된 조건부 제어 명령어(208)에 대한 정확한 예측 이력 표시자(230)를 제공하도록 복원된다(도 4의 블록 420). 이는 도 3d에서 예로서 도시되어 있으며, 여기서 저장된 CI 예측 엔트리 306(5) 및 306(6)은 업데이트된 추론성 예측 이력 표시자(230S-U)에 CI 예측 엔트리 306(6) 및 306(7)로서 첨부된다. 전술한 바와 같이, 이 예에서, 복구 시간을 줄이기 위해 오예측 복구 후에 CIDI 조건부 제어 명령어(208)를 재인출 및 재예측하지 않는 것이 바람직하다.
도 2의 명령어 처리 회로(204)는 오예측 복구 후에 오예측된 조건부 제어 명령어(208)보다 더 신생의 CI 조건부 제어 명령어(208)를 재인출해야 할 필요 없이 재생하도록 구성된다. CI 조건부 제어 명령어(208)는 오예측된 조건부 제어 명령어(208)의 정확한 명령어 흐름 경로에 인출된 CD 명령어(208)에 후속하여 명령어 파이프라인(IP)에서 재처리 및 실행될 수 있다. 예를 들어, 명령어 처리 회로(204)는 오예측 복구 시에 오예측된 조건부 제어 명령어(208)에 후속하여 이러한 명령어(208)를 재생하지 않고 CIDI 조건부 구성 명령어(208)를 재생하도록 구성될 수 있다. 명령어 처리 회로(204)는 또한 부정확한 명령어 흐름 경로에서 CD 조건부 제어 명령어(들)(208)에 대한 데이터 종속성으로 인한 오예측 복구 시에 오예측된 조건부 제어 명령어(208)에 후속되는 CIDD 조건부 구성 명령어(208)의 상태를 재인출하고 추론적으로 재예측하도록 구성될 수 있다. 명령어 처리 회로(204)는 또한 복원된 추론성 예측 이력 표시자(230S)에 기반하여 추가적인 보다 신생의 CI 조건부 제어 명령어(208)를 인출하고 추론적으로 예측할 수 있고, 보다 신생의 CI 조건부 제어 명령어(208)의 추론성 예측에 기반하여 추론성 예측 이력 표시자(230S)의 CI 예측 엔트리를 업데이트할 수 있다.
도 2의 명령어 처리 회로(204)에서의 오예측 복구에 대한 추가의 예시적인 세부사항을 제공하기 위해, 도 5 및 도 6이 제공된다. 도 5 및 도 6은 도 3a 및 도 3b의 예측 및 실제 분기 복구 트레이스 레코드(300, 302)에 따른 오예측 복구 이전 및 이후의 도 2의 예시적인 BRB 회로(234)의 상태를 제각기 도시한 것이다. 도 5에 도시된 바와 같이, BRB 회로(234)는 명령어 파이프라인(IP)에서 인출되고 처리되는 조건부 제어 명령어(208)에 대한 정보를 저장하도록 각각 구성된 복수의 BRB 엔트리(500(1) 내지 500(X))를 포함한다. 위에서 설명된 바와 같이, BRB 회로(234) 내의 정보는 추론성 예측 회로(228)에 의해 유지된다. 각 BRB 엔트리(500(1) 내지 500(X))는 조건부 제어 명령어(208)의 BRPC일 수 있는 삽입된 조건부 제어 명령어(208)를 식별하기 위한 제각기의 조건부 제어 명령어 식별자(502(1) 내지 502(X))를 포함한다. 각 BRB 엔트리(500(1) 내지 500(X))는 또한 BRB 엔트리(500(1) 내지 500(X))에 대한 제각기의 조건부 제어 명령어(208)에 대한 예측을 얻기 위해 도 2의 예측 테이블 회로(232)에 예측 인덱스를 제공하는 예측 어드레스 포인터를 집합적으로 제공하는 제각기의 히트 테이블 표시자(504(1) 내지 504(X)), 세트수 표시자(506(1) 내지 506(X)), 및 엔트리 태그(508(1) 내지 508(X))를 포함한다. 위에서 설명된 바와 같이, 히트 테이블 표시자(504(1) 내지 504(X)), 세트수 표시자(506(1) 내지 506(X)), 및 엔트리 태그(508(1) 내지 508(X))는 조건부 제어 명령어(208)의 PC의 해시 및 예측 이력 표시자(230)에 기반하여 주어진 조건부 제어 명령어(208)에 대한 추론성 예측 회로(228)에 의해 결정될 수 있다. 별도의 히트 테이블 표시자(504(1) 내지 504(X)), 세트수 표시자(506(1) 내지 506(X)), 및 엔트리 태그(508(1) 내지 508(X))는 이 예에서 BRB 엔트리(500(1) 내지 500(X))에 제공되는데, 그 이유는 예측 테이블 회로(232)가 각 세트 내에 상이한 세트 및 엔트리를 각각 갖는 다수의 예측 테이블 회로를 포함할 수 있기 때문이다. 따라서, 히트 테이블 표시자(504(1) 내지 504(X)), 세트수 표시자(506(1) 내지 506(X)), 및 엔트리 태그(508(1) 내지 508(X))는 이 예에서 특정 예측 테이블 회로(232), 해당 특정 예측 테이블 회로(232) 내의 세트, 및 해당 세트 내의 엔트리를 식별하는 데 사용될 수 있다.
계속해서 도 5를 참조하면, 각 BRB 엔트리(500(1) 내지 500(X))는, 제각기의 조건부 제어 명령어(208)에 대한 상태의 추론성 예측을 저장하고 제각기의 조건부 제어 명령어(208)의 상태의 실제 결정을 저장하는 제각기의 예측 엔트리(510(1) 내지 510(X)) 및 실제 엔트리(512(1) 내지 512(X))를 포함한다. 이 정보는 오예측된 조건부 제어 명령어(208)에 응답하여 오예측 복구를 처리하기 위해 추론성 예측 회로(228)에 의해 사용된다. 각 BRB 엔트리(500(1) 내지 500(X))는 또한 제각기의 BRB 엔트리(500(1) 내지 500(X))가 유효한지를 나타내는 제각기의 유효 표시자(514(1) 내지 514(X))를 포함한다. 예를 들어, BRB 엔트리(500(1) 내지 500(X))에 저장된 조건부 제어 명령어(208)가 결정될 때, BRB 엔트리(500(1) 내지 500(X))는 다른 처리된 조건부 제어 명령어(208)에 재사용될 수 있다. 유효 표시자(514(1) 내지 514(X))는 제각기의 BRB 엔트리(500(1) 내지 500(X))가 주어진 시점에 유효하지 않은 경우 무효 상태로 세트될 수 있다.
도 5에 도시된 바와 같이, BRB 엔트리 500(1) 내지 500(6)은 명령어 처리 회로(204)에 의해 인출된 도 3a로부터의 조건부 제어 명령어 208(1) 내지 208(6)에 대한 정보로 충전된다. T 또는 NT의 추론성 예측은 도 3a에 도시된 바와 같이 BRB 엔트리 500(1) 내지 500(6)의 제각기의 예측 엔트리 510(1) 내지 510(6)에 충전된다. 또한 도 5에 도시된 바와 같이, BRB 엔트리 500(2) 내의 조건부 제어 명령어 208(2)에 대한 실제 결정된 상태가 도 2의 실행 회로(216)에 의해 NT인 것으로 결정되는 경우, BRB 회로(234) 내의 실제 엔트리 512(2)는 예측 엔트리 510(2)에 저장된 T의 예측 상태와는 다른 NT로 업데이트된다. 이는 조건부 제어 명령어 208(2)가 추론성 예측 회로(228)에 의해 오예측되었음을 의미한다. 이에 응답하여, 도 6에 도시된 바와 같이, 추론성 예측 회로(228)는 BRB 회로(234) 내의 오예측된 조건부 제어 명령어 208(2)에 후속하는 CD 조건부 제어 명령어 208(3) 및 208(4)에 대해 BRB 엔트리 500(3) 및 500(4)를 플러시하도록 구성된다. 정확한 명령어 흐름 경로에 인출되는 조건부 제어 명령어(208)는, BRB 회로(234)에 도시되고 도 3b의 예에서 이전에 설명된 바와 같은 CD 조건부 제어 명령어 208(7) 내지 208(9)이다. 도 3b에 도시된 바와 같이, BRB 엔트리 500(3) 및 500(4)의 플러싱은 오예측 복구 시에 조건부 제어 명령어 208(2)의 정확한 명령어 흐름 경로로부터 인출된 새로운 조건부 제어 명령어(208)를 저장하기 위한 2개의 BRB 엔트리(500)만을 위한 공간을 남겨둔다. 그러나, 이 예에서, 3개의 새로운 CD 조건부 제어 명령어 208(7) 내지 208(9)가 오예측 복구 시에 인출된다. BRB 엔트리 500(7)은 도 6에 도시된 바와 같이 CD 조건부 제어 명령어 208(9)를 저장하기 위해 이용 가능하지만 비순차적으로 이용 가능하다. CD 조건부 제어 명령어 208(9)는 CI 조건부 제어 명령어 208(5) 및 208(6)보다 노령이다. 조건부 제어 명령어(208)는 추론성 예측 이력 표시자(230S)가 오예측 복구 시에 적절하게 복원되도록 BRB 회로(234)에 순차적으로 저장될 필요가 있다. 추론성 예측 회로(228)는 BRB 회로(234)에서 조건부 제어 명령어(208)의 순서에 기반하여 추론성 예측 이력 표시자(230S)를 업데이트하도록 구성된다. 이 문제를 완화하기 위해서는, BRB 회로(234)에서 BRB 엔트리 500(5) 내지 500(7)을 바람직하지 않은 방식으로 재정렬하기 위한 추가 처리가 이용되어야 할 것이다.
BRB 회로(234)에서 BRB 엔트리 500(1) 내지 500(X)를 순서화할 필요성을 줄이기 위해, 도 6의 예에 도시된 바와 같이, BRB 회로(234)일 수 있는 대안적인 BRB 회로(700)가 제공되고 도 7a에 도시되어 있다. 후술되는 바와 같이, BRB 회로(700)는 BRB 엔트리를 재정렬해야 할 필요 없이 BRB 엔트리가 사용되고 플러시될 수 있도록 링크된 리스트 구조(linked list structure)를 가능하게 한다. 명령어 처리 회로(204)는 BRB 회로(700)에서 분기 엔트리를 재정렬해야 하는 것을 피하기 위해 BRB 회로(700)의 특징을 사용하도록 구성된다. BRB 회로(700)는 조건부 제어 명령어 208(2)의 오예측으로 인해 플러시 이벤트가 발생하기 전에 도 3a의 예시적인 조건부 제어 명령어 208(1) 내지 208(6)을 사용하여 도시되어 있다. 이와 관련하여, BRB 회로(700)는 도 5 및 도 6의 BRB 회로(234) 내의 BRB 엔트리(500(1) 내지 500(X))와 유사한 복수의 BRB 엔트리(702(1) 내지 702(X))를 포함한다. 그러나, BRB 회로(700) 내의 BRB 엔트리(702(1) 내지 702(X))는 또한 제각기의 인덱스 표시자(704(1) 내지 704(X)), 및 인덱스 링크 표시자(706(1) 내지 706(X))를 포함한다. BRB 회로(700)는 또한 헤드 인덱스 표시자(708)를 포함한다. 헤드 인덱스 표시자(708)는 BRB 회로(700)에서 제1 또는 헤드의 가장 신생의 조건부 제어 명령어(208)를 식별하는 BRB 엔트리(702(1) 내지 702(X))의 인덱스를 저장하도록 구성된다. 이 예에서, 가장 신생의 조건부 제어 명령어(208)는 인덱스 표시자 704(1)의 인덱스가 '0'인 BRB 엔트리 702(1) 내의 조건부 제어 명령어 208(1)이다. 따라서, 헤드 인덱스 표시자(708)는 이 예에서 인덱스 '0'을 저장한다. 인덱스 링크 표시자(706(1) 내지 706(X))는 다음으로 가장 신생의 조건부 제어 명령어(208)를 포함하는 다음 BRB 엔트리(500(1) 내지 500(X))를 가리키는 인덱스를 저장한다. 따라서, 조건부 제어 명령어 208(2)는 조건부 제어 명령어 208(1) 다음의 가장 신생의 조건부 제어 명령어이기 때문에, 인덱스 링크 표시자 706(1)은 인덱스 '4'를 저장한다. 이는 인덱스가 '4'인 BRB 엔트리 702(5)가 조건부 제어 명령어 208(2)를 저장하기 때문이다. 인덱스 링크 표시자 706(5)는 다음으로 가장 신생인 조건부 제어 명령어 208(3)을 포함하는 BRB 엔트리 500(7)을 가리키는 '6'의 인덱스를 저장하는 식이다. 자유 리스트(710)는 새로운 조건부 제어 명령어(208)를 저장하는 데 자유롭게 사용되는 BRB 엔트리(702(1) 내지 702(X))를 가리키는 인덱스의 리스트를 저장한다. CI 인덱스 표시자(712)는 BRB 회로(700)에서, 병합 또는 수렴점에 후속하는 다음 조건부 제어 명령어(208)를 저장하는 BRB 엔트리(702(1) 내지 702(X))의 인덱스를 표시하도록 제공된다.
도 7b는, 오예측 복구 시에, 부정확한 명령어 흐름 경로에 있는 CD 조건부 제어 명령어 208(3) 및 208(4)가 제거되는 경우, 플러시 이벤트(236)가 발생한 후의 도 7a의 BRB 회로(700)를 도시한 것이다. 도 7b에 도시된 바와 같이, 조건부 제어 명령어 208(2)의 오예측의 결과로서 플러시되었던 CD 조건부 제어 명령어 208(3) 및 208(4)에 대한 정보를 저장한 BRB 엔트리 702(6) 및 702(7)은 제거된다. BRB 엔트리 702(6) 및 702(7)에 대응하는 인덱스 '5' 및 '6'은 인덱스 '5' 및 '6'에서의 BRB 엔트리 702(6) 및 702(7)이 새로 인출된 조건부 제어 명령어 208F에 대한 정보를 자유롭게 저장할 수 있다는 것을 나타내도록 자유 리스트(710)에 다시 되돌려진다. CI 인덱스 표시자(712)의 CI 인덱스는 이 예에서, 인덱스 표시자 704(3)에 대해 '2'의 인덱스를 갖는 BRB 엔트리 702(3)을 가리키는 값 '2'로 업데이트되어, 오예측된 조건부 제어 명령어 208(2)에 대한 병합 또는 수렴점 이후의 제1 조건부 제어 명령어 208(5)를 식별하게 된다.
그런 다음, 도 7c는 재수렴 후 CD 조건부 제어 명령어 208(7) 내지 208(9)가 조건부 제어 명령어 208(2)에 대한 정확한 명령어 흐름 경로에 인출될 때의 도 7a의 BRB 회로(700)를 도시한 것이다. 도 7c에 도시된 바와 같이, 도 7b의 자유 리스트(710)에 의해 식별되는 '1', '3' 및 '6'의 인덱스를 갖는 BRB 엔트리 702(2), 702(4), 및 702(7)은 조건부 제어 명령어 208(2)에 대한 정확한 명령어 흐름 경로로부터 인출된 CD 조건부 제어 명령어 208(7) 내지 208(9)에 대한 정보를 저장하는 데 사용될 수 있다. 이와 관련하여, BRB 엔트리 702(6)의 조건부 제어 명령어 208(2)에 대한 인덱스 링크 표시자 706(5)는 조건부 제어 명령어 208(2)에 후속하는 다음 조건부 제어 명령어 208(7)에 대한 정보를 저장하는 BRB 엔트리 702(2)를 가리키는 '1'의 인덱스를 갖는다. BRB 엔트리 702(2)의 조건부 제어 명령어 208(7)에 대한 인덱스 링크 표시자 706(2)는 조건부 제어 명령어 208(7)에 후속하는 다음 조건부 제어 명령어 208(8)에 대한 정보를 저장하는 BRB 엔트리 702(4)를 가리키는 '3'의 인덱스를 갖는다. BRB 엔트리 702(4)의 조건부 제어 명령어 208(8)에 대한 인덱스 링크 표시자 706(4)는 조건부 제어 명령어 208(8)에 후속하는 다음 조건부 제어 명령어 208(9)에 대한 정보를 저장하는 BRB 엔트리 702(7)을 가리키는 '6'의 인덱스를 갖는다. BRB 엔트리 702(4)의 조건부 제어 명령어 208(9)에 대한 인덱스 링크 표시자 706(7)은 조건부 제어 명령어 208(9)에 후속하는 다음 조건부 제어 명령어 208(5)에 대한 정보를 저장하는 BRB 엔트리 702(3)을 가리키는 '2'의 인덱스를 갖는다.
도 3c 및 도 3d와 관련하여 위에서 설명된 바와 같이, 명령어 처리 회로(204) 및/또는 그의 추론성 예측 회로(228)는 오예측 복구 시에 프로세서(200) 내의 추론성 예측 이력 표시자(230S) 내의 CI 조건부 제어 명령어(208)에 대한 추론성 예측을 나타내는 CI 예측 엔트리(306)를 복원하도록 구성될 수 있다. 이는 보다 신생의 조건부 제어 명령어(208)가 더 정확한 예측 이력 표시자(230)에 기반하여 예측되도록 하기 위함이다. 그러나, 이들 저장된 CI 예측 엔트리(306)는 해당 CI 조건부 제어 명령어(208)가 인출되어 추론성 예측 회로(228)에 의해 처리되었던 때 존재했던 추론성 예측 이력 표시자(230S)에 기반하여 이전에 결정되고 세트되었다. 이것은 추론적으로 또한 예측되었던 예측된 명령어 흐름 경로의 임의의 노령의 CD 조건부 제어 명령어(208)가 보다 신생의 CI 조건부 제어 명령어(208)에 대한 추론성 예측을 행하는 데 사용된 추론성 예측 이력 표시자(230S)에 영향을 미쳤음을 의미한다. 그러나, 이러한 보다 노령의 CD 조건부 제어 명령어(208)는 나중에 실행 회로(216)에서 오예측된 것으로 결정되는 보다 노령의 조건부 제어 명령어(208)으로부터 부정확하게 인출된 명령어 흐름 경로에 있을 수 있다. 이 경우에, 해당 CI 조건부 제어 명령어(208)에 대한 저장 및 복원된 CI 예측 엔트리(306)는 오예측 복구 시에 플러시될 보다 노령의 CD 조건부 제어 명령어(208)에 대한 예측에 기반하였다. 따라서, 추론적 예측 이력 표시자(230S) 내의 복원된 CI 예측 엔트리(306)는, CI 예측 엔트리(306)가 정확한 명령어 흐름 경로에서 보다 노령의 CD 조건부 제어 명령어(208)에 의해 영향을 받는 추론성 예측 이력 표시자(230S)로부터의 추론성 예측에 기반하는 경우와 동일한 예측을 나타내지 않을 수 있다.
따라서, 다른 예시적인 양태에서, 보다 신생의 CI 조건부 제어 명령어(208)에 대응하는 추론성 예측 이력 표시자(230S)를 복원하는 것 외에도, 명령어 처리 회로(204)는 또한 오예측 복구 시에 보다 신생의 CI 조건부 제어 명령어(208)와 연관된 예측 테이블 회로(232) 내의 예측 값을 수정하도록 구성될 수 있다. 오예측 복구 시에, 명령어 처리 회로(204)는 정확한 명령어 흐름 경로에서 인출된 CD 조건부 제어 명령어(208)에 기반하여 업데이트되는 추론성 예측 이력 표시자(230S)에 기반하여 플러시되지 않은 보다 신생의 CI 조건부 제어 명령어(208)의 상태를 추론적으로 재예측하도록 구성될 수 있다. 오예측 복구 시에 보다 신생의 CI 조건부 제어 명령어(208)와 연관된 예측 테이블 회로(232) 내의 예측 값을 수정함으로써, CI 조건부 제어 명령어(208)의 미래 인스턴스에 대해 보다 정확한 예측이 이루어질 수 있다.
따라서, 다른 예에서, CI 조건부 제어 명령어(208)에 대한 보다 정확한 예측 이력을 제공하기 위해, 명령어 처리 회로(204)는 또한 오예측 복구 시에 제각기의 히트 테이블 표시자(504(0) 내지 504(X)), 세트수 표시자(506(0) 내지 506(X)), 및 엔트리 태그(508(0) 내지 508(X))에 의해 정의된 BRB 회로(234) 내의 예측 어드레스 포인터를 업데이트하도록 구성된다. 예를 들어, 도 6의 CI 조건부 제어 명령어 208(5) 및 208(6)에 대한 BRB 회로(234) 내의 예측 어드레스 포인터는 오예측 복구 시에 업데이트될 수 있다. BRB 회로(234) 내의 예측 어드레스 포인터는 CI 조건부 제어 명령어 208(5) 및 208(6)에 대해, 도 2의 실행 회로(216)에서 CI 조건부 제어 명령어 208(5) 및 208(6)의 실행에 의해 생성된 생성 값의 실행 또는 커밋 시 비추론성 예측 이력 표시자(230NS)에 기반하여 업데이트된다. 이를 통해 비추론성 예측 이력 표시자(230NS)는 CI 조건부 제어 명령어 208(5) 및 208(6)에 대해 BRB 회로(234) 내의 예측 어드레스 포인터를 업데이트하는 데 사용될 수 있는데, 그 이유는 CI 조건부 제어 명령어 208(5) 및 208(6)이 추론성 예측 이력 표시자(230S)에 예측과 함께 CI 예측 엔트리(306)가 더 이상 존재하지 않도록 실행되고 커밋될 것이기 때문이다.
그런 다음, 추론성 예측 회로(228)는 CI 예측 엔트리 306(5) 및 306(6)에서 세트된 CI 조건부 제어 명령어 208(5) 및 208(6)에 대해 BRB 회로(234) 내의 업데이트된 예측 어드레스 포인터에서의 예측 테이블 회로(232) 내의 예측 값을, CI 조건부 제어 명령어 208(5) 및 208(6)의 결정된 상태와 비교하도록 구성된다. BRB 회로(234) 내의 업데이트된 예측 어드레스 포인터에서의 예측 테이블 회로(232) 내의 예측 값이 CI 조건부 제어 명령어 208(5) 및 208(6)의 실제 결정된 상태와 매칭되는 경우, CI 조건부 제어 명령어 208(5) 및 208(6)에 대해 BRB 회로(234) 내의 업데이트된 예측 어드레스 포인터에서의 예측 테이블 회로(232) 내의 예측 값은 변경되지 않은 상태로 유지된다. 그러나, BRB 회로(234) 내의 업데이트된 예측 어드레스 포인터에서의 예측 테이블 회로(232) 내의 예측 값이 CI 조건부 제어 명령어 208(5) 및 208(6)의 실제 결정된 상태와 매칭되지 않는 경우, CI 조건부 제어 명령어 208(5) 및 208(6)에 대해 BRB 회로(234) 내의 업데이트된 예측 어드레스 포인터에서의 예측 테이블 회로(232) 내의 예측 값은 변경된다. 이는, 오예측 복구 후에 보다 노령의 CD 조건부 제어 명령어(208)가 인출되고 예측될 경우 CI 조건부 제어 명령어 208(5) 및 208(6)에 대한 CI 예측 엔트리 306(5) 및 306(6)이 부정확하더라도 추론성 예측 이력 표시자(230S)의 업데이트에 기반하여 예측 테이블 회로(232) 내의 예측 값에 대한 수정을 제공할 수 있다.
이와 관련하여, 도 8a 내지 도 8d는 오예측 복구 시에 보다 신생의 CI 조건부 제어 명령어(208)와 연관된 정확한 CI 예측 엔트리(306)의 예를 설명하기 위해 제공된다. 도 8a는 도 3a의 명령어 처리 회로(204)에서 예측된 인출된 조건부 제어 명령어(208F)의 예시적인 예측 분기 복구 트레이스 레코드(300)의 다이어그램이다. 도 8b는 도 3b의 명령어 처리 회로(204)에서 예측된 인출된 조건부 제어 명령어(208F)의 예시적인 실제 분기 복구 트레이스 레코드(302)의 다이어그램이다. 도 8c는 도 3c에 도시된 비추론성 예측 이력 표시자(230NS) 및 추론성 예측 이력 표시자(230S)를 포함하는 예측 이력 표시자(230)를 도시한 것이다. 위의 도 3a 내지 도 3c에 대한 위의 설명은 도 8a 내지 도 8c에 적용 가능하므로, 도 8a 내지 도 8c는 다시 설명될 필요가 없다.
도 8d에 도시된 바와 같이, 명령어 처리 회로(204)는 오예측 복구 시에 플러시 이벤트(236)에 응답하여 예측 이력 표시자(230)의 추론성 예측 이력 표시자(230S)를 업데이트하도록 구성된다. CI 조건부 제어 명령어 208(5) 및 208(6)과 연관된 추론성 예측 이력 표시자(230S) 내의 CI 예측 엔트리 306(5) 및 306(6)에 T 및 NT(즉, '10')의 이전 예측을 저장 및 복원하는 대신, 명령어 처리 회로(204)는 오예측 복구 후에 조건부 제어 명령어 208(2)에 대한 정확한 명령어 흐름 경로에서 조건부 제어 명령어 208(7) 내지 208(9)의 인출 및 추론성 예측에 기반하여, 업데이트된 추론성 예측 이력 표시자(230S-U) 내의 CI 조건부 제어 명령어 208(5) 및 208(6)과 연관된 수정된 예측을 복원하도록 구성된다. 이 예에서, NT, NT, NT(즉, '000')로서 조건부 제어 명령어 208(7) 내지 208(9)의 추론성 예측은 업데이트된 추론성 예측 이력 표시자(230S-U)에 영향을 미쳤다. 정확한 명령어 흐름 경로에서 조건부 제어 명령어 208(7) 내지 208(9)를 예측하는 것에 응답하여 업데이트된 추론성 예측 이력 표시자(230S-U)에 기반하는 CI 조건부 제어 명령어 208(5) 및 208(6)의 추론성 예측은 제각기의 예측 T, T(즉, '11')를 초래했다. 이러한 수정된 예측은 도 3d에 도시된 바와 같이 업데이트된 추론성 예측 이력 표시자(230S-U)의 예측 엔트리에 첨부되는 수정된 CI 예측 엔트리 806(5) 및 806(6)에 제공된다.
이러한, 일 예에서, 도 2의 추론성 예측 회로(228)는 오예측 복구 시 도 8a 및 도 8b의 CI 명령어 영역(308) 내의 CI 조건부 제어 명령어 208(5) 및 208(6)의 상태를 추론적으로 예측하도록 구성된다. 예측 상태는 도 8d에 도시된 바와 같은 CI 예측 엔트리 806(5) 및 806(6)을 형성한다. 추론성 예측 회로(228)는 그 후 업데이트된 추론성 예측 이력 표시자(230S-U) 내의 추론성 예측 이력 표시자(230S)를 CI 예측 엔트리 806(5) 및 806(6)으로 업데이트하여, 업데이트된 추론성 예측 이력 표시자(230S-U) 내에 수정된 CI 예측 엔트리 306(6) 및 306(7)을 제공하도록 구성된다. 도 2의 명령어 처리 회로(204) 및/또는 그 추론성 예측 회로(228)는, BRB 회로(234)가 플러시되고 CD 조건부 제어 명령어 208(7) 내지 208(9)가 정확한 명령어 흐름 경로에 인출된 후, CI 조건부 제어 명령어 208(5) 및 208(6)의 상태를 재예측함으로써, 업데이트된 추론성 예측 이력 표시자(230S-U)에 수정된 CI 예측 엔트리 806(7) 및 806(7)을 제공하도록 구성된다. 따라서, CI 조건부 제어 명령어 208(5) 및 208(6)에 대한 업데이트된 예측은, CD 조건부 제어 명령어 208(7) 내지 208(9)를 위해 도 8d에서 CD 예측 엔트리 306(3) 내지 306(5) 내의 업데이트된 예측을 포함하는 업데이트된 추론성 예측 이력 표시자(230S-U)에 기반하여 이루어질 것이다.
일 예에서, 미결정된 CI 조건부 제어 명령어(208)는 정확도 향상을 위해 업데이트된 추론성 예측 이력 표시자(230S-U)에 기반하여 처리된다. 명령어 처리 회로(204)는 CI 예측 엔트리 806(5) 및 806(6)의 미결정된 CI 조건부 제어 명령어(208)에 대한 재예측이 도 8c의 추론성 예측 이력 표시자(230S) 내의 CI 예측 엔트리 306(5) 및 306(6)의 초기 예측과 다른지를 결정하도록 구성된다. CI 예측 엔트리 806(5) 및 806(6)의 미결정된 CI 조건부 제어 명령어(208)에 대한 재예측이 추론성 예측 이력 표시자(230S) 내의 CI 예측 엔트리 306(5) 및 306(6)의 초기 예측과 다른 경우, 명령어 처리 회로(204)는 BRB 회로(234)의 유지 관리를 또한 오버라이드하도록 구성된다. CI 예측 엔트리(306)가 그의 재예측과 매칭되지 않는 해당 미결정된 CI 조건부 제어 명령어(208)는 BRB 회로(234)로부터 플러시되고, 미결정된 CI 조건부 제어 명령어(208)는 재인출되어 처리된다. 이러한 방식으로, 재인출된 미결정 CI 조건부 제어 명령어(208)는 다시, CD 조건부 제어 명령어 208(7) 내지 208(9)를 위해 도 8d에서 CD 예측 엔트리 306(3) 내지 306(5) 내의 업데이트된 예측을 포함하는 업데이트된 추론성 예측 이력 표시자(230S-U)에 기반하여 예측된다. BRB 회로(234) 내의 업데이트된 예측 어드레스 포인터는 제각기의 히트 테이블 표시자(504(0) 내지 504(X)), 세트수 표시자(506(0) 내지 506(X)), 및 엔트리 태그(508(0) 내지 508(X))에 의해 정의되고, BRB 회로(234) 내의 제각기의 미결정된 CI 조건부 제어 명령어(208)에 대한 예측 엔트리(510(1) 내지 510(X)) 내의 예측 값은 미결정된 CI 조건부 제어 명령어(208)에 대한 BRB 회로(234) 내의 이전 예측 어드레스 포인터에서 예측 테이블 회로(232) 내의 부정확한 예측 값 업데이트를 방지하도록 업데이트된다.
모든 미결정 CI 조건부 제어 명령어(208)를 재예측하는 이 기술은 명령어 처리 회로(204)에 의한 새로운 보다 신생의 명령어(208)의 인출 및 처리를 지연시킬 수도 있다. 그러나, 예측의 정확도 향상 및 오예측 복구의 감소로 인한 처리 시간 절감은 이러한 추가 지연보다 클 수 있다.
다른 예에서, 모든 미결정 CI 조건부 제어 명령어(208)를 재예측하고 새롭고 보다 신생의 명령어(208)의 인출을 지연시키는 대신에, 명령어 처리 회로(204)는 새롭고 보다 신생의 명령어(208)의 인출을 계속하도록 구성될 수 있다. 추론성 예측 회로(228)와 같은 명령어 처리 회로(204) 내의 별도의 회로는 별도의 프로세스에서 전술한 바와 같은 미결정 CI 조건부 제어 명령어(208)에 대한 제각기의 히트 테이블 표시자(504(0) 내지 504(X)), 세트수 표시자(506(0) 내지 506(X)), 및 엔트리 태그(508(0) 내지 508(X))에 의해 정의된 BRB 회로(234) 내의 업데이트된 예측 어드레스 포인터를 결정할 수 있다. 그 후, 명령어 처리 회로(204)는, 위에서 설명된 바와 같은 오예측 복구 후에 미해결 CI 조건부 제어 명령어(208)를 재예측하여, CI 예측 엔트리 806(5) 및 806(6)의 미결정 CI 조건부 제어 명령어(208)에 대한 재예측이 도 8c의 추론성 예측 이력 표시자(230S) 내의 CI 예측 엔트리 306(5) 및 306(6)의 초기 예측과 다른지를 결정하도록 구성될 수 있다. CI 예측 엔트리 806(5) 및 806(6)의 미결정 CI 조건부 제어 명령어(208)에 대한 재예측이 추론성 예측 이력 표시자(230S) 내의 CI 예측 엔트리 306(5) 및 306(6)의 초기 예측과 다른 경우, 명령어 처리 회로(204)는 위에서 설명된 바와 같이 BRB 회로(234)의 유지 관리를 또한 오버라이드하도록 구성된다.
도 9는, 보다 신생의 CI 조건부 제어 명령어를 재인출할 필요성을 피하면서 추론성 예측을 행하기 위한 정확한 추론성 이력을 제공하기 위해, 보다 신생의 CI 조건부 제어 명령어(208)와 연관된 오예측 복구 시에 추론성 이력을 복원하도록 구성된 프로세서(902)를 포함하는 예시적인 프로세서 기반 시스템(900)의 블록도이다. 예를 들어, 프로세서(902)는 오예측 복구 시에 CIDI 명령어를 재인출할 필요성을 피하기 위해 제어 독립성 기술을 사용하도록 구성될 수 있다. 프로세서(902)는 보다 노령의 조건부 제어 명령어의 오예측 이전에 CI 조건부 제어 명령어(208)에 대해 행해진 이전 예측을 복원할 수 있으므로, 추론성 예측 이력 표시자(230S)는 CI 조건부 제어 명령어의 추론성 이력을 정확하게 반영할 수 있게 된다. 프로세서(902)는, 제한 없이, 도 2의 프로세서(200), 및 도 2 내지 도 8에 설명된 추론성 예측을 행하기 위한 정확한 추론성 이력을 제공하기 위해 보다 신생의 CI 조건부 제어 명령어와 연관된 오예측 복구 시에 추론성 이력을 복원하기 위한 임의의 기능을 포함할 수 있다.
프로세서 기반 시스템(900)은, 전자 기판 카드, 예를 들어, 인쇄 회로 기판(PCB), 서버, 퍼스널 컴퓨터, 데스크톱 컴퓨터, 랩톱 컴퓨터, 개인 휴대 정보 단말기(personal digital assistant)(PDA), 컴퓨팅 패드, 모바일 디바이스, 또는 임의의 다른 디바이스에 포함되는 회로 또는 회로들일 수 있고, 예를 들어, 서버 또는 사용자의 컴퓨터를 나타낼 수 있다. 이 예에서, 프로세서 기반 시스템(900)은 프로세서(902)를 포함한다. 프로세서(902)는 하나 이상의 범용 처리 회로, 예를 들어, 마이크로프로세서, 중앙 처리 장치 등을 나타낸다. 프로세서(902)는 본원에서 설명되는 동작 및 단계를 수행하기 위한 컴퓨터 명령어의 처리 로직을 실행하도록 구성된다. 이 예에서, 프로세서(902)는 인출된 조건부 제어 명령어의 추론성 예측을 행하기 위한 추론성 예측 회로(904)를 포함한다. 추론성 예측 회로(904)는 도 2의 추론성 예측 회로(228)일 수 있다. 프로세서(902)는 또한 명령어의 임시적인 고속 액세스 메모리 저장을 위한 명령어 캐시(906) 및 명령어 처리 회로(908)를 포함한다. 시스템 버스(912)를 통해 시스템 메모리(910)와 같은 메모리로부터 인출되거나 미리 인출된 명령어는 명령어 캐시(906)에 저장된다. 명령어 처리 회로(908)는, 명령어 캐시(906) 내로 인출된 명령어를 처리하고, 그 명령어를 실행을 위해 처리하도록 구성된다. 명령어 처리 회로(908)는 인출된 명령어를 하나 이상의 명령어 파이프라인에 삽입하고 이를 처리하여 실행하도록 구성된다.
프로세서(902) 및 시스템 메모리(910)는 시스템 버스(912)에 연결되고, 프로세서 기반 시스템(900)에 포함된 주변 디바이스를 상호 연결할 수 있다. 잘 알려진 바와 같이, 프로세서(902)는 시스템 버스(912)를 통해 어드레스, 제어, 및 데이터 정보를 교환함으로써 이들 다른 디바이스와 통신한다. 예를 들어, 프로세서(902)는 슬레이브 디바이스의 일 예로서 시스템 메모리(910) 내의 메모리 컨트롤러(914)에 버스 트랜잭션 요청을 전달할 수 있다. 도 9에 도시되어 있지는 않지만, 각각의 시스템 버스가 상이한 패브릭을 구성하는 다수의 시스템 버스(912)가 제공될 수 있다. 이 예에서, 메모리 컨트롤러(914)는 시스템 메모리(910) 내의 메모리 어레이(916)에 메모리 액세스 요청을 제공하도록 구성된다. 메모리 어레이(916)는 데이터를 저장하기 위한 저장 비트 셀의 어레이로 구성된다. 시스템 메모리(910)는, 비제한적인 예로서, 판독 전용 메모리(ROM), 플래시 메모리, 동기식 DRAM(Synchronous DRAM)(SDRAM) 등과 같은 DRAM, 및 정적 메모리(예컨대, 플래시 메모리, 정적 랜덤 액세스(SRAM) 등)일 수 있다.
다른 디바이스가 시스템 버스(912)에 연결될 수 있다. 도 9에 도시된 바와 같이, 이들 디바이스는, 예로서, 시스템 메모리(910), 하나 이상의 입력 디바이스(들)(918), 하나 이상의 출력 디바이스(들)(920), 모뎀(922), 및 하나 이상의 디스플레이 컨트롤러(924)를 포함할 수 있다. 입력 디바이스(들)(918)는 입력 키, 스위치, 음성 프로세서 등을 포함하지만 이에 제한되지 않는 임의의 유형의 입력 디바이스를 포함할 수 있다. 출력 디바이스(들)(920)는 오디오, 비디오, 다른 시각적 표시자 등을 포함하지만 이에 제한되지 않는 임의의 유형의 출력 디바이스를 포함할 수 있다. 모뎀(922)은 네트워크(926)와의 데이터 교환을 가능하게 하도록 구성된 임의의 디바이스일 수 있다. 네트워크(926)는 유선 또는 무선 네트워크, 사설 또는 공중 네트워크, 근거리 통신망(LAN), 무선 근거리 통신망(WLAN), 광역 통신망(WAN), 블루투스TM 네트워크, 및 인터넷을 포함하지만 이에 제한되지 않는 임의의 유형의 네트워크일 수 있다. 모뎀(922)은 원하는 임의의 유형의 통신 프로토콜을 지원하도록 구성될 수 있다. 프로세서(902)는 또한 시스템 버스(912)를 통해 디스플레이 컨트롤러(들)(924)에 액세스하여, 하나 이상의 디스플레이(928)로 전송된 정보를 제어하도록 구성될 수 있다. 디스플레이(들)(928)는 음극선관(CRT), 액정 디스플레이(LCD), 플라즈마 디스플레이 등을 포함하지만 이에 제한되지 않는 임의의 유형의 디스플레이를 포함할 수 있다.
도 9의 프로세서 기반 시스템(900)은 이러한 명령어가 CI 명령어 또는 CD 명령어가 되게 하는 조건부 제어 명령어를 포함할 수 있는 명령어(930)의 세트를 포함할 수 있다. 명령어(930)는 비일시적 컴퓨터 판독가능 매체(932)의 예로서 시스템 메모리(910), 프로세서(902), 및/또는 명령어 캐시(906)에 저장될 수 있다. 명령어(930)는 또한 실행 중에 시스템 메모리(910) 및/또는 프로세서(902) 내에 완전히 또는 적어도 부분적으로 상주할 수 있다. 명령어(930)는 모뎀(922)을 경유하여 네트워크(926)를 통해 추가로 송신 또는 수신될 수 있으므로, 네트워크(926)는 비일시적 컴퓨터 판독가능 매체(932)를 포함할 수 있게 된다.
비일시적 컴퓨터 판독가능 매체(932)가 예시적인 실시예에서 단일 매체인 것으로 도시되어 있지만, "컴퓨터 판독가능 저장 매체"라는 용어는 하나 이상의 명령어의 세트를 저장한 단일 매체 또는 다중 매체(예컨대, 중앙 집중식 또는 분산형 데이터베이스, 및/또는 연관된 캐시 및 서버)를 포함하는 것으로 간주되어야 한다. "컴퓨터 판독가능 매체"라는 용어는, 또한 처리 디바이스에 의한 실행을 위한 명령어의 세트를 저장, 인코딩, 또는 운반할 수 있고, 처리 디바이스가 본원에 개시된 실시예의 방법론 중 임의의 하나 이상을 수행하게 하는 임의의 매체를 포함하는 것으로 간주되어야 한다. 따라서, "컴퓨터 판독가능 매체"라는 용어는 솔리드 스테이트 메모리, 광학 매체, 및 자기 매체를 포함하지만 이에 제한되지는 않는 것으로 간주될 것이다.
본원에 개시된 실시예는 다양한 단계를 포함한다. 본원에 개시된 실시예의 단계는 하드웨어 컴포넌트에 의해 형성될 수 있거나, 머신 실행가능 명령어로 구현될 수 있으며, 이 머신 실행가능 명령어는 이러한 명령어로 프로그래밍된 범용 또는 특수 목적 프로세서로 하여금 이러한 단계를 수행하게 하는 데 사용될 수 있다. 대안적으로, 이들 단계는 하드웨어 및 소프트웨어의 조합에 의해 수행될 수 있다.
본원에 개시된 실시예는, 컴퓨터 시스템(또는 다른 전자 디바이스)을 프로그래밍하여 본원에 개시된 실시예에 따른 프로세스를 수행하는 데 사용될 수 있는 인스트럭션을 저장한 머신 판독가능 매체(또는 컴퓨터 판독가능 매체)를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 머신 판독가능 매체는 머신(예컨대, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장 또는 송신하기 위한 임의의 메커니즘을 포함한다. 예를 들어, 머신 판독가능 매체는: 머신 판독가능 저장 매체(예컨대, ROM, 랜덤 액세스 메모리(RAM), 자기 디스크 저장 매체, 광 저장 매체, 플래시 메모리 디바이스 등) 등을 포함한다.
달리 구체적으로 언급되지 않는 한, 그리고 이전의 설명으로부터 명백한 바와 같이, 설명 전반에 걸쳐, "처리", "컴퓨팅", "결정", "디스플레이" 등과 같은 용어를 사용하는 설명은 컴퓨터 시스템, 또는 유사한 전자 컴퓨팅 디바이스의 동작 및 프로세스를 지칭하는 것이며, 이러한 컴퓨터 시스템, 또는 유사한 전자 컴퓨팅 디바이스는 컴퓨터 시스템의 레지스터 내의 물리적(전자적)인 수량으로 표현되는 데이터 및 메모리를, 그러한 컴퓨터 시스템의 메모리, 레지스터, 또는 다른 그러한 정보 저장, 전송 또는 디스플레이 디바이스 내의 물리적인 수량으로 유사하게 표현되는 다른 데이터로 조작 및 변환하는 것으로 이해된다.
본원에 제시된 알고리즘 및 디스플레이는 본질적으로는 임의의 특정 컴퓨터 또는 다른 장치와는 관련이 없다. 다양한 시스템이 본원의 교시내용에 따른 프로그램과 함께 사용될 수 있거나, 필수 방법 단계를 수행하기 위해 보다 특수화된 장치를 구성하는 것이 편리한 것으로 입증될 수 있다. 이러한 시스템에 대한 필수 구조는 위의 설명으로부터 나타날 것이다. 또한, 본원에 개시된 실시예는 임의의 특정 프로그래밍 언어를 참조하여 기술되지는 않는다. 다양한 프로그래밍 언어가 본원에 설명된 바와 같은 본 실시예의 교시내용을 구현하는 데 사용될 수 있다는 것으로 이해될 것이다.
본 기술 분야의 기술자는 본원에 개시된 실시예와 관련하여 설명된 다양한 예시적인 논리적 블록, 모듈, 회로, 및 알고리즘이 전자 하드웨어로서, 메모리에 또는 다른 컴퓨터 판독가능 매체에 저장되고, 프로세서 또는 다른 처리 디바이스에 의해 실행되는 명령어로서, 또는 이들 양자의 조합으로서 구현될 수 있다는 것으로 추가로 이해할 것이다. 본원에 설명된 분산 안테나 시스템의 컴포넌트는, 예로서, 임의의 회로, 하드웨어 컴포넌트, 집적 회로(IC), 또는 IC 칩에서 이용될 수 있다. 본원에 개시된 메모리는 임의의 유형 및 크기의 메모리일 수 있고, 원하는 임의의 유형의 정보를 저장하도록 구성될 수 있다. 이러한 상호교환성을 명확하게 설명하기 위해, 다양한 예시적인 컴포넌트, 블록, 모듈, 회로, 및 단계가 위에서 일반적으로 그 기능의 관점에서 설명되었다. 이러한 기능이 구현되는 방법은 특정 애플리케이션, 설계 선택, 및/또는 전체 시스템에 부과되는 설계 제약 조건에 따라 달라진다. 기술자는 설명한 기능을 각 특정 애플리케이션마다 다양한 방법으로 구현할 수 있지만, 이러한 구현 결정은 본 실시예의 범위를 벗어나게 하는 것으로 해석되어서는 안 된다.
본원에 개시된 실시예와 관련하여 설명된 다양한 예시적인 논리적 블록, 모듈, 및 회로는 본원에 설명된 기능을 수행하도록 설계된 프로세서, 디지털 신호 프로세서(Digital Signal Processor)(DSP), 주문형 집적 회로(Application Specific Integrated Circuit)(ASIC), 필드 프로그래머블 게이트 어레이(Field Programmable Gate Array)(FPGA), 또는 다른 프로그래머블 로직 디바이스, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트, 또는 이들의 임의의 조합을 이용하여 구현되거나 수행될 수 있다. 또한, 컨트롤러는 프로세서일 수 있다. 프로세서는 마이크로프로세서일 수 있지만, 대안적으로, 프로세서는 임의의 종래의 프로세서, 컨트롤러, 마이크로컨트롤러, 또는 상태 머신일 수 있다. 프로세서는 또한 컴퓨팅 디바이스들의 조합(예컨대, DSP와 마이크로프로세서의 조합, 복수의 마이크로프로세서, DSP 코어와 함께 하는 하나 이상의 마이크로프로세서, 또는 임의의 다른 그러한 구성)으로서 구현될 수 있다.
본원에 개시된 실시예는 하드웨어로 그리고 하드웨어에 저장된 명령어로 구현될 수 있고, 예를 들어, RAM, 플래시 메모리, ROM, EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable Programmable ROM), 레지스터, 하드 디스크, 착탈식 디스크, CD-ROM, 또는 본 기술 분야에서 알려진 임의의 다른 형태의 컴퓨터 판독가능 매체에 상주할 수 있다. 예시적인 저장 매체는 프로세서에 연결되므로, 프로세서는 저장 매체로부터 정보를 판독하고 저장 매체에 정보를 기입할 수 있게 된다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 프로세서와 저장 매체는 ASIC 내에 상주할 수 있다. ASIC은 원격 스테이션 내에 상주할 수 있다. 대안적으로, 프로세서와 저장 매체는 별도의 컴포넌트로서 원격 스테이션, 기지국, 또는 서버 내에 상주할 수 있다.
본원의 임의의 예시적인 실시예에 설명된 동작 단계는 예시 및 설명을 제공하기 위해 기술되었다는 것이 또한 주목된다. 설명된 동작은 예시된 시퀀스가 아닌 수많은 다른 시퀀스로 수행될 수 있다. 또한, 단일 동작 단계에서 설명된 동작은 실제로 다수의 서로 다른 단계로 수행될 수 있다. 추가적으로, 예시적인 실시예에서 설명된 하나 이상의 동작 단계가 조합될 수 있다. 본 기술 분야의 기술자는 또한 정보 및 신호가 다양한 상이한 기술 및 기법 중 임의의 것을 사용하여 표현될 수 있다는 것으로 이해할 것이다. 예를 들어, 전술한 설명 전체에서 참조될 수 있는 데이터, 명령어, 커맨드, 정보, 신호, 비트, 심볼, 및 칩은 전압, 전류, 전자기파, 자기 필드 또는 입자, 광학 필드 또는 입자, 또는 이들의 임의의 조합에 의해 표현될 수 있다.
달리 명시적으로 언급되지 않는 한, 본원에 설명된 방법이 그 단계가 특정 순서로 수행될 것을 요구하는 것으로 해석되는 것은 결코 아니다. 따라서, 방법 청구항이 그 단계에 따라야 할 순서를 실제로 인용하지 않거나, 또는 단계가 특정 순서로 제한된다는 것이 청구범위 또는 설명에서 달리 구체적으로 언급되지 않는 경우, 특정 순서를 유추하려는 것도 아니다.
본 발명의 사상 또는 범주를 벗어나지 않고 다양한 수정 및 변형이 행해질 수 있다는 것이 본 기술 분야의 기술자에게는 명백할 것이다. 본 발명의 사상 및 요지를 포함하는 개시된 실시예의 수정, 조합, 서브 조합, 및 변형이 본 기술 분야의 기술자에게 일어날 수 있으므로, 본 발명은 첨부된 청구범위 및 그 균등물의 범위 내에 있는 모든 것을 포함하는 것으로 해석되어야 한다.

Claims (15)

  1. 프로세서에 있어서,
    하나 이상의 명령어 파이프라인을 포함하는 명령어 처리 회로; 및
    추론성 예측 이력 표시자(speculative prediction history indicator)를 포함하고,
    상기 명령어 처리 회로는:
    상기 추론성 예측 이력 표시자에 기반하여 명령어 파이프라인에서 명령어 스트림 내의 조건부 제어 명령어의 상태(condition)를 추론적으로 예측하고;
    상기 명령어 스트림 내의 상기 조건부 제어 명령어에 후속하는 제1 제어 종속성(CD; control dependent) 명령어 영역 내의 하나 이상의 CD 조건부 제어 명령어의 상태를 추론적으로 예측하고;
    상기 명령어 스트림 내의 상기 제1 CD 명령어 영역에 후속하는 제어 독립성(CI; control independent) 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 상태를 추론적으로 예측하고;
    상기 CI 명령어 영역 내의 상기 하나 이상의 CI 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 업데이트하고;
    상기 조건부 제어 명령어의 상태를 결정하기(resolve) 위해 상기 조건부 제어 명령어를 실행하고; 그리고
    상기 추론성 예측이 상기 조건부 제어 명령어의 실행 시에 상기 결정된 상태와 매칭되지 않는 것에 응답하여:
    상기 추론성 예측 이력 표시자의 상기 하나 이상의 CI 예측 엔트리를 저장하고;
    상기 조건부 제어 명령어의 상기 결정된 상태에 기반하여 상기 조건부 제어 명령어의 제2 CD 명령어 영역 내의 하나 이상의 CD 명령어를 인출하고;
    상기 제2 CD 명령어 영역 내의 하나 이상의 CD 조건부 제어 명령어의 상태를 추론적으로 예측하고; 그리고
    상기 추론성 예측 이력 표시자 내의 상기 저장된 하나 이상의 CI 예측 엔트리를 복원하도록 구성되는 것인, 프로세서.
  2. 제1항에 있어서,
    상기 명령어 처리 회로는 또한:
    메모리로부터 상기 하나 이상의 명령어 파이프라인 중 명령어 파이프라인으로 복수의 명령어를 인출하고;
    상기 조건부 제어 명령어의 상태의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자 내의 예측 엔트리를 업데이트하고;
    상기 조건부 제어 명령어의 상기 추론성 예측에 기반하여 상기 조건부 제어 명령어의 상기 제1 CD 명령어 영역 내의 상기 복수의 명령어 중 상기 하나 이상의 CD 명령어를 인출하고;
    상기 제1 CD 명령어 영역 내의 상기 하나 이상의 CD 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CD 엔트리를 업데이트하고;
    상기 조건부 제어 명령어의 상기 CI 명령어 영역 내의 하나 이상의 CI 명령어를 인출하고; 그리고
    상기 추론성 예측이 상기 조건부 제어 명령어의 실행 시에 상기 결정된 상태와 매칭되지 않는 것에 응답하여:
    상기 조건부 제어 명령어의 결정된 상태에 기반하여 상기 추론성 예측 이력 표시자 내의 예측 엔트리를 업데이트하고;
    상기 추론성 예측 이력 표시자의 상기 하나 이상의 CD 엔트리를 제거하고;
    상기 제2 CD 명령어 영역 내의 하나 이상의 CD 조건부 제어 명령어의 상태를 추론적으로 예측하고; 그리고
    상기 제2 CD 명령어 영역 내의 상기 하나 이상의 CD 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CD 엔트리를 업데이트하도록 구성되는 것인, 프로세서.
  3. 제1항에 있어서,
    상기 명령어 처리 회로는 또한:
    상기 제1 CD 명령어 영역 내의 상기 하나 이상의 CD 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CD 엔트리를 업데이트하도록 구성되고,
    상기 명령어 처리 회로는 상기 제2 CD 명령어 영역 내의 상기 하나 이상의 CD 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CD 예측 엔트리가 업데이트된 후 상기 추론성 예측 이력 표시자의 상기 저장된 하나 이상의 CI 예측 엔트리를 복원하도록 구성되는 것인, 프로세서.
  4. 제1항에 있어서,
    상기 추론성 예측이 상기 추론성 예측 이력 표시자 내의 상기 저장된 하나 이상의 CI 예측 엔트리를 복원하는 것에 응답하여, 상기 명령어 처리 회로는 또한:
    상기 추론성 예측 이력 표시자에 기반하여 하나 이상의 보다 신생의(younger) CI 조건부 제어 명령어의 상태를 추론적으로 예측하고; 그리고
    상기 추론성 예측 이력 표시자에 기반한 상기 하나 이상의 CI 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 업데이트하도록 구성되는 것인, 프로세서.
  5. 제1항에 있어서,
    상기 추론성 예측이 상기 추론성 예측 이력 표시자의 상기 저장된 하나 이상의 CI 예측 엔트리를 복원하는 것에 응답하여, 상기 명령어 처리 회로는 또한:
    상기 복원된 하나 이상의 CI 예측 엔트리를 갖는 상기 추론성 예측 이력 표시자에 기반하여 상기 하나 이상의 CI 조건부 제어 명령어를 처리하도록 구성되는 것인, 프로세서.
  6. 제1항에 있어서,
    복수의 분기 엔트리를 포함하는 분기 재정렬 버퍼(BRB; branch reorder buffer) 회로를 더 포함하고, 각 분기 엔트리는 조건부 제어 명령어 식별자를 저장하도록 구성된 예측 엔트리, 상기 추론성 예측 이력 표시자에 대한 예측 인덱스를 저장하도록 구성된 예측 어드레스 포인터, 상기 조건부 제어 명령어에 대한 예측 표시자를 저장하도록 구성된 예측 엔트리를 포함하며,
    상기 명령어 처리 회로는:
    상기 BRB 회로 내의 상기 복수의 분기 엔트리 중의 분기 엔트리 내에 상기 조건부 제어 명령어를 저장하고;
    상기 분기 엔트리 내의 상기 예측 어드레스 포인터의 추론성 예측 이력 표시자에 대한 예측 인덱스에 기반하여 상기 명령어 스트림 내의 상기 조건부 제어 명령어의 상태를 추론적으로 예측하고;
    상기 제1 CD 명령어 영역 내의 제각기의 하나 이상의 CD 조건부 제어 명령어를 식별하는 하나 이상의 조건부 제어 명령어 식별자를 상기 BRB 회로 내의 상기 복수의 분기 엔트리 중의 분기 엔트리의 예측 엔트리 내에 저장하고;
    상기 하나 이상의 CD 조건부 제어 명령어의 추론성 예측을 제각기의 분기 엔트리 내의 예측 엔트리에 있는 제각기의 예측 표시자로서 저장하고;
    상기 CI 명령어 영역 내의 제각기의 하나 이상의 CI 조건부 제어 명령어를 식별하는 하나 이상의 조건부 제어 명령어 식별자를 상기 BRB 회로 내의 상기 복수의 분기 엔트리 중의 분기 엔트리의 예측 엔트리 내에 저장하고; 그리고
    상기 하나 이상의 CI 조건부 제어 명령어의 추론성 예측을 제각기의 분기 엔트리 내의 예측 엔트리에 있는 제각기의 예측 표시자로서 저장하도록 구성되는 것인, 프로세서.
  7. 제6항에 있어서,
    상기 추론성 예측이 상기 조건부 제어 명령어의 실행 시에 상기 결정된 상태와 매칭되지 않는 것에 응답하여, 상기 명령어 처리 회로는 또한:
    상기 제1 CD 명령어 영역 내의 제각기의 하나 이상의 CD 조건부 제어 명령어를 식별하는, 상기 BRB 회로 내의 상기 복수의 분기 엔트리 중의 분기 엔트리의 예측 엔트리 내의 하나 이상의 조건부 제어 명령어 식별자를 제거하고;
    상기 제2 CD 명령어 영역 내의 제각기의 하나 이상의 CD 조건부 제어 명령어를 식별하는 하나 이상의 조건부 제어 명령어 식별자를 상기 BRB 회로 내의 상기 복수의 분기 엔트리 중의 분기 엔트리의 예측 엔트리 내에 저장하도록 구성되는 것인, 프로세서.
  8. 제7항에 있어서,
    상기 BRB 회로 내의 상기 복수의 분기 엔트리 중의 각 분기 엔트리는 상기 복수의 분기 엔트리 중 다음 분기 엔트리에 대한 인덱스 링크를 저장하도록 구성된 인덱스 링크 표시자를 더 포함하고,
    상기 추론성 예측이 상기 조건부 제어 명령어의 실행 시에 상기 결정된 상태와 매칭되지 않는 것에 응답하여, 상기 명령어 처리 회로는 또한:
    상기 제2 CD 명령어 영역 내의 제각기의 하나 이상의 CD 조건부 제어 명령어를 식별하는, 상기 BRB 회로 내의 복수의 분기 엔트리 중의 각 분기 엔트리마다의 상기 인덱스 링크 내의 인덱스 링크 표시자를, 상기 제2 CD 명령어 영역 내의 하나 이상의 CD 조건부 제어 명령어 내의 다음 CD 조건부 제어 명령어를 위한 상기 BRB 회로 내의 복수의 분기 엔트리 중의 다음 분기 엔트리에 저장하도록 구성되는 것인, 프로세서.
  9. 제1항에 있어서,
    상기 추론성 예측 이력 표시자의 상기 저장된 하나 이상의 CI 예측 엔트리를 복원하는 것에 응답하여, 상기 명령어 처리 회로는 또한:
    상기 CI 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 상태를 추론적으로 예측하고; 그리고
    상기 하나 이상의 CI 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 업데이트하도록 구성되는 것인, 프로세서.
  10. 제9항에 있어서,
    상기 명령어 처리 회로는 상기 추론성 예측 이력 표시자에 기반하여 결정된 예측 어드레스 포인터에서 예측 테이블 회로 내의 예측 값에 기반하여 하나 이상의 CI 조건부 제어 명령어의 상태를 추론적으로 예측하도록 구성되고,
    상기 명령어 처리 회로는 또한:
    상기 하나 이상의 CI 조건부 제어 명령어의 실행에 응답하여 비추론성 예측 이력 표시자에 기반하여 상기 하나 이상의 CI 조건부 제어 명령어에 대한 예측 어드레스 포인터를 업데이트하고;
    상기 하나 이상의 CI 조건부 제어 명령어의 실행에 기반하여 상기 하나 이상의 CI 조건부 제어 명령어의 각각에 대한 실제 결정된 상태를 생성하고;
    상기 업데이트된 예측 어드레스 포인터에서 예측 테이블 회로 내의 하나 이상의 CI 조건부 제어 명령어에 대한 예측 값을 상기 하나 이상의 CI 조건부 제어 명령어의 실제 결정된 상태와 비교하고; 그리고
    상기 하나 이상의 CI 조건부 제어 명령어에 대한 예측 값이 실행 시의 상기 하나 이상의 CI 조건부 제어 명령어의 실제 결정된 상태와 매칭되지 않는 것에 응답하여, 상기 하나 이상의 CI 조건부 제어 명령어에 대해 업데이트된 예측 어드레스 포인터에서 상기 예측 테이블 회로 내의 하나 이상의 CI 조건부 제어 명령어에 대한 예측 값을 업데이트하도록 구성되는 것인, 프로세서.
  11. 제9항에 있어서,
    상기 명령어 처리 회로는 또한, 상기 조건부 제어 명령어의 상기 결정된 상태에 기반하여 상기 조건부 제어 명령어의 제2 CD 명령어 영역 내의 하나 이상의 CD 명령어를 인출한 후에:
    상기 CI 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 상태를 추론적으로 재예측하고; 그리고
    상기 하나 이상의 CI 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 업데이트하도록 구성되는 것인, 프로세서.
  12. 제11항에 있어서,
    상기 명령어 처리 회로는 또한:
    상기 CI 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 추론적으로 재예측된 상태가 상기 CI 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 결정된 상태와 매칭되는지를 결정하고; 그리고
    상기 하나 이상의 CI 조건부 제어 명령어의 추론적으로 재예측된 상태가 상기 CI 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 결정된 상태와 매칭되지 않는 것에 응답하여:
    상기 업데이트된 하나 이상의 CI 예측 엔트리를 갖는 상기 추론성 예측 이력 표시자에 기반하여 상기 하나 이상의 CI 조건부 제어 명령어를 재처리하도록 구성되는 것인, 프로세서.
  13. 제11항에 있어서,
    상기 명령어 처리 회로는 또한:
    상기 하나 이상의 CI 조건부 제어 명령어에 후속하는 복수의 명령어를 인출하고;
    상기 CI 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 상태를 추론적으로 재예측하고; 그리고
    상기 하나 이상의 CI 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 업데이트하도록 구성되는 것인, 프로세서.
  14. 프로세서에서 조건부 제어 명령어에 대한 추론성 예측을 행하기 위해 사용되는 추론성 이력을 복원하는 방법에 있어서,
    추론성 예측 이력 표시자에 기반하여 명령어 파이프라인에서 명령어 스트림 내의 조건부 제어 명령어의 상태를 추론적으로 예측하는 단계;
    상기 명령어 스트림 내의 상기 조건부 제어 명령어에 후속하는 제1 제어 종속성(CD) 명령어 영역 내의 하나 이상의 CD 조건부 제어 명령어의 상태를 추론적으로 예측하는 단계;
    상기 명령어 스트림 내의 상기 제1 CD 명령어 영역에 후속하는 제어 독립성(CI) 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 상태를 추론적으로 예측하는 단계;
    상기 CI 명령어 영역 내의 상기 하나 이상의 CI 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 업데이트하는 단계;
    상기 조건부 제어 명령어의 상태를 결정하기 위해 상기 조건부 제어 명령어를 실행하는 단계; 및
    상기 추론성 예측이 상기 조건부 제어 명령어의 실행 시에 상기 결정된 상태와 매칭되지 않는 것에 응답하여:
    상기 추론성 예측 이력 표시자의 상기 하나 이상의 CI 예측 엔트리를 저장하는 단계;
    상기 조건부 제어 명령어의 상기 결정된 상태에 기반하여 상기 조건부 제어 명령어의 제2 CD 명령어 영역 내의 하나 이상의 CD 명령어를 인출하는 단계;
    상기 제2 CD 명령어 영역 내의 하나 이상의 CD 조건부 제어 명령어의 상태를 추론적으로 예측하는 단계; 및
    상기 추론성 예측 이력 표시자의 상기 저장된 하나 이상의 CI 예측 엔트리를 복원하는 단계
    를 포함하는, 프로세서에서 조건부 제어 명령어에 대한 추론성 예측을 행하기 위해 사용되는 추론성 이력을 복원하는 방법.
  15. 제14항에 있어서,
    상기 추론성 예측 이력 표시자의 상기 저장된 하나 이상의 CI 예측 엔트리를 복원하는 것에 응답하여:
    상기 CI 명령어 영역 내의 하나 이상의 CI 조건부 제어 명령어의 상태를 추론적으로 예측하는 단계; 및
    상기 하나 이상의 CI 조건부 제어 명령어의 제각기의 추론성 예측에 기반하여 상기 추론성 예측 이력 표시자의 하나 이상의 CI 예측 엔트리를 업데이트하는 단계
    를 더 포함하는, 프로세서에서 조건부 제어 명령어에 대한 추론성 예측을 행하기 위해 사용되는 추론성 이력을 복원하는 방법.
KR1020237010307A 2020-10-12 2021-07-13 제어 독립성 기술을 채용한 프로세서에서 처리되는 명령어에 대한 추론성 예측을 행하는 데 사용된 추론성 이력의 복원 KR20230084140A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/068,253 US11698789B2 (en) 2020-10-12 2020-10-12 Restoring speculative history used for making speculative predictions for instructions processed in a processor employing control independence techniques
US17/068,253 2020-10-12
PCT/US2021/041347 WO2022081221A1 (en) 2020-10-12 2021-07-13 Restoring speculative history used for making speculative predictions for instructions processed in a processor employing control independence techniques

Publications (1)

Publication Number Publication Date
KR20230084140A true KR20230084140A (ko) 2023-06-12

Family

ID=77265206

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237010307A KR20230084140A (ko) 2020-10-12 2021-07-13 제어 독립성 기술을 채용한 프로세서에서 처리되는 명령어에 대한 추론성 예측을 행하는 데 사용된 추론성 이력의 복원

Country Status (6)

Country Link
US (1) US11698789B2 (ko)
EP (1) EP4226241A1 (ko)
JP (1) JP2023545134A (ko)
KR (1) KR20230084140A (ko)
CN (1) CN116324720A (ko)
WO (1) WO2022081221A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11768688B1 (en) * 2022-06-02 2023-09-26 Microsoft Technology Licensing, Llc Methods and circuitry for efficient management of local branch history registers

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5163140A (en) 1990-02-26 1992-11-10 Nexgen Microsystems Two-level branch prediction cache
KR100310581B1 (ko) * 1993-05-14 2001-12-17 피터 엔. 데트킨 분기목표버퍼의추측기록메카니즘
US5454117A (en) 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
US5864697A (en) * 1996-06-28 1999-01-26 Texas Instruments Incorporated Microprocessor using combined actual and speculative branch history prediction
US6502188B1 (en) * 1999-11-16 2002-12-31 Advanced Micro Devices, Inc. Dynamic classification of conditional branches in global history branch prediction
GB2393274B (en) 2002-09-20 2006-03-15 Advanced Risc Mach Ltd Data processing system having an external instruction set and an internal instruction set
US7363477B2 (en) 2003-12-03 2008-04-22 Intel Corporation Method and apparatus to reduce misprediction penalty by exploiting exact convergence
US20080209190A1 (en) 2007-02-28 2008-08-28 Advanced Micro Devices, Inc. Parallel prediction of multiple branches
KR101685247B1 (ko) 2010-09-17 2016-12-09 소프트 머신즈, 인크. 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
US9858081B2 (en) * 2013-08-12 2018-01-02 International Business Machines Corporation Global branch prediction using branch and fetch group history
US11061683B2 (en) 2019-06-13 2021-07-13 Microsoft Technology Licensing, Llc Limiting replay of load-based control independent (CI) instructions in speculative misprediction recovery in a processor

Also Published As

Publication number Publication date
CN116324720A (zh) 2023-06-23
JP2023545134A (ja) 2023-10-26
WO2022081221A1 (en) 2022-04-21
EP4226241A1 (en) 2023-08-16
US11698789B2 (en) 2023-07-11
US20220113976A1 (en) 2022-04-14

Similar Documents

Publication Publication Date Title
US7870369B1 (en) Abort prioritization in a trace-based processor
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
US7222227B2 (en) Control device for speculative instruction execution with a branch instruction insertion, and method for same
EP1296229A2 (en) Scoreboarding mechanism in a pipeline that includes replays and redirects
CN114008587A (zh) 在处理器中的推测性错误预测恢复中限制基于负载的控制无关(ci)指令的重放
US8909907B2 (en) Reducing branch prediction latency using a branch target buffer with a most recently used column prediction
EP4241162A1 (en) Predicting load-based control independent (ci) register data independent (di) (cirdi) instructions as ci memory data dependent (dd) (cimdd) instructions for replay in speculative misprediction recovery in a processor
US11061677B1 (en) Recovering register mapping state of a flushed instruction employing a snapshot of another register mapping state and traversing reorder buffer (ROB) entries in a processor
US10877768B1 (en) Minimizing traversal of a processor reorder buffer (ROB) for register rename map table (RMT) state recovery for interrupted instruction recovery in a processor
US20160170770A1 (en) Providing early instruction execution in an out-of-order (ooo) processor, and related apparatuses, methods, and computer-readable media
KR20230084140A (ko) 제어 독립성 기술을 채용한 프로세서에서 처리되는 명령어에 대한 추론성 예측을 행하는 데 사용된 추론성 이력의 복원
JP3683439B2 (ja) 分岐予測を抑止する情報処理装置および方法
US7900027B2 (en) Scalable link stack control method with full support for speculative operations
KR20230023710A (ko) 명령어 재실행을 감소시키기 위한, 프로세서의 위험에 응답한 명령어 파이프라인 플러시 후 실행되고 플러시된 명령어의 재사용
US20240111540A1 (en) Reuse of branch information queue entries for multiple instances of predicted control instructions in captured loops in a processor
US11113068B1 (en) Performing flush recovery using parallel walks of sliced reorder buffers (SROBs)
US7783863B1 (en) Graceful degradation in a trace-based processor
CN117957524A (zh) 采用环绕跟踪来解决数据溢出的装置
CN114761924A (zh) 基于对废弃寄存器编码指令的处理来废弃存储在处理器中的寄存器中的值
CN118012509A (en) Method for emptying pipeline, processor, chip and electronic equipment