KR20170001602A - 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법 - Google Patents

마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법 Download PDF

Info

Publication number
KR20170001602A
KR20170001602A KR1020160075908A KR20160075908A KR20170001602A KR 20170001602 A KR20170001602 A KR 20170001602A KR 1020160075908 A KR1020160075908 A KR 1020160075908A KR 20160075908 A KR20160075908 A KR 20160075908A KR 20170001602 A KR20170001602 A KR 20170001602A
Authority
KR
South Korea
Prior art keywords
btb
branch
graph
micro
cam
Prior art date
Application number
KR1020160075908A
Other languages
English (en)
Other versions
KR102635965B1 (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
Priority claimed from US15/047,617 external-priority patent/US10402200B2/en
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20170001602A publication Critical patent/KR20170001602A/ko
Application granted granted Critical
Publication of KR102635965B1 publication Critical patent/KR102635965B1/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/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • 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/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

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

Abstract

실시예들은 마이크로 BTB를 포함한다. 마이크로 BTB는 테이큰 또는 낫 테이큰 예측에 제로 버블을 삽입하는 것과 함께, 싸이클 당, 매 싸이클마다 두 개의 분기들까지 예측할 수 있고, 그럼으로써, 마이크로프로세서의 성능을 크게 향상시키고 전력 소비를 감소시킬 수 있다. 마이크로프로세서의 프론트 엔드는 메인 BTB, 예측 정보를 생성하는 마이크로 BTB 및 디커플링 큐를 갖는 메인 프론트 엔드 로직 섹션을 포함할 수 있다. 마이크로 BTB는 복수의 엔트리들을 갖는 그래프 및 복수의 아이템들을 갖는 CAM을 포함할 수 있다. 그래프의 엔트리들 각각은 테이큰 방향의 다음 분기에 대한 링크 포인터, 및 낫 테이큰 방향의 다음 분기에 대한 링크 포인터를 포함할 수 있다. 마이크로 BTB는 새로운 시드로서 그래프 안에 핫한 분기를 삽입할 수 있다.

Description

마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법{FRONT END OF MICROPROCESSOR AND COMPUTER-IMPLEMENTED METHOD USING THE SAME}
본 발명은 일반적으로 디지털 회로들에 관한 것으로, 특히, 마이크로 분기 타겟 버퍼(micro branch target buffer, uBTB)를 이용하여 분기 예측을 하기 위한 것이다.
중앙 처리 장치(Central processing unit, CPU)들은 일반적으로 성능을 향상시키기 위해 파이프라인(pipeline) 처리의 초기 단계에서 분기 명령들(branch instructions)의 타겟 및 방향을 예측한다. 분기 명령의 타입(type), 로케이션(location) 및 타겟(target)에 대한 정보는 일반적으로 분기 타겟 버퍼(branch target buffer, 이하 BTB)에 캐시(cache)된다. BTB는 명령 페치 어드레스(instruction fetch address)를 사용하여 엑세스되고, BTB가 현재 페치 창에 맵핑하는 분기를 포함하고 있는지 검출하기 위해 내용 주소화 기억 장치(content addressable memory, 이하 CAM)를 사용한다. 또한, BTB는 BTB가 현재 페치 창에 맵핑하는 분기를 포함하고 있는지 검출하기 위해 세트 연상형 구조(set associative structure)를 사용할 수 있다. 종래의 BTB는 일반적으로 큰 구조이고, 분기 방향 예측자(branch direction predictor)와 결합할 경우에는, 그 결과로 예측된 테이큰 분기(predicted-taken branch)에 대해 적어도 하나의 싸이클 페널티(cycle penalty)(예를 들어, 버블(bubble))를 야기한다. 몇몇의 케이스들에서, 종래의 BTB는 예측된 낫 테이큰 분기(predicted not-taken branch)에서 조차도 페널티가 발생될 수 있다.
루프 버퍼(loop buffer) 또는 예측된 테이큰 분기 버블을 숨기기 위한 유사한 구조를 사용하여 페널티를 다루기 위한 몇몇 시도들이 이루어졌으나, 이러한 접근들은 제약들을 가진다. 루프 버퍼들은 분기 명령들뿐만 아니라 루푸 안의 모든 명령들이 루프 버퍼에 부합해야 할 것을 요구한다. 조건 분기 예측자를 포함하지 않는 작고 단순한 BTB들은 동적인 결과들을 가지는 분기들을 정확하게 예측할 수 없고, 성능과 에너지를 낭비하는 결과를 초래할 수 있다. 또한, 링크(link)들을 이용하지 않는 작고 단순한 BTB들은 CAM 작업들에서 에너지를 낭비할 수 있다.
본 발명은 마이크로 분기 타겟 버퍼를 이용하여 분기 예측을 하기 위한 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법에 관한 것이다.
실시예들은 메인 분기 타겟 버퍼를 포함하는 메인 프론드 엔드 로직 섹션을 포함하는 마이크로프로세서의 프론트 엔드를 포함할 수 있다. 상기 프론트 엔드는 상기 메인 프론트 엔드 로직 섹션의 상기 메인 BTB와 분리되고, 예측 정보를 생성하는 마이크로 BTB를 포함할 수 있다. 프론트 엔드는 상기 마이크로 BTB 및 상기 메인 프론트 엔드 로직 섹션과 결합되고, 상기 예측 정보를 수신 및 대기(queue)하도록 구성되고, 상기 메인 프론트 엔드 로직 섹션으로 대기하는 상기 예측 정보를 제공하는 디커플링 큐(decoupling queue)를 포함할 수 있다. 마이크로 BTB는 하나 이상의 엔트리들을 포함하는 그래프, 및 하나 이상의 아이템들을 포함하는 내용 주소화 기억 장치(content addressable memory, 이하 CAM)를 포함할 수 있다. 상기 메인 프론트 엔드 로직 섹션은 프로그램을 페치하도록 구성될 수 있다. 상기 마이크로 BTB의 상기 그래프의 상기 하나 이상의 엔트리들 각각은 상기 프로그램의 내부 부분 안에 대응하는 분기를 나타낼 수 있다. 상기 마이크로 BTB의 상기 그래프의 상기 하나 이상의 엔트리들 각각은 테이큰 방향의 제1 다음 분기에 대한 제1 링크 포인터, 및 낫 테이큰 방향의 제2 다음 분기에 대한 제2 링크 포인터를 포함할 수 있다.
실시예들은 마이크로 BTB를 사용하는 마이크로프로세서의 메인 프론트 엔드 로직 섹션에 대한 제로 버블 조건 분기 예측을 수행하기 위한 컴퓨터 구현 방법을 포함할 수 있다. 상기 방법은 상기 마이크로 BTB에 의해 상기 마이크로프로세서의 상기 메인 프론트 엔드 로직 섹션의 메인 BTB에 의해 생성된 예측 정보와 다른 예측 정보를 생성하는 단계를 포함할 수 있다. 상기 방법은 디커플링 큐에 의해 상기 마이크로 BTB로부터 상기 예측 정보를 수신하는 단계를 포함할 수 있다. 상기 방법은 상기 디커플링 큐에 의해 상기 마이크로 BTB로부터 상기 예측 정보를 대기하도록 하는 단계를 포함할 수 있다. 상기 방법은 상기 디커플링 큐에 의해 대기하는 상기 예측 정보를 상기 마이크로프로세서의 상기 메인 프론트 엔드 로직 섹션으로 제공하는 단계를 포함할 수 있다.
본 발명의 실시예에 따르면 분기 예측을 하기 위해 마이크로 분기 타겟 버퍼를 이용함에 따라 마이크로프로세서의 성능을 향상시키고 전력 소비를 감소시킬 수 있다.
앞서 언급된 것 및 이하 추가될 특징들, 및 본 발명 원리들의 장점들은 첨부된 도면을 참조하여 설명되는 다음의 상세한 설명으로부터 더욱 명백해질 것이다.
도 1은 본 발명의 일 실시예에서 따른 마이크로 BTB 및 디커플링 큐(decoupling queue)를 갖는 프론트 엔드(front end)를 포함하는 마이크로 프로세서의 예시적인 블록도이다.
도 2는 도 1의 마이크로프로세서의 프론트 엔드의 예시적인 블록도이다.
도 3은 본 발명의 일 실시예에 따른 도 1의 마이크로 BTB 의 예시적인 블록도이다.
도 4는 본 발명의 일 실시예에 따른 도 1의 마이크로 BTB와 관련된 분기 명령 그래프의 예시적인 도면이다.
도 5는 본 발명의 일 실시예에 따른 도 1의 마이크로 BTB를 위한 하나의 파이프 라인을 포함하는 다른 분기 예측 파이프 라인들의 예시적인 블록도이다.
도 6은 본 발명의 일 실시예에 따른 페치 파이프 라인 프로세션(fetch pipeline procession)의 예시적인 블록도이다.
도 7은 본 발명의 일 실시예에 마이크로 BTB 파이프라인의 예시적인 블록도이다.
도 8은 본 발명의 일 실시예에 따른 하나의 예측자 분류에서 다른 것으로의 상태 천이들의 예시적인 구현을 도시한 상태도이다.
도 9는 본 발명의 일 실시예에 따른 마이크로 BTB를 사용하는 마이크로 프로세서의 메인 프론트 엔드 로직 섹션에 대한 제로 버블 조건 분기예측을 수행하는 기술에 대한 플로우 차트이다.
도 10은 도 1의 마이크로프로세서의 프론트 엔드를 포함하는 컴퓨팅 시스템의 블록도이다.
지금부터 참조되는 것들은 다양한 실시예들을 통해 상세하게 설명되고, 이에 대한 예들은 첨부된 도면들에 도시된다. 이하 상세한 설명에서, 장치 및 방법의 이해를 가능하게 하기 위해 다수의 특정 세부사항들에 대한 설명이 개진된다. 하지만, 당업자들은 특정 세부사항들 없이 실시예를 실시할 수 있음이 이해되어야 한다. 다른 실시예들에서 공지된 방법들, 절차들, 구성 요소들, 회로들 및 네트워크들은 불필요하게 실시예들의 양상들을 이해하기 어렵게 하지 않도록 상세하게 설명되지 않았다.
여기서 다양한 구성들을 설명하는데 사용되는 제1 및 제2 와 같은 용어들은 상기 용어들에 한정되지 않는 것으로 이해될 수 있다. 상기 용어들은 하나의 구성을 다른 하나의 구성과 구분하기 위해 사용되는 것이다. 예를 들어, 다양한 실시예들의 범위를 벗어나지 않으면서, 제1 로직 회로는 제2 로직 회로로 지칭될 수 있으며, 유사하게 제2 로직 회로는 제1 로직 회로로 지칭될 수 있다.
본 명세서에서 사용되는 용어들은 특정 실시예들을 설명하기 위한 것이지, 한정하기 위한 것은 아니다. 실시예들의 설명 및 첨부된 청구항들에 사용되는 단수의 표현은 문맥상 명백하게 표시하지 않는 한 복수 형태도 포함할 수 있다. 여기서 사용되는 용어인 "및/또는"은 관련된 열거 구성들의 하나 이상의 가능한 모든 조합 경우 모두를 지칭하고 포함하는 것으로 이해될 수 있다. "포함"한다는 용어는 본 명세서에서 사용될 때, 명시된 특징들, 정수들, 단계들, 기능들, 요소들, 및/또는 구성 요소들의 존재를 명시한 것으로 이해될 수 있다. 그러나, 하나 이상의 특징들, 정수들, 단계들, 기능들, 요소들, 구성 요소들, 및/또는 그것들의 그룹들의 존재를 배제하는 것은 아니다. 도면들의 구성 요소들 및 특징들은 비율대로 그려진 것은 아니다.
본 발명의 일 실시예들은 마이크로 BTB(micro BTB)를 포함한다. 마이크로 BTB는 테이큰 또는 낫 테이큰 예측에 제로 버블을 삽입하는 것과 함께, 싸이클 당, 매 싸이클마다 두 개의 분기들까지 예측할 수 있고, 그럼으로써, 마이크로프로세서의 성능을 크게 향상시키고 전력 소비를 감소시킬 수 있다.
도 1은 본 발명의 일 실시예에서 따른 마이크로 BTB(110) 및 관련된 디커플링 큐(115)를 갖는 프론트 엔드(105)를 포함하는 마이크로프로세서(100)의 예시적인 블록도이다. 프론트 엔드(105)는 명령 캐쉬(instruction cache), 분기 예측 로직(branch prediction logic), 페치 로직(fetch logic) 등을 포함할 수 있고, 이에 대해서는 이하에서 구체적으로 설명된다. 마이크로 BTB(110) 및 디커플링 큐(115)는 예측 정보(120)를 생성할 수 있다. 예측 정보(120)는 마이크로프로세서(100)의 메인 프론트 엔드 로직 섹션(125)에 의해 수신될 수 있다. 이에 대해서는 이하에서 구체적으로 설명된다. 디커플링 큐(115)는 메인 프론트 엔드 로직 섹션(125)으로 예측 정보(120)를 제공할 수 있고, 디커플링 큐(115)는 마이크로 BTB(110)를 마이크로 프로세서(100)의 나머지 부분으로부터 분리시킬 수 있다. 마이크로프로세서(100)는 프로그램(130)을 실행할 수 있고, 이에 대한 구체적인 설명은 후술된다. 마이크로 BTB(110)가 예측 정보(120)에 확신할 때, 마이크로 BTB(110)는 메인 프론트 엔드 로직 섹션(125)의 게이트 메인 예측 구조(gate main prediction structure)들에 전력을 공급할 수 있고, 그럼으로써, 마이크로프로세서(100)의 전력 소비를 현저하게 감소시킬 수 있다.
도 2는 도 1의 마이크로프로세서(100)의 프론트 엔드(105)의 예시적인 블록도이다. 도 3은 본 발명의 일 실시예에 따른 도 1 및 도 2의 마이크로 BTB(110)의 예시적인 블록도이다. 도1, 도 2, 및 도 3에 관하여 논의한다.
프론트 엔드(105)는 마이크로 BTB(110) 및 디커플링 큐(115)을 포함할 수 있다. 디커플링 큐(115)는 예측 정보(120)를 메인 프론트 엔드 로직 섹션(125)에 제공할 수 있다. 메인 프론트 엔드 로직 섹션(125)은 다양한 셀렉터들(selectors) 또는 멀티플렉서들(multiplexors, 205), 가산기들(adders, 250, 255, 260), 비교기들(comparators, 240, 290, 296), 리턴 어드레스 스택(return address stack, 275) 등을 포함할 수 있다. 게다가, 메인 프론트 엔드 로직 섹션(125)은 마이크로 BTB(110)와 분리된 메인 BTB(예를 들어, mBTB 215) 및 가상 BTB(예를 들어, vBTB 270)를 포함할 수 있다.
BTB는 프로그램(도 1의 130)안에 분기들의 어드레스, 타겟, 클래스 및/또는 어떠한 예측 상태 정보에 대한 정보를 포함하는 구조일 수 있다. 메인 BTB(215) 및 가상 BTB(270)는 프로그램(130) 안의 분기들에 대한 정보를 포함할 수 있다. 마이크로 BTB(110)는 프로그램(130)의 핫 내부 부분(hot inner portion)을 수집할 수 있고, 분기들의 제로 버블 테이큰 예측을 허용한다. 만약 메인 BTB(215) 또는 가상 BTB(270)에 의해 예측된다면 제로 버블 테이큰 예측은 복수의 싸이클 패널티를 초래할 수 있다.
메인 BTB(215)는 페치 창 내의 프로그램 오더(program-order) 안의 하나 또는 두 개의 제1 분기들을 가질 수 있다. 예를 들어, 페치 창은 명령 어드레스 공간(instruction address space)의 32 바이트로 정렬된 블록이다. 가상 BTB(270)는 주어진 페치 창 내로부터 제공된 추가적인 분기들의 쌍들을 가질 수 있다. 페칭(Fetching)은 예를 들어 캐시 하이라키(cache hierarchy) 또는 메모리로부터 명령 데이터를 가져(또는 페치(fetch))오고, 당시 존재하는 것으로 알려진 어떤 분기 명령들을 예측하고, 디코드(decode)를 위한 명령 위치들로 명령 데이터를 정렬하는 것을 포함할 수 있다. 가상 BTB(270)는 주어진 페치 창에 두 개 이상의 분기들이 상주하는 것과 같은 비교적 예상 밖의 케이스를 다룰 수 있다. 메인 조건 예측자(main conditional predictor, 265)는 메인 BTB(215)와 결합될 수 있다. 메인 조건 예측자(main conditional predictor, 265)는 가중치들(220)과 같은 정보, 및 마이크로 BTB(110)의 예측 정확도가 높지 않은 케이스에서 메인 BTB(215)로부터 온 정보에 기초하여 분기들을 예측할 수 있다.
메인 프론트 엔드 로직 섹션(125)은 또한 하나 이상의 CAM들(예를 들어, 225 및 245) 및/또는 하나 이상의 변환 색인 버퍼(translation lookaside buffer)들(예를 들어, sTLB 230 및 sTLB 285)를 포함할 수 있다. 본 발명의 일 실시예에서, 프론트 엔드 로직 섹션(125)은 iTAG섹션(292) 및/또는 uTAG섹션(235)을 포함할 수 있다. 메인 프론트 엔드 로직 섹션(125)는 또한 TLB 페이지 테이블 엔트리(TLB page table entry)(예를 들어, bTLB PTE 280) 및/또는 미스 버퍼(miss buffer)들(294)을 포함할 수 있다. 메인 프론트 엔드 로직 섹션(125)은 분기 예측 파이프 스테이지(branch prediction pipe stage)들(예를 들어, B1, B2, B3, 및 B4)로 나누어질 수 있다. 제1 분기 예측 파이프 스테이지(예를 들어, B1)에서, 멀티플렉서(205)는 페치 로직(fetch logic, 210), 리타이어 리디렉션(retire redirect, 202), 실행 리디렉션(execute redirect, 204), 어드레스 체크(address check, 206) 및/또는 마이크로 BTB(110)로부터의 예측 정보(120) 등을 입력으로 수신하고, 상기 나열된 것으로부터 선택할 수 있다. 여기서는 "멀티플렉서" 라는 용어가 사용되고 있기는 하지만, 상기 용어는 선택기(selector)의 어떤 적합한 종류로 지칭될 수 있는 것으로 이해될 수 있다.
본 명세서에서 마이크로 BTB(110)는 도 3에서 도시된 바와 같이 그래프(305)로 지칭되는 구조를 포함할 수 있다. 그래프(305)는 마이크로프로세서(100) 상에서 수행되는 프로그램(도 1의 130)의 "그래프"를 캡쳐하거나 반영하기 때문에 그렇게 부른다. 그래프(305)는 하나 이상의 엔트리(entry)들(315)을 포함할 수 있다. 비록 본 발명의 일 실시예들에서 64 엔트리 그래프가 사용되는 것을 예로 들었지만, 어떤 적합한 수의 엔트리들(315)이 사용될 수 있는 것으로 이해될 수 있다. 그래프(305)의 각 엔트리(315)는 마이크로프로세서(100)상에서 수행되는 프로그램(130)의 핫 내부 부분(hot inner portion)안의 하나의 분기를 나타낼 수 있다. 페치 어드레스(fetch address)를 사용하여 마이크로 BTB(110)에 접근하고, 태그(tag) 또는 마이크로 태그(micro-tag)를 사용하여 히트(hit)를 체크하는 것 대신에 T_LINK 및 N_LINK 포인터들(예를 들어, T_LINK 317 및 N_LINK 320)이 각 그래프 엔트리(315)에 저장될 수 있다. 이는 각각의 예측된 낫 테이큰 또는 테이큰 분기들이 테이큰 방향 및/또는 낫테이큰 방향으로의 그래프(305)내 다음 분기에 대한 포인터를 갖는 것을 허용한다. T_LINK 및 N_LINK 포인터들(예를 들어, T_LINK 317 및 N_LINK 320) 각각은 T_LINK 및 N_LINK 포인터들 각각과 관련된 유효 비트(365)를 가질 수 있다. 이하에서 보다 상세히 설명된다.
그래프(305)는 프로그램(130)안의 분기들의 도해적인 표현이고, 각 그래프 엔트리(315)는 하나의 분기를 나타내고, 각 그래프 엔트리(315)는 그래프 엣지(graph edge)들(예를 들어, T_LINK 317 및 N_LINK 320와 같은 링크들)을 가질 수 있다. 그래프 엣지들은 테이큰 및/또는 낫 테이큰 방향들을 따라 그래프(305)안의 다음 엔트리(315)를 포인트할 수 있다. 예를 들어, 각 링크(예를 들어 T_LINK 317 및 N_LINK 320)는 마이크로 BTB 그래프(305)로의 6비트(bit)의 포인터일 수 있다. 링크들은 보다 적은 수의 로직 게이트들, 낮은 대기시간(latency) 및 소비 전력이 감소된다는 점에서 CAM들보다 유리할 수 있다. 각 엔트리(315)는 가중치(333)를 포함할 수 있다. 본 발명의 일 실시예에서, 가중치(333)는 8 비트의 가중치일 수 있다. 가중치(333)에 대해서는 이하에서 보다 상세히 설명된다.
만약 두 개의 분기들이 메인 BTB(215) 또는 가상 BTB(270)에 의해 쌍으로 동일한 싸이클 내에서 동시에 예측된다면, 두 개의 분기들은 마이크로 BTB(110)의 그래프(305)안에 두 개의 인접한 엔트리들(315)에 저장될 수 있다. 두 개의 인접한 엔트리들(315)의 첫번째 엔트리는 두 개의 분기들이 동시에 예측되어야 한다는 것을 나타내는 쌍 비트(pair bit)(예를 들어, PAIR 325) 설정(set) 상태를 가질 수 있다.
마이크로 BTB(110) 및 마이크로 BTB 조건 분기 방향 예측(micro BTB conditional branch direction prediction)에 연속적인 엑세스를 막기 위해, 마이크로 BTB 그래프(305)의 각 엔트리(315)는 다음 예측된 비트(NEXT_PRED 330)를 가질 수 있다. 현재 분기에 대한 마이크로 BTB 그래프(305)로의 접근과 동시에, 현재 분기에 대한 다음 예측된 비트(NEXT_PRED 330)의 다음 값은 계산되어, 마이크로 BTB 그래프 엔트리(315)로 후기입(written-back)될 수 있다. 다음 싸이클을 읽기(read)하기 위한 다음 마이크로 BTB 그래프 엔트리(314)의 선택은 현재 엔트리(315)에 대한 다음 예측된 비트(NEXT_PRED 330) T_LINK(317), 및 N_LINK(320)의 현재 값의 함수이다. 만약 현재 엔트리가 쌍 비트(PAIR 325) 설정 상태를 갖는 다면, 인접한 엔트리(315)에 대한 다음 예측된 비트(NEXT_PRED 330), T_LINK(317), 및 N_LINK(320)도 또한 고려될 수 있다. 따라서, 마이크로 BTB(110)안의 타이밍 경로들을 향상시킨다.
마이크로 BTB(110)는 도 3에 도시된 세 개의 메인 구성 요소들을 포함할 수 있다. 예를 들어, 마이크로 BTB(110)는 그래프(305), 마이크로 BTB CAM(310) 및 디커플링 큐(115)를 포함할 수 있다. 디커플링 큐(115)는 마이크로 BTB(110)의 일부로 간주될 수도 있고, 아니면 마이크로 BTB(110)와 관련되지만 마이크로 BTB(110)로부터 분리된 것으로 이해될 수 있다. 그래프(305)는 프로그램(도 1의 130)의 "핫" 포션들을 예측하는데 사용될 수 있다. "핫"포션들은 그래프(305)에 적합하게 잘 피팅(fitting)될 수 있다. 그러나 이러한 피팅(fitting)이 수행되기 전에, 마이크로 BTB(110)의 CAM(310)은 핫 내부 포션들이 어디에 위치해 있는지 알아낼 수 있다. 캠(310)은 복수의 아이템들(340)을 포함할 수 있다. 비록 본 발명의 일 실시예들에서 CAM(310)이 16개의 아이템들을 포함하지만, CAM(310)은 어떤 적합한 수의 아이템들(340)을 포함할 수 있는 것으로 이해되어야 할 것이다. 각 아이템(340)은 가중치(345)를 포함할 수 있다. 본 발명의 일 실시예에서, 가중치(345)는 8 비트의 가중치일 수 있다. 가중치(345)는 이하에서 보다 상세히 설명된다. 각 아이템(340)은 상태 비트(STATUS 355) 및 유효 비트(VALID 360)를 포함할 수 있고, 이하에서 보다 상세히 설명된다. 또한, 하나의 아이템(340)은 "시드(seed)" 엔트리(350)로 지정될 수 있고, 이하에서 보다 상세히 설명된다. CAM(310)은 내부CAM(370)을 포함할 수 있고, 이하에서 보다 상세히 설명된다.
CAM(310)은 완전히 조직화된(fully associative) 구조일 수 있다. 예를 들어, 각 아이템(340)은 메인 또는 가상 BTB 엔트리(예를 들어, 버킷(bucket))안의 쌍으로 이루어질 수 있고, 동시에 예측될 수 있는 두 개의 분기들까지 수용할 수 있다. 테이큰된 것으로 분석된 분기들은(이는 메인 BTB(215) 또는 가상 BTB(270)에 표시되어 있다), 만약 테이큰으로 분석된 분기들이 백워드(backward) 방향이라면 커밋(commit)된 이후에 마이크로 BTB CAM(310)으로 삽입될 수 있는 자격을 갖춘 것으로 된다. 여기서 사용되는 "커밋(commit)"은 명령 결과들이 준비되고, 모든 이전 웨이포인트(waypoint)들이 해결되었다는 것을 의미한다. 자격이 있는 분기들은 잠재적인(potential) 그래프"시드들"이 될 수 있다. 또는 다시 말하면, 새롭거나 수정된 포텐셜 분기 예측 그래프(305)를 위해 마이크로 BTB 그래프(305)안으로 삽입될 수 있는 첫 번째의 엔트리(315)가 될 수 있다. 다르게 놓고 보면, 마이크로 BTB CAM(310)은 "핫" 백워드 테이큰 "시드" 분기들 포스트-커밋("hot" backward-taken "seed" branches post-commit)을 알아 낼 수 있으며, "핫" 백워드 테이큰 "시드" 분기들 포스트-커밋은 그래프(305)안의 프로그램 그래프 구조에 대한 시작 포인트를 형성한다. 마이크로 BTB CAM(310)은 분리된 구조이고, 마이크로 BTB 그래프(305) 또는 큰 파워를 요구하는 종래의 BTB보다 훨씬 작을 수 있다. 마이크로 BTB(110)가 "락 온(locks on)"되면, 마이크로 BTB CAM(310)은 에너지를 절약하기 위해 전원을 끌 수 있다. 또한, 마이크로 BTB(110)는 조건 분기 예측자(conditional branch predictor, 375)를 포함할 수 있고, 이하에서 보다 상세히 설명된다.
도 4는 본 발명의 일 실시예에 따른 도 1의 마이크로 BTB(110)와 관련된 분기 명령 그래프(305)의 예시적인 도면이다. 도 1, 2, 3, 및 4에 대해서 논의한다.
마이크로 BTB(110)는 그래프(305)로서 프로그램(도 1의 130)의 핫 내부 포션들 안의 분기 명령들을 포함하거나 나타낼 수 있다. 각 그래프 엔트리(예를 들어, 315a 내지 315i)는 테이큰 및 낫 테이큰 방향들을 따라 다른 노드들과 연결되는 링크들 또는 엣지들과 함께 하나의 분기를 나타낼 수 있다. 그래프 노드들은 마이크로 BTB 그래프(305)안의 개별적인 엔트리들(315)이다. 그래프 엣지들은 6 비트 포인터들 또는 "링크들"로서 마이크로 BTB 그래프(305)안에 저장될 수 있다. 링크들은 다음 분기들의 노드(예를 들어, 엔트리)를 직접적으로 포인트할 수 있다. 그래프 엣지들은 마이크로 BTB 그래프(305) 안에 적절한 수의 비트들을 갖는 비트 포인터들을 사용해서 저장될 수 있는 것으로 이해될 수 있다. 노드는 테이큰, 또는 현재 분기가 테이큰된 것으로 예측되면 현재 분기의 노드로부터 예측될 다음 분기를 향하는 "T_LINK"링크 또는 포인터를 가질 수 있다. 만약 현재 분기가 이전에 동적 특성을 나타냈다면, 또한, 노드는 낫-테이큰 또는 현재 분기가 낫 테이큰된 것으로 예측되면, 예측될 다음 분기로 향하는 "N_LINK" 링크를 가질 수 있다.
예를 들어, 예시적인 프로그램(도 1의 130)은 9개의 분기들을 가질 수 있다. 9개의 분기들 각각은 도 4에 도시된 바와 같이 b0 내지 b8로 연관된 그래프(305)에 나타낼 수 있다. 그래프(305)의 개개의 엔트리들(315) 각각은 T_LINK 링크 및 N_LINK 링크를 가질 수 있다. T_LINK 링크 및 N_LINK 링크는 현재 분기가 테이큰(예를 들어, T_LINK) 또는 낫 테이큰(예를 들어, N_LINK)으로 예측되면 예측될 다음 분기로 포인트할 수 있다. 각각의 마이크로 BTB 그래프 엔트리(예를 들어, 315a 내지 315i)는 분기의 타겟 어드레스 및/또는 다음 예측된 방향(예를 들어, 도 3의 NEXT_PRED 비트 330)과 같은 추가적인 상태 정보를 포함할 수 있다. 추가적인 상태 정보는 현재 분기가 예측된 후에 다음 분기를 예측하기 위해 T_LINK 링크 또는 N_LINK 링크를 따를 것인가를 결정하는데 사용할 수 있다.
도 4에 도시된 마이크로 BTB 그래프(305)는 예를 들어 아래에서 주어진 것과 같은 주어진 유사코드가 내포된 루프에 대한 분기들을 나타낼 수 있다.
d = 0
for a = 0; a < 1000; a++ //b8
for b = 0; b < 5; b++ // b3
for c = 0; c < 2; c++ // b0
t1: d++
if d/3 is an integer
jmp t1 // b1
for e = 0; e < 4; e++ // b2
for f = 0; f < 9; f++ // b7
for g = 0; g < 6; g++ // b4
for h = 0; h < 7; h++ // b5
for i = 0; i < 8; i++ // b6
전술한 바와 같이, 테이큰된 것으로 분석된 분기들은(이는 메인 BTB(215) 또는 가상 BTB(270)에 표시되어 있다) 마이크로 BTB CAM(310)으로 삽입될 수 있는 자격을 갖춘 것으로 된다. 자격이 있는 분기들은 포텐셜 그래프"시드들"이 될 수 있고, 또는 다시 말하면, 새롭거나 수정된 포텐셜 분기 예측 그래프(305)를 위해 마이크로 BTB 그래프(305)안으로 삽입될 수 있는 첫 번째의 엔트리(315)가 될 수 있다. 이러한 포텐셜 시드들은 마이크로 BTB CAM(310)안에 이미 상주하고 있는지 보기 위해 마이크로 BTB CAM(도 3의 310) 포스트 커밋의 아이템들(도 3의 340)과 비교될 수 있다. 만약에 포텐셜 시드가 마이크로 BTB CAM(310) 안에 상주하지 않고, 그 당시에 CAM 교체 정책이 삽입을 허용한다면, 새로운 시드 엔트리(도 3의 350)는 마이크로 BTB 캠(310)에 삽입될 수 있다. 마이크로 BTB CAM(310)은 각 아이템(340)마다 8 비트 가중치들(도 3의 345)을 사용할 수 있다. 마이크로 BTB CAM(310)은 각 아이템(340)마다 8 비트 가중치들(도 3의 345)을 BTB CAM(310)의 주어진 아이템(340)안의 분기가 새로운 시드(350)로서 마이크로 BTB 그래프(305)안으로 삽입하는 것을 보장하기에 충분히 "핫(hot)"할 때가 언제인지를 검출하고 그리고 CAM 교체 정책을 위해서 사용할 수 있다. 본 발명의 일 실시예에서, 특정 분기가 BTB CAM(310)에 삽입될 수 있는지 자격여부를 결정하는 기준은 특정 분기가 백워드(backward) 방향인 것이고 테이큰 된 것이 될 수 있다. 본 발명의 일 실시예에서 분기들은 백워드(backward) 방향일 필요는 없다. 예를 들어, 분기들은 몇몇 케이스들(예를 들어, 다음과 같은 서브루틴 호출, 즉 호출이 페치되었을 때, 마이크로 BTB(110)가 락 온(locked on)되지 않아서 서브루틴 호출에 대응하는 리턴(return)이 잘못 예측되는 경우)에서 포워드(forward)방향일 수 있고, 이하에서 보다 구체적으로 설명된다.
만약 커밋되고(committed), 백워드 테이큰 분기(backward-taken branch)가 이미 BTB CAM(310)안에 상주하면 교체 정책 가중치(345)는 증가될 수 있다. 예를 들어, 가중치(345)는 8비트 값일 수 있고, 255(십진수)로 포화될 수 있다. 만약 CAM-상주 커밋티드 시드(CAM-resident committed seed)가 세타(예를 들어, 십진수 42)와 같은 임계치와 같거나 더 큰 교체 정책 가중치(345)를 갖는다면, 시드(350)는 "핫"한 것으로 간주되고, CAM 아이템(340)안의 상태 비트(355)에 의해 표시된 대로 시드(350)가 BTB 그래프(305)내에 이미 존재하지 않은 경우, 시드(350)를 마이크로 BTB 그래프(305)에 삽입하기 위한 시도가 행해질 수 있다. 그래프 삽입은 교환 정책 가중치(333)가 0인 유효 그래프 엔트리(315) 또는 무효 그래프 엔트리(315)가 있을 때 이루어질 수 있다. 만약 둘 중 하나의 상황이 발견된다면, 시드(350)는 그래프(305) 안으로 삽입될 수 있고, 삽입된 엔트리 넘버는 시드(350)를 위해 CAM 아이템(340)으로 다시 복사 될 수 있다. 게다가 아이템(340)이 그래프(305)로 할당되었다는 것을 나타내기 위해 유효 비트(360)는 CAM 아이템(340)에서 설정(set)될 수 있다. 만약 CAM 아이템(340)이 그래프(305)에서 발견되지 않는 다면, 그래프(305)안의 라운드 로빈 방식(round-robin basis)에서 선택된 여덟 개의 엔트리들(예를 들어, 315)을 갖는 하나의 그룹에 대한 교체 정책 가중치들(예를 들어, 333)은 감소될 수 있다. 대안적으로, 모든 그래프 가중치들(예를 들어, 333)이 동시에 감소 될 수 있다.
우세한 백워드 테이큰 "시드들"을 홀딩하는 것뿐만 아니라, 이미 마이크로 BTB CAM 아이템(340) 안에 상주하는 시드처럼 메인 BTB(도 2의 215) 또는 가상 BTB(도 2의 270)의 동일한 "버킷(bucket)"안에 있는 다른 분기도 이미 상주하던 시드가 마이크로 BTB 그래프(305)안에 삽입되었을 때 마이크로 BTB CAM(310)의 "버킷"에 추가될 수 있다. 이러한 논-시드(non-seed) 분기들은 만약 마이크로 BTB CAM(310)이 그들이 페치되고, 시드보다 테이큰될 가능성이 높다고 결정하면 마이크로 BTB(110)를 "락온(lock on)" 하기 위해 사용될 수 있고, 그럼으로써, 분기들을 예측하고 락온 하기 위한 마이크로 BTB(110)의 능력이 향상될 수 있다.
적어도 하나의 시드(350)가 마이크로 BTB 그래프(305) 안에 있다면, 마이크로 BTB(110)는 시드(350)가 속하는 그래프(305) 안의 프로그램(130)과 관련된 남은 분기 그래프를 구축하기 위한 시도할 수 있다. 포스트 커밋된 마이크로 BTB 그래프(305)의 엔트리들(315)과 비교되는 메인 BTB(215) 또는 가상 BTB(270)의 CAM안에 이미 상주하는 커밋된 분기들 가짐으로써 이루어질 수 있다. 만약 현재 커밋된 분기가 그래프(305)안에 상주하고, 이전의 커밋된 분기가 그래프(305)안에 상주하지 않을 경우에, 미앤더(meander) 기준을 충족한다면, 이전의 커밋된 분기는 그래프(305)안으로 삽입되기 위한 자격이 주어질 수 있다. 본 발명의 일 실시예에서, 미앤더 기준은 그래프 "히트"가 마지막으로 검출된 이후 연속적으로 커밋된 분기들의 개수가 그래프(305)의 사이즈보다 작은 것을 말한다. 본 발명의 일 실시예에서 그래프(305)의 사이즈는 64 엔트리들일 수 있다. 미앤더 기준은 프로그램 그래프(305)의 생성이 마이크로 BTB 그래프(305)의 특정한 사이즈 안에 맞지 않는 것을 방지한다. 예를 들어, 마이크로 BTB 그래프(305)가 64 엔트리들의 사이즈를 갖는 다면, 미앤더 조건은 프로그램 그래프(305)의 생성이 64 엔트리를 초과하는 것을 방지한다.
만약 미앤더 조건이 만족된다면, 이전에 커밋된 분기는 하나의 여유가 있다면 그래프(305) 안의 프리(free) 또는 교체 가능한 엔트리(315)에 추가될 수 있다. 만약 엔트리(315)가 발견된 다면, 이전의 분기는 그래프(305)안에 삽입될 수 있고, 이전 분기가 테이큰된 것으로 분석된다면 현재 분기의 엔트리(그래프(305)안에 이미 상주하고 있는 엔트리)에 대한 링크는 이전 분기의 T_LINK 필드(예를 들어, T_LINK(317))에 추가될 수 있다. 그렇지 않으면, 새롭게 삽입된 이전 분기의 N_LINK 필드(예를 들어, N_LINK(320))에 링크가 추가될 수 있다. 이와 같이, 시드(350)가 속하는 그래프(305)는 시드(305) 그 자체에서 시작하고, 백워드(backward)로 동작하면서 연속적으로 구축될 수 있다. 그래프(305)는 마이크로 BTB 그래프(305) 안의 적은 수의 사용 가능한 엔트리들에 기인한 문제점에 대처하기 위해 백워드(backward)로 구축될 수 있다. T 및 N 링크들(예를 들어, T_LINK(317) 및 N_LINK(320))은 유효 비트들(365)을 포함할 수 있다. 유효 비트들(365)은 대응하는 링크 필드가 기록되거나 유효할 때 설정될 수 있다. 이러한 유효 비트들(365)은 그래프(305)가 무효한 링크를 따를 때를 검출하기 위해 사용될 수 있다. 그러한 상황이 검출되었을 때, 전력을 절약하고, 마이크로 BTB에 의해 잘못된 추측에 기인한 메인/가상 BTB의 리디렉션(redirect)을 피하기 위해 마이크로 BTB(110)는 분기들의 예측을 중단하고, 그래프(305)의 판독들은 중지될 수 있다.
본 발명의 일 실시예에서, 마이크로 BTB 그래프(305)의 엔트리들(315)은 포워드(forward) 방향으로 구축될 수 있다. 포워드 방향은 그래프(305)안에 이미 존재하는 분기들로부터 시작하고, 그들의 커밋으로써 새로운 분기들을 추가할 수 있다. 포워드 방향은 커밋된 분기들을 이전에 추가된 분기에 연결할 수 있다. 이것은 그래프(305)의 엔트리들(315)를 구축하는데 백워드 방향으로 그래프(305)를 구축하는 것보다 빠르다는 이점이 있다. 그래프(305)를 포워드 방향으로 구축하는 것은 그래프(305)의 유용한 엔트리들(315)이 일찍 배제되지 않도록 해야 하는 제약이 요구 될 수 있다.
만약 이전의 커밋된 분기 및 현재 커밋된 분기 모두가 메인 BTB(215) 또는 가상 BTB(270)의 동일한 "버킷(bucket)" (예를 들어, 메인 예측 구조들에 의해 분기들의 쌍으로써 동일한 싸이클 내에서 예측이 가능)안에 있고, 이전의 커밋된 분기들이 낫 테이큰으로 분석되었지만, 그들이 그래프(305)의 물리적으로 인접한 엔트리들(315)안에 아직 위치하지 않고 있다면, 현재 분기에 대한 그래프(305)의 콘텐츠들은 한 위치 전진(또는 셔플(shuffled) 이동될 수 있으며, 그래프(305)의 사이즈로 모듈로(modulo)한다(예를 들어, 현재 분기의 콘텐츠들이 한 위치 전진 이동되었을 때, 그래프의 사이즈의 모듈로는 주변을 랩핑(wrapping)할 수 있음). 이전 분기는 현재 분기의 이전 위치 안에 쓰여질 수 있다. 이전 분기("버킷"안에 첫 번째 분기)에 대한 쌍 비트(PAIR 325)는 설정(set)될 수 있다. 이것은 버킷 안의 첫 번째 분기가 락 온된 동안 판독될 때, 첫 번째 분기는 그래프(305)안의 첫 번째 분기 다음에 위치한 분기와 "쌍(paired)"을 이루어야 하고, 두 개의 분기들은 동시에 예측되기 위해 디커플링 큐(115)로 보내지는 것을 나타낼 수 있다. 예를 들어 쌍을 이루는 분기(paired branch, 예를 들어 A 및 B)를 인접한 그래프 엔트리들(315, 예를 들어 X 및 X+1)에 위치시키는 것은 예측된 분기(예를 들어 C)가 엔트리(X)안의 분기(A)를 향하는 테이큰 또는 낫테이큰 링크를 따를 때, 엔트리(X+1)안의 쌍을 이루는 분기(B)를 판독하는 것을 단순하게 만든다. 이것은 마이크로 BTB 그래프(110)가 전력 낭비 없이 높은 주파수에서 두 개의 분기들(A 및 B)를 동시에 동일한 싸이클 안에서 예측하는 것을 허용할 수 있다. 현재 분기에 의해 셔플(shuffled)된 그래프 엔트리(315)에 이미 상주하고 있는 어떤 유효 분기는 단순하게 덮어 쓰여질 수 있으며, 그 엔트리에 링크를 갖는 그래프(305) 안의 다른 엔트리들(315)은 그 때에 보정될 필요가 없다.
만약 커밋된 이전 분기 및 커밋된 현재 분기가 모두 그래프(305)안에 상주하나, 커밋된 방향을 따르는 이전 분기의 링크가 커밋된 현재 분기를 포인트하지 않는 다면, 링크는 보정될 수 있다. 유사한 방식으로, 커밋된 이전 분기에 대응하는 타겟, 분기 타입 등과 같은 모든 다른 상태 정보는 수정될 수 있다. 이러한 메커니즘은 그래프(305)의 셔플링 및 분기 타임 재분류 등에 의해 생성된 잘못된 링크들이 결국 보정될 수 있다는 것을 보증한다. 잘못된 링크들이 마이크로 BTB(110)가 분기를 잘못 예측하는 것을 야기하기는 하지만, 마이크로 BTB(110)와 연관된 모든 예측들은 메인 BTB(215) 또는 가상 BTB(270) 중 어느 하나에 의해 파이프라인의 단계를 거치면서 검증될 수 있다. 또는 메인 BTB(215) 또는 가상 BTB(270)가 마이크로 BTB(110)의 높은 예측 신뢰성에 의해 파워 다운된 경우에는 실행 클러스터(execution cluster)에 의해 검증될 수 있다. 도 4에서 알 수 있는 바와 같이, 그래프(305)안의 각 엔트리(315)는 그 자신의 교환 정책 가중치(333)를 가질 수 있고, 이는 BTB CAM(도 3의 310)의 교환 정책 가중치들(345)과 다를 수 있다.
도 5는 본 발명의 일 실시예에 따른 도 1의 마이크로 BTB를 위한 하나의 파이프라인을 포함하는 다른 분기 예측 파이프 라인들(500)의 예시적인 블록도이다. 도 1, 2, 3 및 5에 대해 논의한다.
메인 BTB 분기 예측 파이프라인(510)은 어드레스/히스토리 선택과 함께 시작하여, 명령 캐시(instruction cache)로부터 명령을 페치하는데 사용되는 실제/예측된 어드레스/ 웨이(way) 정보와 함께 끝나는 네 개의 스테이지들이다. 메인 BTB 분기 예측 파이프라인으로부터 분리된 것은 명령 페치 파이프라인이다. 어드레스, 웨이, 및 히스토리 정보는 B1에서 선택될 수 있다. 메인 분기 예측 어레이들은 B2에서 판독된다. 정확한 방향 예측은 B4에서 발생하는 리디렉션(redirect)과 함께 B3에서 만들어질 수 있다. 분기 예측자는 마이크로구조(microarchitecture)안의 몇몇의 키 루프(key loop)들을 가질 수 있다.
그에 반해, 마이크로 BTB(도 1의 110)는 505로 표시된 것과 같이, 제로 버블 지연과 함께 예측된 예측들을 제공한다. 메인 예측자(예를 들어, 메인 BTB(215) 및/또는 도 2의 예측자(265))는 분기가 테이큰으로서 예측된 때에, 주어진 32 바이트의 페치 윈도우 안에 두 개의 첫 번째 분기들에 대한 정확한 예측을 두 개의 버블들 지연과 함께 제공할 수 있다. 낫 테이큰 예측에 대한 패널티가 없다.
도 6은 본 발명의 일 실시예에 따른 페치 파이프 라인 프로세션(fetch pipeline procession, 600)의 예시적인 블록도이다. 도 1, 2, 3 및 6에 대해 논의한다.
페치 파이프라인 프로세션(600)은 시드의 페치와 연관된 제1 분기 스테이지(605, 예를 들어, B1 또는 _b1), 제2 분기 스테이지(610, 예를 들어 B2 또는 _b2), 제3 분기 스테이지(615, 예를 들어 B3 또는 _b3), 시드에 대한 파이프 라인의 리디렉션과 관련된 제4 분기 스테이지(620, 예를 들어 B4 또는 _b4), 및 시드 다음의 첫 번째 예측 테이큰 분기에 대한 리디렉션과 관련된 제5 분기 스테이지(625, 예를 들어 _b2 -> _b1)를 포함할 수 있다.
마이크로 BTB(110)의 그래프(305)는 프로그램(도 1의 130)의 핫 내부 포션이 채워졌을 경우, 마이크로 BTB(110)는 그래프(305)와 함께 예측들을 만들기 시작하기 위하여 "락 온(lock on)"될 수 있다. 이것으로 포스트 커밋이 끝난 것은 아니다. 보다 정확히 말하면, 락온은 파이프 라인 초기의 페치 어드레스의 스트림 검사 및 명령 페치가 프로그램 및 마이크로 BTB(110)안에 상주하는 관련된 그래프(305)에 입력된 때를 검출하는 것에 의해 수행될 수 있다. 이것은 마이크로 BTB CAM(310)안의 내부 CAM(370)을 사용하여 수행될 수 있다. 내부 CAM(370)은 프론트 엔드(도 1의 105)의 제2 분기 스테이지(예를 들어, B2 또는 _b2)에서 액티브 페치 어드레스(active fetch address)들을 조사할 수 있다. 마이크로 BTB CAM(310)안에서 매치된 것을 발견한다면, 프론트 엔드(105)는 "시드"를 페칭한다. "시드"는 마이크로 BTB CAM(310) 및 그래프(305) 안에 상주한다. 유효 T_LINK(예를 들어, T_LINK 317)를 가진 그래프(305)안의 엔트리(315)에 대응하는 마이크로 BTB CAM(310)의 히트 시에는, 히트 표시가 시드의 T_LINK 링크(예를 들어, T_LINK 317)를 포함하는 시드와 관련된 그래프 정보의 부분 집합과 함께 마이크로 BTB그래프(305)로 보내질 수 있다. 그래프 정보의 부분 집합은 유효 비트(360)와 함께 마이크로 BTB CAM(310)안에 로컬로 캐쉬될 수 있다.
시드 정보는 제2 분기 스테이지(예를 들어, B2 또는 _b2)에서 마이크로 BTB 그래프에 의해 수신될 수 있고, 시드의 T_LINK(예를 들어, T_LINK 317)는 제3 분기 스테이지(예를 들어, B3 또는 _b3)에서 시드의 T_LINK및 T_LINK+1와 대응하는 그래프(305)의 엔트리들(315)의 쌍을 판독하기 위해 사용될 수 있다. 시드의 T_LINK(예를 들어, T_LINK 317)는 다음 분기를 포인트 할 수 있다. 다음 분기는 시드 분기가 메인 예측자(265)에 의해 테이큰으로 예측된 것으로 가정하고 페치될 수 있다.
이 그래프(305)의 엔트리들(315)의 쌍은 다음 분기(쌍 비트(PARI 325))가 시드의 T_LINK 엔트리로 설정 취소된 경우) 또는 두 개의 분기들(쌍 비트(PAIR 325)가 시드의 T_LINK 엔트리로 설정된 경우)에 대응할 수 있다. 만약 시드가 프론트 엔드(105)의 파이프라인의 제4 분기 스테이지(예를 들어, B4 또는 _b4)안의 메인 예측자(265)에 의해 테이큰 된 것으로 예측된다면, 이 그래프(305)의 엔트리들(315)은 프론트 엔드(105)에 의해 예측될 수 있다. 마이크로 BTB 그래프(305)안의 시드의 분기 어드레스가 제4 분기 스테이지(예를 들어, B4 또는 _b4)에서 메인 BTB(215) 또는 가상 BTB(270)에 의해 저장된 것과 일치(match)하고, 프론트 엔드(105)의 메인 또는 가상 리디렉션이 제4 분기 스테이지(예를 들어, B4 또는 _b4)에서 발생한다면, 마이크로 BTB 그래프(305)는 분기들 예측을 시작할 수 있는데, 시드의 T_LINK에서 예측을 시작하여 두 개의 첫번째 분기들을 예측할 수 있다. 두 개의 첫 번째 분기들의 그래프(305)의 엔트리들(315)은 이전 싸이클에서 판독된다. 이것은 마이크로 BTB(110)가 "락온"되고 분기들 예측을 시작하는 방법이다.
마이크로 BTB(110)는 시드가 메인 예측자(265)에 의해 테이큰으로 예측된 이후에 빠르면 첫 번째 싸이클에서 시드 분기에 대한 리디렉션 후에 페치될 분기들의 제1 쌍을 예측(예를 들어, "제로 버블(zero bubble)" 예측)할 수 있다. 일단 마이크로 BTB(110)가 락 온 되면, 마이크로 BTB(110)는 계속해서 분기들의 쌍들을 예측하고, 테이큰으로 예측된 분기들에 대한 페치 리디렉션을 파이프라인 버블들의 삽입없이 계속할 수 있다. 마이크로 BTB(110)는 아래의 상황들이 발생할 때까지는 각 싸이클 마다 그래프(305)의 엔트리들(315)의 쌍을 계속해서 판독하고, 그들의 예측들을 메인 프론트 엔드 로직 섹션(125)의 메인 예측자들(예를 들어, 265)로 계속해서 보낼 수 있다. 판독이 중지 되는 상황들로는, 마이크로 BTB(110)가 메인 예측자들(예를 들어, 265)보다 지나치게 앞선 실행에 대한 역압(backpressure)을 경험하고, 메인 예측자들(예를 들어, 265)이 마이크로 BTB 예측에 동의하지 않고, 그리고 제4 분기 스테이지(예를 들어, B4 또는 _b4)에서 프론트 엔드를 리디렉션하고, 마이크로 BTB(110)가 무효한 링크를 따르려고 하고, 및/또는 파이프라인의 아주 아래 단계로부터 리디렉션이 발생하는 상황 등이 될 수 있다.마이크로 BTB 그래프(305)가 분기들의 현재 쌍에 대해 판독할 때, 마이크로 BTB 그래프(305)는 예측될 분기들의 다음 쌍이 그래프(305)안에 어디에 위치하는지 결정하기 위해 그들의 예측된 방향 비트들(예를 들어, 도 3의 NEXT_PRED 330), 제1 분기의 쌍 비트(예를 들어, 도 3의 PAIR 325), T_LINK들(예를 들어, 도 3의 T_LINK 317), 및/또는 N_LINK들(예를 들어, 도 3의 N_LINK 320)을 검사할 수 있다. 분기들의 다음 쌍은 다음 싸이클에서 판독될 수 있다. 아래의 유사 코드는 다음 링크가 계산되는 방법에 대한 예를 나타낸다.
NEXT_LINK = Graph[CURRENT_LINK].NEXT_PRED Graph[CURRENT_LINK].T_LINK : //b0 테이큰
( Graph[CURRENT_LINK].PAIR
& Graph[CURRENT_LINK+1].NEXT_PRED
) ? Graph[CURRENT_LINK+1].T_LINK : //b0 낫 테이큰, b1 테이큰
( Graph[CURRENT_LINK].PAIR
& ~Graph[CURRENT_LINK+1].NEXT_PRED
) ? Graph[CURRENT_LINK+1].N_LINK : //b0 및 b1 낫 테이큰
Graph[CURRENT_LINK].N_LINK; //b0 낫 테이큰
도 6에 도시된 바와 같이, 제1 분기 스테이지(605)는 NEXT ALT 멀티 플렉서(multiplexor, 640)를 포함할 수 있다. NEXT ALT 멀티 플렉서(640)는 백엔드 리디렉션 정보(630, backend redirect information) 및 메인 예측자 리디렉션 정보(635)를 수신하고, 이 중에서 선택할 수 있다. 제1 분기 스테이지(605)는 다음 명령 어드레스(next instruction address, NEXT_IA) 멀티플렉서(645)를 더 포함할 수 있다. NEXT_IA 멀티플렉서(645)는 마이크로 BTB 시드 CAM 정보(650)를 출력할 수 있다. IA는 페치 창(fetch window) 또는 명령의 명령 주소를 의미한다. 제2 분기 스테이지(610)에서, 멀티플렉서(660)는 마이크로 BTB 시드 CAM 정보(650) 및 마이크로 BTB 그래프 ALT 판독 정보(655)(ALT read information)를 수신하고, 이 중에서 선택할 수 있다.
제3 분기 스테이지(615)에서, 멀티플렉서(667)는 멀티플렉서(660)의 출력 및 다음 그래프 쌍 판독 선택(665)으로부터의 출력을 수신하고, 이중에서 선택할 수 있다. 다음 그래프 쌍 판독 선택(665)은 또한 멀티플렉서(667)를 제어할 수 있다. 멀티플렉서(667)는 하나 이상의 마이크로 BTB 그래프 다음 쌍 판독들(685)을 출력할 수 있다. 제4 분기 스테이지(620)에서, 디커플링 큐(115)는 하나 이상의 마이크로 BTB 그래프 다음 쌍 판독들(685)을 수신할 수 있다. 디커플링 큐(115)는 큐(672) 및 멀티플렉서(670)를 포함할 수 있다. 멀티플렉서(670)는 큐(672)의 출력 및 하나 이상의 마이크로 BTB 그래프 다음 쌍 판독들(685)과 관련된 정보를 수신하고, 이 중에서 선택할 수 있다. 멀티플렉서(670)는 DQ 엠티(empty) 신호(680)에 의해 제어될 수 있다. 제5 분기 분기 스테이지(625)에서, NEXT_IA 멀티플렉서(675)는 디커플링 큐(115)로부터 출력된 정보를 수신할 수 있다.
도 7은 본 발명의 일 실시예에 마이크로 BTB 파이프라인(700)의 예시적인 블록도이다. 이 실시예에서, 마이크로 BTB 파이프라인(700)이 락온된 동안, 파이프라인 버블들 주입 없이 각 싸이클마다 두 개의 분기들까지 예측하는 것을 도시한다. 도 1, 2, 3, 6 및 7에 대해 논의한다.
마이크로 BTB 그래프(305)의 예측된 분기들은 디커플링 큐(115)에 있을 수 있고, 그들의 어드레스들은 제1 분기 스테이지(예를 들어, B1 또는 _b1) 안의 현재 페치 어드레스와 비교될 수 있다. 만약 페치가 디커플링 큐(115)의 헤드에 분기들의 쌍까지 진행 되었으면, 그들은 제1 분기 스테이지(예를 들어, B1 또는_b1)에서 예측될 수 있다. 만약 어느 하나의 분기가 테이큰으로 예측된 경우, 프론트 엔드(105)는 제2 분기 스테이지(예를 들어, B2 또는 _b2)의 시작부에 리디렉션될 수 있다. 그렇게 함으로써, 디커플링 큐(115)의 업데이트된 헤드에서 마이크로 BTB(110)와 관련된 분기들의 다음 쌍이 예측될 수 있는 새로운 _b1 싸이클을 시작할 수 있다. 이러한 방식으로, 마이크로 BTB(110)는 파이프라인 버블들의 삽입 없이 매 싸이클마다 두 개의 예측된 분기들을 유지할 수 있다.
분기들의 현재 쌍에 대한 그래프(305)를 판독하는 것 외에도, 다음 예측된 비트들(예를 들어, NEXT_PRED 330)은 만약 예측된 분기들이 동적 조건 상태에 있다면 예측된 분기들 중 어느 하나 또는 둘 다에 대해 업데이트 될 수 있다. 이는 마이크로 BTB(110)의 조건 분기 방향 예측자들 중 하나에 엑세스하고, 분기(들)의 다음 출력을 예측하고, 그래프(305) 안에 다음 예측된 비트(들)(예를 들어, NEXT_PRED 330)에 업데이트된 다음 예측을 다시 쓰기함으로써 실행될 수 있다. 현재 예측은 그래프(305)에서 이미 판독되었고, 판독될 그래프(305)의 엔트리들(315)의 다음 쌍을 결정하는데 사용될 수 있다. 이는 그래프 판독들을 예측으로부터 분리하며, 마이크로 BTB(110)가 파이프라인 버블들의 삽입 없이 공격적인 타겟 주파수를 맞출 수 있도록 허용한다.
마이크로 BTB 그래프(305)가 락 온 된 이후에, 마이크로 BTB 그래프(305)는 예측된 분기들의 쌍들을 3 개의 엔트리 디커플링 큐(115)를 통해 메인 프론트 엔드 로직 섹션(125)으로 전송할 수 있고, 그래프(305)의 엔트리들(315)을 계속해서 판독하고, 분기들을 예측하고, 디커플링 큐(115)가 역압(backpressure)를 나타내지 않는 동안은 분기들을 메인 프론트 엔드 로직부(125)로 밀어 넣을 수 있다. 그래프 판독들은 락이 유지되는 동안은 역압이 일단 완화되면 재시작할 수 있다. 디커플링 큐(115)안에는 적어도 두 개의 엔트리들이 필요하다. 디커플링 큐(115)의 제3 엔트리는 디커플링 큐(115)의 헤드에서 마이크로 BTB(110)의 예측들을 검사하는 예측 로직과 마이크로 BTB 그래프(305)의 판독 제어 로직 사이의 타이밍 경로(timing path)들을 제거하기 위한 스키드 버퍼(skid buffer)와 같이 동작할 수 있다.
디커플링 큐(115)의 엔트리들은 분기 오프셋 정보(branch offset information), 타겟 정보, 예측된 방향 정보, 및/또는 명령 페치를 리디렉션 하기 위해 필요한 다른 상태 정보를 포함할 수 있다. 디커플링 큐(115)의 제어 로직은 디커플링 큐(115)의 헤드에서 분기들의 쌍을 검사하거나(만약 비어있지 않은 경우), 혹은 마이크로 BTB 그래프(305)로부터 전송된 쌍을 검사하고(만약 비어있는 경우), 그리고 파이프라인의 제1 분기 스테이지(예를 들어, B1 또는_b1)에서의 현재 페치 어드레스와 그들의 어드레스들을 비교할 수 있다. 만약 유효 분기 또는 분기들의 쌍이 발견되고, 그들이 현재 페치 창에 속한다면, 그들은 만약 디커플링 큐(115)가 비어있지 않고, 디커플링 큐(115)의 헤드가 업데이트 되었다면, 디커플링 큐(115)로부터 할당 해제(de-allocate)될 수 있다. 또한, 그들 중 하나가 테이큰으로 예측된다면, 페치는 다음 싸이클의 시작부에 마이크로 BTB(110)의 예측된 타겟으로 리디렉션 될 수 있다. 만약 분기(들)이 낫 테이큰이라면, 페치는 단순히 순차적으로 진행할 수 있다. 이런식으로, 예측된 테이큰 분기 버블들은 마이크로 BTB 예측에 의해 숨겨질 수 있다.
디커플링 큐(115)의 엔트리들은 또한 마이크로 BTB(110)의 잘못된 추측이 발견되었을 때, 마이크로 BTB(110)의 추측에 근거하여 업데이트된 조건 분기 예측자 상태를 "풀고(unwind)" 그리고 정정하는데 사용될 수 있다. 파이프라인 스테이트 또한 분기들에 대한 마이크로 BTB(110)의 추측에 근거하여 업데이트된 예측 상태를 풀고 그리고 정정하기 위해 사용될 수 있다. 여기서의 분기들은 메인 예측자(예를 들어, 265)의 리디렉션 또는 파이프라인의 아주 아래 단계로부터의 어떤 다른 리디렉션 중 어느 하나의 영향 아래서 디커플링 큐(115)로부터 추출되었고, 명령 페치를 예측하기 위해 사용되었던 분기를 말한다.
만약 메인 BTB(215), 가상 BTB(270) 및/또는 메인 조건 예측자(265)가 마이크로 BTB(110)의 분기 예측의 분기 오프셋, 방향 또는 타겟에 대해 의견을 달리한다면, 마이크로 BTB(110)는 "브로큰(broken)"된 락을 가질 수 있다. 이 시나리오에서, 디커플링 큐(115)는 플러시(flush)될 수 있고, 그래프(305)와 관련된 그래프 판독들은 중단될 수 있고, 페치 타임 CAM 동작들은 락을 재획득하기 위한 시도로 다시 활성화 될 수 있고, 필요하다면 그래프(305)안의 조건 분기 스테이트는 복구될 수 있다.
만약 전술한 바와 같이 락이 브로큰되고, 마이크로 BTB CAM(310)과 연관된 히트가 동일한 싸이클 내에서 발견되지 않는 경우, "교대의(alternate)" 링크는 마이크로 BTB 그래프(305)로 전달될 수 있고, 다른 방향을 따라 내려가며 락을 재획득하기 위한 시도가 이루어질 수 있다. 예를 들어, 마이크로 BTB 그래프(305)가 락 온되고, 그래프(305)의 엔트리들(315) 중 특정 엔트리(A)에 대한 테이큰 예측을 만든 경우, 그래프(305)는 TAKEN 링크(예를 들어, T_LINK 317)를 따를 수 있고, 그러나 그래프(305)는 NOT_TAKEN 링크(예를 들어, N_LINK 320)를 기록할 것이고, 이를 파이프라인으로 전달할 수 있다. 만약 그래프 엔트리(A)가 실제로 NOT_TAKEN으로 분석된 경우, CAM 락킹된 것과 비슷한 방식으로 시드로서 NOT_TAKEN 링크(e.g., N_LINK 320)에 의해 포인트된 분기를 취급함으로써 마이크로 BTB 그래프(305)를 재락(relock)하기 위한 시도가 이루어질 수 있다. 이것은 또한 그래프(305)가 분기를 낫 테이큰으로 잘못 예측하고, NOT_TAKEN 링크(예를 들어, N_LINK 320)를 따르는 경우, TAKEN 링크(예를 들어, T_LINK 317)를 위해서도 동작할 수 있다. 교대하는 것은 테이큰 또는 낫 테이큰일 수 있다. 두 개의 교대들은 마이크로 BTB(110)가 매 싸이클마다 두 개의 분기들까지 예측할 수 있기 때문에 매 싸이클마다 사용될 수 있다.
이런 "교대들"은 테이큰 또는 낫 테이큰이라면 락 온 될 수 있다. 테이큰 교대들 락들(Taken alternates locks)은 파이프라인이 제4 분기 스테이지(예를 들어, B4 또는 _b4)에서 리디렉션되기 때문에 파이프라인에 대한 시드 락들과 개념적으로 동일할 수 있다. 낫 테이큰 교대들(Not-taken alternates)은 상대적으로 더욱 복잡하다. 만약 낫 테이큰 교대에서 리락이 시도된다면, 마이크로 BTB 그래프(305)는 낫 테이큰 교대 후의 예측될 분기들의 다음 쌍들을 디커플링 큐(115)의 헤드에서만 이윽고 얻을 수 있고, 또한 뒤따르는 두 개의 싸이클들 동안 메인 BTB(215) 또는 가상 BTB(270)에 의한 분기들의 예측이 없어야 한다. 이러한 낫 테이큰 리락들은 "추측에 근거한(speculative)" 리락들로 지칭될 수 있다. 만약 분기가 두 싸이클 창 내에 메인 BTB(215) 또는 가상 BTB(270)에 의해 예측된다면, "추측에 근거한" 락은 브로큰될 수 있다. "추측에 근거한" 락이 브로큰되지 않는다면, 마이크로 BTB(110)는 디커플링 큐(115)가 역압 및/또는 리디렉션 발생에 의해 가득 채워질 때까지 락을 유지하고, 분기들의 예측을 계속할 수 있다. 두 싸이클 창 동안 메인 파이프라인 안에 어느 분기들이 있다면, 낫 테이큰 이후의 분기들의 첫 번째 쌍은 예측하기에 너무 늦게 도착할 수 있고, 그렇기 때문에 마이크로 BTB(110)가 메인 파이프 라인 뒤에 있게 되고 결코 따라 잡을 수 없는 원인이 될 수 있다. 이러한 상황이 감지되면, 추측에 근거한 락은 브로큰될 수 있다.
일단 마이크로 BTB(110)가 락온 되고, 예측에 대한 충분한 확신을 갖는 경우, 마이크로 BTB(110)는 전원을 차단하거나, 메인 BTB(215), 가상 BTB들(270) 및/또는 메인 조건 예측자(265)와 같은 메인 예측 구조들의 전원 차단을 야기할 수 있다. 충분한 확신에 더하여 TLB들, L1 명령 캐시 태그 어레이들 등의 전원 차단과 같은 전원 최적화들이 수행될 수 있다. 이 상황에서도 실행 유닛은 분기 예측들의 정확성을 계속해서 확인할 수 있다. 마이크로 BTB(110)는 마이크로 BTB 락이 브로큰될 때까지 프론트 엔드 커밋 파이프라인(front end commit pipeline)의 전원을 차단시키고, 마이크로 BTB 그래프 및 CAM 포스트 커밋(post-commit)기능들을 모두 정지시키고, 오직 마이크로 BTB 예측들에만 전력을 쓸 수 있다. 이것은 프로세서에서 실행되는 많은 프로그램들에 대한 상당한 전력 절감을 제공한다.
도 7의 마이크로 BTB 파이프라인(700)에 나타낸 것처럼, 제1 락 스테이지(705) 뒤에는 제2 락 스테이지(710)가 올 수 있다. 제2 락 스테이지(710) 뒤에는 제3 락 스테이지(715)가 올 수 있다. 제1 락 스테이지(705)에서 멀티 플렉서(725)는 마이크로 BTB 락 온 링크 신호(735, micro BTB lock on link signal) 및 다음 그래프 쌍 판독 선택(720)을 수신하고, 이 중에서 선택할 수 있다. 멀티플렉서(725)는 하나 이상의 마이크로 BTB 그래프 다음 쌍 페어 판독(730)을 출력할 수 있다. 멀티플렉서(725)는 다음 그래프 쌍 판독 선택(720)에 의해 제어될 수 있다.
제2 락 스테이지(710)에서, 디커플링 큐(115)는 하나 이상의 마이크로 BTB 그래프 다음 쌍 판독(730)을 수신할 수 있다. 디커플링 큐(115)는 큐(772) 및 멀티플렉서(775)를 포함할 수 있다. 멀티플렉서(775)는 큐(772)의 출력 및 하나 이상의 마이크로 BTB 그래프 다음 쌍 판독들(730)과 관련된 정보를 수신하고, 이 중에서 선택할 수 있다. 멀티플렉서(775)는 DQ 엠티 신호(780, DQ empty signal)에 의해 제어될 수 있다. 디커플링 큐(115)는 디커플링 큐 헤드 NEXT_IA 페치 매치 신호(770, decoupling queue head NEXT_IA fetch match signal)를 포함하거나 생성할 수 있다. 제3 락 스테이지(715)에서, NEXT_IA 멀티플렉서(785)는 디커플링 큐(115)로부터 출력된 정보를 수신할 수 있다. 멀티플렉서(785)는 디커플링 큐 헤드 NEXT_IA 페치 매치 신호(770)에 의해 제어될 수 있다.
본 발명의 일 실시예에서, 마이크로 BTB 파이프 라인(700)은 마이크로 BTB 조건 분기 상태 섹션(755)을 포함할 수 있다. 마이크로 BTB 조건 분기 상태 섹션(755)은 제1 락 스테이지(705) 및 제2 락 스테이지(710), 및 제3 락 스테이지(715)에 걸쳐있을 수 있다. 제1 락 스테이지(705)에서, 마이크로 BTB 조건 예측자 판독(740)이 발생할 수 있다. 제2 락 스테이지(710)에서, 후속 예측 업데이트(745)가 수행될 수 있다. 760에서, 제1 후속 예측 포워드가 수행될 수 있다. 765에서, 제2 후속 예측 포워드가 수행될 수 있다. 제3 락 스테이지(715)에서, 하나 이상의 마이크로 BTB 그래프 다음 예측 쓰기들(750)이 수행될 수 있다.
도 8은 본 발명의 일 실시예에 따른 하나의 예측자 분류에서 다른 것으로의 상태 천이들의 예시적인 구현을 나타낸 상태도(800)이다. 도 1, 2, 3 및 8에 관하여 논의한다.
마이크로 BTB 그래프(305)의 조건 분기 예측자(375)는 몇몇의 구성 요소들을 가질 수 있다. 몇몇의 구성 요소들은 마이크로 BTB(110)와 관련된 분기들 예측하는데 사용될 수 있다. 예를 들어, 조건 분기 예측자(375)는 정적 예측자(static predictor) 또는 예측 상태에 있는 분기들을 포함할 수 있다. 분기들은 항상 테이큰으로 예측(835)되는 상태 안에서 테이큰(예를 들어, 815)으로서 항상 분석되고, 메인 예측자(265) 또는 실행 유닛이 마이크로 BTB(110) 예측을 낫-테이큰으로 리디렉션할 때까지 테이큰으로서 예측될 수 있다. 정 반대로, 조건 분기 예측자(375)가 정적 예측자 또는 예측 상태에 있는 분기들을 포함할 수 있다. 분기들은 항상 낫 테이큰으로 예측 (825)되는 상태 안에서 낫 테이큰(예를 들어, 805)으로서 항상 분석되고, 메인 예측자(265) 또는 실행 유닛이 마이크로 BTB(110)를 다른 예측으로 리디렉션할 때까지 낫 테이큰으로서 예측될 수 있다.
또 다른 실시예에서, 조건 분기 예측자(375)는 높게 바이어스된 조건 분기 예측자 또는 예측 상태에 있는 분기들을 포함할 수 있다. 분기들은 동적 특성을 나타내지만, 테이큰 또는 낫 테이큰 분기들이 오랫동안 지속되고, 대부분 테이큰으로 예측(840)되는 상태 또는 대부분 낫 테이큰으로 예측(830)되는 상태로 분류될 수 있다. 대부분 테이큰으로 예측(840)되는 상태의 분기들은 그들의 행동이 변화할 때까지 항상 테이큰으로서 예측될 수 있다. 유사하게 대부분 낫 테이큰으로 예측(830)되는 상태의 분기들은 낫 테이큰된 것으로 예측될 수 있다.
또 다른 실시예예서, 조건 분기 예측자(375)는 루프 조건 분기 예측자 또는 예측 상태에 있는 분기들을 포함할 수 있다. 분기들은 동적 특성을 나타내지만 뒤에 하나의 낫 테이큰 출력이 오는 맥스 케이던스(MAX_CADENCE)보다 작거나 같은 수의 테이큰 출력들의 반복되는 시퀀스를 가질 수 있고, 루프들로서 분류될 수 있고, 루프 예측자(845)에 의해 예측될 수 있다.
또 다른 실시예에서, 조건 분기 예측자(375)는 안티-루프 조건 분기 예측자 또는 예측 상태에 있는 분기들을 포함할 수 있다. 분기들은 동적 특성을 나타내지만 뒤에 하나의 테이큰 출력이 오는 맥스 케이던스(MAX_CADENCE)보다 작거나 같은 수의 낫 테이큰 출력들이 반복되는 시퀀스를 가질 수 있고, 안티 루프들로서 분류될 수 있고, 안티-루프 예측자(850)에 의해 예측될 수 있다.
또 다른 실시예에서, 조건 분기 예측자(375)는 하나 이상의 동적 조건 분기 예측자들 또는 분기들의 예측들을 포함할 수 있다. 분기들은 동적 특성을 나타내지만, 테이큰 또는 낫 테이큰 방향에 대한 강한 바이어스 또는 테이큰 또는 낫 테이큰 케이던스(cadence)가 없고, 하나 이상의 조건 분기 예측자들(855)을 사용하여 예측될 수 있다.
또 다른 실시예에서, 조건 분기 예측자(375)는 동적 조건 한계 추측 상태(860, dynamic conditional limit speculation state)에 있는 동적 분기(dynamic branch)들을 포함할 수 있다. 동적 분기들은 정확성이 그들이 정확하게 예측하는 시점(예를 들어, 높은 정확성)에 이르도록 향상될 때까지는 낫 테이큰으로 예측되는 동적 조건 분기 예측자와 함께 정확하게 예측될 수 없다. (예를 들어, 낮은 정확성)
분기의 시퀀스 출력들은 포스트 커밋에서 검사될 수 있고, 분기들을 위의 클래스들로 분류하기 위해 사용될 수 있다. 하나의 예측자 분류에서 다른 것으로의 상태 천이들의 구현을 보여주는 상태도가 아래에 제공된다.
도 9는 본 발명의 일 실시예에 따른 마이크로 BTB를 사용하는 마이크로 프로세서의 메인 프론트 엔드 로직 섹션에 대한 제로 버블 조건 분기예측을 수행하는 기술에 대한 플로우 차트(900)이다. 이 기술은 (905)에서 시작할 수 있다. 마이크로 BTB는 마이크로프로세서의 메인 프론트 엔드 로직 섹션의 메인 BTB에 의해 생성된 예측 정보와 분리된 예측 정보를 생성할 수 있다(905). 디커플링 큐는 예측 정보를 수신하고, 대기하도록 할 수 있다(910). 디커플링 큐는 예측 정보를 마이크로프로세서의 메인 프론트 엔드 로직 섹션으로 제공할 수 있다(915). 마이크로프로세서의 메인 프론트 엔드 로직 섹션은 프로그램을 페치할 수 있다(920). 마이크로 BTB의 그래프의 하나 이상의 엔트리들은 프로그램의 내부 부분에 대응하는 분기를 나타낼 수 있다. 마이크로 BTB의 그래프의 하나 이상의 엔트리들 각각은 테이큰 방향의 제1 다음 분기에 대한 제1 링크 포인터 및 낫 테이큰 방향의 제2 다음 분기에 대한 제2 링크 포인터를 포함할 수 있다(930).
마이크로 BTB의 CAM의 하나 이상의 아이템들은 CAM의 주어진 아이템 안의 분기가 새로운 시드로서 그래프에 삽입되는 것을 보증하기에 충분히 핫(hot)한지를 가르키는 가중치를 포함할 수 있다(935). 마이크로 BTB는 상태 비트(status bit)가 CAM의 주어진 아이템 안의 분기가 그래프 안에 아직 존재하지 않는 다는 것을 나타내는 경우 충분히 핫한 분기를 그래프 안에 새로운 시드로서 삽입할 수 있다(940). 마이크로 BTB는 상태 비트가 CAM의 주어진 아이템 안에 분기가 그래프 안에 이미 존재하는 것을 나타내는 경우 의도적으로 충분히 핫한 분기를 그래프에 새로운 시드로서 삽입하지 않을 수 있다(945).
도 9에 도시된 단계들은 도시된 순서대로 발생하지 않을 수 있고, 도시된 순서와 다른 순서대로 발생할 수도 있고, 또한 중간에 단계가 추가될 수도 있는 것으로 이해될 수 있다.
도 10은 마이크로프로세서(도1의 100)의 프론트 엔드를 포함하는 컴퓨팅 시스템(1000)의 블록도이다. 컴퓨팅 시스템(1000)은 클락(1010), 랜덤 액세스 메모리(1015, random access memory (RAM)), 유저 인터페이스(1020, user interface), 베이스 밴드 칩셋(baseband chipset)과 같은 모뎀(1025, modem), 솔리드 스테이트 드라이브/디스크(1040, solid state drive/disk), 및/또는 프로세서(1035), 시스템 버스(1005)에 전기적으로 결합될 수 있는 어떤 것 또는 모든 것들을 포함할 수 있다. 컴퓨팅 시스템(1000)의 프로세서(1035)는 도 1의 프론트 엔드(105)를 포함할 수 있다. 프론트 엔드는 시스템 버스(1005)와 전기적으로 결합될 수 있다. 프론트 엔드(105)는 클락(1010), 랜덤 액세스 메모리(1015), 유저 인터페이스(1020), 모뎀(1025), 솔리드 스테이트 드라이브/디스크(1040), 및/또는 프로세서(1035)를 포함하거나 인터페이스 할 수 있다.
본 발명의 다른 실시예에서, 마이크로 BTB는 조건 예측자를 포함할 필요가 없다. 그러한 구현은 제로 버블 예측들을 만들기 위해서 꽤 작을 수 있고, 그 사이즈 예측들을 만들기 위한 몇몇의 기회들을 놓치는 것을 야기할 수 있다. 이것은 아주 드물게 메인 예측 구조들의 전원 게이트를 오프할 수 있다. 이러한 실시예에서, 마이크로 BTB는 높게 바이어스된 테이큰 분기들 및 항상 테이큰 분기들만을 포함할 수 있다.
본 발명의 또 다른 실시예에서, 루프 버퍼가 사용될 수 있다. 루프 버퍼는 프로그램의 내부 루프들을 캡쳐할 수 있다. 몇몇의 실시예들은 루프 종료를 예측하기 위한 조건 예측자들을 포함할 수 있다. 루프 버퍼는 프로그램의 핫 내부 부분 안의 모든 명령들을 반드시 포함해야 한다는 단점이 있다. 다른 한편으로, 마이크로 BTB는 단지 마이크로 BTB 그래프에 맞는 분기 명령들만을 요구한다. 프로그램의 핫 내부 부분 안의 명령들의 실제 수와 무관하다. 이것은 마이크로 BTB가 루프 버퍼에 의해 정확하게 예측되지 않은 분기들과 함께 매우 복잡한 프로그램 그래프를 캡쳐할 뿐만 아니라 꽤 큰 루프를 캡쳐할 수 있다는 것을 의미한다.
몇몇 실시예들은 메인 프론트 엔드 로직 섹션을 갖는 마이크로 프로세서의 프론트 엔드를 포함할 수 있다. 메인 프론트 엔드 로직 섹션은 메인 분기 타겟 버퍼(main branch target buffer, BTB)를 포함할 수 있다. 프론트 엔드는 메인 프론트 엔드 로직 섹션의 메인 BTB와 분리된 마이크로 BTB를 포함할 수 있고, 예측 정보를 생성하도록 구성될 수 있다. 프론트 엔드는 마이크로 BTB 및 메인 프론트 엔드 로직 섹션과 결합된 디커플링 큐를 포함하고, 예측 정보를 수신 및 대기하도록 하고, 대기하는 예측 정보를 메인 프론트 엔드 로직 섹션으로 제공하도록 구성될 수 있다. 마이크로 BTB는 하나 이상의 엔트리들을 포함하는 그래프 및 하나 이상의 아이템들을 갖는 내용 주소화 기억 장치(content addressable memory, CAM)를 포함할 수 있다. 메인 프론트 엔드 로직 섹션은 페치 프로그램으로 구성될 수 있다. 마이크로 BTB의 그래프의 하나 이상의 엔트리들 각각은 프로그램의 내부 안에 대응하는 분기들을 나타낼 수 있다. 마이크로 BTB의 그래프의 하나 이상의 엔트리들 각각은 테이큰 방향의 제1 다음 분기에 대한 제1 링크 포인터 및 낫 테이큰 방향의 제2 다음 분기에 대한 제2 링크 포인터를 포함할 수 있다.
본 발명의 일 실시예에서, 마이크로 BTB의 그래프의 하나 이상의 엔트리들 각각은 테이큰 방향의 제1 다음 분기에 대한 제1 링크 포인터와 관련된 제1 유효 비트, 및 낫 테이큰 방향의 제2 다음 분기에 대한 제2 링크 포인터와 관련된 제2 유효 비트를 포함할 수 있다. 본 발명의 일 실시예에서, 마이크로 BTB의 그래프는 제1 링크 포인터가 유효할 때 제1 유효 비트들의 집합으로 구성되고, 제2 링크 포인터가 유효할 때, 제2 유효 비트들의 집합으로 구성될 수 있다.
본 발명의 일 실시예에서, 마이크로 BTB의 그래프의 하나 이상의 엔트리들 각각은 제1 다음 분기를 예측하기 위해 제1 링크 포인터를 따라갈지 또는 제2 다음 분기를 예측하기 위해 제2 링크 포인터를 따라갈지를 나타내도록 구성된 다음 예측 비트를 포함할 수 있다. 본 발명의 일 실시예에서, 마이크로 BTB의 그래프의 하나 이상의 엔트리들 각각은 두 개의 분기들이 동시에 예측되었다는 것을 나타내도록 구성된 쌍 비트를 포함할 수 있다.
본 발명의 일 실시예에서, 마이크로 BTB의 CAM의 하나 이상의 아이템들 각각은 CAM의 주어진 아이템 안의 분기가 새로운 시드로서 그래프에 삽입되는 것을 보증하기에 충분히 핫(hot)한지를 가르키는 가중치를 포함할 수 있다. 본 발명의 일 실시예에서, 마이크로 BTB의 CAM의 하나 이상의 아이템들 각각은 CAM의 주어진 아이템 안의 분기가 그래프 안에 이미 존재하거나 아직 존재하지 않는다는 것을 나타내는 상태 비트(status bit)를 포함할 수 있다. 본 발명의 일 실시예에서, 마이크로 BTB는 상태 비트가 CAM의 주어진 아이템 안의 분기가 그래프 안에 아직 존재하지 않는다는 것을 나타내는 경우 충분히 핫한 분기를 그래프 안에 새로운 시드로서 삽입할 수 있다.
본 발명의 일 실시예에서, 마이크로 BTB는 상태 비트가 CAM의 주어진 아이템 안의 분기가 그래프 안에 이미 존재 한다는 것을 나타내는 경우 충분히 핫한 분기를 그래프 안에 새로운 시드로서 삽입하지 않을 수 있다. 본 발명의 일 실시예에서, 마이크로 BTB의 CAM의 하나 이상의 아이템들 각각은 유효 비트를 포함할 수 있다. 유효 비트는 CAM의 주어진 아이템이 마이크로 BTB의 그래프에 할당되었는지 여부를 나타내도록 구성될 수 있다. 본 발명의 일 실시예에서, 메인 프론트 엔드 로직 섹션은 메인 예측자를 포함할 수 있다.
본 발명의 일 실시예에서, 마이크로 BTB의 조건 분기 예측자는 고정된 예측 상태, 즉, 항상 테이큰 상태 안에서 테이큰으로서 항상 분석되고, 메인 예측자 또는 실행 유닛이 마이크로 BTB 예측을 낫-테이큰으로 리디렉션할 때까지 테이큰으로서 예측되는 분기들을 포함할 수 있다.
본 발명의 일 실시예에서, 마이크로 BTB의 조건 분기 예측자는 높게 바이어스된 조건 분기 예측 상태, 즉, 동적 특성을 나타내지만 테이큰 또는 낫 테이큰 분기들이 오랫동안 지속되고, 대부분 테이큰 또는 대부분 낫 테이큰 분기들로 분류되는 분기들을 포함할 수 있다.
본 발명의 일 실시예에서, 마이크로 BTB의 조건 분기 예측자는 루프 조건 분기 예측 상태, 즉, 동적 특성을 나타내지만 뒤에 하나의 낫 테이큰 출력이 오는 한계치보다 작거나 같은 수의 테이큰 출력들이 반복되는 시퀀스를 갖고, 루프들로서 분류되고, 루프 예측자에 의해 예측되는 분기들을 포함할 수 있다.
본 발명의 일 실시예에서, 마이크로 BTB의 조건 분기 예측자는 안티-루프 조건 분기 예측 상태, 즉, 동적 특성을 나타내지만 뒤에 하나의 테이큰 출력이 오는 한계치보다 작거나 같은 수의 낫 테이큰 출력들이 반복되는 시퀀스를 가질 수 있고, 안티 루프들로서 분류되고, 안티-루프 예측자에 의해 예측되는 분기들을 포함할 수 있다.
다음 설명은 특정 양상이 구현될 수 있는 적합한 기계 또는 기계들의 간략하고, 일반적인 설명을 제공하도록 의도된다. 일반적으로 기계 또는 기계들은 프로세서들과 부착된 시스템 버스, 메모리(예를 들어, 랜덤 액세스 메모리(RAM), 읽기 전용 메모리(ROM), 또는 다른 상태 보존 매체), 저장 장치들, 비디오 인터페이스, 및 입/출력 인터페이스 포트들을 포함할 수 있다. 기계 또는 기계들의 적어도 일부는 예를 들어, 키보드들, 마우스들 등과 같은 종래의 입력 장치들에 의한 입력뿐만 아니라 다른 기계로부터 수신한 지시들, 가상 현실 환경과 함께 상호작용, 생체 피드백 또는 다른 입력 신호에 의해 제어될 수 있다. 본원에 사용되는, "기계"라는 용어는 단일 기계, 가상 기계, 또는 기계들, 가상 기계들, 또는 함께 동작하는 장치들과 통신적으로 결합된 기계들의 시스템 등을 광범위하게 포함할 수 있다. 예시적인 기계들은 개인 컴퓨터들, 워크스테이션들, 서버들, 휴대용 컴퓨터들, 핸드 헬드 장치들, 휴대폰들, 타블렛들 등과 같은 컴퓨팅 장치들뿐만 아니라 예를 들어, 자동차, 기차, 택시 등과 같은 개인 또는 대중 교통 등과 같은 운송 장치들을 포함할 수 있다.
기계 및 기계들은 프로그램 가능 또는 프로그램 불가능한 로직 장치들 또는 어레이들, 주문형 반도체들(Application Specific Integrated Circuits, ASICs), 임베디드 컴퓨터들, 스마트 카드들 등과 같은 임베디드 컨트롤러들을 포함할 수 있다. 기계 및 기계들은 네트워크 인터페이스, 모뎀 또는 다른 통신 연결들과 같은 하나 이상의 원격 기계들에 하나 이상의 연결들을 이용할 수 있다. 기계들은 물리적인 방법, 및/또는 인터넷, 인트라넷, 근거리 네트워크, 광원 네트워크 등과 같은 논리적 네트워크와 같은 방법으로 상호 접속될 수 있다. 당업자는 네트워크 통신은 다양한 유선 및 라디오 주파수, 위성, 마이크로 웨이브, 전기 전자 기술자 협회(Institute of Electrical and Electronics Engineers (IEEE)) 545.11, 블루투스, 광학, 적외선, 케이블, 레이저를 포함하는 것들 등과 같은 단 거리 또는 장 거리 케리어들 및 프로토콜들 무선 통신을 이용할 수 있다는 것을 알 수 있을 것이다.
실시예들은 기계 수행 업무들 또는 정의된 추상 데이터형(defining abstract data types) 또는 로우-레벨 하드웨어 콘텍스트(low-level hardware context)들에 의해 엑세스할 때 기능, 절차들, 데이터 구조들, 애플리케이션 프로그램들 등을 포함한 관련 데이터와 함께 또는 이를 참조하여 설명될 수 있다. 관련 데이터는 휘발성 및/또는 비휘발성 메모리에 저장될 수 있다. 예를 들어, RAM, ROM 등, 또는 다른 저장 장치들, 하드 드라이브들, 플로피 디스크들, 광학 저장 장치, 테이프들 플래시 메모리, 메모리 스틱들, 디지털 비디오 디스크들, 생물학적 저장 등 그들과 연관된 저장 매체일 수 있다. 관련 데이터는 전송 환경들을 통해 전달될 수 있다. 전송 환경들은 물리적 및/또는 패킷들, 직렬 데이터, 병렬 데이터, 전파 싱호 등과 같은 형태의 논리적 네트워크를 포함할 수 있다. 관련 데이터는 압축 및 포맷을 암호화하는데 사용될 수 있다. 관련 데이터는 분산 환경에서 사용될 수 있고, 기계 엑세스를 위해 지역적 및/또는 원격으로 저장될 수 있다.
도시된 실시예들을 참조하여 다양한 원리들이 도시하고 설명하였고, 도시된 실시예들은 이러한 원리들을 벗어나지 않고 배열 및 세부 사항들이 변경될 수 있고, 임의의 방식으로 조합될 수 있다. 그리고 또한 전술한 것은 특정 실시예에 초점을 맞추고 있지만, 다른 구성이 고려될 수도 있다. 특히, "본 발명의 일 실시예에 따르면" 또는 이와 유사하게 사용된 표현들은, 일반적으로 실시 가능성들을 참조하는 것으로 사용되고, 특정 실시예의 구성에 한정시키려는 것은 아니다. 본원에서 사용되는 이러한 용어들은 동일 또는 다른 실시예들을 참조할 수 있고, 다른 실시예들과 결합될 수 있다.
본 발명의 일 실시예들은 하나 또 그 그 이상의 프로세서들에 의해 실행 가능한 명령들을 포함하는 기계 판독 가능 기록 매체(non-transitory machine-readable medium)를 포함하고, 명령들은 본원에 기재된 구성들을 수행하기 위한 명령들을 포함할 수 있다.
전술한 예시적인 실시예들은 제한하는 것으로 해석되어서는 안 된다. 몇 가지 실시예들이 설명되었지만, 당업자들은 본 발명의 신규한 개시 및 장점으로부터 벗어나지 않고 많은 변형이 가능하다는 것을 쉽게 이해할 것이다. 따라서 이러한 모든 변경은 특허 청구 범위에서 정의된 다양한 실시예들의 범위 내에 포함되는 것으로 의도된다.
100: 마이크로 프로세서 105: 프론트 엔드
110: 마이크로 BTB 115: 디커플링 큐
120: 예측 정보 125: 메인 프론트 엔드 로직 섹션
130: 프로그램

Claims (19)

  1. 메인 분기 타겟 버퍼(main branch target buffer, 이하 BTB)를 포함하는 메인 프론트 엔드 로직 섹션(main front end logic section);
    상기 메인 프론트 엔드 로직 섹션의 상기 메인 BTB와 분리되고, 예측 정보를 생성하는 마이크로 BTB; 및
    상기 마이크로 BTB 및 상기 메인 프론트 엔드 로직 섹션과 결합되고, 상기 예측 정보를 수신 및 대기( queue)하도록 구성되고, 상기 메인 프론트 엔드 로직 섹션으로 대기하는 상기 예측 정보를 제공하는 디커플링 큐(decoupling queue)를 포함하는 마이크로프로세서의 프론트 엔드.
  2. 제1 항에 있어서,
    상기 마이크로 BTB는,
    하나 이상의 엔트리들을 포함하는 그래프; 및
    하나 이상의 아이템들을 포함하는 내용 주소화 기억 장치(content addressable memory, 이하 CAM)를 포함하는 마이크로프로세서의 프론트 엔드.
  3. 제2 항에 있어서,
    상기 메인 프론트 엔드 로직 섹션은 프로그램을 페치하고,
    상기 마이크로 BTB의 상기 그래프의 상기 하나 이상의 엔트리들 각각은 상기 프로그램의 내부 부분 안에 대응하는 분기를 나타내는 마이크로프로세서의 프론트 엔드.
  4. 제3 항에 있어서,
    상기 마이크로 BTB의 상기 그래프의 상기 하나 이상의 엔트리들 각각은,
    테이큰 방향의 제1 다음 분기에 대한 제1 링크 포인터, 및 낫 테이큰 방향의 제2 다음 분기에 대한 제2 링크 포인터를 포함하는 마이크로프로세서의 프론트 엔드.
  5. 제4 항에 있어서,
    상기 마이크로 BTB의 상기 그래프의 상기 하나 이상의 엔트리들 각각은 상기 테이큰 방향의 상기 제1 다음 분기에 대한 상기 제1 링크 포인터와 관련된 제1 유효 비트, 및 상기 낫 테이큰 방향의 상기 제2 다음 분기에 대한 상기 제2 링크 포인터와 관련된 제2 유효 비트를 포함하고,
    상기 마이크로 BTB의 상기 그래프는 상기 제1 링크 포인터가 유효할 때 상기 제1 유효 비트들의 집합으로 구성되고, 상기 제2 링크 포인터가 유효할 때, 상기 제2 유효 비트들의 집합으로 구성되는 마이크로프로세서의 프론트 엔드.
  6. 제5 항에 있어서,
    상기 마이크로 BTB의 상기 그래프의 상기 하나 이상의 엔트리들 각각은 상기 제1 다음 분기를 예측하기 위해 상기 제1 링크 포인터를 따라갈지 또는 상기 제2 다음 분기를 예측하기 위해 상기 제2 링크 포인터를 따라갈지를 나타내도록 구성된 다음 예측 비트를 포함하는 마이크로프로세서의 프론트 엔드.
  7. 제3 항에 있어서,
    상기 마이크로 BTB의 상기 그래프의 상기 하나 이상의 엔트리들 각각은, 두 개의 분기들이 동시에 예측되었다는 것을 나타내도록 구성된 쌍 비트를 포함하는 마이크로프로세서의 프론트 엔드.
  8. 제2 항에 있어서,
    상기 마이크로 BTB의 상기 CAM의 상기 하나 이상의 아이템들 각각은 상기 CAM의 주어진 아이템 안의 분기가 새로운 시드로서 상기 마이크로 BTB의 상기 그래프 안으로 삽입하는 것을 보장하기에 충분히 핫(hot)한지를 가르키는 가중치를 포함하는 마이크로프로세서의 프론트 엔드.
  9. 제8 항에 있어서,
    상기 마이크로 BTB의 상기 CAM의 상기 하나 이상의 아이템들 각각은
    상기 CAM의 주어진 아이템 안의 분기가 상기 마이크로 BTB의 상기 그래프 안에 이미 존재하거나 아직 존재하지 않다는 것을 나타내는 상태 비트(status bit)를 포함하는 마이크로프로세서의 프론트 엔드.
  10. 제9 항에 있어서,
    상기 마이크로 BTB는 상기 상태 비트가 상기 CAM의 상기 주어진 아이템 안의 분기가 상기 그래프 안에 아직 존재하지 않는다는 것을 나타내는 경우 충분히 핫한 상기 분기를 상기 그래프 안에 새로운 시드로서 삽입하고,
    상기 마이크로 BTB는 상기 상태 비트가 상기 CAM의 상기 주어진 아이템 안의 분기가 상기 그래프 안에 이미 존재한다는 것을 나타내는 경우 충분히 핫한 상기 분기를 상기 그래프 안에 새로운 시드로서 삽입하지 않는 마이크로프로세서의 프론트 엔드.
  11. 제2 항에 있어서,
    상기 마이크로 BTB의 상기 CAM의 상기 하나 이상의 아이템들 각각은 상기 CAM의 주어진 아이템이 상기 마이크로 BTB의 상기 그래프에 할당되었는지 여부를 나타내도록 구성된 유효 비트를 포함하는 프론트 엔드.
  12. 제1 항에 있어서,
    상기 메인 프론트 엔드 로직 섹션은 메인 예측자를 포함하고,
    상기 마이크로 BTB는 조건 분기 예측자를 포함하는 마이크로프로세서의 프론트 엔드.
  13. 제12 항에 있어서,
    상기 마이크로 BTB의 상기 조건 분기 예측자는 분기들이 항상 테이큰 상태에서 항상 테이큰으로 분석되고, 상기 메인 예측자 또는 실행 유닛이 상기 마이크로 BTB의 예측을 낫 테이큰 상태로 리디렉션할 때까지 테이큰으로 예측되는 고정된 예측 상태를 포함하는 마이크로프로세서의 프론트 엔드.
  14. 제12 항에 있어서,
    상기 마이크로 BTB의 상기 조건 분기 예측자는 분기들이 동적 특성을 나타내지만, 테이큰 또는 낫 테이큰 분기들이 오랫동안 지속되고, 대부분 테이큰 또는 대부분 낫 테이큰 분기들로 분류되는 높은 바이어스 조건 분기 예측 상태를 포함하는 마이크로프로세서의 프론트 엔드.
  15. 제12 항에 있어서,
    상기 마이크로 BTB의 상기 조건 분기 예측자는 분기들이 동적 특성을 나타내지만 뒤에 하나의 낫 테이큰 출력이 오는 한계치보다 작거나 같은 수의 테이큰 출력들이 반복되는 시퀀스를 갖고, 루프들로서 분류되고, 루프 예측자에 의해 예측되는 루프 조건 분기 예측 상태를 포함하는 마이크로프로세서의 프론트 엔드.
  16. 제12 항에 있어서,
    상기 마이크로 BTB의 상기 조건 분기 예측자는 분기들이 동적 특성을 나타내지만 뒤에 하나의 테이큰 출력이 오는 한계치보다 작거나 같은 수의 낫 테이큰 출력들이 반복되는 시퀀스를 가질 수 있고, 안티 루프들로서 분류되고, 안티-루프 예측자에 의해 예측되는 안티-루프 조건 분기 예측 상태를 포함하는 마이크로프로세서의 프론트 엔드.
  17. 마이크로 BTB를 사용하는 마이크로프로세서의 메인 프론트 엔드 로직 섹션에 대한 제로 버블 조건 분기 예측을 수행하기 위한 컴퓨터 구현 방법에 있어서,
    상기 방법은,
    상기 마이크로 BTB에 의해 상기 마이크로프로세서의 상기 메인 프론트 엔드 로직 섹션의 메인 BTB에 의해 생성된 예측 정보와 다른 예측 정보를 생성하는 단계;
    디커플링 큐에 의해 상기 마이크로 BTB로부터 상기 예측 정보를 수신하는 단계;
    상기 디커플링 큐에 의해 상기 마이크로 BTB로부터 상기 예측 정보를 대기하도록 하는 단계; 및
    상기 디커플링 큐에 의해 대기하는 상기 예측 정보를 상기 마이크로프로세서의 상기 메인 프론트 엔드 로직 섹션으로 제공하는 단계를 포함하는 컴퓨터 구현 방법.
  18. 제17 항에 있어서,
    상기 마이크로 BTB는 그래프 및 CAM을 포함하고,
    상기 방법은,
    상기 메인 프론트 엔드 로직 섹션에 의해 프로그램을 페치하는 단계;
    상기 마이크로 BTB의 상기 그래프의 하나 이상의 엔트리들에 의해 상기 프로그램의 내부 부분 안에 대응하는 분기들을 나타내는 단계;
    상기 마이크로 BTB의 상기 그래프의 상기 하나 이상의 엔트리들 각각은 테이큰 방향의 제1 다음 분기에 대한 제1 링크 포인터, 및 낫 테이큰 방향의 제2 다음 분기에 대한 제2 링크 포인터를 포함하는 단계; 및
    상기 마이크로 BTB의 상기 CAM의 상기 하나 이상의 아이템들 각각은 상기 CAM의 주어진 아이템 안의 분기가 새로운 시드로서 상기 마이크로 BTB의 상기 그래프 안으로 삽입하는 것을 보장하기에 충분히 핫(hot)한지를 가르키는 가중치를 포함하는 단계를 더 포함하는 컴퓨터 구현 방법.
  19. 제18 항에 있어서,
    상기 마이크로 BTB에 의해 상태 비트가 상기 CAM의 상기 주어진 아이템 안의 상기 분기가 상기 그래프 안에 아직 존재하지 않는다는 것을 나타내는 경우 충분히 핫한 상기 분기를 상기 그래프 안에 새로운 시드로서 삽입하는 단계; 및
    상기 마이크로 BTB에 의해 상기 상태 비트가 상기 CAM의 상기 주어진 아이템 안의 분기가 상기 그래프 안에 이미 존재한다는 것을 나타내는 경우 충분히 핫한 상기 분기를 상기 그래프 안에 새로운 시드로서 삽입하지 않는 단계를 포함하는 컴퓨터 구현 방법.
KR1020160075908A 2015-06-26 2016-06-17 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법 KR102635965B1 (ko)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US201562185535P 2015-06-26 2015-06-26
US201562185530P 2015-06-26 2015-06-26
US62/185,535 2015-06-26
US62/185,530 2015-06-26
US201562216352P 2015-09-09 2015-09-09
US62/216,352 2015-09-09
US15/047,617 2016-02-18
US15/047,617 US10402200B2 (en) 2015-06-26 2016-02-18 High performance zero bubble conditional branch prediction using micro branch target buffer

Publications (2)

Publication Number Publication Date
KR20170001602A true KR20170001602A (ko) 2017-01-04
KR102635965B1 KR102635965B1 (ko) 2024-02-13

Family

ID=57651449

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160075908A KR102635965B1 (ko) 2015-06-26 2016-06-17 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법

Country Status (2)

Country Link
KR (1) KR102635965B1 (ko)
CN (1) CN106293639B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110096129A (zh) * 2018-01-30 2019-08-06 三星电子株式会社 计算设备

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11481221B2 (en) * 2018-05-02 2022-10-25 Micron Technology, Inc. Separate branch target buffers for different levels of calls
US20210149676A1 (en) * 2019-11-14 2021-05-20 Higon Austin R&D Center Corporation Branch Prediction Method, Branch Prediction Unit and Processor Core
CN115617402B (zh) * 2022-11-18 2023-04-07 北京数渡信息科技有限公司 一种适用于通用处理器的解耦合分支预测方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020083310A1 (en) * 1998-10-12 2002-06-27 Dale Morris Method and apparatus for predicting loop exit branches
US20080209190A1 (en) * 2007-02-28 2008-08-28 Advanced Micro Devices, Inc. Parallel prediction of multiple branches
US20090222645A1 (en) * 2008-02-29 2009-09-03 Moyer William C Metric for selective branch target buffer (btb) allocation
US20130332713A1 (en) * 2012-06-12 2013-12-12 International Business Machines Corporation Fast index tree for accelerated branch prediction
US20150121050A1 (en) * 2013-10-25 2015-04-30 Advanced Micro Devices, Inc. Bandwidth increase in branch prediction unit and level 1 instruction cache

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6601161B2 (en) * 1998-12-30 2003-07-29 Intel Corporation Method and system for branch target prediction using path information
CN1270233C (zh) * 2003-12-24 2006-08-16 智慧第一公司 远跳跃及远呼叫指令的退回分支预测机制的处理器及方法
US7676663B2 (en) * 2004-03-09 2010-03-09 International Business Machines Corporation Method, system and program product for pipelined processor having a branch target buffer (BTB) table with a recent entry queue in parallel with the BTB table
US20110078425A1 (en) * 2009-09-25 2011-03-31 Shah Manish K Branch prediction mechanism for predicting indirect branch targets
KR20120064446A (ko) * 2010-12-09 2012-06-19 삼성전자주식회사 컴퓨팅 시스템 상의 바이트코드의 분기 처리 장치 및 방법

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020083310A1 (en) * 1998-10-12 2002-06-27 Dale Morris Method and apparatus for predicting loop exit branches
US20080209190A1 (en) * 2007-02-28 2008-08-28 Advanced Micro Devices, Inc. Parallel prediction of multiple branches
US20090222645A1 (en) * 2008-02-29 2009-09-03 Moyer William C Metric for selective branch target buffer (btb) allocation
US20130332713A1 (en) * 2012-06-12 2013-12-12 International Business Machines Corporation Fast index tree for accelerated branch prediction
US20150121050A1 (en) * 2013-10-25 2015-04-30 Advanced Micro Devices, Inc. Bandwidth increase in branch prediction unit and level 1 instruction cache

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110096129A (zh) * 2018-01-30 2019-08-06 三星电子株式会社 计算设备

Also Published As

Publication number Publication date
CN106293639A (zh) 2017-01-04
CN106293639B (zh) 2022-01-11
KR102635965B1 (ko) 2024-02-13

Similar Documents

Publication Publication Date Title
US10402200B2 (en) High performance zero bubble conditional branch prediction using micro branch target buffer
US6502185B1 (en) Pipeline elements which verify predecode information
JP5335946B2 (ja) 電力的に効率的な命令プリフェッチ機構
US7685410B2 (en) Redirect recovery cache that receives branch misprediction redirects and caches instructions to be dispatched in response to the redirects
JP5357017B2 (ja) 高速で安価なストア−ロード競合スケジューリング及び転送機構
EP2602711B1 (en) Next fetch predictor training with hysteresis
JP5255367B2 (ja) 分岐先アドレス・キャッシュを備えたプロセッサおよびデータを処理する方法
US6721877B1 (en) Branch predictor that selects between predictions based on stored prediction selector and branch predictor index generation
KR101081674B1 (ko) 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법
TWI651648B (zh) 用於使用串流長度預測之分支預測器搜尋資格之電腦程式產品、電腦實施方法及系統
US20080072024A1 (en) Predicting instruction branches with bimodal, little global, big global, and loop (BgGL) branch predictors
US20180349144A1 (en) Method and apparatus for branch prediction utilizing primary and secondary branch predictors
US6647490B2 (en) Training line predictor for branch targets
KR102635965B1 (ko) 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법
JP2009536770A (ja) ブロックに基づく分岐先アドレスキャッシュ
US20170090936A1 (en) Method and apparatus for dynamically tuning speculative optimizations based on instruction signature
KR20150110337A (ko) 미스 후 미스의 검색을 가속화하기 위해 레벨2 캐시에서 레벨2 분기 목적지 버퍼를 분리하는 장치 및 그 방법
Adiga et al. The ibm z15 high frequency mainframe branch predictor industrial product
Perais et al. Elastic instruction fetching
US20040168043A1 (en) Line predictor which caches alignment information
US6546478B1 (en) Line predictor entry with location pointers and control information for corresponding instructions in a cache line
US6721876B1 (en) Branch predictor index generation using varied bit positions or bit order reversal
CN113448626B (zh) 推测分支模式更新方法和微处理器
US6636959B1 (en) Predictor miss decoder updating line predictor storing instruction fetch address and alignment information upon instruction decode termination condition
US10318303B2 (en) Method and apparatus for augmentation and disambiguation of branch history in pipelined branch predictors

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant