KR20010050791A - 분기 명령과 연관된 컴퓨팅 시스템 레이턴시를 감소시키기위한 시스템 및 방법 - Google Patents

분기 명령과 연관된 컴퓨팅 시스템 레이턴시를 감소시키기위한 시스템 및 방법 Download PDF

Info

Publication number
KR20010050791A
KR20010050791A KR1020000057683A KR20000057683A KR20010050791A KR 20010050791 A KR20010050791 A KR 20010050791A KR 1020000057683 A KR1020000057683 A KR 1020000057683A KR 20000057683 A KR20000057683 A KR 20000057683A KR 20010050791 A KR20010050791 A KR 20010050791A
Authority
KR
South Korea
Prior art keywords
instruction
branch
address
target
program
Prior art date
Application number
KR1020000057683A
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 KR20010050791A publication Critical patent/KR20010050791A/ko

Links

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • 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/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Abstract

컴퓨팅 시스템 및 최적화된 분기 명령 실행과 관련된 프로그램을 구현하기 위한 시스템 및 방법이 개시된다. 분기 동작은 2 부분으로 나뉘며, 명령 스트림 내의 분기 명령에 선행하는 분기 제어(분기 준비)를 포함하여, 컴퓨팅 시스템의 파이프라인이 적당한 타겟 명령을 적재하도록 미리 설정될 수 있도록 한다. 이러한 방식으로, 분기 명령이 정확히 예측된 경우 명령 흐름이 쉽게 재지정될 수 있다. 분기 제어에 대한 예측은 필요에 따라 명령을 추론적으로 프리페치하여 적재하는 데 사용된다. 대부분의 경우, 타겟 어드레스 계산 레이턴시, 명령 캐시 레이턴시 및/또는 오류 예측에 의해 발생하는 분기 실행 페널티가 크게 감소될 수 있다.

Description

분기 명령과 연관된 컴퓨팅 시스템 레이턴시를 감소시키기 위한 시스템 및 방법{SYSTEM AND METHOD FOR REDUCING COMPUTING SYSTEM LATENCIES ASSOCIATED WITH BRANCH INSTRUCTIONS}
본 발명은 고성능 컴퓨팅 시스템 및 명령 실행을 개선하기 위한 방법에 관한 것으로서, 특히 고도로 파이프라인화된 프로세서에서의 명령 지연을 줄이는 데 유용한 시스템 및 방법에 관한 것이다.
현대의 많은 컴퓨팅 시스템은 명령 처리량을 증가시키기 위해 파이프라인식 구조를 가진 프로세서를 사용하고 있다. 이론적으로, 파이프라인식 프로세서는 잘 정돈된 순차 명령 스트림이 실행되고 있을 때 머신 싸이클 당 하나의 명령을 실행할 수 있다. 이것은 명령 자체가 다수의 독립적인 마이크로 명령이 실행될 것을 요구하는 경우에도 이루어진다. 파이프라인식 프로세서는 하나의 명령의 실행을 하나의 머신 싸이클이 완료되기를 각각 요구하는 여러 개의 단계로 분할함으로써 작동된다. 예컨대, 통상의 시스템에서 하나의 명령은 많은 머신 싸이클(페치, 디코드, ALU 연산 등)이 완료되는 것을 필요로 한다. 파이프라인식 프로세서에서는 제1 명령의 실제적인 실행이 완료되기 전에 제2 명령의 처리를 시작함으로써 레이턴시가 감소된다. 상기 예에서, 사실은 다수의 명령은 임의의 주어진 시간에 각종 처리 단계에 있을 수 있다. 따라서, 시스템의 전체 명령 실행 레이턴시(이것은 일반적으로 명령열이 시작되는 시간과 실행이 종료되는 시간 사이의 지연으로 생각될 수 있음)가 크게 감소될 수 있다.
상기한 구조는 프로그램 실행이 순차적인 흐름 경로를 따를 때 양호하게 작동된다. 즉, 이 모델은 순차적인 프로그램 실행 모델을 전제로 하는데, 여기서 프로그램 내의 각 명령은 바로 실행된 명령을 뒤따르는 메모리 내의 바로 다음 명령이다. 그러나, 프로그램의 중요한 요건 및 특징은 프로그램 실행 흐름을 다른 명령 세트로 분기 또는 리다이렉트(redirect)시키는 능력이며, 현재의 프로그램과 다른 실행 프로그램에서 분기 명령을 사용하여 조건부적인 제어 전달이 몇몇 다른 경로로 이루어질 수 있다. 그러나, 이 경로는 방금 실행된 명령을 뒤따르는 바로 다음 명령 세트와 일치할 수도 있고 일치하지 않을 수도 있다.
일반적으로, 종래의 프로세서는 실행될 명령을 위한 분기 타겟 어드레스를 포함하는 단일 어드레스 레지스터를 구비하고 있다. 분기 타겟 어드레스는 분기 명령의 목적 어드레스를 나타내는 어드레스이다. 분기 명령은 정확한 분기 명령용 타겟 어드레스가 이미 어드레스 레지스터에 저장되어 있는 경우에 프로세서에 의해 빠르게 실행된다. 그러나, 분기 명령은 임의의 특정 프로그램에서 임의로 발생할 수 있으며, 프로그램 흐름이 리다이렉트될 것인가를 빨리 확실하게 예측하는 것을 불가능하다. 분기 명령의 결과에 대해 추측하는 다양한 기술이 공지되어 있으며, 흐름이 다른 명령 세트로 지정되는 경우에 정확한 타겟 어드레스는 미리 계산될 수 있으며, 대응하는 명령 세트가 메모리로부터 미리 프리페치되어 적재됨으로써 메모리 액세스 레이턴시를 줄일 수 있게 된다. 일반적으로, 메모리 액세스는 파이프라인 동작보다 매우 느리게 실행되므로, 다음 명령의 검색 중에 실행이 지연될 수 있다.
그러나, 종종 분기 결과에 대한 추측은 정확하지 않으며, 이것은 "버블" 또는 파이프라인 정지를 일으킬 수 있다. 버블 또는 정지는 일반적으로 파이프라인이 원하는 프로그램 흐름을 나타내지 않는 명령(즉, 예컨대 부정확하게 예측된 분기 결과로부터 발생)을 포함할 때 발생한다. 따라서, 에러 명령을 제거하고 파이프라인을 소제하고 파이프라인에 정확한 명령열을 재적재해야 하므로 커다란 시간 페널티가 초래된다. 파이프라인의 크기에 따라 이러한 페널티는 매우 클 수 있으며, 따라서 (효과적인 명령 처리량의 증가를 위한) 긴 파이프라인 설계에 대한 요구는 파이프라인이 소제되고 재적재되어야 할 때 발생하는 정지 페널티와 상당한 정도로 균형을 이루어야 한다. 따라서, 분기 명령 레이턴시를 감소시키기 위한 지능 메카니즘을 연구하고 설계하고 구현함에 상당한 노력이 있어 왔다.
분기 명령 레이턴시를 분석하기 위하여, 분기 명령이 3개의 연산 단계로 이루어진 것으로 생각하는 것이 도움이 된다.
(1) 분기 결과를 결정하는 단계
(2) 분기 타겟 어드레스(즉, 적재되어야 하는 명령의 위치)를 계산하는 단계
(3) 정확한 명령이 다음에 실행되도록 제어를 전달하는 단계.
대부분의 시스템에서, 단계 (1) 및 (2)는 분기 명령에 의해 이 순서대로 해결되어야 한다. 또한, 분기 명령은 일반적으로 2가지 종류, 즉 조건부 및 무조건부적이다. 분기가 항상 일어날 때 이를 무조건부 분기라고 하며, 상기 3가지 연산 단계가 요구되지 않는다. 단계 (1)의 결과에 따라 조건부 분기가 일어난다. 분기가 발생하지 않는 경우, 다음 순차 명령이 페치되어 실행된다. 분기가 발생하는 경우, 단계 (2)에서 분기 타겟 어드레스가 계산된 다음, 단계 (3)에서 제어가 그 경로로 전달된다. 분기 예측의 최신의 양호한 설명이 컴퓨터 구조라는 제목의 책자의 4.3절에서 발견될 수 있는데, 패터슨 및 헤네시에 의한 정량적 접근 2판의 262-278쪽이 본 명세서에 참조된다.
일반적으로, 분기 명령과 관련된 페널티 싸이클의 수는 2개의 카테고리, 즉 (1) 분기의 디코드로부터의 타겟 명령의 페치 레이턴시(이것은 일반적으로 분기의 타겟 명령이 식별된 후 페치되어 파이프라인 안에 놓이는 데 필요한 시간으로 언급됨), 및 (2) 분기 조건 생성의 레이턴시(이것은 일반적으로 분기가 실제로 발생하는지의 여부를 결정하는 프로세스로 언급됨)로 나뉠 수 있다. 특정 시스템에서는 대개 카테고리 (1)의 페널티를 줄이는 것이 더 중요한데, 이는 이들이 조건부 및 무조건부 분기 양자에 영향을 미치는 반면, 카테고리 (2)의 페널티는 조건부 분기에만 연관되기 때문이다. 더욱이, 카테고리 (2)의 페널티는 분기 예측을 포함하는 공지 기술에 의해 어느 정도 개선될 수 있다. 예컨대, 본 명세서에 반영된 미국 특허 제5,742,804에서는, 컴파일러가 실제 분기 명령 전에 어느 땐가 분기 예측 명령을 삽입한다. 또한, 이 예측 명령은 실행 시간을 더 절약하기 위하여 분기의 타겟 어드레스를 특정한다. 명령들은 예측 명령에 의해 제공되는 힌트에 따라 프리페치되어, 제어가 전달될 때 실행을 준비할 수 있다. 분기 결과에 대한 예측 그 자체는 컴파일러에 의해 얻어진 정보에 기초하여 실시간으로 이루어진다. 그러나, 상기 특허에서는 최적의 오류 예측의 처리인 것 같지 않으며, 이러한 오류는 분기 페널티 관점에서 비용을 초래할 수 있다. 따라서, 이 특허에 개시된 방법도 심각한 한계를 갖는다.
특정 파이프라인 컴퓨팅 시스템에서의 카테고리 (1)의 시간 페널티의 구분을 더 구체적으로 살펴보면, 이는 분기 오퍼랜드를 판독하는 단계(0 내지 1 싸이클); 분기 타겟 어드레스를 계산하는 단계(1-2 싸이클); 및 명령 캐시를 액세스하고 타겟 명령을 파이프라인의 디코드 단계에 놓은 단계(1-2 싸이클)로 이루어진다는 것을 알 수 있다. 따라서, 최악의 경우, 5 싸이클의 분기 명령 레이턴시가 발생할 수 있다. 분기 명령이 어느 정도 규칙적으로(즉, 시간의 20%) 실행되는 몇몇 종류의 프로그램에서는 평균 분기 명령 페널티가 매우 높을 수 있다는 것이 분명하다(명령당 평균 1 싸이클).
분기 명령을 위한 실제 실행 시간 레이턴시를 최소화하기 위한 다양한 메카니즘이 제안되어 왔다. 예컨대, 종래에 사용된 하나의 방법은 분기 명령을 디코딩하면서 분기 어드레스를 계산하는 것이다. 이것은 평균 분기 명령 싸이클을 줄일 수 있지만, 추가적인 어드레스 가산기를 필요로 하며, 다른 기능에 사용할 영역 및 전력을 소모한다.
종래에 사용된 또 다른 방법은 타겟 명령 이력 버퍼에 의해 이루어진다. 이러한 예는 참고로 반영된 미국 특허 제4,725,947호, 제4,763,245호 및 제5,794,027호에 있다. 이러한 종류의 시스템에서, 이력 버퍼 내의 각 타겟 명령 엔트리는 과거에 실행된 분기 명령의 프로그램 카운터와 연관되어 있다. 분기가 실행될 때, 엔트리는 적당한 타겟 명령에 의해 채워진다. 분기가 디코딩 단계에 있는 다음 번에, 프로그램 카운터를 이력 버퍼 내의 상기 엔트리에 매칭시킴으로써 분기 타겟 명령이 준비될 수 있다. 이러한 방법의 유효 적중률을 증가시키기 위하여 많은 수의 엔트리가 장시간 동안 유지되어야 한다. 이것도 바람직하지 않은 양의 실리콘 영역 및 전력을 필요로 한다. 더욱이, 매칭 메카니즘 자체도 비교할 엔트리가 많은 경우에는 잠재적인 지연 소스가 될 수 있다.
또 다른 방법이 본 명세서에 반영된 논문 (1) "Implementation of the PIPE Processor" by Farrens and Pleszkun on pages 65-70 of the January 1991 edition of the journal Computer; (2) "A Simulation Study of Architectural Data Queues and Prepare-T0-Branch Instruction," by Young and Goodman on pages 544-549 of the October 1984 IEEE International Conference on Computer Design: VLSI in Computers 에 설명되어 있다. 이들 참조 논문에 설명된 방법에서는 분기 준비(PTB) 명령을 사용하여 지연된 분기 형태가 제안된다. PTB 명령은 분기 명령 전에 삽입되어, 분기 결과를 결정한 다음, 제어의 전달 전에 지연을 특정한다. 명령이 완료될 때 분기 조건이 평가되었을 것을 보증할 만큼 지연이 충분히 클 것을 보장함으로써 파이프라인이 채워진 채 유지된다. 그러나, 이러한 방법의 문제는 타겟 어드레스 계산(단계 2)에 의해 발생하는 레이턴시가 매우 크기 때문에 완전히 수용될 수 없다는 사실에 있다. 또한, 본 명세서에 참조된 미국 특허 제5,615,386호도 PTB 명령의 사용을 특정한다. 이 특허도 비교 동작(단계 1)과 타겟 어드레스 계산(단계 2)을 분리함으로써 분기 실행을 개선할 수 있다는 것을 설명하고 있다. 분기 어드레스를 순서 없이 계산함으로써 분기에 관련된 레이턴시가 더 감소할 수 있다. 이 특허는 다수의 일반적인 방법을 설명하고 있지만, 다음과 같은 사실에 의해 제한된다. (1) 폴디드 비교 방법을 사용하지 않으므로 개별적인 비교 및 분기 명령이 요구되며, 이것은 코드 크기, 동적 실행 시간 등을 증가시킨다. (2) 비교 결과가 레지스터 대신에 내부 플래그에 의해 인식되어야 하며, 이것은 유연성을 감소시킨다. (3) 링크 레지스터와 같은 레지스터의 사용 없이는 함수 서브루틴이 문맥을 저장/스위치하는 것이 더 어렵기 때문에 그 실행이 더 어렵다. (4) 명세는 또한 일종의 복잡한 지명 프로세스에 의존하므로 루프의 실행이 후속 관련 루프에 대한 예측 가중을 발생시킨다.
종래 기술의 관련 문제는 프로그램 흐름에 다수의 분기가 포함되어 있다는 사실에 기인한다. 이 경우, 각 분기 명령에 대해 어드레스 레지스터 내의 타겟 어드레스를 갱신하는 것이 필요하다. 이러한 갱신은 추가적인 시간을 필요로 하며, 따라서 프로그램 실행을 느리게 한다.
따라서, 본 발명의 목적은 종래 기술과 관련된 전술한 많은 문제점을 극복하는 데 있다.
본 발명의 다른 목적은 프로그램 설계자가 소프트웨어 프로그램을 구성하는 데 사용할 수 있는 다양한 구현 도구를 가질 수 있도록 파이프라인식 프로세서에 의해 강력하고 유연성 있게 구현되는 개선된 분기 동작 명령 포맷을 제공하는 데 있다.
본 발명의 또 다른 목적은 많은 경우에 파이프라인식 프로세서에서의 액세스 레이턴시가 감소되거나 제거될 수 있도록 독립적인 제어 및 분기 명령으로 구성된 개선된 분기 동작을 제공하는 데 있다.
본 발명의 또 다른 목적은 코드 크기가 감소되고 실행 속도가 증가할 수 있도록 비교 및 분기 동작과 같은 다수의 명령을 결합하는 새로운 유형의 분기 명령을 제공하는 데 있다.
본 발명의 또 다른 목적은 프로그래밍 유연성을 향상시킬 수 있도록 레지스터들 간의 비교를 포함하는 개선된 비교 논리 동작을 지원하는 새로운 유형의 분기 명령을 제공하는 데 있다.
본 발명의 또 다른 목적은 분기 타겟 명령 유효성을 위하여 총 적중률을 향상시키기 위하여 2개의 다른 예측 및/또는 타겟 적재 파라미터를 가진 독립적인 제어 및 분기 명령을 구현하는 데 있다.
본 발명의 또 다른 목적은 전체 프로그램 분기 동작이 더 빠르고 더 작은 레이턴시로 처리될 수 있도록 파이프라인식 프로세서의 형태로 전술한 분기 제어/분기 명령을 실행하기 위한 개선된 컴퓨팅 시스템을 제공하는 데 있다.
본 발명의 또 다른 목적은 다수의 프로그램 분기를 위한 명령이 쉽고 빠르게 적재되고 실행될 수 있도록 적재 가능하고 구조적으로 가시적인 다수의 분기 타겟 어드레스 레지스터를 포함하는 파이프라인식 구조의 프로세서를 제공하는 데 있다.
본 발명의 또 다른 목적은 다수의 프로그램 분기를 위한 명령이 파이프라인에 의해 빠르게 액세스될 수 있도록 분기 타겟 어드레스에 대응하는 타겟 명령을 저장하는 다수의 적재 가능한 분기 타겟 명령 레지스터를 포함하는 파이프라인식 구조의 프로세서를 제공하는 데 있다.
본 발명의 또 다른 목적은 본 명세서에 설명된 개선된 분기 명령을 사용하는 개선된 소프트웨어는 물론 기본 분기 명령 포맷을 사용하는 기존의 소프트웨어를 동시에 지원하기 위하여 2개의 다른 명령 세트로부터 분기 명령을 효율적으로 실행할 수 있는 프로세서를 제공하는 데 있다.
본 발명의 또 다른 목적은 필요한 명령을 파이프라인 내의 적재에 사용할 수 있다는 것을 보장하기 위해 컴퓨팅 시스템 내에 지능형 사전 적재 회로를 제공하는 데 있다.
본 발명의 또 다른 목적은 상기 사전 적재 회로가 어떤 명령이 다른 것들보다 더 필요할 것이라는 것을 결정하기 위한 우선 순위화 기법을 사용할 수 있도록 하는 데 있다.
본 발명의 또 다른 목적은 전술한 개선된 프로세서 및 명령 구조에 적합하고 시스템 복잡성을 감소시킬 수 있는 예외 처리 메카니즘을 제공하는 데 있다.
따라서, 본 발명의 한 특징은 컴퓨팅 머신에서 프로그램 분기 명령의 동작을 용이하게 하는 개선된 머신 실행 가능 분기 제어 명령에 관한 것이다. 일반적으로 제어 명령은 프로그램 분기가 제1형 분기 명령(PC 기반 분기) 또는 제2형 분기 명령(레지스터 기반 분기)을 포함하는지를 특정하기 위한 제1 부분(R 비트)을 포함한다. 제어 명령의 제2 부분은 프로그램 분기 명령을 위한 타겟 어드레스와 관련된다. 제3 부분은 타겟 어드레스를 저장하기 위한 타겟 어드레스 레지스터를 지정한다. 실행시, 제어 명령은 프로그램 분기 명령이 실행되기 전에 컴퓨팅 머신이 타겟 어드레스를 계산하도록 한다. 분기 제어 명령은 제2 부분의 가변량(edisp 또는 disp+edisp)이 컴퓨팅 머신이 타겟 어드레스를 계산하는 데 사용하도록 구성되는데, 이는 PC에 기초한 직접적인 어드레스 계산 형태가 레지스터에 기초한 어드레스 계산(6 비트)보다 더(최대 19 비트) 많이 발생하기 때문이다. 어드레싱 유형은 제어 명령의 제1 부분에서 설정함으로써 분기 제어 명령에서 지정된다.
본 발명의 다른 특징은 제어 명령의 제4 부분(L 비트)이 분기 타겟 명령이 적어도 하나의 프로그램 동작을 위해 프로그램의 일부로 사용되고 있을 확률을 특정하는 예측값을 갖는다는 사실이다. 이러한 이론적인 예측은 종래의 힌트 비트와 다른 방식으로 도출되는데, 이는 이러한 예측이 격리된 단 하나가 아니라 다수의 관련 프로그램 분기의 매크로 거동을 검사하기 때문이다. 이것은 프로그램의 집단 거동이 고려될 수 있으므로 더 나은 명령 적재를 발생시킨다.
일반적으로, 분기 제어 명령은 2개 이상의 독립적인 프로그램 분기 명령과 관련될 수 있으며, 따라서 코드 크기를 감소시켜 타겟 명령 적재 등을 향상시킬 수 있다. 컴퓨팅 머신이 임의의 실제 프로그램 분기 명령을 실행하기 전에도 분기 분석을 통해 분기 제어 명령으로 인하여 다수의 타겟 어드레스가 계산되어 사용될 수 있다.
본 발명의 또 다른 특징은 프로그램 명령 스트림 내의 전술한 분기 제어 명령과 관련되고 이를 따르는 개선된 분기 명령을 커버함으로써, 분기 명령에 필요한 제어 파라미터가 분기 제어 명령에 의해 컴퓨팅 머신 파이프라인 내에 미리 설정된다. 분기 명령은 폴디드 또는 결합 포맷을 가짐으로써 더 빠른 실행과 더 간편한 구현 등을 위해 비교 및 분기 동작을 하나로 결합한다. 분기의 제1 부분은 분기 결정을 수행하기 위한 분기 파라미터(즉, 레지스터 식별자 Rm, Rn 및/또는 동작 확장-BNE 등)를 포함하여 프로그램 분기가 컴퓨팅 머신에 의해 행해져야 하는지를 결정한다. 제2 부분(IARn)은 프로그램 분기가 발생할 때 명령 실행 흐름을 분기 타겟 어드레스로 재지정하기 위해 컴퓨팅 머신에 의해 사용되는 분기 타겟 어드레스 정보를 포함한다. 이러한 포맷을 사용하여, 분기 명령과 관련된 분기 결정 및 명령 실행 흐름 재지정은 컴퓨팅 머신에서 동시에 해결될 수 있다. 또한, 분기 명령은 전술한 분기 제어 명령과 결합하여 동작함으로써 분기 타겟 어드레스가 분기 결정 및 명령 실행 흐름의 재지정 전에 계산된다.
바람직하게도, 하나 이상의 분기 타겟 어드레스 레지스터가 사용되며, 분기 명령은 분기 타겟 어드레스 결정을 위해 이들 중 어느 하나를 지정할 수 있다. 한 실시예에서, 제1 부분은 2개의 레지스터 지정 필드(Rm, Rn)에 의해 취해져, 이러한 레지스터를 수반한 산술/논리 연산이 비교 프로세스의 일부로서 평가될 수 있다. 또한, 술어 오퍼랜드를 사용한 논리 연산도 비교 동작의 일부로 지정될 수 있으며, 따라서 예컨대 제1 부분에서 식별된 가변 A 또는 가변 B가 논리적으로 참이거나 이들 양자가 참인 경우 등에 분기가 발생할 수 있다.
본 발명의 또 다른 특징은 전술한 분기 제어 및 분기 명령을 포함하는 컴퓨터 프로그램에 관련된다. 이러한 프로그램은 명령의 필드 포맷을 이용하도록 설정된 프로세서 파이프라인 구조의 속도 및 레이턴시 특성을 최적화하도록 실행될 수 있다. 특히, 프로그램 분기 타겟은 1 내지 n(n〉2) 범위의 우선순위 값을 갖도록 구성되어 타겟 명령의 상대적인 페칭 우선순위가 또한 프로세서 파이프라인 내에 구성될 수 있다. 우선순위 값은 분기 타겟 어드레스를 저장하기 위해 어느 분기 타겟 어드레스 레지스터(즉, 0 내지 7)가 사용될 것인지의 선택에 의해 설정될 수 있다.
분기 제어 및 분기 명령을 실행하는 프로세서는 본 발명의 특징 중 또 하나를 구체화한다. 이러한 프로세서는 일반적으로 다수의 타겟 어드레스 레지스터, 공급되는 명령을 디코딩하여 디코딩 결과에 따라 제어 신호를 제공하는 명령 디코더, 및 제어 신호에 응답하여 명령을 실행하는 실행부를 포함한다. 전술한 바와 같이, 분기 제어 명령은 후에 분기 명령이 명령 스트림 내에서 따르는 프로세서에 대한 플래그 또는 지시자의 역할을 한다. 따라서, 분기 제어 명령은 분기를 위한 어드레스를 계산하는 데 사용되는 어드레스 필드, 및 분기 어드레스를 계산한 후에 이를 저장하기 위하여 다수의 타겟 어드레스 레지스터 중 하나를 지정하기 위한 제1 레지스터 선택과 함께 분기 제어 동작을 정의하는 그 자신의 동작 코드 필드를 갖는다. 이어지는 분기 명령은 분기 동작(바람직하게는 비교 동작은 물론)을 정의하는 동작 코드 필드, 및 분기 동작에 사용될 어드레스를 저장하는 다수의 어드레스 레지스터 중 하나를 지정하기 위한 제2 레지스터 선택 필드를 포함한다. 따라서, 분기 명령이 실행될 때, 분기 제어 명령은 이미 분기 타겟 어드레스가 계산되도록 하여 필요한 경우 명령 흐름의 재지정을 위한 분기 명령에 이용될 수 있도록 한다.
분기 어드레스는 다양한 다른 방식, 예컨대 프로그램 카운터(PC)에 대한 변위를 이용하는 방식이 있다. 이 경우, 분기 제어 명령의 어드레스 필드는 직접 데이터를 위한 필드도 포함하며, 따라서 분기 어드레스는 프로그램 카운터의 내용에 직접 데이터를 추가함으로써 계산된다. 다른 변형에 있어서, 다수의 범용 레지스터 중 어느 하나에 포함된 데이터는 분기 어드레스 정보의 소스로서 지정된 다음 분기 타겟 어드레스 레지스터 중 하나에 저장될 수 있다. 이러한 2개의 변형례는 또한 원하는 경우에는 결합될 수 있다.
바람직한 실시예에서, 분기 제어 및 분기 제어 명령은 독립적인 예측/추측 형태들을 위한 비트 필드를 포함한다. 이들은 상보적인 목적으로 사용되며, 타겟 명령 사전 적재 성능을 향상시키는 데 도움이 된다. 이러한 2 종류의 예측 파라미터를 계산함으로써 추측적인 사전 적재, 프리페치 등이 특정 구조에 맞춰질 수 있다.
또 다른 변형으로서, 프로세서는 다른 길이(예컨대 16 비트 및 32 비트)를 가진 분기 명령을 실행할 수 있으며, 따라서 필요한 경우 2가지 다른 동작 모드가 지원될 수 있다.
바람직한 실시예의 프로세서는 또한 분기 제어 명령과 결합하여 동작하는 예외 처리 회로를 포함하여, 계산된 분기 타겟 어드레스에 대한 예외 검사가 다수의 분기 타겟 어드레스 레지스터 중 하나에 분기 타겟 어드레스를 저장하기 전에 발생하도록 한다. 이러한 방식으로 명령 스트림에서 조기에 소프트웨어 에러가 검사되어 디버깅을 쉽게 할 수 있게 된다. 또한, 잠재적인 에러 어드레스 데이터를 검사하지 않고 분기 어드레스 버퍼와 관련하여 논리의 절약이 실현된다.
파이프라인 프로세서를 구동하는 바람직한 방법은 전술한 바와 같이 분기 처리, 타겟 명령 적재 및 타겟 명령 사전 적재를 포함하여 레이턴시 처리를 향상시킴으로써 캐시 액세스가 레이턴시 관점에서 필수적으로 숨겨질 수 있도록 한다. 랜덤 액세스 멀티 엔트리 어드레스 버퍼 및 이와 관련된 랜덤 액세스 멀티 엔트리 타겟 명령 버퍼는 본 발명의 또 다른 유용한 특징을 구성한다. 어드레스 엔트리 각각은 하나 이상의 디코딩된 분기 제어 명령에 포함된 어드레스 필드에 기초하여 계산된 어드레스를 저장한다. 타겟 명령 버퍼는 타겟 어드레스에 기초하여 적재 또는 사전 적재되어, 실행 시간 동안, 대응하는 분기 동작이 동일한 것을 요구하는 경우에 다수의 분기 타겟 명령이 유효하게 유지된다. 한 실시예에서, 어드레스 레지스터의 수는 명령 레지스터의 수보다 크다. 바람직한 실시예에서 명령 버퍼 내의 각 레지스터는 2개의 명령을 포함하여 관련 캐시로부터의 적재를 최적화한다. 다른 변형에 있어서, 타겟 명령 레지스터는 구성 명령이 임의의 명령을 결정할 수 있고 레지스터에 적절히 적재할 수 있는 경우 임의의 명령이 실행되기 전에 적재된다.
전술한 방식으로 전술한 분기 타겟 어드레스 및 분기 타겟 명령 버퍼를 구동하는 방법은 본 발명의 또 다른 특징을 구성한다.
분기 타겟 명령 버퍼는 프리페치 제어기의 제어하에 바람직하게 적재되는데, 이는 본 발명의 또 다른 특징을 나타낸다. 일반적으로, 프리페치 제어기는 분기 타겟 어드레스 버퍼 내의 타겟 어드레스 엔트리의 우선순위를 계산한 것에 기초하여 분기 타겟 명령 버퍼를 추측하여 적재한다. 즉, 어느 특정 싸이클 동안에 가장 높은 우선순위의 타겟 어드레스 엔트리가 사전 적재를 위해 고려되는데, 이것은 유효 싸이클 시간이 없는 경우 낮은 우선순위의 타겟 어드레스 엔트리가 고려될 수 없다는 것이 가능하다는 것을 의미한다. 프리페치 제어기는 2 종류의 사전 적재, 즉 능동 및 수동 사전 적재를 실시한다. 능동 사전 적재는 대응하는 분기가 타겟 명령을 요구하기도 전에 이 타겟 명령을 적재하려고 시도하며, 수동 사전 적재는 분기가 검출된 경우 명령 버퍼가 적어도 임의의 2차 반복에서의 레이턴시를 피하기 위해 적재된 것을 확인한다. 프리페치 제어기는 바람직하게, 명령 버퍼에 이미 들어 있는 분기 타겟 명령이 프레시 타겟 명령으로 가장 유용하게 대체될 것이기 때문에 무효인가를 결정하기 위한 모니터링 수단을 포함한다. 선택 수단은 무효 분기 타겟 명령이 발견된 때 분기 어드레스 레지스터 세트에 다수의 잠재적인 분기 타게 어드레스를 순위화함으로써 대체 분기 타겟 명령을 선택한다. 그 다음, 적재 수단이 명령 캐시가 분기 타겟 명령 버퍼에 무효 분기 타겟 명령을 중복 기입하도록 함으로써 무효 분기 타겟 명령을 대체 분기 타겟 명령으로 대체한다.
바람직한 실시예에서, 모니터링 수단은 유효 적재 마스크의 역할을 하는 N 비트 레지스터를 포함하며, 이것은 N 엔트리 분기 타겟 명령 버퍼에 저장된 N개의 독립적인 분기 타겟 명령의 유효 상태에 따라 적재되어, N 비트 레지스터의 각 비트가 분기 타겟 명령 버퍼 내의 대응 엔트리가 유효 또는 무효인지를 식별하도록 한다. 또한, 바람직한 방법에 있어서, 선택 수단은 사전 적재 레지스터 마스크를 포함하며, 레지스터는 잠재적인 분기 타겟 어드레스를 유지하는 임의의 저장 장소가 대체 분기 타겟 명령을 적재하기 위해 사용될 수 있는가를 식별하는 비트를 포함한다. 또한, 분기 명령 힌트 레지스터 마스크도 고려되는데, 이것이 분기 타겟 명령이 필요할 것인지를 식별하는 비트를 분기 타겟 어드레스 버퍼 내의 각 엔트리에 포함하기 때문이다.
본 발명의 프리페치 제어 버퍼는 상기 유효, 선택 및 힌트 마스크를 포함하여 파이프라인 프로세서에서의 명령 적재를 최적화하기 위한 프리페치 제어기의 역할을 한다.
엔트리의 순위화는 각각의 잠재적인 분기 타겟 어드레스에 대해 저장 장소 식별을 검사함으로써 수행되어, 분기 타겟 어드레스가 관련된 저장 장소에 따라 순위화될 수 있도록 한다. 예컨대, 분기 타겟 어드레스 버퍼의 더 높은 번호 레지스터 내의 분기 타겟 어드레스는 더 낮은 번호의 레지스터에 앞서 고려된다(또는 사용된 논리에 따라). 그러나, 사전 적재 동작은 명령 스트림의 순차 명령이 공급되는 명령 버퍼를 유지하는 데 사용되는 정상 캐시 액세스와 간섭하지 않도록 논리적으로 구성된다.
또한, 타겟 명령이 타겟 명령 버퍼에 사전 적재된 후에 정상적인 명령 흐름을 보장하기 위하여 페치 제어기에 의해 추가적인 증분 타겟 어드레스 버퍼가 사용된다. 이 버퍼에 대체 타겟 명령을 따르는 명령의 어드레스가 저장되어, 대체 타겟 명령이 파이프라인에 의해 후에 실제로 실행되는 경우에 캐시 액세스를 위해 상기 증분 타겟 어드레스가 사용될 수 있도록 한다.
따라서, 본 발명의 컴퓨팅 시스템에 대한 명령의 공급을 유지하는 방법은 실행을 위해 파이프라인에서 이미 유효한 임의의 분기 타겟 명령의 상태 조건을 모니터링하는 단계; 다수의 잠재적인 분기 타겟 어드레스를 순위화하는 단계; 상기 상태 조건 및 상기 순위화에 기초하여 새로운 분기 타겟 명령을 선택하는 단계; 및 상기 잠재적인 분기 타겟 어드레스의 상기 순위화에 기초하여 가장 높은 순위의 새로운 분기 타겟 명령을 적재하는 단계를 포함하며, 상기 가장 높은 순위의 새로운 분기 명령은 파이프라인에 적재할 필요가 있는 경우에 유효하게 된다.
도 1은 본 발명의 컴퓨팅 시스템의 바람직한 실시예를 나타내는 블록도.
도 1a는 분기 동작을 처리하기 위해 본 발명의 컴퓨팅 시스템에서 사용되는 범용 프로세스를 나타내는 순서도.
도 2는 본 발명의 컴퓨팅 시스템에서 사용되는 파이프라인에서 사용되는 각종 연산 단계를 나타내는 도면.
도 2a는 본 발명의 분기 제어 및 디코더 회로들간의 중요한 신호 상호접속의 상세도.
도 2b는 본 발명의 분기 제어, 페치 제어 및 캐시 제어기 회로들간의 중요한 신호 상호접속의 상세도.
도 2c는 본 발명의 컴퓨팅 시스템의 분기 동작 처리 성능을 요약한 도표.
도 2d-2l은 각종 분기 동작시 파이프라인의 연산의 상세한 시각적, 시간적 설명을 나타내는 도면.
도 3a-3h는 분기 처리 동작을 수행할 때 컴퓨팅 시스템에 의해 표명된 제어 신호의 타이밍 및 관계를 나타내는 타이밍도.
도 4a는 본 발명의 분기 제어 명령의 바람직한 실시예를 나타내는 도면.
도 4b는 본 발명의 조건부 분기 명령의 바람직한 실시예를 나타내는 도면.
도 4c는 본 컴퓨팅 시스템에 의해 실행될 수 있는 대표적인 프로그램에서 전술한 분기 제어 및 분기 명령의 대표적인 사용예를 나타내는 도면.
도 4d는 본 발명의 무조건부 분기 명령의 바람직한 실시예를 나타내는 도면.
〈도면의 주요 부분에 대한 부호의 설명〉
100 : 프로세서
106 : 제어 라인
110 : 명령 버퍼
115 : 명령 어드레스 레지스터 타겟 버퍼
120 : 디코드 명령 버퍼
125 : 디코드 유닛
140 : 명령 어드레스 레지스터
150 : 분기 제어 회로
도 1은 다음의 기능 회로를 구비한 파이프라인 프로세서를 포함하는 개량된 컴퓨팅 머신(100)을 포함하는 본 발명의 다양한 특징을 나타내는 블록도이다.
먼저, 페치 제어기(FECTL; 101)는 아래에 상세히 설명되는 방식으로 페치 멀티플렉서/선택기(102) 및 온보드 캐시를 제어한다. 이 회로는 프로세서 파이프라인의 제1 단계에 수반되어 파이프라인을 통한 적당한 명령 흐름을 보장하도록 명령을 페치 및 프리페치한다. 도 1에 도시된 바와 같이, 페치될 명령의 어드레스는 페치 명령 어드레스(FAL) 래치(103)에 저장되어, 후술하는 바와 같이 페치 MUX(102)로부터의 출력에 따라 적재된다.
힌트 비트 버퍼(HB; 104)가 페치/프리페치 동작을 돕는다. 바람직한 실시예에서 HB는 3개의 별도 제어 레지스터, 즉 (1) 각 비트가 타겟 명령 레지스터 세트 내의 대응하는 엔트리의 유효성을 나타내도록 구성된 명령 유효 레지스터(아래 참조), (2) 각 비트가 명령 어드레스 레지스터의 대응하는 레지스터에 대한 힌트/예측 비트의 상태를 나타내는 사전 적재 마스크 레지스터(아래 참조), 및 (3) 사전 적재를 위해 타겟 명령 레지스터 중 어느 것이 유효한가를 나타내는 선택 마스크 레지스터를 포함한다. 명령 힌트 비트는 분기 명령이 실행될 때 특정 명령이 상기 분기 명령의 실제 타겟인지에 관하여 컴파일러(또는 실행시의 소프트웨어 프로그램)에 의해 미리 생성되는 예측을 나타낸다. 물론, 다른 변형이 가능하며, 본 발명의 몇몇 응용에 있어서는 더 바람직할 수 있다.
페치 명령 어드레스 래치(FAL; 103)에 의해 지정된 명령은 제어 라인(106)을 사용한 파이프라인에서의 제1 단계의 제1 단계(F1) 동안에 명령 캐시(IC) 및 캐시 제어기(105)로부터 검색된다. IC(105)는 프로세서(100)에 의해 실행될 수 있는 다수의 32비트 폭 프로그램 명령을 저장할 수 있다. 바람직한 실시예에서, IC(105)의 용량은 32KB이며, 캐시 라인 크기는 32B이다. 이러한 캐시는 예컨대 당해 분야에 공지된 구조, 방법 및 기술을 이용한 4-웨이 세트 연상 캐시 메모리로 구성될 수 있다. 프로세서(100)의 의도 성능 및 하드웨어 특성에 따라서는 다른 방법이 더 바람직할 수 있다. 물론, 캐시 미스의 경우에는 버스 인터페이스 유닛(도시되지 않음)을 사용하는 종래의 메모리 액세스 싸이클이 필요한 명령을 검색하기 위해 실행되어야 한다. 그 다음, IC(105)는 종래의 방식으로 갱신된다.
다수의 순차 프로그램 명령을 저장하는 명령 버퍼(IB; 110)가 64비트 명령 버스(108)를 통해 IC(105)에 결합된다. 바람직한 실시예에서, IB(110)는 IC(105)로부터 싸이클 당 2개의 명령을 적재 받으며, 4개의 독립 엔트리(일반적으로 ib0, ib1, ib2, ib3로 표시되는 각 32비트의 4개 명령)의 용량을 갖는다. 이 구조는 프로세서(100)의 파이프라인의 제1 단계의 제2 위상(F2) 동안에 적재 받는다. 따라서, 임의의 순간에 이 단계와 관련된 최대 레이턴시는 2 싸이클이다(이 단계는 공백 상태이며 새로운 명령 세트로 채워져야 하는 것으로 가정). 또한, IB(110)에 대한 이러한 접근은 극히 깊은 버퍼와 극히 얕은 버퍼간의 절충이며, 본 발명의 이점은 환경에 따라 특정 구현이 다소 변할 경우에도 실현될 수 있다는 것이다.
또한, 명령 어드레스 레지스터 타겟(IART) 버퍼(115)가 버스(108)에 결합된다. IB(110)에 비해, IART(115)는 후술하는 바와 같이 분기 명령의 목적지로서 실행될 준비가 되도록 미리 적재된 타겟 명령들을 저장한다. 바람직한 실시예에서, IART는 8개의 엔트리를 가지며, 각 엔트리는 2개의 명령을 저장한다. 또한, 다른 특정 구현이 사용될 수 있으며, 본 발명은 이러한 특정 구조에 제한되지 않는다.
멀티플렉서/선택기 회로(MUX_D; 118)는 후술하는 각종 파라미터(분기 명령이 미리 디코딩되었는지의 여부를 포함)에 따라 IB(110)(입력 A) 또는 IART(115)(입력 B)로부터 출력된 명령을 결합시키고 이 명령을 디코드 명령 버퍼(D; 120)로 루팅하는 선택기이다. 이 버퍼는 또한 파이프라인의 제1 단계의 제2 위상(F2) 동안에 적재된다. 이 래치에 저장된 명령은 마이크로프로세서 파이프라인의 후속 "디코딩 단계"에 있는 프로그램 명령에 대응한다. MUX_D(118)의 동작 논리는 다음과 같다:
If (branch instruction)
Select input A
Else
Select input B
프로그램 카운터 레지스터(PC-D; 128b)는 디코드 명령 버퍼(D; 120)에 저장된 명령에 대응하는 프로그램 카운터(PC)를 위한 엔트리를 포함한다. 정상적인 순차 명령 실행 동안, PC-D(128b)는 유효 명령 경로가 파이프라인을 통해 흐르고 있을 때 증분기(128)에서 4 만큼 증분된다(각 명령은 1 바이트이므로). 마찬가지로, 명령 경로 내의 분기 명령이 실행될 때(후술됨), 분기 명령의 정확한 타겟 어드레스는 또한 MUX_PC(128a)로의 입력 A를 통해 PC-D(128b)에 설정되어, 정확한 타겟 명령이 또한 디코드 명령 버퍼(120) 내에 적재된다.
이후, 파이프라인의 단계들은 제2 파이프라인 단계 동안 프리 디코딩 및 디코딩 동작을 실시하기 위하여 디코드 유닛(DEC; 125)을 사용한다. DEC(125)는 프리 디코딩/디코딩된 명령의 유형에 기초하여 다수의 제어 신호를 생성하며, 이들 신호(후술됨)는 제어 신호 버스(129)를 통해 전달된다. 바람직한 실시예에서, 프리 디코드 동작은 명령이 적재될 때 매우 빠르게 수행되어 분기 명령인지의 여부를 결정한다. 이러한 방식으로, 분기 제어 처리도 매우 빠르게 실행될 수 있다. 이러한 프리 디코드 동작은 특정 명령 유형을 빠르게 식별하기 위해 당 분야에서 공통으로 사용하는 다양한 표준 기술의 어느 것으로도 구현될 수 있다. 도 2에 도시된 바와 같이, 실제로 프리 디코드 동작(P)은 파이프라인 동작의 제1 단계 동안(F 단계의 제2 위상 F2 동안)(오버랩)에 제2 디코딩 단계(D)에 앞서 발생하여 분기 제어 회로의 나머지에 대해 적당한 타이밍을 보장한다.
도 1을 참조하면, DEC(125)로부터 출력된 디코딩된 명령은 제2 파이프라인 단계의 일부로서 산술 논리 유닛(ALU; 130)에 의해 수행되는 실행 단계(도 2의 E1 단계)에서 처리되고 있는 프로그램 명령을 위한 오퍼랜드를 저장하기 위해 2개의 E1 오퍼랜드 버퍼(E1)(127a, 127b)로 전달된다. 도 2에서 알 수 있듯이, 실제로 3개의 실행 단계(E1, E2, E3)가 존재하며, 이러한 단계 동안 발생하는 동작은 다음을 포함한다:
E1: ALU(130)는 분기 제어(PT) 명령 내의 정보에 기초하여 타겟 어드레스를 계산하는 것을 포함하는 대부분의 계산을 여기(ADD, SUB 등)에서 수행하며, 모든 조건부 분기도 해결한다. 대표적인 구현에 있어서, 분기와 관련된 비교 동작의 결과는 E1 단계(도 2) 동안 FECTL(101)로 1비트 결과(분기 거짓 신호)로서 전달되어 HB(104)를 갱신하는 데 사용된다. 이후, 액티브 사전 적재가 일어날 수 있다. 동일한 결과가 BRCTL(150) 및 DEC(125)에도 공급된다. 분기 내의 모든 것이 예측된 대로라면, 분기 실행, 타겟 어드레스, 타겟 명령 또는 이들의 적재에 아무 변화도 생기지 않는다. 그러나 그렇지 않은 경우에는 오류 예측 수정 프로세스(후술됨)가 다음 단계(E2)에서 실시된다.
E2: 이 싸이클은 적재/저장 래치(136)를 통해 데이터 캐시(145)에 액세스하기 위해 그리고 다른 멀티 싸이클 명령(예컨대 MUL)을 계속 실행하기 위해 사용된다. 또한, 이 싸이클 동안 오류 예측이 발생하는 경우, BRCTL(150)은 이 단계 동안 프로그램 흐름을 정확한 흐름으로 재지정한다. 실제 분기 명령에 따라, 그리고 정확한 다음 명령이 페치되었는지의 여부에 따라 파이프라인에 약간의 버블이 도입될 수 있다. 또한, 분기 제어(PT) 명령에 대해 E1에서 계산된 타겟 어드레스 레지스터의 새로운 내용이 이 싸이클 동안 BRCTL(150)에 전달된다. 후속 단계(W)에서, 이 내용은 후술하는 타겟 어드레스 레지스터에 실제로 기록된다. 그러나, 동일한 정보가 E2 단계 동안 FECTL(101)로도 전달되어 타겟 명령이 실제 분기 명령을 위한 준비로서 사전 적재될 수 있다.
E3: 이 싸이클 동안, DC(145)는 적재/저장 동작에 필요한 모든 데이터를 되돌리며, 멀티 싸이클 명령이 실행을 계속한다. 이 싸이클 동안 IC(105)는 분기 제어(PT) 명령에 의해 지시된 타겟 명령의 사전 적재를 시작하도록 액세스될 수 있다. 바람직한 실시예에서, IC(105)로부터의 임의의 더 높은 우선순위 페치 동작이 타겟 사전 적재에 앞서 해결될 수 있다.
한 세트의 범용 레지스터(GPR; 135), 및 후속 파이프라인 단계의 일부로서 데이터 캐시(140)와 함께 적재/저장 동작을 위해 사용되는 어드레스를 저장하기 위한 적재/저장 어드레스 레지스터(138)가 ALU(130)의 출력에 접속된다. 이 회로들은 도 2에 도시된 W 단계 동안 갱신된다. 바람직한 실시예에서, 데이터 캐시는 4 웨이 32 바이트 라인 연상 캐시를 포함하며, 전체 용량은 32 KB이다.
분기 타겟의 어드레스를 위한 명령 어드레스 레지스터 세트(IAR.A; 140)는 ALU(130)에 의해 계산되고 W 단계 동안 적재될 때 분기 명령의 타겟 어드레스를 저장한다. IAR.A(140) 내의 엔트리 각각은 IART(110) 내에 관련된 대응 엔트리를 갖고 있다. 전술한 바와 같이, 분기 제어(PT) 명령을 사용함으로써 타겟 어드레스가 미리 준비되어 8개의 엔트리 중 하나에 32 비트 엔티티로서 저장될 수 있다. IAR.A(140) 및 ALU(130)의 출력은 모두, 분기 제어 라인(151) 상의 분기 제어 회로(150)(BRCTL)에 의해 제공되는 제어 신호에 기초하여 하나의 입력을 선택하는 분기 선택기/MUX(146)으로 공급된다.
BRCTL(150)은 일반적으로 후술하는 바와 같이 어느 분기 명령도 실행해야 한다. 이 회로는 디코딩된 분기 및 분기 제어 명령을 수신하여 분기 조건 및 타겟 어드레스가 알려진 것인지를 결정하고, 분기의 결과를 해석/예측한다. 분기 조건이 알려지지 않은 경우, BRCTL(150)은 분기 명령 내의 분기 힌트 비트(BHB)(후술됨)에 기초하여 분기를 조건부로 예측한다. 이때, 타겟 어드레스는 분기 제어(PT) 명령에 의해 이미 알려져 있어야 한다(후술됨). 많은 경우, 분기 레이턴시는 예측이 정확한 경우 효과적으로 제거될 수 있다. 이것은 분기가 실행될 때 대개 (1) 타겟 명령이 이미 IART(115)에 적재되어 분기가 정확히 예측된 경우에 사용될 수 있거나, (2) 타겟 명령이 IART(115)에 적재되어 있지 않지만 분기 조건이 해석되기도 전에 페치되어 디코딩될 수 있는 경우이기 때문이다. 반면, 몇몇 이유로 인해 분기 명령이 디코딩될 때 타겟 어드레스가 알려지지 않은 경우에는 타겟 어드레스가 준비될 때까지 분기 명령이 디코드 단계에 유지되기 때문에 약간의 레이턴시가 존재한다.
따라서, 컴퓨팅 시스템(100)에서 다음과 같은 일반적인 절차가 분기 동작시에 이용된다.
(1) 디코딩 단계(D)에서, BRCTL은 분기 타겟 어드레스, IAR 번호 및 분기 예측 정보를 FECTL(101)로 전송한다. 분기가 발생할 것으로 예측되고 타겟 명령이 이미 IART(115)에 사전 적재된 경우, 분기 명령은 이 버퍼로부터 판독되어 D(120)에 적재되며, 이에 따라 다음 싸이클에서 디코딩할 준비가 이루어진다.
(2) 여전히 디코딩 단계(D)에서, IART(115)가 사전 적재되지 않은 경우, FECTL(101)은 BRCTL(150)에 의해 제공된 분기 타겟 어드레스를 사용하여 IC(105)에 페치 요구를 전송한다. 이에 따라 예측이 정확한 것으로 입증된 경우에 명령이 디코딩될 시간에 캐시(105)로부터 IB(110)로 적재된다. IART(115)가 사전 적재된 경우, FECTL(101)은 BRCTL(150)에 의해 제공된 타겟 어드레스 대신에 IAR.IA 내의 중분된 타겟 어드레스를 사용하여 페치 요구를 IC(105)로 전달하여 IART(115)를 위한 타겟 명령으로서 요구되는 다음 명령을 페치한다.
(3) 디코드 단계에서 예측이 취해지지 않고, 실패 명령(분기 후의 다음 명령, 그러나 분기가 취해지지 않은 경우 분기의 타겟은 아님)이 IB(110) 내에 있는 경우, 이 명령은 다음 싸이클에서의 디코딩을 준비하기 위해 시프트된다. FECTL(101)은 예측되고 취해지지 않은 명령이 IART(115)에 미리 적재되어 있지 않은 경우 이에 대한 사전 적재 요구를 전달한다. 이것은 분기 명령이 잘못 예측된 경우에 도움이 되는데, 이는 분기 명령이 후에 필요할 것으로 판명되는 경우에 사용 가능하기 때문이다.
(4) E1 단계에서, BRCTL(150)은 분기 조건의 실제 해석을 수신하여 이 싸이클의 종료 전에 예측에 대해 검증한다. 그 다음, BRCTL은 IAR 번호를 FECTL에 공급하여 E2 단계에서의 실제 분기를 준비한다.
(5) E2 단계에서, 예측이 정확한 경우, 모든 것은 정상적으로 진행되다. 그렇지 않은 경우, BRCTL은 스쿼시 신호를 전송하여 퍼징이 필요한 단계로부터 무효 명령을 제거한다. 분기 예측이 취해지지 않았으나 실제로는 취해진 경우, BRCTL은 분기가 실제로 취해졌다는 정보(AKTN 명령)와 함께 정확한 타겟 어드레스를 FECTL(101)로 전송한다. 그 다음, FECTL(101)은 명령 스트림을 정확한 타겟 명령으로 변경하고, 필요한 경우 추가 명령이 IC(105)로부터 요구된다.
(6) E2 단계에서 오류 예측이 다른 변화, 즉 예측이 취해졌으나 실제로는 취해지지 않은 경우, BRCTL은 취해진 예측이 실패하였다는 정보(CONT 명령)와 함께 분기 명령을 따르는 명령의 PC를 FECTL로 전송한다. 그 다음, FECTL은 실행 방향을 역순으로 변경하고 다음 싸이클에서의 디코딩을 준비하는 다음 실패 명령을 얻는다.
(7) 무조건부 분기가 D 단계에서 존재하는 경우, BRCTL(150)은 분기 타겟 어드레스 및 타겟 레지스터 번호를 FECTL(101)로 전달한다. IART(115)가 사전 적재된 경우, 타겟 명령이 판독되어 D(120)로 이동되어 다음 싸이클에서 디코딩된다. IART(115)가 사전 적재되지 않은 경우, FECTL은 IC(105)에 페치 명령을 발행하여 필요한 타겟 명령을 얻는다.
이상은 시간적인 관점에서의 컴퓨팅 시스템(100)의 동작의 상세한 설명이다(즉, 다른 시간에서의 특정 파이프라인 단계의 상태를 본 것임). 이하에서는 명령 관점에서 본 추가적인 보충 설명이 제공된다(즉, 컴퓨팅 시스템(100), 특히 분기 명령의 특정 유형에 응답하는 BRCTL(150)의 거동을 본 것임).
BRCTL(150)에 의해 생성된 분기 제어 신호도 아래에서 전반적인 타이밍도를 포함한 첨부 도면을 참조하여 더 상세히 설명된다. 이러한 회로의 구조 및 타이밍 요건은 본 명세서를 참조하여 쉽게 조사되며, 적당히 구성되고 접속된 당해 분야에 공지된 하드웨어 논리, 메모리 및 클럭킹 회로로 다양하게 구현될 수 있으며, 이러한 회로들은 여기서 길게 설명되지 않는다.
타겟 명령 어드레스 레지스터 증분 어드레스 버퍼(IAR.IA; 155)는 IART(115)에 저장된 대응하는 명령이 분기에 유효한 타겟 명령을 나타내는 경우 증분된 타겟 어드레스를 포함하는 엔트리를 저장한다. 이 실시예에서, IAR.IA(155)에 대해 8개의 별도 엔트리가 제공된다. 이 회로는 분기 명령의 타겟 명령 어드레스에 대응할 때 페치 명령 래치(103)에 의해 출력되는 페치 어드레스를 판독하고 증분시킴으로써(+4 또는 +8 만큼) 적재되다.
더욱이, 도시되지는 않았지만, IC(105) 및 DC(145)를 갱신하기 위한 버스 인터페이스 유닛, 부동 소수점 유닛, 멀티미디어 유닛 등을 포함하는, 프로세서(100)와 통상적으로 연관된 다른 지원 회로들은 본 발명의 이해에 단지 부수적인 것이므로 본 명세서에는 설명되지 않음을 당업자는 이해할 것이다. 이들은 단지 예이며, 본 발명은 다양한 회로들과 함께 동작할 수 있으며, 이러한 회로들은 본 발명의 가르침에 중요하지 않은 다양한 방법으로 구현될 수 있다는 것을 이해해야 한다. 또한, 하나의 파이프라인만이 도시되었지만, 본 발명은 이러한 실시예에 제한되는 것은 아니며, 본 발명의 이점은 멀티 파이프라인 환경에도 확장될 수 있다.
전술한 바와 같이, 도 2a에 도시된 아래의 제어 신호가 사전 디코딩 단계(도 2) 동안 디코드 제어 라인(129) 상에 BRCTL(150)에서 사용하기 위한 입력으로서 DEC(125)에 의해 생성된다:
(1) dec_branch_pd: 이 신호는 분기 명령이 사전 디코딩 단계(DEC 125)에 있음을 나타낸다.
(2) dec_unconditional: 이 신호는 디코딩 단계 125에서 무조건부 분기가 존재한다는 것을 나타낸다.
(3) dec_link: 무조건부 분기/링크가 디코딩 단계에 있음을 나타내는 신호.
(4) dec_folded: 이 신호는 디코딩 단계에서 조건부 분기(폴디드)가 있음을 나타낸다.
(5) dec_pt: 이 신호는 디코딩 단계(125)에서 분기 제어 명령(PT)이 존재함을 나타낸다.
(6) dec_iar_pd[2:0]: 3비트 폭의 이 신호는 어느 명령 어드레스 레지스터가 PT 및/또는 분기 명령에 의해 타겟 어드레스를 포함하는 것으로서 지정되는가를 나타낸다.
(7) dec_hint: 이 신호는 PT 및 조건부 분기 명령에 첨부된 힌트 비트이다.
전술한 바와 같이, 도 2b에 도시된 아래의 제어 신호가 FECTL(101)에서 사용하기 위한 입력으로서 분기 제어 라인(152) 상에 BRCTL(150)에 의해 생성된다:
(1) br_fe_pt_vld_el: 이 신호는 E1에서의 분기 제어(PT) 명령이 실행되고 있음을 나타낸다.
(2) br_fe_br_addr[31:0]: 이 신호는 분기 타겟 어드레스를 제공한다.
(3) br_fe_pt_iar[2:0]: 이 신호는 E1 단계에서 PT 명령에 의해 지정된 IAR 번호를 나타낸다.
(4) br_fe_pt_hint: 이 신호는 PT 명령의 BHB의 값을 나타낸다.
(5) br_fe_squash: 이 신호는 오류 예측의 경우에 타겟 페치를 스쿼시하는 데 사용된다.
(6) br_fe_br_iarnum[2:0]: 이 신호는 br_fe_br_command에 첨부된 IAR 번호를 나타낸다.
(7) br_fe_br_command: 이 신호는 분기 명령을 나타낸다. 이 명령들은 또한 다음의 정보를 포함하도록 구성된다:
[i] PTKN: 예측이 취해짐
[ii] ATKN: 실제 취해짐
[iii] CNT: 연속=예측 실패
[iv] PRLD: 사전 적재
[v] IDLE: 유휴 상태
BRCTL(150)은 또한 유효하지 않은 명령들을 DEC(125) 및 ALU(130)로부터 제거하기 위하여 파이프라인 제어 유닛(도시되지 않음)에 의해 사용되는 "스쿼시"-br_squash_dec 및 br_ppc_squash_E1을 생성한다. 이러한 유형의 명령 스쿼싱 동작은 당해 분야에 공지되어 있으며, 따라서 본 발명에 적당한 임의의 종래 구현이 사용될 수 있다. BRCTL(150)은 또한 imu_fcmp_pred_ex1으로서 도면에서 다른 장소에서 더 구체적으로 식별되는 전술한 분기 거짓 신호를 수신한다.
마찬가지로, 도 2b에 도시된 아래의 제어 신호가 BRCTL(150)에서 사용하기 위한 입력으로서 분기 제어 라인(152) 상에 FECTL(101)에 의해 생성된다:
(1) fe_br_iar_req: 이 신호는 사전 적재 요구를 나타낸다.
(2) fe_br_req_iar[2:0]: 이 신호는 fe_br_iar_req에 첨부된 IAR 번호를 나타낸다.
(3) fe_br_pred_ignore: 예측된 타겟 페치가 무시됨을 나타내는 신호.
또한, IC(105)의 제어부로부터 피드백 신호 ic_fe_data를 수신하는데, 이 신호는 사전 적재 요구에 응답하여 캐시로부터 2개의 명령이 판독되었음을 확인하는 데 사용된다.
전술한 바와 같이, MUX_BR(146)은 타겟 어드레스를 위한 선택기이다. MUX_BR(146)은 BRCTL(150)에 의해 분기 어드레스 제어 라인(151) 상에 출력되는 선택 신호에 의해 제어되는데, 이 신호는 미해결 PT 명령이 존재하는지의 여부를 나타낸다. 이 선택기의 제어 논리는 다음과 같다:
If (oustanding PT instruction)
Select Input A
Else
Select Input B
그러나, 분기가 잘못 예측된 경우, 입력 C는 나중에 게이트되어 정상적인 순차 명령 흐름(PC+4)을 복원한다.
마찬가지로, MUX_FE(102)는 페치 어드레스를 위한 선택기이다. MUX_FE(102)는 제어 라인(106) 상에 FECTL(101)(분기 명령이 존재하는지, IAR.IA 엔트리가 유효한지를 나타냄)로부터의 선택 신호에 의해 제어된다. 이 선택기의 제어 논리는 다음과 같다:
If (branch instruction)
If (IAR.IA entry is valid)
Select Input A
Else
Select Input B
Else
Select Input C
전술한 바와 같이 페치 어드레스가 명령 페치 어드레스 래치(IFAL;103)에 저장된다. 이 어드레스가 IC(105)로 전송될 때, 도 2b에 icc_fe_commnad로서 도시된 추가적인 페치 명령 신호 세트가 FECTL(101)에 의해 생성되어 캐시 액세스를 제어하기 위하여 라인(106)을 따라 전송된다. 이것은 다음의 제어 정보를 포함한다:
(1) cache_fill: 캐시가 잘못 발생된 때 캐시 충전을 위해 메인 메모리에 액세스한다.
(2) cache_no_fill: 캐시가 잘못 발생된 때 캐시 충전을 위해 메인 메모리에 액세스하지 않는다.
(3) idle: 캐시에 액세스하지 않음.
본 발명의 다른 다양한 발명적인 특징을 포함하는 프로세서(100)의 동작이 도 1a 및 이에 따르는 예를 참조하여 조사될 수 있다. 도 1a에 도시된 바와 같이, 본 발명에 이용되는 전체 프로세스는 아래의 기본 단계를 포함한다. 단계 180에서 먼저 분기 동작이 검출된다. 이 경우, 분기 제어 명령은 사실상 시작될 동작을 컴퓨팅 시스템(100)에 신호한다. 그 다음, 단계 182에서, 컴파일러/소프트웨어 분석에 기초하여, (전술한 힌트 비트를 설정함으로써) 분기 명령이 취해질 것인지의 여부에 관한 예측이 이루어진다. 그 다음, 단계 184에서, PT 명령에 제공된 정보에 기초하여 분기 타겟 어드레스 정보가 준비된다. 후술하는 바와 같이, 이 정보는 사전 적재 동작으로 인하여 분기를 검출하기 전에 이미 사용 가능할 수 있다. 그 다음, 단계 186에서, 컴퓨팅 시스템(100)은 이러한 데이터와 함께 적당한 타겟 어드레스 레지스터 및 타겟 명령 레지스터를 사전 적재하도록 파이프라인을 설정한다. 그 다음, 단계 188에서 분기 조건이 해결되어 분기가 실제로 발생하는지가 결정된다. 단계 190에서 이러한 결정에 기초하여 컴퓨팅 시스템은 오류 예측으로 인해 파이프라인에 임의의 조정이 필요한지를 결정한다. 최종적으로, 단계 192에서, 정확하게 예측된 분기를 위한 임의의 필요한 타겟 명령이 이제 실행을 위해 유효하다는 사실에 기초하여 명령 흐름이 정확한 명령 시퀀스로 적당히 진행된다. 전술한 단계들이 특정 시퀀스로 도시되었지만, 반드시 이러한 방식으로 실행되어야 하는 것은 아니며, 본 발명은 이러한 단계들의 특정 배열 또는 타이밍에 제한되지 않는다. 예컨대, 분기 검출 동작(단계 180)은 디코딩 유닛(DEC;125)에서 실시되지만, 이것은 모든 분기 동작이 그 때 이미 예측(단계 182)되어 있는 경우이다. 더욱이, 전술한 설명으로부터 명백하듯이, 동시에 많은 단계가 발생할 수 있거나 시간상 상당히 중첩될 수 있다. 따라서, 상기한 설명은 본 명세서 및 첨부 도면에 설명된 상세한 동작의 간단한 설명이며, 본 발명에 사용되는 다양한 프로세스들간의 임의의 필요한, 또는 일정한 관계를 설명하는 것을 의도하는 것이 아니라는 것을 당업자는 이해할 것이다.
전술한 분기 처리 회로에 의해 수행되는 특정 기능 및 분기 동작시의 이들의 상호 작용에 대한 더 상세한 설명이 아래에 주어진다.
비분기 명령(덧셈 명령과 같은 일반 명령)
분기 명령을 포함하지 않는 통상적인 경우에, FAL(103)에 페치 어드레스가 설정된다. 파이프라인 동작의 F1 및 F2 단계(2 싸이클) 동안 IC(105)는 페치 어드레스에 기초하여 액세스되고, 판독된 데이터는 IB(110로 전송된다. 명령 버스(107)는 그 폭이 64비트이므로 한 번에 2개의 순차 명령이 전송될 수 있다. IB(110)는 (상부로부터) 판독된 다음, 단계 F2에서 디코드 버퍼(120)에 명령이 저장된다. 이 경우, 이전 명령은 분기 명령이 아니므로 IB(110) 및 D(120)는 MUX_D(118)를 통해 접속된다. 이 경우, D 내의 덧셈 명령은 디코드 단계 동안 DEC(125)에 의해 디코드된다. 또한, D 단계 동안 GPR(135)로부터 임의의 필요한 데이터 항목이 판독되어 덧셈 명령의 오퍼랜드로서 E1 래치(127a, 127b)에 설정된다. 그 다음, E1(127a, 127b) 내의 오퍼랜드는 E1 단계 동안 ALU(130)에 의해 작용되어 덧셈 연산이 실행된다. 이러한 계산의 결과는 기록(W) 단계 동안 GPR(135)에 저장된다. 도 1에 도시되지는 않았지만, 지정된 회로(130) 내에서 추가적인 파이프라인 단계(예컨대 E2 및 E3)가 존재한다는 것은 명백하며, 이들은 본 발명의 설명에 필요한 경우 아래에서 참조된다. 그러나, 본 발명의 이해에 중요하지 않기 때문에 본 명세서에서는 동일한 사항은 생략되었다.
분기 제어(PT) 명령
분기 제어(PT) 명령이 DEC(125)에 의해 디코드될 때 임의의 필요한 데이터가 GPR(135) 또는 PC_D(128b)로부터 판독되어(PT 명령의 유연성 때문에, 즉 PC 또는 레지스터 세트로부터의 편이가 타겟 어드레스를 계산하는 데 사용될 수 있으므로) E1 래치(127b)에 오퍼랜드로서 설정되어야 하는 점을 제외하고는 전술한 것과 동일한 동작이 발생한다. 이 동일한 D 단계 동안, DEC(125)는 dec_iar_pd 및 dec_hint를 포함하는 PT 명령과 관련된 추가적인 파라미터에 대한 정보는 물론 dec_pt(PT 명령의 디코드를 나타냄)를 포함하는 일련의 제어 신호를 BRCTL로의 라인(129) 상에 생성한다. 그 다음, E1 단계 동안, E1 래치(127b)에 저장된 오퍼랜드는 ALU(130)에 의해 연산된다. 동시에, BRCTL(150)은 전술한 바와 같이, br_fe_pt_el(분기 제어 명령의 실행을 나타냄), br_fe_pt_iar 및 br_fe_pt_hint를 포함하는 다수의 제어 신호를 FECTL(101)로의 라인(152) 상에 표명한다. 또한, 바람직한 실시예에서, br_fe_pt_iar 및 br_fe_pt_hint에 대한 정보는 DEC(125)에 의해 디코딩 단계(D)에서 조사되었다. 이 동일한 E1 단계 동안, BRCTL(150)은 IAR.A(140)에 저장되고 br_fe_pt_iar에 의해 지정된 타겟 어드레스를 갖는 IART(115) 내의 임의의 명령 엔트리를 무효화한다. 이것은 HB(104) 내의 타겟 명령에 대해 명령 유효 레지스터 내의 제1(유효) 비트를 0으로 설정함으로써 행해진다. 또한, br_fe_pt_hint 정보는 타겟 명령에 대해 HB(104) 내의 제2(힌트) 비트를 설정하는 데 사용된다. E2 단계 후에, 후술하는 바와 같이, 새로운 타겟 어드레스가 사전 적재에 사용될 수 있다. W 단계 동안, 새로운 타겟 어드레스의 계산을 포함하는 ALU(130)의 결과가 br_fe_pt_iar에 의해 지정된 IAR.A(140) 엔트리에 저장된다.
능동 사전 적재
FECTL(101)은 본 발명에서 분기 타겟 명령의 사전 적재 및 예측 분기 타겟 명령의 페칭을 포함하는 다수의 중요한 기능을 수행한다. 후자의 기능은 조건부 분기와 관련하여 후에 더 상세히 설명되지만, 일반적으로 순차 실행(IB(110) 안에 적재될 명령의 페치) 또는 분기 실행(IART(115)를 검색하고 타겟 명령이 발견되지 않는 경우 적재될 명령을 페치)으로부터 정상 프로그램 흐름을 유지하도록 명령 캐시로부터 명령을 적재하는 프로세스를 말한다.
사전 적재는 연속적이고 인터럽트되지 않은 명령 스트림을 보장하기 위하여 유휴 캐시 기간 동안 FECTL(101)에 의해 명령이 식별되고 검색되어 미리(즉 필요하기 전에) 파이프라인 안에 적재되는 프로세스를 말한다. 바람직한 실시예에서, 능동 및 수동 사전 적재 프로세스가 모두 사용된다. 본 명세서의 내용 안에서 능동 적재는 일반적으로 FECTL이 예측된 분기 조건에 기초하여(즉, 발생 또는 발생하지 않음) IC(105)로부터 추측으로 명령을 요구한다는 사실을 말한다. 즉, 능동 사전 적재는 분기 명령의 발생 전에 IART(115)에 명령을 적재하려고 시도한다. 본 발명의 능동 사전 적재 절차는 매우 복잡하며 후술된다.
대조적으로, 수동 사전 적재는 훨씬 더 간단하며, 아래에 설명될 수 있다. 기본적으로, 이 절차는 정상 프로그램 흐름 동안에 발생하는 타겟 명령을 IART(115)에 적재하는 것을 포함한다. IART(115)에 필요한 타겟 명령을 사전 적재하는 것이 항상 가능한 것은 아니다(2 싸이클의 페널티가 발생). 이 경우, 정상 프로그램 흐름 동안 IC(105)로부터 타겟 명령이 대신 검색될 때, 그럼에도 불구하고 IART(115)에는 DEC(125)에 의해 디코딩된 후에 명령들이 적재되어 분기가 다시 발생하는 경우에도 정확한 타겟 명령이 사용될 수 있는 것을 보장한다. 따라서, 이러한 유형의 사전 적재는 분기 타겟이 디코딩된 후에 발생하지만, 관련 분기 타겟 명령이 기껏해야 한 번 사용할 수 없는 것을 보장한다.
본 발명에서 능동 적재는 바람직한 실시예에서의 명령의 실행과 동시에 이루어지지 않지만, 그럼에도 불구하고 본 발명의 다른 응용에서 상기 방식으로 수행될 수 있음이 명백하다.
이제, 능동 사전 적재를 더 깊이 설명하면, FECTL(101)은 바람직하게 그럴 가능성이 있는 경우(즉, BRCTL이 분기를 위한 명령 페치와 같은 몇몇 다른 동작을 요구하지 않는 경우), 그리고 IB(110)에 파이프라인을 채울 만큼 충분한 명령이 존재할 때 IC(105)로의 사전 적재 요구를 발생시킨다. 바람직한 실시예에서, 디코딩의 준비를 위해 IB(110)에 적어도 2개의 유효 명령이 존재하지 않는 경우에는 사전 적재가 수행되지 않는데, 이것은 파이프라인이 정상 명령 페치와 간섭하는 사전 적재 요구의 과잉에 의해 중지되지 않는 것을 보장하기 위한 절충이다.
어느 명령이 사전 적재되고 어느 IART 엔트리가 무효화될 것인지를 결정하기 위하여 FECTL(101)은 HB(104)에 저장된 타겟 명령 엔트리에 대한 정보를 모니터링한다. 보다 구체적으로, 임의의 클럭 싸이클 동안, FECTL은 명령 유효 레지스터가 IART(115) 내의 대응 엔트리가 무효(즉, 유효 비트=0)인 것을 나타내는 비트 값을 갖고 IART 엔트리를 위한 사전 적재 마스크 레지스터 내의 관련 힌트 비트가 타겟 명령으로의 분기의 높은 가능성(즉, 힌트 비트=1)을 나타내는 엔트리를 선택한다. 이러한 방식으로, 본 발명은 발생할 가능성이 있으나 실행 준비된 장소에 유효 명령이 없는 분기에 집중하는 예측 기법에 기초하여 사전 적재 프로세스를 수행한다.
이러한 하나 이상의 엔트리가 검출되는 경우, HB(104) 내의 적재 우선순위에 기초하여 여전히 하나의 엔트리가 바람직하게 선택되는데, 예컨대 간단한 방법으로는 가장 작은 인덱스 번호를 가진 엔트리를 사용하는 것이다. 따라서, 선택 마스크 레지스터가 고려되며, 가능한 최저 순위 IAR이 선택된다. 이 IAR 엔트리가 사전 적재를 위해 선택된 후, 선택 마스크 레지스터 내의 대응 비트는 이 엔트리를 다시 사전 적재하기 위한 후속 시도가 존재하지 않음을 보장하기 위하여 소거된다. 프리 페칭 동작에 이용할 수 있는 제한된 유휴 시간으로 인하여 어떤 환경에서는 더 낮은 순위의 IAR(예컨대 IAR6 또는 IAR7)은 능동 사전 적재 요구를 위해 도달될 수 없다는 것을 알 수 있다. IAR 엔트리가 이제 명령 레벨에서 지정될 수 있으므로(분기 제어 명령의 일부로서), 컴퓨팅 시스템(100)의 마이크로 구조의 능동 사전 적재 거동은 코드 레벨로 제어될 수 있다. 즉, 컴파일러는 이 구조에 대해 다른 순위의 IAR들을 지정함으로써 사전 적재를 능동적으로 순위화 및 우선순위화할 수 있다. 예컨대, 가능성 있는 분기를 위한 분기 제어 명령이 낮은 순위의 IAR을 지정할 수 있으며, 가능성 없는 분기에는 높은 순위의 IAR이 제공될 수 있다. 이러한 우선순위화 방법은 FIFO 및 LIFO와 같은 다른 방법에 비해 많은 이점을 갖는다. 전자의 경우, 모든 IAR에 동일한 기회가 주어지므로 우선순위화가 불가능하며, 따라서 사전 적재 거동에 영향을 주거나 제어하는 능력이 없게 된다. 후자의 경우는 가장 최근의 분기 제어 명령에 대한 적중률을 증가시키는 데 사용될 수 있지만, 다소 구현하기 복잡하다. 이 때문에 바람직한 실시예에서는 최하위 대 최고 순위 방법이 사전 적재를 위해 사용되며, 선택 마스크 레지스터는 어느 IAR이 어느 순간에 유효하게 남는가를 지시한다.
본 방법은 또한 사전 적재 요구를 위한 의사 결정 프로세스에 BRTCL(150)을 포함시키는데, 이는 본 발명자가 BRCTL을 포함시키는 것에 의해 프로세서(100)의 파이프라인 단계에 명령을 최적으로 공급하는 것이 가능해진다는 것을 발견했기 때문이다. 따라서, FECTL(101)이 사전 적재를 위한 유효 엔트리를 검출한 때, FECTL은 사전 적재 요구를 발생시키기 위하여 라인(152) 상에 fe_br_preload_req를 표명하며, 또한 BRCTL(150)에 fe_br_prload_iar에 지정된 사전 적재 제어 데이터를 가진 엔트리 번호를 통지한다. BRCTL(150)은 fe_br_preload_iar을 수신한 후, 이 신호에 기초하여 IAR.A의 지정 엔트리로부터 타겟 어드레스를 판독한다.
이때, 동일 싸이클에서 실행되는 데 필요한 분기 명령이 없는 경우, 전술한 br_fe_br_command를 통해 BRCTL(150)에 의해 사전 적재 명령(PRLD)이 생성되어 FECTL(101)로 라인(152) 상에 표명된다. 동시에, 판독된 타겟 어드레스는 MUX_BR(146)의 입력에 제공된다. 또한, fe_br_preload_iar에 의해 지정된 레지스터 번호는 IAR.IA(155)의 저장/엔트리 제어를 위하여 BRCTL(150)으로부터의 신호 br_fe_br_iarnum[2:0]을 통해 전송된다.
동일 싸이클 내에 실행되어야 하는 임의의 분기 명령들이 존재하는 경우, FECTL(101)로부터의 신호 fe_br_preload_req의 사전 적재 요구는 BRCTL(150)에 의해 무시된다. FECTL(101)이 br_fe_br_command에 구현된 PRLD 명령을 수신하고, IB(110)를 더 많은 명령으로 채울 필요가 없을 때(즉, IB(110)에 2 이상의 명령이 저장된 때), FECTL(101)은 사적 적재를 실행하기 시작한다. 즉, FECTL(101)은 MUX_BR(146)을 제어하여 라인 B 상에 IAR.A(140)로부터 타겟 어드레스를 선택한 후, MUX_FE(102)가 그 곳에 존재하는 입력 B를 선택하도록 제어함으로써 이 어드레스를 FAL(103)에 설정한다. 사전 적재 동작이 발생할 때, 신호 cache_no_fill은 또한 icc_fe_commmand 내에서 FECTL(101)에 의해 IC(105)로 표명되어 프로세서에 의해 사용되는 메인 메모리 시스템(도시되지 않음)에 대한 불필요한 액세스를 방지한다.
타겟 어드레스에 대응하는 유효 명령이 IC(105)에 위치하는 경우, 이 명려은 명령 라인(107)을 통해 전송되어 IART(115)에 저장된다. 동시에, FAL의 내용은 가산기(157)에 의해 +4 또는 +8 만큼 증분되고(IC(105)로부터 페치된 명령 수에 따라), 엔트리가 IAR.IA(155)에 저장되다. 이 단계의 목적은 IART(115)에서 명령을 사용하는 임의의 분기 명령의 후속 실행 동안 추가 타겟 명령이 빠르게 사전 적재될 수 있도록 하는 것이다.
전술한 사전 적재 동작은 대응 분기 제어 명령의 E2 스테이지 후의 어느 때엔가 실행된다. PT 명령의 실행이 완전히 종료되지 않고 타겟 어드레스가 아직 IAR.A(140)에 저장되지 않은 경우, BRCTL(150)은 실행되고 있는 PT 명령이 있음을 검출하여, MUX_BR(146)이 ALU(130)(입력 A)의 계산 결과를 타겟 어드레스로서 직접 전송하도록 제어한다. 언제 명령을 사전 적재할 것인지를 결정함에 있어서 FECTL(101)에 의해 실시되는 결정은 또한 필요한 경우 타겟 명령을 프리페치하는 데 사용될 수 있다는 것은 당업자에게 명백하다(즉, 타겟 명령이 명령 캐시에서 유효하지 않은 경우 메인 메모리로부터 페치되어야 한다).
분기 명령
본 바람직한 실시예에서, 3 종류의 분기 명령이 처리될 수 있다. 이들은 (1) 무조건부 분기 명령, (2) 분기 힌트 비트(BHB)를 가진 조건부 분기 명령, 및 (3) BHB=0인 조건부 분기 명령을 포함한다.
다른 유형의 분기 명령에 대한 본 발명의 분기 처리 성능의 개요가 도 2c의 도표에 제공된다. 헤드는 분기 유형(무조건부 또는 조건부), 예측(즉, 분기 발생이 예측되는지의 여부), 실제 분기 방향(즉, 분기가 실제로 발생하는지의 여부), 및 다양한 가능한 타겟 명령 레지스터 조건(즉, 2 명령, 1 명령, 0 명령을 가진 IAR.T 및 준비되지 않은 IAR.A)을 포함한다. 각 잠재 상황에 대해 관련된 페널티 싸이클 수가 식별된다. 세 개의 분기 페널티 싸이클의 소스가 존재하는데, 이들은 다음과 같이 간단하게 요약된다.
(1) 계산될 타겟 어드레스를 기다림. 본 발명에서 분기 명령이 빠르게 프리 디코딩될 수 있다는 사실 때문에 분기 명령이 완전히 디코딩되기 전에는 물론 이때에도 타겟 어드레스가 준비되어야 한다. 분기 제어 명령은 E2 스테이지까지 타겟 어드레스를 전송하지 않기 때문에 분기 제어 명령 및 분기 명령이 배면 대 배면으로 배치될 때 생성되는 적어도 하나의 버블(명령이 실행되지 않는 파이프라인 내의 단일 스테이지 갭)이 존재한다. 그러나, 대부분의 경우, 적당히 효율적인 컴파일러가 이러한 문제를 방지하기 위하여 2개 사이에 충분한 명령 이상이 존재하는 것을 보장할 수 있다.
(2) 페치될 타겟 명령을 기다림. 이 지연은 IC(105)의 레이턴시 싸이클 및 IART(115)가 명령을 준비하고 있는지의 여부의 함수이다. 바람직한 실시예에서, IC(105)는 2 싸이클 레이턴시를 가지며, IART는 2 명령을 유지할 수 있다. 이 것은 최악의 시나리오에서 2 싸이클을 필요로 하며, 최상의 시나리오에서 싸이클이 필요하지 않다는 것을 의미한다.
(3) 오류 예측에 대한 파이프라인 적재의 정정. 오류 예측 명령은 E2 스테이지에서 기껏해야 2 명령이 제거될 필요가 있다는 정정이 결정될 수 있으므로 스쿼시(파이프라인으로부터의 제거)되어야 한다.
이 도표로부터, 사전 적재가 성공적인 경우(제4 열에 도시된 바와 같이 IART(115)에 2 명령이 준비된 경우), 본 발명은 컴퓨팅 시스템(100)에서 레이턴시를 감소/제거하는 데 매우 효과적이라는 것을 알 수 있다.
이제, 특정 예측 시나리오(예측의 발생 여부) 및 동작 환경(즉, IART의 준비 여부) 하에서 특정 유형의 분기 명령(즉, 조건부 또는 무조건부)의 흐름의 상세한 설명이 제공된다. 아래에 모든 가능한 시나리오가 설명되지는 않지만, 본 발명의 요점은 실시예 및 첨부 도면에 의해 당업자에게 본 발명을 실시하고 이용하는 방법을 적당히 가르치는 방식으로 완전하고 정확히 설명된다.
무조건부 분기 명령
전술한 바와 같이, 정상 동작 동안, FAL(103)에 페치 어드레스가 이미 설정되어 있다. 그 다음, IC(105)는 F1 및 F2 스테이지 동안 이 어드레스에 기초하여 액세스하며, 명령이 IB(110)로 전송된다. 전술한 바와 같이, IB(110)의 내용이 (버퍼의 상부로부터) 판독되어 래치(D; 120)에 저장된다. D 스테이지 동안(사실상 프리 디코딩 스테이지(P)에서), 이 명령은 DEC(125)에 의해 디코딩되고, 이것이 무조건부 분기 명령일 때, DEC(125)에 의해 dec_branch_pd, dec_conditional (=0), dec_hint 및 dec_iar_pe의 신호가 생성되어 라인(129)에서 BRCTL(150)에 대한 입력으로서 표명된다. 그 다음, BRCTL(150)은 IART(115)가 이 특정 무조건부 분기 명령에 대한 유효 타겟 명령을 갖는지를 결정하기 위하여 dec_iar_pd에 의해 지정된 HB(104) 내의 대응 엔트리에 대한 유효 필드(제1 비트)를 검사한다. 그 다음, IART(115) 내의 유효 명령을 지시하는 유효 비트=1일 때, BRCTL(150)은 IART(115)의 적당한 엔트리로부터 타겟 명령을 게이트(판독)하도록 진행하며, 이 명령을 MUX_D(118)을 통해 래치 D(120)로 전송한다. 이러한 방법은 페널티 싸이클 없이 D 스테이지에 타겟 명령을 놓는 것을 가능하게 한다. 즉, 실행될 다음 명령이 프로그램 시퀀스 내의 무조건부 분기 명령을 바로 뒤따르지 않아도 전술한 바와 같이 적당한 타겟 어드레스, 타겟 명령 등을 셋업하는 분기 제어 명령의 디코딩/실행에 기초하여 이미 사전 적재되었다는 사실에 의해 실행될 수 있으며, 따라서 ??르은 분기 명령이 파이프라인에서 디코딩될 때 바로 준비된다.
또한 분기 명령의 디코딩 스테이지 동안, 신호 ATKN(실제 분기 발생)이 BRCTL(150)에 의해 br_fe_br_command를 사용하여 FECTL(101)로 전송된다. 또한, 타겟 어드레스는 dec_iar_pd에 의해 지정된 IAR.A 내의 엔트리로부터 판독되어 입력 B로서 MUX_BR(140)로 제공된다. 타겟 어드레스를 유지하는 IAR 번호도 br_fe_br_iarmun에 의해 BRCTL(150)에서 FECTL(101)로 전송된다. FECTL(101)이 ATKN 신호를 수신할 때, IART 엔트리에 대응하는 HB(104)의 제1(유효) 비트를 다시 검사함으로써 br_fe_br_iarnum에 의해 지시된 IART 엔트리의 유효성을 검사한다.
이때, IART(115) 내의 엔트리가 2개의 유효 명령을 갖는 경우, 이것은 타겟 명령이 이미 사전 적재되어 실행에 유효하므로 레이턴시 페널티 없이 분기가 실행된다는 것을 의미한다. 따라서, 프리페치 동작은 IC(105)로부터 IART(115)에 이미 저장된 명령을 바로 뒤따르는 명령을 얻는다. 그러나, 이 명령의 어드레스는 전술한 방식으로 이미 계산되어 IAR.IA에 저장되었다. 따라서, 다음 타겟 어드레스가 IAR.IA(155)로부터(IAR.A(140) 대신) 판독되어 MUX_FE(102)의 입력 A 상에 표명된 다음, FECTL(101)에 의해 선택되어 IC(105)에 대한 페치 어드레스로서 FAL(103)로 전송된다. 따라서, FECTL(101)은 이 미리 계산된(증분된) 타겟 어드레스에 기초하여 IC(105)에 액세스한다. 그 다음, IB(110)에는 이 타겟 어드레스에 의해 지시된 IC(105) 내의 명령이 적재된다. 이러한 방식으로, 적당한 타겟 명령이 파이프라인에 정확한 시퀀스로 연속 제공되어, 파이프라인 플러싱, 새로운 명령을 적재하기 위한 명령 캐시의 리액세싱, 명령 버퍼로의 명령의 재적재 등으로부터 분기 명령이 실행될 때 종래 기술에서 발생하는 통상적인 페널티 싸이클을 피할 수 있게 된다. 이 바람직한 실시예에서, 다음 명령은 물론 타겟 명령이 IART(115)로부터 적재되며, 그 다음 임의의 후속 명령이 IC(105)로부터 IB(110)으로 적재된다. 몇몇 환경에서는 유효 레이아웃 공간, 전력 요건 등에 따라 IART(115)의 크기를 변화시키는 것이 바람직할 수 있다. 그러나 일반적으로는 양호한 성능을 얻기 위하여 버퍼는 어떠한 명령 캐시 레이턴시도 오프셋할 수 있도록 충분히 깊어야 한다(본 실시예에서는 2 엔트리로 충분함).
전술한 시나리오에서 전술한 신호들 사이의 타이밍 관계를 나타내는 타이밍도가 도 3a에 제공되다.
대신 IART 엔트리가 유효하지 않은 것으로 밝혀진 경우, MUX_D(118)는 입력 B 상에서 IB(110)를 선택하도록 제어된다. FECTL(101)은 IAR.A(140)으로부터 들어오는 입력 B 상의 타겟 어드레스를 선택하도록 MUX_FE(102)를 제어한다. 그 다음, IAR.A로부터 전송된 이 타겟 어드레스는 FAL(103)에 적재되고, 전술한 바와 같이 적당한 타겟 명령을 찾기 위한 IC(105)로의 액세스가 실시된다. 그 다음, IC(105)로부터의 유효 명령이 전송되어 IB(110) 및 IART(115)에 저장된다. 이 방법에 따르면, 분기 명령이 제1회에 유효하지 않은 경우에도 적어도 동일한 무조건부 분기 명령이 다시 실행될 때, IART는 정확한 타겟 명령을 저장해야 한다. 따라서, 이러한 명령을 후에 만날 때, 바로 위의 문단에 설명된 절차가 수행되며, 적당한 타겟 명령이 사전 적재되었다는 사실로 인하여 다수의 잠재적인 페널티 싸이클이 절약된다.
도 2d 내지 2f는 파이프라인에서 무조건부 분기 명령이 발생할 수 있을 때 무조건부 분기 명령을 위한 3가지 가능한 시나리오에 대한 컴퓨팅 시스템(100)에서의 파이프라인의 상태의 스냅 사진이다. 이들은 (1) 타겟 명령이 IART(115)에서 유효한 무조건부 분기, (2) 타겟 명령이 IART(115)에서 유효하지 않은 무조건부 분기, (3) 타겟 어드레스조차 준비되지 않은(예컨대 이 경우 PT 명령과 관련 분기 명령 사이에 시간적으로 적당한 독립이 존재하지 않는다) 무조건부 분기를 포함한다. 각 경우, 파이프라인 적재, 및 분기 실행과 관련된 최대 레이턴시 페널티에 대한 표시?? 주어진다.
BHB=1을 포함하는 조건부 분기 명령
기본적으로, BHB=1인 조건부 분기 명령의 동작/거동은 전술한 무조건부 분기 명령의 그것과 동일하다. 주요 차이점은 다음과 같다. BHB=1인 조건부 분기 명령이 D 스테이지에서 디코딩될 때, BRCT(150)은 신호 PTKN(실제 발생한 대신 예측된 ATKN)를 생성하여 FECTL(101)에 표명한다. 조건부 분기 조건이 예측된 대로 실제로 취해진 경우에, 시스템은 무조건부 분기 명령 동작에 대해 전술한 바와 실질적으로 동일하게 거동한다. 이 시나리오를 위한 제어 신호들 간의 관계를 나타내는 타이밍도가 도 3b에 제공된다. 파이프라인 적재는 또한 기본적으로 정확히 예측된 경우에 도 2d 내지 2f와 동일하며, 따라서 이들은 반복 설명되지 않는다.
그러나, 오류 예측이 발생한 때(즉, 조건부 분기 실제로 발생하지 않은 때)에는 대신 다음의 흐름이 발생한다. 조건부 분기의 E2 스테이지에서, ALU(130)는 분기의 조건이 거짓임을 결정하고, 이 사실을 신호 imu_fomp_pred_Ex1을 통해 BRCTL(150)에 알린다. 그 다음, BRCTL(150)은 br_fe_br_command를 사용하여 신호 CNT(실패 예측 발생과 함께 계속)를 생성하여 새로운 타겟 어드레스와 함께 FECTL(101)에 표명한다. 이 경우, 분기가 취해지지 않은 경우, 실행될 다음 명령은 프로그램 흐름에서 순차적으로 분기 명령을 따르는 IB(110) 내의 하나이어야 한다. 따라서, 새로운 타겟 어드레스는 분기 명령의 프로그램 카운터(PC)+4이며, 이것은 MUX_BR(146)의 입력 C를 통해 적재된다. 래치 D(120) 및 E1 래치(127a)를 포함한 파이프라인의 스테이지의 일부에서의 정보는 BRCTL(150)에 의해 무효화되는데, 이것은 이들이 현재 정확하지 않은 IART(115)로부터 적재된 명령을 포함하기 때문이다. 이것은 분기가 실제로 취해지지 않지만 파이프라인이 아직 처리에 유효한 적당한 명령을 갖고 있기 때문에 레이턴시 페널티를 감소시킨다. 수행되어야 할 것은 잘못 적재된 명령이 스쿼시(제거)되고 파이프라인에 정확한 명령 스트림이 다시 채워져야 한다는 것이다. 그럼에도, 오류 예측 분기의 수는 작은 것으로 예측되므로, 이러한 레이턴시 페널티는 설명된 전반적인 분기 처리 구조에 의해 달성되는 성능 이점에 의해 실질적으로 중요한 것으로 믿어진다.
그 다음, FECTL(101)이 CNT 신호를 수신할 때, 이를 사용하는 MUX_D(102)를 통해 FAL(103)에 전술한 방식으로 전송하여 파이프라인이 재적재될 수 있도록 하기 위하여 적당한 타겟 명령을 검색한다. 이 시나리오를 위한 관련 제어 신호들 간의 관계를 나타내는 타이밍도가 도 3g에 제공되다.
도 2g 내지 2j는 조건부 분기 명령이 잘못 예측되고 실제로 취해지지 않은 3개의 가능한 시나리오에 대한 컴퓨팅 시스템(100)에서의 파이프라인의 상태의 스냅 사진을 제공한다. 이들은 (1) 예측이 취해졌으나 실제로는 발생하지 않았으며 타겟 명령이 IART(115)에서 유효한 조건부 분기, (2) 예측이 취해졌으나 실제로는 발생하지 않았으며 타겟 명령이 IART(115)에서 유효하지 않은 조건부 분기, (3) 예측이 취해졌으나 실제로는 발생하지 않았으며 타겟 어드레스조차도 준비되지 않은 조건부 분기를 포함한다. 각 경우에, 파이프라인 적재, 및 이 분기 실행과 관련된 최대 레이턴시 페널티에 대한 표시가 주어진다.
BHB=0의 조건부 분기 명령
이 상황에서, 분기 명령의 D 스테이지 동안, 분기 명령을 위한 사전 적재 요구가 BRCTL(150)에 의해 발행된다. 즉, BRCTL(150)이 라인(129) 상에서 DEC로부터 dec_branch_pd=1, dec_conditional=1 및 dec_hint=0를 수신할 때, HB(104)내의 대응 레지스터 엔트리 내의 제1 비트(유효 비트)를 관찰함으로써 dec_iar_pd에 의해 지정된 IART(115) 내의 엔트리의 유효성을 검사한다. IART 엔트리가 유효한 경우, BRCTL은 더 이상 아무 것도 행하지 않는다. 이것은 성능 관점에서 볼 때 취해지고 있지 않은 분기의 예측이 후에 부정확한 것으로 입증되는 경우에도 분기를 위한 정확한 타겟 어드레스가 이미 IART(115)에 적재되어 있기 때문에 레이턴시 페널티가 존재하지 않는다는 점 때문이다. 이 시나리오의 신호 타이밍 관계가 도 3d에 제공된다.
반면, IART(115) 내의 대응 엔트리가 유효하지 않은 경우, BRCTL(150)은 IAR.A(140)에 지정된 타겟 어드레스를 판독하여 br_fe_br_commnad 내의 제어 신호 PRLD(사전 적재)와 함께 라인 B 상에서 FECTL(101)로 전송한다. 이것은 또한 br_fe_br_iarnum 신호를 사용하여 분기 명령에 의해 지정된 IAR.A(140) 엔트리 번호를 전송한다. IB(110) 충전에 대해 명령 페치과의 경쟁이 없는 경우, 사전 적재 요구가 IC(105)로 전송된 다음, 능동 사전 적재 절차에 대해 설명한 바와 동일하게 동작이 진행된다.
동작 관점에서 볼 때, BHB가 분기가 취해지지 않을 것이고 분기가 실제로 취해지지 않은 것을 지시할 때, 프로그램 실행 흐름은 통상 명령의 그것과 꼭 같으며, 레이턴시가 발생하지 않는다는 것을 알 수 있다. BHB가 분기가 취해지지 않을 것이고 분기가 실제로 취해진 것을 지시할 때, E2 스테이지에서의 실행 흐름은 무조건부 분기 상황에서의 D 스테이지의 그것과 동일하다. 이 경우, D 래치(120) 및 E1 래치(127a, 127b)는 무효화되어야 한다.
전술한 바와 같이, 정확하게 예측되고 실제로 취해진 시나리오에 대해 예측되고 취해지지 않은 분기, 즉 실제로 취해지지 않은 사건은 무조건부 경우에 대해 도 2d에 도시된 것과 기본적으로 동일한 파이프라인 파라미터를 갖는다.
예측이 취해지지 않고 실제로 취해진 유형의 부정확한 예측의 경우에 대해 도 2j 내지 2l은 조건부 분기 명령이 취해지지 않은 것처럼 잘못 예측되고, 실제로 취해진 3개의 가능한 시나리오에 대한 컴퓨팅 시스템(100) 내의 파이프라인의 상태의 스냅 사진을 제공한다. 이들은 (1) 예측이 취해지지 않았으나 실제로는 취해졌으며 타겟 명령이 IART(115)에서 유효한 조건부 분기, (2) 예측이 취해지지 않았으나 실제로는 취해졌으며 타겟 명령이 IART(115)에서 유효하지 않은 조건부 분기, (3) 예측이 취해지지 않았으나 실제로는 취해졌으며 타겟 어드레스조차 준비되지 않은 조건부 분기를 포함한다. 각 경우에, 파이프라인 적재, 및 분기 실행과 관련되 최대 레이턴시 페널티에 대한 표시가 제공된다.
도면들로부터 알 수 있듯이, 본 발명은 이러한 유형의 오류 예측에 대해서도 정정하려는 추가적인 시도를 이용한다. 이것은 도 2j에서 알 수 있듯이 IART(115)가 분기가 잘못 예측된 경우에도 실행을 위해 준비된 분기 명령을 가질 수 있기 때문이다. 더욱이, IART(115)가 이러한 명령을 갖지 않은 경우에도 BRCTL(150)은 계류중인 더 높은 우선순취 페치가 존재하지 않는 경우 FECTL의 도움으로 이들을 적재하려고 시도한다(분기를 위한 예측이 취해지지 않은 상태에서도). 따라서, 상당한 잠재적인 레이턴시 싸이클이 방지된다.
신호 타이밍 고려
도 3a 내지 3g는 분기 명령 처리 프로세스를 포함하는 설명된 실시예의 동작 동안에 사용되는 다양한 신호( 및 이들의 관계)를 나타내는 타이밍도이다. 이 도면은 특히 (1) 파이프라인 스테이지의 상태, (2) 그 안의 명령 스트림의 진행, (3) 컴퓨팅 시스템(100)에서 발생할 수 있는 다양한 특정 동작 상태에 대해 DEC(125), BRCTL(150), FECTL(101) 및 다른 제어 논리에 의해 발생되는 전술한 제어 신호의 식별자 및 상대 타이밍 관계를 도시한다. 구체적으로, 설명된 잠재 상태들은 (1) 도 3a-IART(115)가 타겟 명령과 함께 준비된 때 처리하는 무조건부 분기 명령, 도 3b-예측(힌트 비트)이 분기가 취해질 것을 지시하고, IART(115)가 분기가 취해질 때 타겟 명령과 함께 준비된 조건부 분기, 도 3c-도 3b에서 IART(115)가 준비되지 않은 점 외에는 동일, (4) 도 3d-예측(힌트 비트)이 분기가 취해지지 않을 것을 지시하고, 이러한 분기가 실제로 취해지지 않지만, IART(115)가 타겟 명령과 함께 준비되지 않은 조건부 분기, (5) 도 3e-예측이 분기가 취해지지 않을 것을 지시하고, IART(115)가 타겟 명령과 함께 준비되고, 이러한 분기가 실제로 취해지는 조건부 분기, (6) 도 3f-IART(115)가 준비되지 않은 것을 제외하고는 도 3e와 동일, (7) 도 3g-IART(115)가 타겟 명령과 함께 준비된 것을 제외하고는 도 3d와 동일-을 포함한다. 이 도면들에 사용되는 바와 같이, T0-T7은 전술한 IAR을 나타내며, ibO은 IB(110)을 나타낸다. 그러나, 물론 잠재적인 명령 상태의 대표적인 예가 있으며, 컴퓨팅 시스템(100)의 다른 동작 상태를 처리하는 데 필요한 제어 신호의 다른 조합은 본 명세서로부터 당업자에게 명백할 것이다.
또한, 도 3h는 개선된 분기 제어 명령이 컴퓨팅 시스템(100)에 의해 처리되는 방법을 나타낸다. 무조건부 분기 명령(도면에 blink로 표시)이 파이프라인에서 분기 제어 명령을 따를 때, 이에 필요한 타겟 어드레스는 이미 계산되었으며, 따라서 분기 명령의 실행 스테이지(E1) 동안에 타겟 어드레스 명령(T0)을 적재하는 데 사용할 수 없다.
본 발명의 가르침의 주의깊은 검토로부터 당업자는 본 발명의 이점의 일부가 다음을 포함한다는 것을 알 것이다:
(1) 분기가 한 번만 실행되는 경우에도, IART(115)에서 타겟 명령에 대한 적중이 만들어질 수 있다.
(2) 컴파일러가 전체 프로그램을 분석할 수 있고 따라서 버퍼 내의 유효 엔트리의 이용을 최적화할 수 있으므로 IART(115)는 매우 클 필요가 없으며, 이에 따라 이러한 구조를 사용하는 프로세서(100)를 위한 공간 및 소비 전력이 절약된다.
(3) IART(115) 내의 타겟 명령 엔트리는 분기 제어 명령에 의해 직접 공급된 명령 어드레스 레지스터(IAR) 번호에 의해 액세스되어 지연이 최소화되거나 제거될 수 있다.
(4) 디코딩된 분기 명령(정상적으로 2 싸이클)에 기초하여 캐시 엔트리(2 명령)를 검색하는 것과 관련된 페치 레이턴시는 많은 경우에 발명적인 사전 적재 프로세스에 의해 실질적으로 제거되는데, 이는 각 사전 적재된 엔트리가 2개의 명령을 제공할 수 있기 때문이다(따라서 2 싸이클의 절약).
(5) 상기 프로세스를 극도로 효과적으로 만들기 위하여 기껏해야 3개의 명령만이 분기 제어 명령과 분기 명령 사이의 프로그램에 배치되면 된다. 이것은 PT 명령이 디코딩된 후, 타겟 어드레스는 PT 명령의 실행의 E2 단계에서 유효하게 되며, 따라서 타겟을 필요로 하는 분기 명령은 아직 D 단계에서(즉, 2 단계/명령 이상 후에) 최적으로 되지 않는다는 사실에 기인한다. 물론, 이 형태는 파이프라인의 특정 구조에 기초하여 파이프라인에 따라 변한다.
(6) 능동 및 수동의 2 종류의 사전 적재가 이용된다. 이러한 방법은 적당한 타겟 명령이 실행될 시간에 적재될 기회를 향상시킨다.
향상된 분기 제어/분기 명령
전술한 마이크로 구조는 독립 포맷을 사용하여 분기 처리를 조정하도록 설계되며, 이에 따라 분기 명령이 파이프라인을 미리 셋업하여 후속 분기 명령이 빠르고 효과적으로 실행될 수 있도록 한다. 본 명세서의 다음 부분은 분기 제어 명령 및 관련 분기 명령을 위한 구조의 바람직한 실시예에 대해 더 구체적으로 설명한다. 이들 실시예는 도 4a 및 4b에 각각 도시된다.
최초 설명 포인트로서 분기 제어 명령이 실제 분기 명령으로부터의 완전히 독립된 명령으로서 설명된다. 이 명령은 다수의 목적에 도움이 되지만 간명화의 관점에서 주 기능의 하나는 컴퓨팅 시스템에게 명령 스트림에서 곧 분기를 준비해야 할 것을 알리는 것이다. 따라서, 이 명령은 통상의 분기 명령과 공통으로 관련되지 않은 몇몇 기능을 수행하지만, 그럼에도 동작/기능 관점에서 실제 분기 명령의 논리 성분으로 고려될 수 있는데, 이는 이들 둘이 논리적으로 동작적으로 링크되기 때문이다. 또한, 본 명세서는 본 발명을 더 잘 설명하기 위하여 양 명령을 설명하지만, 본 발명의 어느 특정 명령에 응용에 있어서, 이들 두 명령을 통합 형태로 프로그래머에게 투명한 방식으로 구현하는 것도 고려할 수 있다는 것을 알아야 한다. 예컨대, 본 발명을 이용하는 컴퓨팅 시스템의 프로그램을 설계할 때, 통합 분기 명령만이 소프트웨어 프로그램 개발자/작성자에게 보일 수 있는 것이 가능하다. 개발자는 분기 제어 명령을 자체적으로 하이 레벨 포맷으로 구현하기 위한 명백한 도구에 노출되거나 제공 받을 수 있거나 그렇지 않을 수 있다. 그 대신, 조건부 루프 부분을 포함하는 하이 레벨 언어 명령 세트로 전체 프로그램 코드를 작성한 후에, 컴파일러는 특정 컴퓨팅 시스템(100)에서의 실행을 위해 가장 적당하고 최적인 포맷으로 하이 레벨 언어 명령을 적당한 분기 제어/분기 쌍으로 번역한다. 또한, 컴파일러는 필요한 타겟 명령 어드레스 계산 및 타겟 명령을 조사하여, IART(115)가 특정 프로그램 코드 내의 분기 동작을 처리하도록 효과적으로 사전 적재될 수 있도록 한다.
따라서, 특정 포맷의 분기 제어 명령(410)을 조사하는 도 4a를 참조할 때 다음 필드를 포함하는 것을 알 수 있다:
(1) Opcode(6 비트): 이 필드는 사전 디코딩 프로세스 동안에 컴퓨팅 시스템(100)에 독특하게 명령을 식별하기 위해 사용된다.
(2) Rm/edisp(6 비트): 이 필드는 후술하는 바와 같이 GPR 내의 레지스터들 중 하나를 지정하거나 PC 상대 분기를 위해 사용하는 확장 필드로서 사용되며, 오프셋을 위한 상대 또는 절대 베이스를 관련시키는 타겟 어드레스 베이스 파라미터로서 고려될 수 있다.
(3) Disp(13 비트): 이 필드는 PC 상대 분기를 위한 PC로부터의 오프셋을 나타내며, 19 비트 변위를 생성하기 위하여 edisp(6 비트)와 연결될 수 있다.
(4) L(1 비트): PT 명령의 확률 비트(예측 비트)로서 타겟 명령이 적어도 하나의 분기에 의해 필요할 수 있는 확률을 나타내는데, 이 파라미터는 후술하는 바와 같이 종래의 예측 비트보다 약간 다르고 더 복잡한 평가를 포함하며, 이는 다수의 분기 동작에 대한 누적 기대치를 고려하기 때문이다.
(5) R(1 비트): 타겟 계산이 레지스터 또는 PC와 관련되는지를 나타낸다.
(6) IAR(3 비트): 8개의 IAR.A 레지스터 중 어느 것에 계산된 타겟 어드레스가 적재될 것인지를 지정한다.
(7) Res(2 비트): 이것은 미래의 기능을 위해 남겨진 것이다.
본 실시예는 특히 전술한 바와 같은 컴퓨팅 시스템(100)에 사용하기 적당하지만, 특정 설계 선택, 시스템 구조 등에 따라 다양한 변형이 가능하며, 이러한 변형은 본 발명의 가르침의 영역에 있는 것으로 의도된다는 것이 명백하다. 분기 제어 명령의 몇몇 추가적인 특징은 컴퓨팅 시스템(100)에 사용되는 분기 제어 논리의 유연성 및 효율적인 이용성을 더 향상시킨다. 타겟 어드레스는 미리 계산되므로 IAR.A(140)의 IAR들 중 하나에 실제로 저장되기 전에 예외 검사가 이루어질 수 있다. 타겟 어드레스가 검사되어 어드레스 공간의 구현 부분 내에 있는지를 보장할 수 있으며, 그렇지 않은 경우 예외가 발생할 수 있다. 타겟 어드레스는 타겟 명령을 위해 적당히 정렬된 것을 보장하도록 검사될 수 있으며, 그렇지 않은 경우 예외가 발생할 수 있다. 다른 응용은 추가적인 예외 유형이 검사될 것을 요구할 수 있다.
이러한 예외는 명령 스트림에서 소프트웨어 에러가 조기에 발견되는 것을 가능하게 하며, 이것은 디버깅을 간단하게 해준다. 또한, 이러한 예외 경우의 사전 검출은 유효 명령 어드레스만이 IAR에 저장되는 것을 보장한다. 이것은 예컨대 구현되지 않은 어드레스 공간에 대응하는 어드레스 비트를 저장할 필요가 없거나 IAR에 저장된 값이 오류인 것을 지시할 필요가 없게 되므로 IAR의 저장량을 감소시킬 수 있다. 또한, 이러한 구조는 구현이 간단한데, 이는 IAR 값이 오류인 경우를 고려하기 위한 논리를 구현하는 후속 프리페치 또는 분기 메카니즘이 필요 없기 때문이다. 더욱이, 전술한 타게 어드레스 베이스 파라미터 및 변위 필드의 크기 때문에 분기 명령의 유효 제어 필드가 더 양호하게 사용될 수 있다(이는 어드레스 계산이 필요하지 않기 때문이다). 본 실시예에서, 적어도 4 종류의 PT 명령이 지원될 수 있다:
PTA offset, target: PC에 변위 필드에 기초한 상수를 더함으로써 PC에 대한 타겟 어드레스를 준비한다.
PTB offset, target: 전술한 바와 같이, 다른 상수가 사용되어 이 명령이 모드 B 타겟 명령으로의 분기에 사용될 수 있는 것을 제외한다.
PTABS address, register: 지정 IAR에 저장된 값을 사용하여 타겟 어드레스를 준비한다.
PTREL offset, target: PC에 지정 IAR 중 하나에 저장된 값을 더함으로써 타겟 어드레스를 준비한다.
다른 유형들도 당업자에게 명백하며, PT 명령(410)에 사용되는 코딩 필드의 유효성 및 다양성에 기초하여 쉽게 구현될 수 있다. 또한, 전술한 바와 같이, 분기 제어 명령은 또한 그 자신의 독립적인 예측 비트를 포함할 수 있는데, 이 파라미터는 실제로 후술하는 본 발명의 분기 명령에 고려되는 것과 아주 다른 정보를 고려한다. 이것의 의미는 이 파라미터가 종래 기술에서는 가능하지 않을 것이라고 믿어지는 독립적인 예측 레벨을 더한다는 점에서 아주 중요하다. 이것은 전술한 바와 같이 PT 힌트 비트가 대개 컴퓨팅 시스템(100)에서 추측적으로 프리페치 동작을 예측/실행하는 데 사용되고 특정 분기 타겟 명령을 필요로 할 수 있는 다수의 잠재적인 분기 동작의 누적 가능성을 고려한다는 사실에 기인한다. 이것은 분기 예측 힌트와 매우 다른데, 이것은 분기 예측 힌트가 명령 스트림의 후속 흐름을 구별(발생 여부)하는 데에만 사용되기 때문이다. PT 힌트 비트를 결정하는 데 있어서, 다수의 경쟁적인 고려가 이용될 수 있다. 예컨대, 후술하는 바와 같이, 다수의 분기 명령이 단일 PT 명령과 관련되는 것이 가능하다. 따라서, PT 힌트 비트는 잠재적인 분기 중 어느 하나가 타겟 명령을 포함하거나 요구할 수 있는 가능성을 고려해야 한다. 따라서, 하이 레벨 관점에서, PT 힌트는 기본적으로 IART(115)에 특정 타겟 명령이 필요할 가능성이 있는지를 예측한다. 본 출원인의 경험으로는, 이러한 분기 확률의 누적 계산은 더 정확한 타겟 명령 예측 프로세스를 제공하여, 더 적당한 명령이 미리 적재되어 필요시 실행될 준비가 되는 것을 보장한다. 예컨대, 컴파일러 분석으로부터 3개의 별도 분기가 동일한 타겟 어드레스를 사용할 것으로 결정하고, 이들 각각이 약 40%(3/5)의 발생 기회를 갖는 경우, 분기 힌트 비트는 이들 분기 중 어느 것도 취하지 않도록 설정되는 것이 가능하다. 그러나, 전반적으로, 이들 중 적어도 하나가 타겟 어드레스를 사용할 확률은 98/125 또는 약 80%라는 것을 알 수 있다. 따라서, 성능의 관점에서, IART(115)에 타겟 명령을 사전 적재하는 것이 매우 이로운데, 이는 타겟 명령이 프로그램 실행시에 어느 때인가 사용될 가능성이 매우 높고 그렇게 함으로써 많은 페널티 싸이클이 제거될 수 있기 때문이다.
통상의 프로그램에서 PT 명령의 사용의 대표적인 배치예가 도 4b에 나타나 있는데, 여기에는 2 개의 PT 명령이 2개의 다른 루프(BEGIN_LOOP 및 INC)의 정면에 배치되어 있다. 전술한 이유 때문에, 이들 명령은 이들 대응 분기 명령의 앞에 배치된다. 도 4b에 도시된 바와 같이, 가장 실질적인 이득은 PT 명령이 내부 루프 밖에 배치될 때 실현된다. 바람직하게는 이들 분기 제어 명령은 타겟 어드레스 레지스터를 판독하는 분기 명령으로부터 동적 명령 스트림이 최대로 독립되도록 배열된다. 또한, 이것은 명령의 흐름이 페널티 없이 변경 또는 유지되도록 배치하기 위한 최대 시간량을 분기 메카니즘에 제공한다. 이들 명령의 배치는 루프/블록-불변 코드 모션, 공통 서브 익스프레션 제거, 레지스터 할당 및 명령 스케쥴링과 같은 표준 컴파일러 기술을 사용하여 최적화될 수 있다. 하나 이상의 분기로부터의 PT 명령이 동일한 타겟 명령을 참조하는 경우, PT 명령은 병합될 수 있으며, 전술한 바와 같이, PT 힌트 비트는 예측 명령 흐름 조건을 더 양호하게 반영하도록 다수의 분기에 대한 예측 시나리오의 평가에 따라 조정될 수 있다. 실제적인 측면에서 이러한 최적화에 대한 유일한 제한은 프로그램 내의 호출 함수의 크기, 사용 어드레스 레지스터의 수 및 임의의 데이터/제어 종속성과 같은 특정 환경 제한에 기초한다.
이제 도 4b에서 개선된 분기 명령(420)의 특정 포맷을 검사하면, 다음 필드를 포함하는 것을 알 수 있다:
(1) Opcode(6 비트): 이 필드는 프리 디코딩 프로세스 동안 컴퓨팅 시스템(100)에 독특하게 명령을 식별하는 데 사용된다.
(2) Rm/Pm(6 비트): 이 필드는 GPR(135) 내의 레지스터 중 하나 또는 레지스터 술어(즉, 참/거짓과 같은 논리 조건)를 지정하는 데 사용된다.
(3) Rn/Pn(6 비트): 이 필드는 GPR(135) 내의 레지스터 중 다른 하나 또는 제2 레지스터 술어를 지정하는 데 사용된다.
(4) Res/imm(5 비트): 이들은 예약된다.
(5) L(1 비트): PT 명령의 예측 비트
(6) IAR(3 비트): IAR.A 레지스터 중 어느 것에 계산된 타겟 어드레스가 적재될 것인지를 지정한다.
(7) Extension(3 비트): 분기 동작을 조절하는 논리 동작, 또는 BEQ, BGE, JMP, BSR 등의 분기의 논리 유형을 지정하는데, 이들 동작은 전술한 바와 같이 2개의 독립 레지스터의 산술 또는 술어 조건에도 기초할 수 있다.
(8) Res(2 비트): 이들은 미래의 기능을 위해 예약된다.
PT 명령(410)에 대해, 본 실시예는 전술한 바와 같이 컴퓨팅 시스템(100)에 사용하기에 적당하지만, 특정 설계 선택, 시스템 구조 등에 따라 다양한 변형이 가능하며, 이러한 변형은 본 가르침의 영역에 포함되는 것이 의도된다는 것은 명백하다.
분기 명령(420)의 몇몇 추가 특징은 컴퓨팅 시스템(100)에 사용되는 분기 제어 논리의 유연성 및 효율적인 이용을 더 향상시킨다. 먼저, 타겟 어드레스는 미리 계산되므로, 현재 유효한 파라미터 필드는 일반적으로 "비교-폴드"로서 설명될 수 있는 동작을 실행하는 데 사용될 수 있다. 이것은 프로그램에서 공통으로 사용되는 비교 명령이 이제 분기 명령 자체로 폴드(병합)될 수 있다는 것을 의미한다. 물론, 이것은 전체 명령을 제거함으로써 상당한 시간을 절약하며 전체 코드 크기를 크게 줄일 수 있다. Rm 및 Rn 필드는 다음을 포함하는 많은 다른 유형의 분기 명령 중 하나를 구현하기 위하여 분기 확장 필드에 지정된 분기 유형에 의해 오퍼랜드로서 사용된다:
BEQ source1, source2, target Branch if equal (64 bit compare)
BNE source1, source1, target Branch if not equal (64 bit compare)
BGT source1, source1, target Branch if greater (64 bit signed)
BGE source1, source2, target Branch if greater than or equal (64 bit signed)
BGTU source1, source2, target Branch if greater than (64 bit unsigned)
BGEU source1, source2, target Branch if greater than or equal (64 bit unsigned)
전술한 바와 같이, 분기 명령(420)에 사용할 수 있는 여유 공간은 분기 평가시 범용 레지스터 비교 동작을 이용하기 위해 레지스터를 코딩하는 능력을 포함한 이로운 사용에 배당된다. 이것은 일반적으로 종래 기술에서는 가능하지 않은데, 레지스터 사양이 절차를 유용하게 하기 위해서는 적어도 5 비트(Rm, Rn 각각에 대해)를 필요로 하며, 이것은 종래의 분기 명령에서 유효하지 않다. 더욱이, 유효한 추가 연산 코드 공간으로 인하여 조건부 분기가 코딩되어 오퍼랜드(또는 레지스터) 술어 평가에 기초하여 몇몇 응용에서 실행될 수 있다. 즉, 양 술어(Pm, Pn)(이것은 레지스터 값일 수 있다)가 논리적으로 참(또는 거짓)으로 평가되거나 하나 또는 다른 하나가 참 조건을 갖는 경우 둥에만 분기가 발생할 수 있다. 다수의 술어 오퍼랜드를 비교 동작의 일부로서 평가하는 다른 유형의 분기 명령을 구성하기 위한 추가적인 방법은 본 가르침으로부터 당업자에게 명백할 것이다.
많은 분기 동작은 분기 파라미터와 0과의 비교를 필요로 한다. 레지스터(63)가 항상 0의 값을 갖도록 할당된 경우, 이 동작은 오퍼랜드의 하나로서 R63 세트를 가진 단일 분기 명령으로 대체될 수 있다. 이것은 명령의 포맷팅을 크게 단순화하며 실행 속도를 향상시킨다. 다른 유형의 분기 명령도 당업자에게 자명하며, PT 명령(410)에 사용되는 코딩 필드의 유효성 및 다양성에 기초하여 쉽게 구현될 수 있다. 예컨대, 본 발명에서 구현될 수 있는 추가적인 조건부 분기 명령은 레지스터에서 지정되지 않은 상수와 레지스터 값을 비교하는 것을 포함한다.
분기 조건이 만족된 경우, 레지스터 오퍼랜드를 사용한 논리 동작에 기초하여 분기 타겟이 IAR에 의해 지정된 내용을 사용하여 페치된다. 마이크로 구조의 잠재 분기 페널티를 더 감소시키기 위하여, 본 발명의 조건부 분기 명령은 코드 전반에 순차적으로 배열됨으로써 실패(즉 명령의 흐름의 재지정이 안됨)를 지원하여 분기 페널티를 방지한다.
전술한 바와 같이, 조건부 분기 명령(420)은 예측 비트(L)를 포함한다. 이 비트는 컴퓨팅 시스템(100)이 분기 조건이 해결되기 전에도 예측 경로의 실행을 시작해야 하는지를 결정하는 데 도움을 준다. 표준 컴파일러 발견적 방법 또는 분기 프로파일 정보를 분석하는 것에 기초하여 이 비트를 설정하기 위해 다양한 공지 기술이 사용될 수 있다.
또한, 전술한 바와 같이, 프로그램의 실행 전에 IART(115)에 하나 이상의 타겟 명령이 사전 적재되어 분기 속도를 향상시키고 전체 프로그램 성능을 향상시킬 수 있다. 이것은 코드 스캐닝(분기 명령 식별을 위해) 또는 루프와 같은 프로그램의 일부를 실행하기 전에 분기 타겟 어드레스, 타겟 명령 등을 IAR.T(115) 및 IAR.A(140)에 직접 식별 및 저장할 수 있는 구성 명령을 통한 명백한 레지스터 적재를 포함하는 다양한 기술에 의해 수행될 수 있다. 즉, 심지어 PT 명령의 발생에 앞서, 컴퓨팅 시스템(100)의 구조(예상 분기 타겟 어드레스 포함)를 셋업하는 구성 명령이 실행되어 하나 이상의 코드 부분의 실행을 위해 준비될 수 있다. 어느 분기 어드레스/명령이 적재될 것인지에 대한 결정은 전문적인 프로그램 설계자에 의한 고려의 수에 기초할 수 있으며, 다양한 시스템 특징 때문에, 정확한 방법은 응용에 따라 변할 것으로 예상된다.
도 4d에 도시된 바와 같이, 무조건부 분기 명령(430)은 다소 다른 포맷을 가지며, 포맷 BLINK Target, Link를 가진 분기 및 링크(BLINK) 명령으로 고려될 수 있다. 이 명령에서 필드들은 아래와 같이 정의된다:
(1) Opcode (6 비트): 이 필드는 컴퓨팅 시스템(100)에 독특하게 명령을 식별하기 위하여 프리 디코딩 프로세스 동안에 사용된다.
(2) r (4 비트), 7 비트 및 4 비트: 이 필드는 예약된다.
(3) b (3 비트): 이 필드는 타겟 어드레스(IAR) 레지스터 중 하나를 타겟 어드레스 소스로서 지정한다.
(4) d (6 비트): 이 필드는 분기를 따르는 명령의 어드레스로서 사용될 GPR(135) 내의 레지스터 중 하나를 지정하는 데 사용된다.
전술한 포맷은 디코딩이 훨씬 더 빠르게 수행될 수 있기 때문에 항상 참인 조건부 분기에 대해 바람직하다. BLINK는 후속 명령의 타겟 어드레스를 GPR(135) 내의 목적 레지스터(Rd)에 기록한다. 이것은 타겟 명령 시퀀스가 제어를 유발한 명령 시퀀스로 제어를 되돌리는 것을 허용하기 때문에 링크 메카니즘으로 고려될 수 있다. 따라서, 이것은 표준 호출 및 복귀 메카니즘을 구현하는 데 사용될 수 있다.
링크 없이 무조건부 분기 명령(430)을 구현하기 위하여, 특수 레지스터가 GPR(135)에 전용으로 사용되어 BLINK Target, R63으로서 포맷된 분기 명령이 목적 레지스터에 기록하지 않고 제어를 전달할 수 있다.
또한, 본 명세서로부터 분기 제어/분기 명령의 많은 다른 변형 및 조합이 가능하다는 것을 이해해야 한다. 사실, 다른 파이프라인 구조를 사용하는 다른 프로세서에서는 이러한 명령의 구조/포맷은 사용되는 특정 마이크로 구조를 최상으로 맞추기 위하여 약간 조정될 필요가 있다. 그럼에도, 이러한 응용이 설명된 원리 및 특징을 이용하는 경우, 분기 동작 성능 관점에서 매우 이로울 것이 예상된다.
다른 명령 세트를 위한 추가 동작 모드
본 발명의 또 하나의 특징은 컴퓨팅 시스템(100)이 몇몇 경우에 2개의 별도 명령 세트를 지원하는 데 사용될 수 있다는 것인데, 이 명령 세트들은 설명의 편의를 위해 세트 A 및 세트 B로 참조된다. 이 경우, 프로세서는 2개의 별도 동작 모드(즉, 모드 A 및 모드 B)로 실행된다. 하나 이상의 명령 세트의 사용은 프로그래밍 최적화를 지원하는 몇몇 응용에서(즉, 프로그램 성능이 하나의 모드 또는 다른 모드에서 실질적으로 우수한 것으로 결정되는 경우), 또는 상속 소프트웨어(즉, 더 많은 기본 명령만을 포함하는 프로그램)를 지원하는 것이 바람직한 경우에 도움이 된다.
본 바람직한 실시예에서, 컴퓨팅 시스템(100)은 후술하는 바와 같이 32 비트 명령인 모드 A 명령을 실행하는 데 최적화되어 있지만, 전술한 바와 같이 16 비트 명령으로 구성된 명령 세트 B를 지원할 수도 있다. 모드 A 동작은 전체 구조, 타이밍, 버스 프로토콜, 데이터 경로, 특정 회로 구현 등이 세트 A의 명령을 지원하도록 구성되어 있다는 관점에서 최적화되어 있다. 세트 B 명령을 실행하기 위하여 다른 세트 A 명령을 사용하여 이들을 에뮬레이션하여 하드웨어 및 프로그래밍 복잡성이 제거될 수 있도록 하는 것이 바람직하다.
예컨대, 파이프라인 안으로 명령이 들어와 IB(110)에 저장될 때, 본 컴퓨팅 시스템(100)은 세트 A 또는 세트 B로부터의 명령과 같이 그 상태에 관하여 구별을 하지 않는다. 이러한 구별은 예컨대 디코딩 또는 프리 디코딩 동작 동안에 디코더(125)에 의해 만들어진다. 세트 B로부터의 명령을 만났을 때, 이 명령은 별도 파이프라인 스테이지(도시되지 않음)로 전송되어 (다양한 종래 기술을 사용하여) 하나 이상의 세트 A 명령으로 변환될 수 있다. 그 다음, 이러한 세트 A 교체 명령이 임의의 다른 세트 A 명령으로서 정상적인 방식으로 실행되도록 파이프라인의 적당한 스테이지에 삽입된다.
그럼에도, 2개의 명령 세트가 동일한 분기 명령 포맷 또는 분기 제어 처리를 갖지 않을 수도 있다. 이 경우, 적어도 컴퓨팅 시스템(100)의 모드 A 동작이 전술한 독립 분기 프로세스, 즉 타겟 어드레스를 미리 계산하고 시스템(100) 내에 버퍼 및 논리를 셋업하는 데 사용되고, 또한 분기 명령 자체에 대한 폴디드 분기 조건/방향 포맷을 포함하는 프로그램 흐름에서 일찍이 제공된 분기 제어 명령과 결합된 분기 명령을 사용하는 것이 바람직하다(도 3b 참조).
이와 달리, 명령 세트 B는 타겟 어드레스를 계산하는 데 별도 분기 제어 명령을 사용하지 않고, 별도 비교 명령을 사용하여 분기 조건을 해결한다. 또한, 모드 B 동작에 사용되는 분기 프로세스는 분기를 따르는 명령을 실행시키는 지연된 분기 명령을 무조건적으로 더한다.
따라서, 본 발명은 전술한 에뮬레이션 방법과 일관되게 모드 A 분기 명령이 뒤따르는 분기 제어 명령에 의해 모드 B 분기 명령을 에뮬레이션한다. 이 경우, 배면 대 배면 PT 및 분기 명령이 파이프라인 버블을 유발하기 때문에 모드 B 분기에 대해 1 싸이클의 페널티가 불가결하게 존재하게 된다. 모드 B 지원 동작을 위한 지원이 대부분의 응용에서 큰 것으로 예상되지 않기 때문에, 이것은 사실상 매우 수용할만한 결과이다. 모드 B 명령을 디코딩하는 데 필요한 여분의 파이프라인 스테이지로 인하여, 추가 버블이 발생하는 것이 가능하다. 모드 B 명령의 처리를 간단히 하기 위하여, 분기 예측이 수행되지 않는 것도 바람직하다. 즉, 모든 조건부 분기가 취해지지 않는 것으로 예측된다. 이것은 이 경우에 분기 제어 명령이 DEC(125)에 의해 생성되고(컴파일러/소프트웨어 결정에 의해서가 아니라), 따라서 관련 힌트 비트가 신뢰성 있게 생성될 수 없다는 사실의 결과이다. 그러나, 일부 환경에서(분기 명령에 의해 취해진 경로에 기초하여) 추가적인 모니터링 논리(도시되지 않음)에 의해 힌트 비트가 조정될 수 있으며, 모드 A 명령 기반의 프로그램을 위해 만들어진 컴파일러 결정의 거동을 유사하게 모방할 수 있는 것도 가능하다.
모드 B 지연 분기 명령을 지원하기 위하여, 모드 A의 실패 명령이 무조건적으로 실행된다. 실제로 취해진 분기에 대해, BRCTL(150)은 FECTL(101)이 새로운 명령 페치를 시작하기 위해 분기 타겟 어드레스를 받아 드릴 수 있을 때까지 분기 타겟 어드레스를 유지한다. 이것은 모드 B 지연 슬롯 명령이 IC(105) 내의 다른 캐시 라인에 있으며, 따라서 IB(110) 내의 정확한 시간 및 위치에 반드시 적재되는 것은 아니기 때문이다. 정상적으로, BRCTL(150)은 분기 방향을 결정한 다음, 대기 없이 페치 경로를 재지정한다. 그러나, 분기가 지연된 경우에, 지연 슬롯 명령이 캐시 액세스를 놓친 경우에는 명령이 페치되기 전까지 프로그램 흐름의 방향이 변경될 수 없다.
본원 발명은 컴퓨팅 시스템 및 최적화된 분기 명령 실행과 관련된 프로그램을 구현하기 위한 시스템 및 방법을 제공한다. 본원 발명은 분기 동작을 2 부분으로 나누고, 명령 스트림 내의 분기 명령에 선행하는 분기 제어(분기 준비)를 포함하여, 컴퓨팅 시스템의 파이프라인이 적당한 타겟 명령을 적재하도록 미리 설정하는 방식에 의해서, 분기 명령이 정확히 예측된 경우 명령 흐름이 쉽게 재지정될 수 있으며, 타겟 어드레스 계산 레이턴시, 명령 캐시 레이턴시 및/또는 오류 예측에 의해 발생하는 분기 실행 페널티가 크게 감소될 수 있다.
본 발명을 구현하는 전술한 실시예들은 단지 예로서 제공되는 것이며, 어느 면에서도 본 발명을 제한하는 것으로 의도되지 않는다. 본 명세서의 가르침에 기초하여 다양한 변형이 가능하다는 것은 당업자에게 자명하다. 따라서, 이러한 모든 변형 및 수정은 첨부된 청구범위에 정의된 바와 같이 본 발명의 영역 및 사상 안에 포함되는 것으로 의도된다.

Claims (49)

  1. 다수의 어드레스 레지스터;
    제공 받은 명령을 디코딩하고, 상기 디코딩의 결과에 따라 제어 신호를 제공하는 명령 디코더; 및
    상기 제어 신호에 응답하여 상기 명령을 실행하는 실행부
    를 포함하되, 상기 명령은
    1) 분기 제어 동작을 정의하는 동작 코드 필드, 분기를 위한 어드레스를 계산하는 데 사용되는 어드레스 필드, 및 상기 어드레스가 계산된 후 저장될 상기 다수의 어드레스 레지스터 중 하나를 지정하기 위한 제1 레지스터 선택 필드를 포함하는 제1 명령; 및
    2) 분기 동작을 정의하는 동작 코드 필드, 및 상기 분기 동작에 사용될 상기 어드레스를 저장하는 상기 다수의 어드레스 레지스터 중 하나를 지정하기 위한 제2 레지스터 선택 필드를 포함하는 제2 명령
    을 포함하는 것을 특징으로 하는 마이크로프로세서.
  2. 제1항에 있어서, 프로그램 카운터(PC)를 더 포함하고,
    상기 제1 명령의 상기 어드레스 필드는 직접 데이터(immediate data)를 위한 필드를 더 포함하며, 상기 제1 레지스터 선택 필드에 의해 정의되는 어드레스 레지스터 내에 저장될 상기 어드레스를 상기 직접 데이터에 상기 프로그램 카운터의 내용을 더함으로써 계산하는 것을 특징으로 하는 마이크로프로세서.
  3. 제1항에 있어서, 다수의 범용 레지스터를 더 포함하고,
    상기 제1 명령은 상기 다수의 범용 레지스터 중 하나를 지정하기 위한 소스 레지스터 선택 필드를 더 포함하며, 상기 소스 레지스터 선택 필드에 의해 지정되는 상기 범용 레지스터 중 하나에 있는 데이터는 상기 제1 레지스터 선택 필드에 의해 상기 어드레스로서 정의되는 상기 어드레스 레지스터에 저장되는 것을 특징으로 하는 마이크로프로세서.
  4. 제1항에 있어서,
    프로그램 카운터(PC); 및
    다수의 범용 레지스터
    를 더 포함하고,
    상기 제1 명령은 상기 다수의 범용 레지스터 중 하나를 지정하기 위한 소스 레지스터 선택 필드를 더 포함하며, 상기 제1 레지스터 선택 필드에 의해 정의되는 어드레스 레지스터에 저장될 상기 어드레스는 상기 프로그램 카운터(PC)의 내용을 상기 소스 레지스터 선택 필드에 의해 지정되는 상기 범용 레지스터 중 하나에 있는 데이터에 더함으로써 계산되는 것을 특징으로 하는 마이크로프로세서.
  5. 제1항에 있어서, 상기 제1 명령은 명령 실행 흐름이 상기 제2 명령으로 전달될 가능성이 있다는 것을 지시하기 위한 필드를 더 포함하는 것을 특징으로 하는 마이크로프로세서.
  6. 제1항에 있어서, 상기 제2 명령은 제1 길이 명령, 및 상기 제1 길이 명령과 길이가 다른 제2 길이 명령을 포함하고, 상기 마이크로프로세서는 상기 제1 길이 명령을 실행하기 위한 제1 모드 및 상기 제2 길이 명령을 실행하기 위한 제2 모드를 갖는 것을 특징으로 하는 마이크로프로세서.
  7. 제6항에 있어서, 상기 제1 길이 명령은 길이가 n 비트이고, 상기 제2 길이 명령은 길이가 2n 비트인 것을 특징으로 하는 마이크로프로세서.
  8. 제1항에 있어서, 상기 프로세서는 상기 어드레스에 의해 지정된 명령을 저장하기 위한 명령 버퍼를 더 포함하는 것을 특징으로 하는 마이크로프로세서.
  9. 제1항에 있어서, 상기 다수의 어드레스 레지스터는 적어도 8개인 것을 특징으로 하는 마이크로프로세서.
  10. 제1항에 있어서, 상기 제1 레지스터 선택 필드는 길이가 적어도 3 비트인 것을 특징으로 하는 마이크로프로세서.
  11. 제1항에 있어서, 프로그램 카운터를 더 포함하고,
    상기 제2 명령은 상기 제2 레지스터 선택 필드에 의해 지정되는 상기 어드레스 레지스터에 유지되는 상기 어드레스가 상기 프로그램 카운터에 적재(load)되도록 하는 것을 특징으로 하는 마이크로프로세서.
  12. 제1항에 있어서,
    프로그램 카운터(PC); 및
    다수의 범용 레지스터
    를 더 포함하고,
    상기 제2 명령은
    상기 다수의 범용 레지스터 중 하나를 지정하는 제1 범용 레지스터 선택 필드; 및
    상기 다수의 범용 레지스터 중 하나를 지정하는 제2 범용 레지스터 선택 필드
    를 더 포함하며,
    상기 제2 명령은, 상기 제1 범용 레지스터 선택 필드에 의해 지정되는 상기 범용 레지스터의 값과 상기 제2 범용 레지스터 선택 필드에 의해 지정되는 상기 범용 레지스터의 값을 비교한 결과에 따라 상기 제2 레지스터 선택 필드에 의해 지정되는 상기 어드레스 레지스터에 유지되는 상기 어드레스가 상기 프로그램 카운터(PC)에 적재되도록 하는 것을 특징으로 하는 마이크로프로세서.
  13. 제1항에 있어서,
    프로그램 카운터(PC); 및
    다수의 범용 레지스터
    를 더 포함하고,
    상기 제2 명령은
    상기 다수의 범용 레지스터 중 하나를 지정하는 제1 범용 레지스터 선택 필드; 및
    변위 값을 나타내기 위한 직접 데이터 필드(immediate data field)
    를 더 포함하며,
    상기 제2 명령은 상기 제1 범용 레지스터 선택 필드에 의해 지정되는 상기 범용 레지스터의 값과 상기 제2 범용 레지스터 선택 필드에 의해 지정되는 상기 범용 레지스터의 값을 비교한 결과에 따라 상기 제2 레지스터 선택 필드에 의해 지정되는 상기 어드레스 레지스터에 유지되는 상기 어드레스가 상기 프로그램 카운터(PC)에 적재되도록 하는 것을 특징으로 하는 마이크로프로세서.
  14. 제1항에 있어서, 상기 제2 레지스터 선택 필드는 길이가 적어도 3 비트인 것을 특징으로 하는 마이크로프로세서.
  15. 제1항에 있어서, 상기 제1 및 제2 명령은 각각 길이가 적어도 32 비트인 것을 특징으로 하는 마이크로프로세서.
  16. 제1항에 있어서, 상기 다수의 어드레스 레지스터는 가상 어드레스를 저장하는 것을 특징으로 하는 마이크로프로세서.
  17. 프로세서에 있어서,
    분기 제어 동작을 실행하는 제1 명령 및 결합된 비교 동작 및 분기 동작을 실행하는 제2 명령을 디코딩하기에 적합한 명령 디코더; 및
    상기 프로세서에 의해 실행되는 모든 프로그램 분기가 명령 스트림 내의 상기 제2 명령들 중 하나 이상과 쌍을 이루고 이에 선행하는 상기 제1 명령으로 구성되도록 상기 제1 및 제2 명령을 실행하기 위한 실행부
    를 포함하되,
    상기 제1 명령은 타겟 명령이 상기 하나 이상의 제2 명령의 일부로서 실행될 가능성이 있는지의 여부를 예측하기 위한 제1 예측 필드를 포함하고,
    상기 제2 명령 각각은 상기 분기 명령이 취해지거나 취해지지 않은 것으로서 실행될 가능성이 있는지의 여부를 포함하는 상기 비교 동작의 결과를 예측하기 위한 제2 예측 필드를 포함하며,
    상기 프로세서는 상기 제2 명령의 실행에 앞서 타겟 명령을 적재하기 위한 2 레벨 예측 방법을 사용하는 것을 특징으로 하는 프로세서.
  18. 제17항에 있어서, 상기 프로세서는 상기 제1 예측 필드의 제1 예측값에 기초하여 상기 타겟 명령을 추론적으로 페치(fetch)하기 위한 추론적 사전 적재 동작의 요구를 발생시키는 것을 특징으로 하는 프로세서.
  19. 제18항에 있어서, 상기 요구는 상기 타겟 명령을 유지하는 명령 캐시에 대해 더 높은 액세스 요구가 만들어지지 않은 경우에 수행되는 것을 특징으로 하는 프로세서.
  20. 제17항에 있어서, 상기 프로세서는 상기 제2 예측 필드의 제2 예측값에 기초하여 사전 적재될 타겟 명령에 대한 요청을 발생시키는 것을 특징으로 하는 프로세서.
  21. 제20항에 있어서, 상기 요청은 상기 타겟 명령을 유지하는 명령 캐시에 대해 만들어지는 임의의 추론적인 적재 요구보다 높은 우선 순위로 수행되는 것을 특징으로 하는 프로세서.
  22. 제1 명령 세트로부터의 제1 모드 명령을 사용하는 제1 모드와 상기 제1 명령 세트와 다른 제2 명령 세트로부터의 제2 모드 명령을 사용하는 제2 모드에서 동작가능한 프로세서에 있어서,
    상기 제1 모드 명령 및 제2 모드 명령을 디코딩하기에 적합하고, 상기 제1 명령 세트로부터의 제1 유형의 분기 명령, 및 상기 제2 명령 세트로부터의 제2 유형의 분기 명령을 포함하는 명령 디코더; 및
    상기 제1 모드 명령을 실행하기 위한 실행부
    를 포함하되,
    상기 제1 유형 분기 명령은 제1 분기 제어 명령 및 제1 분기 명령의 조합으로 이루어지며, 상기 제1 분기 제어 명령은 상기 분기 명령에 앞서 명령 시퀀스 내에 위치하여 상기 실행부가 상기 제1 분기 명령을 위한 분기 타겟 어드레스를 계산하도록 하며,
    상기 제2 유형 분기 명령은 상기 실행부에 의해 실행되기 전에 분기 제어 명령과 분기 명령을 구비한 제1 유형 분기 명령으로 변환되는 것을 특징으로 하는 프로세서.
  23. 제22항에 있어서, 상기 제2 유형 분기 명령은 비교 명령과 별도 분기 명령(separate branch instruction)으로 이루어진 것을 특징으로 하는 프로세서.
  24. 제23항에 있어서, 상기 비교 명령 및 별도 분기 명령은 상기 제2 유형 분기 명령이 상기 제1 유형 분기 명령으로 변환될 때 상기 분기 명령 안으로 폴드(fold)되는 것을 특징으로 하는 프로세서.
  25. 제22항에 있어서, 상기 제1 유형 분기 명령은 상기 제1 유형 분기 명령이 상기 프로세서에 의해 실제로 취해질 것인지의 여부를 예측하기 위한 예측 비트를 포함하는 것을 특징으로 하는 프로세서.
  26. 제25항에 있어서, 상기 제2 유형 분기 명령은 예측 비트를 포함하지 않는 것을 특징으로 하는 프로세서.
  27. 제22항에 있어서, 상기 제2 유형 분기 명령은 지연 분기 명령으로 이루어지고, 상기 제2 유형 분기 명령은 상기 분기 명령이 실행되기 전에 하나 이상의 실패 명령(fall-through instruction)이 뒤따르는 분기 제어 명령으로서 실행되는 것을 특징으로 하는 프로세서.
  28. 제22항에 있어서, 상기 제1 유형 분기 명령의 상기 분기 제어 및 분기 명령은 상기 명령 디코더에 의해 사용될 수 있는 별도 예측 비트를 구비한 것을 특징으로 하는 프로세서.
  29. 컴퓨팅 머신에서 프로그램 분기 명령의 동작을 용이하게 하는 기계적으로 실행가능한 분기 제어 명령에 있어서,
    (a) 상기 프로그램 분기가 제1 유형의 분기 명령 또는 제2 유형의 분기 명령을 포함하는지를 지정하기 위한 제1 부분;
    (b) 상기 프로그램 분기 명령을 위한 타겟 어드레스와 관련된 제2 부분; 및
    (c) 상기 타겟 어드레스를 저장하기 위한 타겟 어드레스 레지스터를 지정하는 제3 부분
    을 포함하며,
    상기 제어 명령은 상기 컴퓨팅 머신이 상기 프로그램 분기 명령이 실행되기 전에 상기 타겟 어드레스를 계산하도록 하며, 상기 제2 부분의 가변량이 상기 컴퓨팅 머신에 의해 상기 타겟 어드레스를 계산하는 데 사용되고, 상기 가변량은 상기 제어 명령의 상기 제1 부분의 값에 기초하여 결정되는 것을 특징으로 하는 제어 명령.
  30. 제29항에 있어서, 상기 제1 유형의 분기 명령은 프로그램 카운터(PC) 기반 분기에 대응하며, 상기 제2 유형의 분기 명령은 레지스터 기반 분기에 대응하는 것을 특징으로 하는 제어 명령.
  31. 제30항에 있어서, 상기 가변량은 상기 프로그램 분기 명령이 PC 기반 분기일 때 변위 값을 지정하기 위한 제1 길이 필드를 포함하고, 상기 가변량은 상기 분기 명령이 레지스터 기반 분기일 때에는 레지스터 번호를 지정하기 위한 제2 길이 필드를 포함하는 것을 특징으로 하는 제어 명령.
  32. 제29항에 있어서,
    (d) 상기 프로그램 분기 명령에 관한 예측과 관련된 예측값을 가진 제4 부분을 더 포함하고,
    상기 예측값이 상기 프로그램 분기 명령이 취해질 것으로 예측될 때에는 제1 값을 갖고, 상기 프로그램 분기 명령이 취해지지 않을 것으로 예측될 때에는 제2 값을 갖는 것을 특징으로 하는 제어 명령.
  33. 제32항에 있어서, 상기 컴퓨팅 머신은 상기 예측값에 기초하여 프리페치 동작 및/또는 사전 적재 동작을 시작하는 것을 특징으로 하는 제어 명령.
  34. 제29항에 있어서, 상기 제3 부분은 적어도 8개의 별도 타겟 명령 어드레스 레지스터 중 하나를 지정하기 위한 적어도 3개의 데이터 비트를 포함하는 것을 특징으로 하는 제어 명령.
  35. 제31항에 있어서, 상기 제2 부분의 상기 제1 길이 필드는 19 비트 변위값을 포함하며, 상기 제2 부분의 상기 제2 길이 필드는 상기 컴퓨팅 머신 내의 64 레지스터 중 하나에 대응하는 6 비트 레지스터 값을 포함하는 것을 특징으로 하는 제어 명령.
  36. 제29항에 있어서, 상기 제어 명령은 2개 이상의 별도 프로그램 분기 명령과 연관될 수 있는 것을 특징으로 하는 제어 명령.
  37. 제29항에 있어서, 다수의 상기 제어 명령이 상기 컴퓨팅 머신에 의해 실행되어 상기 타겟 명령 어드레스 레지스터 각각에 다른 프로그램 분기 명령 타겟 어드레스를 미리 적재함으로써 다수의 타겟 어드레스가 계산되어 상기 컴퓨팅 머신이 임의의 프로그램 분기 명령을 실행하기 전에 사용될 수 있는 것을 특징으로 하는 제어 명령.
  38. 컴퓨팅 머신 상에서 실행되는 프로그램에서 프로그램 분기를 발생시키기 위한 분기 명령에 있어서,
    (a) 분기 결정을 실행하기 위한 분기 파라미터를 포함하는 제1 부분 -상기 분기 파라미터는 하나 이상의 데이터 항목을 포함함-;
    (b) 상기 프로그램 분기가 상기 컴퓨팅 머신에 의해 취해져야 할 것인지 취해지지 않아야 할 것인지를 결정하기 위하여 상기 하나 이상의 데이터 항목과 관련하여 사용될 비교 동작을 지정하는 정보를 저장하기 위한 제2 부분; 및
    (c) 상기 프로그램 분기가 취해질 때 명령 실행 흐름의 재지정을 수행하기 위하여 상기 컴퓨팅 머신에 의해 사용되는 분기 타겟 어드레스 정보를 포함하는 제3 부분
    을 포함하며,
    상기 분기 명령은 상기 분기 결정 및 상기 분기 명령과 관련된 명령 실행 흐름의 재지정이 상기 컴퓨팅 머신에서 동시에 해결될 수 있도록 구성되는 것을 특징으로 하는 분기 명령.
  39. 제38항에 있어서, 상기 분기 명령은 상기 분기 결정 및 명령 실행 흐름의 재지정에 앞서 실행되는 제어 부분을 포함하며, 상기 제어 부분은 분기 타겟 어드레스를 계산하기 위해 사용되는 것을 특징으로 하는 분기 명령.
  40. 제38항에 있어서, 상기 분기 타겟 어드레스 정보는 상기 분기 명령을 위한 분기 타겟 어드레스를 포함하는 상기 컴퓨팅 머신 내의 다수의 분기 타겟 어드레스 레지스터 중 하나를 식별하는 것을 특징으로 하는 분기 명령.
  41. 제38항에 있어서, 상기 하나 이상의 데이터 항목은 상기 컴퓨팅 머신 내의 레지스터의 수학적인 값 또는 논리 상태에 대응하는 것을 특징으로 하는 분기 명령.
  42. 제38항에 있어서, 상기 제2 부분은 상기 하나 이상의 데이터 항목에 대해 수행될 수학적 또는 논리적 동작을 식별하는 것을 특징으로 하는 분기 명령.
  43. 제38항에 있어서, 상기 분기 명령 후의 다음 명령이 저장되어야 하는지를 나타내는 제3 부분을 더 포함하는 것을 특징으로 하는 분기 명령.
  44. 분기 타겟 명령 어드레스를 저장하기 위한 제1 적재 가능 레지스터 세트, 및 분기 타겟 명령을 저장하기 위한 제2 적재 가능 레지스터 세트를 구비한 컴퓨팅 머신에서 실행되기에 적합한 컴퓨터 프로그램에 있어서,
    상기 컴퓨팅 머신 상에서 실행되기에 적합한 명령 세트를 포함하되,
    상기 명령은
    1) 분기 제어 동작을 정의하는 동작 코드 필드, 프로그램 분기를 위한 분기 타겟 어드레스를 계산하는 데 사용되는 어드레스 필드, 및 상기 분기 타겟 어드레스를 저장하기 위한 상기 제1 적재 가능 레지스터 세트 내의 한 레지스터를 지정하기 위한 제1 레지스터 선택 필드를 포함하는 제1 명령; 및
    2) 프로그램 분기를 정의하는 동작 코드 필드, 및 상기 분기 타겟 어드레스가 레지스터로부터 판독되어 상기 프로그램 분기가 취해질 때 상기 제2 적재 가능 레지스터 세트에 분기 타겟 명령을 위치시키는 데 사용될 수 있도록 상기 제1 적재 가능 레지스터 세트에서 상기 레지스터를 식별하기 위한 제2 레지스터 선택 필드를 포함하는 제2 명령
    을 포함하는 것을 특징으로 하는 컴퓨터 프로그램.
  45. 제44항에 있어서, 상기 제2 적재 가능 레지스터 세트에는 상기 제1 및/또는 제2 명령의 실행에 앞서 분기 타겟 명령이 적재될 수 있는 것을 특징으로 하는 컴퓨터 프로그램.
  46. 제44항에 있어서, 상기 제2 명령의 프로그램 분기는 1 내지 n (n〉2) 범위의 우선 순위값을 갖도록 구성되며, 상기 우선 순위값은 상기 프로그램 분기가 취해지는 상대 빈도를 나타내는 것을 특징으로 하는 컴퓨터 프로그램.
  47. 제46항에 있어서, 상기 우선 순위값은 상기 컴퓨팅 머신에 의해 상기 프로그램 분기가 실행되기 전에 상기 프로그램 분기를 위해 상기 제2 적재 가능 레지스터 세트 안에 명령이 사전 적재되어야 하는지를 결정하는 데 사용되는 것을 특징으로 하는 컴퓨터 프로그램.
  48. 제47항에 있어서, 상기 우선 순위값은 상기 제1 레지스터 선택 필드에 의해 제공되어, 상기 제2 적재 가능 레지스터 세트에서 대응하는 레지스터를 식별하는 것을 특징으로 하는 컴퓨터 프로그램.
  49. 제44항에 있어서, 상기 제1 명령은 상기 분기 타겟 명령이 프로그램 분기에 의해 실행될 가능성이 있는지를 나타내는 제1 예측 필드를 포함하며, 상기 제2 명령은 상기 프로그램 분기가 취해질 가능성이 있는지를 나타내는 제2 예측 필드를 포함하는 것을 특징으로 하는 컴퓨터 프로그램.
KR1020000057683A 1999-10-01 2000-09-30 분기 명령과 연관된 컴퓨팅 시스템 레이턴시를 감소시키기위한 시스템 및 방법 KR20010050791A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US9/410,507 1999-10-01
US09/410,507 US6446197B1 (en) 1999-10-01 1999-10-01 Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020050091882A Division KR100667120B1 (ko) 1999-10-01 2005-09-30 이중 모드 시스템에서 혼합 명령 스트림 내의 상이한 명령세트의 분기 명령 에뮬레이팅

Publications (1)

Publication Number Publication Date
KR20010050791A true KR20010050791A (ko) 2001-06-25

Family

ID=23625025

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020000057683A KR20010050791A (ko) 1999-10-01 2000-09-30 분기 명령과 연관된 컴퓨팅 시스템 레이턴시를 감소시키기위한 시스템 및 방법
KR1020050091882A KR100667120B1 (ko) 1999-10-01 2005-09-30 이중 모드 시스템에서 혼합 명령 스트림 내의 상이한 명령세트의 분기 명령 에뮬레이팅

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020050091882A KR100667120B1 (ko) 1999-10-01 2005-09-30 이중 모드 시스템에서 혼합 명령 스트림 내의 상이한 명령세트의 분기 명령 에뮬레이팅

Country Status (5)

Country Link
US (6) US6446197B1 (ko)
EP (1) EP1089169A3 (ko)
JP (1) JP2001142705A (ko)
KR (2) KR20010050791A (ko)
TW (1) TW502212B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100867269B1 (ko) * 2007-02-22 2008-11-06 삼성전자주식회사 프로세서의 추론적 로드 명령 실행 방법 및 상기 방법을채용한 프로세서

Families Citing this family (130)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6611910B2 (en) * 1998-10-12 2003-08-26 Idea Corporation Method for processing branch operations
US6622240B1 (en) * 1999-06-18 2003-09-16 Intrinsity, Inc. Method and apparatus for pre-branch instruction
US6772325B1 (en) * 1999-10-01 2004-08-03 Hitachi, Ltd. Processor architecture and operation for exploiting improved branch control instruction
JP2001273138A (ja) * 2000-03-24 2001-10-05 Fujitsu Ltd プログラム変換装置および方法
US6859875B1 (en) * 2000-06-12 2005-02-22 Freescale Semiconductor, Inc. Processor having selective branch prediction
SE0003398D0 (sv) * 2000-09-22 2000-09-22 Ericsson Telefon Ab L M Optimization of a pipelined processor system
GB0025053D0 (en) * 2000-10-12 2000-11-29 Sgs Thomson Microelectronics Compiling computer programs including branch instructions
US6823447B2 (en) * 2001-03-01 2004-11-23 International Business Machines Corporation Software hint to improve the branch target prediction accuracy
US7024545B1 (en) 2001-07-24 2006-04-04 Advanced Micro Devices, Inc. Hybrid branch prediction device with two levels of branch prediction cache
US20030144855A1 (en) * 2002-01-30 2003-07-31 Nir Cohen Computer implemented method and system for demand forecast applications
US7017030B2 (en) * 2002-02-20 2006-03-21 Arm Limited Prediction of instructions in a data processing apparatus
US7076690B1 (en) 2002-04-15 2006-07-11 Emc Corporation Method and apparatus for managing access to volumes of storage
US6970985B2 (en) 2002-07-09 2005-11-29 Bluerisc Inc. Statically speculative memory accessing
JP2004062427A (ja) * 2002-07-26 2004-02-26 Renesas Technology Corp マイクロプロセッサ
JP3900485B2 (ja) * 2002-07-29 2007-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体
US7546482B2 (en) * 2002-10-28 2009-06-09 Emc Corporation Method and apparatus for monitoring the storage of data in a computer system
US20040107319A1 (en) * 2002-12-03 2004-06-03 D'orto David M. Cache management system and method
US7266676B2 (en) * 2003-03-21 2007-09-04 Analog Devices, Inc. Method and apparatus for branch prediction based on branch targets utilizing tag and data arrays
US7159103B2 (en) * 2003-03-24 2007-01-02 Infineon Technologies Ag Zero-overhead loop operation in microprocessor having instruction buffer
US7263590B1 (en) 2003-04-23 2007-08-28 Emc Corporation Method and apparatus for migrating data in a computer system
US7093088B1 (en) 2003-04-23 2006-08-15 Emc Corporation Method and apparatus for undoing a data migration in a computer system
US7415591B1 (en) 2003-04-23 2008-08-19 Emc Corporation Method and apparatus for migrating data and automatically provisioning a target for the migration
US7080221B1 (en) 2003-04-23 2006-07-18 Emc Corporation Method and apparatus for managing migration of data in a clustered computer system environment
US6983359B2 (en) * 2003-08-13 2006-01-03 Via-Cyrix, Inc. Processor and method for pre-fetching out-of-order instructions
DE10341325B4 (de) * 2003-09-08 2006-01-26 Siemens Ag Testeinrichtung und Testverfahren zum Testen von Werkzeug- oder Produktionsmaschinen
US7222064B1 (en) * 2003-10-10 2007-05-22 Unisys Corporation Instruction processor emulation having inter-processor messaging accounting
US20050114850A1 (en) 2003-10-29 2005-05-26 Saurabh Chheda Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
US7996671B2 (en) 2003-11-17 2011-08-09 Bluerisc Inc. Security of program executables and microprocessors based on compiler-architecture interaction
US8607209B2 (en) 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
US8443171B2 (en) * 2004-07-30 2013-05-14 Hewlett-Packard Development Company, L.P. Run-time updating of prediction hint instructions
JP4134179B2 (ja) * 2005-02-04 2008-08-13 株式会社ソニー・コンピュータエンタテインメント ソフトウエアによる動的予測方法および装置
US7793078B2 (en) * 2005-04-01 2010-09-07 Arm Limited Multiple instruction set data processing system with conditional branch instructions of a first instruction set and a second instruction set sharing a same instruction encoding
GB2425372B (en) * 2005-04-20 2007-06-13 Transitive Ltd Method and apparatus for precise handling of exceptions during program code conversion
US7769983B2 (en) 2005-05-18 2010-08-03 Qualcomm Incorporated Caching instructions for a multiple-state processor
US7949861B2 (en) * 2005-06-10 2011-05-24 Qualcomm Incorporated Method and apparatus for managing instruction flushing in a microprocessor's instruction pipeline
US7711934B2 (en) * 2005-10-31 2010-05-04 Mips Technologies, Inc. Processor core and method for managing branch misprediction in an out-of-order processor pipeline
US7734901B2 (en) * 2005-10-31 2010-06-08 Mips Technologies, Inc. Processor core and method for managing program counter redirection in an out-of-order processor pipeline
US7873820B2 (en) * 2005-11-15 2011-01-18 Mips Technologies, Inc. Processor utilizing a loop buffer to reduce power consumption
US7562191B2 (en) * 2005-11-15 2009-07-14 Mips Technologies, Inc. Microprocessor having a power-saving instruction cache way predictor and instruction replacement scheme
US7496771B2 (en) * 2005-11-15 2009-02-24 Mips Technologies, Inc. Processor accessing a scratch pad on-demand to reduce power consumption
US7809547B2 (en) * 2005-12-29 2010-10-05 Guenthner Russell W Host computer system emulating target system legacy software and providing for incorporating more powerful application program elements into the flow of the legacy software
US20070186050A1 (en) * 2006-02-03 2007-08-09 International Business Machines Corporation Self prefetching L2 cache mechanism for data lines
US20080162819A1 (en) * 2006-02-03 2008-07-03 Luick David A Design structure for self prefetching l2 cache mechanism for data lines
US20080162907A1 (en) * 2006-02-03 2008-07-03 Luick David A Structure for self prefetching l2 cache mechanism for instruction lines
US20070186049A1 (en) * 2006-02-03 2007-08-09 International Business Machines Corporation Self prefetching L2 cache mechanism for instruction lines
US7721071B2 (en) * 2006-02-28 2010-05-18 Mips Technologies, Inc. System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor
US20070204139A1 (en) 2006-02-28 2007-08-30 Mips Technologies, Inc. Compact linked-list-based multi-threaded instruction graduation buffer
US7370178B1 (en) * 2006-07-14 2008-05-06 Mips Technologies, Inc. Method for latest producer tracking in an out-of-order processor, and applications thereof
US20080016326A1 (en) 2006-07-14 2008-01-17 Mips Technologies, Inc. Latest producer tracking in an out-of-order processor, and applications thereof
US8352713B2 (en) * 2006-08-09 2013-01-08 Qualcomm Incorporated Debug circuit comparing processor instruction set operating mode
US7650465B2 (en) 2006-08-18 2010-01-19 Mips Technologies, Inc. Micro tag array having way selection bits for reducing data cache access power
US7657708B2 (en) * 2006-08-18 2010-02-02 Mips Technologies, Inc. Methods for reducing data cache access power in a processor using way selection bits
US7647475B2 (en) * 2006-09-06 2010-01-12 Mips Technologies, Inc. System for synchronizing an in-order co-processor with an out-of-order processor using a co-processor interface store data queue
US8032734B2 (en) * 2006-09-06 2011-10-04 Mips Technologies, Inc. Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor
US8078846B2 (en) 2006-09-29 2011-12-13 Mips Technologies, Inc. Conditional move instruction formed into one decoded instruction to be graduated and another decoded instruction to be invalidated
US7594079B2 (en) 2006-09-29 2009-09-22 Mips Technologies, Inc. Data cache virtual hint way prediction, and applications thereof
US9946547B2 (en) 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
US20080126766A1 (en) 2006-11-03 2008-05-29 Saurabh Chheda Securing microprocessors against information leakage and physical tampering
US8959500B2 (en) * 2006-12-11 2015-02-17 Nytell Software LLC Pipelined processor and compiler/scheduler for variable number branch delay slots
US8756404B2 (en) * 2006-12-11 2014-06-17 International Business Machines Corporation Cascaded delayed float/vector execution pipeline
US7711927B2 (en) * 2007-03-14 2010-05-04 Qualcomm Incorporated System, method and software to preload instructions from an instruction set other than one currently executing
US20090182992A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Load Relative and Store Relative Facility and Instructions Therefore
US7739434B2 (en) * 2008-01-11 2010-06-15 International Business Machines Corporation Performing a configuration virtual topology change and instruction therefore
US7895419B2 (en) 2008-01-11 2011-02-22 International Business Machines Corporation Rotate then operate on selected bits facility and instructions therefore
US7870339B2 (en) * 2008-01-11 2011-01-11 International Business Machines Corporation Extract cache attribute facility and instruction therefore
US7734900B2 (en) * 2008-01-11 2010-06-08 International Business Machines Corporation Computer configuration virtual topology discovery and instruction therefore
US20090182988A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Compare Relative Long Facility and Instructions Therefore
US20090182985A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Move Facility and Instructions Therefore
US9280480B2 (en) 2008-01-11 2016-03-08 International Business Machines Corporation Extract target cache attribute facility and instruction therefor
US20090182984A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Execute Relative Long Facility and Instructions Therefore
US7822954B2 (en) * 2008-02-20 2010-10-26 International Business Machines Corporation Methods, systems, and computer program products for recovering from branch prediction latency
KR101579589B1 (ko) * 2009-02-12 2015-12-22 삼성전자 주식회사 파이프라인 프로세서를 위한 정적 분기 예측 방법과 이를 위한 컴파일 방법
US8171269B2 (en) * 2009-03-06 2012-05-01 Agere Systems Inc. Branch target buffer with entry source field for use in determining replacement priority
US9952875B2 (en) * 2009-08-07 2018-04-24 Via Technologies, Inc. Microprocessor with ALU integrated into store unit
CN101916184B (zh) * 2009-08-28 2014-02-12 威盛电子股份有限公司 更新微处理器中的分支目标地址快取的方法及其微处理器
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US8904156B2 (en) * 2009-10-14 2014-12-02 Oracle America, Inc. Perceptron-based branch prediction mechanism for predicting conditional branch instructions on a multithreaded processor
CN101968734B (zh) * 2010-10-12 2012-07-18 中国电子科技集团公司第三十八研究所 应用于数字信号处理器的指令缓存器
US8683129B2 (en) * 2010-10-21 2014-03-25 Oracle International Corporation Using speculative cache requests to reduce cache miss delays
US20130283023A1 (en) * 2012-04-18 2013-10-24 Qualcomm Incorporated Bimodal Compare Predictor Encoded In Each Compare Instruction
US9262169B2 (en) 2012-06-11 2016-02-16 International Business Machines Corporation Branch prediction table install source tracking
US9135012B2 (en) 2012-06-14 2015-09-15 International Business Machines Corporation Instruction filtering
US9146739B2 (en) 2012-06-14 2015-09-29 International Business Machines Corporation Branch prediction preloading
US9104532B2 (en) * 2012-12-14 2015-08-11 International Business Machines Corporation Sequential location accesses in an active memory device
US9703562B2 (en) * 2013-03-16 2017-07-11 Intel Corporation Instruction emulation processors, methods, and systems
US9619230B2 (en) * 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
US9940262B2 (en) * 2014-09-19 2018-04-10 Apple Inc. Immediate branch recode that handles aliasing
US9632783B2 (en) 2014-10-03 2017-04-25 Qualcomm Incorporated Operand conflict resolution for reduced port general purpose register
KR20160070965A (ko) 2014-12-11 2016-06-21 삼성전자주식회사 컴파일러
US9696992B2 (en) * 2014-12-23 2017-07-04 Intel Corporation Apparatus and method for performing a check to optimize instruction flow
US9569613B2 (en) * 2014-12-23 2017-02-14 Intel Corporation Techniques for enforcing control flow integrity using binary translation
US20160283243A1 (en) * 2015-03-28 2016-09-29 Yong-Kyu Jung Branch look-ahead instruction disassembling, assembling, and delivering system apparatus and method for microprocessor system
US20160335089A1 (en) * 2015-05-11 2016-11-17 Qualcomm Incorporated Eliminating redundancy in a branch target instruction cache by establishing entries using the target address of a subroutine
US11755484B2 (en) * 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US10776115B2 (en) 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US9977679B2 (en) * 2015-11-09 2018-05-22 Arm Limited Apparatus and method for suspending execution of a thread in response to a hint instruction
US9507598B1 (en) 2015-12-15 2016-11-29 International Business Machines Corporation Auxiliary branch prediction with usefulness tracking
GB2548604B (en) * 2016-03-23 2018-03-21 Advanced Risc Mach Ltd Branch instruction
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US11106466B2 (en) 2018-06-18 2021-08-31 International Business Machines Corporation Decoupling of conditional branches
US11086629B2 (en) * 2018-11-09 2021-08-10 Arm Limited Misprediction of predicted taken branches in a data processing apparatus
TWI792546B (zh) * 2021-09-09 2023-02-11 瑞昱半導體股份有限公司 用於管線化控制的設備以及方法
US11921843B2 (en) 2021-09-26 2024-03-05 Ceremorphic, Inc. Multi-threaded secure processor with control flow attack detection
WO2023049422A2 (en) * 2021-09-26 2023-03-30 Ceremorphic, Inc Core processor and redundant branch processor with control flow attack detection
US11928470B1 (en) * 2022-04-20 2024-03-12 Verisilicon Holdings Co., Ltd. Advancing a program counter to a start of a subsequent cache line based on a straddling group indicator in a current cache line

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3737637A (en) * 1971-12-13 1973-06-05 Ibm Data generator
JPS52116131A (en) * 1976-03-26 1977-09-29 Toshiba Corp Microprogram instruction control unit
US4334268A (en) * 1979-05-01 1982-06-08 Motorola, Inc. Microcomputer with branch on bit set/clear instructions
JPS6051948A (ja) 1983-08-31 1985-03-23 Hitachi Ltd 情報処理装置
US4755966A (en) * 1985-06-28 1988-07-05 Hewlett-Packard Company Bidirectional branch prediction and optimization
US4763245A (en) 1985-10-30 1988-08-09 International Business Machines Corporation Branch prediction mechanism in which a branch history table is updated using an operand sensitive branch table
JP2773471B2 (ja) * 1991-07-24 1998-07-09 日本電気株式会社 情報処理装置
DE4345028A1 (de) 1993-05-06 1994-11-10 Hewlett Packard Co Vorrichtung zur Reduzierung von Verzögerungen aufgrund von Verzweigungen
JP2596712B2 (ja) 1993-07-01 1997-04-02 インターナショナル・ビジネス・マシーンズ・コーポレイション 近接した分岐命令を含む命令の実行を管理するシステム及び方法
US5781750A (en) * 1994-01-11 1998-07-14 Exponential Technology, Inc. Dual-instruction-set architecture CPU with hidden software emulation mode
GB9412487D0 (en) 1994-06-22 1994-08-10 Inmos Ltd A computer system for executing branch instructions
US5748950A (en) 1994-09-20 1998-05-05 Intel Corporation Method and apparatus for providing an optimized compare-and-branch instruction
US5664135A (en) * 1994-09-28 1997-09-02 Hewlett-Packard Company Apparatus and method for reducing delays due to branches
JP3494484B2 (ja) * 1994-10-12 2004-02-09 株式会社ルネサステクノロジ 命令処理装置
US5790845A (en) * 1995-02-24 1998-08-04 Hitachi, Ltd. System with reservation instruction execution to store branch target address for use upon reaching the branch point
US5802346A (en) * 1995-06-02 1998-09-01 International Business Machines Corporation Method and system for minimizing the delay in executing branch-on-register instructions
US5659752A (en) 1995-06-30 1997-08-19 International Business Machines Corporation System and method for improving branch prediction in compiled program code
US5920713A (en) * 1995-10-06 1999-07-06 Advanced Micro Devices, Inc. Instruction decoder including two-way emulation code branching
US5903760A (en) * 1996-06-27 1999-05-11 Intel Corporation Method and apparatus for translating a conditional instruction compatible with a first instruction set architecture (ISA) into a conditional instruction compatible with a second ISA
US5742804A (en) 1996-07-24 1998-04-21 Institute For The Development Of Emerging Architectures, L.L.C. Instruction prefetch mechanism utilizing a branch predict instruction
US5949995A (en) * 1996-08-02 1999-09-07 Freeman; Jackie Andrew Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code
US5857104A (en) 1996-11-26 1999-01-05 Hewlett-Packard Company Synthetic dynamic branch prediction
US6088793A (en) * 1996-12-30 2000-07-11 Intel Corporation Method and apparatus for branch execution on a multiple-instruction-set-architecture microprocessor
US5889986A (en) * 1997-01-28 1999-03-30 Samsung Electronics Co., Ltd. Instruction fetch unit including instruction buffer and secondary or branch target buffer that transfers prefetched instructions to the instruction buffer
US5987599A (en) * 1997-03-28 1999-11-16 Intel Corporation Target instructions prefetch cache
US6189090B1 (en) 1997-09-17 2001-02-13 Sony Corporation Digital signal processor with variable width instructions
US5870575A (en) * 1997-09-22 1999-02-09 International Business Machines Corporation Indirect unconditional branches in data processing system emulation mode
US5956758A (en) * 1997-10-31 1999-09-21 Digital Equipment Corporation Method for determining target address of computed jump instructions in executable programs
US6223277B1 (en) * 1997-11-21 2001-04-24 Texas Instruments Incorporated Data processing circuit with packed data structure capability
US6178498B1 (en) * 1997-12-18 2001-01-23 Idea Corporation Storing predicted branch target address in different storage according to importance hint in branch prediction instruction
US6092188A (en) * 1997-12-23 2000-07-18 Intel Corporation Processor and instruction set with predict instructions
US6282633B1 (en) * 1998-11-13 2001-08-28 Tensilica, Inc. High data density RISC processor

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100867269B1 (ko) * 2007-02-22 2008-11-06 삼성전자주식회사 프로세서의 추론적 로드 명령 실행 방법 및 상기 방법을채용한 프로세서
US8443174B2 (en) 2007-02-22 2013-05-14 Samsung Electronics Co., Ltd. Processor and method of performing speculative load operations of the processor

Also Published As

Publication number Publication date
KR20050107318A (ko) 2005-11-11
EP1089169A2 (en) 2001-04-04
TW502212B (en) 2002-09-11
KR100667120B1 (ko) 2007-01-12
US6477639B1 (en) 2002-11-05
JP2001142705A (ja) 2001-05-25
US6356997B1 (en) 2002-03-12
US6772323B2 (en) 2004-08-03
US6374348B1 (en) 2002-04-16
US6446197B1 (en) 2002-09-03
EP1089169A3 (en) 2001-10-17
US20030070062A1 (en) 2003-04-10
US6389531B1 (en) 2002-05-14

Similar Documents

Publication Publication Date Title
KR100667120B1 (ko) 이중 모드 시스템에서 혼합 명령 스트림 내의 상이한 명령세트의 분기 명령 에뮬레이팅
US6324643B1 (en) Branch prediction and target instruction control for processor
US7159102B2 (en) Branch control memory
Ditzel et al. Branch folding in the CRISP microprocessor: Reducing branch delay to zero
JP5917616B2 (ja) 事前通知技術を用いる、プログラムのシーケンシャルフローを変更するための方法および装置
US5553255A (en) Data processor with programmable levels of speculative instruction fetching and method of operation
EP0381444B1 (en) Branch prediction
US7441110B1 (en) Prefetching using future branch path information derived from branch prediction
US6523110B1 (en) Decoupled fetch-execute engine with static branch prediction support
US6609194B1 (en) Apparatus for performing branch target address calculation based on branch type
JPH0795271B2 (ja) 分岐命令実行装置
US5761490A (en) Changing the meaning of a pre-decode bit in a cache memory depending on branch prediction mode
US10338923B2 (en) Branch prediction path wrong guess instruction
JP3486690B2 (ja) パイプライン方式プロセッサ
US20050216713A1 (en) Instruction text controlled selectively stated branches for prediction via a branch target buffer
GB2283595A (en) Data processor with both static and dynamic branch prediction, and method of operation
EP0666538A2 (en) Data processor with branch target address cache and method of operation
JP2001142707A (ja) プロセッサおよびそれを用いて実行されるプログラム分岐に対する例外チェックの実行方法
IE901520A1 (en) Branch prediction

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application