KR20090009955A - 블록-기반 브랜치 타겟 어드레스 캐시 - Google Patents

블록-기반 브랜치 타겟 어드레스 캐시 Download PDF

Info

Publication number
KR20090009955A
KR20090009955A KR1020087029812A KR20087029812A KR20090009955A KR 20090009955 A KR20090009955 A KR 20090009955A KR 1020087029812 A KR1020087029812 A KR 1020087029812A KR 20087029812 A KR20087029812 A KR 20087029812A KR 20090009955 A KR20090009955 A KR 20090009955A
Authority
KR
South Korea
Prior art keywords
branch
instructions
btac
processor
instruction
Prior art date
Application number
KR1020087029812A
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 KR20090009955A publication Critical patent/KR20090009955A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/46Multiprogramming arrangements

Abstract

브랜치 타겟 어드레스 캐시(Branch Target Address Cache : BTAC)는 복수의 엔트리들을 저장하고, 각각의 엔트리는 취해진 것으로서 평가되는 적어도 하나의 브랜치 명령을 포함하는 둘 이상의 명령들의 블록과 연관된다. 상기 BTAC 엔트리는 상기 연관된 블록 내의 어느 명령이 취해진 브랜치 명령인지에 대한 표시자를 포함한다. 상기 BTAC 엔트리는 또한 상기 취해진 브랜치의 브랜치 타겟 어드레스(BTA)를 포함한다. 상기 블록 크기는, 반드시 그럴 필요는 없지만, 명령 캐시 라인당 명령들의 개수에 대응한다.

Description

블록-기반 브랜치 타겟 어드레스 캐시{BLOCK-BASED BRANCH TARGET ADDRESS CACHE}
본 발명은 일반적으로는 프로세서들의 분야에 관한 것이고 구체적으로는 블록-기반 브랜치 타겟 어드레스 캐시에 관한 것이다.
마이크로 프로세서들은 매우 다양한 어플리케이션들에서 계산 작업들을 수행한다. 프로세서 계산 성능 향상은, 개선된 소프트웨어를 통해 더 고속 동작 및/또는 증가된 기능성들을 실현함으로써 생산성 향상을 끌어내기 위한, 설계 목적이다. 이동식 전자 디바이스들과 같은 일반적인 임베디드 어플리케이션들에서, 전력 절감 및 칩 크기 감소 역시 프로세서 설계 및 구현에 있어서 중요한 목적들이다.
일반적인 현대 프로세서들은 파이프라인 아키텍쳐를 사용하는데, 각각이 다수의 실행 단계들을 가지는 순차적(sequential) 명령들은 실행시 오버랩된다. 순차적 명령 스트림 내의 명령들 가운데 병렬성(parallelism)을 사용하기 위한 이러한 능력은 개선된 프로세서의 성능에 기여한다. 이상적인 조건들 내에서, 그리고, 파이프라인을 채우는(filling) 간단한 초기 프로세서에 후속하는, 한 사이클 내 각각의 파이프 스테이지를 완료하는 프로세서 내에서, 명령은 매 사이클의 실행을 완료할 수 있다.
이러한 이상적인 조건들은, 명령들 간의 데이터 의존성들(데이터 위험성들), 브랜치들과 같은 제어 의존성들(제어 위험성들), 프로세서 자원 할당 충돌들(구조적 위험성들), 인터럽트들, 캐시 미스들 등과 같은 다양한 인자들로 인해, 만약 있다 할지라도, 실제로 드물게 구현된다. 프로세서 설계의 주요 목적은 이들 위험성들을 회피하고, 파이프라인을 "풀(full)"로 유지하는 것이다.
실제 프로그램들은 브랜치 명령들을 포함할 수 있는데, 상기 브랜치 명령들은 무조건인 혹은 조건적인 브랜치 명령들을 포함할 수 있다. 브랜치 명령들의 실제 브랜치 행동은 상기 명령이 파이프라인에서 깊이 평가될 때까지는 종종 알려지지 않는다. 이는 파이프라인을 중지(stall)시키는 제어 위험을 생성하는데, 왜냐하면 상기 프로세서는 어느 명령들이 브랜치 명령에 후속하여 패치될지를 알지 못하고, 상기 브랜치 명령이 평가될 때까지 모를 것이기 때문이다. 일반적인 현대 프로세서들은 다양한 형태들의 브랜치 예측을 사용하는데, 이에 의해 조건적 브랜치 명령들의 브랜치 행동 및 브랜치 타겟 어드레스들이 파이프라인에서 조기에 예측된다. 상기 프로세서는, 상기 브랜치 예측에 기반하여, 명령들을 추론적으로 패치하고 실행하여, 따라서 상기 파이프라인을 풀로 유지한다. 만약 상기 예측이 올바르다면, 성능이 최대화되고 전력 소모가 최소화된다. 상기 브랜치 명령이 실제로 평가되는 경우, 만약 상기 브랜치가 잘못 예측되었다면, 상기 추론적으로 패치된 명령들은 상기 파이프라인으로부터 쏟아져 나와야(flush)하고, 새로운 명령들은 올바른 브랜치 타겟 어드레스로부터 패치된다. 잘못 예측된 브랜치들은 프로세서 성능 및 전력 소모에 악영향을 미친다.
브랜치 예측에 대한 두 가지 컴포넌트들이 있다 : 조건 평가 및 브랜치 타겟 어드레스. 상기 조건 평가(물론 조건 브랜치 명령들에만 연관됨)은 이진 결정인데, 즉, 상기 브랜치는 실행이 상이한 코드 시퀀스로 점프하도록 취해지거나, 혹은 상기 프로세서가 상기 조건 브랜치 명령에 후속하는 다음 순차적 명령들을 실행하는 경우 취해지지 않는다. 상기 브랜치 타겟 어드레스(BTA)는 것으로 평가되는 무조건 브랜치 명령 혹은 조건 브랜치 명령 중 어느 하나에 대한 제어 브랜치들에 대한 어드레스이다. 몇몇 브랜치 명령들은 명령 op-코드 내 BTA를 포함하거나 혹은 오프셋을 포함하는데, 상기 오프셋에 의해 상기 BTA가 용이하게 계산될 수 있다. 다른 브랜치 명령들에 대해, 상기 BTA는 파이프라인 깊숙이까지 계산되지 않으므로 따라서 예측되어야 한다.
BTA 예측의 한가지 알려진 기술은 브랜치 타겟 어드레스 캐시(Branch Target Address Cache)이다. 당해 분야에 알려진 BTAC는 단일 BTA를 포함하는 각각의 데이터 위치(혹은 캐시 "라인")를 사용하여 브랜치 명령 어드레스(BIA)의해 인덱스된(indexed), 완전히 결합적인(associative) 캐시이다. 브랜치 명령이 파이프라인에서 취해진 것으로서 평가되고 상기 브랜치 명령의 실제 BTA가 계산되는 경우, (예를 들어, 라이트-백(write-back) 파이프라인 스테이지 동안) 상기 BIA 및 BTA는 상기 BTAC에 기록된다. 새로운 명령들을 패치할 때, 상기 BTAC는 명령 캐시(혹은 I-캐시)와 병렬로 액세스된다. 상기 명령 어드레스가 BTAC에 도달(hit)하는 경우, 상기 프로세서는 상기 명령이 브랜치 명령(이는 디코딩된 I-캐시로부터 패치된 명령 이전임) 및 예측된 BTA가 제공되는 것을 아는데, 이는 브랜치 명령의 이전 실행 의 실제 BTA이다. 만약 브랜치 예측 회로가 취해진 브랜치를 예측한다면, 명령 패치는 상기 예측된 BTA에서 시작한다. 만약 상기 브랜치가 취해지지 않는 것으로 예측된다면, 명령 패치는 순차적으로 계속된다.
상기 용어 BTAC는 또한 BIA와 포화(saturation) 카운터를 연관시켜서 조건 평가 예측(즉, 취해지거나 취해지지 않음)만을 제공하는 캐시를 표시하기 위해 당해분야에서도 사용된다는 점을 주목하라. 이는 본 명세서에서 사용된 이 용어의 의미는 아니다.
고성능 프로세서들은 상기 I-캐시로부터 동시에 하나 초과의 명령을 패치할 수 있다. 예를 들어, 4개의 명령들을 포함할 수 있는, 전체 캐시 라인은 명령 패치 버퍼로 패치될 수 있는데, 상기 버퍼는 상기 명령들을 상기 파이프라인으로 순차적으로 제공한다. 본 발명의 양수인에게 양도되고 본 명세서에 참조로 통합된 특허 출원 번호 제 11/089,072호는 각각의 캐시 라인에 둘 이상의 BTA들을 저장하고, 상기 BTA들 중 어느 것이 BTAC 도달에 대해 예측된 BTA로서 취해지는지를 결정하기 위해 브랜치 예측 오프셋 테이블(BPOT)을 인덱스하는 BTAC를 개시한다. 상기 BPOT는 다수의 판독 포트들을 구비한 BTAC의 비용이 드는 하드웨어 구조를 회피하는데, 이는 다수의 BTA들을 병렬로 액세스하는데 일반적이다.
명령들의 공통 그룹들 혹은 블록들이 완전히, 혹은 심지어 공통으로, 브랜치 명령들 중에서 만들어지지 않았으므로, 상기 블록 내 각각의 명령들에 대해 BTAC 내에 개별 BTA 저장소를 제공하는 것은 BTAC의 메모리 셀들을 낭비하는 것이다. 그러나, 블록-패치 명령들이, 블록 내 명령이 무조건 브랜치 명령인지 혹은 취해진 것으로서 평가되고 그 BTA를 획득하는 조건 브랜치 명령인지의 여부를 결정할 때 상기 BTAC를 액세스하는 것은 브랜치 예측 및 프로세서 성능에 대해 유익하다.
하나 이상의 실시예들에 따르면, 브랜티 타겟 어드레스 캐시(BTAC)는 복수의 엔트리들을 저장하는데, 각각의 엔트리는 취해진 것으로 평가되는 적어도 하나의 브랜치 명령(즉, 무조건 브랜치 명령 또는 취해진 것으로서 파이프라인에서 이전에 평가되었던 조건 프랜치 명령 중 어느 하나)을 포함하는 둘 이상의 명령들의 블록과 연관된다. BTAC 엔트리는 상기 취해진 브랜치의 브랜치 타겟 어드레스(BTA) 및, 상기 연관된 블록 내의 어느 명령이 그 브랜치인가에 대한 표시자를 포함한다. 상기 명령 블록 크기는, 반드시 그럴 필요는 없지만 매 명령 캐시 라인 당 명령들의 개수에 대응한다. 각각의 BTAC 엔트리는 상기 블록 내의 명령들의 공통 비트들(즉, 절단된 최하위 비트들을 가지는 명령 어드레스들)에 의해 인덱스된다.
일 실시예는 프로세서 내의 조건 브랜치 명령들을 예측하는 방법에 관한 것이다. 취해진 것으로 평가되는 적어도 하나의 브랜치 명령을 포함하는 둘 이상의 명령들의 블록과 연관된 엔트리는 BTAC에 저장된다. 명령을 패치할 때, 상기 BTAC는 상기 대응하는 블록 내의 명령이 취해진 브랜치 명령인지의 여부를 결정하기 위해 액세스된다.
또다른 실시예는 프로세서에 관한 것이다. 상기 프로세서는 복수의 엔트리들을 저장하는 BTAC를 포함하는데, 각각의 BTAC 엔트리는 취해진 것으로 평가되는 적어도 하나의 브랜치 명령을 포함하는 둘 이상의 블록들과 연관된다. 상기 프로세서는 또한 하나 이상의 명령들을 패치할 때 절단된 명령 어드레스를 가지고 BTAC를 인덱스하도록 동작하는 명령 실행 파이프라인을 포함한다.
도 1은 프로세서의 일 실시예의 기능 블록도.
도 2는 브랜치 타겟 어드레스 캐시 및 부수적인 회로들의 일 실시예의 기능 블록도.
도 1은 프로세서(10)의 기능 블록도를 도시한다. 상기 프로세서(10)는 제어 로직(11)에 따라 명령 실행 파이프라인(12)에서 명령들을 실행한다. 몇몇 실시예들에서, 상기 파이프라인(12)은 복수의 병렬 파이프라인들을 가지는 수퍼스칼라 설계일 수 있다. 상기 파이프라인(12)은 파이프라인 스테이지들에서 정렬된 다양한 레지스터들 혹은 래치들(16), 및 하나 이상의 산술 논리 유닛(ALU)(18)을 포함한다. 범용 레지스터(GPR) 파일(20)은 메모리 계층의 톱(top) 부분을 포함하는 레지스터들을 제공한다.
상기 파이프라인(12)은 명령측 변환 색인 버퍼(Instruction-side Translation Lookaside Buffer: ITLB)(24)에 의해 관리되는 메모리 어드레스 변환 및 허가를 가지고, 명령 캐시(I-캐시)(22)로부터 명령들을 패치한다. 동시에, 상기 파이프라인(12)은 절단된(truncated) 명령 어드레스들을 블록-기반 브랜치 타겟 어드레스 캐시(Branch Target Address Cache : BTAC)(25)에 제공한다. 만약 상기 절단된 어드레스가 BTAC(25)에 도달하면(hit), 상기 BTAC(25)는 브랜치 타겟 어드 레스(BTA)를 I-캐시(22)로 제공하여, 예측된 BTA로부터 즉시 명령들을 패치하기 시작한다. 상기 블록-기반 BTAC(25)의 구조 및 동작은 아래에서 더 상세하게 설명된다.
데이터는 주(main) 변환 색인 버퍼(TLB)(28)에 의해 관리된 메모리 어드레스 변환 및 허가를 가지고, 데이터 캐시(D-캐시)(26)로부터 액세스된다. 다양한 실시예들에서, 상기 ITLB는 상기 TLB의 일부분의 복제를 포함한다. 대안적으로 상기 ITLB 및 TLB는 통합될 수 있다. 유사하게, 상기 프로세서(10)의 다양한 실시예들에서, 상기 I-캐시(22) 및 D-캐시(26)는 통합되거나 일체화될 수 있다. I-캐시(22) 및/또는 D-캐시(26)에서의 미스(miss)들은 메모리 인터페이스(30)의 제어하에, 메인(오프-칩) 메모리(32)로의 액세스를 야기한다.
상기 프로세서(10)는 다양한 주변 장치들(36,38)로의 액세스를 제어하는 입력/출력(I/O) 인터페이스(34)를 포함할 수 있다. 당업자라면 상기 프로세서(10)의 수많은 변경들이 가능하다는 점을 인지할 것이다. 예를 들어, 상기 프로세서(10)는 I 및 D 캐시들(22,26) 중 어느 하나 혹은 둘 다를 위한 제 2 레벨(L2) 캐시를 포함할 수 있다. 추가적으로, 프로세서(10)에 도시된 기능 블록들 중 하나 이상은 특정 실시예로부터 생략될 수 있다.
브랜치 명령들은 몇몇 코드에 대해 공통이다. 몇몇 추정들에 의해, 한 브랜치가 5개 명령들 중 하나에 공통일 수 있다. 따라서, 조기 브랜치 검출, (조건 브랜치 명령들에 대한) 브랜치 평가 예측, 및 예측된 BTA로부터 명령들을 패치하는 것은 프로세서 성능에 중요할 수 있다. 일반적인 현대 프로세서들은 각각의 캐시 라인마다 복수의 명령들을 저장하는 I-캐시(22)를 포함한다. 전체 라인(혹은 그 이상)은 동시에 상기 I-캐시로부터 패치될 수 있다. 본 발명의 목적을 위해, I-캐시(22)가 캐시 라인당 4개의 명령을 저장한다고 가정하지만, 이 예는 예시적일 뿐이며 제한적이지 않다. 모든 4개의 명령 어드레스들에 대해 병렬로 검색하기 위한 종래 기술의 BTAC에 액세스하는 것은, 만약 4개의 어드레스들 모두가 BTAC에 도달하는 경우, 4개의 어드레스 비교 입력 포트들, 4개의 BTA 출력 포트들, 및 상기 블록과 연관된 최대 4개의 BTA들로부터 BTA를 선택하기 위한 다중화기 및 제어 로직을 요구한다. 4개의 브랜치 명령들의 블록이 드물지만, 본 명세서에서 교지된 바와 같은 BTAC는 상기 가능성을 수용한다.
하나 이상의 실시예들에 따라, 블록-기반 BTAC(25)는 각각의 BTAC(25) 캐시 라인에서의 명령들의 블록(예를 들어, 4개)과 연관된 취해진 브랜치 정보를 저장한다. 이 정보는 상기 블록 내의 적어도 하나의 명령이 취해진 것으로 평가되는 브랜치 명령(블록-기반 BTAC(25) 내의 도달(hit)로서 표시됨), 상기 블록 내의 어느 명령이 취해진 브랜치인지에 대한 표시자, 및 그것의 BTA라는 사실을 포함한다.
도 2는 블록-기반 BTAC(25), I-캐시(22), 파이프라인(12) 및 브랜치 예측 논리 회로(15)의 기능 블록도(이는, 예를 들어, 제어 로직(11)의 일부분을 포함할 수 있음)를 도시한다. 이 예에서, 명령들(A-L)은 상기 I-캐시(22)내 3개의 라인들에 상주한다. 상기 명령들은 상기 블록도의 왼쪽에 리스트된다. 이 예의 블록-기반 BTAC(25)에서, 상기 BTAC(25) 블록 크기는 상기 I-캐시(22) 라인 길이 - 4개의 명령들 - 에 대응하지만, 이러한 대응이 일반적이지는 않다. 도 2의 상기 블록-기반 BTAC(25) 내의 각각의 엔트리는 3개의 컴포넌트들 : 각각의 블록 내의 4개의 명령들의 공통 명령 어드레스 비트들을 포함하는 태그 필드(즉, 절단된 2개의 최하위 비트들을 가지는 명령 어드레스), 블록 내 명령들 중 어느 것이 취해진 브랜치인지를 나타내는 브랜치 표시자, 및 상기 취해진 브랜치 명령에 대응하는 브랜치 타겟 어드레스(BTA)를 포함한다.
BTAC(25) 내의 제 1 엔트리는 명령들 A,B,C, 및 D를 포함하는 I-캐시(22)의 제 1 라인에 대응한다. 이들 중, 명령 C는 취해진 것으로서 평가되는 브랜치 명령이다. 명령 C는 10의 브랜치 표시자 어드레스에 의해 취해진 브랜치로서 식별된다(다른 실시예들에서, 상기 브랜치 표시자는, 예컨대 0010과 같은 디코딩된 포맷에 있을 수 있다). 상기 블록-기반 BTAC(25)은 추가적으로 상기 명령 C의 브랜치 타겟 어드레스(BTAC)를 추가적으로 저장한다.
상기 I-캐시(22) 의 제 2 라인에 있는 명령들 - E,F,G또는 H - 중 어느것도 브랜치 명령이 아니다. 따라서, 이 캐시 라인에 대응하는 어떠한 엔트리도 상기 블록-기반 BTAC(25)에 존재하지 않는다.
상기 블록-기반 BTAC(25)에 있는 제 2 엔트리는, 명령들 I,J,K 및 L을 포함하여, 상기 I-캐시(22)의 제 3 라인에 대응한다. 이 블록 내에서, 명령들 I 및 L 모두는 브랜치 명령들이다. 이 예에서, 명령 L은 계속 취해진 것으로 평가되고, 상기 블록-기반 BTAC(25)는 BTAL을 저장하고, 블록 내 제 4 명령을 11의 브랜치 식별자 값에 의해 취해진 브랜치로서 식별한다.
동작시, 파이프라인 내 디코딩/패치 로직(13)은 상기 I-캐시(22)로부터 다음 명령들의 그룹을 패치하기 위한 명령 어드레스를 생성한다. 동시에 패치된 모든 명령들의 공통 어드레스 비트들을 포함하는 절단된 명령 어드레스는 상기 블록 기반 BTAC(25)의 태그 필드에 비교된다. 만약 상기 절단된 어드레스가 상기 블록-기반 BTAC(25) 내의 태그에 매치한다면, 대응하는 브랜치 표시자는 상기 블록 내 어느 명령이 취해진 브랜치 명령인지를 나타내기 위해 상기 디코딩/패치 로직(13)에 제공된다. 상기 표시자는 또한, 상기 브랜치 예측 로직(15)에 제공된다. 동시에, 상기 BTAC 엔트리의 BTA는 I-캐시(22)에 제공되어 상기 BTA로부터 추론적인 패치를 즉시 시작하고 상기 브랜치가 예측된 바와 같이 취해지는 이벤트에서 파이프라인을 풀로 유지한다.
상기 브랜치 명령은 상기 파이프라인(12) 내의 실행 스테이지의 로직(14)에서 평가된다. 상기 브랜치 평가은 브랜치 예측 로직(15)에 제공되어 실제 브랜치 행동에 대해 상기 브랜치 로직을 업데이트한다. 상기 EXE 로직(14)은, 만약 취해진 것으로 평가되는 경우, 상기 브랜치 명령의 BTA를 추가적으로 계산하고 제공한다. 상기 브랜치 예측 로직(15)은 자신의 예측 테이블들(예를 들어, 브랜치 히스토리 레지스터, 브랜치 예측 테이블, 포화 카운터 등)을 업데이트하고, 추가적으로 블록-기반 BTAC(25)를 업데이트한다. 특히,상기 브랜치 예측 로직(15)은, 취해진 것으로 평가되는 각각의 새로운 브랜치 명령에 대해, 4개의 명령들의 블록에 대응하는, 상기 블록-기반 BTAC(25) 내에 새로운 엔트리를 생성하고, 기존 엔트리들에 대한 상기 블록-기반 BTAC(25)의 브랜치 표시자 및/또는 BTA 필드들을 업데이트한 다.
상기 블록-기반 BTAC(25) 내의 각각의 엔트리는, 따라서, 취해진 것으로 평가되는 적어도 하나의 브랜치 명령을 포함하는 명령들의 블록과 연관된다. 각각의 엔트리는 상기 블록 내의 상기 명령들의 공통 비트들을 포함하는 태그를 포함한다. 상기 블록-기반 BTAC(25) 태그들에 대해 비교하기 위한 절단된 명령 어드레스를 사용하여, 상기 I-캐시(22)로부터 하나 이상의 명령들을 패치함과 동시에 상기 블록-기반 BTAC(25)를 액세스함으로써, 상기 프로세서(10)는 상기 블록 내의 임의의 명령이 취해진 브랜치 명령인지의 여부 및 블록 내 어느 명령이 그 명령인지에 대해 확인할 수 있다. 추가적으로, 상기 프로세서(10)는 상기 취해진 브랜치의 BTA로부터의 명령들의 추론적 패치, 전체 파이프라인의 유지 및 다시 상기 브랜치가 취해진 것으로 평가되는 곳에서의 성능을 최적화하는 것을 즉시 시작할 수 있다. BTAC엔트리들과 연관된 명령들의 블록 구조는 종래의 BTAC 엔트리들을 사용하여 동일한 기능을 달성하는데 요구되는 3개의 입력 포트, 3개의 출력 포트, 및 하나의 출력 다중화기를 제거하는데, 각각은 단일 취해진 브랜치 명령에 전용된다.
본 명세서에서 사용된 바와 같이, 일반적으로, 브랜치 명령은 조건 혹은 무조건 브랜치 명령 중 어느 하나를 지칭할 수 있다. 본 명세서에서 사용된 바와 같이, "취해진 브랜치", "취해진 브랜치 명령" 혹은 "취해진 것으로 평가되는 브랜치 명령"은 무조건 브랜치 명령 혹은 순차적 명령 실행 흐름을 비 순차적 어드레스로 전환시키는 것으로(즉, 취해지지 않는 것에 반대하는 것으로서 취해짐)서 평가된 조건적 브랜치 명령 중 어느 하나를 지칭한다.
본 발명은 본 명세서에서 본 발명의 특정 특징들, 양상들 및 실시예들에 관해 설명되었지만, 본 발명의 넓은 범위 내에서 수많은 변경들, 수정들 및 다른 실시예들이 가능하고, 따라서, 모든 변경들, 수정들 및 다른 실시예들이 본 발명의 범위 내에 있는 것으로 간주된다는 점이 명백할 것이다. 따라서, 본 실시예들은, 제한적인 것이 아닌 예시적인 것으로서 모든 양상들 내에서 해석될 것이며, 첨부된 청구항들의 의미 및 등가 범위 내에 있는 모든 변경들이 본 발명에 포함되는 것으로서 의도된다.

Claims (19)

  1. 프로세서에서 브랜치 명령들을 예측하는 방법으로서,
    브랜치 타겟 어드레스 캐시(Branch Target Address Cache : BTAC)에 엔트리를 저장하는 단계 - BTAC 엔트리는 취해진 것으로서 평가되는 적어도 하나의 브랜치 명령을 포함하는 둘 이상의 명령들의 블록과 연관됨 - ;
    명령들의 그룹을 패치(fetching)할 때, 대응하는 블록 내의 명령이 취해진 브랜치 명령인지의 여부를 결정하기 위해 상기 BTAC를 액세스하는 단계를 포함하는,
    프로세서에서 브랜치 명령들을 예측하는 방법.
  2. 제1항에 있어서,
    각각의 BTAC 엔트리는 블록 내의 모든 명령들의 상기 어드레스들의 공통 비트들을 포함하는 태그를 포함하는,
    프로세서에서 브랜치 명령들을 예측하는 방법.
  3. 제2항에 있어서,
    상기 BTAC를 액세스하는 단계는 모든 BTAC 엔트리들의 태그들과 패치된 상기 명령의 어드레스의 대응하는 비트들을 비교하는 단계를 포함하는,
    프로세서에서 브랜치 명령들을 예측하는 방법.
  4. 제1항에 있어서,
    연관된 블록 내의 어느 명령들이 취해진 브랜치 명령인지에 대한 표시자를 각각의 BTAC 엔트리에 저장하는 단계를 추가적으로 포함하는,
    프로세서에서 브랜치 명령들을 예측하는 방법.
  5. 제1항에 있어서,
    연관된 블록 내의 취해진 브랜치 명령의 브랜치 타겟 어드레스(BTA)를 각각의 BTAC 엔트리에 저장하는 단계를 추가적으로 포함하는,
    프로세서에서 브랜치 명령들을 예측하는 방법.
  6. 제5항에 있어서,
    상기 BTAC를 액세스한 이후, 상기 BTA로부터 명령들을 패치하는 단계를 추가적으로 포함하는,
    프로세서에서 브랜치 명령들을 예측하는 방법.
  7. 제1항에 있어서,
    각각의 명령 블록은 명령 캐시 라인에 대응하는,
    프로세서에서 브랜치 명령들을 예측하는 방법.
  8. 복수의 엔트리들을 저장하는 브랜치 타겟 어드레스 캐시(Branch Target Address Cache : BTAC) - 각각의 BTAC 엔트리는 취해진 것으로서 평가되는 적어도 하나의 브랜치 명령을 포함하는 둘 이상의 명령들의 블록과 연관됨 - ; 및
    하나 이상의 명령들을 패치할 때 절단된 명령 어드레스를 사용하여 상기 BTAC을 인덱스(index)하도록 동작하는 명령 실행 파이프라인을 포함하는,
    프로세서.
  9. 제8항에 있어서,
    각각의 BTAC 엔트리는 블록 내 모든 명령들의 상기 어드레스들의 공통 비트들을 포함하는 태그를 포함하는,
    프로세서.
  10. 제8항에 있어서,
    각각의 BTAC 엔트리는 연관된 블록 내의 어느 명령이 취해진 명령인지에 대한 표시자를 포함하는,
    프로세서.
  11. 제8항에 있어서,
    각각의 BTAC 엔트리는 상기 연관된 블록 내의 취해진 브랜치 명령의 브랜치 타겟 어드레스(Branch Target Address : BTA)를 포함하는,
    프로세서.
  12. 제8항에 있어서,
    각각의 명령 블록은 명령 캐시 라인에 대응하는,
    프로세서.
  13. 프로세서 내의 브랜치 명령들을 예측하기 위한 프로세서로서,
    브랜치 타겟 어드레스 캐시(BTAC) 내에 엔트리를 저장하기 위한 수단 - BTAC 엔트리는 취해진 것으로서 평가되는 적어도 하나의 브랜치 명령을 포함하는 둘 이상의 명령들의 블록과 연관됨 - ;
    명령들의 그룹을 패치(fetching)할 때, 대응하는 블록 내의 명령이 취해진 브랜치 명령인지의 여부를 결정하기 위해 상기 BTAC를 액세스하기 위한 수단을 포함하는,
    프로세서.
  14. 제13항에 있어서,
    각각의 BTAC 엔트리는 블록 내의 모든 명령들의 어드레스들의 공통 비트들을 포함하는 태그를 포함하는,
    프로세서.
  15. 제14항에 있어서,
    상기 BTAC를 액세스하기 위한 수단은 모든 BTAC 엔트리들의 태그들과 패치된 상기 명령들의 상기 어드레스의 대응하는 비트들을 비교하기 위한 수단을 포함하는,
    프로세서.
  16. 제13항에 있어서,
    연관된 블록 내의 어느 명령들이 취해진 브랜치 명령인지에 대한 표시자를 각각의 BTAC 엔트리에 저장하기 위한 수단을 추가적으로 포함하는,
    프로세서.
  17. 제13항에 있어서,
    연관된 블록 내의 취해진 브랜치 명령의 브랜치 타겟 어드레스(BTA)를 각각의 BTAC 엔트리에 저장하기 위한 수단을 추가적으로 포함하는,
    프로세서.
  18. 제17항에 있어서,
    상기 BTAC를 액세스한 이후, 상기 BTA로부터 명령들을 패치하기 위한 수단을 추가적으로 포함하는,
    프로세서.
  19. 제13항에 있어서,
    각각의 명령 블록은 명령 캐시 라인에 대응하는,
    프로세서.
KR1020087029812A 2006-05-10 2007-04-23 블록-기반 브랜치 타겟 어드레스 캐시 KR20090009955A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/382,527 US20070266228A1 (en) 2006-05-10 2006-05-10 Block-based branch target address cache
US11/382,527 2006-05-10

Publications (1)

Publication Number Publication Date
KR20090009955A true KR20090009955A (ko) 2009-01-23

Family

ID=38514211

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087029812A KR20090009955A (ko) 2006-05-10 2007-04-23 블록-기반 브랜치 타겟 어드레스 캐시

Country Status (7)

Country Link
US (1) US20070266228A1 (ko)
EP (1) EP2027535A1 (ko)
JP (1) JP2009536770A (ko)
KR (1) KR20090009955A (ko)
CN (1) CN101438237A (ko)
TW (1) TW200813823A (ko)
WO (1) WO2007133895A1 (ko)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080222392A1 (en) * 2007-03-09 2008-09-11 On Demand Microelectronics Method and arrangements for pipeline processing of instructions
US20080222393A1 (en) * 2007-03-09 2008-09-11 On Demand Microelectronics Method and arrangements for pipeline processing of instructions
US20090217017A1 (en) * 2008-02-26 2009-08-27 International Business Machines Corporation Method, system and computer program product for minimizing branch prediction latency
US8181005B2 (en) 2008-09-05 2012-05-15 Advanced Micro Devices, Inc. Hybrid branch prediction device with sparse and dense prediction caches
KR101337422B1 (ko) * 2009-05-15 2013-12-06 쳉두 캉홍 파마슈티칼 코., 엘티디. 심혈관 장애 치료용 약학적 조성물 및 그 용도
US20110093658A1 (en) * 2009-10-19 2011-04-21 Zuraski Jr Gerald D Classifying and segregating branch targets
US9395984B2 (en) * 2012-09-12 2016-07-19 Qualcomm Incorporated Swapping branch direction history(ies) in response to a branch prediction table swap instruction(s), and related systems and methods
US9639471B2 (en) 2012-11-27 2017-05-02 Nvidia Corporation Prefetching according to attributes of access requests
US9563562B2 (en) 2012-11-27 2017-02-07 Nvidia Corporation Page crossing prefetches
US9262328B2 (en) * 2012-11-27 2016-02-16 Nvidia Corporation Using cache hit information to manage prefetches
CN104636268B (zh) * 2013-11-08 2019-07-26 上海芯豪微电子有限公司 一种可重构缓存产品与方法
CN104657285B (zh) * 2013-11-16 2020-05-05 上海芯豪微电子有限公司 一种数据缓存系统和方法
US20170083333A1 (en) * 2015-09-21 2017-03-23 Qualcomm Incorporated Branch target instruction cache (btic) to store a conditional branch instruction
CN106406823B (zh) * 2016-10-10 2019-07-05 上海兆芯集成电路有限公司 分支预测器和用于操作分支预测器的方法
US10853076B2 (en) * 2018-02-21 2020-12-01 Arm Limited Performing at least two branch predictions for non-contiguous instruction blocks at the same time using a prediction mapping

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5538025A (en) * 1991-11-05 1996-07-23 Serec Partners Solvent cleaning system
US5530825A (en) 1994-04-15 1996-06-25 Motorola, Inc. Data processor with branch target address cache and method of operation
JP3494736B2 (ja) * 1995-02-27 2004-02-09 株式会社ルネサステクノロジ 分岐先バッファを用いた分岐予測システム
JPH10133874A (ja) * 1996-11-01 1998-05-22 Mitsubishi Electric Corp スーパスカラプロセッサ用分岐予測機構
EP1305707A1 (en) * 2000-07-21 2003-05-02 Koninklijke Philips Electronics N.V. Data processor with branch target buffer
US7707397B2 (en) * 2001-05-04 2010-04-27 Via Technologies, Inc. Variable group associativity branch target address cache delivering multiple target addresses per cache line
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
US7124287B2 (en) * 2003-05-12 2006-10-17 International Business Machines Corporation Dynamically adaptive associativity of a branch target buffer (BTB)
US20040250054A1 (en) * 2003-06-09 2004-12-09 Stark Jared W. Line prediction using return prediction information
JP2006048132A (ja) * 2004-07-30 2006-02-16 Fujitsu Ltd 分岐予測装置、分岐予測装置の制御方法、情報処理装置
US20060218385A1 (en) * 2005-03-23 2006-09-28 Smith Rodney W Branch target address cache storing two or more branch target addresses per index

Also Published As

Publication number Publication date
JP2009536770A (ja) 2009-10-15
CN101438237A (zh) 2009-05-20
US20070266228A1 (en) 2007-11-15
TW200813823A (en) 2008-03-16
EP2027535A1 (en) 2009-02-25
WO2007133895A1 (en) 2007-11-22

Similar Documents

Publication Publication Date Title
KR20090009955A (ko) 블록-기반 브랜치 타겟 어드레스 캐시
US10268480B2 (en) Energy-focused compiler-assisted branch prediction
US7437537B2 (en) Methods and apparatus for predicting unaligned memory access
EP2024820B1 (en) Sliding-window, block-based branch target address cache
KR101074621B1 (ko) 프로액티브 브랜치 타겟 어드레스 캐시 관리를 위한 방법들 및 장치
US7478228B2 (en) Apparatus for generating return address predictions for implicit and explicit subroutine calls
US20060218385A1 (en) Branch target address cache storing two or more branch target addresses per index
JP2008530714A5 (ko)
KR101048258B1 (ko) 가변 길이 명령 세트의 브랜치 명령의 최종 입도와 캐싱된 브랜치 정보의 관련
US6871275B1 (en) Microprocessor having a branch predictor using speculative branch registers

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
J201 Request for trial against refusal decision
J801 Dismissal of trial

Free format text: REJECTION OF TRIAL FOR APPEAL AGAINST DECISION TO DECLINE REFUSAL REQUESTED 20110117

Effective date: 20111223