KR20210025677A - 초기 리턴 예측을 갖는 분기 타겟 버퍼 - Google Patents

초기 리턴 예측을 갖는 분기 타겟 버퍼 Download PDF

Info

Publication number
KR20210025677A
KR20210025677A KR1020217004753A KR20217004753A KR20210025677A KR 20210025677 A KR20210025677 A KR 20210025677A KR 1020217004753 A KR1020217004753 A KR 1020217004753A KR 20217004753 A KR20217004753 A KR 20217004753A KR 20210025677 A KR20210025677 A KR 20210025677A
Authority
KR
South Korea
Prior art keywords
return
branch
instruction
btb
entry
Prior art date
Application number
KR1020217004753A
Other languages
English (en)
Other versions
KR102571623B1 (ko
Inventor
아파르나 티아가라잔
마리우스 에버스
아루나차람 아나말라이
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20210025677A publication Critical patent/KR20210025677A/ko
Application granted granted Critical
Publication of KR102571623B1 publication Critical patent/KR102571623B1/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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, 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

Abstract

프로세서[100]는 복수의 엔트리들[111]을 갖는 분기 타겟 버퍼(BTB)[110]를 포함하며, 이에 의해 각 엔트리는 분기 인스트럭션으로 예측되는 연관 인스트럭션 포인터[101] 값에 대응한다. 각 BTB 엔트리는 분기 인스트럭션에 대한 예측 분기 타겟 어드레스를 저장하고, 예측 분기 타겟 어드레스와 연관된 인스트럭션 블록의 다음 분기가 리턴 인스트럭션으로 예측되는지 여부를 나타내는 정보를 더 저장한다. 다음 분기가 리턴 인스트럭션일 것으로 예측된다는 것을 나타내는 BTB에 응답하여, 프로세서는 예측 리턴 인스트럭션에 대한 리턴 어드레스를 저장하는 리턴 스택[115]에 대한 액세스를 시작한다. BTB에 저장된 리턴 예측에 응답하여 리턴 스택에 대한 액세스를 시작함으로써, 프로세서는 리턴 어드레스 식별 시 지연을 줄여 처리 효율성을 향상시킨다.

Description

초기 리턴 예측을 갖는 분기 타겟 버퍼
처리 효율성을 높이기 위해, 프로세서는 하나 이상의 예측 처리 기술들을 사용할 수 있다. 예측 처리 기술의 한 가지 유형은 분기 예측으로 지칭되며, 이에 의해 프로세서는 분기 인스트럭션의 결과를 예측하여 처리 유닛이 분기 인스트럭션을 평가하기 전에 프로세서가 예측 분기를 따라 후속 인스트럭션들을 추론적으로 실행하기 시작할 수 있도록 한다. 처리 효율성을 더욱 향상시키기 위해, 프로세서는 분기 타겟 버퍼(BTB)라고 하는 분기 타겟 구조를 사용한다. BTB는 예측 분기들에 대한 어드레스 정보를 저장한다. 그러나, 종래 BTB 구조들은 다른 유형의 프로그램 분기들의 효율적 실행을 지원하지 않는다.
본 개시는 첨부된 도면들을 참조함으로써 더 잘 이해될 수 있으며, 그 많은 특징들 및 이점들이 당업자에게 명백해질 수 있다. 서로 다른 도면들에서 동일한 참조 부호들의 사용은 유사하거나 동일한 아이템들을 나타낸다.
도 1은 분기 인스트럭션에 의해 타겟이 되는 인스트럭션 블록이 일부 실시예들에 따라 리턴 인스트럭션을 포함하는지 여부를 예측하기 위한 리턴 예측 정보를 포함하는 분기 타겟 버퍼(BTB)를 사용하는 프로세서의 블록도이다.
도 2는 분기 인스트럭션에 의해 타겟이 되는 인스트럭션 블록이 일부 실시예들에 따른 리턴 인스트럭션을 포함함을 나타내는 BTB에 응답하여 리턴 어드레스 스택에 대한 액세스를 시작하는 도 1의 프로세서의 일 예를 나타내는 도면이다.
도 3은 분기 인스트럭션에 의해 타겟이 되는 인스트럭션 블록이 일부 실시예들에 따른 리턴 인스트럭션을 포함함을 나타내는 BTB에 응답하여 리턴 어드레스 스택에 대한 액세스를 시작하는 프로세서의 방법의 흐름도이다.
도 1 내지 3은 프로세서에서 리턴 인스트럭션에 대한 리턴 어드레스를 식별 시 지연을 줄이는 기술들을 예시한다. 프로세서는 복수의 엔트리들을 갖는 분기 타겟 버퍼(BTB)를 포함하고, 이에 의해 각 엔트리는 분기 인스트럭션으로 예측되는 연관 인스트럭션 포인터 값에 대응한다. 각 BTB 엔트리는 분기 인스트럭션에 대한 예측 분기 타겟 어드레스를 저장하고, 예측 분기 타겟 어드레스와 연관된 인스트럭션 블록의 다음 분기가 리턴 인스트럭션으로 예측되는지 여부를 나타내는 정보를 더 저장한다. 다음 분기가 리턴 인스트럭션일 것으로 예측된다는 것을 나타내는 BTB에 응답하여, 프로세서는 예측 리턴 인스트럭션에 대한 리턴 어드레스를 저장하는 리턴 스택에 대한 액세스를 시작한다. BTB에 저장된 리턴 예측에 응답하여 리턴 스택에 대한 액세스를 시작함으로써, 프로세서는 리턴 어드레스 식별시 지연을 줄여 처리 효율성을 향상시킨다.
본원에 설명된 기술들과 달리, 종래 프로세서는 예측 리턴 정보를 저장하지 않는다. 따라서, 종래의 프로세서는 프로세서의 페치 단계가 현재 인스트럭션 포인터 값이 리턴 인스트럭션에 대응한다는 것을 식별할 때까지 리턴 스택에 대한 액세스를 시작하지 않는다. 리턴 스택으로부터 리턴 어드레스를 검색하는 것은 다수의 클록 사이클들을 필요로 하기 때문에, 프로세서에서 동작들이 지연될 수 있다. 본원에 설명된 기술들을 사용하여, 프로세서는 리턴 스택에 대한 액세스를 일찍 시작하여, 인스트럭션 포인터 값이 리턴 인스트럭션에 도달할 때 리턴 어드레스가 스택으로부터 검색되고 프로세서에 의해 사용하기에 가능할 수 있도록 한다. 따라서, 예측 리턴 정보 저장하는 것은 리턴 어드레스들에 대한 더 빠른 액세스를 지원하고 따라서 처리 효율성을 향상시킨다.
도 1은 분기 인스트럭션에 의해 타겟이 되는 인스트럭션 블록이 일부 실시예들에 따라 리턴 인스트럭션을 포함하는지 여부를 예측하기 위한 리턴 예측 정보를 포함하는 분기 타겟 버퍼(BTB)를 사용하는 프로세서(100)를 예시한다. 프로세서는 전자 장치를 대신하여 지정된 태스크들을 수행하기 위해 일련의 인스트럭션들(예를 들어, 컴퓨터 프로그램들)을 실행한다. 일부 실시예들에서, 프로세서(100)는 데스크탑 또는 랩탑 컴퓨터, 서버, 게임 콘솔, 스마트 폰, 태블릿 등과 같은 다양한 전자 장치 중 하나에 통합된다.
인스트럭션들의 실행을 지원하기 위해, 프로세서(100)는 인스트럭션 페치 스테이지(102) 및 추가 파이프라인 스테이지들(104)을 갖는 인스트럭션 파이프라인을 포함한다. 추가 파이프라인 단계들(104)은 페치된 인스트럭션들을 동작 세트로 디코딩하는 단계들, 디코딩된 동작들을 실행하기 위한 실행 단계들, 및 실행된 인스트럭션들을 폐기하기 위한 폐기 단계를 포함한다. 일부 실시예들에서 프로세서(100)는 하나 이상의 메모리 컨트롤러들, 입력/출력 컨트롤러들, 메모리 구조들(예를 들어, 하나 이상의 캐시들) 등을 포함하는 인스트럭션들의 실행을 지원하기 위한 추가 모듈들을 포함한다는 것이 이해될 것이다. 추가로, 일부 실시예들에서 프로세서(100)는 추가 인스트럭션 파이프라인들을 포함한다는 것이 이해될 것이다. 예를 들어, 일부 실시예들에서, 프로세서(100)는 각 프로세서 코어가 인스트럭션 세트를 실행하기 위한 적어도 하나의 인스트럭션 파이프라인을 갖는 다수의 프로세서 코어들을 포함한다. 게다가, 일부 실시예들에서, 프로세서(100)는 그리기, 디스플레이 및 다른 그래픽 동작들과 관련된 동작들을 실행하기 위해 하나 이상의 그래픽 처리 장치들(GPU들)과 같은 특수 태스크들과 관련된 동작들을 실행하도록 특별히 설계된 추가 처리 유닛들을 포함한다.
도 1의 예시된 실시예를 참조하면, 인스트럭션 페치 스테이지(102)는 일반적으로 인스트럭션 포인터(101)에 기초하여 인스트럭션 캐시(103)로부터 인스트럭션들을 검색(페치)하도록 구성된다. 당업자에 의해 이해되는 바와 같이, 인스트럭션들 포인터(101)는 페치될 현재 인스트럭션을 나타내는 어드레스 값이고, 실행되는 인스트럭션들의 프로그램 흐름을 수정하는 동작들을 실행함으로써 수정될 수 있다. 예를 들어, 일부 실시예들에서, 분기 인스트럭션들은 예를 들어 분기 인스트럭션 또는 관련 인스트럭션에 의해 지정된 데이터의 평가에 기초하여 인스트럭션 포인터(101)를 수정한다.
분기 인스트럭션들의 효율적인 실행을 지원하기 위해, 프로세서(100)는 리턴 스택(115) 및 분기 타겟 버퍼(BTB)(110)를 포함한다. 리턴 스택(115)은 프로세서(100)에서 실행되는 리턴 인스트럭션들에 대한 리턴 어드레스들을 저장하는 스택 메모리 구조이다. 동작 시, 호출 유형인 분기 인스트럭션을 식별하는 것에 응답하여, 페치 스테이지(102)는 리턴 어드레스로서 지정된 인스트럭션 포인터 값을 생성한다. 일부 실시예들에서, 인스트럭션 페치 스테이지(102)는 인스트럭션 포인터(101)에 지정된 값을 추가함으로써 리턴 어드레스를 생성하며, 지정된 값은 인스트럭션 파이프라인에서 실행되는 인스트럭션들의 크기(예를 들어, 폭)에 대응한다. 인스트럭션 페치 스테이지는 리턴 스택(115)에 리턴 어드레스를 푸시한다. 리턴 인스트럭션의 경우, 페치 스테이지(102)는 본원에서 더 설명되는 바와 같이 리턴 스택(115)의 상단으로부터 리턴 어드레스를 검색(팝핑)하고 리턴 어드레스를 인스트럭션 포인터(101)의 값으로 저장함으로써 리턴 어드레스를 식별한다.
BTB(110)는 각 엔트리가 분기 인스트럭션과 연관된 상이한 인스트럭션 포인터 값에 대응하는 복수의 엔트리들(예를 들어, 엔트리(111))을 포함한다. 각 인스트럭션 사이클, 인스트럭션 페치 스테이지(102)는 인스트럭션 포인터(101)를 BTB(110)에 제공한다. 엔트리가 수신된 인스트럭션 포인터 값(BTB 히트로 지칭됨)에 대응한다는 것을 식별하는 것에 응답하여, BTB(110)는 식별된 엔트리의 BTA 필드(예를 들어, 엔트리(111)의 BTA 필드(112))로부터 분기 타겟 어드레스(BTA)를 검색하고 BTA를 인스트럭션 페치 스테이지(102)에 제공한다. 따라서, BTB(110)는 프로세서(100)가 분기 타겟 어드레스들을 신속하게 식별하는 효율적인 방법을 제공한다.
일부 실시예들에서, 프로세서는 새로운 엔트리들의 할당 및 BTA들의 수정을 포함하여 비추론적 및 추론적 둘 다로 BTB(110)의 엔트리들을 수정할 수 있다. 비추론적 업데이트들은 파이프라인 스테이지들(104)에 의해 실행된다. 예를 들어, 분기 인스트럭션으로서 인스트럭션을 식별하는 것에 응답하여, 디코드 스테이지는 분기 인스트럭션에 대한 인스트럭션 포인터 값을 BTB(110)에 제공한다. 이에 응답하여, BTB(110)는 수신된 인스트럭션 포인터 값에 대한 엔트리가 할당되도록 보장한다. 추가로, 실행 유닛은 분기 인스트럭션에 대해 계산된 BTA를 BTB(110)에 제공하고, 이는 해당 엔트리의 BTA 필드에 BTA를 저장한다.
분기 예측을 추가 지원하기 위해, 프로세서(100)는 조건 예측기(108)를 포함한다. 조건 예측기(108)는 프로세서(100)의 인스트럭션 파이프라인에서 실행되는 분기 인스트럭션들의 이력(분기 이력(09)으로 예시됨)을 모니터링하고, 하나 이상의 알려진 분기 예측 기술들에 따라 분기 이력(109)의 패턴들을 식별한다. 식별된 패턴들 및 각 분기의 실제 방향에 기초하여, 조건 예측기(108)는 각 분기 인스트럭션들이 수행되는지 수행되지 않는지 여부(때로는 분기 인스트럭션의 방향이라고 함)를 예측한다.
BTB(110)로 돌아가면, 저장된 BTA 외에도, 각 엔트리는 해당 BTA와 연관된 인스트럭션 블록의 다음 분기 인스트럭션이 리턴 인스트럭션으로 예측되는지 여부를 나타내는 리턴 예측 필드(예를 들어, 리턴 예측 필드(113))를 포함한다. 설명의 용이함을 위해, 이러한 시퀀스는 본원에서, 시퀀스를 시작하는 분기 인스트럭션이 분기-리턴 시퀀스의 "소스" 분기로 지칭되는, "분기-리턴" 시퀀스로 지칭된다. 이러한 시퀀스의 예는 다음과 같다:
JMP 어드레스 A (소스 분기 인스트럭션)
LD X, 데이터1 (레지스터 X에 값을 로드)
ADD X, Y (레지스터 X 및 레지스터 Y에 값들을 추가)
리턴
대조적으로, 다음은 리턴 인스트럭션이 주어진 분기 인스트럭션 다음에 오는 다음 분기 인스트럭션이 아닌 (따라서 분기-리턴 시퀀스가 아닌) 시퀀스의 예이다:
JMP 어드레스 A (분기 인스트럭션)
LD X, 데이터1 (레지스터 X에 값을 로드)
ADD X, Y (레지스터 X 및 레지스터 Y에 값들을 추가)
JMP 어드레스 B (분기 인스트럭션-분기 리턴 시퀀스가 아님)
분기-리턴 시퀀스를 임계 횟수로 식별하는 것에 응답하여, BTB(110)는 예측 리턴을 나타내도록 리턴 예측 필드를 설정한다. 인스트럭션 페치 스테이지(102)로부터 인스트럭션 포인터 값을 수신하는 것에 응답하여, BTB(110)는 수신된 인스트럭션 포인터 값이 상기에 설명된 바와 같이 BTB 히트를 초래하는지를 결정한다. BTB 히트에 응답하여, BTB(110)는 BTB 히트를 야기한 엔트리의 BTA 필드에서 BTA를 인스트럭션 페치 스테이지(102)에 제공한다. 추가로, BTB(110)는 해당 리턴 예측 필드가 예측 리턴을 나타내는지를 결정한다. 그렇다면, BTB(110)는 리턴 스택(115)에서 팝 동작을 나타낸다. 따라서 리턴 어드레스는 예측 리턴 인스트럭션이 도달할 때 빠르게 액세스하는 데 이용할 수 있다.
프로그램 흐름의 다음 분기 인스트럭션이 리턴 인스트럭션이 아닌 경우, 파이프라인 스테이지들(104) 중 하나 이상은 BTB(110)에 잘못 예측된 리턴을 표시한다. 일부 실시예들에서, 잘못 예측된 리턴에 응답하여, BTB(110)는 분기 리턴 시퀀스의 소스 분기 인스트럭션에 해당하는 엔트리에 대한 리턴 예측 필드를 소거한다. 다른 실시예들에서, BTB(110)는 임계 횟수 번 발생하는 잘못 예측된 리턴에 응답하여 리턴 예측 필드를 소거한다.
일부 실시예들에서, 리턴 스택(115)에 대한 액세스를 시작하는 것 외에, 프로세서(100)는 예측 리턴에 응답하여 추가 조치들을 취한다. 예를 들어, 일부 실시예들에서, 예측 리턴에 응답하여, 프로세서(100)는 예측 리턴 인스트럭션 자체에 대한 BTB 히트를 초래할 것으로 예상되는 BTB(110)에 대한 후속 액세스를 억제한다. 이러한 액세스를 억제함으로써, 프로세서(100)는 전력 및 다른 시스템 리소스들을 보존한다.
도 2는 분기 인스트럭션에 의해 타겟이 되는 인스트럭션 블록이 일부 실시예들에 따른 리턴 인스트럭션을 포함함을 나타내는 BTB(110)에 응답하여 리턴 어드레스 스택(115)에 대한 액세스를 시작하는 프로세서(100)의 일 예(200)를 나타내는 도면이다. 예(200)에서, 엔트리(111)는 엔트리(111)에 대응하는 분기 인스트럭션에 대한 BTA를 저장하기 위한 BTA 필드(112)를 포함한다. 추가로, 엔트리(111)의 리턴 예측 필드(113)는 분기 인스트럭션이 분기-리턴 시퀀스의 분기 소스로 예측된다는 것을 나타내는 값(도시된 예에서 "Y"로 표시됨)으로 설정된다. 즉, 리턴 예측 필드(113)는 엔트리(111)에 대응하는 분기 인스트럭션과 연관된 인스트럭션 블록의 다음 분기 인스트럭션이 리턴 인스트럭션으로 예측됨을 나타내는 상태에 있다. 설명의 용이함을 위해, 이 상태는 본원에 예측된 리턴을 나타내는 리턴 예측 필드로 지칭된다.
예(200)의 경우, 인스트럭션 페치 스테이지(102)는 인스트럭션 포인터(101)를 BTB(110)에 제공한다. 인스트럭션 포인터(101)의 제공은 엔트리(111)에서 BTB 히트를 초래한다. 즉, BTB (110)는 인스트럭션 포인터(101)에 대응하는 메모리 어드레스와 연관된 것으로 엔트리(111)를 식별한다. BTB 히트에 응답하여, BTB(110)는 BTA 필드(112)에 저장된 BTA를 인스트럭션 페치 스테이지(102)에 제공한다. 추가로, 예측된 리턴을 나타내는 리턴 예측 필드(113)에 응답하여, BTB(110)는 리턴 스택(115)에 대한 액세스를 시작하여 인스트럭션 페치 스테이지(102)에 제공하기 위해 스택의 상단에서 어드레스를 검색(팝핑)한다.
도 3은 분기 인스트럭션에 의해 타겟이 되는 인스트럭션 블록이 일부 실시예들에 따른 리턴 인스트럭션을 포함함을 나타내는 BTB에 응답하여 리턴 어드레스 스택에 대한 액세스를 시작하는 프로세서의 방법(300)의 흐름도이다. 블록(302)에서, BTB는 프로세서의 페치 단계로부터 인스트럭션 포인터 값을 수신한다. 블록(304)에서, BTB는 수신된 인스트럭션 포인터에 대응하는 엔트리를 식별한다. 블록(306)에서, BTB는 식별된 엔트리의 리턴 예측 필드가 예측 리턴을 나타내는지를 식별한다. 그렇지 않은 경우, 방법 흐름은 블록(310)으로 이동하고 BTB는 식별된 BTB 엔트리에서 BTA를 페치 단계에 제공한다.
블록(306)에서, BTB는 식별된 엔트리의 리턴 예측 필드가 예측 리턴을 나타낸다는 것을 식별하고, 방법 흐름은 블록(308)으로 이동하고 BTB는 리턴 스택의 상단으로부터 리턴 어드레스의 검색을 시작한다. 방법 흐름은 블록(310)으로 진행하고 BTB는 식별된 BTB 엔트리에서 BTA를 페치 단계로 제공한다.
본원에 개시된 바와 같이, 일부 실시예들에서, 방법은, 프로세서의 분기 타겟 버퍼(BTB)의 제1 엔트리에 기초하여, 제1 분기 리턴 인스트럭션의 예측을 식별하는 단계; 및 제1 분기 리턴 인스트럭션의 예측을 식별하는 것에 응답하여, 프로세서의 분기 리턴 어드레스에 대한 액세스를 시작하는 단계를 포함한다. 일 양태에서, 제1 엔트리는, 제1 분기 리턴 인스트럭션의 예측을 나타내는 제1 리턴 필드; 및 제1 예측 분기 어드레스를 나타내는 제1 분기 필드를 포함한다. 다른 양태에서, 제1 분기 리턴 인스트럭션의 예측은 제1 예측 분기 어드레스가 리턴 인스트럭션에 대응한다는 예측을 포함한다. 또 다른 양태에서, 방법은 제1 분기 리턴 인스트럭션이 리턴 인스트럭션이 잘못 예측되었다는 것을 식별하는 것에 응답하여 리턴 예측 없음을 나타내도록 제1 엔트리를 설정하는 단계를 포함한다.
일 양태에서, 방법은, 제1 엔트리가 리턴 인스트럭션의 예측을 나타낸다고 결정하는 것에 응답하여, BTB에 대한 후속 액세스를 억제하는 단계를 포함한다. 또 다른 양태에서, 방법은 BTB의 제2 엔트리에 기초하여, 제2 분기 리턴 인스트럭션의 예측을 식별하는 단계; 및 제2 분기 리턴 인스트럭션의 예측을 식별하는 것에 응답하여, 분기 리턴 어드레스 스택에 대한 액세스를 시작하는 단계를 포함한다.
본원에 개시된 바와 같이, 일부 실시예들에서, 방법은, 제1 프로그램 카운터 값에 기초하여 분기 타겟 버퍼(BTB)의 제1 엔트리에 액세스하는 단계; BTB의 제1 엔트리의 제1 분기 어드레스 필드에 기초하여 제1 인스트럭션 어드레스로 분기하는 단계; 및 제1 인스트럭션 어드레스가 리턴 인스트럭션에 대응함을 나타내는 BTB의 제1 엔트리의 제1 리턴 필드에 응답하여, 분기 리턴 어드레스 스택에 대한 액세스를 시작하는 단계를 포함한다. 일 양태에서, 방법은, 제1 인스트럭션 어드레스가 리턴 인스트럭션에 대응한다고 결정하는 것에 응답하여, 제1 리턴 필드에 리턴의 표시를 저장하는 단계를 포함한다. 또 따른 양태에서, 분기 리턴 어드레스들 스택에 대한 액세스를 시작하는 단계는 제1 인스트럭션 어드레스의 분기와 동시에 분기 리턴 어드레스 스택으로부터 인스트럭션 어드레스를 리턴하는 단계를 포함한다. 또 따른 양태에서, 방법은 제1 인스트럭션 어드레스가 리턴 인스트럭션에 대응함을 나타내는 제1 리턴 필드에 응답하여, BTB에 대한 후속 액세스를 억제하는 단계를 포함한다.
일 양태에서, 후속 액세스를 억제하는 단계는 예측 리턴 인스트럭션에서 BTB 히트로 이어질 것으로 예상되는 BTB에 대한 액세스를 억제하는 단계를 포함한다. 다른 양태에서, 방법은, 제2 프로그램 카운터 값에 기초하여 BTB의 제2 엔트리에 액세스하는 단계; BTB의 제1 엔트리의 제2 분기 어드레스 필드에 기초하여 제2 인스트럭션 어드레스로 분기하는 단계; 및 제2 인스트럭션 어드레스가 리턴 인스트럭션에 대응함을 나타내는 BTB의 제2 엔트리의 제2 리턴 필드에 응답하여, 분기 리턴 어드레스 스택에 대한 액세스를 시작하는 단계를 포함한다. 또 다른 양태에서, 방법은 리턴이 잘못 예측되었다고 식별하는 것에 응답하여 리턴 예측이 없음을 나타내도록 제1 엔트리를 설정하는 단계를 포함한다.
본원에 개시된 바와 같이, 일부 실시에들에서, 프로세서는, 제1 분기 리턴 인스트럭션의 예측을 식별하는 제1 엔트리를 포함하는 분기 타겟 버퍼(BTB); 분기 리턴 어드레스 스택; 및 제1 분기 리턴 인스트럭션의 예측을 나타내는 BTB의 제1 엔트리에 응답하여, 분기 리턴 어드레스 스택에 대한 액세스를 시작하도록 구성된 프로세서 코어를 포함한다. 일 양태에서, BTB의 제1 엔트리는, 제1 분기 리턴 인스트럭션의 예측을 나타내는 제1 리턴 필드; 및 제1 예측 분기 어드레스를 나타내는 제1 분기 필드를 포함한다. 다른 양태에서, 제1 분기 리턴 인스트럭션의 예측은 제1 예측 분기 어드레스가 리턴 인스트럭션에 대응한다는 예측을 포함한다.
일 양태에서, 프로세서 코어는 제1 분기 리턴 인스트럭션이 잘못 예측되었다고 식별하는 것에 응답하여 리턴 예측이 없음을 나타내도록 제1 엔트리를 설정하도록 구성된다. 다른 양태에서, 프로세서 코어는 제1 엔트리가 리턴 인스트럭션을 나타낸다고 결정하는 것에 응답하여, BTB에 대한 후속 액세스를 억제하도록 구성된다. 또 다른 양태에서, 프로세서 코어는 제1 엔트리는 리턴 인스트럭션을 나타낸다고 결정하는 것에 응답하여, 제1 분기 리턴 인스트럭션에 액세스하는 것으로 예상되는 BTB에 대한 후속 액세스를 억제하도록 구성된다. 또 다른 양태에서, BTB는 제2 분기 리턴 인스트럭션의 예측을 나타내는 제2 엔트리를 포함하고; 프로세서 코어는 제2 분기 리턴 인스트럭션의 예측을 식별하는 것에 응답하여, 분기 리턴 어드레스 스택에 대한 액세스를 시작하도록 구성된다.
컴퓨터 판독 가능 저장 매체는 컴퓨터 시스템에 명령들 및/또는 데이터를 제공하기 위해 사용하는 동안 컴퓨터 시스템에 의해 액세스 가능한 임의의 비-일시적 저장 매체, 또는 비-일시적 저장 매체들의 조합을 포함할 수 있다. 이러한 저장 매체들은, 제한하는 것은 아닌, 광학 매체(예를 들어, 콤팩트 디스크(CD), 디지털 다목적 디스크(DVD), 블루 레이 디스크), 자기 매체(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비-휘발성 메모리(예를 들어, 판독 전용 메모리(ROM) 또는 플래시 메모리), 또는 마이크로 전자 기계 시스템(MEMS) 기반 저장 매체를 포함할 수 있다. 컴퓨터 판독 가능 저장 매체는 컴퓨팅 시스템(예를 들어, 시스템 RAM 또는 ROM)에 내장되거나, 컴퓨팅 시스템(예를 들어, 자기 하드 드라이브)에 고정 부착되거나, 컴퓨팅 시스템(예를 들어, 광 디스크 또는 범용 직렬 버스(USB)-기반 플래시 메모리)에 제거 가능하게 부착되거나, 또는 유선 또는 무선 네트워크(예를 들어, 네트워크 액세스 가능 저장소(NAS))를 통해 컴퓨터 시스템에 결합될 수 있다.
일부 실시예들에서, 상기에 설명된 기술들의 특정 양태들은 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서들에 의해 구현될 수 있다. 소프트웨어는 비-일시적 컴퓨터 판독 가능 저장 매체에 저장되거나 아니면 유형적으로(tangibly) 구현된 하나 이상의 실행 가능 명령 세트들을 포함한다. 소프트웨어는 하나 이상의 프로세서들에 의해 실행 시 상술한 기술들 중 하나 이상의 측면들을 수행하도록 하나 이상의 프로세서를 조작하는 명령들 및 특정 데이터를 포함할 수 있다. 비-일시적 컴퓨터 판독 가능 저장 매체는 예를 들어, 자기 또는 광 디스크 저장 장치, 플래시 메모리와 같은 솔리드 스테이트 저장 장치, 캐시, 랜덤 액세스 메모리(RAM) 또는 기타 비-휘발성 메모리 장치 또는 장치들 등을 포함할 수 있다. 비-일시적 컴퓨터 판독 가능 저장 매체에 저장된 실행 가능 명령들은 소스 코드, 어셈블리어 코드, 객체 코드, 또는 하나 이상의 프로세서들에 의해 해석되거나 아니면 실행 가능한 기타 명령 포맷일 수 있다.
일반적인 설명에서 상술한 모든 활동들 또는 요소들이 필요한 것은 아니며, 특정 활동 또는 장치의 일부가 필요하지 않을 수 있으며, 설명된 것들 외에 하나 이상의 추가 활동들이 수행될 수 있거나, 또는 요소들이 포함될 수 있음에 유의한다. 또한, 활동들이 나열되는 순서가 반드시 수행되는 순서는 아니다. 또한, 개념들은 특정 실시예들을 참조하여 설명되었다. 그러나, 당업자는 이하의 청구 범위에 기재된 본 개시의 범위를 벗어나지 않고 다양한 수정들 및 변경들이 이루어질 수 있음을 이해한다. 따라서, 명세서 및 도면들은 제한적인 의미라기 보다는 예시적인 것으로 간주되어야 하며, 이러한 모든 수정들은 본 개시의 범위 내에 포함되는 것으로 의도된다.
이점들, 다른 장점들 및 문제들에 대한 해결책들이 특정 실시예들과 관련하여 상기에 설명되었다. 그러나, 이점들, 장점들, 문제에 대한 솔루션들 및 이점, 장점 또는 솔루션을 발생시키거나 더 두드러지게 만들 수 있는 임의의 특징(들)은 일부 또는 모든 청구항들의 중요하거나, 요구되거나 또는 필수 특징으로 해석되어서는 안된다. 게다가, 개시된 주제는 본원의 교시의 이점을 갖는 당업자에게 명백하게 다르지만 동등한 방식으로 수정 및 실시될 수 있으므로, 위에 개시된 특정 실시예들은 단지 예시일 뿐이다. 이하의 청구 범위에 기재된 것 이외에, 본원에 도시된 구성 또는 설계의 세부 사항들에 대한 제한은 없다. 따라서, 상기 개시된 특정 실시예들은 변경되거나 수정될 수 있으며, 이러한 모든 변형들은 개시된 주제의 범위 내에서 고려된다는 것은 명백하다. 따라서, 본원에서 요구되는 보호는 아래의 청구 범위에 명시된 바와 같다.

Claims (20)

  1. 방법으로서,
    프로세서[100]의 분기 타겟 버퍼(BTB)[110]의 제1 엔트리[111]에 기초하여, 제1 분기 리턴 인스트럭션의 예측을 식별하는 단계; 및
    상기 제1 분기 리턴 인스트럭션의 상기 예측을 식별하는 것에 응답하여, 상기 프로세서의 분기 리턴 어드레스 스택[115]에 대한 액세스를 시작하는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 제1 엔트리는,
    상기 제1 분기 리턴 인스트럭션의 상기 예측을 나타내는 제1 리턴 필드[113]; 및
    제1 예측 분기 어드레스를 나타내는 제1 분기 필드[112]를 포함하는, 방법.
  3. 제2항에 있어서,
    상기 제1 분기 리턴 인스트럭션의 상기 예측은 상기 제1 예측 분기 어드레스가 리턴 인스트럭션에 대응한다는 예측을 포함하는, 방법.
  4. 제3항에 있어서,
    상기 제1 분기 리턴 인스트럭션이 잘못 예측되었다고 식별하는 것에 응답하여 리턴 예측 없음을 나타내도록 상기 제1 엔트리를 설정하는 단계를 더 포함하는, 방법.
  5. 제1항에 있어서,
    상기 제1 엔트리가 리턴 인스트럭션의 예측을 나타낸다고 결정하는 것에 응답하여, 상기 BTB에 대한 후속 액세스를 억제하는 단계를 더 포함하는, 방법.
  6. 제1항에 있어서,
    상기 BTB의 제2 엔트리에 기초하여, 제2 분기 리턴 인스트럭션의 예측을 식별하는 단계; 및
    상기 제2 분기 리턴 인스트럭션의 상기 예측을 식별하는 것에 응답하여, 상기 분기 리턴 어드레스 스택에 대한 액세스를 시작하는 단계를 더 포함하는, 방법.
  7. 방법에 있어서,
    제1 프로그램 카운터 값[101]에 기초하여 분기 타겟 버퍼(BTB)[110]의 제1 엔트리에 액세스하는 단계;
    상기 BTB의 상기 제1 엔트리의 제1 분기 어드레스 필드[112]에 기초하여 제1 인스트럭션 어드레스로 분기하는 단계; 및
    상기 제1 인스트럭션 어드레스가 리턴 인스트럭션에 대응함을 나타내는 상기 BTB의 상기 제1 엔트리의 제1 리턴 필드[113]에 응답하여, 분기 리턴 어드레스 스택[115]에 대한 액세스를 시작하는 단계를 포함하는, 방법.
  8. 제7항에 있어서,
    상기 제1 인스트럭션 어드레스가 상기 리턴 인스트럭션에 대응한다고 결정하는 것에 응답하여, 상기 제1 리턴 필드에 리턴의 표시를 저장하는 단계를 더 포함하는, 방법.
  9. 제7항에 있어서,
    상기 분기 리턴 어드레스 스택에 대한 액세스를 시작하는 단계는 상기 제1 인스트럭션 어드레스의 분기와 동시에 상기 분기 리턴 어드레스 스택으로부터 인스트럭션 어드레스를 리턴하는 단계를 포함하는, 방법.
  10. 제7항에 있어서,
    상기 제1 인스트럭션 어드레스가 상기 리턴 인스트럭션에 대응함을 나타내는 상기 제1 리턴 필드에 응답하여, 상기 BTB에 대한 후속 액세스를 억제하는 단계를 더 포함하는, 방법.
  11. 제10항에 있어서,
    상기 후속 액세스를 억제하는 단계는 예측 리턴 인스트럭션에서 BTB 히트로 이어질 것으로 예상되는 상기 BTB에 대한 액세스를 억제하는 단계를 포함하는, 방법.
  12. 제7항에 있어서,
    제2 프로그램 카운터 값에 기초하여 상기 BTB의 제2 엔트리에 액세스하는 단계;
    상기 BTB의 상기 제1 엔트리의 제2 분기 어드레스 필드에 기초하여 제2 인스트럭션 어드레스로 분기하는 단계; 및
    상기 제2 인스트럭션 어드레스가 리턴 인스트럭션에 대응함을 나타내는 상기 BTB의 상기 제2 엔트리의 제2 리턴 필드에 응답하여, 상기 분기 리턴 어드레스 스택에 대한 액세스를 시작하는 단계를 더 포함하는, 방법.
  13. 제7항에 있어서,
    상기 리턴이 잘못 예측되었다고 식별하는 것에 응답하여 리턴 예측 없음을 나타내도록 상기 제1 엔트리를 설정하는 단계를 더 포함하는, 방법.
  14. 프로세서[100]에 있어서,
    제1 분기 리턴 인스트럭션의 예측을 식별하는 제1 엔트리[111]를 포함하는 분기 타겟 버퍼(BTB)[110];
    분기 리턴 어드레스 스택[115]; 및
    상기 제1 분기 리턴 인스트럭션의 상기 예측을 나타내는 상기 BTB의 상기 제1 엔트리에 응답하여, 상기 분기 리턴 어드레스 스택에 대한 액세스를 시작하도록 구성된 프로세서 코어를 포함하는, 프로세서.
  15. 제14항에 있어서, 상기 BTB의 상기 제1 엔트리는,
    상기 제1 분기 리턴 인스트럭션의 상기 예측을 나타내는 제1 리턴 필드[113]; 및
    제1 예측 분기 어드레스를 나타내는 제1 분기 필드[112]를 포함하는, 프로세서.
  16. 제15항에 있어서,
    상기 제1 분기 리턴 인스트럭션의 상기 예측은 상기 제1 예측 분기 어드레스가 리턴 인스트럭션에 대응한다는 예측을 포함하는, 프로세서.
  17. 제15항에 있어서,
    상기 프로세서 코어는,
    상기 제1 분기 리턴 인스트럭션이 잘못 예측되었다고 식별하는 것에 응답하여 리턴 예측 없음을 나타내도록 상기 제1 엔트리를 설정하도록 구성되는, 프로세서.
  18. 제14항에 있어서,
    상기 프로세서 코어는,
    상기 제1 엔트리가 리턴 인스트럭션을 나타낸다고 결정하는 것에 응답하여, 상기 BTB에 대한 후속 액세스를 억제하도록 구성되는, 프로세서.
  19. 제14항에 있어서,
    상기 프로세서 코어는,
    상기 제1 엔트리가 리턴 인스트럭션을 나타낸다고 결정하는 것에 응답하여, 상기 제1 분기 리턴 인스트럭션에 액세스할 것으로 예상되는 상기 BTB에 대한 후속 액세스를 억제하도록 구성되는, 프로세서.
  20. 제14항에 있어서,
    상기 BTB는 제2 분기 리턴 인스트럭션의 예측을 나타내는 제2 엔트리를 포함하고;
    상기 프로세서 코어는 상기 제2 분기 리턴 인스트럭션의 상기 예측을 식별하는 것에 응답하여, 상기 분기 리턴 어드레스 스택에 대한 액세스를 시작하도록 구성되는, 프로세서.
KR1020217004753A 2018-07-24 2019-07-17 초기 리턴 예측을 갖는 분기 타겟 버퍼 KR102571623B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/043,293 US11055098B2 (en) 2018-07-24 2018-07-24 Branch target buffer with early return prediction
US16/043,293 2018-07-24
PCT/US2019/042176 WO2020023263A1 (en) 2018-07-24 2019-07-17 Branch target buffer with early return prediction

Publications (2)

Publication Number Publication Date
KR20210025677A true KR20210025677A (ko) 2021-03-09
KR102571623B1 KR102571623B1 (ko) 2023-08-29

Family

ID=69179546

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217004753A KR102571623B1 (ko) 2018-07-24 2019-07-17 초기 리턴 예측을 갖는 분기 타겟 버퍼

Country Status (6)

Country Link
US (1) US11055098B2 (ko)
EP (1) EP3827338A4 (ko)
JP (1) JP7269318B2 (ko)
KR (1) KR102571623B1 (ko)
CN (1) CN112470122B (ko)
WO (1) WO2020023263A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11663126B1 (en) * 2022-02-23 2023-05-30 International Business Machines Corporation Return address table branch predictor
CN116737240A (zh) * 2022-03-02 2023-09-12 腾讯科技(深圳)有限公司 分支预测方法、装置、处理器、介质及设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5604877A (en) * 1994-01-04 1997-02-18 Intel Corporation Method and apparatus for resolving return from subroutine instructions in a computer processor
US20030120906A1 (en) * 2001-12-21 2003-06-26 Jourdan Stephan J. Return address stack
US20050076193A1 (en) * 2003-09-08 2005-04-07 Ip-First, Llc. Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence
US20140143494A1 (en) * 2012-11-19 2014-05-22 Florida State University Research Foundation, Inc. Systems and methods for improving processor efficiency through caching

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5964868A (en) * 1996-05-15 1999-10-12 Intel Corporation Method and apparatus for implementing a speculative return stack buffer
US5850543A (en) * 1996-10-30 1998-12-15 Texas Instruments Incorporated Microprocessor with speculative instruction pipelining storing a speculative register value within branch target buffer for use in speculatively executing instructions after a return
US6957327B1 (en) * 1998-12-31 2005-10-18 Stmicroelectronics, Inc. Block-based branch target buffer
US6609194B1 (en) * 1999-11-12 2003-08-19 Ip-First, Llc Apparatus for performing branch target address calculation based on branch type
US7200740B2 (en) * 2001-05-04 2007-04-03 Ip-First, Llc Apparatus and method for speculatively performing a return instruction in a microprocessor
US6973563B1 (en) 2002-01-04 2005-12-06 Advanced Micro Devices, Inc. Microprocessor including return prediction unit configured to determine whether a stored return address corresponds to more than one call instruction
US20040003213A1 (en) 2002-06-28 2004-01-01 Bockhaus John W. Method for reducing the latency of a branch target calculation by linking the branch target address cache with the call-return stack
US8341383B2 (en) * 2007-11-02 2012-12-25 Qualcomm Incorporated Method and a system for accelerating procedure return sequences
US7882338B2 (en) * 2008-02-20 2011-02-01 International Business Machines Corporation Method, system and computer program product for an implicit predicted return from a predicted subroutine
US7913068B2 (en) * 2008-02-21 2011-03-22 International Business Machines Corporation System and method for providing asynchronous dynamic millicode entry prediction
US20120079255A1 (en) 2010-09-25 2012-03-29 Combs Jonathan D Indirect branch prediction based on branch target buffer hysteresis
US10338928B2 (en) 2011-05-20 2019-07-02 Oracle International Corporation Utilizing a stack head register with a call return stack for each instruction fetch
WO2013101152A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Embedded branch prediction unit
US20140250289A1 (en) * 2013-03-01 2014-09-04 Mips Technologies, Inc. Branch Target Buffer With Efficient Return Prediction Capability
US11099849B2 (en) 2016-09-01 2021-08-24 Oracle International Corporation Method for reducing fetch cycles for return-type instructions
US20190235873A1 (en) * 2018-01-30 2019-08-01 Samsung Electronics Co., Ltd. System and method of reducing computer processor power consumption using micro-btb verified edge feature
GB201802815D0 (en) * 2018-02-21 2018-04-04 Univ Edinburgh Branch target buffer arrangement for instruction prefetching
GB2577051B (en) * 2018-09-11 2021-03-03 Advanced Risc Mach Ltd Branch prediction using branch target buffer

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5604877A (en) * 1994-01-04 1997-02-18 Intel Corporation Method and apparatus for resolving return from subroutine instructions in a computer processor
US20030120906A1 (en) * 2001-12-21 2003-06-26 Jourdan Stephan J. Return address stack
US20050076193A1 (en) * 2003-09-08 2005-04-07 Ip-First, Llc. Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence
US20140143494A1 (en) * 2012-11-19 2014-05-22 Florida State University Research Foundation, Inc. Systems and methods for improving processor efficiency through caching

Also Published As

Publication number Publication date
EP3827338A4 (en) 2022-04-27
KR102571623B1 (ko) 2023-08-29
JP2021532471A (ja) 2021-11-25
CN112470122A (zh) 2021-03-09
US11055098B2 (en) 2021-07-06
EP3827338A1 (en) 2021-06-02
JP7269318B2 (ja) 2023-05-08
US20200034151A1 (en) 2020-01-30
WO2020023263A1 (en) 2020-01-30
CN112470122B (zh) 2022-05-10

Similar Documents

Publication Publication Date Title
US11416256B2 (en) Selectively performing ahead branch prediction based on types of branch instructions
US10353710B2 (en) Techniques for predicting a target address of an indirect branch instruction
EP3803577A1 (en) Storing incidental branch predictions to reduce latency of misprediction recovery
KR102571623B1 (ko) 초기 리턴 예측을 갖는 분기 타겟 버퍼
CN112925632B (zh) 处理方法及装置、处理器、电子设备及存储介质
US9639370B1 (en) Software instructed dynamic branch history pattern adjustment
JP2022509171A (ja) ループ終了予測器
US11016771B2 (en) Processor and instruction operation method
US11392383B2 (en) Apparatus and method for prefetching data items
KR20230015993A (ko) 병합된 분기 타겟 버퍼 엔트리
CN114610388A (zh) 一种指令跳转方法、处理器及电子设备
US20220075624A1 (en) Alternate path for branch prediction redirect
US11204771B2 (en) Methods and apparatus for handling processor load instructions
JP2014059665A (ja) マイクロコンピュータ及びマイクロコンピュータにおける命令処理方法

Legal Events

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