KR20120058555A - 조건부 비-분기 명령들의 비-실행을 예측하기 위한 방법들 및 장치들 - Google Patents

조건부 비-분기 명령들의 비-실행을 예측하기 위한 방법들 및 장치들 Download PDF

Info

Publication number
KR20120058555A
KR20120058555A KR1020127007089A KR20127007089A KR20120058555A KR 20120058555 A KR20120058555 A KR 20120058555A KR 1020127007089 A KR1020127007089 A KR 1020127007089A KR 20127007089 A KR20127007089 A KR 20127007089A KR 20120058555 A KR20120058555 A KR 20120058555A
Authority
KR
South Korea
Prior art keywords
ecnb
command
prediction
instruction
executed
Prior art date
Application number
KR1020127007089A
Other languages
English (en)
Other versions
KR101513953B1 (ko
Inventor
브라이언 엠. 스템펠
제임스 엔. 디펜더퍼
토마스 에이. 사토리우스
데이비드 제이. 만드자크
로드니 더블유. 스미쓰
Original Assignee
콸콤 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 콸콤 인코포레이티드 filed Critical 콸콤 인코포레이티드
Publication of KR20120058555A publication Critical patent/KR20120058555A/ko
Application granted granted Critical
Publication of KR101513953B1 publication Critical patent/KR101513953B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

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)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

발행된 조건부 비-분기 명령들을 실행하지 않기 위한 효율적인 기법들이 기술된다. 조건부 비-분기 명령은 ECNB(eligible conditional non-branch) 명령이 실행되지 않을 것임을 표시하는 예측에 적격인 것으로서 식별된다. ECNB 명령은 ECNB 명령이 실행되지 않을 거라는 예측에 응답하여 NOP(no operation) 명령으로서 실행된다. ECNB 명령을 실행하는데 요구되는 소스 피연산자는 실행되지 않는다는 예측에 응답하여 패치되지 않는다.

Description

조건부 비-분기 명령들의 비-실행을 예측하기 위한 방법들 및 장치들{METHODS AND APPARATUS TO PREDICT NON-EXECUTION OF CONDITIONAL NON-BRANCHING INSTRUCTIONS}
본 개시는 일반적으로 처리기들, 특히, 조건부 비-분기 명령들을 지원하는 처리기들의 분야에 관한 것이다.
셀 전화들, 랩톱 컴퓨터들, 개인 휴대 정보 단말(PDA)들 등과 같은 다수의 휴대용 제품들은 통신 및 멀티미디어 프로그램들과 같은 프로그램들을 실행하는 처리 시스템을 이용한다. 이러한 제품들을 위한 처리 시스템은 다수의 처리기들, 명령들 및 데이터를 저장하기 위한 복합 메모리 시스템들, 제어기들, 통신 인터페이스들과 같은 주변 디바이스들, 및 예를 들어, 단일 칩 상에 구성된 고정 기능 로직 블록들을 포함할 수 있다. 동시에, 휴대용 제품들은 종종 처리 시스템에 의해 고 성능 동작들을 지원하도록 요구되는 배터리들의 형태의 제한된 에너지 소스를 갖는다. 배터리 수명을 증가시키기 위해, 가능한 효율적으로 이 동작들을 수행하는 것이 바람직하다. 다수의 휴대용 컴퓨터들은 또한 전체 에너지 소비가 감소되게 동작하도록 효율적인 설계들로 개발되고 있다.
처리기들은 일반적으로 조건부 분기 명령(conditional branching instruction)들을 포함하는 명령 세트와 함께 파이프라인 아키텍처(pipelined architecture)를 이용한다. 프로그램들은 프로그램 동작들의 흐름을 제어하기 위해 조건부 분기 명령들을 이용할 수 있다. 그러나 조건부 분기 명령들의 실행은 일반적으로 처리기의 파이프라인이 본격적으로 진행(deep)될 때까지 결정되지 않는 연관된 분기 조건의 파이프라인 계류중인 결정(pipeline pending resolution)에 버블(bubble)을 야기할 수 있다. 다수의 처리기들은 또한 조건부 분기 명령들의 성능 상실 특성들(performance robbing properties)을 완화하는데 도움을 주기 위해 조건부 비-분기 명령들을 포함한다. 비-분기 명령들의 조건부 실행은 프로그래머가, 이전에 생성된 기계 상태에 기초하여 명령을 실행할지 또는 실행하지 않을지를 특정하는 것을 허용한다. 조건부 비-분기 명령들의 이용은 조건부 분기 명령들에 대한 요구를 감소킴으로써 성능을 개선하는데 도움을 준다.
조건부 명령의 연관된 조건이 평가되고 명령이 실행되지 않아야 한다고 표시할 때, 조건부 명령에 연관된 자원들은 이미 소비되었을 수 있다. 예를 들어, 조건부 비-분기 명령을 실행하는데 요구되는 레지스터 피연산자들은 이미 패치(fetch)되었을 수 있다. 또한, 조건부 비-분기 명령은 처리기 파이프라인에서 파이프라인 종속성들을 불필요하게 야기할 수 있다. 예를 들어, 조건부 명령은, 분석할 자신의 조건을 대기하는 동안 파이프라인에서 대기(stall)될 수 있으며, 그에 의해 이 대기는 조건부 명령의 실행에 의존하는 모든 명령들에 리플(ripple)하기 위한 대기를 야기한다. 또한, 조건부 명령들이 소프트웨어 루프(software loop)에 존재할 수 있는데, 이들의 조건-분석 특성들이 루프의 반복 마다 유사한 방식으로 발생하며, 그럼으로써 상당한 성능 열화를 야기할 수 있다.
본 발명의 몇 개의 양상들 중에서도, 본 개시는 조건부 비-분기 명령들의 비-실행을 예측하기 위한 보다 효율적인 방법들 및 장치들의 제공이 처리 시스템에서의 성능을 개선시키고 전력 요건들을 감소시킬수 있다는 것을 인지한다. 이를 위해, 본 발명의 실시예는 발행된 조건부 비-분기 명령을 실행하지 않기 위한 방법을 다룬다. 조건부 비-분기 명령은 적격이 조건부 비-분기(ECNB; eligible conditional non-branch) 명령이 실행되지 않을 것임을 표시하는 예측에 대해 적격인 것으로서 식별된다. ECNB 명령은 ECNB 명령이 실행되지 않을 것이라는 예측에 응답하여 NOP(no operation) 명령으로서 실행된다.
다른 실시예는 조건부 비-분기 명령이 실행되지 않을 것임을 예측하기 위한 장치를 다룬다. 장치는 조건부 비-분기 명령을 예측에 대해 적격인 것으로서 식별하기 위한 제 1 회로를 갖는다. 장치는 평가 기준에 충족한다는 것에 응답하여 적격인 조건부 비-분기(ECNB) 명령이 실행되지 않을지 여부를 예측하기 위한 제 2 회로를 갖는다.
다른 실시예는 조건부 비-분기 명령이 실행되지 않을 것임을 예측하기 위한 방법을 다룬다. 실행할지 또는 실행하지 않을지를 예측하는데 대해 적격인 조건부 비-분기 명령이 식별된다. 평가 기준에 충족한다는 것에 응답하여 적격인 조건부 비-분기(ECNB) 명령은 실행되지 않을 것이라고 예측된다.
본 발명의 다른 실시예들은 본 발명의 다양한 실시예들이 예로서 도시되고 기술되는 이하의 상세한 설명으로부터 당업자들에게 쉽게 명백하게 될 것임이 이해된다. 실현되는 바와 같이, 본 발명은 다른 및 상이한 실시예들이 가능하고 그 몇 개의 세부사항들은, 모두가 본 발명의 사상 및 범위로부터 벗어남 없이, 다른 다양한 점에서 수정될 수 있다. 이에 따라, 도면들 및 상세한 설명은 제한으로서가 아닌 본질적으로 예시적인 것으로서 간주될 것이다.
본 발명의 다양한 양상들은 제한으로서가 아닌 예로서 첨부 도면들에서 예시된다.
도 1은 무선 통신 시스템을 예시하는 도면.
도 2는 조건부 비-분기 명령들을 실행할지 또는 실행하지 않을지를 예측하는 예시적인 처리기 시스템을 도시하는 도면.
도 3은 예시적인 ECNB(eligible conditional non-branch) 명령 예측 회로를 예시하는 도면.
도 4A는 ECNB 명령의 실행을 예측하기 위한 제 1 프로세스를 예시하는 도면.
도 4B는 ECNB 명령의 실행을 예측하기 위한 제 2 프로세스를 예시하는 도면.
도 5는 ECNB 명령의 실행을 예측하기 위한 제 3 프로세스를 예시하는 도면.
도 6은 ECNB 명령의 실행을 예측하기 위한 제 4 프로세스를 예시하는 도면.
첨부된 도면들과 관련하여 후술되는 상세한 설명은 본 발명의 다양한 예시적인 실시예들의 설명으로서 의도되며, 본 발명이 실시될 수 있는 실시예들만을 나타내는 것으로 의도되지 않는다. 상세한 설명은 본 발명의 완전한 이해를 제공할 목적을 위해 특정한 세부사항들을 포함한다. 그러나 본 발명이 이 특정한 상세들 없이 실시될 수 있다는 것이 당업자들에게 자명하게 될 것이다. 몇몇 예들에서, 잘 알려진 구조들 및 컴포넌트들은 본 발명의 개념을 모호하게 하는 것을 방지하기 위해 블록도 형태로 도시된다.
도 1은 본 발명의 실시예가 유리하게 이용될 수 있는 예시적인 무선 통신 시스템(100)을 예시한다. 예시의 목적을 위해, 도 1은 3개의 원격 유닛들(120, 130, 및 150) 및 2개의 기지국들(140)을 도시한다. 통상의 무선 통신 시스템들은 더욱 많은 원격 유닛들 및 기지국들을 가질 수 있다는 것이 인지될 것이다. 컴포넌트들(125A, 125C, 125B 및 125D)에 의해 각각 표현되는 바와 같이 하드웨어 컴포넌트들, 소프트웨어 컴포넌트, 또는 둘 다를 포함하는 원격 유닛들(120, 130, 150) 및 기지국들(140)은 추가로 후술되는 바와 같이 본 발명을 구현하도록 적응되었다. 도 1은 기지국들(140)로부터 원격 유닛들(120, 130, 및 150)로의 순방향 링크 신호들(180) 및 원격 유닛들(120, 130, 및 150)로부터 기지국들(140)로의 역방향 링크 신호들(190)을 도시한다.
도 1에서, 원격 유닛(120)은 모바일 전화로서 도시되고, 원격 유닛(130)은 휴대용 컴퓨터로서 도시되고, 원격 유닛(150)은 무선 로컬 루프 시스템의 고정 위치 원격 유닛으로서 도시된다. 예로서, 원격 유닛들은 대안적으로 셀 전화들, 호출기들, 워키토키들, 핸드헬드 개인 통신 시스템(PCS) 유닛들, 개인 휴대 정보 단말들과 같은 휴대용 데이터 유닛들 또는 미터 판독 장비(meter reading equipment)와 같은 고정 위치 데이터 유닛들일 수 있다. 도 1이 본 개시의 교시들에 따라 원격 유닛들을 예시하지만, 본 개시는 이 예시적인 도시된 유닛들로 제한되지 않는다. 본 발명의 실시예들은 조건부 비-분기 명령들을 갖는 처리기에서 적합하게 이용될 수 있다.
도 2는 조건부 비-분기 명령들을 실행할지 또는 실행하지 않을지를 예측하는 예시적인 처리 시스템(200)을 도시한다. 처리기 시스템(200)은 처리기(210), 캐시 시스템(212), 시스템 메모리(214), 및 입출력(I/O) 시스템(216)을 포함한다. 처리기(210)는 예를 들어, 명령 파이프라인(220), 조건부 비-분기 예측 로직 회로(222)를 포함한다. 캐시 시스템(212)은 예를 들어, 명령 캐시(I 캐시; 224), 메모리 제어기(226), 및 데이터 캐시(D 캐시; 228)를 포함한다. 시스템 메모리(214)는 I 캐시(224) 또는 D 캐시(228)에서 발견되지 않은 명령들 및 데이터에 대한 액세스를 제공한다. 캐시 시스템(212)은 처리기(210)와 통합될 수 있고 추가로 계층적 구조로 다수의 레벨들의 캐시들을 포함할 수 있다는 것이 주목된다. I/O 시스템(216)은 처리기(210)와 인터페이스하는 I/O 디바이스들(240 및 242)과 같은 복수의 I/O 디바이스들을 포함한다.
명령 파이프라인(220)은 패치 스테이지(230), 디코딩 스테이지(231), 발행 스테이지(232), 실행 스테이지(233), 및 완료 스테이지(234)와 같은 일련의 스테이지들로 구성된다. 당업자는 명령 파이프라인(220)의 각 스테이지(230 내지 234)가 예를 들어, 처리기의 동작 주파수, 및 각 스테이지에서 요구되는 동작들의 복잡도에 의존하여 다수의 부가적인 파이프라인 스테이지들을 포함할 수 있다는 것을 인지할 것이다. 또한, 실행 스테이지는 덧셈기, 곱셈기, 로직 연산들, 시프트 및 회전 연산들 등과 같이 하나 이상의 명령 실행 스테이지 회로들로 구성될 수 있다. 이러한 명령 실행 스테이지 회로들은 조건부 비-분기 명령들과 연관될 수 있다. 파이프라인 스테이지들 각각은 여기서 기술된 조건부 예측 방법들 및 장치로부터 벗어남 없이 변화된 구현들을 가질 수 있다.
패치 스테이지(230)는 조건부 분기 명령들 및 조건부 비-분기 명령들을 포함할 수 있는 컴퓨터 프로그램 플로우에 따라 명령 캐시(I 캐시; 224)로부터 실행을 위한 명령들을 패치한다. 일반적으로, 패치된 조건부 분기 명령은 조건부 분기가 행해질지를 예측하기 위한 분기 예측 로직을 이용한다. 조건부 비-분기 명령이 아닌 패치된 비-분기 명령은 디코딩되도록 디코딩 스테이지(231)로 진행되고, 발행 스테이지(232)에서 실행을 위해 발행되고, 실행 스테이지(233)에서 실행되고, 및 완료 스테이지(234)에서 폐기된다. 패치된 조건부 비-분기 명령은 여기서 기술된 바와 같은 조건부 비-분기 예측 로직 회로(222)를 사용하여 명령이 실행되지 않아야 하는지를 결정한다. 실행되지 않는 조건부 비-분기 명령은 조건부 비-분기 명령과 만나기 이전에 존재하였던 대로 처리기 상태를 변경하지 않는다.
조건부 비-분기 예측 로직 회로(222)는 검출 로직 회로(246), 필터(250) 및 조건 이력표(252)를 갖는 모니터링 로직 회로(248) 및 예측 및 수정 로직 회로(254)를 포함한다. 일 실시예에서, 대부분의 조건부 비-분기 명령들은 그들의 조건들이 일반적으로 소프트웨어 루프의 대부분의 반복들 동안 동일한 값으로 분석된다고 가정한다.
검출 로직 회로(246)는 일 실시예에서, 소프트웨어 루프들에서 이용된 조건부 분기 명령들의 동적 특성들에 기초하여 동작하는 소프트웨어 루프 검출기로서 기능한다. 단일의 엔트리 및 단일의 출구(exit)를 갖는 소프트웨어 루프들에서, 루프 엔딩 분기는 일반적으로 소프트웨어 루프를 나가는 마지막 반복을 제외하고, 루프의 모든 반복들에 대해 소프트웨어 루프의 시작으로 다시(back) 분기하는 조건부 분기 명령이다. 검출 로직 회로(246)는 본 출원의 양수인에게 양도되고, 발명의 명칭이 "Suppressing Update of a Branch History Register by Loop-Ending Branches"이며, 그 전체가 여기에 통합되는 미국 특허 출원 번호 제11/066,508호에서, 및 아래에서 더 상세히 기술되는 바와 같이 소프트웨어 루프들의 검출을 위한 다수의 실시예들을 가질 수 있다.
일 실시예에 따라, 조건부 분기 명령 어드레스 보다 낮은 분기 타겟 어드레스를 갖는 그에 따라 백워드 분기(backwards branch)로 고려되는 모든 조건부 분기 명령은 루프 엔딩 분기 명령이라고 가정된다. 이 실시예는 분기 타겟 어드레스가 결정될 때 어드레스 비교를 요구한다. 모든 백워드 분기들이 루프 엔딩 분기들은 아니기 때문에, 고려될 필요가 있을 수 있는 어느 정도의 부정확성이 존재한다.
다른 실시예에서, 루프 엔딩 분기는 동일한 분기 명령의 반복되는 실행을 인지함으로써 간단한 루프들에서 검출될 수 있다. 특수 용도 레지스터에서 최종 백워드 분기 명령에 대한 프로그램 카운터 값을 저장하고, 이 저장된 값을 다음 백워드 분기 명령의 명령 어드레스와 비교함으로써, 루프 엔딩 분기는 2개의 명령 어드레스들이 매칭할 때 인지될 수 있다. 코드는 소프트웨어 루프 내의 조건부 분기 명령들을 포함할 수 있기 때문에, 루프 엔딩 분기 명령의 결정은 더 복잡하게 될 수 있다. 이러한 상황에서, 다수의 특수 용도 레지스터들은 각각의 조건부 분기 명령의 명령 어드레스들을 저장하기 위한 하드웨어로 예시될 수 있다. 저장된 값들 모두와 비교함으로써, 매칭은 루프 엔딩 분기를 위해 결정될 수 있다.
루프 엔딩 분기는 또한 컴파일러 또는 어셈블러에 의해 정적으로 표시될 수 있다. 예를 들어, 일 실시예에서, 컴파일러는 고유한 연산코드(opcode)의 이용에 의해 또는 특별한 포맷 비트 필드를 설정함으로써 루프 엔딩 분기들에 대해서만 이용되는 특정 타입의 분기 명령을 생성한다. 특정한 분기 명령의 디코딩 시에, 루프 엔딩 분기가 결정된다.
모니터링 로직 회로(248)는 필터(250), 조건 이력표(CHT; 252), 연관된 모니터링 로직을 포함한다. 일 실시예에서, 모니터링 프로세스는 예측에 대해 적격인 조건부 비-분기 명령을 갖는 소프트웨어 루프의 하나 이상의 이전의 실행들에서 발생했을 수 있는 미리-특정된 조건 이벤트들의 상태 정보를 저장한다. 일 실시예에서, 조건부 비-분기 명령들 모두가 예측에 대해 적격인 것은 아닐 수 있다. 예를 들어, 마이크로코드로 구현된 조건부 비-분기 명령들은 구현 복잡성의 이유들로, 예측된 실행 동작에 대해 적격이 아닐 수 있다. 또한, 조건부 분기 명령들은, 분기 명령들이 일반적으로 여기서 기술된 예측 기법과 상이하게 동작하는 그들 자신의 예측 하드웨어 및 방법들을 갖기 때문에, 조건부 비-분기 명령 예측에 대해 적격이 아닐 것이다.
이력 정보는 ECNB(eligible conditional non-branch) 명령이 실행되지 않을 때를 예측하는데 이용된다. 더 상세히 후술되는 바와 같이, 접근법들은 ECNB 명령이 실행될지 또는 실행되지 않을지를 높은 신뢰(high confidence)로 결정하는데 이용된다. ECNB 명령이 실행되어야 할 때, ECNB 명령이 실행되지 않는다고 예측하는 것에 대한 불이익(penalty)은 ECNB 명령이 실행되지 않아야 할 때 ECNB 명령이 실행된다고 예측하는 것보다 더 심각하기 때문에 높은 신뢰 예측 방법들을 결정하기 위한 접근법들이 유리하다. 예를 들어, 실행되지 않는다고 예측된 ECNB 명령은, 선택된 ECNB 동작들을 수행하지 않음으로써 ECNB 명령이 실행되지 않는다고 예측될 때 요구되지 않을 전력을 최소화하고 및/또는 성능을 개선하기 위해 ECNB 명령과 연관된 파이프라인 동작들을 변경할 것이다. 예를 들어, 조건적 로드 명령에 의해 특정된 메모리 피연산자는 조건적 로드 명령이 실행되지 않는다고 예측되었는 경우 패치될 필요가 없을 것이다. 실행하지 않는다고 예측된 이러한 ECNB 명령에 있어서, 파이프라인은 예를 들어, 전력을 감소시키고 성능을 개선하기 위해, 명령의 실행을 위해 요구되는 임의의 레지스터 또는 메모리 피연산자들을 패치하지 않도록 적절한 파이프라인 스테이지에서 변경될 것이다. 그러나 예측된 ECNB 명령에 의해 특정된 조건이 부정확한 예측을 표시하는 경우, 파이프라인은 부정확한 예측으로 인한 효과들이 정정될 수 있는, 패치된 코드의 지점으로 적어도 플러시(flush)되어야 한다. 실행되지 않아야 할 때 실행한다고 예측된 ECNB 명령은 파이프라인 플러시(pipeline flush)를 요구하지 않지만, 오히려 부정확한 예측의 경우에 있어서, 처리기 상태가 영향을 받지 않도록 명령들을 종료한다.
조건 평가 프로세스는 미리-특정된 조건 이벤트들의 저장된 상태 정보를 평가하고, 미리-특정된 평가 기준에 충족하면, 루프에서의 다음 실행을 위해 현재의 ECNB(eligible conditional non-branch) 명령의 예측을 인에이블 한다. 예를 들어, 미리-특정된 조건 이벤트는 소프트웨어 루프가 실행될 미리 특정된 횟수 및 하나 이상의 이전의 ECNB 명령들이 연관된 조건의 상태에 기초하여 실행되지 않았는지 또는 실행되었는지 여부를 포함할 수 있다. 예를 들어, 미리-특정된 평가 기준들은 소프트웨어 루프의 반복들의 설정된 수를 충족하는 것 및 루프 반복들의 이전의 설정된 수로 만나는 이전의 ECNB 명령을 실행하지 않는 이전의 상태를 갖는 것을 포함할 수 있다. 예를 들어, 미리-특정된 평가 기준은 소프트웨어 루프의 2개의 이전 실행들에서 만나는 이전의 ECNB 명령들을 실행하지 않을 것을 요구할 수 있다. 이러한 경우에, 현재의 ECNB 명령은 소프트웨어 루프의 다음 반복에서 실행되지 않는다고 예측될 것이다.
이러한 모니터링 로직 회로(248)를 뒷받침하여, 필터(250)는 패치된 조건부 비-분기 명령이 예측된 실행에 대해 적격인지를 결정한다. 패치된 명령이 예측된 실행에 대해 적격이 아닌 경우, 패치된 명령은 예측된 정보의 도움 없이 처리기의 아키텍처에 의해 특정된 대로 실행된다. 패치된 명령이 예측된 실행에 대해 적격인 경우, CHT(252)가 인에이블된다. ECNB 명령과 연관된 CHT(252)의 엔트리가 예측 및 수정 로직 회로(254)의 부분인 예측 로직에 예측 정보를 제공하도록 선택된다. 이러한 예측 정보는 예를 들어, ECNB 명령이 파이프라인을 통해 이동함에 따라 파이프라인 스테이지들(232 내지 234)에 의해 트래킹된다.
CHT(252) 엔트리는 예측 실행에 대해 적격인 패치된 명령에 대한 실행의 이력을 레코딩한다. 예를 들어, 각 CHT 엔트리는 예측 로직으로의 입력들인 실행 상태 카운터들 및 상태 비트들로부터의 카운트 값들의 조합을 포함할 수 있다. 다수의 ECNB 명령들이, 소프트웨어 루프에 존재할 수 있기 때문에 CHT(252)는 또한 패치된 ECNB 명령이 패치된 ECNB 명령과 연관된 CHT(252)의 엔트리로 인덱싱하는 것을 허용하기 위한 인덱스 로직을 포함할 수 있다. 예를 들어, 소프트웨어 루프의 최초시작(top) 이후의 ECNB 명령들의 수를 카운트함으로써, 카운트는 CHT(252)로의 인덱스로서 이용될 수 있다. 모니터링 로직 회로(248)는 소프트웨어 루프들의 반복들을 카운팅하고 실행 상태 카운터들이 예를 들어, 강하게 실행되지 않는 상태(not-executed status)를 나타내는 특정한 카운트 값으로 포화(saturate)될 기회를 가졌음을 보장하기 위한 루프 카운터들을 포함한다. 실행 상태 카운터가 포화되는 경우, 예측 로직은 루프의 다음 반복에서 연관된 패치된(associated fetched) 조건부 비-분기 명령을 실행하지 않게 하기 위한 예측을 하도록 인에이블된다.
예측 및 수정 로직(254)은 TrI(track register issue)(262), TrE(track register execute)(263), 및 TrC(track register complete)(264)에서의 발행 스테이지(232), 실행 스테이지(233), 및 완료 스테이지(234)에서 트래킹되는 예측 정보를 생성한다. 예를 들어, ECNB 명령의 비실행을 예측시에, ECNB 명령은 예를 들어, 파이프라인 스테이지들(232 내지 234)에서 NOP(no operation) 명령으로서 효과적으로 처리된다. ECNB 명령을 NOP로서 처리함으로써, ECNB 명령이 실행될 때 요구되는 경우, 범용 레지스터들(GPR들)은 판독되지 않는데, 그 이유는 이들이 예측된 NOP 명령을 실행하는데 요구되지 않기 때문이다. ECNB 명령이 로드 또는 저장 메모리 액세스 명령이었던 경우, 메모리 액세스 동작은 예측된 NOP 명령으로서 개시되지 않는다. 예를 들어, 실행 스테이지(233)에서 동작하는 피연산자 패치 회로(235)는 실행하지 않는다는 예측에 응답하여 ECNB 명령을 실행하는데 요구되는 피연산자를 패치하는 않을 것이다. GPR들을 판독하거나 메모리에 액세스하지 않음으로써, 전력은 처리기(210)에서 감소될 수 있다. 또한, 처리기 성능은, ECNB 명령이 NOP로서 예측될 때 GPR들을 판독하거나 메모리에 액세스하지 않고 요구되지 않을 피연산자들을 불필요하게 대기하지 않음으로써 개선될 수 있다.
실행 스테이지(233)에 도달하면, ECNB 명령에 대해 특정된 실행 조건이 그 예측과 반대로 평가되는 경우, 예측된 NOP 명령의 파이프라인 실행은 정정된다. 예를 들어, 파이프라인에 대한 정정은 예측이 수행되었던 스테이지에서 시작하는 파이프라인(pipeline)의 명령들을 플러싱하는 것을 포함할 수 있다. 대안적인 실시예에서, 파이프라인은 ECNB 명령이 초기에 패치되었던 최초 패치 스테이지로부터 플러싱될 수 있다. 또한, 적절한 CHT 엔트리는 또한 부정확한 예측 이후에 정정될 수 있다.
도 3은 예시적인 ECNB(eligible conditional non-branch) 명령 예측 회로(300)를 예시한다. ECNB 예측 회로(300)는 회로들 및 회로들 간의 제어 신호 경로들을 예시한다. 보다 구체적으로, ECNB 명령 예측 회로(300)는 검출 회로(304), 모니터 회로(306), 및 예측 및 수정 회로(308)를 포함한다. 모니터 회로(306)는 필터 회로(310) 및 조건 이력표(CHT) 회로(312)를 포함한다. 예측 및 수정 회로(308)는 예측 회로(314), 트래킹 회로(316) 및 정정 회로(318)를 포함한다.
루프 검출기로서 작동하는 검출 회로(304)는 검출 로직 회로(246)에 관하여 상술한 바와 같이 루프 엔딩 분기를 검출하도록 동작한다. 예를 들어, 루프 엔딩 분기는 일반적으로 루프를 나가는 마지막 반복을 제외하고, 루프의 모든 반복들에 대해 루프의 시작으로 다시 분기하는 조건부 분기 명령이다. 각각의 식별된 루프에 관한 정보는 필터 회로(310)에 전달된다.
일 실시예에서, 필터 회로는 예를 들어, 특정 루프의 3회 반복들과 같이 소프트웨어 루프의 설정된 반복 횟수가 발생했다는 표시를 제공하는 루프 카운터이다. 루프의 각 반복에 대해서, 필터는 조건부 비-분기 명령이 예측에 대해 적격인지를 결정한다. ECNB(eligible conditional non-branch) 명령이 루프에 있는 경우, ECNB 명령을 실행하는 상태는 조건 이력표(CHT) 회로(312)에 레코딩된다. 예를 들어, 실행 상태 카운터는 ECNB 명령의 이전의 시도된 실행들의 실행 이력을 레코딩하는데 이용될 수 있다. 실행 상태 카운터는 ECNB 명령이 조건부로 실행되었다고 표시하기 위해 일 방향으로, 그리고 ECNB 명령이 조건부로 실행되지 않았다고 표시하기 위해 반대 방향으로 업데이트될 수 있다. 예를 들어, 2 비트 실행 상태 카운터가 이용될 수 있는데, 여기서 비-실행된 상태는 카운터의 감소를 야기하고 실행된 상태는 카운터의 증가를 야기한다. 실행 상태 카운터의 출력 상태(otput state)들에는 예를 들어, 이전의 ECNB 명령들이 실행되었음이 강하게 표시되는 것을 나타내기 위한 "11" 출력, 이전의 ECNB 명령들이 실행었음이 약하게 표시되는 것을 나타내기 위한 "10" 출력, 이전의 ECNB 명령들이 실행되지 않았음이 약하게 표시되는 것을 나타내기 위한 "01", 및 이전의 ECNB 명령들이 실행되지 않았음이 강하게 표시되는 것을 나타내기 위한 출력 "00"이 지정된다. 실행 상태 카운터 "11" 출력 및 "00" 출력은 포화된 출력 값들일 것이다. 실행 상태 카운터는 검출된 소프트웨어 루프의 각 ECNB 명령에 대한 상태를 제공하거나, 이 상태와 연관될 것이다. 그러나 특정한 구현은 구현에서 이용되는 실행 상태 카운터들의 수를 제한하고, 이에 따라 예측될 수 있는 ECNB 명령들의 수를 제한할 수 있다. 검출 회로(304)는 일반적으로 소프트웨어 루프로의 제 1 엔트리 상의 실행 상태 카운터들을 리셋한다.
대안적으로 디스에이블 예측 플래그(disable prediction flag)는 실행 상태 카운터 보다는 예측될 각각의 ECNB 명령과 연관될 수 있다. 디스에이블 예측 플래그는 연관된 ECNB 명령이 실행된 것으로 이전에 결정된 경우 예측을 디스에이블하도록 활성(active)으로 설정된다. 이전의 ECNB 명령을 실행시키는 것은 ECNB 명령에 대한 비 실행 상황을 예측하기 위한 신뢰 수준이 수락 가능할 수 있는 것 보다 낮을 것임을 암시한다.
인덱스 카운터는 또한 어느 ECNB 명령이 소프트웨어 루프에서에서 카운트되거나 평가되고 있는지를 결정하기 위해 CHT(312)와 함께 이용할 수 있다. 예를 들어, 5개 이상의 ECNB 명령들을 갖는 루프에서, 제 1 ECNB 명령이 "000"의 인덱스를 가질 수 있고, 제 4 적격인 비-분기 명령이 "011"의 인덱스를 가질 수 있다. 이 인덱스는 대응하는 ECNB 명령에 대한 저장된 실행 상태 카운터 값들에 액세스하기 위한 CHT(312)로의 어드레스를 나타낸다.
예측 회로(314)는 실행 상태 카운터 출력 값들과 같은 ECNB 명령에 대한 예측 정보를 수신하고, 도 2의 디코드 스테이지(231) 동안, 예를 들어, ECNB 명령이 실행되지 않을 것이라고 예측한다. 대안적인 실시예에서, 예측 회로(314)는 ECNB 명령에 의해 특정된 조건이 비 실행 상태로 평가되는 것을 예측할 수 있다. 예측 회로(314)는 예측되고 있는 연관된 ECNB 명령 및 대응하는 CHT 엔트리 콘텐츠들을 포함할 수 있는 예측 판단을 트래킹 회로(316)에 전달한다. ECNB 명령이 예측되지 않은 경우, 예측 정보는 정규 실행을 표시한다. ECNB 명령이 NOP 명령으로서 실행하도록 예측되었다면, 트래킹 정보는 부정확한 예측이 행해졌는지를 결정하기 위해 실행의 상태 및 연관된 조건부 평가에 관해 정정 회로(318)에 알려준다. 부정확한 예측이 행해진 경우, 정정 회로(318)는 파이프라인을 플러싱하고, CHT(312)의 적절한 실행 상태 카운터들을 업데이트하고, 그리고 일 실시예에서, 이 특정한 ECNB 명령이 그 지점으로부터 앞으로 예측되지 않을 것임을 표시하도록 연관된 CHT 엔트리를 표기한다. 다른 실시예에서, 정정 회로(318)는 또한 ECNB 명령이 잘못 예측되었다고 결정하면, 예를 들어, 예측 기준을 그 지점으로부터 앞으로 더 보수적이 되게 하도록 미리-특정된 평가 기준을 변경할 수 있다.
루프의 ECNB(eligible conditional non-branch) 명령들의 시퀀스는 각각의 명령이 동일한 조건부 분석에 의존하게 되도록 코딩될 수 있다는 것이 인지된다. 이러한 경우, ECNB 명령들의 시퀀스는 조건 이력표(CHT)의 단일의 엔트리를 갖는 그룹으로서 취급될 수 있다. 이러한 경우에, 예측이 비 실행을 표시할 때, ECNB 명령들의 시퀀스는 NOP(no operation) 명령들의 시퀀스로서 취급된다. 예를 들어, ECNB 명령들의 그룹은 2개의 조건부 로드 피연산자 명령들에 이어지는 2개의 로딩된 피연산자들에 관한 연산을 특정하는 조건부 산술 명령을 포함할 수 있다. 또한, 3개의 ECNB 명령들은 동일한 조건 분석에 의존한다. 파이프라인 처리기에서, 이 3개의 명령들은 동일한 조건부 분석을 갖는 조건부 그룹으로서 파이프라인에서 조기에 식별될 수 있다. 일 실시예에서, 파이프라인의 그룹의 최초의 조건부 로드 명령은 예측 평가를 트리거하고 CHT의 엔트리는 ECNB 명령들의 그룹과 연관된 것으로서 표기될 수 있다. 이 방식으로, ECNB 명령들의 그룹은 ECNB 그룹의 모든 명령들이 동일한 인덱스로 평가되도록 CHT로의 단일의 인덱스와 연관된다.
ECNB(eligible conditional non-branch) 명령들은 루프들의 외부에서 인지될 수 있고, 또한 실행하지 않는다고 유리하게 예측될 수 있다는 것이 인지된다. 어드레스 범위 검출 회로로서 작용하는 검출 회로(304)는 ECNB 명령 예측이 평가되는 어드레스 범위를 검출한다. 어드레스 범위에 진입한 코드가 패치될 때마다, ECNB 명령 예측 회로(300)가 인에이블되고, 어드레스 범위 내에 있는 ECNB 명령들이 모니터링되고 평가된다. 평가 기준이 충족될 때, ECNB 명령은 실행된다고 또는 실행되지 않는다고 예측되며, 트래킹 및 정정은 이전에 기술한 것과 유사한 방식으로 동작한다.
모든 루프들 또는 어드레스 범위들이 유사한 특성들을 갖는 것은 아니라는 것이 추가로 인지된다. 특정 루프 또는 어드레스 범위가 열등한 예측 결과들을 제공하는 경우, 그 루프 또는 어드레스 범위는 예측을 디스에이블하도록 표기될 수 있다. 유사한 방식으로, 특정한 루프 또는 어드레스 범위는 동작 시나리오들의 하나의 세트 하에서, 양호한 예측으로 동작할 수 있고 동작 시나리오들의 상이한 세트 하에서, 열등한 예측으로 동작할 수 있다. 이러한 경우에, 동작 시나리오들의 인지(recognition)는 예측이 인에이블되거나, 디스에이블되거나, 또는 동작 시나리오들에 대해 적절한 상이한 평가 기준에 따라서만 인에이블되는 것을 허용한다.
도 4A는 ECNB 명령의 실행을 예측하기 위한 제 1 프로세스(400)를 예시한다. 블록(402)에서, 처리기 코드 실행이 소프트웨어 루프에 대해 모니터링된다. 판단 블록(404)에서, 소프트웨어 루프가 검출된 코드의 지점에 도달했는지에 관한 결정이 내려진다. 소프트웨어 루프는 예를 들어, 상술된 바와 같이, 루프의 시작으로의 백워드 분기를 식별함으로써 결정될 수 있다. 어떠한 소프트웨어 루프도 식별되지 않는 경우, 제 1 프로세스(400)는 블록(402)으로 되돌아온다. 소프트웨어 루프가 식별되는 경우, 코드의 그 지점에서, 소프트웨어 루프의 제 1 사이클은 이미 실행되였고, 소프트웨어 루프의 다음 사이클은 시작할 준비가 될 수 있다.
판단 블록(406)의 소프트웨어 루프의 다음 사이클에서, ECNB 명령이 예를 들어, 도 2의 디코드 스테이지(231)와 같은 파이프라인 디코드 스테이지 동안 검출되었는지에 관한 결정이 내려진다. 어떠한 ECNB 명령도 검출되지 않은 경우, 프로세스(400)는 판단 블록(408)으로 진행한다. 판단 블록(408)에서, 소프트웨어 루프를 통한 패스가 완료되었는지에 관한 결정이 내려진다. 소프트웨어 루프를 통한 제 1 패스는 예를 들어, 판단 블록(404)에서 소프트웨어 루프를 식별한 백워드 분기에 도달함으로써 결정될 수 있다. 소프트웨어 루프를 통한 패스가 완료되지 않은 경우, 제 1 프로세스(400)는 ECNB 명령을 계속 검사(checking)하도록 판단 블록(406)으로 되돌아온다. 판단 블록(406)에서, ECNB 명령이 검출된 경우, 제 1 프로세스(400)는 판단 블록(410)으로 진행한다. 판단 블록(410)에서, 처리기 디코드 스테이지(231) 동안, 예를 들어, 그 ECNB 명령에 대한 미리-특정된 평가 기준이 충족되었는지에 관한 결정이 내려진다. 미리-특정된 평가 기준은 예를 들어, 루프 반복 카운트가 3과 같이 미리-특정된 값 이상인지 여부 일 수 있다. 미리-특정된 평가 기준이 충족되지 않은 경우, 제 1 프로세스(400)는 블록(412)으로 진행한다. 블록(412)에서, 이 ECNB 명령이 실행되고 그 ECNB 명령에 대한 실행 상태가 업데이트된다. 예를 들어, 디스에이블 예측 플래그는 ECNB 명령이 조건부로 실행된 경우 설정된다. 한번 설정된 디스에이블 예측 플래그는 예를 들어, 소프트웨어 루프가 완료될 때까지 리셋되지 않을 수 있다.
판단 블록(408)에서, 소프트웨어 루프를 통한 패스가 완료되었는지에 관한 결정이 내려진다. 소프트웨어 루프를 통한 패스가 완료된 경우, 제 1 프로세스(400)는 판단 블록(414)으로 진행한다. 판단 블록(414)에서, 소프트웨어 루프가 종료되었는지에 관한 결정이 내려진다. 소프트웨어 루프가 끝나지 않은 경우, 제 1 프로세스(400)는 블록(416)으로 진행한다. 블록(416)에서, 루프 반복이 카운트되고, 제 1 프로세스(400)는 ECNB 명령들을 계속 검사하기 위해 판단 블록(406)으로 되돌아온다. 소프트웨어 루프가 끝난 경우, 제 1 프로세스(400)는 블록(418)으로 진행한다. 블록(418)에서, 제 1 프로세스(400)에서 이용된 예측 회로들이 리셋된다. 이러한 리셋은 소프트웨어 루프가 진입될 때마다 재초기화된 회로들로부터 예측 평가가 착수되는 것을 허용한다. 대안적으로, 리셋은 새로운 소프트웨어 루프가 검출될 때마다 발생할 수 있다. 그 다음, 제 1 프로세스(400)는 다음 소프트웨어 루프의 검색을 시작하도록 블록(402)으로 되돌아온다.
판단 블록(410)으로 되돌아오면, 미리-특정된 기준이 충족되는 경우, 제 1 프로세스(400)는 판단 블록(420)으로 진행한다. 판단 블록(420)에서, 이 ECNB 명령에 대한 실행 조건이 만족되는지에 관한 결정이 내려진다. 예를 들어, 실행 조건은 이 ECNB 명령에 대한 디스에이블 예측 플래그의 형태를 취할 수 있다. 디스에이블 예측 플래그는 일반적으로 ECNB 명령의 인스턴스(instance)가 조건부로 실행할 때마다 설정될 것이다. 한번 설정된 이러한 디스에이블 예측 플래그는 예를 들어, 소프트웨어 루프가 완료될 때까지 리셋되지 않을 수 있다. 판단 블록(420)으로 되돌아오면, ECNB 명령이 이전에 실행된 적이 있음을 표시하는 디스에이블 예측 상태에 디스에이블 예측 플래그가 있는 경우, 제 1 프로세스(400)는 블록(412)으로 되돌아온다. ECNB 명령이 이전에 실행되지 않았다고 표시하는 인에이블 예측 상태에 디스에이블 예측 플래그가 있는 경우, 제 1 프로세스(400)는 블록(421)으로 진행한다. 블록(421)에서, 이 ECNB 명령은 NOP 명령으로서 실행하도록 예측된다. 블록(422)에서, 예측은 처리기 파이프라인에서 트래킹된다. 판단 블록(424)에서, 이 ECNB 명령과 연관된 조건이 결정되는 파이프라인 스테이지에서, 블록(420)의 예측이 정확했는지에 관한 결정이 내려진다. 예측이 정확했던 경우, 프로세스(400)는 추가의 ECNB 명령들이 소프트웨어 루프에서 평가될 필요가 있을 수 있으므로 블록(408)으로 되돌아온다. 예측이 부정확했던 경우, 제 1 프로세스(400)는 블록(426)으로 진행한다. 블록(426)에서, 처리기 파이프라인의 플러시는 부정확하게 예측된 ECNB 명령 및 예측된 동작에 의해 영향을 받았을 수 있는 파이프라인의 임의의 명령을 제거하도록 개시된다. 블록(426)에서, 파이프라인은 이 ECNB 명령을 검출하는 지점으로 정정된다. 그 다음, 프로세스(400)는 블록(412)으로 되돌아오며, 여기서 그 다음, 이 ECNB 명령이 수행되고 그 연관된 실행 상태가 업데이트된다.
도 4B는 ECNB 명령의 실행을 예측하기 위한 제 2 프로세스(450)를 예시한다. 블록(452)에서, 처리기 코드 실행은 ECNB 명령에 대해 모니터링된다. 판단 블록(454)에서, 예를 들어, 도 2의 디코드 스테이지(231)와 같은 파이프라인 디코드 스테이지 동안 ECNB 명령이 검출되었는지에 관한 결정이 내려진다. 어떠한 ECNB 명령도 검출되지 않는 경우, 제 2 프로세스(450)는 블록(452)으로 되돌아온다. ECNB 명령이 검출된 경우, 제 2 프로세스(450)는 판단 블록(456)으로 진행한다. 판단 블록(456)에서, 처리기 디코드 스테이지(231) 동안, 예를 들어, 이 ECNB 명령에 대한 미리-특정된 평가 기준이 충족되었는지에 관한 결정이 내려진다. 미리-특정된 평가 기준은 예를 들어, ECNB 명령과 연관된 루프 반복 카운트가 3과 같은 미리-특정된 값 이상인지 여부일 수 있다. 미리-특정된 평가 기준이 충족되지 않는 경우, 제 2 프로세스(450)는 블록(458)으로 진행한다. 블록(458)에서, 이 ECNB 명령이 실행되고 실행 상태 카운터가 이 ECNB 명령에 대해 업데이트된다.
판단 블록(460)에서, 소프트웨어 루프가 검출되었는지에 관한 결정이 내려진다. 소프트웨어 루프는 예를 들어, 상술한 바와 같이 코드에서 백워드 분기를 식별함으로써 결정될 수 있다. 소프트웨어 루프가 검출되지 않았던 경우, 제 2 프로세스(450)는 다른 ECNB 명령을 검사하기 위해 블록(452)으로 되돌아온다. 소프트웨어 루프가 검출되었던 경우, 제 2 프로세스(450)는 블록(462)으로 진행한다. 블록(462)에서, 검출된 루프의 부분이 아닌 ECNB 명령들에 대한 실행 상태 카운터들이 초기화되는데, 그 이유는 제 2 프로세스(450)에서, 소프트웨어 루프의 ECNB 명령들만이 예측되기 때문이다. 도 4B는 루프 외부의 다른 ECNB 명령들을 갖는 코드 시퀀스에서 루프가 검출되는 예상 경우(expected case)를 커버한다. 루프 외부의 다른 ECNB 명령들은 CHT 용량에 영향을 미치고 검출된 루프에서 평가되는 ECNB 명령들의 수를 제한할 수 있다. 따라서 루프 외부에서 만난 ECNB 명령들의 실행 상태 카운터들은 재초기화되고 CHT 로직은 추가로 상세히 후술되는 바와 같이 조정된다.
검출된 소프트웨어 루프의 부분이 아닌 ECNB 명령들은 소프트웨어 루프의 어드레스 범위 및 ECNB 명령들의 어드레스들로부터 결정될 수 있다. 조건 이력표(CHT)의 시작 엔트리는 소프트웨어 루프에서 검출된 ECNB 명령들을 나타내도록 조정된다. 또한, 검출된 루프의 부분이 아닌 ECNB 명령들에 대한 실행 상태 카운터들은 CHT에 재할당되어 소프트웨어 루프 내의 ECNB 명령들에 대한 CHT의 용량을 증가시킬 수 있다는 것이 주목된다. 판단 블록(464)에서, 소프트웨어 루프가 종료되었는지에 관한 결정이 내려진다. 소프트웨어 루프가 끝나지 않는 경우, 제 2 프로세스(450)는 블록(466)으로 진행한다. 블록(466)에서, 루프 반복이 카운트되고 프로세스는 블록(452)으로 되돌아온다. 소프트웨어 루프가 끝나는 경우, 제 2 프로세스(450)는 블록(468)으로 진행한다. 블록(468)에서, 제 1 프로세스(400)에서 이용된 예측 회로들이 리셋된다. 이러한 리셋은, 소프트웨어 루프에 진입할 때마다, 예측 평가가 재초기화된 회로들로부터 착수되도록 허용한다. 대안적으로, 리셋은 새로운 소프트웨어 루프가 검출될 때마다 발생할 수 있다.
판단 블록(456)으로 되돌아오면, 미리-특정된 기준이 충족되는 경우, 제 2 프로세스(450)는 판단 블록(470)으로 진행한다. 판단 블록(470)에서, NOP(no operation) 명령으로서 이 ECNB 명령을 실행할지에 관한 결정이 내려진다. 예를 들어, 이 ECNB 명령은 ECNB 명령에 의해 특정된 기능을 실행하도록 예측될 수 있다. 이러한 경우에, 제 2 프로세스(450)는 블록(458)으로 진행한다. 대안적으로, 이 ECNB 명령은 NOP 명령으로서 실행되도록 예측될 수 있다. 블록(472)에서, 예측은 처리기 파이프라인에서 트래킹된다. 판단 블록(474)에서, 이 ECNB 명령과 연관된 조건이 결정되는 파이프라인 스테이지에서, 블록(470)의 예측이 정확했는지에 관한 결정이 내려진다. 예측이 정확했던 경우, 제 2 프로세스(450)는 블록(460)으로 되돌아온다. 예측이 부정확했던 경우, 제 2 프로세스(450)는 블록(476)으로 진행한다. 블록(476)에서, 처리기 파이프라인의 플러시는 부정확하게 예측된 ECNB 명령 및 예측된 동작에 의해 영향을 받았을 수 있는 파이프라인의 임의의 명령을 제거하도록 개시된다. 블록(478)에서, 제 2 프로세스(450)에서 이용된 예측 회로들은 평가되는 소프트웨어 루프의 부정확한 예측을 발견하였기 때문에 리셋된다. 그 다음, 제 2 프로세스(450)는 블록(452)으로 되돌아온다. 대안적으로, 부정확한 예측을 반영하는 ECNB 명령 상태 카운터들에 대해 정정이 행해질 수 있고 프로세스는 계속될 수 있다.
도 5는 ECNB 명령의 실행을 예측하기 위한 제 3 프로세스(500)를 예시한다. 블록(502)에서, 처리기 코드 실행은 처리기가 미리-특정된 어드레스 범위로부터 패치된 코드를 실행하고 있는지를 결정하기 위해 모니터링된다. 예를 들어, 컴파일러 또는 다른 소프트웨어 툴은 미리-특정된 어드레스 범위를 일반화(generalize)하기 위해 코드의 섹션에서 ECNB 명령들을 식별하고 식별된 ECNB 명령들의 어드레스들을 이용할 수 있다. 판단 블록(504)에서, 예를 들어, 도 2의 패치 스테이지(230)와 같은 파이프라인 패치 스테이지 동안 미리-특정된 어드레스 범위가 검출되는지에 관한 결정이 내려진다. 어떠한 미리-특정된 어드레스 범위도 검출되지 않는 경우, 제 3 프로세스(500)는 블록(502)으로 되돌아간다. 미리-특정된 어드레스 범위가 검출된 경우, 제 3 프로세스(500)는 블록(506)으로 진행한다. 블록(506)에서, 어드레스 범위 카운터는 특정한 어드레스 범위가 진입되는 횟수를 표시하도록 업데이트된다. 블록(508)에서, 처리기 코드는 ECNB 명령에 대해 모니터링된다. 판단 블록(510)에서, ECNB 명령이 예를 들어, 도 2의 디코드 스테이지(231)와 같이 파이프라인 디코드 스테이지 동안 검출되는지에 관한 결정이 내려진다. 어떠한 ECNB 명령도 검출되지 않는 경우, 제 3 프로세스(500)는 판단 블록(512)으로 진행한다. 판단 블록(512)에서, 처리기가 미리-특정된 어드레스 범위의 코드를 여전히 실행하고 있는지에 관한 결정이 내려진다. 처리기가 미리-특정된 어드레스 범위의 코드를 실행하고 있지 않은 경우, 제 3 프로세스(500)는 블록(502)으로 진행한다. 처리기가 미리-특정된 어드레스 범위의 코드를 실행하고 있는 경우, 제 3 프로세스(500)는 블록(508)으로 진행한다.
판단 블록(510)으로 되돌아오면, ECNB 명령이 검출된 경우, 제 3 프로세스(500)는 판단 블록(514)으로 진행한다. 판단 블록(514)에서, 예를 들어, 도 2의 처리기 디코드 스테이지(231) 동안 이 ECNB 명령에 대한 미리-특정된 평가 기준이 충족되는지에 관한 결정이 내려진다. 미리-특정된 평가 기준들은 ECNB 명령이 NOP로서 실행된다고 예측하기 위한 높은 신뢰 수준을 제공하도록 선택된다. 예를 들어, 일 실시예에서, 미리-특정된 평가 기준은 ECNB 명령의 적어도 2개의 이전 시도된 실행들이 강한 비 실행 상태(strongly not executed status)를 갖는 것을 요구하도록 설정될 수 있다. 미리-특정된 평가 기준이 충족되지 않는 경우, 제 3 프로세스(500)는 블록(516)으로 진행한다. 블록(516)에서, ECNB 명령이 실행되고 실행 상태 카운터는 이 ECNB 명령에 대해 업데이트된다. 이어 제 3 프로세스(500)는 처리기가 미리-특정된 어드레스 범위의 코드를 여전히 실행하고 있는지를 결정하기 위해 판단 블록(512)으로 되돌아오고, 결정이 긍정인 경우 블록(508)으로 되돌아오고, 그렇지 않은 경우 블록(502)으로 되돌아온다.
판단 블록(514)으로 되돌아오면, 미리-특정된 평가 기준이 충족되는 경우, 제 3 프로세스(500)는 블록(520)으로 진행한다. 블록(520)에서, 이 ECNB 명령의 실행은 NOP 명령으로서 실행되도록 예측된다. 블록(522)에서, 예측이 처리기 파이프라인에서 트래킹된다. 판단 블록(524)에서, ECNB 명령과 연관된 조건이 결정되는 파이프라인 스테이지에서 블록(520)의 예측이 정확했었는지에 관한 결정이 내려진다. 예측이 정확했던 경우, 제 3 프로세스(500)는 처리기가 미리-특정된 어드레스 범위의 코드를 여전히 실행하고 있는지를 결정하기 위해 판단 블록(512)으로 되돌아오고, 결정이 긍정인 경우 블록(508)으로 되돌아오고, 그렇지 않은 경우 블록(502)으로 되돌아온다.
판단 블록(524)으로 되돌아오면, 예측이 정확했던 경우, 제 3 프로세스(500)는 블록(528)으로 진행한다. 블록(528)에서, 처리기 파이프라인의 플러시는 부정확하게 예측된 ECNB 명령 및 예측된 동작에 의해 영향을 받았을 수 있는 파라미터의 임의의 명령을 제거하도록 개시된다. 블록(530)에서, 이 ECNB 명령에 대한 예측 회로들이 업데이트된다. 그 다음, 프로세스(500)는 블록(508)으로 되돌아온다.
도 6은 ECNB 명령의 실행을 예측하기 위한 제 4 프로세스(600)를 예시한다. 제 4 프로세스(600)는 ECNB 명령이 동일한 ECNB 명령의 식별(identification) 사이에서 처리기 사이클들의 상대적으로 짧은 또는 상대적으로 긴 기간을 갖는 것으로서 반복적으로 식별되는지를 평가한다. 처리기 사이클들의 상대적으로 짧은 기간은 ECNB 명령이 소프트웨어 루프에 위치된다는 것을 나타낼 수 있다. 처리기 사이클들의 상대적으로 긴 기간은 사용자가 디스플레이를 위해 비디오를 다운로드 받을 때와 같은 호출된 루틴에 기인하여 주로 실행될 수 있는 어드레스 범위 내에 ECNB 명령이 위치된다는 것을 나타낼 수 있다. 이러한 경우에, ECNB 명령을 갖는 MPEG 디코딩 루틴이 호출될 수 있다.
블록(602)에서, 처리기 코드 실행은 ECNB 명령에 대해 모니터링된다. 판단 블록(604)에서, ECNB 명령이 예를 들어, 도 2의 디코드 스테이지(231)와 같은 파이프라인 디코드 스테이지 동안 검출되었는지에 관한 결정이 내려진다. 어떠한 ECNB 명령도 검출되지 않은 경우, 제 4 프로세스(600)는 블록(602)으로 되돌아온다. ECNB 명령이 검출되는 경우, 제 4 프로세스(600)는 판단 블록(606)으로 진행한다. 판단 블록(606)에서, 이 ECNB 명령이 이전에 식별되었는지에 관한 결정이 내려진다. 이 ECNB 명령이 식별된 것이 처음인 경우, 제 4 프로세스(600)는 블록(608)으로 진행한다. 블록(608)에서, 이 ECNB 명령의 어드레스가 레코드된다. 블록(610)에서, "히트(hit)" 카운터가 예를 들어, 1의 카운트로 개시된다. 블록(612)에서, 경과된 사이클 카운터가 이 ECNB 명령의 만남(encounter)들 사이에서 경과된 사이클들의 수를 카운트하기 시작한다. 이러한 다른 동작들과 연관된 사이클들이 그 의도된 목적에 대해 카운트의 정확도에 영향을 미치는 정도까지 인터럽트 루틴들(interrupt routines) 및 직접 메모리 액세스 동작들을 처리하기 위해 카운트되는 사이클들의 수가 필터링되어야 할 수 있다는 것이 주목된다. 블록(614)에서, 이 ECNB 명령이 실행되고 실행 상태 카운터는 업데이트된다. 그 다음, 제 4 프로세스(600)는 블록(602)으로 되돌아온다.
판단 블록(606)으로 되돌아오면, 이 ECNB 명령이 이전에 식별되었던 경우, 제 4 프로세스(600)는 블록(618)으로 진행한다. 블록(618)에서, 이 ECNB 명령과 만났던 횟수 및 만남들 사이에 경과된 사이클들의 수가 평가된다. 블록(619)에서, "히트" 카운터가 업데이트되고, 현재 경과된 사이클 카운트가 저장되고, 경과된 사이클 카운터는 만남들 사이에서 다음 기간에 경과하는 사이클들의 수를 카운트하도록 재시작된다. 판단 블록(620)에서, 미리-특정된 평가 기준이 평가되는지에 관한 결정이 내려진다. 일 실시예에서, 미리-특정된 평가 기준은 2개의 만남들 사이에서 X회 미만의 처리기 사이클들을 갖는 실행 상태 카운터에서 적어도 2회의 이전에 시도된 실행들이 강하게 비 실행 상태를 갖는다는 것을 요구하도록 설정될 수 있다. 다른 실시예에서, 미리-특정된 평가 기준은 3개의 만남들 각각 사이에 적어도 Y회의 처리기 사이클들을 갖는, 실행 상태 카운터에서 각각이 강하게 비 실행 상태를 갖는 적어도 3회의 이전에 시도된 실행들을 요구하도록 설정될 수 있으며, 여기서 Y는 X보다 크다. 미리-특정된 평가 기준이 충족되지 않은 경우, 제 4 프로세스(600)는 블록(614)으로 되돌아오고, 여기서 이 ECNB 명령이 실행되고 실행 상태 카운터가 업데이트된다. 그 후 프로세스는 블록(602)으로 되돌아온다.
판단 블록(620)으로 되돌아오면, 미리-특정된 평가 기준이 충족되는 경우, 제 4 프로세스(600)는 블록(624)으로 진행한다. 블록(624)에서, 이 ECNB 명령의 실행이 예측되며; 예를 들어, 이 ECNB 명령은 NOP 명령으로서 실행하도록 예측된다. 블록(626)에서, 예측은 처리기 파이프라인에서 트래킹된다. 판단 블록(628)에서, 이 ECNB 명령과 연관된 조건이 결정되는 파이프라인 스테이지에서, 블록(624)의 예측이 정확했는지에 관한 결정이 내려진다. 예측이 정확했던 경우, 제 4 프로세스(600)는 블록(602)으로 되돌아온다. 예측이 정확하지 않았던 경우, 제 4 프로세스(600)는 블록(632)으로 진행한다. 블록(632)에서, 처리기 파이프라인의 플러시는 부정확하게 예측된 ECNB 명령 및 예측된 동작에 의해 영향을 받았을 수 있는 파이프라인의 임의의 명령을 제거하도록 개시된다. 블록(634)에서, 이 ECNB 명령에 대해 이용되는 예측 회로가 리셋된다. 그 다음, 프로세스(600)는 블록(602)으로 되돌아온다.
여기에 기재되는 실시예들과 관련하여 기술된 다양한 예시적인 로직 블록들, 모듈들, 회로들, 엘리먼트들, 또는 컴포넌트들은 여기에서 기술되는 기능들을 수행하도록 설계된, 범용 처리기, 디지털 신호 처리기(DSP), 주문형 집적 회로(ASIC), 필드 프로그래밍 가능한 게이트 어레이(FPGA) 또는 다른 프로그래밍 가능한 로직 컴포넌트들, 이산 게이트, 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트들 또는 이들의 임의의 조합을 통해 구현되거나 수행될 수 있다. 범용 처리기는 마이크로처리기일 수 있지만, 대안적으로 처리기는 임의의 종래의 처리기, 제어기, 마이크로제어기 또는 상태 머신일 수 있다. 처리기는 또한 컴퓨팅 컴포넌트들의 조합, 예를 들어, DSP와 마이크로처리기의 조합, 복수의 마이크로처리기들, DSP 코어와 연결된 하나 이상의 마이크로처리기들 또는 원하는 애플리케이션에 대해 적절한 임의의 다른 이러한 구성으로서 구현될 수 있다.
여기에서 기재된 실시예들과 관련하여 기술되는 방법들은 하드웨어로, 처리기에 의해 실행되는 소프트웨어 모듈로, 또는 이들의 조합으로 직접 구현될 수 있다. 소프트웨어 모듈은 RAM 메모리, 플래시 메모리, ROM 메모리, EPROM 메모리, EEPROM 메모리, 레지스터들, 하드 디스크, 제거 가능 디스크, CD-ROM 또는 당 분야에 알려진 임의의 다른 형태의 저장 매체내에 상주할 수 있다. 저장 매체는 처리기가 정보를 저장 매체에 기록하고 이로부터 정보를 판독할 수 있도록 처리기에 연결될 수 있다. 대안적으로, 저장 매체는 처리기에 통합될 수 있다.
처리기(210)는 예를 들어, I/O 디바이스들(240 또는 242) 중 하나와 같은 I/O 디바이스를 통해 액세스 가능하거나 명령 캐시를 통해 이용 가능할 수 있는 것과 같이, 처리기와 국부적으로 직접 연관된 컴퓨터 판독 가능한 매체 상에 저장된 프로그램의 제어 하에서 조건부 비-분기 명령들을 포함하는 명령들을 실행하도록 구성될 수 있다. I/O 디바이스는 또한 D 캐시(228)와 같은 처리기들과 국부적으로 집적 연관되거나 다른 처리기의 메모리로부터 액세스 가능한 메모리 디바이스에 상주하는 데이터에 액세스할 수 있다. 컴퓨터 판독 가능한 저장 매체는 랜덤 액세스 메모리(RAM), 동적 랜덤 액세스 메모리(DRAM), 동기식 동적 랜덤 액세스 메모리(SDRAM), 플래시 메모리, 판독 전용 메모리(ROM), 프로그래밍 가능한 판독 전용 메모리(PROM), 소거 가능한 프로그래밍 가능한 판독 전용 메모리(EPROM), 전기적으로 소거 가능한 프로그래밍 가능한 판독 전용 메모리(EEPROM), 컴팩트 디스크(CD), 디지털 비디오 디스크(DVD), 다른 타입의 제거 가능한 디스크들, 또는 임의의 다른 적합한 저장 매체를 포함할 수 있다.
본 발명이 처리기 시스템들에서 이용하기 위한 예시적인 실시예들의 문맥에서 기재되었지만, 매우 다양한 구현들이 위의 설명 및 아래에 이어지는 청구항들과 일관되게 당업자들에 의해 이용될 수 있다는 것이 인지될 것이다. 예를 들어, 고정된 기능 구현은 또한 본 발명의 다양한 실시예들을 활용할 수 있다.

Claims (22)

  1. 발행된 조건부 비-분기 명령(issued conditional non-branch instruction)을 실행하기 않기 위한 방법으로서,
    예측에 대해 적격인 것으로서 조건부 비-분기 명령을 식별하는 단계 ? 상기 예측은 적격인 조건부 비-분기(eligible conditional non-branch; ECNB) 명령이 실행되지 않을 것임을 표시함 ?; 및
    상기 ECNB 명령이 실행되지 않을 것이라는 상기 예측에 응답하여 NOP(no operation)로서 상기 ECNB 명령을 실행하는 단계
    를 포함하는,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  2. 제 1 항에 있어서,
    상기 ECNB 명령을 실행하는데 요구되는 소스 피연산자(source operand)는 상기 예측에 응답하여 패치(fetch)되지 않는,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  3. 제 1 항에 있어서,
    범용 레지스터 파일의 레지스터는 상기 예측에 응답하여 상기 ECNB 명령의 결과를 포함하기 위해 예비되지 않는,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  4. 제 1 항에 있어서,
    상기 ECNB 명령이 상기 예측이 기반했던 적격의 기간(eligible period) 동안 발생한 상기 ECNB 명령의 이전의 성공적인 실행들을 표시하지 않는 디스에이블 예측 플래그(disable prediction flag)에 응답하여 실행되지 않는다고 예측하는 단계
    를 더 포함하는,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  5. 제 1 항에 있어서,
    상기 ECNB 명령이 실행되었는지 또는 실행되지 않았는지를 이력 레지스터에 레코딩하는 단계; 및
    상기 ECNB 명령의 적어도 하나의 이전의 시도된 실행이 실행되지 않았다고 표시하는 상기 이력 레지스터에 응답하여 다음의 ECNB 명령이 실행되지 않는다고 예측하는 단계
    를 더 포함하는,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  6. 제 5 항에 있어서,
    상기 ECNB 명령의 적어도 하나의 이전의 시도된 실행은 소프트웨어 루프에서 만났었던,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  7. 제 5 항에 있어서,
    상기 ECNB 명령의 적어도 하나의 이전의 시도된 실행은 미리-특정된 어드레스 범위에서 만났었던,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  8. 제 5 항에 있어서,
    상기 ECNB 명령의 적어도 하나의 이전의 시도된 실행은 식별된 수의 처리기 사이클들의 내에서 만났었던,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  9. 제 1 항에 있어서,
    상기 예측을 생성하기 위해 평가 기준을 ECNB 명령 실행 상태 카운터의 카운트 값 출력과 비교하는 단계
    를 더 포함하고,
    상기 ECNB 명령 실행 상태 카운터는,
    상기 ECNB 명령의 이전의 시도된 실행들의 이력이 강하게 비-실행(strongly not executed)됨을 나타내는 제 1 카운트 값으로 포화되는,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  10. 제 9 항에 있어서,
    상기 ECNB 명령의 이전의 시도된 실행이 조건부로 실행되었다고 표시하도록 제 1 방향으로 상기 ECNB 명령 실행 상태 카운터를 업데이트하는 단계; 및
    상기 ECNB 명령의 이전의 시도된 실행이 조건부로 실행되지 않았다고 표시하도록 제 1 방향과 반대인 제 2 방향으로 상기 ECNB 명령 실행 상태 카운터를 업데이트하는 단계
    를 더 포함하는,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  11. 제 9 항에 있어서,
    상기 평가 기준은 상기 제 1 카운트 값인,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  12. 제 9 항에 있어서,
    상기 ECNB 명령의 이전의 시도된 실행들은 소프트웨어 루프에서 만났었던,
    발행된 조건부 비-분기 명령을 실행하기 않기 위한 방법.
  13. 조건부 비-분기 명령이 실행하지 않을 것임을 예측하기 위한 장치로서,
    예측에 대해 적격인 것으로서 조건부 비-분기 명령을 식별하기 위한 제 1 회로; 및
    평가 기준에 충족한다는 것에 응답하여 적격인 조건부 비-분기(ECNB) 명령이 실행되지 않을지 여부를 예측하기 위한 제 2 회로
    를 포함하는,
    예측하기 위한 장치.
  14. 제 13 항에 있어서,
    실행되지 않는다는 상기 예측에 응답하여 상기 ECNB 명령을 실행하는데 요구되는 피연산자를 패치하지 않는 피연산자 패치 회로
    를 더 포함하는,
    예측하기 위한 장치.
  15. 제 13 항에 있어서,
    예측을 위한 파이프라인 스테이지에 후속하여 파이프라인 스테이지들에 예측을 트래킹하기 위한 파이프라인 트래킹 회로; 및
    실행되지 않는다는 상기 예측에 응답하여 상기 ECNB 명령을 실행하지 않는 ECNB 명령 실행 스테이지 회로
    를 더 포함하는,
    예측하기 위한 장치.
  16. 제 13 항에 있어서,
    상기 평가 기준과 비교되는 카운트 값 출력을 갖는 ECNB 명령 실행 상태 카운터
    를 더 포함하고,
    상기 카운트 값은,
    상기 ECNB 명령이 조건부로 실행되었다고 표시하도록 제 1 방향으로 업데이트되고, 강하게 실행된 이력을 나타내는 제 1 카운트 값으로 포화되고,
    상기 ECNB 명령이 실행되지 않았다고 표시하도록 제 2 방향으로 업데이트되고, 강하게 비-실행된 이력을 나타내는 제 2 카운트 값으로 포화되는,
    예측하기 위한 장치.
  17. 제 16 항에 있어서,
    상기 평가 기준은 상기 제 2 카운트 값인,
    예측하기 위한 장치.
  18. 제 13 항에 있어서,
    상기 평가 기준은 비-활성 상태의 디스에이블 예측 플래그이고,
    상기 디스에이블 예측 플래그의 비-활성 상태는 예측이 인에이블되었다는 것을 나타내고,
    상기 디스에이블 예측 플래그는, 상기 ECNB 명령이 상기 ECNB 명령과 연관된 소프트웨어 루프에서 조건부로 실행되었다고 결정되는 경우 디스에이블 상태로 설정되는,
    예측하기 위한 장치.
  19. 조건부 비-분기 명령이 실행되지 않을 것임을 예측하기 위한 방법으로서,
    실행할지 또는 실행하지 않을지를 예측하는데 대해 적격인 조건부 비-분기 명령 식별하는 단계; 및
    평가 기준에 충족한다는 것에 응답하여 적격인 조건부 비-분기(ECNB) 명령이 실행되지 않을 것이라고 예측하는 단계
    를 포함하는,
    예측하기 위한 방법.
  20. 제 19 항에 있어서,
    상기 ECNB 명령을 실행하는데 요구되는 소스 피연산자는 상기 평가 기준에 충족한다는 것에 응답하여 패치되지 않는,
    예측하기 위한 방법.
  21. 제 19 항에 있어서,
    상기 ECNB 명령은 상기 평가 기준에 충족한다는 것에 응답하여 NOP(no operation) 명령으로서 실행되는,
    예측하기 위한 방법.
  22. 제 19 항에 있어서,
    상기 평가 기준을 충족하는 것은,
    소프트웨어 루프 내에서 만나는 상기 ECNB 명령들의 이전의 시도된 실행들의 실행 상태의 이력을 레코딩하고,
    상기 평가 기준이 충족되었는지를 표시하기 위해 상기 이력을 상기 평가 기준과 비교하는 것
    을 포함하는,
    예측하기 위한 방법.
KR1020127007089A 2009-08-19 2010-08-18 조건부 비-분기 명령들의 비-실행을 예측하기 위한 방법들 및 장치들 KR101513953B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/543,847 2009-08-19
US12/543,847 US20110047357A1 (en) 2009-08-19 2009-08-19 Methods and Apparatus to Predict Non-Execution of Conditional Non-branching Instructions
PCT/US2010/045910 WO2011022493A1 (en) 2009-08-19 2010-08-18 Methods and apparatus to predict non-execution of conditional non-branching instructions

Publications (2)

Publication Number Publication Date
KR20120058555A true KR20120058555A (ko) 2012-06-07
KR101513953B1 KR101513953B1 (ko) 2015-04-21

Family

ID=42835737

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127007089A KR101513953B1 (ko) 2009-08-19 2010-08-18 조건부 비-분기 명령들의 비-실행을 예측하기 위한 방법들 및 장치들

Country Status (9)

Country Link
US (1) US20110047357A1 (ko)
EP (1) EP2467776B1 (ko)
JP (2) JP5734980B2 (ko)
KR (1) KR101513953B1 (ko)
CN (1) CN102483696B (ko)
ES (1) ES2741998T3 (ko)
HU (1) HUE044310T2 (ko)
TW (1) TWI436273B (ko)
WO (1) WO2011022493A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140134421A (ko) * 2013-05-14 2014-11-24 한국전자통신연구원 이중 명령어 페치 장치 및 방법

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110047357A1 (en) * 2009-08-19 2011-02-24 Qualcomm Incorporated Methods and Apparatus to Predict Non-Execution of Conditional Non-branching Instructions
US9146742B2 (en) 2011-04-07 2015-09-29 Via Technologies, Inc. Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US8880857B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
CN102707988B (zh) * 2011-04-07 2015-09-09 威盛电子股份有限公司 微处理器及其操作方法
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9128701B2 (en) 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
EP2508983A1 (en) * 2011-04-07 2012-10-10 VIA Technologies, Inc. Conditional non-branch instruction prediction
US9141389B2 (en) 2011-04-07 2015-09-22 Via Technologies, Inc. Heterogeneous ISA microprocessor with shared hardware ISA registers
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US8924695B2 (en) 2011-04-07 2014-12-30 Via Technologies, Inc. Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9336180B2 (en) 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US20120311308A1 (en) * 2011-06-01 2012-12-06 Polychronis Xekalakis Branch Predictor with Jump Ahead Logic to Jump Over Portions of Program Code Lacking Branches
US9268569B2 (en) 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict
US9552032B2 (en) * 2012-04-27 2017-01-24 Nvidia Corporation Branch prediction power reduction
US9891922B2 (en) 2012-06-15 2018-02-13 International Business Machines Corporation Selectively blocking branch prediction for a predetermined number of instructions
US9317293B2 (en) * 2012-11-28 2016-04-19 Qualcomm Incorporated Establishing a branch target instruction cache (BTIC) entry for subroutine returns to reduce execution pipeline bubbles, and related systems, methods, and computer-readable media
US9348599B2 (en) * 2013-01-15 2016-05-24 International Business Machines Corporation Confidence threshold-based opposing branch path execution for branch prediction
US20140258635A1 (en) * 2013-03-08 2014-09-11 Oracle International Corporation Invalidating entries in a non-coherent cache
US10509725B2 (en) 2013-03-08 2019-12-17 Oracle International Corporation Flushing by copying entries in a non-coherent cache to main memory
US20140281391A1 (en) * 2013-03-14 2014-09-18 Qualcomm Incorporated Method and apparatus for forwarding literal generated data to dependent instructions more efficiently using a constant cache
GB2534522B (en) * 2014-07-25 2016-12-28 Imagination Tech Ltd Conditional branch prediction using a long history
CN107179935B (zh) * 2016-03-11 2021-01-29 华为技术有限公司 一种指令执行方法及虚拟机
CN108334337B (zh) * 2018-01-30 2022-02-01 江苏华存电子科技有限公司 含自动管理功能的低延迟指令调度器及过滤猜测访问方法
GB2577502B (en) * 2018-09-26 2021-09-08 Advanced Risc Mach Ltd An apparatus and method for processing instructions
US11099852B2 (en) * 2018-10-25 2021-08-24 Arm Limitied Apparatus and method for maintaining prediction performance metrics for prediction components for each of a plurality of execution regions and implementing a prediction adjustment action based thereon
CN112540796B (zh) * 2019-09-23 2024-05-07 阿里巴巴集团控股有限公司 一种指令处理装置、处理器及其处理方法
US11243766B2 (en) * 2019-09-25 2022-02-08 Intel Corporation Flexible instruction set disabling

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01205340A (ja) * 1988-02-12 1989-08-17 Nec Corp データ処理装置
JPH01258031A (ja) * 1988-04-06 1989-10-16 Mitsubishi Electric Corp データ処理装置
CA2060555A1 (en) * 1991-04-24 1992-10-25 Robert J. Bullions, Iii System and method for draining an instruction pipeline
JPH0675769A (ja) * 1992-05-26 1994-03-18 Nec Corp 分岐予測機構
JP3683968B2 (ja) * 1996-02-09 2005-08-17 富士通株式会社 情報処理装置
US5860017A (en) * 1996-06-28 1999-01-12 Intel Corporation Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction
JPH1185515A (ja) * 1997-09-10 1999-03-30 Ricoh Co Ltd マイクロプロセッサ
US6353883B1 (en) * 1998-08-04 2002-03-05 Intel Corporation Method and apparatus for performing predicate prediction
US6367004B1 (en) * 1998-12-31 2002-04-02 Intel Corporation Method and apparatus for predicting a predicate based on historical information and the least significant bits of operands to be compared
JP2000305795A (ja) * 1999-04-20 2000-11-02 Nec Corp 並列処理装置
JP2000322257A (ja) * 1999-05-10 2000-11-24 Nec Corp 条件分岐命令の投機的実行制御方法
US6442679B1 (en) * 1999-08-17 2002-08-27 Compaq Computer Technologies Group, L.P. Apparatus and method for guard outcome prediction
US6513109B1 (en) 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6629238B1 (en) * 1999-12-29 2003-09-30 Intel Corporation Predicate controlled software pipelined loop processing with prediction of predicate writing and value prediction for use in subsequent iteration
US6804770B2 (en) * 2001-03-22 2004-10-12 International Business Machines Corporation Method and apparatus for using past history to avoid flush conditions in a microprocessor
US7114059B2 (en) * 2001-11-05 2006-09-26 Intel Corporation System and method to bypass execution of instructions involving unreliable data during speculative execution
TW503997U (en) 2001-12-14 2002-09-21 Hon Hai Prec Ind Co Ltd Optical switch device
US20040230781A1 (en) * 2003-05-16 2004-11-18 Via-Cyrix, Inc. Method and system for predicting the execution of conditional instructions in a processor
US20040255103A1 (en) * 2003-06-11 2004-12-16 Via-Cyrix, Inc. Method and system for terminating unnecessary processing of a conditional instruction in a processor
US20050015578A1 (en) * 2003-07-14 2005-01-20 Kimming So Two-bit branch prediction scheme using reduced memory size
US7587580B2 (en) * 2005-02-03 2009-09-08 Qualcomm Corporated Power efficient instruction prefetch mechanism
US20060190710A1 (en) * 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches
US7263577B2 (en) * 2005-03-03 2007-08-28 Qualcomm Incorporated Power saving methods and apparatus to selectively enable comparators in a CAM renaming register file based on known processor state
US20060200654A1 (en) * 2005-03-04 2006-09-07 Dieffenderfer James N Stop waiting for source operand when conditional instruction will not execute
US7278012B2 (en) * 2005-06-02 2007-10-02 Qualcomm Incorporated Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
JPWO2008029450A1 (ja) * 2006-09-05 2010-01-21 富士通株式会社 分岐予測ミスリカバリ機構を有する情報処理装置
US7925868B2 (en) * 2007-01-24 2011-04-12 Arm Limited Suppressing register renaming for conditional instructions predicted as not executed
US9946550B2 (en) * 2007-09-17 2018-04-17 International Business Machines Corporation Techniques for predicated execution in an out-of-order processor
US8078852B2 (en) * 2009-05-28 2011-12-13 International Business Machines Corporation Predictors with adaptive prediction threshold
US20110047357A1 (en) * 2009-08-19 2011-02-24 Qualcomm Incorporated Methods and Apparatus to Predict Non-Execution of Conditional Non-branching Instructions
US9274795B2 (en) * 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140134421A (ko) * 2013-05-14 2014-11-24 한국전자통신연구원 이중 명령어 페치 장치 및 방법

Also Published As

Publication number Publication date
JP2013502657A (ja) 2013-01-24
TWI436273B (zh) 2014-05-01
EP2467776A1 (en) 2012-06-27
JP2015130206A (ja) 2015-07-16
CN102483696A (zh) 2012-05-30
JP6345623B2 (ja) 2018-06-20
KR101513953B1 (ko) 2015-04-21
ES2741998T3 (es) 2020-02-12
CN102483696B (zh) 2016-10-26
WO2011022493A1 (en) 2011-02-24
JP5734980B2 (ja) 2015-06-17
US20110047357A1 (en) 2011-02-24
TW201118726A (en) 2011-06-01
EP2467776B1 (en) 2019-05-15
HUE044310T2 (hu) 2019-10-28

Similar Documents

Publication Publication Date Title
KR101513953B1 (ko) 조건부 비-분기 명령들의 비-실행을 예측하기 위한 방법들 및 장치들
KR101788683B1 (ko) 루프에 대한 데이터 프리페치 요청들을 취소하기 위한 방법들 및 장치
KR101459536B1 (ko) 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치
US7278012B2 (en) Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
JP5172942B2 (ja) プロセッサによる電力消費を低減する方法、プロセッサ、及び、情報処理システム
JP5335946B2 (ja) 電力的に効率的な命令プリフェッチ機構
US20070130450A1 (en) Unnecessary dynamic branch prediction elimination method for low-power
US20090327674A1 (en) Loop Control System and Method
US8028180B2 (en) Method and system for power conservation in a hierarchical branch predictor
KR20180126518A (ko) 벡터 명령 처리
JP2006048258A (ja) データプロセッサ

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
X091 Application refused [patent]
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180329

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190327

Year of fee payment: 5