KR20210011060A - 분기 명령어의 유형에 기초한 사전 분기 예측의 선택적 수행 - Google Patents

분기 명령어의 유형에 기초한 사전 분기 예측의 선택적 수행 Download PDF

Info

Publication number
KR20210011060A
KR20210011060A KR1020217001130A KR20217001130A KR20210011060A KR 20210011060 A KR20210011060 A KR 20210011060A KR 1020217001130 A KR1020217001130 A KR 1020217001130A KR 20217001130 A KR20217001130 A KR 20217001130A KR 20210011060 A KR20210011060 A KR 20210011060A
Authority
KR
South Korea
Prior art keywords
branch
block
instruction
prediction
branch instruction
Prior art date
Application number
KR1020217001130A
Other languages
English (en)
Other versions
KR102554799B1 (ko
Inventor
마리우스 에버스
아파르나 티아가라얀
아쇼크 티. 벤카타차
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority to KR1020237023028A priority Critical patent/KR20230110649A/ko
Publication of KR20210011060A publication Critical patent/KR20210011060A/ko
Application granted granted Critical
Publication of KR102554799B1 publication Critical patent/KR102554799B1/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/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/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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/35Indirect addressing
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • 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
    • 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

Abstract

제 2 블록 세트(310, 315)에 대한 분기 예측 구조(500)의 엔트리 세트는 제 1 블록(305)의 제 1 어드레스에 기초하여 액세스된다. 제 2 블록 세트는 제 1 블록 내 하나 이상의 제 1 분기 명령어의 결과에 대응한다. 제 2 블록에서 제 2 분기 명령어의 결과의 추론적 예측은 분기 예측 구조의 엔트리를 기반으로 시작된다. 추론적 예측과 관련된 상태는 분기 명령어 유형에 따라 선택적으로 플러싱된다.

Description

분기 명령어의 유형에 기초한 사전 분기 예측의 선택적 수행
처리 유닛은 상이한 유형의 분기 명령어를 수행하여 프로그램 흐름을 분기 명령어가 나타내는 어드레스의 명령어로 리디렉션(또는 "분기")한다. 분기 명령어 유형에는 프로그램 흐름을 미리 결정된 타겟 어드레스로 리디렉션하는 무조건 분기, 조건이 충족되면 프로그램 흐름을 타겟 어드레스로 리디렉션하도록 "취해지고" 조건이 충족되지 않을 경우 명령어의 순차적 실행을 계속하도록 "취해지지 않는" 조건부 분기, 프로그램 흐름을 서브루틴의 어드레스로 리디렉션시키는 콜 명령어, 서브루틴으로부터 서브루틴을 개시한 콜 명령어 이후의 어드레스로 프로그램 흐름을 리디렉션시키는 리턴 명령어, 및 처리 유닛의 상태에 따라 프로그램 흐름을 상이한 어드레스로 리디렉션시키는 간접 분기 명령어를 포함한다.
분기 예측 기술은 처리 유닛이 분기 명령어를 평가하기 전에 처리 유닛이 예측 분기를 따라 후속 명령어를 추론적으로 실행하기 시작할 수 있도록 분기 명령어의 결과를 추측하는 데 사용된다. 처리 유닛은 분기 명령어를 포함하는 명령어들의 블록과 연관된 분기 예측 구조의 엔트리에 있는 정보를 사용하여 결과를 예측한다. 분기 명령어를 평가할 때 예측 분기가 잘못된 것으로 판명되면, 잘못 예측된 분기를 따른 추측 실행이 중단되고, 처리 유닛의 상태가 분기 명령어의 상태로 롤-백(roll back)되어, 올바른 분기를 따라 실행을 시작한다. 보다 구체적으로, 분기 예측 유닛과 페치 유닛(fetch unit) 모두는 분기가 취해지지 않은 경우 분기 다음의 어드레스 또는 분기의 정확한 타겟으로부터 처리하도록 롤-백된다.
본 개시 내용은 첨부된 도면을 참조함으로써 더 잘 이해될 수 있고, 그 수많은 특징 및 장점들이 당업자에게 명백해질 것이다. 상이한 도면에서 동일한 참조 기호를 사용하는 것은 유사하거나 동일한 엔트리를 나타낸다.
도 1은 일부 실시예에 따른 처리 시스템의 블록도이다.
도 2는 일부 실시예에 따른 프로세서 코어를 포함하는 처리 시스템의 일부의 블록도이다.
도 3은 일부 실시예에 따른 예측 블록에서 분기 명령어의 상이한 가능한 결과에 대응하는 블록 세트 및 예측 블록의 블록도이다.
도 4는 일부 실시예에 따른 프로그램 흐름 및 서브루틴을 포함하는 명령어 세트이다.
도 5는 일부 실시예에 따른 분기 예측 구조의 블록도이다.
도 6은 일부 실시예에 따른 분기 타겟 버퍼의 블록도이다.
도 7은 일부 실시예에 따른 분기 명령어의 유형에 기초하여 비-사전 분기 예측 또는 사전 분기 예측을 선택적으로 수행하는 방법의 흐름도이다.
도 8은 일부 실시예에 따른 분기 타겟 버퍼 및 조건부 분기 예측기를 포함하는 분기 예측 유닛의 일부의 블록도이다.
도 9는 일부 실시예에 따라 리턴 명령어 및 간접 분기 명령어의 서브세트가 "사전 예측" 분기 예측을 사용하도록 선택적으로 허용하는 처리 시스템의 일부의 블록도이다.
분기 예측을 위한 "사전 예측"(predict ahead) 기술에서, 제 1 블록의 어드레스는 분기 예측 구조 및 분기 예측기 스토리지에서 정보에 액세스하기 위한 인덱스로 사용된다. 이 정보는 제 1 블록의 분기 명령어의 타겟이거나 제 1 블록의 모든 분기들이 "취해지지 않은 것으로" 예측될 경우 제 1 블록을 따르는 블록의 분기 명령어의 타겟인, 잠재적 후속 블록들의 세트에 대응하는 한 세트의 엔트리를 포함한다. 예측된 결과는 제 2 블록의 분기 명령어에 대한 분기 예측 정보를 포함하는 엔트리의 서브세트에 대응하는 분기 명령어를 포함하는 제 2 블록을 나타낸다. 분기 예측기는 제 1 블록의 결과가 올바르게 예측되었는지 여부를 결정하기 전에 제 2 블록의 분기 명령어의 결과를 예측하기 위해 엔트리의 서브세트에 있는 정보를 사용한다. 제 2 블록의 어드레스는 제 2 블록의 분기 명령어 중 하나의 결과로 예측된 어드레스에서 세 번째 블록의 분기 명령어의 결과를 예측하는 데 사용되는 정보에 대한 인덱스로 사용된다. 제 1 블록의 분기 결과 또는 타겟이 잘못 예측된 경우 처리 유닛은 제 1 블록에서 잘못 예측된 분기 명령어가 끝날 때 그 상태로 롤-백되고 올바른 경로를 따라 실행을 시작한다. 잘못된 예측이 분기 명령어가 "취해지지 않음"이고 실제 분기 결과가 "취해진" 경우 올바른 경로는 제 1 블록의 분기 명령어의 타겟이 되는 잠재적 후속 블록 세트 중 다른 하나에서 시작된다. 잘못된 예측이 분기 명령어가 "취하여졌고" 실제 분기 결과가 "취해지지 않음"이면 제 2 블록으로 이동하기 전에 제 1 블록의 나머지 부분이 예측되고 페치된다. 따라서, 초기 분기 예측이 잘못된 경우, 처리 유닛은 올바른 경로를 기반으로 분기 예측기를 다시 시작해야하므로 분기 예측기의 지연 시간이 증가한다.
사전 예측 기술의 효과는 분기 명령어의 유형에 따라 다르다. 사전 예측 기술은 일반적으로 조건부 및 무조건 분기 명령어의 정확도를 희생하지 않고 전체 지연 시간을 줄인다. 그러나, 다른 유형의 분기 명령어에 대해 사전 예측 기술을 사용하면 블록 내에서 분기 명령어의 결과를 예측하는 데 사용되는 정보에 대한 인덱스로 블록의 어드레스를 사용하는 기존 분기 예측에 비해 정확도가 떨어질 수 있다. 예를 들어, 서브루틴은 일반적으로 프로그램 내의 여러 위치에서 액세스된다. 각 엔트리가 프로그램 내의 상이한 소스 어드레스에 의해 인덱싱되기 때문에 사전 예측이 사용되는 경우 분기 예측 구조의 여러 엔트리가 서브루틴 내의 블록에 대해 생성된다. 동일한 블록에 대해 여러 엔트리를 저장하면 분기 타겟 버퍼의 공간이 소비되어 용량 손실이 발생한다. 이러한 분기 타겟 버퍼 미스로 인해 분기 예측기가 분기를 식별하지 못하면, 식별되지 않은 분기가 취해지면 잘못된 예측이 발생한다. 다른 예로서, 서브루틴의 리턴 명령어는 프로그램의 여러 타겟 어드레스로 리턴된다. 따라서 분기 타겟 버퍼에는 여러 타겟 어드레스에서 시작하는 블록에 대한 엔트리가 포함된다. 사전 예측을 사용하는 경우 엔트리는 동일한 소스 어드레스(즉, 리턴 명령어가 포함된 블록의 어드레스)로 인덱싱된다. 따라서 집합 연관(set-associative) 분기 타겟 버퍼는 엔트리를 동일한 집합에 저장하므로 분기 타겟 버퍼에 핫스팟이 생성되고, 경로(ways) 수가 동일한 소스 어드레스로 인덱싱된 엔트리 수보다 적 으면 충돌 누락(conflict misses)이 발생한다. 또 다른 예를 들어, 간접 분기 명령어는 처리 유닛의 상태에 따라 간접 분기가 상이한 타겟 어드레스로 점프할 수 있기 때문에 충돌 누락을 생성한다. 이로 인해 여러 엔트리가 리턴 명령어에 대해 나타나는 것과 유사한 방식으로 동일한 소스 어드레스에 의해 인덱싱된다.
도 1 내지 도 9는 제 1 블록 내 분기 명령어의 유형에 기초하여 사전 분기 예측을 선택적으로 수행함으로써 종래의 비-사전 예측기의 정확도를 유지하면서 사전 예측기의 대기 시간 이점의 대부분을 달성하는 분기 예측 기술을 개시한다. 분기 예측기는 분기 예측 구조의 정보에 액세스하기 위한 인덱스로 제 1 블록의 어드레스를 사용한다. 이 정보는 잠재적으로 제 1 블록, 또는 제 1 블록의 모든 분기가 취하지 않은 것으로 예측되는 경우 제 1 블록에 이어지는 블록의 분기 명령어의 타겟이 될 수 있는 제 2 블록 세트에 대응하는 엔트리 세트를 포함한다. 분기 예측 구조에 대한 조합 로직의 여러 인스턴스는 제 1 블록 내 분기 명령어의 결과 결정 이전에(예측된 및 대안의) 제 2 블록에서 분기 명령어의 결과를 예측하기 위해 제 2 블록 세트에 해당하는 엔트리 세트로부터 분기 예측 정보를 사용한다. 분기 예측기는 제 2 블록의 분기 명령어의 결과를 예측하는 조합 논리와 동시에 제 1 블록의 분기 명령어의 유형을 결정한다. 분기 예측기가 일 유형이 분기 명령어의 유형 세트의 미리 결정된 서브세트에 있다고 결정함에 응답하여, 분기 예측기는 제 2 블록에서 분기 명령어의 결과에 대한 추론적 예측과 관련된 상태를 플러시(flush)하고, 두번째 블록의 어드레스를 사용하여 제 2 블록에 대한 분기 예측 구조의 엔트리에 액세스한다. 예를 들어, 분기 예측기는 제 1 블록이 콜 명령어, 리턴 명령어 또는 간접 분기 명령어에서 종료될 것으로 예측된 경우 제 2 블록의 추론적 예측과 관련된 상태를 플러시한다. 그런 다음 분기 예측기는 제 2 블록의 어드레스에 의해 인덱싱된 엔트리에 기초하여 제 2 블록에서 분기 명령어의 결과 예측을 다시 시작한다.
사전 예측 기술을 구현하는 분기 예측기의 일부 실시예의 성능은 감소된 수의 인덱스 비트를 사용하여 개선된다. 예를 들어, 미리 결정된 수의 최하위 비트가 분기 타겟 버퍼에서 엔트리의 인덱스를 생성하는 데 사용되는 어드레스에서 삭제된다. 일부 소프트웨어 구조에는 어드레스 공간에서 서로 근접하고 동일한 타겟 어드레스를 갖는 여러 분기 명령어가 포함된다. 사전 분기 예측에서 이러한 분기 명령어 각각은 동일한 타겟 어드레스를 가져서 동일한 블록을 참조함에도 불구하고, 분기 타겟 버퍼에 상이한 엔트리를 생성한다. 이러한 유형의 중복은 인덱스에서 미리 결정된 최하위 비트 수를 삭제함으로써 감소되어, 근접 분기 명령어가 분기 타겟 버퍼의 단일 엔트리에 대해 동일한 인덱스를 갖도록 한다.
도 1은 일부 실시예에 따른 처리 시스템(100)의 블록도이다. 처리 시스템(100)은 동적 랜덤 액세스 메모리(DRAM)와 같은 비일시적 컴퓨터 판독 가능 매체를 사용하여 구현되는 메모리(105) 또는 다른 저장 구성 요소를 포함하거나 이에 대한 액세스를 갖는다. 그러나, 일부 경우에, 메모리(105)는 정적 랜덤 액세스 메모리(SRAM), 비휘발성 RAM 등을 포함하는 다른 유형의 메모리를 사용하여 구현된다. 메모리(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)"라고 함)를 구현한다. 프로세서 코어(131-133)는 메모리(105)에 저장된 프로그램 코드(135)와 같은 명령어를 실행하고, CPU(130)는 실행된 명령어의 결과와 같은 정보를 메모리(105)에 저장한다. CPU(130)는 또한 GPU(115)에 드로오 콜(draw call)을 발행함으로써 그래픽 처리를 개시할 수 있다. 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)를 포함한다. 메모리(210)에 저장된 정보 중 일부의 사본은 또한 캐시(215)에 저장된다. 예를 들어, 자주 액세스되는 명령어는 캐시(215)의 캐시 라인 또는 캐시 블록에 저장된다.
프로세서 코어(205)는 조건부 분기 예측기 스토리지 및 조건부 분기 예측 로직을 포함하는 분기 예측 유닛(220)을 포함한다. 조건부 분기 예측기 스토리지는 메모리(210)에 위치들의 어드레스를 저장하고 조건부 분기 예측 로직은 아래에서 상세히 논의되는 바와 같이 분기 명령어의 결과를 예측하도록 구성된다. 분기 명령어에는 조건이 참인지 거짓인지에 따라 프로그램 흐름을 일 어드레스로 리디렉션하는 조건부 분기 명령어가 포함된다. 예를 들어, 조건부 분기 명령어는 if-then-else 및 case 문과 같은 소프트웨어 구성을 구현하는 데 사용된다. 분기 명령어에는 항상 프로그램 흐름을 명령어에 표시된 어드레스로 리디렉션하는 무조건 분기 명령어도 포함된다. 예를 들어 JMP 명령어는 항상 명령어에 표시된 어드레스로 점프한다. 분기 명령어에는 프로그램 흐름을 서브루틴의 위치로 리디렉션하는 콜 명령어와, 프로그램 흐름을 서브루틴으로부터 프로그램 흐름의 콜 명령어 다음에 오는 명령어로 리디렉션하는 리턴 명령어를 더 포함한다. 경우에 따라 타겟 어드레스가 레지스터 또는 메모리 위치에 제공되어, 분기가 실행될 때마다 타겟이 다를 수 있다. 이러한 분기를 간접 분기라고한다.
분기 예측 유닛(220)의 일부 실시예는 현재 프로세스 또는 프로세서 코어(205)에서 이전에 실행된 프로세스에 의해 이전에 실행된 분기 명령어와 관련된 엔트리를 포함한다. 분기 예측 유닛(220)의 각 엔트리에 저장된 분기 예측 정보는, 분기 명령어가 프로그램 흐름을 명령어의 어드레스로 보낼 가능성을 나타낸다. 분기 예측 유닛(220)의 엔트리는 해당 분기 명령어와 관련된 어드레스를 기반으로 액세스된다. 예를 들어, 분기 명령어의 물리적 어드레스, 가상 어드레스 또는 캐시 라인 어드레스를 나타내는 비트(또는 그 서브세트)의 값은 분기 예측 유닛(220)에 대한 인덱스로 사용된다. 다른 예로서, 비트(또는 그 서브세트)의 해시 값은 분기 예측 유닛(220)에 대한 인덱스로 사용된다. 분기 예측 구조의 예로는 간접 분기 예측기, 리턴 어드레스 스택, 분기 타겟 버퍼, 조건부 분기 예측기, 분기 히스토리, 또는 분기 예측 정보를 저장하는 데 사용되는 기타 예측기 구조가 있다.
분기 예측 유닛(220)의 일부 실시예는 비-사전 분기 예측 로직 및 사전 분기 예측 로직을 포함한다. 본 명세서에서 사용되는 바와 같이, "비-사전 분기 예측"이라는 문구는 블록을 식별하는 어드레스에 기초하여 액세스되는 분기 예측 구조(예: 분기 타겟 버퍼)의 엔트리에 기초하여 블록 내 하나 이상의 분기 명령어에 대해 분기 예측 유닛(220)에 의해 수행되는 분기 예측을 지칭한다. 본 명세서에서 사용되는 바와 같이, "사전 분기 예측"이라는 문구는 분기 예측 유닛(220)에서 이전에 처리되었거나 동시에 처리되고 있는 블록을 식별하는 어드레스를 기반으로 액세스되는 분기 예측 구조의 엔트리에 기초하여 블록 내 하나 이상의 분기 명령어에 대해 분기 예측 유닛(220)에 의해 수행되는 분기 예측을 의미한다. 예를 들어, 분기 예측 유닛(220)은 제 1 블록에서 분기 명령어의 결과를 예측할 수 있다. 결과는 제 2 블록을 나타내고, 사전 분기 예측 로직은 본 명세서에서 상세히 논의되는 바와 같이 제 1 블록의 어드레스에 기초하여 제 2 블록의 분기 명령어에 대한 엔트리에 액세스할 수 있음을 나타낸다.
분기 예측 유닛(220)는 분기 명령어의 유형에 기초하여 사전 분기 예측 또는 비-사전 분기 예측을 선택적으로 활용한다. 예를 들어, 분기 예측 유닛(220)의 사전 분기 예측 로직은 조건부 및 무조건 분기 명령어에 대한 분기 예측을 수행하는 데 사용된다. 분기 예측 유닛(220)의 비-사전 분기 예측 로직은 서브루틴의 어드레스로 분기하는 콜 명령어, 서브루틴으로부터 상기 콜 명령어에 이어지는 후속 어드레스로 복귀하는 리턴 명령어, 및 간접 분기 명령어에 대한 분기 예측을 수행하는 데 사용된다. 분기 예측 유닛(220)은 현재 블록의 분기 명령어의 가능한 결과에 대응하는 하나 이상의 후속 블록 내 분기 명령어의 결과를 추론적으로 예측하는 것과 동시에 현재 블록의 분기 명령어의 유형을 결정한다. 분기 예측 유닛(220)이 현재 블록의 분기 명령어의 유형이 미리 결정된 유형의 서브세트(예: 분기 명령어가 콜 명령어, 리턴 명령어 또는 간접 분기 명령어임)인 것으로 판단하면, 분기 예측 유닛(220)의 상태가 플러시되고, 후속 블록의 어드레스에 기초하여 비-사전 분기 예측 로직을 사용하여 후속 블록 중 하나에 대한 분기 예측이 재개된다.
일부 실시예에서, 분기 명령어의 결과가 BTB 엔트리, 간접 분기 예측기, 또는 리턴 어드레스 스택에 기초하여 예측되는지 여부을 기반으로 분기 명령어에 대해 사전 예측이 사용될 수 있도록 특정 유형의 분기 명령어가 유형의 미리 결정된 서브세트로부터 제거된다. 예를 들어, 아래 논의되는 바와 같이, 간접 분기 예측기가 결과를 예측하는 대신에, BTB 엔트리가 간접 분기 명령어의 결과를 예측함에 응답하여, 간접 분기 명령어에 대해 사전 예측이 사용되도록 미리 결정된 유형의 서브세트로부터 간접 분기 명령어가 제거될 수 있다. 다른 예에서, 리턴 명령어는 아래에서 논의되는 바와 같이, 리턴 어드레스 스택이 결과를 예측하는 대신, BTB 엔트리가 리턴 명령어의 결과를 예측함에 응답하여, 리턴 명령어가 미리 결정된 유형의 서브세트로부터 제거될 수 있다.
페치 유닛(225)은 분기 예측 유닛(220)으로부터 수신된 어드레스에 기초하여 메모리(210) 또는 캐시(215)로부터 명령어와 같은 정보를 페치한다. 페치 유닛(225)은 캐시(215) 또는 메모리(210)로부터 명령어를 나타내는 바이트를 읽고, 명령어를 디코드 유닛(230)에 전송한다. 디코드 유닛(230)은 명령어 바이트를 검사하고 명령어의 기능을 결정한다. 디코드 유닛(230)은 프로세서 코어(205)에 의해 수행될 일련의 동작을 생성하기 위해 명령어를 번역(즉, 디코딩)한다. 이러한 동작은 스케줄러(235)에 기록된다. 스케줄러(235)는 동작에 대한 소스 값이 준비된 시기를 결정하고, 동작 수행을 위해 소스 값을 하나 이상의 실행 유닛(231, 232, 233)으로 전송하며, 이들은 본 명세서에서 집합적으로 "실행 유닛(231-233)"으로 지칭된다. 결과는 레지스터 파일(240)에 다시 기록된다.
스케줄러(235)는 프로세서 코어(205)에 의한 명령어의 실행을 스케줄링한다. 스케줄러(235)의 일부 실시예는 프로그램 흐름을 분기 명령어에 의해 표시되는 메모리(210)(또는 관련 캐시(215)) 내 어드레스의 명령어로 리디렉션시키는 분기 명령어에 이어지는 명령어의 추론적 실행을 수행한다. 그 후, 프로세서 코어(205)는 프로그램 흐름의 예측된 분기를 따라 후속 명령어뿐만 아니라 목적지 어드레스에서 명령어를 추론적으로 실행할 수 있다. 분기 명령어를 평가할 때 예측 분기가 잘못된 것으로 판명되면, 잘못 예측된 분기를 따른 추론적 실행이 중단되고 프로세서 코어(205)의 상태가 분기 명령어의 상태로 롤-백되어, 올바른 분기를 따라 실행을 시작한다. .
도 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에 도시된 분기 예측 유닛(220)와 같은 분기 예측기는 예측 블록 내에서 여러 분기 명령어의 결과를 동시에 예측한다. 예시된 실시예에서, 분기 예측기는 분기 명령어(320) 및 분기 명령어(325)의 결과를 동시에 예측한다. 분기 명령어(320)의 가능한 결과는 "취하여지고", 이 경우 프로그램 흐름은 블록(305)의 명령어(340)의 타겟 어드레스로 분기하고, 또는 "취하여지지 않아서",이 경우 프로그램 흐름이 예측 블록(300)의 명령어(330)로 순차적으로 계속된다. 분기 명령어(325)의 가능한 결과는 "취하여지고", 이 경우 프로그램 흐름은 블록(310)의 명령어(350)의 타겟 어드레스로 분기하고, 또는 "취하여지지 않아서", 이 경우 프로그램 흐름은 예측 블록(300)의 명령어(335)로 순차적으로 계속된다.
블록(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)의 유형을 결정한다. 일부 실시예에서, 블록(305, 310, 315)의 어드레스를 기반으로 액세스되는 분기 예측 구조의 대응 엔트리를 이용하여 블록(305, 310, 315) 내 분기 명령어들의 결과를 동시에 예측하기 위해 분기 예측기에서 사전 분기 예측기가 구현된다. 사전 분기 예측은 유형의 첫 번째 서브세트(예: 조건부 및 무조건 분기 명령어)에 대해 우선적이며, 비-사전 분기 예측은 유형의 두 번째 서브세트(예: 콜 명령어, 리턴 명령어 및 간접 분기 명령어)에 대해 우선한다. 그러므로 분기 예측기는 분기 명령어(320, 325)의 유형에 기초하여 사전 또는 비-사전 분기 예측을 선택적으로 수행한다. 분기 명령어(320, 325) 중 하나 이상의 유형이 제 1 서브세트에 있다는 결정에 응답하여, 분기 예측기는 사전 분기 예측을 계속한다. 분기 명령어(320, 325) 중 하나 이상의 유형이 제 2 서브세트에 있다는 결정에 응답하여, 분기 예측기의 상태가 플러시되고, 분기 예측이 비-사전 분기 예측을 위해, 예를 들어, 분기 예측기에 대한 비-사전 인덱싱을 이용하여, 재개된다.
도 4는 일부 실시예에 따른 프로그램 흐름(405) 및 서브루틴(410)을 포함하는 명령어 세트(400)이다. 프로그램 흐름(405)은 프로그램 흐름(405)의 상이한 위치에서 서브루틴(410)을 호출하는 콜 명령어(415, 420, 425)를 포함한다. 콜 명령어(415, 420, 425)의 일부 실시예는 명령어(430)의 어드레스에 기초하여 프로그램 흐름(405)을 명령어(430)로 리디렉션함으로써 서브루틴(410)을 호출한다. 사전 명령어(ahead instruction)를 사용하는 분기 예측기는 이전 블록의 어드레스를 기반으로 블록의 분기 명령어에 대한 분기 예측 구조의 엔트리를 생성한다. 따라서, 분기 예측기는 콜 명령어(415, 420, 425) 각각에 대해 서브루틴(410)에 대한 분기 예측 구조의 엔트리를 생성한다. 예를 들어 분기 예측기는 콜 명령어(415)의 어드레스를 사용하여 액세스되는 분기 예측 구조의 제 1 엔트리, 콜 명령어(420)의 어드레스를 사용하여 액세스되는 분기 예측 구조의 제 2 엔트리, 및 콜 명령어(425)의 어드레스를 사용하여 액세스되는 분기 예측 구조의 제 3 엔트리를 생성한다. 제 1, 제 2 및 제 3 엔트리의 분기 예측 정보는 동일한 서브루틴(410)을 참조하기 때문에 동일하다.
서브루틴(410)은 프로그램 흐름(405)을 서브루틴(410)으로 리디렉션시킨 콜 명령어에 후속하는 명령어로 흐름을 다시 리디렉션시키는 리턴 명령어(440) 및(일부 경우에 분기 명령어를 포함하는) 하나 이상의 추가 명령어(435)를 포함한다. 예를 들어, 리턴 명령어(440)는 흐름을, 서브루틴(410)이 콜 명령어(415)에 의해 호출된 경우 명령어(445), 서브루틴(410)이 콜 명령어(420)에 의해 호출된 경우 명령어(450), 서브루틴(410)이 콜 명령어(425)에 의해 호출된 경우 명령어(455)로, 리디렉션한다. 분기 예측기는 명령어(445, 450, 455)의 타겟 어드레스에 의해 식별된 블록에 대한 분기 예측 구조의 엔트리를 생성한다. 사전 예측이 사용되는 경우 엔트리는 동일한 소스 어드레스, 즉, 리턴 명령어(440)을 포함하는 블록의 어드레스에 의해 인덱싱된다. 따라서 집합 연관 분기 예측 구조는 동일한 세트의 명령어(445, 450, 455)에 대한 엔트리를 저장하고, 이는 분기 예측 구조에 핫스팟을 생성하고, 경로(ways) 수가 동일한 소스 어드레스에 의해 인덱싱된 엔트리 수보다 적으면 충돌 누락을 유발한다.
도 5는 일부 실시예에 따른 분기 예측 구조(500)의 블록도이다. 분기 예측 구조(500)는 도 2에 도시된 분기 예측 유닛(220)의 일부 실시예에서 구현된다. 분기 예측 구조(500)는 도 4에 도시된 콜 명령어(415, 420, 425)과 같은 콜 명령어의 사전 분기 예측 동안 생성되는 엔트리(505, 510, 515)를 포함한다. 콜 명령어는 프로그램 흐름을 동일한 서브루틴, 예를 들어, 도 4에 도시된 서브루틴(410)으로 리디렉션한다.
엔트리(505)는 2 개의 분기 명령어에 대한 분기 예측 정보를 포함한다. 예를 들어, 엔트리(505)는 어드레스(520)에 대한 제 1 분기 명령어의 위치를 나타내는 오프셋(535), 및 어드레스(520)에 대한 제 2 분기 명령어의 위치를 나타내는 오프셋(540)을 포함한다. 엔트리(505)는 또한 제 1 및 제 2 분기 명령어의 유형(545, 550) 및 제 1 및 제 2 분기 명령어의 타겟 어드레스(555, 560)를 식별하는 식별 정보를 포함한다. 프로그램 흐름은 제 1 분기 명령어가 취하여지면 제 1 분기 명령어에서 타겟 어드레스(555)로 분기된다. 그렇지 않으면 프로그램 흐름이 제 2 분기 명령어에 도달할 때까지 블록의 명령어와 함께 순차적으로 계속된다. 프로그램 흐름은 제 2 분기 명령어가 취해지면 제 2 분기 명령어로부터 타겟 어드레스(560)로 분기되고, 그렇지 않으면 프로그램 흐름은 블록의 명령어와 함께 순차적으로 계속된다. 오버플로 표시기(565)는 다음 순차 경계 이전에 추가 분기 명령어가 있는지 여부를 표시한다. 일부 실시예에서, 순차 경계는 명령어 캐시 라인 경계와 일치한다. 다른 실시예에서, 순차 경계는 다른 정렬된 어드레스에 설정된다. 도 5에 도시된 엔트리(505)는 분기 타겟 버퍼와 같은 분기 예측 구조의 엔트리의 일례이다. 엔트리(505)의 일부 실시예는 상이한 방식으로 구성되거나 구조화된 상이한 분기 예측 정보를 포함한다.
엔트리(510, 515)는 예를 들어, 도 4에 도시된 콜 명령어(415, 420, 425)를 포함하는 블록의 어드레스와 같은, 이전 어드레스에 의해 인덱싱되기 때문에, BTB 어레이의 다른 인덱스에 위치한다. 그러나 오프셋, 분기 명령어 유형, 타겟 어드레스 및 오버플로 값과 같은 엔트리(510, 515)의 내용은 엔트리(505, 510, 515)가 모두 동일한 명령어 블록(가령, 도 4에 도시된 콜 명령어(415, 420, 425)에 의해 호출된 서브루틴에 대응하는 명령어 블록(410))에 대해 생성되기 때문에 엔트리(505)의 내용과 동일하다. 엔트리(505, 510, 515)는 따라서 분기 예측 구조에서 불필요하게 공간을 소비하는 서로의 중복이다.
도 6은 일부 실시예에 따른 분기 타겟 버퍼(600)의 블록도이다. 분기 타겟 버퍼(600)는 도 2에 도시된 분기 예측 유닛(220)의 일부 실시예를 구현하기 위해 사용된다. 분기 타겟 버퍼(600)의 엔트리는 분기 명령어를 포함하는 블록의 어드레스에 기초하여 형성된 인덱스를 사용하여 인덱싱된다. 예를 들어, 비-사전 예측이 사용될 때, 분기 명령어를 포함하는 블록의 어드레스가, 분기 타겟 버퍼(600)의 엔트리에 인덱스를 생성하기 위해 사용된다. 다른 예로서, 사전 예측이 사용되는 경우, 이전 블록의 어드레스는 현재 블록에 해당하는 분기 타겟 버퍼의 엔트리에 인덱스를 생성하는 데 사용된다.
예시된 실시예에서, 분기 타겟 버퍼(600)는 대응하는 프로세서 코어에서 실행되는 프로그램 흐름에서 분기 명령어에 대한 분기 예측 정보를 포함하는 엔트리를 저장하는 4-경로 집합-연관 버퍼(4-way set-associative buffer)이다. 따라서 각 인덱스는 여러 엔트리를 포함하는 네 가지 경로 중 하나로 엔트리에 매핑된다. 예를 들어, 분기 타겟 버퍼(600)는 실선 박스로 표시된 바와 같이 제 1 경로에 대응하는 엔트리(605, 610, 615)를 포함한다. 다른 엔트리(620)(명확성을 위해 참조 번호로 하나만 표시됨)는 점선 상자로 표시된 바와 같이 4-경로 집합-연관 버퍼의 다른 경로에 대응한다.
분기 예측기는 대응하는 분기 명령어와 연관된 어드레스에 기초하여 생성되는 인덱스(625, 630, 635)에 의해 식별되는 블록에 대해 분기 타겟 버퍼(600)에 엔트리를 생성한다. 예시된 실시예에서, 분기 예측기는 사전 예측을 구현하고, 인덱스(625, 630, 635)와 연관된 분기 명령어는 서브루틴의 리턴 명령어다. 따라서 인덱스(625, 630, 635)는 동일한 소스 어드레스, 즉 서브루틴의 리턴 명령어가 포함된 블록의 어드레스를 기반으로 생성되기 때문에 동일한 값을 가진다. 따라서 인덱스(625, 630, 635)에 의해 식별된 엔트리는 분기 타겟 버퍼(600)에서 동일한(첫 번째) 경로로 엔트리(605, 610, 615)에 생성된다. 이것은, 특히, 다른 인덱스를 이용하여 액세스되는 분기 타겟 버퍼(600)의 다른 경로(620)에서 엔트리가 생성되지 않기 때문에(또는 보다 적은 엔트리가 생성되기 때문에), 제 1 경로에 핫스팟을 생성한다. 핫스팟은 첫 번째 경로의 엔트리 수가 동일한 소스 어드레스에 의해 인덱싱된 엔트리 수보다 적을 경우(예: 동일한 리턴 명령어를 통해 액세스되는 블록에 대한 블록 예측 정보가 소비하는 엔트리 수가 제 1 경로의 엔트리 수를 초과하는 경우) 충돌 누락(conflict misses)을 유발한다.
도 7은 일부 실시예에 따른 분기 명령어의 유형에 기초하여 비-사전 분기 예측 또는 사전 분기 예측을 선택적으로 수행하는 방법의 흐름도(700)이다. 방법(700)의 제 1 부분은 도 1에 도시된 처리 시스템(100) 및 도 2에 도시된 처리 시스템의 부분(200)의 일부 실시예에서 구현된다. 예시된 실시예에서, 분기 예측기는 2 개의 분기 명령어와 같은, 미리 결정된 수의 분기 명령어까지의 결과를 동시에 예측한다. 그러나, 블록은 미리 결정된 수의 분기 명령어를 정확하게 포함할 필요가 없고, 일부 블록은 미리 결정된 수의 분기 명령어보다 많거나 적은 수를 포함한다.
블록(705)에서, 분기 예측기는 제 1 블록에서 제 1 및 제 2 분기의 결과를 동시에 예측한다. 본 명세서에서 논의된 바와 같이, 제 1 블록에서 제 1 및 제 2 분기의 결과들의 상이한 조합은, 상이한 목적지 제 2 블록에 대응한다. 분기 예측기는 제 1 및 제 2 분기의 예측된 결과를 기반으로 제 2 블록 중 하나를 "예측된"제 2 블록으로 식별한다. 다른 결과에 해당하는 제 2 블록은 "대안의" 제 2 블록으로 식별된다. 그 후 방법(700)의 일부는 블록(710, 715)으로 진행된다.
블록(710)에서, 분기 예측기는 제 1 블록에서 분기 명령어 중 하나 이상의 유형을 결정한다. 본 명세서에서 논의된 바와 같이, 유형은 조건부 분기 명령어 및 무조건 직접 분기 명령어를 포함하는 제 1 서브세트와, 콜 명령어, 리턴 명령어 및 간접 분기 명령어를 포함하는 제 2 서브세트를 포함한다. 일부 실시예에서, 다른 유형의 명령어가 제 1 또는 제 2 서브세트에 포함된다. 예를 들어, 간접 분기 명령어는 아래에서 논의되는 바와 같이 간접 분기 예측기가 예측된 제 2 블록의 어드레스를 생성함에 응답하여 제 1 서브세트에 포함된다. 다른 예에서, 리턴 명령어는 아래에서 논의되는 바와 같이 리턴 어드레스가 예측된 제 2 블록의 어드레스를 생성함에 응답하여 제 1 서브세트에 포함된다. 분기 예측기는 도 5에 도시된 분기 예측 구조(500) 및 도 6에 도시된 분기 타겟 버퍼(600)와 같은 분기 예측 구조로부터 불러들인 분기 예측 정보에 기초하여 분기 명령어의 유형을 결정한다.
블록(715)에서, 분기 예측기는 예측된 및 대안의 제 2 블록에서 분기 명령어의 결과에 대한 사전 예측을 시작한다. 분기 예측기에 의한 사전 예측은 본 명세서에서 논의되는 바와 같이, 제 1 블록의 어드레스로부터 유도된 인덱스에 기초하여 액세스되는 분기 예측 구조의 엔트리 내의 분기 예측 정보에 기초하여 수행된다. 일부 실시예에서, 조건부 예측 로직의 다중 인스턴스는 예측된 및 대안의 제 2 블록 각각에서 제 1 및 제 2 분기 명령어의 결과를 예측하는 데 사용된다. 일부 실시예에서, 조건부 예측 로직의 제 1 인스턴스는 예측된 제 2 블록에서 제 1 및 제 2 분기 명령어의 결과를 예측하고, 제 2 인스턴스는 대안의 제 2 블록 중 하나에서 제 1 및 제 2 분기 명령어의 결과를 예측하며, 제 3 인스턴스는 대안의 제 2 블록 중 다른 하나에서 제 1 및 제 2 분기 명령어의 결과를 예측한다. 그러나, 다른 실시예에서, 제 2 블록의 일부 또는 전부는 더 많거나 더 적은 분기 명령어를 포함한다.
블록(710, 715)은 예시된 실시예에서 동시에 수행된다. 그러나, 분기 예측기의 일부 실시예는 순차적으로 또는 인터리빙 방식을 포함하는 다른 순서로 블록(710, 715)의 연산의 일부 또는 전부를 수행한다. 방법(700)은 분기 디스크립션이 제 1 블록에 있는 하나 이상의 분기 명령어의 유형을 결정함에 응답하여 결정 블록(720)으로 이동한다.
결정 블록(720)에서, 분기 예측기는 제 1 블록에서 제 1 예측 취해진 분기 명령어의 유형이 유형 세트의 제 1 서브세트에 있는지 또는 제 2 서브세트에 있는지를 결정한다. 분기 예측기가 분기 명령어가 유형의 제 1 서브세트에 있다고 결정하는 경우, 예를 들어 분기 명령어가 조건부 분기 명령어 또는 무조건 분기 명령어 인 경우, 방법(700)은 블록(725)으로 이동하고, 분기 예측기는 사전 분기 예측 기술을 계속 사용한다. 분기 명령어가 유형의 제 2 서브세트에 있다고 분기 예측기가 결정하면, 예를 들어 분기 명령어가 콜 명령어, 리턴 명령어 또는 간접 분기 명령어인 경우, 방법(700)은 블록(730)으로 진행한다.
본 명세서에서 논의된 바와 같이, 제 2 서브세트의 유형의 분기 명령어의 결과를 예측하기 위해 사전 분기 예측을 사용하면, 블록 내 분기 명령어의 결과를 예측하는 데 사용되는 정보에 대한 인덱스로 블록의 어드레스를 사용하는 기존 분기 예측에 비해 정확도가 잠재적으로 희생될 수 있다. 제 2 서브세트의 유형을 갖는 분기 명령어에 대한 정확성을 보존하기 위해, 분기 예측 파이프 라인은 블록(730)에서 플러시되어, 예측된 및 대안의 제 2 블록의 분기 명령어에서 결과의 사전 예측과 관련된 상태를 제거한다. 그 다음, 예측된 제 2 블록의 어드레스에 기초하여 분기 예측 구조의 엔트리로부터 액세스된 분기 예측 정보를 사용하여 예측된 제 2 블록에 대해 비-사전 분기 예측이 재개된다.
도 8은 일부 실시예에 따른 분기 타겟 버퍼 및 조건부 분기 예측기를 포함하는 분기 예측 유닛(800)의 일부의 블록도이다. 분기 예측 유닛(800)은 도 2에 도시된 분기 예측 유닛(220)의 일부 실시예를 구현하는데 사용된다. 어드레스(805)는 명령어 블록의 시작 어드레스를 나타낸다. 분기 타겟 버퍼의 엔트리는 엔트리와 연관된 블록의 시작 어드레스로 인덱스된다. 예시된 실시예에서, 블록 내의 분기 명령어에 대한 분기 예측 정보를 포함하는 분기 타겟 버퍼의 엔트리(815)에 대한 인덱스(810)는 어드레스(805)와 동일한 값을 포함한다. 따라서 인덱스(810)는 분기 타겟 버퍼의 엔트리(815)에 액세스하는 데 사용된다. 예를 들어, 도 3에 도시된 블록(300)의 어드레스는 블록(300) 내 분기(320, 325)에 대응하는 분기 타겟 버퍼의 엔트리에 대한 인덱스로 사용된다.
엔트리(815)는 2 개의 분기 명령어에 대한 분기 예측 정보를 포함한다. 예를 들어, 엔트리(815)는 어드레스(805)에 대한 제 1 분기 명령어의 위치를 나타내는 오프셋(820)과, 어드레스(805)에 대한 제 2 분기 명령어의 위치를 나타내는 오프셋(825)을 포함한다. 엔트리는 또한, 제 1 및 제 2 분기 명령어의 유형(830, 835)과, 제 1 및 제 2 분기 명령어의 타겟 어드레스(840, 845)를 식별하는 정보를 포함한다. 프로그램 흐름은 제 1 분기 명령어가 취해지면 제 1 분기 명령어로부터 타겟 어드레스(840)로 분기된다. 그렇지 않으면 프로그램 흐름이 제 2 분기 명령어에 도달할 때까지 블록의 명령어와 함께 순차적으로 계속된다. 프로그램 흐름은 제 2 분기 명령어가 취해지면 제 2 분기 명령어로부터 타겟 어드레스(845)로 분기되고, 그렇지 않으면 프로그램 흐름은 블록의 명령어와 함께 순차적으로 계속된다. 오버플로 표시기(850)는 다음 순차 경계 이전에 추가 분기 명령어가 있는지 여부를 표시한다. 일부 실시예에서, 순차 경계는 명령어 캐시 라인 경계와 일치한다. 다른 실시예에서, 순차 경계는 다른 정렬된 어드레스에서 설정된다. 도 8에 도시된 엔트리(815)는 분기 타겟 버퍼의 엔트리의 일례이다. 엔트리(815)의 일부 실시예는 상이한 방식으로 구성되거나 구조화된 상이한 분기 예측 정보를 포함한다.
분기 예측 구조는 조건부 분기 예측기 스토리지(860) 및 조건부 예측 로직(865)을 포함한다. 조건부 분기 예측기 스토리지(860)는 분기 명령어의 결과를 예측하는 데 사용되는 정보를 저장한다. 인덱스(810)는 어드레스(805)에 의해 표시된 블록과 연관된 저장된 정보에 액세스하기 위해 조건부 분기 예측기 스토리지(860)에 제공된다. 일부 실시예에서, 분기 히스토리 정보(855)와 같은 추가 정보가 조건부 분기 예측기 스토리지(860)에 제공된다. 어드레스(805)에서 시작하는 블록과 관련된 액세스된 정보는 조건부 예측 로직(865)에 제공되며, 이는 또한 엔트리(815)로부터 블록의 분기 명령어에 대한 분기 예측 정보를 수신한다. 조건부 예측 로직(865)은 블록 내 분기 명령어의 결과를 예측하기 위해 조건부 분기 예측기 스토리지(860) 및 엔트리(815)로부터 액세스되는 정보를 이용한다. 예시된 실시예에서, 조건부 예측 로직(865)은 제 1 분기 명령어가 취해지지 않고 제 2 분기 명령어가 취해지는 것을 예측한다. 따라서, 조건부 예측 로직(865)은 제 1 블록의 끝이 제 2 분기 명령어(OFFSET_2)의 위치에 있고 제 2 분기 명령어의 타겟 어드레스가 T_ADDR_2라고 예측한다.
도 9는 일부 실시예에 따라 리턴 명령어 및 간접 분기 명령어의 서브세트가 "사전 예측" 분기 예측을 사용하도록 선택적으로 허용하는 처리 시스템의 일부(900)의 블록도이다. 처리 시스템의 일부(900)는 도 1에 도시된 처리 시스템(100) 및 도 2에 도시된 처리 시스템의 일부(200)의 일부 실시예를 구현하는 데 사용된다. 부분(900)의 예시된 실시예는 간접 분기 명령어 또는 리턴 명령어의 타겟을 저장하는 BTB 엔트리(905)를 포함한다. 간접 예측기(910)는 간접 분기 명령어의 타겟을 예측하고 리턴 어드레스 스택(915)은 리턴 명령어의 리턴 어드레스를 예측한다. 간접 예측기(910) 및 리턴 어드레스 스택(915)은 대응하는 분기의 결과가 예측될 때마다 상이한 어드레스를 리턴한다. 간접 분기 명령어 또는 리턴 명령어의 첫 번째 타겟은 분기가 가령, BTB 엔트리(905)에, 처음 설치될 때 BTB에 기록된다. 간접 분기 명령어 또는 리턴 명령어에 대한 BTB 엔트리(905)에 저장된 타겟 정보는 이후 변경되지 않는다.
간접 분기 예측기(910) 또는 리턴 어드레스 스택(915)으로부터의 예측은 BTB 엔트리(905)의 예측보다 우선 순위가 부여된다. 예를 들어, 간접 예측기(910)가 간접 분기 명령어에 대한 타겟 어드레스를 예측하는 경우, 이 타겟 어드레스는 BTB 엔트리(905)에 의해 예측된 타겟 어드레스 대신 후속 분기 예측을 위해 선택기(920)에 의해 선택된다. 다른 예로서, 리턴 어드레스 스택(915)이 리턴 명령어에 대한 리턴 어드레스를 예측하는 경우, 이 리턴 어드레스는 BTB 엔트리(905)에 의해 예측되는 리턴 어드레스 대신, 후속 분기 예측을 위해 선택기(920)에 의해 선택된다. 간접 분기 예측기(910) 및 리턴 어드레스 스택(915)은 항상 예측을 반환하지는 않는다. 따라서 BTB 엔트리(905)에 의해 예측된 어드레스는 간접 분기 예측기(910) 또는 리턴 어드레스 스택(915)에 의한 예측이 없을 때 선택기(920)에 의해 선택된다.
일부 실시예에서, 선택기(920)에 의해 선택된 어드레스를 생성하는 엔티티에 따라 간접 분기 명령어 및 리턴 명령어에 대해 전방 예측 또는 비-사전 예측이 선택적으로 사용된다. 사전 예측은 선택기(920)가 BTB 엔트리(905)에 의해 예측된 어드레스를 선택함에 응답하여 사용되며, 이는 BTB 엔트리(905)가 분기 예측을 위해 사용될 때마다 동일한 어드레스에 대해 분기 예측이 수행되기 때문이다. 따라서 이러한 경우 사전 예측을 사용하여 BTB 어레이에서 핫스팟이 생성되지 않는다. 비-사전 예측은 선택기(920)가 간접 분기 예측기(910) 또는 리턴 어드레스 스택(915)에 의해 예측된 어드레스를 선택함에 응답하여 사용되는데, 이는 이들 엔티티가 매번 상이한 타겟 어드레스를 생성하고 따라서 본 명세서에서 논의된 바와 같이 BTB 어레이에서 핫스팟을 생성할 수 있기 때문이다. .
본 명세서에 개시된 바와 같이, 방법은 제 1 블록의 제 1 어드레스에 기초하여, 제 1 블록의 적어도 하나의 제 1 분기 명령어의 결과에 대응하는 제 2 블록 세트에 대한 분기 예측 구조의 엔트리 세트에 액세스하는 단계; 분기 예측 구조의 엔트리 세트에 기초하여 제 2 블록 세트에서 제 2 분기 명령어의 결과에 대한 추론적 예측을 시작하는 단계; 및 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형에 기초하여 추론적 예측과 연관된 상태를 선택적으로 플러싱하는 단계를 포함한다. 일 양태에서, 분기 예측 구조의 엔트리 세트에 액세스하는 것은 적어도 하나의 제 1 분기 명령어의 잠재적 타겟인 제 2 블록 세트, 또는, 적어도 하나의 제 1 분기 명령어가 취하여지지 않은 경우에 제 1 블록에 이어지는 블록에 대한 분기 예측 구조의 엔트리 세트에 액세스하는 단계를 포함한다. 다른 양태에서, 제 2 블록들의 세트에서 제 2 분기 명령어들의 결과들의 추론적 예측과 동시에 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형을 결정한다.
다른 양태에서, 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형을 결정하는 단계는 적어도 하나의 제 1 분기 명령어의 결과가 분기 타겟 버퍼, 간접 분기 예측기 또는 반환 어드레스 스택에 의해 결정되는지 여부에 기초하여 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형을 결정하는 단계를 포함한다. 또 다른 양태에서, 상태를 선택적으로 플러싱하는 단계는 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형이 제 2 유형의 분기 명령어의 제 1 서브세트에 속함에 응답하여 제 2 분기 명령어의 결과의 추론적 예측과 관련된 상태를 플러싱하는 단계를 포함한다. 또 다른 양태에서, 제 1 서브세트는 콜 명령어, 리턴 명령어 및 간접 분기 명령어를 포함한다. 또 다른 양태에서, 방법은: 예측된 제 2 블록의 제 2 어드레스에 의해 인덱싱되는 분기 예측 구조의 엔트리에 기초하여 제 2 블록들 중 예측된 제 2 블록에서 제 2 분기 명령어 중 적어도 하나의 추론적 예측을 재개하는 단계를 포함한다. 일 양태에서, 예측된 제 2 블록은 제 1 블록에서 적어도 하나의 제 1 분기 명령어의 예측된 결과에 대응한다. 다른 양태에서, 상태를 선택적으로 플러싱하는 단계는 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형이 분기 명령어의 유형 세트 중 제 2 서브세트에 속함에 응답하여 상태의 플러싱을 우회하여 추론적 예측을 계속하는 단계를 포함한다. 또 다른 양태에서, 방법은 제 1 블록의 제 1 어드레스로부터 미리 결정된 수의 최하위 비트를 드롭(drop)함으로써 분기 예측 구조에 대한 인덱스를 생성하는 단계를 포함한다.
본 명세서에 개시된 바와 같이, 장치는: 제 1 블록에서 적어도 하나의 제 1 분기 명령어의 결과를 예측하고, 제 1 블록의 제 1 어드레스에 기초하여, 제 1 블록의 적어도 하나의 제 1 분기 명령어의 결과에 대응하는 제 2 블록 세트에 대한 분기 예측 구조의 엔트리 세트에 액세스하도록 구성된 분기 예측기와, 분기 예측 구조의 엔트리 세트에 기초하여 제 2 블록 세트에서 제 2 분기 명령어의 결과의 추론적 예측을 위한 명령어를 페치하기 위한 페치 로직을 포함하며, 추론적 예측과 연관된 상태는 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형에 기초하여 분기 예측기로부터 선택적으로 플러싱된다. 일 양태에서, 분기 예측기는 적어도 하나의 제 1 분기 명령어의 잠재적 인 타겟인 제 2 블록 세트 또는 적어도 하나의 제 1 분기 명령어가 취하여지지 않은 경우 제 1 블록을 따르는 블록에 대한 분기 예측 구조의 엔트리 세트에 액세스하도록 구성된다. 다른 양태에서, 분기 예측기는 제 2 블록 세트에서 제 2 분기 명령어의 결과의 추론적 예측과 동시에 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형을 결정하도록 구성된다. 또 다른 양태에서, 분기 예측기는 적어도 하나의 제 1 분기 명령어의 결과가 분기 타겟 버퍼, 간접 분기 예측기, 또는 반환 어드레스 스택에 의해 결정되는지 여부에 기초하여 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형을 결정하도록 구성된다.
다른 양태에서, 제 2 분기 명령어의 결과의 추론적 예측과 연관된 상태는 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형이 분기 명령어의 유형 세트 중 제 1 서브세트에 속함에 응답하여 플러싱된다. 다른 양태에서, 제 1 서브세트는 콜 명령어, 리턴 명령어 및 간접 분기 명령어를 포함한다. 또 다른 양태에서, 분기 예측기는 예측된 제 2 블록의 제 2 어드레스에 의해 인덱싱되는 분기 예측 구조의 엔트리에 기초하여 제 2 블록들 중 예측된 제 2 블록에서 제 2 분기 명령어 중 적어도 하나의 추론적 예측을 재개하도록 구성된다. 또 다른 양태에서, 예측된 제 2 블록은 제 1 블록에서 적어도 하나의 제 1 분기 명령어의 예측된 결과에 대응한다. 다른 양태에서, 분기 예측기는 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형이 분기 명령어의 유형 세트 중 제 2 서브세트에 속함에 응답하여 상태의 플러싱을 우회하고 추론적 예측을 계속하도록 구성된다. 또 다른 양태에서, 분기 예측기는 제 1 블록의 제 1 어드레스로부터 미리 결정된 수의 최하위 비트를 드롭함으로써 분기 예측 구조로 인덱스를 생성하도록 구성된다.
본 명세서에 개시된 바와 같이, 장치는: 대응하는 블록에서 분기 명령어에 대한 분기 예측 정보를 포함하는 엔트리(605)를 저장하도록 구성된 분기 타겟 버퍼(BTB)(600); 제 1 블록의 제 1 어드레스를 사용하여 액세스되는 BTB의 엔트리에 기초하여 제 1 블록에서 미리 결정된 개수까지의 분기 명령어의 결과를 예측하도록 구성된 제 1 분기 예측기(500); 및 제 1 블록의 제 1 어드레스를 사용하여 액세스되는 BTB의 엔트리에 기초하여 복수의 제 2 블록에서 미리 결정된 개수까지의 분기 명령어의 결과를 추론적으로 예측하도록 구성된 제 2 분기 예측기를 포함하며, 제 2 블록은 제 1 블록의 분기 명령어의 결과에 대응하고, 추론적 예측과 연관된 상태는 제 2 분기 예측기로부터 선택적으로 플러싱되며, 제 2 블록들 중 하나의 분기 명령어의 결과의 예측은, 제 1 블록 내 분기 명령어들 중 적어도 하나의 적어도 하나의 유형에 기초하여, 제 1 분기 예측기에서 선택적으로 개시된다. 다른 양태에서, 추론적 예측과 연관된 상태는, 적어도 하나의 유형이 분기 명령어의 세트 중 제 1 서브세트에 속함에 응답하여 플러싱되고, 추론적 예측과 연관된 상태는 적어도 하나의 유형이 분기 명령어의 유형 세트 중 제 2 서브세트에 속함에 응답하여 플러싱되지 않는다. 또 다른 양태에서, 제 1 서브세트는 콜 명령어, 리턴 명령어 및 간접 분기 명령어를 포함한다. 또 다른 양태에서, 리턴 명령어 또는 간접 분기 명령어의 결과가 BTB의 엔트리에 기초하여 예측됨에 응답하여 리턴 명령어 또는 간접 분기 명령어가 제 1 서브세트로부터 제거된다. 또 다른 양태에서, 제 1 분기 예측기는 예측된 제 2 블록의 제 2 어드레스에 의해 인덱싱되는 BTB의 엔트리에 기초하여 제 2 블록의 예측된 제 2 블록에서 분기 명령어 중 적어도 하나의 추론적 예측을 재개하도록 구성된다. 또 다른 양태에서, 예측된 제 2 블록은 제 1 블록의 분기 명령어 중 적어도 하나의 예측된 결과에 대응한다.
일부 실시예에서, 전술한 장치 및 기술은 도 1 내지 도 9를 참조하여 전술한 분기 예측과 같은, 하나 이상의 집적 회로(IC) 디바이스(집적 회로 패키지 또는 마이크로 칩이라고도 함)를 포함하는 시스템에서 구현된다. 전자 설계 자동화(EDA) 및 컴퓨터 보조 설계(CAD) 소프트웨어 도구는 이러한 IC 디바이스의 설계 및 제작에 사용될 수 있다. 이러한 설계 도구는 일반적으로 하나 이상의 소프트웨어 프로그램으로 표시된다. 하나 이상의 소프트웨어 프로그램은 회로 제조를 위해 제조 시스템을 설계 또는 적응시키기 위한 공정의 적어도 일부를 수행하도록 하나 이상의 IC 장치의 회로를 나타내는 코드에서 작동하도록 컴퓨터 시스템을 조작하기 위해 컴퓨터 시스템에 의해 실행 가능한 코드를 포함한다. 이 코드에는 명령어, 데이터 또는 명령어 및 데이터의 조합이 포함될 수 있다. 설계 도구 또는 제작 도구를 나타내는 소프트웨어 명령어는 일반적으로 컴퓨팅 시스템에 액세스할 수 있는 컴퓨터 판독 가능 저장 매체에 저장된다. 마찬가지로, IC 디바이스의 설계 또는 제조의 하나 이상의 단계를 나타내는 코드는 동일한 컴퓨터 판독 가능 저장 매체 또는 상이한 컴퓨터 판독 가능 저장 매체에 저장되고 액세스될 수 있다.
컴퓨터 판독 가능 저장 매체는 컴퓨터 시스템에 명령어 및/또는 데이터를 제공하기 위해 사용 중에 컴퓨터 시스템에 의해 액세스 가능한, 임의의 비일시적 저장 매체, 또는 비일시적 저장 매체들의 조합을 포함할 수 있다. 이러한 저장 매체는 광학 매체(예: 콤팩트 디스크(CD), 디지털 다용도 디스크(DVD), Blu-Ray 디스크), 자기 매체(예: 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예: 랜덤 액세스 메모리(RAM) 또는 캐시), 비휘발성 메모리(예: 읽기 전용 메모리(ROM) 또는 플래시 메모리) 또는 MEMS(microelectromechanical systems)-기반 저장 매체를 포함할 수 있으나 이에 제한되지 않는다. 컴퓨터 판독 가능 저장 매체는 컴퓨팅 시스템에 내장될 수 있고(예: 시스템 RAM 또는 ROM), 컴퓨팅 시스템에 고정적으로 부착될 수 있으며(예: 자기 하드 드라이브)에 고정적으로 부착되고, 컴퓨팅 시스템에 제거 가능하게 부착될 수 있고(예: 광학 디스크 또는 범용 시리얼 버스(USB)-기반 플래시 메모리), 또는, 유선 또는 무선 네트워크를 통해 컴퓨터 시스템에 연결될 수 있다(예: 네트워크 액세스 가능 스토리지(NAS))
일부 실시예에서, 전술한 기술의 특정 양태들은 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서에 의해 구현될 수 있다. 소프트웨어는 비일시적 컴퓨터 판독 가능 저장 매체에 저장되거나 그렇지 않으면 유형적으로 구현된 하나 이상의 실행 가능한 명령어 세트를 포함한다. 소프트웨어는 하나 이상의 프로세서에 의해 실행될 때 위에서 설명된 기술의 하나 이상의 양태를 수행하도록 하나 이상의 프로세서를 조작하는 명령어 및 특정 데이터를 포함할 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체는 예를 들어 자기 또는 광학 디스크 저장 장치, 고체 상태 저장 장치, 가령, 플래시 메모리, 캐시, RAM(random access memory) 또는 기타 비휘발성 메모리 디바이스(들), 등을 포함할 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체에 저장된 실행 가능 명령어는 소스 코드, 어셈블리 언어 코드, 객체 코드, 또는 하나 이상의 프로세서에 의해 해석되거나 실행 가능한 기타 명령어 포맷을 취할 수 있다.
위 개략적인 설명에서 설명된 모든 활동 또는 요소가 필요한 것은 아니며, 특정 활동 또는 장치의 일부가 필요하지 않을 수 있으며, 설명된 것 외에 하나 이상의 추가 활동이 수행될 수 있고, 또는 요소들이 포함될 수 있다. 또한, 활동이 나열되는 순서가 반드시 수행되는 순서는 아니다. 또한, 구체적인 실시예를 참조하여 개념을 설명하였다. 그러나, 당업자는 하기 청구 범위에 기재된 바와 같이 본 개시 내용의 범위를 벗어나지 않고 다양한 수정 및 변경이 이루어질 수 있음을 인식할 것이다. 따라서, 명세서 및 도면은 제한적인 의미가 아닌 예시적인 의미로 간주되어야하며, 이러한 모든 수정은 본 개시의 범위 내에 포함되도록 의도된다.
이점, 다른 장점 및 문제에 대한 해결책은 특정 실시예와 관련하여 위에서 설명되었다. 그러나 이점, 장점, 문제에 대한 해결책, 및 임의의 이점, 장점 또는 해결책을 발생시키거나 더 두드러지게 만들 수 있는 어떤 기능도, 모든 또는 어느 청구범위의 핵심적인, 필수적인, 또는 본질적인 기능으로 간주되어서는 안된다. 더욱이, 개시된 주제가 본 명세서의 교시의 이점을 갖는 당업자에게 명백한 상이하지만 동등한 방식으로 수정되고 실시될 수 있기 때문에, 위에 개시된 특정 실시예는 단지 예시일 뿐이다. 아래의 청구 범위에 기술된 것 외에는 여기에 도시된 구성 또는 디자인의 세부 사항에 대한 제한이 없다. 따라서, 위에 개시된 특정 실시예는 변경 또는 수정될 수 있고 그러한 모든 변형은 개시된 주제의 범위 내에서 고려된다는 것이 명백하다. 따라서, 여기에서 추구하는 보호는 아래의 청구 범위에 명시된 바와 같다.

Claims (26)

  1. 제 1 블록(305)의 제 1 어드레스에 기초하여, 제 1 블록의 적어도 하나의 제 1 분기 명령어(320)의 결과에 대응하는 제 2 블록 세트(310, 315))에 대한 분기 예측 구조(500)의 엔트리 세트에 액세스하는 단계;
    분기 예측 구조의 엔트리 세트에 기초하여 제 2 블록 세트에서 제 2 분기 명령어(325, 335)의 결과의 추론적 예측을 시작하는 단계; 및
    적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형에 기초하여 추론적 예측과 연관된 상태를 선택적으로 플러싱(flushing)하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서, 상기 분기 예측 구조의 엔트리 세트에 액세스하는 단계는 상기 적어도 하나의 제 1 분기 명령어의 잠재적 타겟인 제 2 블록 세트, 또는, 적어도 하나의 제 1 분기 명령어가 취하여지지 않은 경우 제 1 블록 다음에 오는 블록에 대한 분기 예측 구조의 엔트리 세트에 액세스하는 단계를 포함하는, 방법. .
  3. 제 1 항에 있어서,
    제 2 블록들의 세트에서 제 2 분기 명령어들의 결과들의 추론적 예측과 동시에 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형을 결정하는 단계(710)를 더 포함하는, 방법.
  4. 제 3 항에 있어서, 상기 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형을 결정하는 단계는 상기 적어도 하나의 제 1 분기 명령어의 결과가 분기 타겟 버퍼, 간접 분기 예측기, 또는 리턴 어드레스 스택에 의해 결정되는지 여부에 기초하여 상기 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형을 결정하는 단계를 포함하는, 방법.
  5. 제 1 항에 있어서, 상기 상태를 선택적으로 플러싱하는 단계는 제 1 분기 명령어의 적어도 하나의 유형이 분기 명령어의 유형 세트 중 제 1 서브세트에 속함에 응답하여, 제 2 분기 명령어의 결과의 추론적 예측과 관련된 상태를 플러싱하는 단계를 포함하는, 방법.
  6. 제 5 항에 있어서, 상기 제 1 서브세트는 콜 명령어, 리턴 명령어 및 간접 분기 명령어를 포함하는, 방법.
  7. 제 5 항에 있어서,
    예측된 제 2 블록의 제 2 어드레스에 의해 인덱싱된 분기 예측 구조의 엔트리에 기초하여 제 2 블록들 중 예측된 제 2 블록에서 제 2 분기 명령어 중 적어도 하나의 추론적 예측을 재개하는 단계를 더 포함하는, 방법.
  8. 제 7 항에 있어서, 상기 예측된 제 2 블록은 상기 제 1 블록 내 상기 적어도 하나의 제 1 분기 명령어의 예측된 결과에 대응하는, 방법.
  9. 제 5 항에 있어서, 상기 상태를 선택적으로 플러싱하는 단계는, 상기 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형이 분기 명령어들의 유형 세트 중 제 2 서브세트에 속함에 응답하여, 상기 상태의 플러싱을 우회하고 상기 추론적 예측을 계속하는 단계를 포함하는, 방법.
  10. 제 1 항에 있어서,
    제 1 블록의 제 1 어드레스로부터 미리 결정된 수의 최하위 비트를 드롭(drop)함으로써 분기 예측 구조에 대한 인덱스를 생성하는 단계를 더 포함하는, 방법.
  11. 장치로서,
    제 1 블록(305)에서 적어도 하나의 제 1 분기 명령어(320)의 결과를 예측하고, 제 1 블록의 제 1 어드레스에 기초하여, 제 1 블록에서 적어도 하나의 제 1 분기 명령어의 결과에 대응하는 제 2 블록 세트(310, 315)에 대해분기 예측 구조(500)의 엔트리 세트에 액세스하도록 구성된 분기 예측기(220); 및
    분기 예측 구조의 엔트리 세트에 기초하여 제 2 블록 세트에서 제 2 분기 명령어의 결과의 추론적 예측을 위한 명령어를 페치하기 위한 페치 로직(225)을 포함하며,
    상기 추론적 예측과 연관된 상태는 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형에 기초하여 분기 예측기로부터 선택적으로 플러싱되는, 장치.
  12. 제 11 항에 있어서, 상기 분기 예측기는 상기 적어도 하나의 제 1 분기 명령어의 잠재적인 타겟 인 제 2 블록 세트, 또는 적어도 하나의 제 1 분기 명령어가 취하여지지 않은 경우 상기 제 1 블록에 이어지는 블록에 대한 분기 예측 구조의 엔트리 세트에 액세스하도록 구성되는, 장치.
  13. 제 11 항에 있어서, 상기 분기 예측기는 상기 제 2 블록들의 세트에서 상기 제 2 분기 명령어들의 결과들의 추론적 예측과 동시에 상기 적어도 하나의 제 1 분기 명령어들의 상기 적어도 하나의 유형을 결정하도록 구성되는, 장치.
  14. 제 13 항에 있어서, 상기 분기 예측기는 상기 적어도 하나의 제 1 분기 명령어의 결과가 분기 타겟 버퍼, 간접 분기 예측기 또는 반환 어드레스 스택에 의해 결정되는지 여부에 기초하여 상기 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형을 결정하도록 구성되는, 장치.
  15. 제 11 항에 있어서, 상기 제 2 분기 명령어의 결과의 추론적 예측과 관련된 상태는 상기 적어도 하나의 제 1 분기 명령어 중 적어도 하나의 유형이 분기 명령어들의 유형 세트 중 제 1 서브세트에 속함에 응답하여 플러싱되는, 장치.
  16. 제 15 항에 있어서, 상기 제 1 서브세트는 콜 명령어, 리턴 명령어 및 간접 분기 명령어를 포함하는, 장치.
  17. 제 15 항에 있어서, 상기 분기 예측기는 예측된 제 2 블록의 제 2 어드레스에 의해 인덱싱되는 분기 예측 구조의 엔트리에 기초하여 상기 제 2 블록들 중 예측된 제 2 블록에서 상기 제 2 분기 명령어 중 적어도 하나의 추론적 예측을 재개하도록 구성되는, 장치.
  18. 제 17 항에 있어서, 상기 예측된 제 2 블록은 상기 제 1 블록 내 상기 적어도 하나의 제 1 분기 명령어의 예측된 결과에 대응하는, 장치.
  19. 제 15 항에 있어서, 상기 분기 예측기는 상기 적어도 하나의 제 1 분기 명령어의 적어도 하나의 유형이 상기 분기 명령어의 유형 세트 중 제 2 서브세트에 속함에 응답하여, 상기 상태의 플러싱을 우회하여 추론적 예측을 계속하도록 구성되는, 장치.
  20. 제 11 항에 있어서, 상기 분기 예측기는 상기 제 1 블록의 제 1 어드레스로부터 미리 결정된 수의 최하위 비트를 드롭함으로써 상기 분기 예측 구조에 대한 인덱스를 생성하도록 구성되는, 장치.
  21. 장치로서,
    대응하는 블록에 분기 명령어에 대한 분기 예측 정보를 포함하는 엔트리(605)를 저장하도록 구성된 분기 타겟 버퍼(BTB)(600);
    제 1 블록의 제 1 어드레스를 사용하여 액세스되는 BTB의 엔트리에 기초하여 제 1 블록에서 미리 결정된 개수까지의 분기 명령어의 결과를 예측하도록 구성된 제 1 분기 예측기(500); 및
    제 1 블록의 제 1 어드레스를 사용하여 액세스되는 BTB의 엔트리에 기초하여 복수의 제 2 블록에서 미리 결정된 개수까지의 분기 명령어의 결과를 추론적으로 예측하도록 구성된 제 2 분기 예측기를 포함하고, 제 2 블록은 제 1 블록의 분기 명령어의 결과에 대응하며,
    상기 추론적 예측과 연관된 상태는 제 2 분기 예측기로부터 선택적으로 플러싱되고, 제 2 블록 중 하나에서 분기 명령어의 결과의 예측은 제 1 블록 내 분기 명령어 중 적어도 하나의 적어도 하나의 유형에 기초하여, 제 1 분기 예측기 내에서 선택적으로 개시되는, 장치.
  22. 제 21 항에 있어서, 상기 추론적 예측과 연관된 상태는 적어도 하나의 유형이 분기 명령어의 유형 세트 중 제 1 서브세트에 속함에 응답하여 플러싱되고, 상기 추론적 예측과 연관된 상태는 적어도 하나의 유형이 분기 명령어의 유형 세트 중 제 2 서브세트에 속함에 응답하여 플러싱되지 않는, 장치.
  23. 제 22 항에 있어서, 상기 제 1 서브세트는 콜 명령어, 리턴 명령어 및 간접 분기 명령어를 포함하는, 장치.
  24. 제 23 항에 있어서, 상기 리턴 명령어 또는 상기 간접 분기 명령어는, 리턴 명령어 또는 간접 분기 명령어의 결과가 상기 BTB의 엔트리에 기초하여 예측됨에 응답하여 상기 제 1 서브세트로부터 제거되는, 장치.
  25. 제 21 항에 있어서, 상기 제 1 분기 예측기는 예측되는 제 2 블록의 제 2 어드레스에 의해 인덱싱된 BTB의 엔트리에 기초하여 상기 제 2 블록들 중 예측된 제 2 블록에서 상기 분기 명령어 중 적어도 하나의 추론적 예측을 재개하도록 구성되는, 장치.
  26. 제 25 항에 있어서, 상기 예측된 제 2 블록은 상기 제 1 블록의 분기 명령어 중 적어도 하나의 예측된 결과에 대응하는, 장치.
KR1020217001130A 2018-06-18 2019-06-13 분기 명령어의 유형에 기초한 사전 분기 예측의 선택적 수행 KR102554799B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020237023028A KR20230110649A (ko) 2018-06-18 2019-06-13 분기 명령어의 유형에 기초한 사전 분기 예측의 선택적수행

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/011,010 2018-06-18
US16/011,010 US10732979B2 (en) 2018-06-18 2018-06-18 Selectively performing ahead branch prediction based on types of branch instructions
PCT/US2019/036967 WO2019245846A1 (en) 2018-06-18 2019-06-13 Selectively performing ahead branch prediction based on types of branch instructions

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020237023028A Division KR20230110649A (ko) 2018-06-18 2019-06-13 분기 명령어의 유형에 기초한 사전 분기 예측의 선택적수행

Publications (2)

Publication Number Publication Date
KR20210011060A true KR20210011060A (ko) 2021-01-29
KR102554799B1 KR102554799B1 (ko) 2023-07-13

Family

ID=68839308

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020237023028A KR20230110649A (ko) 2018-06-18 2019-06-13 분기 명령어의 유형에 기초한 사전 분기 예측의 선택적수행
KR1020217001130A KR102554799B1 (ko) 2018-06-18 2019-06-13 분기 명령어의 유형에 기초한 사전 분기 예측의 선택적 수행

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020237023028A KR20230110649A (ko) 2018-06-18 2019-06-13 분기 명령어의 유형에 기초한 사전 분기 예측의 선택적수행

Country Status (6)

Country Link
US (2) US10732979B2 (ko)
EP (1) EP3807758A4 (ko)
JP (1) JP7160956B2 (ko)
KR (2) KR20230110649A (ko)
CN (1) CN112368677B (ko)
WO (1) WO2019245846A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023219204A1 (ko) * 2022-05-11 2023-11-16 서울시립대학교 산학협력단 명령어를 처리하는 방법 및 이를 위한 프로세서 모듈

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11086629B2 (en) * 2018-11-09 2021-08-10 Arm Limited Misprediction of predicted taken branches in a data processing apparatus
US10922082B2 (en) * 2019-03-05 2021-02-16 Arm Limited Branch predictor
US11138014B2 (en) * 2020-01-29 2021-10-05 Arm Limited Branch predictor
US11403103B2 (en) * 2020-04-14 2022-08-02 Shanghai Zhaoxin Semiconductor Co., Ltd. Microprocessor with multi-step ahead branch predictor and having a fetch-target queue between the branch predictor and instruction cache
CN115934171B (zh) * 2023-01-16 2023-05-16 北京微核芯科技有限公司 为多指令调度分支预测器的方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5706492A (en) * 1994-01-04 1998-01-06 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
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
US20060149944A1 (en) * 2004-12-02 2006-07-06 International Business Machines Corporation Method, apparatus, and computer program product for selectively prohibiting speculative conditional branch execution
US20140019734A1 (en) * 2010-08-05 2014-01-16 Arm Limited Data processing apparatus and method using checkpointing

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5903772A (en) * 1993-10-29 1999-05-11 Advanced Micro Devices, Inc. Plural operand buses of intermediate widths coupling to narrower width integer and wider width floating point superscalar processing core
US5574928A (en) * 1993-10-29 1996-11-12 Advanced Micro Devices, Inc. Mixed integer/floating point processor core for a superscalar microprocessor with a plurality of operand buses for transferring operand segments
US6957327B1 (en) * 1998-12-31 2005-10-18 Stmicroelectronics, Inc. Block-based branch target buffer
US6385719B1 (en) * 1999-06-30 2002-05-07 International Business Machines Corporation Method and apparatus for synchronizing parallel pipelines in a superscalar microprocessor
US6598152B1 (en) * 1999-11-08 2003-07-22 International Business Machines Corporation Increasing the overall prediction accuracy for multi-cycle branch prediction and apparatus by enabling quick recovery
US6910124B1 (en) * 2000-05-02 2005-06-21 International Business Machines Corporation Apparatus and method for recovering a link stack from mis-speculation
US7844806B2 (en) * 2008-01-31 2010-11-30 Applied Micro Circuits Corporation Global history branch prediction updating responsive to taken branches
US8521996B2 (en) * 2009-02-12 2013-08-27 Via Technologies, Inc. Pipelined microprocessor with fast non-selective correct conditional branch instruction resolution
GB2506462B (en) * 2013-03-13 2014-08-13 Imagination Tech Ltd Indirect branch prediction
US9619230B2 (en) 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
GB2528676B (en) * 2014-07-25 2016-10-26 Imagination Tech Ltd Conditional Branch Prediction Using A Long History
US9715390B2 (en) * 2015-04-19 2017-07-25 Centipede Semi Ltd. Run-time parallelization of code execution based on an approximate register-access specification
US20160350116A1 (en) * 2015-05-29 2016-12-01 Qualcomm Incorporated Mitigating wrong-path effects in branch prediction
US10437597B2 (en) 2015-09-09 2019-10-08 International Business Machines Corporation Silent mode and resource reassignment in branch prediction logic
US10223090B2 (en) 2015-10-23 2019-03-05 Yong-Kyu Jung Branch look-ahead system apparatus and method for branch look-ahead microprocessors
US10664280B2 (en) * 2015-11-09 2020-05-26 MIPS Tech, LLC Fetch ahead branch target buffer
US10592248B2 (en) 2016-08-30 2020-03-17 Advanced Micro Devices, Inc. Branch target buffer compression

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5706492A (en) * 1994-01-04 1998-01-06 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
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
US20060149944A1 (en) * 2004-12-02 2006-07-06 International Business Machines Corporation Method, apparatus, and computer program product for selectively prohibiting speculative conditional branch execution
US20140019734A1 (en) * 2010-08-05 2014-01-16 Arm Limited Data processing apparatus and method using checkpointing

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023219204A1 (ko) * 2022-05-11 2023-11-16 서울시립대학교 산학협력단 명령어를 처리하는 방법 및 이를 위한 프로세서 모듈

Also Published As

Publication number Publication date
JP7160956B2 (ja) 2022-10-25
KR102554799B1 (ko) 2023-07-13
KR20230110649A (ko) 2023-07-24
CN112368677A (zh) 2021-02-12
US20190384612A1 (en) 2019-12-19
EP3807758A4 (en) 2022-02-23
US10732979B2 (en) 2020-08-04
US20210034370A1 (en) 2021-02-04
CN112368677B (zh) 2022-07-15
WO2019245846A1 (en) 2019-12-26
US11416256B2 (en) 2022-08-16
EP3807758A1 (en) 2021-04-21
JP2021527892A (ja) 2021-10-14

Similar Documents

Publication Publication Date Title
KR102554799B1 (ko) 분기 명령어의 유형에 기초한 사전 분기 예측의 선택적 수행
JP5030796B2 (ja) データ転送中にキャッシュへのアクセスを制限するシステムおよびその方法
US20080250207A1 (en) Design structure for cache maintenance
KR20210018415A (ko) 예측 실패 복구에 대한 레이턴시를 줄이기 위한 이차적 분기 예측 저장
KR20210019584A (ko) 다중 테이블 분기 타겟 버퍼
KR102590180B1 (ko) 자격 메타데이터를 관리하는 장치 및 방법
JP2016536665A (ja) 推論的ベクトル演算の実行を制御するためのデータ処理装置及び方法
WO2022237585A1 (zh) 处理方法及装置、处理器、电子设备及存储介质
US20110161631A1 (en) Arithmetic processing unit, information processing device, and control method
CN112470122B (zh) 具有提前返回预测的分支目标缓冲器
JP2007272681A (ja) キャッシュメモリ装置及びそのキャッシュラインの入れ替え方法
US8443174B2 (en) Processor and method of performing speculative load operations of the processor
JP2006072625A (ja) クラスタ化スーパスカラプロセッサ及びクラスタ化スーパスカラプロセッサにおけるクラスタ間の通信制御方法
JP4220537B2 (ja) アクセス制御キャッシュ装置及び方法
JP2006285727A (ja) キャッシュメモリ装置
US20220075624A1 (en) Alternate path for branch prediction redirect
US11734011B1 (en) Context partitioning of branch prediction structures

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right