KR20190039290A - 분기 타깃 버퍼 압축 - Google Patents

분기 타깃 버퍼 압축 Download PDF

Info

Publication number
KR20190039290A
KR20190039290A KR1020197007765A KR20197007765A KR20190039290A KR 20190039290 A KR20190039290 A KR 20190039290A KR 1020197007765 A KR1020197007765 A KR 1020197007765A KR 20197007765 A KR20197007765 A KR 20197007765A KR 20190039290 A KR20190039290 A KR 20190039290A
Authority
KR
South Korea
Prior art keywords
branch
target buffer
branch target
entry
compressed
Prior art date
Application number
KR1020197007765A
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 KR20190039290A publication Critical patent/KR20190039290A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

분기 타깃 버퍼("BTB") 동작을 개선하기 위한 기술. 압축 BTB는 미압축 BTB와 함께 분기 예측 유닛 내에 포함된다. 사이클당 2개 이하의 분기 명령어의 예측을 지원하기 위해, 미압축 BTB는 2개 이하의 분기 예측에 대한 데이터를 각각 저장하는 엔트리를 포함한다. 압축BTB는, 미압축 BTB 내에 해당의 단일 분기 명령어를 저장하는 것이 해당 버퍼 내의 공간을 낭비하는 상황에 대하여 단 하나의 분기 명령어에 대한 데이터를 저장하는 엔트리를 포함한다. 사이클당 2개의 분기 룩업을 지원하기 위해서, 2개의 분기에 대한 예측 데이터가 단일 엔트리 내에 함께 저장되도록 공통으로 특정한 특징(예를 들어, 캐시 라인 어드레스)을 가져야 한다는 사실 때문에, 미압축 BTB에서 공간이 낭비될 것이다.

Description

분기 타깃 버퍼 압축
[관련 출원의 상호 참조]
본 출원은 2016년 8월 30일에 출원된 미국 정규 특허출원 제15/252,164호의 이익을 주장하며, 그 내용은 본 명세서에서 상세하게 기술되는 바와 같이 참고로 포함된다.
마이크로프로세서에서, 명령어는 분기(branch)가 발생할 때까지 순차적으로 실행을 위해 페치(fetch)된다. 분기는, 명령어가 페치되고 명령어 페치 처리량의 지연과 관련될 수 있는 어드레스의 변화를 초래한다. 예를 들어, 분기는, 분기를 수행할 것인지의 여부뿐만 아니라 분기 목적지가 무엇인지를 결정하기 위해 평가될 필요가 있을 수 있다. 그러나, 분기가 실제로 명령어 실행 파이프라인에 입력될 때까지 분기는 평가될 수 없다. 분기 지연은, 분기가 페치되는 시간과 해당 분기의 결과 및 이에 따라 명령어가 다음에 페치될 필요가 있는지를 결정하기 위해 분기가 평가되는 시간 사이의 차이와 관련된다.
분기 예측은, 명령어 어드레스 및 분기 평가 이력에 기초하여 분기 명령어의 존재 및 결과를 예측함으로써 이러한 지연을 완화시키는 것을 돕는다. 분기 예측 기술은 분기 조건부 결정(예를 들어, 수행 여부)의 글로벌 이력, 및 현재 프로그램 카운터 값을 사용하여, 분기가 존재하는지 여부와 분기가 수행되어야 하는지의 여부의 예측을 행할 수 있다. 분기 타깃 버퍼는 프로그램 카운터 어드레스를 분기 타깃과 관련시키는 정보를 저장한다. 분기 타깃 버퍼 내의 엔트리의 존재는, 분기가 해당 엔트리와 관련된 프로그램 카운터에 존재함을 암시적으로 나타낸다. 분기 예측기는 글로벌 이력 및 분기 타깃 버퍼 데이터를 사용하여 분기 예측 결정을 행할 수 있다. 분기 명령어와 관련된 지연 때문에, 효율적인 분기 예측 및 잘 설계된 분기 예측 로직이 마이크로프로세서 설계에서 중요하다.
첨부 도면과 관련하여 일 예로서 제공되는 다음의 설명으로부터 보다 상세한 이해가 될 수 있다.
도 1은 하나 이상의 개시된 실시형태가 구현될 수 있는 예시적인 장치의 블록도이고;
도 2는 도 1의 프로세서 내에 배치된 명령어 실행 파이프라인의 블록도이고;
도 3은 예시적인 분기 예측 유닛을 도시하는 블록도이고;
도 4는 일 실시예에 따라, 미압축 분기 타깃 버퍼 및 압축 분기 타깃 버퍼 양쪽에 대한 엔트리를 도시하는 도면이고;
도 5는 일 실시예에 따라, 압축 및 미압축 분기 타깃 버퍼를 사용하여 분기 타깃 예측 데이터를 획득하는 방법의 흐름도이고;
도 6은 일 실시예에 따라, 미압축 분기 타깃 버퍼 및 압축 분기 타깃 버퍼를 갱신하기 위한 방법의 흐름도이다.
압축 분기 타깃 버퍼는 미압축 분기 타깃 버퍼와 함께 분기 예측 유닛 내에 포함된다. 사이클당 2개 이하의 분기 명령어의 예측을 지원하기 위해, 미압축 분기 타깃 버퍼는 2개 이하의 분기 예측에 대한 데이터를 각각 저장하는 엔트리를 포함한다. 압축 분기 타깃 버퍼는, 미압축 분기 타깃 버퍼 내에 해당의 단일 분기 명령어를 저장하는 것이 해당 버퍼 내의 공간을 낭비하는 상황에 대하여 단 하나의 분기 명령어에 대한 데이터를 저장하는 엔트리를 포함한다. 2개의 분기에 대한 예측 데이터가 단일 엔트리 내에 함께 저장되기 위해 공통으로 특정한 특징(예를 들어, 캐시 라인 어드레스)을 가져야 한다는 사실 때문에, 미압축 분기 타깃 버퍼에서 공간이 낭비될 것이다. 한 분기가 다른 분기와 이러한 기능을 공유하지 않는 경우에는, 해당 분기는 미압축 분기 타깃 버퍼 내의 그 자체의 엔트리를 필요로 할 것이다. 그 대신에, 해당 분기는 압축 분기 타깃 버퍼 내에 저장된다.
도 1은 본 개시의 양태가 구현되는 예시적인 장치(100)의 블록도이다. 장치(100)는, 예를 들어 컴퓨터, 게이밍 장치, 핸드헬드 장치, 셋톱 박스, 텔레비전, 이동 전화, 또는 태블릿 컴퓨터를 포함한다. 장치(100)는 프로세서(102), 메모리(104), 저장 장치(106), 하나 이상의 입력 장치(108), 및 하나 이상의 출력 장치(110)를 포함한다. 장치(100)는 또한 선택적으로 입력 드라이버(112) 및 출력 드라이버(114)를 포함할 수도 있다. 장치(100)는 도 1에 나타내지 않은 추가 구성요소를 포함할 수도 있다는 것이 이해된다.
프로세서(102)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 동일한 다이 상에 배치되는 CPU 및 GPU, 또는 하나 이상의 프로세서 코어를 포함하며, 각 프로세서 코어는 CPU 또는 GPU이다. 메모리(104)는 프로세서(102)와 동일한 다이 상에 배치될 수 있거나, 또는 프로세서(102)와는 별개로 배치될 수도 있다. 메모리(104)는 휘발성 또는 비휘발성 메모리, 예를 들어 랜덤 액세스 메모리(RAM), 동적 RAM, 또는 캐시를 포함한다.
저장 장치(106)는, 고정식 또는 착탈식 스토리지, 예를 들어 하드 디스크 드라이브, 솔리드 스테이트 드라이브, 광학 디스크, 또는 플래시 드라이브를 포함한다. 입력 장치(108)는 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 생체 인식 스캐너, 또는 네트워크 연결부(예를 들어, 무선 IEEE802 신호의 송신 및/또는 수신을 위한 무선 근거리 네트워크 카드)를 포함한다. 출력 장치(110)는 디스플레이, 스피커, 프린터, 헵틱 피드백 장치, 하나 이상의 조명, 안테나, 또는 네트워크 연결부(예를 들어, 무선 IEEE802 신호의 송신 및/또는 수신을 위한 무선 근거리 네트워크 카드)를 포함한다.
입력 드라이버(112)는 프로세서(102) 및 입력 장치(108)와 통신하고, 프로세서(102)가 입력 장치(108)로부터의 입력을 수신할 수 있게 한다. 출력 드라이버(114)는 프로세서(102) 및 출력 장치(110)와 통신하고, 프로세서(102)가 출력 장치(110)에 출력을 전송할 수 있게 한다. 입력 드라이버(112) 및 출력 드라이버(114)는 선택적인 구성요소이고, 장치(100)는 입력 드라이버(112) 및 출력 드라이버(114)가 존재하지 않는 경우에 동일한 방식으로 동작할 것이라는 점에 유의해야 한다.
도 2는 도 1의 프로세서(102) 내에 배치된 명령어 실행 파이프라인(200)의 블록도이다. 명령어 실행 파이프라인(200)은, 데이터를 메모리에 출력하고 레지스터 파일(218) 내의 레지스터와 같은 명령어 실행 파이프라인(200) 내의 요소의 상태를 수정하는 명령어를 메모리로부터 검색하고 명령어를 실행한다.
명령어 실행 파이프라인(200)은, 명령어 캐시(202)를 통해 시스템 메모리(예를 들어, 메모리(104))로부터 명령어를 페치하도록 구성된 명령어 페치 유닛(204), 페치된 명령어를 디코딩하도록 구성된 디코더(208), 명령어를 처리하기 위한 계산을 수행하도록 구성된 기능 유닛(216), 데이터 캐시(220)를 통해 시스템 메모리로부터 데이터를 로딩하거나 시스템 메모리에 데이터를 저장하도록 구성된 로드 저장 유닛(214), 및 명령어에 대한 작업 데이터를 저장하는 레지스터를 포함하는 레지스터 파일(218)을 포함한다. 리오더 버퍼(reorder buffer)(210)는 현재 인-플라이트(in-flight)인 명령어를 추적하고, 인-플라이트 동안 비순차(out-of-order) 실행을 허용함에도 불구하고 명령어의 순차 회수(in-order retirement)를 보장한다. "인-플라이트" 명령어는, 리오더 버퍼(210)에 의해 수신되었지만 아직 프로세서의 구조적 상태(architectural state)에 커밋(commit)된 결과(가령, 레지스터 파일에 기입된 결과, 등)를 갖지 않는 명령어를 지칭한다. 예약 스테이션(212)은 인-플라이트 명령어를 유지하고 명령어 피연산자를 추적한다. 모든 피연산자가 특정 명령어의 실행을 준비하면, 예약 스테이션(212)은 실행을 위해 명령어를 기능 유닛(216) 또는 로드/저장 유닛(214)에 전송한다. 완료된 명령어는 리오더 버퍼(210) 내의 회수를 위해 마킹되고, 리오더 버퍼 큐(210)의 선두에 있을 때 회수된다. 회수는 명령어의 결과를 프로세서의 구조적 상태에 커밋하는 행위를 지칭한다. 예를 들어, 가산 명령어에 의해 가산 결과를 레지스터에 기록하는 것, 로드 명령어에 의해 로딩된 값을 레지스터에 기록하는 것, 또는 분기 명령어에 의해 명령어 흐름을 새로운 위치로 점프시키는 것은 모두 명령어 회수의 예이다.
명령어 실행 파이프라인(200)의 다양한 요소는 공통 데이터 버스(222)를 통해 통신한다. 예를 들어, 기능 유닛(216) 및 로드/저장 유닛(214)은 결과를 공통 데이터 버스(222)에 기록하고, 그 결과는 종속 명령어의 실행을 위해 예약 스테이션(212)에 의해 판독될 수 있고 실행을 종료한 인-플라이트 명령어의 최종 처리 결과로서 리오더 버퍼(210)에 의해 판독될 수 있다. 로드/저장 유닛(214)은 또한 공통 데이터 버스(222)로부터 데이터를 판독한다. 예를 들어, 로드/저장 유닛(214)은 공통 데이터 버스(222)로부터 완료된 명령어로부터의 결과를 판독하고, 그 결과를 명령어 저장을 위해 데이터 캐시(220)를 통해 메모리에 기록한다.
전형적으로, 명령어 페치 유닛(204)은 메모리에서 순차적으로 명령어를 페치한다. 순차 제어 흐름은, 명령어 파이프라인(200)이 비순차 어드레스로부터 명령어를 페치하게 하는 분기 명령어에 의해 인터럽트될 수 있다. 분기 명령어는 특정 조건이 충족되는 경우에만 분기를 발생시키는 조건부이거나, 또는 비조건부일 수 있고, 타깃을 직접 또는 간접적으로 지정할 수도 있다. 직접 타깃은 명령어 바이트 자체의 상수에 의해 지정되고, 간접 타깃은 일부 계산에 의해 지정된다. 직접 및 간접 분기는 조건부 또는 비조건부일 수 있다.
명령어의 순차 페칭은 명령어 실행 파이프라인(200)에 대해 비교적 간단하다. 명령어 페치 유닛(204)은 실행을 위해 많은 양의 연속적으로 저장된 명령어를 순차적으로 페치한다. 그러나, 분기 명령어는 몇 가지 이유 때문에 이러한 페칭을 인터럽트할 수도 있다. 보다 구체적으로, 분기 명령어의 유형에 따라, 분기 명령어의 실행을 위해 다음 중 어느 하나 또는 전부가 발생할 수 있다: 명령어 디코더(208)가 명령어가 실제로 분기 명령어인 것으로 결정하는 것, 기능 유닛(216)이 분기 명령어에 대한 타깃을 계산하는 것, 기능 유닛(216)이 분기 명령어의 조건부를 평가하는 것. 분기 명령어가 명령어 페치 유닛(204)에 의해 실행을 위해 페치되고 발행될 때와 분기 명령어가 실제로 명령어 실행 파이프라인(200)에 의해 실행될 때 사이에 지연이 존재하므로, 명령어 페치 유닛(204)은 분기 예측 유닛(206)을 포함한다.
분기 예측 유닛(206)은 페치될 명령어의 어드레스에 기초하여 분기 조건부 예측(예를 들어, 수행 여부) 및 분기 타깃 예측을 생성한다. 분기 예측 유닛(206)은, 임의의 다양한 공지된 기술을 통해 유지되고 조작되는 분기 조건부 이력뿐만 아니라, 명령어 프로그램 카운터를 분기 타깃 어드레스와 상관시키는 분기 타깃 이력을 사용할 수 있다. 예측 분기를 검출하고, 예측 분기에 대한 예측 타깃 어드레스를 식별하며, 타깃 경로가 취해지는 것을 예측할 때, 분기 예측 유닛(206)은 명령어 페치 유닛(204)이 예측 타깃 어드레스로부터 명령어를 페치하는 것을 개시하게 한다. 따라서, 분기 예측 유닛(206)은 분기 명령어의 결과로서 발생하는 지연을 감소시키는 것을 돕는다.
분기가 분기 예측 유닛(206)에 의해 예측되지만, 이러한 예측은 부정확할 수 있다. 따라서, 분기 명령어는 여전히 실행을 위해 잔여의 명령어 실행 파이프라인(200)에 전송된다. 분기 예측이 정확하다는 결정은 프로세서 명령어 흐름에 대한 보정을 초래하지 않는다. 그러나, 분기 예측이 부정확했다("오예측")는 결정은, 명령어 실행 파이프라인 상태뿐만 아니라 분기 예측 유닛(206)에 의해 저장된 분기 예측 데이터에 대한 수정을 포함하는 보정 조치를 초래할 것이다.
보다 구체적으로, 오예측은 명령어 실행 파이프라인(200)에 의해 분기 명령어를 실행하고 그 결과를 분기 예측과 비교함으로써 검출된다. 분기가 오예측되었다는 결정을 내릴 때, 명령어 실행 파이프라인(200)은 프로그램 카운터를 포함하는 프로세서 상태를 보정하고, 현재 보정된 프로그램 카운터에 기초하여 명령어를 페칭하기 시작한다. 프로세서 상태를 보정하는 것은 오예측된 분기 명령어와 관련된 제어 흐름 경로로부터 임의의 인-플라이트 명령어를 플러싱(flushing)하는 것 및 오예측된 제어 흐름 경로와 관련된 임의의 명령어를 설명하기 위해 임의의 다른 파이프라인 상태 데이터를 복원하는 것을 포함할 수 있고, 상당한 성능 저하를 나타낸다. 이러한 이유로, 정확한 분기 예측은 전체 처리 성능을 개선한다.
도 3은 예시적인 분기 예측 유닛(206)을 도시하는 블록도이다. 나타낸 바와 같이, 분기 예측 유닛(206)은 조건부 예측기(304), 미압축 분기 타깃 버퍼(BTB)(310), 압축 BTB(312), 글로벌 이력 메모리(308), 및 예측기(306)를 포함한다. 압축 BTB(312) 및 미압축 BTB(310)는 함께 BTB(302)를 구성한다.
분기 예측 유닛(206)의 유닛은 함께 동작하여 검사 하의 분기 명령어의 결과를 예측하고 예측된 분기 결과에 기초하여 명령어 페치에 대한 예측된 어드레스를 명령어 페치 유닛(204)에 제공한다. 예측기(306)로부터 출력된 예측 정보는, 다음 명령어를 페치할 예측 어드레스 및 조건부 분기가 수행 또는 미수행될 것으로 예측되는지의 여부를 나타내는 예측 조건부 결정을 포함한다. 예측기(306)는 추가 예측을 위해 글로벌 이력 메모리(308), 조건부 예측기(304), 및 미압축 BTB(310) 및 압축 BTB(312)에 어드레스 및 조건부 결정을 제공한다. 글로벌 이력(308)은 예측 정보에 기초하여 분기 예측 이력의 내부 저장을 갱신하고 글로벌 이력 값을 조건부 예측기(304)에 출력한다. 조건부 예측기(304)는 또한 조건부 예측을 제공하기 위해 예측기(306)로부터 예측된 다음 어드레스를 수신한다. 조건부 예측기(304)는 임의의 공지된 기술에 따라 조건부 예측을 제공할 수 있다. 일 실시예에서, 조건부 예측기(304)는, BTB(312) 내의 엔트리에 기초하여, 특정 명령어가 분기 명령어인 것으로 예측됨을 식별하고, 글로벌 이력 메모리(308)로부터 글로벌 분기 이력 비트 값을 획득하며, 예측 알고리즘에 기초하여 글로벌 분기 이력 비트 값을 처리하고, 처리된 비트에 기초하여 예측 결과를 획득한다. 예측된 다음 어드레스는 또한 명령어 스트림 내의 분기 명령어의 식별 및 해당 분기 명령어에 대한 예측 타깃 어드레스의 결정을 위해 미압축 BTB(310) 및 압축 BTB(312)에 병렬로 제공된다.
높은 예측 처리량을 지원하기 위해서, 미압축 BTB(310)는 사이클당 2개 이하의 분기의 룩업(lookup)을 가능하게 한다. 이 능력은 미압축 BTB(310)의 각 엔트리 내에 2개 이하의 분기에 대한 데이터를 포함시킴으로써 달성된다. 보다 구체적으로, 미압축 BTB(310) 내의 엔트리는 명령어 캐시 라인 어드레스에 의해 태깅된다. 따라서, 제공된 단일 명령어 캐시 라인 어드레스에 대한 히트(hit)는 2개 이하의 예측된 분기 타깃 및 분기 명령어인 것으로서 예측된 2개의 명령어가 사이클당 제공될 수 있게 한다. 그러나, 미압축 BTB(310) 내의 단일 엔트리가 하나 초과의 예측 분기 명령어에 대한 데이터를 저장할 수 없는 상황이 있을 수도 있다. 예를 들어, 캐시 라인이 단 하나의 분기 명령어만을 포함하는 경우에는, (캐시 라인 어드레스에 의해 태깅되는) BTB 엔트리는 하나의 분기 명령어에 대한 데이터만을 포함할 수 있다. 이러한 상황에서는, 제2 예측 분기 명령어에 대응하는 엔트리 내의 추가 공간이 낭비된다.
따라서, 압축 BTB(312)가 또한 포함된다. 압축 BTB(312)는 단 하나의 분기 예측 타깃에 대한 데이터를 위해 크기가 정해진 엔트리를 포함한다. 따라서, 미압축 BTB(310) 내의 전체 엔트리를 채우기 위해 특정 캐시 라인에 대해 충분한 분기 타깃 예측 데이터가 존재하지 않을 때에 압축 BTB(312) 내의 엔트리가 사용될 수 있다. 미압축 BTB(310)와 같이, 압축 BTB(312) 내의 엔트리는 분기 예측이 수행되고 있는 캐시 라인의 캐시 라인 어드레스를 사용하여 룩업된다.
추가 공간은 미압축 BTB(310) 내에 저장되는 분기 속성 데이터의 하나 이상의 아이템을 압축함으로써 압축 BTB(312) 내의 엔트리 내에 저장될 수 있다. 일부 실시예에서, 이 압축은 특정 속성에 대해 "공통 케이스(common case)" 값을 가정함으로써 달성된다. 공통 케이스와 매칭하지 않는 모든 분기 명령어는 압축 BTB(312) 내에 저장될 수 없고, 압축 BTB(312) 내의 대응하는 엔트리를 갖는 모든 분기 명령어는 공통 케이스 값을 갖는 것으로 가정된다. 또한, 압축은 특정 양의 비트를 필요로 하는 값을 보다 적은 비트를 필요로 하는 다른 값으로 대체함으로써, 또는 2개 이상의 독립 속성 필드를 2개 이상의 독립 속성 필드의 공통 조합을 나타내는 공유 필드로 변환함으로써 보다 복잡한 방식으로 달성될 수 있고, 공유 필드는 독립 속성 필드보다 적은 비트 수를 갖는다. "공통(common)"인 것으로 간주되는 속성 값만이 압축 BTB(312) 내에 저장되도록 허용되고, 비공통 속성 값을 갖는 분기에 대한 분기 예측 데이터는 미압축 BTB(310) 내에 저장된다. 단 하나의 압축 BTB(312)만으로 나타나 있지만, 분기 예측 유닛(206)은 대안적으로 각각 상이한 압축 방식을 갖는 다수의 압축 BTB를 포함할 수도 있다. 예를 들어, 하나의 압축 BTB 내의 엔트리에 대한 속성은 하나의 특정 값을 갖는 것으로 가정될 수 있는 한편, 다른 압축 BTB 내의 엔트리에 대한 속성은 다른 특정 값을 갖는 것으로 가정될 수 있다. 압축 방식은 또한 다른 방법에서 상이할 수도 있다.
"비공통 속성 값(uncommon attribute value)"을 갖기 때문에 압축될 수 없는 엔트리 이외에, 하나의 다른 유형의 엔트리도 압축 BTB(312) 내에 저장될 수 없다. 보다 구체적으로, 일부 분기 타깃 버퍼 엔트리는 "대형(large)" 분기 타깃 버퍼 엔트리로 간주된다. 대형 엔트리는 단축된 타깃 어드레스가 아닌 전체 길이의 타깃 어드레스를 포함하는 것이다. 보다 구체적으로, 분기 명령어는 전형적으로 분기 명령어 자체의 어드레스에 비교적 가까운 타깃을 갖는다. 따라서, 분기 명령어의 타깃은 전체 어드레스 크기보다 적은 비트 수로 분기 타깃 버퍼 내에 저장될 수 있다. 그러나, 분기 명령어가 분기 명령어의 어드레스로부터 충분히 멀리 떨어진 타깃을 가질 때, 분기 타깃 버퍼는 더 많은 수의 어드레스 비트를 저장해야 한다. 저장에 요구되는 더 많은 수의 비트 때문에, 이러한 유형의 분기 명령어는 미압축 BTB(310) 내에 저장되고 압축 BTB(312) 내에는 저장될 수 없다.
압축 BTB(312) 및 미압축 BTB(310)는, 현재 분기 예측 목적을 위해 검사되고 있는 캐시 라인의 캐시 라인 어드레스에 의해 인덱싱되는 캐시로서 구현될 수 있다. 일 실시예에서, 압축 BTB(312) 및 미압축 BTB(310)는 n 방향 어소시에이티브 캐시(n-way associative cache)를 형성하며, 제1 수의 n 방향은 압축 BTB(312)를 구성하고 다른 수의 n 방향은 미압축 BTB(310)를 구성한다. 따라서, 룩업은 캐시 라인 어드레스를 태그로서 제공하고 추가 처리를 위해 미압축 BTB(312) 또는 압축 BTB(310)로부터 매칭 엔트리를 식별함으로써 미압축 BTB(310) 및 압축 BTB(312) 상에서 병렬로 수행될 수 있다. 하나 초과의 엔트리가 주어진 태그에 대해 존재하는 상충하는 룩업은 분기 예측을 위해 단일 엔트리로부터의 데이터의 선택 및 출력을 초래할 것이다. 현재 룩업의 모든 분기가 수행되지 않는다고 예측되는 경우에는, 다음 사이클에서 동일한 캐시 라인이 룩업되어 남아있는 데이터를 획득한다. 이 순차 룩업은, 주어진 캐시 라인에 대해 더 이상 엔트리가 존재하지 않을 때까지 또는 다른 캐시 라인으로의 분기가 발생할 것으로 예측되거나 PC 또는 예측된 PC가 일부 다른 이유로 변화할 때까지 계속된다.
도 4는 일 실시예에 따라, 미압축 BTB(310) 및 압축 BTB(312) 모두에 대한 엔트리를 도시하는 도면이다. 단일 분기 (압축) BTB 엔트리(402), 이중 분기 (미압축) BTB 엔트리(404), 및 단일 분기 대형 타깃 (미압축) BTB 엔트리(406)가 나타나 있다.
단일 분기 (압축) BTB 엔트리(402)는 태그, 압축 속성, 유형, 오프셋, 및 타깃을 포함한다. 태그는 분기 명령어가 발견된 캐시 라인의 어드레스이다. 압축 속성은 압축 속성 값을 포함한다. 전술한 바와 같이, 일부 속성은 속성 데이터를 생략함으로써 압축될 수 있어, 압축 BTB(312) 내의 임의의 엔트리에 대한 대응하는 속성은 해당 속성에 대한 특정 값을 갖는 것으로 가정된다. 다른 속성은, 속성에 대응하는 비트 수를 감소시키고 특정 속성 값을 갖는 예측 분기에 대응하는 분기 예측 데이터만을 압축 BTB(312) 내에 저장할 수 있게 함으로써 압축될 수 있다. 또 다른 속성은, 2개의 속성 필드를 2개의 상이한 속성에 대한 값의 특정 조합에 대응하는 값을 갖는 공유 속성 필드에 조합함으로써 압축될 수 있다.
유형 필드는 분기의 유형을 저장한다. 유형 필드의 일부 예는, 분기가 무조건 점프, 조건부 점프, 간접 호출, 호출, 리턴, 또는 간접 점프인 것의 표시를 포함한다.
오프셋 필드는 분기 명령어가 발견된 캐시 라인 내의 위치를 나타낸다. 타깃 필드는 분기 명령어의 예측 타깃 어드레스를 나타낸다. 상기한 바와 같이, 분기가 전형적으로 인접한 타깃을 갖고 있기 때문에 타깃 필드는 타깃의 전체 어드레스보다 짧을 수 있다. 실제로, 압축 BTB(312) 내의 모든 엔트리는 이러한 단축된 타깃을 저장한다. 엔트리가 짧지 않은(즉, "대형 타깃"인) 타깃 필드를 필요로 하는 경우에는, 엔트리가 미압축 BTB(310) 내에 대형 타깃 BTB 엔트리(406)로서 저장된다.
이중 분기 BTB 엔트리(404)는 2개의 분기에 대한 데이터를 포함한다. 이중 분기 BTB 엔트리(404)에 대한 단 하나의 태그만이 있기 때문에, 이들 2개의 분기는 모두 동일한 캐시 라인에서 발견된다는 것에 유의해야 한다. 또한, 이중 분기 BTB 엔트리(404) 내의 데이터는 미압축 방식으로 저장된다. 보다 구체적으로, 각 속성에 대한 데이터는 명시적으로 저장되고, 유형 필드는 압축되지 않으며, 압축 BTB(312)에서 압축될 다른 데이터는 압축되지 않는다. 이중 분기 BTB 엔트리(404)는 또한 2개의 저장된 분기 타깃 각각에 대한 하나의 유형 필드 및 하나의 오프셋 필드를 포함한다.
따라서, 압축 BTB(312) 내의 엔트리로부터 생략될 비트가 포함되고, 압축될 값이 미압축 방식으로 저장되며, 공유 필드가 개별 필드로 분할된다. 압축 BTB(312)에서 압축되거나 공유될 수 있는 유형 필드는 이중 분기 BTB 엔트리(404)에서 압축되지 않는다.
대형 타깃 BTB 엔트리(406)는 단일 분기 타깃에 대한 태그, 속성, 유형 필드, 및 단일 대형 타깃 필드를 모두 미압축 방식으로 저장한다. 대형 타깃 BTB 엔트리(406)는, 대형 타깃 BTB 엔트리(406)가 단 하나의 분기에 대한 데이터를 포함한다는 것 및 타깃 값이 대형이고 이중 분기 BTB 엔트리(404) 내의 타깃 필드보다 더 많은 비트를 포함한다는 것을 제외하고는 이중 분기 BTB 엔트리(404)와 유사하다.
이제 일부 예시적인 속성 압축이 설명된다. 이들 압축 중 일부는 "속성" 필드 이외에도 "유형" 필드를 포함할 수도 있다. 압축될 수 있는 속성의 일례는 라스트-인-캐시 라인 필드("LIC 필드")이다. 이 필드는, 특정 엔트리가 특정 캐시 라인 내의 최종 분기인 분기에 대한 데이터를 저장하는지의 여부를 나타낸다. 이 필드의 목적은, 분기 예측 유닛(206)이 특정 BTB 엔트리를 획득한 후, 다음 사이클에서 분기에 대한 특정 캐시 라인을 계속해서 스캐닝할 것인지의 여부 또는 해당 특정 캐시 라인에 더 이상 분기가 남아있지 않기 때문에 다음 사이클에서 다음 캐시 라인으로 진행할 것인지의 여부를 알 수 있게 하기 위한 것이다.
공통 케이스에서, LIC 필드의 값은, 특정 캐시 라인에서 다수의 분기를 갖는 것이 비공통적이기 때문에, 특정 분기가 캐시 라인에서 최종 분기인 것을 나타낸다. 따라서, 압축 BTB 내의 엔트리는 캐시 라인에서 최종 분기 명령어인 이러한 공통 케이스인 것으로 가정된다. BTB 엔트리가 라스트-인-캐시-라인 분기를 포함하지 않는 경우에는, 해당 BTB 엔트리가 미압축 BTB(310) 내에 미압축 BTB 엔트리로서 저장되어야 한다. 그러나, 엔트리가 라스트-인-캐시-라인 분기인 분기를 포함하고, 엔트리가 달리 압축 BTB(312) 내에 저장될 수 있는 경우에는, 이러한 엔트리가 압축 BTB(312)에 대해 생성되고, LIC 필드에 대해서는 어떠한 값도 포함되지 않는다. 압축 BTB(312) 내의 모든 엔트리는 라스트-인-캐시-라인 분기를 포함하는 것으로 가정된다. (용어 "라스트-인-캐시-라인(last-in-cache-line)"은 캐시 라인에서 최종 예측된 분기를 의미한다.)
다른 예시적인 압축 기술은, 유효 필드를 압축하고 유형 필드 내의 특정 값을 사용하여 무효 엔트리를 표시하는 것이다. 분기의 유형을 나타내는 유형 필드는 복수의 값 중 하나를 가질 수 있다. 특정 분기 유형은 희귀한 것으로 간주된다. 압축 BTB(312)에서는, 희귀 유형 중 하나를 나타내는 대신에, 희귀 유형 중 하나에 대한 값을 갖는 유형 필드가 엔트리가 무효인 것을 나타낸다. 희귀 유형을 갖는 분기는 압축 BTB(312) 내에 저장될 수 없고, 그 대신에 미압축 BTB(310) 내에 저장되어야 한다.
따라서, 유효 필드는 압축 BTB 엔트리에서 완전히 생략될 수 있다. 보다 구체적으로, 미압축 BTB 엔트리에서, 유효 필드는 한 세트의 예측 분기 데이터만이 유효한지, 양 세트가 유효한지, 엔트리가 대형 타깃 분기에 대한 것인지, 또는 전체 엔트리가 무효한지의 여부를 나타낼 수 있다. 압축 BTB 엔트리가 2개의 분기에 대한 데이터를 저장할 수 없고 대형 타깃 분기에 대한 데이터를 저장할 수 없기 때문에, 이들 엔트리 유형에 대한 "유효 필드" 인코딩은 불필요하다. 압축 BTB 엔트리에 대해 이루어질 필요가 있는 유일한 구별은 유효와 무효 간이다. 상기한 바와 같이, 무효 엔트리는 특정 유형 필드 인코딩에 의해 표시된다. 따라서, 무효 필드를 나타내지 않는 임의의 유형 필드 인코딩은 엔트리가 유효함을 나타낸다. 이러한 이유로, 압축 BTB 엔트리에 대해 별도의 유효 필드가 요구되지는 않는다. 유효 필드 인코딩은 전술한 공유 필드 압축 - 유형 필드 및 유효 필드가 단일의 공유 유형/유효 필드로 압축됨 -의 일례이다.
압축될 수 있는 필드의 다른 예는 스레드간 공유(shared-between-threads) 필드이다. 미압축 BTB(310)에서, 스레드간 공유 필드는, 특정 엔트리가 명령어 실행 파이프라인(200)에서 실행하는 2개의 스레드 간에 공유됨을 나타내는 데 사용된다. 실행 중, 실행 파이프라인(200)은 상이한 스레드로부터의 명령어를 처리할 수 있고 명령어(분기 포함)가 속하는 스레드의 추적을 유지할 수 있다. 공유 실행 모드에서는, 2개의 스레드가 함께 실행되어 동일한 세트의 명령어를 실행할 수 있다. 분기 예측 유닛(206)에서, 공유 실행 모드로 실행하는 2개의 스레드는 BTB 엔트리를 공유하여 엔트리가 2개의 스레드에 대해 복제되지 않는다. 공유 실행이 비공통적이기 때문에, 스레드간 공유 필드는 압축 BTB(312)에서 압축될 수 있다. 따라서, 공유 비트가 압축 BTB(312) 내의 엔트리에 대해 저장되지 않는다. 그 대신에, 압축 BTB(312) 내의 모든 엔트리는 공유되지 않는 것으로 가정된다. 공유 분기에 대한 엔트리는 미압축 BTB(310) 내에 저장된다.
상기 압축은 단지 예일 뿐이다. 본 명세서에서 설명된 기술의 다른 구현은 다른 속성을 압축할 수 있고 및/또는 전술한 속성을 다른 방식으로 압축할 수 있다.
압축BTB(312)에 데이터를 기록하기 위해, 속성 비트를 압축하거나 제거하는 로직이 분기 예측 유닛(206) 내에 포함된다. 마찬가지로, 압축 BTB(312)로부터 데이터를 판독하기 위해, 속성 비트를 복원하거나 압축 해제하는 로직이 분기 예측 유닛(206) 내에 포함된다.
태그가 캐시 라인 어드레스인 것으로 설명되지만, 이것은 단지 태그의 포맷 중 하나일 뿐이다. 태그는 캐시 라인 어드레스의 일부만을 포함할 수 있거나, 또는 데이터가 BTB 내에 저장되는 예측 분기의 캐시 라인 어드레스와 관련되거나 관련되지 않은 일부 다른 값일 수도 있다.
도 5는 일 실시예에 따라, 압축 및 미압축 분기 타깃 버퍼를 사용하여 분기 타깃 예측 데이터를 획득하기 위한 방법(500)의 흐름도이다. 도 1 내지 도 4에 대하여 나타내고 설명된 시스템에 관하여 설명되었지만, 임의의 기술적으로 실현 가능한 순서로 방법을 수행하도록 구성된 임의의 시스템이 본 개시의 범위 내에 속한다는 것이 이해되어야 한다.
나타낸 바와 같이, 방법(500)은 단계 502에서 시작하며, 여기서 예측기(306)는 룩업을 위해 다음 어드레스를 식별한다. 이 다음 어드레스는 분기 예측을 검사하기 위해 다음 캐시 라인의 캐시 라인 어드레스를 포함한다. 예측기(306)는 이전의 분기 예측 동작에 기초하여 이 캐시 라인 어드레스를 식별한다. 예를 들어, 예측기(306)가 이전에 분기가 수행된 것으로 예측하여 해당 분기에 대한 예측 타깃 어드레스를 획득한 경우, 예측기(306)는 분기 타깃의 캐시 라인에 대응하는 캐시 라인을 제공한다. 예측기(306)가 이전에 어떠한 분기도 수행되지 않은 것으로 예측한 경우에는, 예측기(306)는 예측을 위해 검사될 다음의 순차 캐시 라인의 어드레스를 제공한다. 압축 BTB(312) 및 미압축 BTB(310)에서 단일 캐시 라인에 대한 다수의 히트가 존재하기 때문에 현재의 캐시 라인이 여전히 예측을 위해 검사되고 있는 경우에는, 예측기(306)는 현재의 캐시 라인의 어드레스를 제공한다.
단계 504에서, 미압축 BTB(310) 및 압축 BTB(312)는 예측기(306)로부터 캐시 라인 어드레스를 수신한다. 캐시 라인 어드레스는 압축 BTB(312) 및 미압축 BTB(310) 내의 엔트리를 룩업하기 위한 태그로서 기능한다. 단계 506에서, 미압축 BTB(310) 및 압축 BTB(312)는 태그와 매칭하는 엔트리를 식별하고 추가 처리를 위해 엔트리를 예측기(306)에 제공한다. 전술한 바와 같이, 미압축 BTB(310) 및 압축 BTB(312)는 미압축 BTB(310) 및 압축BTB(312)에 의해 함께 구성된 n 방향 어소시에이티브 캐시의 상이한 방향에 대응한다. 따라서, 태그는 동일한 사이클에서 미압축 BTB(310) 및 압축 BTB(312) 모두에 병렬로 제공될 수 있다. 히트가 발생하지 않은 경우에는, 미압축 BTB(310)도 압축 BTB(312)도 모두 룩업되는 캐시 라인에 대한 예측된 매치를 나타내지 않는다. 단일 히트가 압축 BTB(312) 또는 미압축 BTB(310)에서 발생하는 경우에는, 히트가 발생하는 BTB는 예측을 위해 예측 분기 데이터를 예측기(306)에 제공한다. 다수의 히트가 발생하는 경우에는, 압축 BTB(312) 또는 미압축 BTB(310)는 예측을 위해 단일 엔트리로부터의 데이터를 예측기(306)에 제공한다. 단계(508)에 관하여 후술되는 바와 같이, 이 상황에서, 압축 BTB(312) 및 미압축 BTB(310)는 해당 캐시 라인에 대한 분기 예측 데이터가 여전히 존재하기 때문에 다음 사이클에서 동일한 캐시 라인 어드레스로 다른 룩업을 수행한다. 일 실시예에서, 압축 BTB(312) 및 미압축 BTB(310)는, 예측 데이터가 예측기(306)에 아직 제공되지 않은 현재의 캐시 라인에서 "가장 이른(earliest)"(즉, 최하위 PC) 엔트리에 대응하는 엔트리를 선택한다.
단계 508에서, 압축 BTB(312) 및 미압축 BTB(310)는 동일한 캐시 라인 어드레스에 대응하는 추가 엔트리가 있는지의 여부를 결정한다. 이러한 추가 엔트리가 있는 경우에는, 방법(500)은 단계 504로 복귀하고, 여기서 동일한 태그가 동일한 캐시 라인 어드레스에 대한 추가 엔트리를 룩업하기 위해 다시 제공된다. 이러한 추가 엔트리가 없는 경우에는, 방법(500)은 단계 502로 복귀하고, 여기서 예측기(306)는 예측을 위해 다른 캐시 라인 어드레스를 획득한다.
BTB에 대한 태그 룩업으로서 캐시 라인 어드레스를 제공하는 것은 단지 일례일 뿐이며, 다른 태그 유형이 사용될 수도 있다. 예를 들어, 태그는 대안적으로 캐시 라인 어드레스의 일부만, 캐시 라인 어드레스 또는 그 일부로부터 도출된 일부 값을 포함할 수도 있거나, 또는 데이터가 BTB 내에 저장되는 예측 분기의 캐시 라인 어드레스에 관련되거나 관련되지 않은 일부 다른 값일 수 있다.
도 6은 일 실시예에 따라, 미압축 BTB(310) 및 압축 BTB(312)를 갱신하기 위한 방법(600)의 흐름도이다. 도 1 내지 도 4에 나타내고 설명된 시스템에 관하여 설명되었지만, 임의의 기술적으로 실현 가능한 순서로 방법을 수행하도록 구성된 임의의 시스템이 본 개시의 범위 내에 속한다는 것이 이해되어야 한다.
나타낸 바와 같이, 방법(600)은 단계602에서 시작하고, 여기서 분기 예측 유닛(206)은 압축된 미압축 BTB(310), 압축 BTB(312), 또는 양쪽 모두에 대한 수정이 수행되어야 할 것인지를 결정한다. 분기 예측 유닛(206)은 분기 오예측이 발생했음을 검출할 때에 이러한 결정을 행한다. 분기 오예측은 부정확한 방향(예를 들어, 수행 여부(taken/not-taken)의 결정이 부정확하게 예측됨), 부정확한 타깃(BTB 내에 저장된 타깃 어드레스가 잘못됨), 예측된 분기의 부정확한 유형(예측된 분기 유형이 잘못됨), 또는 분기없음(not-a-branch)(대신하여 분기가 없는 것으로 판명된 분기로서 예측된 명령어)일 수 있다. 명령어 실행 파이프라인(200)은, 분기 명령어를 실행하고 실행된 분기 명령어의 결과를 이전에 발생한 분기 예측과 비교함으로써 분기 오예측을 검출한다. 예측과 실행 간의 차이는 분기 오예측이 발생했음을 의미한다. 명령어 실행 파이프라인(200)은 오예측에 관한 정보를 분기 예측 유닛(206)에 제공하여 장래의 분기 예측에 대한 보다 양호한 정확성을 위해 그 내부 상태를 보정한다.
단계 604에서, 압축 BTB(312), 미압축 BTB(310), 또는 양쪽 모두가 수정되어야 한다는 표시를 수신하는 것에 응답하여, 분기 예측 유닛(206)은 수정되어야 하는 하나 이상의 엔트리를 식별한다. 수정은 특정 분기 명령어에 대한 데이터의 삭제, 분기 명령어에 대한 데이터의 수정, 또는 분기 명령어에 대한 데이터의 추가를 포함할 수 있다. 추가의 경우, 분기 예측 유닛(206)은, 캐시 라인 어드레스, 다른 분기 예측 데이터가 이미 동일한 캐시 라인에 대해 존재하는지의 여부, 및 분기 예측 데이터가 압축될 수 있는지의 여부에 기초하여 압축 BTB(312) 또는 미압축 BTB(310) 내의 엔트리를 식별한다. 삭제 및 수정의 경우, 분기 예측 유닛(206)은, 문제가 있는 분기의 캐시 라인 어드레스와 매칭하는 태그를 갖는 엔트리 및 문제가 되는 분기의 해당 캐시 라인 내의 오프셋을 식별한다.
분기 데이터의 삭제의 경우, 분기 예측 유닛(206)은 분기 명령어의 어드레스에 기초하여 이미 존재하는 BTB 엔트리를 무효화 또는 수정될 엔트리로서 식별한다.
분기 데이터의 수정의 경우, 분기 예측 유닛(206)은 분기 명령어의 어드레스에 기초하여 이미 존재하는 엔트리를 식별하고, 또한 엔트리를 더 이상 압축할 수 없게 하는 수정 등의 이유로, 또는 다른 이유로 수정된 엔트리가 압축 BTB(312)와 미압축 BTB(310) 사이에서 이동되어야 하는지의 여부에 따라 다른 엔트리를 식별할 수 있다.
단계 606에서, 분기 예측 유닛(206)은 요구된 수정을 수용하도록 하나 이상의 식별된 엔트리를 수정한다. 수정이 압축 BTB(312) 또는 미압축 BTB(310)로부터 분기에 대한 데이터를 삭제할 것을 필요로 하는 경우에는, 분기 예측 유닛(206)은 전체 BTB 엔트리를 삭제한다.
수정이 특정 엔트리 내에 저장된 특정 분기에 대한 데이터를 변화시킬 것을 필요로 하는 경우에는, 분기 예측 유닛(206)은 변경된 엔트리가 압축될 수 있는지의 변화로 인해 변경된 엔트리가 압축 BTB(312)로부터 미압축 BTB(310)로 이동되어야 하는지의 여부를 결정한다. 예를 들어, 수정되었을 때, 압축되는 엔트리가 더 이상 압축될 수 없는 경우에는, 분기 예측 유닛(206)은 엔트리를 압축 BTB(312)로부터 미압축 BTB(310)로 이동시킨다. 이러한 변화가 이루어지지 않은 경우에는, 분기 예측 유닛(206)은 단순히 엔트리 내의 데이터를 규정된 대로 변경한다. 이러한 변화가 이루어지는 경우에는, 분기 예측 유닛(206)은 대응하는 데이터를 이동시켜서, 원래의 엔트리를 무효화하고 새로운 엔트리를 목적지에 기록한다.
변형이 압축 BTB(312) 또는 미압축 BTB(310) 내에 이전에 저장되지 않은 분기에 대한 데이터를 추가할 것을 필요로 하는 경우에는, 분기 예측 유닛(206)은 분기에 대한 데이터가 이중 분기 BTB 엔트리(404) 내의 다른 분기에 대한 데이터와 함께 저장될 수 있는지의 여부를 결정한다. 추가될 분기에 대한 데이터가 다른 분기에 대한 데이터와 함께 저장될 수 있고 해당의 다른 분기가 압축 BTB(312) 내에 저장되는 경우에는, 분기 예측 유닛(206)은 다른 분기에 대한 단일 분기 BTB 엔트리(402)를 무효화하고, 양쪽 분기에 대한 데이터를 저장하는 새로운 이중 분기 BTB 엔트리(404)를 생성한다. 분기가 캐시 라인 어드레스를 공유하고 어느 분기도 대형 타깃 BTB 엔트리(406)를 필요로 하지 않는 경우에는 2개의 분기에 대한 데이터가 함께 저장될 수 있다.
추가될 분기에 대한 데이터가 다른 분기에 대한 데이터와 함께 저장될 수 없지만 압축될 수 있는 경우에는, 분기 예측 유닛(206)은 압축 BTB(312) 내에 새로운 단일 분기 BTB 엔트리(402)를 생성하고 새로운 분기에 대한 데이터를 해당 엔트리 내에 저장한다. 추가될 분기에 대한 데이터가 다른 분기에 대한 데이터와 함께 저장될 수 없고 압축될 수 없는 경우에는, 분기 예측 유닛(206)은 미압축 BTB(310) 내에 새로운 엔트리를 생성하고 새로운 분기에 대한 데이터를 해당의 새로운 엔트리 내에 저장한다. 데이터에 대한 속성이 도 3 및 도 4에 관하여 전술한 바와 같이 분기에 대한 "공통 케이스"와 매칭하는 경우 및 데이터가 대형 타깃 BTB 엔트리(406)를 필요로 하지 않는 경우에는 데이터가 압축될 수 있다.
본 명세서에서 설명된 기술은 컴퓨터 프로세서에서의 분기 예측 동작을 개선한다. 보다 구체적으로, 병렬로 검색될 수 있는 압축 및 미압축 BTB를 제공함으로써, 사용되지 않은 분기 데이터 공간과 관련된 공간의 많은 낭비없이 사이클당 2개 이하의 분기에 대한 예측 데이터가 획득될 수 있다.
본 명세서의 개시에 기초하여 많은 변형이 가능하다는 것이 이해되어야 한다. 특징 및 요소가 특정 조합으로 전술되었지만, 각 특징 또는 요소는 다른 특징 및 요소없이 단독으로 또는 다른 특징 및 요소의 유무에 따라 다양한 조합으로 사용될 수 있다.
제공된 방법은 범용 컴퓨터, 프로세서 또는 프로세서 코어로 구현될 수 있다. 적합한 프로세서는, 예로서, 범용 프로세서, 특수 목적용 프로세서, 종래의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어와 관련된 하나 이상의 마이크로프로세서, 제어기, 주문형 집적 회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA) 회로, 임의의 다른 유형의 집적 회로(IC), 및/또는 상태 머신을 포함한다. 이러한 프로세서는 처리된 하드웨어 기술 언어(HDL) 명령어 및 넷리스트(컴퓨터 판독가능 매체 상에 저장될 수 있는 이러한 명령어)를 포함하는 다른 중간 데이터의 결과를 사용하여 제조 공정을 구성함으로써 제조될 수 있다. 이러한 처리의 결과는 실시형태의 양태를 구현하는 프로세서를 제조하기 위해 반도체 제조 공정에서 그 때 사용되는 마스크워크(maskwork)일 수 있다.
본 명세서에서 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독가능 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어, 또는 펌웨어로 구현될 수 있다. 비일시적 컴퓨터 판독가능 저장 매체의 예는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 장치, 내부 하드 디스크 및 착탈식 디스크와 같은 자기 매체, 광자기 매체, 및 CD-ROM 디스크 및 DVD(digital versatile disk)와 같은 광학 매체를 포함한다.

Claims (20)

  1. 분기 타깃 버퍼 데이터를 조작하기 위한 방법으로서,
    압축 분기 타깃 버퍼 및 미압축 분기 타깃 버퍼에 룩업 태그(lookup tag)를 제공하는 단계로서, 상기 미압축 분기 타깃 버퍼가 하나 초과의 분기에 대한 데이터를 포함하는 엔트리를 저장하도록 구성되고, 상기 압축 분기 타깃 버퍼는 단 하나의 분기에 대한 데이터를 각각 포함하는 엔트리를 저장하도록 구성되는, 상기 제공하는 단계;
    상기 룩업 태그에 기초하여 상기 압축 분기 타깃 버퍼 및 상기 미압축 분기 타깃 버퍼 중 하나 또는 둘 다부터 분기 타깃 버퍼 엔트리를 식별하는 단계; 및
    상기 분기 타깃 버퍼 엔트리에 대응하는 데이터를 분기를 예측하기 위한 분기 예측 로직에 출력하는 단계;를 포함하는, 분기 타깃 버퍼 데이터를 조작하기 위한 방법.
  2. 제1항에 있어서,
    상기 룩업 태그는 분기 예측을 위해 검사된 캐시 라인에 대한 캐시 라인 어드레스에 관련된 값을 포함하고;
    상기 미압축 분기 타깃 버퍼는 동일한 캐시 라인 어드레스를 공유하는 분기에 대한 엔트리를 저장하도록 구성되는, 방법.
  3. 제1항에 있어서,
    상기 압축 분기 타깃 버퍼는 하나 이상의 속성이 압축되는 엔트리를 저장하도록 구성되고;
    상기 미압축 분기 타깃 버퍼는 어떠한 속성도 압축되지 않은 엔트리를 저장하도록 구성되는, 방법.
  4. 제1항에 있어서,
    상기 미압축 분기 타깃 버퍼의 엔트리는 제1 속성 필드에 대한 제1 속성 값을 포함하고;
    상기 압축 분기 타깃 버퍼의 엔트리는 상기 제1 속성 필드에 대한 속성 값을 포함하지 않으며,
    상기 압축 분기 타깃 버퍼의 모든 엔트리는 상기 제1 속성 필드에 대해 동일한 값을 갖는, 방법.
  5. 제1항에 있어서,
    상기 미압축 분기 타깃 버퍼의 엔트리에 대한 제1 속성 필드는, 엔트리가 캐시 라인에서 최종 예측된 분기인 분기에 대한 데이터를 포함하는지의 여부를 나타내는 라스트-인-캐시 라인 필드(last-in-cache line field)를 포함하고;
    상기 압축 분기 타깃 버퍼의 상기 엔트리는 모두 캐시 라인에서 최종 예측된 분기이지만 상기 라스트-인-캐시 라인 필드를 포함하지 않는 분기에 대한 데이터를 저장하도록 구성되는, 방법.
  6. 제1항에 있어서, 상기 분기 타깃 버퍼 엔트리를 식별하는 단계는,
    상기 압축 분기 타깃 버퍼 또는 상기 미압축 분기 타깃 버퍼 내의 상기 하나 초과의 분기 타깃 버퍼 엔트리가 상기 룩업 태그를 갖는 태그를 공유하는 것을 검출하는 단계를 포함하고,
    상기 방법은 출력을 위해 상기 하나 초과의 분기 타깃 버퍼 엔트리 중 하나를 선택하는 단계를 더 포함하는, 방법.
  7. 제6항에 있어서,
    상기 하나 이상의 분기 타깃 버퍼 엔트리 중 하나가 선택되는 제1 사이클에 후속하는 처리 사이클에서, 출력을 위해 상기 하나 초과의 분기 타깃 버퍼 엔트리 중 제2 분기 타깃 버퍼 엔트리를 선택하는 단계를 더 포함하는, 방법.
  8. 분기 예측 유닛으로서,
    단 하나의 분기에 대한 데이터를 각각 포함하는 엔트리를 저장하도록 구성된 압축 분기 타깃 버퍼; 및
    하나 초과의 분기에 대한 데이터를 포함하는 엔트리를 저장하도록 구성된 미압축 분기 타깃 버퍼;를 포함하고,
    상기 압축 분기 타깃 버퍼 및 상기 미압축 분기 타깃 버퍼 모두는,
    제공된 룩업 태그에 기초하여 하나 이상의 분기 타깃 버퍼 엔트리를 식별하는 것, 및
    상기 식별된 하나 이상의 분기 타깃 버퍼 엔트리에 대응하는 데이터를 분기를 예측하기 위한 예측 로직에 출력하는 것을 수행하도록 구성되는, 분기 예측 유닛.
  9. 제8항에 있어서,
    상기 룩업 태그는 분기 예측을 위해 검사된 캐시 라인에 대한 캐시 라인 어드레스에 관련된 값을 포함하고;
    상기 미압축 분기 타깃 버퍼는 동일한 캐시 라인 어드레스를 공유하는 분기에 대한 엔트리를 저장하도록 구성되는, 분기 예측 유닛.
  10. 제8항에 있어서,
    상기 압축 분기 타깃 버퍼는 하나 이상의 속성이 압축되는 엔트리를 저장하도록 구성되고;
    상기 미압축 분기 타깃 버퍼는 어떠한 속성도 압축되지 않은 엔트리를 저장하도록 구성되는, 분기 예측 유닛.
  11. 제8항에 있어서,
    상기 미압축 분기 타깃 버퍼의 엔트리는 제1 속성 필드에 대한 제1 속성 값을 포함하고;
    상기 압축 분기 타깃 버퍼의 엔트리는 상기 제1 속성 필드에 대한 속성 값을 포함하지 않으며,
    상기 압축 분기 타깃 버퍼의 모든 엔트리는 상기 제1 속성 필드에 대해 동일한 값을 갖는, 분기 예측 유닛.
  12. 제8항에 있어서,
    상기 미압축 분기 타깃 버퍼의 엔트리에 대한 제1 속성 필드는, 엔트리가 캐시 라인에서 최종 예측된 분기인 분기에 대한 데이터를 포함하는지 여부를 나타내는 라스트-인-캐시 라인 필드를 포함하고;
    상기 압축 분기 타깃 버퍼의 상기 엔트리는 모두 캐시 라인에서 최종 예측된 분기이지만 상기 라스트-인-캐시 라인 필드를 포함하지 않는 분기에 대한 데이터를 저장하도록 구성되는, 분기 예측 유닛.
  13. 제8항에 있어서,
    상기 압축 분기 타깃 버퍼 및 상기 미압축 분기 타깃 버퍼는, 상기 압축 분기 타깃 버퍼 또는 상기 미압축 분기 타깃 버퍼 내의 하나 초과의 분기 타깃 버퍼 엔트리가 상기 룩업 태그를 갖는 태그를 공유하는 것을 검출함으로써 하나 이상의 분기 타깃 버퍼 엔트리를 식별하도록 구성되고;
    상기 압축 분기 타깃 버퍼 및 상기 미압축 분기 타깃 버퍼는 출력을 위해 상기 하나 초과의 분기 타깃 버퍼 엔트리 중 하나를 선택하도록 구성되는, 분기 예측 유닛.
  14. 제13항에 있어서, 상기 압축 분기 타깃 버퍼 및 상기 미압축 분기 타깃 버퍼는 또한,
    상기 하나 이상의 분기 타깃 버퍼 엔트리 중 하나가 선택되는 제1 사이클에 후속하는 처리 사이클에서, 출력을 위해 상기 하나 초과의 분기 타깃 버퍼 엔트리 중 제2 분기 타깃 버퍼 엔트리를 선택하도록 구성되는, 분기 예측 유닛.
  15. 프로세서로서,
    분기 예측 결과를 출력하도록 구성된 분기 예측 유닛;
    상기 분기 예측 결과에 기초하여 실행을 위한 명령어를 출력하도록 구성된 명령어 페치 유닛; 및
    상기 명령어 페치 유닛으로부터 출력된 상기 명령어를 실행하도록 구성된 명령어 실행 파이프라인;을 포함하고,
    상기 분기 예측 유닛은,
    단 하나의 분기에 대한 데이터를 각각 포함하는 엔트리를 저장하도록 구성된 압축 분기 타깃 버퍼; 및
    하나 초과의 분기에 대한 데이터를 포함하는 엔트리를 저장하도록 구성된 미압축 분기 타깃 버퍼를 포함하고,
    상기 압축 분기 타깃 버퍼 및 상기 미압축 분기 타깃 버퍼 모두는,
    제공된 룩업 태그에 기초하여 하나 이상의 분기 타깃 버퍼 엔트리를 식별하는 것, 및
    상기 식별된 하나 이상의 분기 타깃 버퍼 엔트리에 대응하는 데이터를 분기를 예측하기 위한 예측 로직에 출력하는 것을 수행하도록 구성되는, 프로세서.
  16. 제15항에 있어서,
    상기 룩업 태그는 분기 예측을 위해 검사된 캐시 라인에 대한 캐시 라인 어드레스에 관련된 값을 포함하고;
    상기 미압축 분기 타깃 버퍼는 동일한 캐시 라인 어드레스를 공유하는 분기에 대한 엔트리를 저장하도록 구성되는, 프로세서.
  17. 제15항에 있어서,
    상기 압축 분기 타깃 버퍼는 하나 이상의 속성이 압축되는 엔트리를 저장하도록 구성되고;
    상기 미압축 분기 타깃 버퍼는 어떠한 속성도 압축되지 않은 엔트리를 저장하도록 구성되는, 프로세서.
  18. 제15항에 있어서,
    상기 미압축 분기 타깃 버퍼의 엔트리는 제1 속성 필드에 대한 제1 속성 값을 포함하고;
    상기 압축 분기 타깃 버퍼의 엔트리는 상기 제1 속성 필드에 대한 속성 값을 포함하지 않으며,
    상기 압축 분기 타깃 버퍼의 모든 엔트리는 상기 제1 속성 필드에 대해 동일한 값을 갖는, 프로세서.
  19. 제15항에 있어서,
    상기 미압축 분기 타깃 버퍼의 엔트리에 대한 제1 속성 필드는, 엔트리가 캐시 라인에서 최종 예측된 분기인 분기에 대한 데이터를 포함하는지의 여부를 나타내는 라스트-인-캐시 라인 필드를 포함하고;
    상기 압축 분기 타깃 버퍼의 상기 엔트리는 모두 캐시 라인에서 최종 예측된 분기이지만 상기 라스트-인-캐시 라인 필드를 포함하지 않는 분기에 대한 데이터를 저장하도록 구성되는, 프로세서.
  20. 제15항에 있어서,
    상기 압축 분기 타깃 버퍼 및 상기 미압축 분기 타깃 버퍼는, 상기 압축 분기 타깃 버퍼 또는 상기 미압축 분기 타깃 버퍼 내의 하나 초과의 분기 타깃 버퍼 엔트리가 상기 룩업 태그를 갖는 태그를 공유하는 것을 검출함으로써 하나 이상의 분기 타깃 버퍼 엔트리를 식별하도록 구성되고;
    상기 압축 분기 타깃 버퍼 및 상기 미압축 분기 타깃 버퍼는 출력을 위해 상기 하나 초과의 분기 타깃 버퍼 엔트리 중 하나를 선택하도록 구성되는, 프로세서.
KR1020197007765A 2016-08-30 2016-09-13 분기 타깃 버퍼 압축 KR20190039290A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/252,164 US10592248B2 (en) 2016-08-30 2016-08-30 Branch target buffer compression
US15/252,164 2016-08-30
PCT/US2016/051527 WO2018044333A1 (en) 2016-08-30 2016-09-13 Branch target buffer compression

Publications (1)

Publication Number Publication Date
KR20190039290A true KR20190039290A (ko) 2019-04-10

Family

ID=61242686

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197007765A KR20190039290A (ko) 2016-08-30 2016-09-13 분기 타깃 버퍼 압축

Country Status (6)

Country Link
US (1) US10592248B2 (ko)
EP (1) EP3507688B1 (ko)
JP (1) JP6796717B2 (ko)
KR (1) KR20190039290A (ko)
CN (1) CN109643237B (ko)
WO (1) WO2018044333A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7010683B2 (ja) * 2017-12-08 2022-01-26 キオクシア株式会社 データ処理装置、メモリシステム及びデータ処理方法
US10732979B2 (en) * 2018-06-18 2020-08-04 Advanced Micro Devices, Inc. Selectively performing ahead branch prediction based on types of branch instructions
US11238155B2 (en) * 2018-06-28 2022-02-01 Intel Corporation Microarchitectural mechanisms for the prevention of side-channel attacks
US10713054B2 (en) * 2018-07-09 2020-07-14 Advanced Micro Devices, Inc. Multiple-table branch target buffer
WO2021108007A1 (en) * 2020-05-30 2021-06-03 Futurewei Technologies, Inc. Apparatus and method for dual branch prediction
US20220197662A1 (en) * 2020-12-22 2022-06-23 Niranjan Kumar Soundararajan Accessing A Branch Target Buffer Based On Branch Instruction Information
US12014182B2 (en) 2021-08-20 2024-06-18 International Business Machines Corporation Variable formatting of branch target buffer
US11915002B2 (en) * 2022-06-24 2024-02-27 Microsoft Technology Licensing, Llc Providing extended branch target buffer (BTB) entries for storing trunk branch metadata and leaf branch metadata

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574871A (en) 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
US5794028A (en) * 1996-10-17 1998-08-11 Advanced Micro Devices, Inc. Shared branch prediction structure
JPH10133874A (ja) 1996-11-01 1998-05-22 Mitsubishi Electric Corp スーパスカラプロセッサ用分岐予測機構
US5805878A (en) 1997-01-31 1998-09-08 Intel Corporation Method and apparatus for generating branch predictions for multiple branch instructions indexed by a single instruction pointer
US6427192B1 (en) 1998-09-21 2002-07-30 Advanced Micro Devices, Inc. Method and apparatus for caching victimized branch predictions
US20020194462A1 (en) * 2001-05-04 2002-12-19 Ip First Llc Apparatus and method for selecting one of multiple target addresses stored in a speculative branch target address cache per instruction cache line
US7234045B2 (en) * 2001-07-03 2007-06-19 Ip-First, Llc Apparatus and method for handling BTAC branches that wrap across instruction cache lines
US7203824B2 (en) * 2001-07-03 2007-04-10 Ip-First, Llc Apparatus and method for handling BTAC branches that wrap across instruction cache lines
US7152154B2 (en) * 2003-01-16 2006-12-19 Ip-First, Llc. Apparatus and method for invalidation of redundant branch target address cache entries
US7124287B2 (en) * 2003-05-12 2006-10-17 International Business Machines Corporation Dynamically adaptive associativity of a branch target buffer (BTB)
US7752426B2 (en) * 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
US20060218385A1 (en) * 2005-03-23 2006-09-28 Smith Rodney W Branch target address cache storing two or more branch target addresses per index
US7707396B2 (en) * 2006-11-17 2010-04-27 International Business Machines Corporation Data processing system, processor and method of data processing having improved branch target address cache
JP5145809B2 (ja) * 2007-07-31 2013-02-20 日本電気株式会社 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム
US7873819B2 (en) * 2008-01-03 2011-01-18 Freescale Semiconductor, Inc. Branch target buffer addressing in a data processor
US8458447B2 (en) * 2011-06-17 2013-06-04 Freescale Semiconductor, Inc. Branch target buffer addressing in a data processor
JP2013214832A (ja) * 2012-03-30 2013-10-17 Fujitsu Ltd 圧縮及び伸長システム、圧縮装置、伸長装置、圧縮及び伸長方法、圧縮プログラム及び伸長プログラム
US9235419B2 (en) 2012-06-11 2016-01-12 International Business Machines Corporation Branch target buffer preload table
US9372696B2 (en) * 2013-10-18 2016-06-21 Via Technologies, Inc. Microprocessor with compressed and uncompressed microcode memories
US9996358B2 (en) * 2015-09-30 2018-06-12 Ecole Polytechnique Federale De Lausanne Unified prefetching into instruction cache and branch target buffer
CN105867880B (zh) * 2016-04-01 2018-12-04 中国科学院计算技术研究所 一种面向间接跳转分支预测的分支目标缓冲器及设计方法

Also Published As

Publication number Publication date
CN109643237A (zh) 2019-04-16
EP3507688A1 (en) 2019-07-10
WO2018044333A1 (en) 2018-03-08
EP3507688A4 (en) 2020-04-22
US10592248B2 (en) 2020-03-17
US20180060073A1 (en) 2018-03-01
JP2019526873A (ja) 2019-09-19
EP3507688B1 (en) 2021-07-14
CN109643237B (zh) 2023-11-03
JP6796717B2 (ja) 2020-12-09

Similar Documents

Publication Publication Date Title
CN109643237B (zh) 分支目标缓冲器压缩
CN110069285B (zh) 一种检测分支预测的方法及处理器
KR20190049743A (ko) 메모리 위반 예측
US8943300B2 (en) Method and apparatus for generating return address predictions for implicit and explicit subroutine calls using predecode information
US20070038846A1 (en) Partial load/store forward prediction
JP2003005956A (ja) 分岐予測装置、プロセッサ、及び分岐予測方法
US10353710B2 (en) Techniques for predicting a target address of an indirect branch instruction
US11620224B2 (en) Instruction cache prefetch throttle
JP2009536770A (ja) ブロックに基づく分岐先アドレスキャッシュ
US11579884B2 (en) Instruction address translation and caching for primary and alternate branch prediction paths
US20120311308A1 (en) Branch Predictor with Jump Ahead Logic to Jump Over Portions of Program Code Lacking Branches
GB2577051A (en) Branch prediction circuitry
US11249762B2 (en) Apparatus and method for handling incorrect branch direction predictions
US20140250289A1 (en) Branch Target Buffer With Efficient Return Prediction Capability
US11875155B2 (en) Processing device with a microbranch target buffer for branch prediction using loop iteration count
US10620962B2 (en) Appratus and method for using predicted result values
US20200310811A1 (en) Apparatus and method for making predictions for instruction flow changing instructions
US7571305B2 (en) Reusing a buffer memory as a microcache for program instructions of a detected program loop
US11526359B2 (en) Caching override indicators for statistically biased branches to selectively override a global branch predictor
US20220113976A1 (en) Restoring speculative history used for making speculative predictions for instructions processed in a processor employing control independence techniques
US20230195468A1 (en) Predicting upcoming control flow
US11663126B1 (en) Return address table branch predictor
US20190294443A1 (en) Providing early pipeline optimization of conditional instructions in processor-based systems
JP4113227B2 (ja) 分岐予測機構を有する情報処理装置

Legal Events

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