KR100411402B1 - 파이프라인방식의프로세서에서잘못예측된분기로부터의복원방법및장치 - Google Patents

파이프라인방식의프로세서에서잘못예측된분기로부터의복원방법및장치 Download PDF

Info

Publication number
KR100411402B1
KR100411402B1 KR1019960001647A KR19960001647A KR100411402B1 KR 100411402 B1 KR100411402 B1 KR 100411402B1 KR 1019960001647 A KR1019960001647 A KR 1019960001647A KR 19960001647 A KR19960001647 A KR 19960001647A KR 100411402 B1 KR100411402 B1 KR 100411402B1
Authority
KR
South Korea
Prior art keywords
annex
entry
zero bit
valid
entries
Prior art date
Application number
KR1019960001647A
Other languages
English (en)
Other versions
KR960029970A (ko
Inventor
트렘블레이 마크
시. 야라가다 크리시나
Original Assignee
선 마이크로시스템즈 인코퍼레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 선 마이크로시스템즈 인코퍼레이티드 filed Critical 선 마이크로시스템즈 인코퍼레이티드
Publication of KR960029970A publication Critical patent/KR960029970A/ko
Application granted granted Critical
Publication of KR100411402B1 publication Critical patent/KR100411402B1/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 or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

본 발명은 파이프라인 방식의 프로세서에서 잘못 예측된 분기로부터 복원하는 방법 및 장치에 관한 것으로서, 제 1 실시예에서, 최고(最古) 애넥스 엔트리부터 시작하여, 상기 엔트리의 수신지 레지스터 주소는 다른 모든 엔트리로 동시전송되고, 일치하는 주소를 갖는 모든 애넥스 엔트리들은 리세트된 영비트를 가지며, 반면에 동시전송된 엔트리의 영비트는 세트되고, 상술한 동시전송, 비교, 리세트 및 세트 동작은 남아있는 모든 유효 엔트리에 대해 오래된 엔트리부터 새로운 엔트리로 순차적으로 실행되며, 모든 유효 엔트리가 동시전송되었을 때, 영비트 상태는 정확하게 재구성되고, 제 2 실시예에서, 각각의 애넥스 엔트리는 현재의 영비트(Y0) 및 하나 이상의 이전의 영비트(Y1 내지 YN)를 가지고, 최대 N개의 클럭 사이클을 취하는 분기 조건 해결에 대하여, N개의 이전의 영비트는 각 애넥스 엔트리에 유지되고, 새로운 애넥스 엔트리가 수신되는 모든 장치 사이클 동안, Yk의 내용은 0 내지 N-1 사이의 모든 k값에 대하여 Yk-1로 시프트되며, 현재의 영비트(Y0)가 갱신되고, i의 이론적 명령의 결과가 애넥스에 기록된 후에 잘못 예측된 분기가 검출될 때, 이전의 영비트(Yi)가 각 애넥스 엔트리에 대하여 현재의 영비트(Y0)에 다시 저장되고, 따라서 정확한 영비트의 재저장은 짧은 일정한 시간에 수행되며, 상술한 두 실시예는 짧고 긴 대기 시간의 잘못된 예측으로부터의 복원을 최적화하기 위해 동일한 프로세서로 구현될 수 있는 것을 특징으로 한다.

Description

파이프라인 방식의 프로세서에서 잘못 예측된 분기로부터의 복원방법 및 장치{METHOD AND APPARATUS FOR RECOVERING FROM MISPREDICTED BRANCHES IN A PIPELINED PROCESSOR}
본 발명은 마이크로 프로세서의 설계에 관한 것으로, 보다 상세하게는 파이프라인 프로세서내에 있어서 추론에 기초하여 실행된 명령의 잘못 예측된 분기로부터의 복원에 관한 것이다.
초기의 일반적인 마이크로 프로세서는 중앙처리장치(CPU)를 포함한다. 중앙처리장치는 메모리와의 사이에 인터페이스를 제공하고, 또한 순차 명령(sequence of instruction)을 연속적으로 실행하는 장치를 실현한다. 일반적으로, 명령실행은 적어도 4개의 주요 단계, 즉 명령 및 오퍼랜드의 페치(인출, fetch), 명령의 복호(디코드), 실행, 및 수신지 레지스터에의 결과의 재기록(write back)으로 분할된다. 1개의 일반적인 명령의 실행은 1개의 클럭 사이클(clock cycle)을 필요로 한다. 이 때문에, 상기한 4개의 기능은 같은 클럭 사이클에 있어서 각각 실시된다. 각 단계는 자신의 연산의 완료 이전에 이전 단계의 결과를 기다릴 필요가 있다. 따라서, 명령의 실행은 4개의 단계의 각각을 통해 순차 전달된다. 가장 짧은-클럭 주기는 4개의 모두의 단계를 통해 가장 긴 전달 지연에 의해 결정된다.
파이프라인의 개념은 각 클럭 사이클에서 실행되는 로직(logic)의 개수를 줄임으로서 최대 클럭 주파수를 증가시킨다. 이것을 촉진시키기 위해, 예컨대 제 2의 단계 및 제 3 단계 사이의 인터페이스가 클럭된 래치(clocked latch)에 의해 분리될 수 있다. 최초의 2개의 단계(인출 및 디코드)를 1개의 클럭 사이클에서 실시가능하다. 계속해서, 제 2 클럭 사이클 동안, 마지막 2개의 단계(실행 및 재기록)을 실행할 수 있다. 인출의 개시로부터 재기록의 종료까지의 합계 시간은 거의 동일하기 때문에, 명령의 총 대기 시간(overall latency)은 거의 변화지 않는다. 그러나, 명령실행을 명료하게 구분한 2개의 부분으로 분할하는 것은 큰 이점이 있다. 다시 말해서, 처리량(throughput)을 배가시킬 수 있다. 이것은 파이프라인화된 중앙처리장치가 2개의 명령을 동시에 동작시킬 수 있다는 사실에 기초한다. 1개의 명령의 실행 및 재기록중에 제 2 명령의 인출 및 디코드가 가능하다. 당연하게도, 4개의 단계를 각각 별개의 클럭 사이클에서 실행하고, 이것으로부터 처리량을 증대시키는 파이프라인의 개념을 확대가능하다. 따라서, 로직을 N개의 세그멘트로 분할하는 것에 의해 이론적으로는 처리량을 N배로 증가시킬 수 있다.
수퍼파이프라인 설계는 임의의 한 단계를 통과하는 최대 전파지연을 감소시키기 위해 4개의 단계들중 몇 단계 또는 모든 단계의 로직을 분리하며, 그 결과 명령 실행이 4개 이상의 파이프라인 단계로 분리됨에 따라 동작 주파수와 처리량을 증가시킨다. 도 1은 하나 이상의 실행 유니트(10, 기능 유니트라고도 함)을 갖는 수퍼스칼라 마이크로 프로세서를 나타낸다.
수퍼스칼라 프로세서는 몇개의 병렬 기능 유니트(10)를 갖고 있다. 일반적인 수퍼스칼라 프로세서는 부동 소수점, 정수, 분기 및 적재/저장(load/store)의 기능 유니트(10)를 포함한다. 일반적으로, 기능 유니트(10)에는 부동 소수점 연산 또는 유사한 복잡한 연산을 수행할 수 있는 유니트가 있다. 매 사이클마다 각 기능 유니트가 새로운 명령을 실행하도록 하는 때, 하드웨어의 다른 부분과 동일한 클럭 주파수로 이러한 복잡한 기능 유니트를 실행하는 것이 바람직하다. 이러한 목적을 달성하기 위해, 병렬 기능 유니트(10)에 대한 파이프라인 방식이 바람직하다. 가장 복잡한 기능 유니트의 복잡성과 논리적 분할은 이러한 기능 유니트에 필요한 파이프라인 단계의 수를 나타낸다. 모든 기능 유니트(10)가 동일한 대기 시간을 갖고 있는 것은 아니다. 이러한 4개의 병렬 기능 유니트(10) 중에서 부동 소수점 유니트가 가장 복잡할 것이다. 그 밖의 다른 3가지 종류의 기능 유니트는 복잡하지 않기 때문에, 이러한 기능 유니트는 부동 소수점 유니트의 파이프라인 방식에 필요한 것보다 작은 단계로 파이프라인을 형성하는 것이 가능하다. 모든 병렬 기능 유니트(10)는 실행 결과가 각 수신지 레지스터에 기록되는 최종 재기록 단계(11)에서 다시 병합된다.
모든 병렬 기능 유니트(10)에 대한 파이프라인이 동일한 수의 단계를 갖고 있지 않는 경우, 몇몇 기능 유니트(10)으로부터의 결과가 다른 기능 유니트의 결과보다 먼저 이용될 수 있다. 예를 들면, 부동 소수점 유니트의 파이프라인 방식이 5개의 단계를 필요로 하지만, 정수 유니트에 대한 파이프라인 방식은 단지 2개의 단계를 필요로 하는 경우, 양 명령이 동시에 처리되는 경우라도 정수 유니트으로부터의 결과가 부동 소수점 유니트의 결과보다 3개 클럭 사이클 전에 이용될 수 있다. 동일한 의미로, "새로운(younger)" 명령이 "오래된(older)" 명령보다 먼저 종료할 수 있다. 예를 들면, 하나의 클럭 사이클 중에 부동 소수점 명령이 처리되고, 다음 클럭 사이클 중에, 가산등의 정수 명령이 처리된다. 정수 파이프라인이 부동 소수점 파이프라인보다 3개의 단계가 적은 경우, 정수 가산 결과는 부동 소수점 명령이 먼저 처리되어도 부동 소수점 결과보다 2 클럭 사이클 전에 이용될 수 있다. 이 예에서, 정수 가산은 "오래된" 부동 소수점 명령보다 나중에 처리되기 때문에 "새로운" 명령이다.
몇개의 새로운 명령이 몇개의 오래된 명령전에 수신지 레지스터내에 기록되도록 허용하면, 문제가 발생할 수도 있다. 예를 들면, 두개의 명령이 동일한 수신지 레지스터에 기록되는 경우, 프로그래머는 새로운 명령이 오래된 명령의 결과 위에 겹쳐 쓰여질 것을 예측한다. 사실, 오래된 명령이 새로운 명령의 결과 위에 겹쳐 쓰여지면, 목적한 결과가 목적한 수신지에 나타나지 않기 때문에 프로세서는 순차적인 프로그램을 정확히 실행하지 못한다. 따라서, 명령 결과 재기록의 순차적인 특성을 유지하는 것이 중요하다.
명령 결과의 순차적인 재기록을 용이하게 하기 위해서, 짧은 기능 유니트의 파이프라인은 여분의 파이프라인 단계로 연장되며, 그 결과 모든 기능 유니트(10)는 처리에서 재기록까지 동일한 대기 시간을 갖는다. 짧은 기능 유니트의 파이프라인에 있어서, 이것은 몇개의 여분의 단계가 기능 유니트 파이프라인의 단부에 부가되는 결과를 초래한다.(도 2 참조) 이러한 부가 파이프라인 단계는 선입선출(FIFO) 버퍼(20)를 효율적으로 형성한다. 여기서, 상기 버퍼를 때때로 종료 유니트(completion unit)라고 한다.(이하, 본 발명에서는 애넥스(20)라 한다)
프로그램 실행과 재기록의 순차적인 특성(sequential nature)을 유지한다고하여도, 짧은 기능 유니트의 파이프라인의 파이프라인에 여분의 단계를 부가함으로써 부가적인 복잡성이 생성된다. 도 2에 도시된 짧은 기능 유니트(21)가 순차 명령을 실행하는데 이용될 수 있는 정수 ALU 기능 유니트이라고 가정한다. 예를 들면, 다음 프로그램 단락(fragment)을 생각하자.
여기서, add rs1, rs2, rd는 레지스터 rs1의 내용과 레지스터 rs2의 내용이 가산되고, 그 결과가 레지스터 rd에 저장되는 것을 나타낸다. 제 1 명령은 레지스터 r3에 대한 결과를 발생한다. 바로 다음 명령은 이전 명령(previous instruction)에 의해 계산된 r3에 대한 값을 이용한다. 그러나, 제 1 명령에 의해 계산된 r3의 값은 제 2 명령이 실행을 개시할 때까지 레지스터 파일에 기록되지 않는다. 레지스터 파일내의 수신지 레지스터는 재기록 단계(22)가 애넥스(20)의 종료에 도달할 때까지 갱신되지 않는다. 따라서, 제 2 명령의 정확한 오퍼랜드는 제 2 명령이 실행될 때 애넥스(20)의 제 1 엔트리(23)에 상주한다. 애넥스(20)의 엔트리가 후속 명령에 의해 이용할 수 있도록 하기 위해서, 애넥스(20)에 어느 정도 접속할 수 있어야 한다.
도 3에는 종래 기술에 의해 애넥스(30)에 액세스하는 한가지 방식이 도시되어 있다. 애넥스(30)내의 각 엔트리는 레지스터 파일로부터 인출된 값 또는 애넥스(30)내의 엔트리들 중 하나의 엔트리로부터 값을 선택하는 적어도 하나의 멀티플렉서(32)에 귀환되는 한 세트의 출력(31)을 가지고 있다. 애넥스(30)내의 엔트리는 현재의 명령내에서의 오퍼랜드로서 사용될 필요가 있는 최근 또는 "최신(最新)" 변수를 포함하면, 상기 엔트리는 기능 유니트에 입력을 제공하도록 멀티플렉서(32)에 의해 선택될 수 있다.
애넥스(30)의 각 엔트리가 각 기능 유니트(33)의 초기에 멀티플렉서(32)로 귀환될 때, 피드스루(feedthrough)의 수가 애넥스(30)내의 엔트리의 수에 직접 비례하여 증가하기 때문에 데이터경로(datapath)의 폭이 실질적으로 증가할 수 있다. 애넥스(30)내의 각 엔트리가 기능 유니트(33)보다 앞에서 멀티플렉서(32)에 다시 접속되는 자신의 배선(31) 세트를 갖고 있기 때문에, 데이터경로 폭내에서 비트당 N개의 여분 배선은 N 엔트리 애넥스(30)에 대한 기능 유니트(33)를 통과하여야 한다. 하드웨어가 64 비트 광역 아키텍처이고, 8 딥 애넥스를 가지면, 이것은 512개의 여분 배선이 기능 유니트(33)을 통해 경로설정되거나 귀환되어야 한다는 것을 의미한다. 각각의 배선은 조금이라도 공간을 차지하기 때문에, 기능 유니트(33)의전체 폭은 상당히 증가해야 한다. 데이터경로(34)의 크기를 매우 크게 증가시키는 "폭포 경로설정(waterfall routing)"을 방지하기 위해, 애넥스(30)의 각 엔트리에 대한 피치(pitch) 또는 폭은 기능 유니트(33)의 피치와 정합하도록 증가되어야 한다. 따라서, 피드스루를 부가하므로써 전체 데이터경로는 넓어진다. 데이터경로의 확장은 최소한 2가지 이유 때문에 바람직하지 못하다. 첫째, 이것은 집적회로상에서 중요한 영역을 소비한다. 둘째, 데이터경로를 확장함으로써, 제어신호배선이 더 길어진다. 현대의 작은 배선폭을 갖는 프로세스에서 배선의 저항을 무시할 수 없기 때문에, 배선의 길이가 길수록 속도가 떨어지며, 따라서 성능을 제약한다.
멀티플렉서(32)에의 엔트리(30)의 귀환에 대한 두번째 단점은 입력의 수가 증가함에 따라 멀티플렉서(32)의 속도는 떨어진다는 것이다. 애넥스(30)의 각 엔트리에 대하여, 멀티플렉서에 대한 부가적인 입력이 제공되어야 한다. 설상가상으로, 몇 개의 파이프라인된 기능 유니트를 갖는 수퍼스칼라 프로세서는 다중 애넥스를 구비할 수 있다. 최신 엔트리가 임의의 애넥스(30)에 존재할 수 있기 때문에, 멀티플렉서(32)는 애넥스의 모든 가능한 엔트리에 대한 입력을 구비하여야 한다. 멀티플렉서로의 입력이 너무 많이 부가되면, 멀티플렉서는 너무 느려져서 실행을 위해 제공된 사이클과 통합될 수 없고, 최대 동작주파수가 감소된다.
이러한 방법을 사용하는 경우, 멀티플렉스(31)를 사용하여 선택하는 엔트리를 확정하기 위해 애넥스(30)의 각 엔트리에 저장되는 레지스터 주소를 확정하는 능력을 제공할 필요가 있다.
보다 효과적인 종래 기술의 방법은 도 4에 도시된 애넥스를 실행하기 위해메모리(40)의 사용을 포함하는 것이고, 이것은 "수퍼파이프라인된 수퍼스칼라 프로세서를 위한 일시적 파이프라인 레지스터"란 명칭의 미국 특허출원 제08/153,814호에 개시되어 있다. 애넥스의 각 엔트리를 통해 공급하는 대신에, 한 세트의 피드스루(41)만이 2개의 입력 멀티플렉서(42)에 제공된다. 이것은 애넥스(40)내의 엔트리수에 무관하게 기능 유니트(43)의 피치 증가를 방지한다. 또한, 멀티플렉서(42)로의 입력의 수는 애넥스(40)내의 엔트리 수에 무관하게 2개로 유지된다.
상기한 방법과 유사하게, 멀티플렉서(42)에 출력하는 엔트리를 확정하는 능력이 제공되어 있다. 이 문제를 해결하는 한가지 방식은 애넥스의 주소 필드내에서 내용검색 메모리(content addressable memory)를 이용하는 것이다. 애넥스내의 각 엔트리는 주소 필드 및 데이터 필드를 저장한다. 주소 필드는 수신지 레지스터의 주소를 포함하고, 데이터 필드는 상기 수신지 레지스터에 저장될 결과를 보유한다. 오퍼랜드중의 하나가 애넥스내에 있는지를 결정하고자 할 때, 이 오퍼랜드에 대한 주소는 애넥스(40)내에 저장된 모든 주소와 동시에 비교된다. 정합하는 경우, 상기 엔트리에 대한 정합 라인(match line)이 가정된다. 주어진 임의의 오퍼랜드에 대한 애넥스내에서 하나 이상의 정합이 존재할 수 있다. 이것은 순차적인 몇 개의 명령이 동일한 수신지 레지스터에 모두 기록되는 경우에 발생한다. 이러한 경우에, 애넥스(40)내의 최근 또는 "최신" 엔트리가 멀티플렉서(42)로 다시 전송되는 것이 중요하다.
대부분의 명령은 하나 이상의 오퍼랜드를 필요로 한다. 예를 들면, add x, y, z 명령은 x의 내용과 y의 내용을 가산하고, z에 결과를 저장하며, 따라서 x 및y는 오퍼랜드 레지스터이다. x 와 y로 지정된 데이터가 애넥스(40)내에 존재할 수 있기 때문에, 모든 오퍼랜드를 동시에 조사할 수 있도록 하나 이상의 비교 포트 및 내용검색 메모리내의 정합 라인 세트가 제공되어야 한다.
다중 정합 사이의 충돌을 해결하기 위해, 우선순위 인코더 회로가 최신 정합만이 멀터플렉서(42)에 접속된 버스를 구동시키도록 사용된다. 그러나, 우선순위 인코더의 대기 시간은 애넥스(40)내의 엔트리의 수가 증가함에 따라 증가한다. 또한, 우선순위 인코딩은 오퍼랜드의 선택에 연속되며, 따라서 임계 경로(critical path)로부터 제거될 수 없다. 따라서, 우선순위 인코딩 회로는 지연 한계량을 부가할 수 있다.
특정한 "영비트(youngbit)"의 사용은 우선순위 인코딩에 대한 대안이 된다. 도 5에 도시된 바와 같이, 애넥스(50)내의 각각의 엔트리는 이 엔트리에 대한 영비트(51)로서 설계되는 부가 비트(51)를 갖는다. 주어진 임의의 수신지 레지스터 주소에 대하여, 영이 아닌(non-zero) 영비트(51)를 포함하는 엔트리는 애넥스내에 단지 하나만 존재한다. 영비트(51)의 위치에 "참(true)" 로직 값을 갖는 엔트리는 상기 임의의 수신지 레지스터에 저장될 최신(즉, 최근)의 데이터 버전을 포함한다. 상기 임의의 레지스터 주소에 대한 오래된 모두 버전은 리세트된 영비트를 포함한다. 또한, 각각의 엔트리는 유효비트를 갖고 있다. 유효비트는 엔트리가 수신지 레지스터에 기록될 유효 데이터를 포함하고 있는지의 여부를 나타내는 것은 아니다.
영비트 체계를 사용함으로써, 애넥스내의 각 엔트리에 대한 정합 라인은 그 엔트리에 대한 영비트 및 유효비트와 논리적으로 AND되어 "영 매치(young match)"신호를 발생한다. 오퍼랜드 레지스터 주소를 애넥스내의 내용검색 메모리로 이루어지는 주소 부분(53)에 입력될 때 애넥스내에서 복수의 정합이 존재하면, 임의의 시점에서 단지 하나의 영 매치 신호가 세트된다. 우선순위 인코더 체계에 대해, 영비트 체계를 사용한 경우의 처리 속도의 향상은 영비트(51)의 유지 및 갱신에 있어서 복잡성의 증대를 희생하여 이루어진 것이다.
영비트(51)의 처리 및 갱신을 위한 일반적인 설계는 애넥스의 내용검색 메모리 부분(53)내에 비교 포트(compare port)를 필요로 한다. 기능 유니트에서 실행되는 각 명령에 대한 수신지 주소는 애넥스(50)내에 포함되어 있는 각 엔트리(54)의 주소 부분과 비교된다. 정합하는 주소를 갖는 엔트리(54)의 영비트(51)는 리세트된다. 방금 실행된 명령의 결과는 대응하는 수신지 레지스터에 대응하는 최신 값이다. 이 때문에, 애넥스내에 존재하는 모든 새로운 엔트리(55)는 세트된 영비트(51)를 갖는 애넥스 파이프라인(50)에 입력된다.
파이프라인 방식의 프로세서에서의 근본적인 문제점은 실행 순서에서의 조건부 분기의 처리를 들 수 있다. 대부분의 프로그램은 많은 조건 분기를 포함한다. 명령의 실행 순서는 분기명령의 결과에 기초하여 변화한다. 따라서, 이러한 프로세서를 파이프라인으로 실행하는 경우, 분기명령 직후에 다음의 명령을 실행하기 위해 명령의 인출이 수행된다. 그러나, 이 인출될 명령을 정확하게 확정하는 방법은 없다. 파이프라인 프로세서에서는, 모든 명령은 그 명령의 인출후 몇 사이클이 경과하기 까지 실행되지 않는다. 이 때문에, 분기명령 후에 인출, 처리(dispatch) 또는 실행개시하는 명령을 정확하게 확정할 수 없다.
이러한 문제점을 해결하기 위한 일반적인 방법은 정확하다고 생각되는 하나의 명령실행 순서를 선택하는 것을 들 수 있다. 명령실행 순서의 선택이 정확하지 않은 경우, 프로세서를 잘못 예측으로부터 회복하는 것이 필요하다. 많은 프로세서에서, 잘못 예측된 실행경로에 따라 인출, 디스패치 또는 실행개시된 모든 명령의 실행을 무효로하거나, 또는 중지하는 것이 필요하다.
그러나, 영비트(51)를 이용하는 애넥스(50)를 갖는 프로세서에 있어서, 문제는 보다 복잡해진다. 프로세서가 조건부 분기와 직면한 때, 선인출(prefetch)하는 코드의 세그먼트를 선택하여야 한다. 선인출된 명령은 분기가 실제로 해결되기 까지 추론에 기초하여 실행된다. 분기해결의 대기시간은 파이프라인 방식의 정도에 따라 몇 개의 사이클일 수 있다. 따라서, 명령이 실행되어, 이 명령의 결과를 포함하는 애넥스(50)내의 엔트리(55)에 영비트(51)가 세트되고, 그 후 분기의 예측이 부정확한지 판정되는 경우가 있다. 추론에 기초하여 실행된 명령에 대한 영비트(51)를 세트하는 것의 큰 문제점은 동일한 수신지 레지스터를 갖는 엔트리(54)에 있어서 이전에 세트되어 있는 영비트(51)가 클리어되는 경우를 들 수 있다. 잘못 예측된 분기로부터 복원하고자 할 때, 잘못 예측된 분기에 앞서 존재하는 영비트(51)의 이전 값을 애넥스(50)의 엔트리내에 회복하는 것이 필요하다.
영비트(51)의 이전 상태를 회복하는 능력의 제공은 비교적 복잡한 태스크이다. 이러한 능력을 제공하는 한가지 방법은 정교하게 작성된 포인터 테이블을 유지하는 것을 들 수 있다. 이러한 경우에 있어서, 각각의 애넥스 엔트리(54)는 동일한 수신지 레지스터 주소를 공유하는 두번째로 오래된 엔트리(54)를 나타내는 포인터를 포함한다. 동일한 레지스터 주소에 대한 복수 할당이 잘못 예측된 분기내에서도 발생할 수 있기 때문에, 리세트된 영비트(51)를 갖는 애넥스 엔트리(54)도 수신지 주소에 대한 두번째로 오래된 엔트리(54)를 표시할 필요가 있다. 따라서, 잘못 추론에 기초한 명령의 실행결과가 아닌 최신의 결과를 발견하기 위해 복수의 리스트의 링크를 주의 깊게 검토할 필요가 있다. 이러한 해결책은 그 실행에 필요한 하드웨어에 많은 비용을 필요로 한다.
본 발명은 잘못 예측된 분기가 검출되거나 추론에 기초한 명령 결과가 무효화되거나, 또는 단정된 명령(predicated instruction)이 추론에 기초하여 실행되고, 그 명령의 단정결과가 그 명령을 실행되지 않아야 할 것을 나타내는 것중에서 어느 하나가 생성된 후에, 영비트의 이전의 값을 회복하는 장치 및 방법에 관한 것이다.
본 발명의 제 1 실시예에 따르면, 잘못 예측된 분기가 검출된 후 추론에 기초한 명령 결과를 포함하는 애넥스 엔트리는 무효화된다. 최고(最古) 애넥스 엔트리로부터 시작하여, 상기 엔트리에 대한 수신지 레지스터 주소는 다른 모든 엔트리로 동시전송된다. 동시전송 엔트리(broadcast entry)는 다른 모든 엔트리의 주소들과 동시에 비교된다. 일치하는 주소를 갖는 모든 애넥스 엔트리는 영비트를 리세트시키지만, 동시전송 엔트리의 영비트는 세트된다. 전술한 동시전송, 비교, 리세트 및 세트 동작은 남아있는 모든 유효 엔트리에서 오래된 엔트리로부터 새로운 엔트리까지 순차 실행된다. 모든 유효 엔트리가 동시전송되었을 때, 영비트 상태가 정확하게 재구성된다. 이 실시예는 애넥스내에 존재하는 로직을 사용하여 영비트를재구성하며, 따라서 부가적인 하드웨어 비용이 전혀 발생하지 않는다.
본 발명의 제 2 실시예에 따르면, 각각의 애넥스 엔트리는 현재의 영비트(current young bit, Y0) 및 하나 이상의 과거의 영비트(past young bit, Y1 내지 YN)를 갖고 있다. 최대 N 클럭 사이클을 필요로 하는 분기 조건 해결에 있어서, N 개의 과거 영비트(Y1 내지 YN)는 각각의 애넥스 엔트리내에 유지된다. 새로운 애넥스 엔트리가 수신되는 모든 머신(machine) 사이클 동안, 현재 영비트(Y0)는 제 1 과거 영비트 위치(Y1)로 시프트된다. 동시에 Y1의 내용(content)이 Y2 내로 시프트된다. 비슷하게, Yk의 내용이 0 에서 N-1 까지의 모든 k에 대해 Yk+1 내로 시프트된다. 또한, 새로운 애넥스 엔트리가 수신될 때, 현재 영비트(Y0)는 갱신된다.
i 개의 추론에 기초한 명령의 결과가 애넥스내에 입력된 후 잘못 예측된 분기가 검출될 때, Yi내의 과거 영비트는 각 애넥스 엔트리에 대한 현재 영비트(Y0)내에 회복된다. 따라서, 정확한 영비트의 복원은 짧은 일정한 시간내에서 수행된다.
본 발명에 따른 제 1 실시예와 제 2 실시예는 긴 대기 시간을 갖는 잘못된 예측 및 짧은 대기 시간을 갖는 잘못된 예측으로부터의 복원을 최적화하기 위해 동일한 프로세서내에서 구현될 수 있다. 제 1 실시예는 긴 대기 시간을 갖는 조건문(conditionals)에 보다 더 적절하고, 제 2 실시예는 짧은 대기 시간을 갖는 조건문에 보다 더 적절하다. 바람직한 복원 방법은 프로세서에 의해 직접적으로 결정하거나, 또는 복원 특성에 기초하여 정적으로 결정될 수 있다.
본 발명은 잘못 예측된 실행전에 애넥스 엔트리내의 영비트(51)의 값의 회복을 비교적 편리한 방식으로 수행할 수 있다. 도 5는 애넥스내의 데이터 구조(data organization)를 도시하고 있다. 애넥스(50)는 시프트 레지스터로서 수행될 수 있다. 새로 실행된 명령의 결과는 애넥스의 가장 왼쪽 엔트리(55)내로 시프트되고, 가장 오른쪽 엔트리(66)내의 최고(晨古) 엔트리는 재기록 단계로 시프트된다. 각각의 엔트리(54)는 수신지 레지스터 주소(53) 및 상기 수신지 레지스터에 저장될 데이터(57)를 저장한다. 또한, 각각의 엔트리(54)는 영비트(51) 및 유효비트(52)를 갖고 있다.
유효비트는 재기록 단계가 애넥스 파이프라인(50)의 마지막에 도달할 때 데이터가 레지스터내에 실제로 기록되는지를 나타내기 위해 사용된다. 애넥스 엔트리(54)에 대한 유효비트(52)가 세트되면, 이 엔트리(54)내의 데이터(57)는 의미있는 것이고, 주소 필드(53)에 의해 표시된 레지스터에 저장될 것이다. 그러나, 유효비트(52)가 리세트되면, 이 엔트리(54)내의 데이터(57)는 의미있는 것이 아니고, 주소 필드(53)에 의해 표시된 레지스터에 저장될 수 없다. 모든 명령이 레지스터에 기록될 필요가 있는 결과를 발생시키지는 않는다. 그러나, 애넥스의 엔트리는 실행과 재기록 사이에 고정된 시간 간격을 유지하기 위해서 매 사이클마다 순방향으로 시프트되어야 한다. 따라서, 결과를 발생하지 않는 명령이 실행될 때마다, 최신(最新) 애넥스 엔트리(youngest annex entry)는 무효상태로 표시된다. 유효 비트(52)는 잘못 예측된 분기의 일부로서 실행되는 명령의 결과를 플러지(flush)하는 편리한 방식을 제공한다. 따라서, 유효비트를 리세트하는 것은 엔트리를 무효화하는 방법이다. 조건이 해결되고, 명령순서의 실행이 오류인 경우, 상기 명령의 결과는 상기 명령에 대한 유효비트(52)를 리세트함으로써 간단하게 무효화될 수 있다.
다음과 같은 코드 프래그먼트에서, 조건분기가 발생한다. 명령 "branch_014, target"은 레지스터(14)의 내용이 영이 아니면, 실행될 다음 명령이 target 주소에서의 명령이어야 한다는 것을 의미한다. 한편, 레지스터(14)의 내용이 0이면, 분기 명령 이후의 다음 명령의 실행이 계속되어야 한다.
프로세서가 조건부 분기 명령 후 직접 명령을 인출한다고 가정한다. 또한, 이러한 명령이 추론에 기초하여 실행된다고 가정한다. 분기 명령을 제외한 모든 명령이 레지스터에 값을 할당한다. move 명령은 제 2 및 그 이후의 할당을 레지스터(13)에 행하기 때문에, 레지스터(13)로의 이전 할당에 대한 영비트(51)는리세트되었다. 애넥스(50)내의 다른 모든 레지스터에 대해 더 오래된 할당이 존재하지 않기 때문에, 다른 모든 영비트(51)는 세트된다.
레지스터(14)의 내용이 영이 아닌 것으로 판명되면, move 및 add 명령의 추론에 기초한 실행은 리버스(reverse), 즉 무효되어야 한다. 먼저, 애넥스내의 2개의 최신(最新) 엔트리에 대한 유효비트(52)가 리세트된다. 상기 결과에 대한 유효비트(52)의 리세트로 인한 결과에 따라, 재기록 단계가 유효비트에 작용하지 않기 때문에 이 유효비트는 애넥스(50)로부터 효과적으로 플러시된다. 실행될 다음 작업은 추론에 기초한 실행 전에 존재한 상태로 영비트(51)를 복원하는 것이다. 프로세서가 5개의 엔트리를 갖는 애넥스(50)를 가지면, 애넥스의 상태는 도 6에 도시된 바와 같이 표시된다.
수신지 레지스터 비교포트는 애넥스내에 존재한다. 명령이 기능 유니트에 의해 실행될 때, 상기 명령의 수신지 레지스터 주소는 비교 포트에 입력되고, 애넥스내의 모든 엔트리에 대한 주소 필드와 비교된다. 애넥스의 주소 부분이 내용 검색 메모리(content addressable memory)로서 수행되면, 비교가 모두 동시에 행해질 수 있다. 일치하는 모든 애넥스 엔트리에 대하여, 영비트는 리세트된다. 명령의 결과가 계산될 때, 이 결과들은 영비트가 세트된 상태로 애넥스내에 입력된다. 이러한 방식으로, 기능 유니트으로부터 새롭게 생성되는 특정 수신지 레지스터에 대한 최신(最新) 데이터만이 세트된 영비트를 갖는다.
본 발명의 제 1 실시예를 이용하여, 잘못 예측된 분기 실행 후 영비트에 대한 복원은 애넥스내의 영비트를 초기에 세트시키기 위해 사용된 것과 동일한 하드웨어를 순차적으로 이용하여 실행된다. 하드웨어 데이터경로에 대한 유일한 큰 변경(only significant modification)으로서는 각 애넥스 엔트리가 애넥스내를 통해 비교 버스를 구동하는 능력을 갖는 점을 들 수 있다.
일단 잘못 예측된 분기에 대응하는 애넥스의 엔트리들이 각각의 유효비트를 리세트함으로써 플러시되면, 이전의 영비트에 대한 복원이 순차적으로 실행된다. 애넥스 파이프라인의 단말에 위치하는 엔트리는 애넥스내의 최고(最古) 엔트리이다. 최고(晨古) 엔트리부터 시작하여, 이러한 엔트리내의 주소는 비교 버스에 입력되고, 애넥스내의 다른 모든 엔트리와 비교된다. 수신지 주소와 일치하는 모든 엔트리에 대한 영비트는 현재 비교 버스를 구동하고 있는 엔트리를 제외하고는 클리어된다. 상기 버스를 구동하고 있는 엔트리의 영비트는 세트된다.
최고(最古) 엔트리가 비교 버스를 구동하고, 영비트의 상태에 영향을 미친 후, 두번째 최고(最古) 엔트리가 비교 버스를 구동하고, 영비트에 영향을 미친다. 이러한 처리는 모든 유효 엔트리들이 비교 버스를 구동할 때까지 순차적으로 실행된다. 일단 최신(最新) 유효 엔트리가 상기 비교 버스를 구동하고, 일치하는 수신지 주소를 갖는 상기 엔트리들의 영비트를 리세트하며, 자기의 영비트를 세트하면, 추론에 기초한 실행전의 영비트의 상태는 완전하게 재생된다. 유효비트를 리세트함으로써 무효화되는 상기 엔트리들은 상기 비교 버스를 구동하지 못한다. 이러한 무효 엔트리의 영비트는 순차적인 재구성에 의해 영향을 받을 수 있지만, 엔트리들이 무효이므로 엔트리에 대해 관심을 주는 하드웨어는 없기 때문에 문제가 되지 않는다.
영비트의 재구성이 순차적이기 때문에, 재구성에 필요한 시간은 남아있는 유효 엔트리의 수가 증가함에 따라 증대한다. 이러한 체계는 정확한 명령이 인출되고 있는 동안 애넥스가 수정될 수 있는 이점을 갖는다. 애넥스와 관련한 제 1 단계 전에 파이프라인 프로세서 단계의 전체수는 영비트가 오버헤드(overhead) 없이 재구성될 수 있는 유효 엔트리의 수를 규정한다. 기능 유니트에 선행하는 프로세서 단계의 수가 애넥스내의 남아있는 유효 엔트리의 수보다 크거나 같으면, 정확한 명령이 인출되고, 순차적인 재구성에서의 각 단계가 하나의 충분한 클럭 사이클을 필요로할지라도 파이프라인 방식의 프로세서내에서 처리되는 동안, 영비트에 대한 재구성은 항상 발생할 수 있다. 일단 잘못된 예측이 발생한 것으로 검출되면, 프로세서는 다음 사이클로부터 정확한 명령을 인출할 수 있다. 그러나, 이러한 정확한 명령은 선행하는 파이프라인 단계가 종료될 때까지 기능 유니트에 도달할 수 없다. 따라서, 애넥스는 자신의 영비트를 재구성하기 위한 소정의 시간을 갖는다.
전술한 순차적인 복원의 실행 결과중 하나는 조건의 해결이 빠르면 빠를 수록 애넥스의 영비트를 재구성하는 시간이 길어진다는 것이다. 이러한 모순은 조건이 신속하게 해결되면, 애넥스 엔트리는 거의 무효화되지 않고, 많은 단계를 그 순서에 따라 실행되어야 한다는 사실의 결과이다. 최악의 경우, 조건이 해결되기 전에 추론에 기초한 하나의 명령만이 실행되면, 애넥스 엔트리들 중 하나의 엔트리를 제외한 모든 엔트리가 영비트를 재구성하기 위해 비교 버스를 구동시켜야 한다. 반대로, 애넥스의 거의 모든 엔트리가 추론에 기초한 명령의 결과로 무효화되면, 최고(最古) 엔트리만이 유효하고, 순서에 포함되는 단지 몇 단계만이 실행될 필요가있기 때문에, 영비트의 재구성에는 상대적으로 시간이 거의 소요되지 않는다.
도 7은 영비트의 상태를 복원하기 위한 순차적인 방법을 도시하고 있다. 조건이 해결되고, 그 결과 추론에 기초한 실행 순서가 서로 일치하지 않은 때, 시작 단계(100)가 개시된다. 단계(110)에서, 애넥스의 최신 (가장 왼쪽) 엔트리들 중 몇 개의 엔트리에 존재하는 추론에 기초한 실행의 결과는 유효비트를 리세트함으로써 무효화된다. 단계(120)는 모든 유효 엔트리가 작용하는지를 결정하기 위한 검사 단계이다. 남아있는 각 유효 엔트리가 자신의 주소를 다른 모든 엔트리에 대해 동시전송하고, 영비트의 상태를 갱신한 후, 영비트의 회복이 완료된다. 순차적인 회복 단계는 애넥스(도 6 참조)의 가장 오른쪽 (최고) 엔트리부터 시작하여 가장 왼쪽 (최신) 유효 엔트리(도 6 참조)를 통해 진행된다. 제 1 무효 엔트리는 최신(最新) 유효 엔트리보다 한 단계 앞에 위치하는 엔트리이다. 제 1 무효 엔트리가 도달될 때, 복원이 완료되고, 종료 단계(130)에 도달된다.
단계(140)에서, 다른 모든 엔트리로 아직 동시전송되지 않은 최고(最古) 유효 엔트리의 수신지 레지스터 주소는 모든 엔트리로 동시전송된다. 단계(150)에서, 수신지 주소가 동시전송되고 있는 주소의 엔트리와 일치하는 애넥스 엔트리에 대하여, 영비트는 비표명, 즉 리세트된다. 주소가 동시전송되고 있는 엔트리의 영비트는 표명, 즉 세트된다. 리세트 및 세트가 발생하는 순서는 중요하지 않다.
파이프라인 방식의 프로세서 구조는 애넥스내의 엔트리의 수를 상당히 크게할 수 있다. 또한, 영비트를 순차적으로 재구성하는데 충분한 시간을 제공하는 매우 적은 수의 전치 파이프라인 단계(front-end pipeline stages)가 있을 수 있다.두 가지 경우에서, 영비트 재구성에 관한 순차적인 방법은 처리 지연을 초래할 수 있다. 이러한 지연을 방지하기 위해서, 본 발명의 제 2 실시예를 사용할 수 있다.
본 발명의 제 2 실시예는 짧은 대기시간으로 분기 조건이 해결될 때 영비트의 재구성을 허용한다. 이러한 경우, 상대적으로 적은 애넥스의 새로운 엔트리가 무효화될 필요가 있다. 이 실시예는 적은 수의 클럭 사이클내에서 해결될 수 있는 몇 개의 분기 조건이 있을 때 가장 유용하다. 도 8은 추론에 기초한 실행이 시작된 후 분기 조건이 N 개의 클럭 사이클내에서 해결되는 본 발명의 제 2 실시예에 따른 애넥스(80)내의 정보 구성을 보여준다.
각각의 애넥스 엔트리(81)는 데이터 필드(83)의 내용이 애넥스 파이프라인(80)의 말단의 재기록 단계에 의해 각각의 유효 엔트리에 저장되는 수신지 주소 필드(82)를 갖는다. 각 엔트리의 유효비트(84)는 엔트리의 유효여부를 나타내며, 따라서 애넥스 파이프라인(80)의 말단의 재기록 단계에서 수신지 레지스터에 실제로 저장되어야 한다. 각각의 애넥스 엔트리는 현재의 영비트(85)를 갖는다. 이 필드는 Y0로 표시된다. 또한, 각 애넥스 엔트리(81)는 Y1로 표시된 이전 영비트 필드(86)를 갖는다. N이 2인 제 2 실시예를 사용하는 시스템의 동작이 기술된다. N = 2인 경우, 시스템은 2개의 클럭 사이클 조건 해결을 처리하도록 설계된다. 따라서, 엔트리당 단지 2개의 부가 비트(Y1 및 Y2)만이 애넥스(80)에 부가된다. Y1로 표시된 비트 필드(86)는 직전의 클럭 사이클(the last clock cycle) 중에 있어서의 영비트의 상태를 나타낸다. Y2로 표시된 다른 과거의 영비트 저장위치로서의 비트 필드(87)는 2개의 사이클 이전에 존재한 영비트 상태를 나타낸다.
명령이 기능 유니트에 의해 실행될 때마다, 그 명령에 대한 수신지 레지스터 주소는 애넥스 엔트리(80)의 주소 필드(82)에 저장된 모든 수신지 레지스터 주소와 비교된다. Y0 비트 위치에 저장된 이전에 존재한 현재의 영비트(85)중의 하나가 애넥스내에 일치, 즉 적중(hit)이 존재하는 경우에만 애넥스(80)내에서 변화한다. 이 경우, 수신지 레지스터 주소의 일치(정합)에 의해, 애넥스(80)내에 위치하는 엔트리(81)의 Y0 비트들 중 하나의 비트가 세트에서 리세트로 변화될 때, Y0 비트 필드(85)의 이전 상태는 각 엔트리(81)의 Y1 비트 위치에 저장된다. 현재 실행하고 있는 명령의 수신지 레지스터 주소의 애넥스에서 일치가 존재하지 않을 때, Y0 비트(85)의 상태는 Y1 비트(86)내에 저장되어, 동일한 내용이 Y0(85) 및 Y1(86)내에 각각 존재하게 된다. Y0 및 Y1이 동일하다는 사실은, 추론에 기초한 실행을 무효로할 필요가 있고, 추론에 기초하여 실행된 명령이 수신지 레지스터 주소와 일치하지 않으면, 애넥스(80)내의 유효 엔트리의 영비트의 이전 상태가 현재의 상태와 같아지는 것에 기초한다. 따라서, Y0 비트(85)내의 값은 각 클럭 사이클마다 Y1 비트(86)내에 저장된다. 이와 마찬가지로, Y1 비트(86)내의 영비트 값은 각각의 클럭 사이클 동안 Y2 비트(87)내에 저장된다. 따라서, Y0 비트(85)는 영비트의 현재 상태를 포함하고, Y1 비트(86)는 1 클럭 사이클 전의 영비트 상태를 포함하며, Y2 비트(87)는 2 클럭 사이클 전의 영비트 상태를 포함한다.
잘못 예측된 분기가 발생할 때마다, 애넥스(80)내의 몇개의 엔트리(81)는 무효로되고, 영비트(85)의 상태는 복원되어야 한다. 분기가 다음 클럭 사이클에서 해결되면, 애넥스(80)내의 각 엔트리(81)에 있어서, Y1 영비트(86)는 Y0 위치(85)에복사된다. 분기를 해결하기 위해 완전한 2개의 사이클이 필요한 경우, Y2 영비트(87)는 현재의 Y0 영비트(85)의 값을 정확한 값으로 복원하기 위해 Y0 비트 위치(85)로 복사된다.
이러한 경우, 설계에 대한 전제사항들중 하나는 조건부 분기가 2 클럭 사이클내에서 해결될 수 있다는 것이다. 따라서, 모든 분기가 최대 2개의 클럭 사이클 동안 해결되기 때문에, 각각의 엔트리(81)에 대한 영비트(85)의 단지 2 단계 이전의 상태를 저장될 필요가 있다. 이 예에서, 분기 해결의 대기시간이 최대로 긴 경우라도 2 사이클이기 때문에, 최대로 2개의 엔트리(81)는 애넥스(80)내에 있어서 무효로 된다.
제 2 실시예에 대한 상기 방법은 조건의 해결에 최대 N 개의 사이클이 필요한 프로세서에 사용될 수 있다. 최대 N 개의 사이클이 조건을 해결하는데 요구되는 경우, N 개의 영비트 필드는 애넥스(80)의 각 엔트리(81)에 부가될 필요가 있다. 추론에 기초하여 실행된 N 개의 명령이 애넥스(80)내에 이미 존재하는 수신지 레지스터 주소에 각각 저장될 수 있기 때문에, 영비트의 적절한 상태를 보증하기 위해 각 애넥스 엔트리(81)내에 저장될 이전의 영비트 값에 관계하는 N 개로 이루어진 딥 스택(N-deep stack of previous young bit)를 복원에 이용할 수 있다. 따라서, 각 애넥스 엔트리(81)는 현재의 영비트 필드 Y0(85) 및 이전의 영비트 Y1, Y2, ..., YN(88)을 포함할 수 있다.
도 9는 제 2 실시예에 따른 영비트를 유지 및 복원하는 방법이 도시되어 있다. 단계(200)는 프로세서가 구동하는한 실시되는 무한 루프에 대한 최초의 엔트리포인트(initial entry point)를 나타낸다. 단계(210)에서, 현재의 영비트(Y0) 상태는 이전의 영비트(Y1)의 위치에 저장된다. 동시에, 이전의 영비트(Y1)는 Y2 위치로 시프트된다. 이와 마찬가지로, Y2 내의 비트는 Y3로 시프트된다. 저장될 영비트의 최고(最古) 상태가 YN이기 때문에, YN은 YN+1에 저장될 수 없다. 그 대신에 YN이 버려진다. 그러나, N 개의 사이클 전에 엔트리가 생성한 명령이 추론에 기초하여 실행될지라도, YN에 도달하기까지에는 예측하지 못한 사태가 해결되기 때문에 YN 비트의 유기(discard)는 문제가 되지 않는다.
단계(220)에 있어서, 새로운 엔트리가 기능 유니트으로부터 애넥스 파이프라인으로 입력된다. 단계(230)에서, 현재의 영비트(Y0)가 갱신된다. 애넥스내에 입력된 직후의 최신(最新) 엔트리는 세트된 영비트를 갖는다. 최신(晨新) 엔트리와 동일한 수신지 레지스터 주소를 갖는 엔트리의 영비트는 리세트된다.
단계(240)에서, 잘못 예측된 분기와 직면하는지를 확인하기 위해 검사가 실행된다. 잘못 예측된 분기가 전혀 검출되지 않은 경우, 처리 단계는 단계(210)로 복귀한다. 잘못 예측된 분기가 발생한 경우, 처리는 단계(250)로 진행된다. 여기서, i는 추론에 기초하여 실행된 명령의 결과인 애넥스내의 엔트리의 총수를 나타낸다. 모든 명령이 애넥스 엔트리내에서 결과를 생성한 경우, 방금 해결된 조건부 분기가 i 클럭 사이클 전에 존재한 것을 나타낸다. 추론에 기초하여 실행된 i 개의 명령은 자신의 유효비트를 리세트시킴으로써 무효화된다. 단계(260)에 있어서, 정확한 영비트는 애넥스내의 각 엔트리에 있어서 영비트를 위치(Y1)로부터 Y0 위치에 복사함으로써 회복된다. 그 후, 처리 단계는 단계(210)로 복귀한다.
임의의 아키텍처에 있어서, 본 발명에 따른 제 2 실시예를 이용하는 영비트의 복원은 무효로된 추론에 기초하여 실행된 명령의 결과의 총수와는 관계없이 일정시간을 필요로 한다. 또한, 가장 중요한 연산(operation)은 비트값을 위치(Yi)에서 위치(Y0)로 이동하는 것이기 때문에, 이 일정시간은 짧다. 따라서, 영비트의 회복을 신속하게 실행할 수 있다.
모든 조건이 단 하나의 클럭 사이클로 해결되는 극단적인 경우에, 각 엔트리에 대한 현재의 영비트(Y0) 이외에 하나의 영비트(Y1)만을 부가하면 좋다. 이러한 예로서는, 조건부 이동 등의 단정된 명령(predicated instruction)을 예로 들 수 있다. 단정된 명령은 머신내에 존재하는 몇가지 상태를 기초로 하여 조건적부로 실행된다. 예를 들면, 이것은 특정의 조건 코드가 프로세서내의 몇가지 특별한 상태 레지스터내에 존재하는 경우에만 실행될 수 있다. 이 경우, 독립한 분기 명령이 명령 스트림중에 존재하는 것은 아니지만, 각 명령에 포함된 조건이 존재한다.
분기의 해결에 필요한 시간 및 명령의 순서의 특성이 보다 상세하게 파악되어 있는 경우에서는, 다른 최적화가 가능하다. 예를 들면, 분기의 해결에 필요한 사이클 수가 모든 조건에 있어서 각각 정확하게 파악되어, 추가적으로 상기 분기의 해결중에 다른 분기가 기능 유니트에 의해 처리되지 않는 때, 다른 영비트의 세트를 각 애넥스 엔트리에 대해 하나의 세트만 제공하면 좋다. 현재의 영비트의 상태를 이전의 영비트 위치로 복사하는 것은 추론에 기초하는 결과가 애넥스내에 입력되기 직전에 있어서만 발생할 수 있다. 다른 예로서는, 조건의 해결중에 발생할 수 있는 수신지 주소의 일치 (영비트의 현재의 상태에 작용하는 명령에 있어서의일치(정합)) 의 최대수가 조건의 해결에 필요한 사이클의 수보다 적은 경우, 각 애넥스 엔트리내에 저장하기 위해 제공하는 여분의 영비트의 수가 조금 더 복잡한 제어 로직을 사용하여 감소될 수 있다.
일반적인 프로세서 아키텍처에 있어서, 상기한 양 실시예를 동시에 실시하기 위해서는 신중해야 한다. 제 1 실시예에 따른 순차적인 방법은, 조건해결의 대기시간이 길고, 많은 무효 엔트리 및 남아있는 유효 엔트리가 적게 존재하는 경우에 신속한 처리가 가능하다. 영비트를 보충하는 제 2 실시예는, 조건해결의 대기시간이 짧고, 적은 무효 엔트리 및 많은 유효 엔트리가 존재하는 경우에 가장 효과적이다. 해결에 짧은 시간을 필요로 하는 잘못 예측된 분기로부터의 회복을 프로세서의 처리속도의 저하, 또는 하드웨어의 코스트의 큰 증가를 수반하지 않고 처리하기 위해, 동일한 애넥스 구조내에 있어서 상기 양 실시예를 선택적으로 사용가능하다. 제 1 실시예의 순차적인 방법은 해결에 긴 시간을 필요로 하는 잘못예측된 분기용으로 이용될 수 있고, 제 2 실시예의 영비트를 보충하는 방법은 해결에 짧은 시간을 필요로 하는 잘못 예측된 분기용으로 이용될 수 있다. 여기에 이용된 복원 메커니즘은 분기의 종류 또는 예측된 명령에 기초하여 동적으로 제어되거나, 또는 회복의 특성에 기초하여 정적으로 제어가능하다.
본 발명의 방법과 장치를 실시예를 참조하여 도시하고 설명하였지만, 상기 기술분야의 숙련된 기술자들은 특허청구범위의 취지와 범위내에서 본 발명을 여러가지 양상으로 수정 및 대안이 가능하다는 것을 이해할 것이다 따라서, 본 명세서와 도면들은 제한의 의미라기 보다는 예시적인 것이다.
도 1은 통상의 수퍼스칼라 프로세서 아키텍처를 나타내는 블록도;
도 2는 일방의 기능 유니트가 타방의 기능 유니트보다 짧은 대기시간을 갖는 프로세서에 있어서 2개의 스칼라 실행을 나타내는 블록도;
도 3은 애넥스내의 각 엔트리의 내용에 대응하는 액세스를 갖는 기능 유니트을 제공하는 종래의 아키텍처를 나타내는 블록도;
도 4는 애넥스내의 각 엔트리의 내용에 대응하는 액세스를 갖는 기능 유니트을 제공하는 다른 종래의 아키텍처를 나타내는 블록도;
도 5는 8개의 엔트리를 갖는 애넥스내의 데이터 구조(organization)를 나타내는 도면;
도 6은 잘못 예측된 분기가 검출된 경우 애넥스의 가능한 상태를 나타내는 도면;
도 7은 본 발명의 제 1 실시예를 실시하기 위해 사용된 단계를 나타내는 흐름도;
도 8은 본 발명의 제 2 실시예에 따른 N개의 영비트 상태를 저장하는 8개의엔트리를 갖는 애넥스내의 데이터 구조를 나타내는 도면;
도 9는 본 발명의 제 2 실시예를 실시하기 위해 사용된 단계를 나타내는 흐름도이다.
* 도면의 주요 부분에 대한 부호의 설명 *
10, 33, 43 : 실행 유니트(기능 유니트) 11, 22 : 재기록
20, 30, 40, 50, 54, 55, 66 : 애넥스(선입 선출 버퍼)
23, 54, 55 : 멀티플렉서 34: 데이터경로
80 : 애넥스 파이프라인 81 : 애넥스 엔트리
82 : 수신지 주소 필드 83 : 데이터 필드
51, 85, 86, 87, 88, 97 : 영비트 필드

Claims (20)

  1. 각각이 주소, 데이터, 및 영비트 정보를 갖는 복수의 엔트리를 구비하는 포스트 기능 유니트 애넥스내의 잘못 예측된 분기후에 추론에 기초하여 명령을 실행한 다음 영비트 값을 재구성하는 방법에 있어서,
    (a) 상기 잘못 예측된 분기후에 포스트 기능 유니트 애넥스내의 상기 명령 결과를 무효로 하는 단계,
    (b) 이전에 동시전송되지 않은 최고(最古) 유효 애넥스 엔트리의 수신지 주소를 비교를 위해 다른 모든 유효 애넥스 엔트리에 동시전송하는 단계,
    (c) 이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소를 다른 모든 유효 애넥스 엔트리의 다른 모든 수신지 주소와 비교하는 단계,
    (d) 이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소와 동일한 수신지 주소를 갖는 각 유효 애넥스 엔트리내의 상기 영비트를 리세트하는 단계,
    (e) 이전에 동시전송되지 않은 수신지 주소를 갖는 최고 유효 애넥스 엔트리내의 상기 영비트를 세트하는 단계, 및
    (f) 최신 유효 애넥스 엔트리로 종료되는 각 유효 애넥스 엔트리에 대해 (b) 내지 (e)의 단계를 순차 반복하는 단계를 포함하는 것을 특징으로 하는 영비트 값을 재구성하는 방법.
  2. 제 1 항에 있어서,
    상기 (b) 단계는,
    이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소를 비교를 위해 모든 무효 애넥스 엔트리에 동시전송하는 단계를 추가로 포함하는 것을 특징으로 하는 영비트 값을 재구성하는 방법.
  3. 제 1 항에 있어서,
    상기 (c) 단계는,
    이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소와 모든 무효 애넥스 엔트리의 모든 수신지 주소를 비교하는 단계를 추가로 포함하는 것을 특징으로 하는 영비트 값을 재구성하는 방법.
  4. 제 1 항에 있어서,
    상기 (d) 단계는,
    이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소와 동일한 수신지 주소를 갖는 각 무효-애넥스 엔트리내의 상기 영비트를 리세트하는 단계를 추가로 포함하는 것을 특징으로 하는 영비트 값을 재구성하는 방법.
  5. 각각이 현재의 영비트 저장 위치 및 과거의 영비트 저장 위치를 갖는 복수의 엔트리를 구비하는 포스트 기능 유니트 애넥스내의 영비트 정보를 유지하는 방법에있어서,
    새로운 엔트리를 상기 포스트 기능 유니트 애넥스내로 입력하기 전에 상기 현재의 영비트 저장 위치의 내용을 과거의 영비트 저장 위치에 저장하는 단계; 및
    잘못 예측된 분기가 검출되었을 때, 상기 과거의 영비트 저장 위치의 내용을 상기 현재의 영비트 저장 위치에 복사하는 단계를 포함하는 것을 특징으로 하는 영비트 정보를 유지하는 방법.
  6. 제 5 항에 있어서,
    새로운 엔트리를 상기 애넥스내로 입력한 후, 상기 현재의 영비트를 갱신하는 단계를 추가로 포함하는 것을 특징으로 하는 영비트 정보를 유지하는 방법.
  7. (정정)
    각각이 현재의 영비트 저장 위치(Y[0]) 및 N개의 과거의 영비트 저장 위치(Y[1] 내지 Y[N])를 갖는 복수의 엔트리를 구비하는 애넥스내의 영비트 정보를 유지하는 방법에 있어서,
    0과 N-1사이의 각각의 x 에 대하여, 상기 포스트 기능 유니트 애넥스로 새로운 엔트리를 입력하기 전에 각 애넥스 엔트리에 대하여 Y[x]의 내용을 Y[x+1]에 저장하는 단계, 및
    잘못 예측된 분기가 검출되었을 때, 각 애넥스 엔트리에 대하여 상기 과거의 영비트 비트 저장 위치중 하나의 내용을 Y[0]에 복사하는 단계를 포함하는 것을 특징으로 하는 영비트 정보를 유지하는 방법.
  8. 제 7 항에 있어서,
    복사 단계에 있어서,
    Y[i]는 Y[0]로 복사된 상기 과거의 영비트 저장 위치이고,
    여기서, i는 잘못 예측된 분기의 검출에 의해 무효로된 복수의 애넥스 엔트리인 것을 특징으로 하는 영비트 정보를 유지하는 방법.
  9. 각각이 주소, 데이터, 및 영비트 정보를 갖는 복수의 엔트리를 구비하는 포스트 기능 유니트 애넥스내의 잘못 예측된 분기후에 추론에 기초하여 명령을 실행한 다음 영비트 값을 재구성하는 장치에 있어서,
    (a) 잘못 예측된 분기후에 포스트 기능 유니트 애넥스내의 상기 명령 결과를 무효시키기 위한 무효 회로,
    (b) 이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 수신지 주소를 비교를 위해 다른 모든 유효 애넥스 엔트리로 동시전송하는 동시전송 회로,
    (c) 이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소와 다른 모든 유효 애넥스 엔트리의 다른 모든 수신지 주소를 비교하는 비교 회로,
    (d) 이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소와 동일한 수신지 주소를 갖는 각 유효 애넥스 엔트리내의 상기 영비트를 리세트하는 리세트 회로,
    (e) 이전에 동시전송되지 않은 수신지 주소를 갖는 최고 유효 애넥스 엔트리내의 영비트를 세트하는 세트 회로, 및
    (f) 최신 유효 애넥스 엔트리로 종료되는 각 유효 애넥스 엔트리에 대하여 구성요소 (b) 내지 (e)를 순차적으로 재작동하는 반복 회로를 포함하는 것을 특징으로 하는 영비트 값을 재구성하는 장치.
  10. 제 9 항에 있어서,
    상기 구성요소 (b) 는,
    이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소를 비교를 위해 모든 무효 애넥스 엔트리에 동시전송하는 동시전송 회로를 추가로 포함하는 것을 특징으로 하는 영비트 값을 재구성하는 장치.
  11. 제 9 항에 있어서,
    상기 구성요소 (c) 는,
    이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소를 모든 무효 애넥스 엔트리의 모든 수신지 주소와 비교하는 비교 회로를 추가로 포함하는 것을 특징으로 하는 영비트 값을 재구성하는 장치.
  12. 제 9 항에 있어서,
    상기 구성요소 (d) 는,
    이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소와 동일한 수신지 주소를 갖는 각 무효 애넥스 엔트리내의 상기 영비트를 리세트하는 리세트 회로를 추가로 포함하는 것을 특징으로 하는 영비트 값을 재구성하는 장치.
  13. 각각이 현재의 영비트 저장 위치 및 과거의 영비트 저장 위치를 갖는 복수의 엔트리를 구비하는 포스트 기능 유니트 애넥스내의 영비트 정보를 유지하는 장치에 있어서,
    상기 포스트 기능 유니트 애넥스내로 새로운 엔트리를 입력하기 전에 상기 현재의 영비트 저장 위치의 내용을 과거의 영비트 저장 위치에 저장하는 저장 회로, 및
    잘못 예측된 분기가 검출되었을 때, 상기 과거의 영비트 저장 위치의 내용을 상기 현재의 영비트 저장 위치에 복사하는 복사 회로를 포함하는 것을 특징으로 하는 영비트 정보를 유지하는 장치.
  14. 제 13 항에 있어서,
    새로운 엔트리를 상기 애넥스내로 입력한 후, 현재의 영비트를 갱신하는 갱신회로를 추가로 포함하는 것을 특징으로 하는 영비트 정보를 유지하는 장치.
  15. 각각이 현재의 영비트 저장 위치(Y[0]) 및 N개의 과거의 영비트 저장 위치(Y[1] 내지 Y[N])를 갖는 복수의 엔트리를 구비하는 애넥스내의 영비트 정보를유지하는 장치에 있어서,
    0 과 N-1 사이의 각각의 x에 대하여, 상기 포스트 기능 유니트 애넥스로 새로운 엔트리를 입력하기 전에 각 애넥스 엔트리에 대하여 Y[x]의 내용을 Y[x+1]에 저장하는 저장 회로, 및
    잘못 예측된 분기가 검출되었을 때, 각 애넥스 엔트리에 대하여 상기 과거의 영비트 비트 저장 위치중 하나의 내용을 Y[0]에 복사하는 복사 회로를 포함하는 것을 특징으로 하는 영비트 정보를 유지하는 장치.
  16. 제 15 항에 있어서,
    복사 회로에 있어서,
    Y[i]는 Y[0]에 복사된 상기 과거의 영비트 저장 위치이고,
    여기서, i는 잘못 예측된 분기의 검출에 의해 무효로된 복수의 애넥스 엔트리인 것을 특징으로 하는 영비트 정보를 유지하는 장치.
  17. 제 11 항에 있어서,
    상기 비교 회로는 내용검색 메모리인 것을 특징으로 하는 영비트 정보를 유지하는 장치 .
  18. 제 8 항에 있어서,
    1 과 N-i 사이의 각각의 z 에 대하여, 잘못 예측된 분기가 검출되었을 때,Y[z+i]의 내용을 Y[z]에 저장하는 단계를 추가로 구비하는 것을 특징으로 하는 영비트 정보를 유지하는 방법.
  19. 제 16 항에 있어서,
    1 과 N-i 사이의 각각의 z 에 대하여, 잘못 예측된 분기가 검출되었을 때, Y[z+i]의 내용을 Y[z]에 저장하는 저장 회로를 추가로 구비하는 것을 특징으로 하는 영비트 정보를 유지하는 장치.
  20. 각각이 주소, 데이터, 및 현재의 영비트 저장 위치(Y[0]) 및 N개의 과거의 영비트 저장 위치(Y[1] 내지 Y[N])를 갖는 복수의 엔트리를 구비하는 애넥스내에의 잘못 예측된 분기후에 추론에 기초하여 n개의 명령을 실행한 다음 영비트 값을 재구성하는 방법에 있어서,
    상기 잘못 예측된 분기후에 포스트 기능 유니트 애넥스내의 n개의 추론에 기초하여 실행된 명령을 무효로 하는 단계;
    n 이 N 보다 큰 경우;
    (a) 이전에 동시전송되지 않은 최고(最古) 유효 애넥스 엔트리의 수신지 주소를 비교를 위해 다른 모든 유효 애넥스 엔트리에 동시전송하는 단계,
    (b) 이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 수신지 주소를 다른 모든 유효 애넥스 엔트리의 다른 모든 수신지 주소와 비교하는 단계,
    (c) 이전에 동시전송되지 않은 최고 유효 애넥스 엔트리의 상기 수신지 주소와 동일한 수신지 주소를 갖는 각 유효 애넥스 엔트리내의 상기 영비트를 리세트하는 단계,
    (d) 이전에 동시전송되지 않은 수신지 주소를 갖는 최고 유효 애넥스 엔트리 내의 상기 영비트를 세트하는 단계,
    (e) 최신 유효 애넥스 엔트리로 종료하는 각 유효 애넥스 엔트리에 대해 (a) 내지 (d)의 단계를 순차 반복하는 단계, 및
    (f) 잘못 예측된 분기가 검출된 경우, 각각의 애넥스 엔트리에 대해 Y[n]의 내용을 Y[0]에 복사하는 단계를 포함하는 것을 특징으로 하는 영비트 값을 재구성하는 방법.
KR1019960001647A 1995-01-26 1996-01-26 파이프라인방식의프로세서에서잘못예측된분기로부터의복원방법및장치 KR100411402B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US37865995A 1995-01-26 1995-01-26
US08/378,659 1995-01-26
US08/378659 1995-01-26

Publications (2)

Publication Number Publication Date
KR960029970A KR960029970A (ko) 1996-08-17
KR100411402B1 true KR100411402B1 (ko) 2004-03-20

Family

ID=23494016

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019960001647A KR100411402B1 (ko) 1995-01-26 1996-01-26 파이프라인방식의프로세서에서잘못예측된분기로부터의복원방법및장치

Country Status (4)

Country Link
US (1) US5748935A (ko)
EP (1) EP0724215A1 (ko)
JP (1) JP3699518B2 (ko)
KR (1) KR100411402B1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5802338A (en) * 1996-10-01 1998-09-01 International Business Machines Corporation Method of self-parallelizing and self-parallelizing multiprocessor using the method
US6044456A (en) * 1998-01-05 2000-03-28 Intel Corporation Electronic system and method for maintaining synchronization of multiple front-end pipelines
JP2000020309A (ja) * 1998-06-30 2000-01-21 Toshiba Microelectronics Corp デジタルシグナルプロセッサ
US6161174A (en) * 1998-11-05 2000-12-12 Wilhite; John E. Pipelined central processor incorporating indicator busy sensing and responsive pipeline timing modification
US6910123B1 (en) * 2000-01-13 2005-06-21 Texas Instruments Incorporated Processor with conditional instruction execution based upon state of corresponding annul bit of annul code
US6798364B2 (en) * 2002-02-05 2004-09-28 Intel Corporation Method and apparatus for variable length coding
US6928534B2 (en) * 2002-02-22 2005-08-09 Sun Microsystems, Inc. Forwarding load data to younger instructions in annex
JP2009169767A (ja) * 2008-01-17 2009-07-30 Toshiba Corp パイプライン型プロセッサ

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03129441A (ja) * 1989-06-20 1991-06-03 Fujitsu Ltd 分岐命令実行装置
US5134561A (en) * 1987-07-20 1992-07-28 International Business Machines Corporation Computer system with logic for writing instruction identifying data into array control lists for precise post-branch recoveries
JPH04238537A (ja) * 1991-01-23 1992-08-26 Nec Corp 並列パイプライン命令処理装置
JPH06242954A (ja) * 1993-01-08 1994-09-02 Internatl Business Mach Corp <Ibm> 独立にアクセスされる中間記憶域を利用してスーパースカラ・プロセッサ・システムにおける命令ディスパッチを改善する方法およびシステム
EP0614138A1 (en) * 1993-03-03 1994-09-07 Motorola, Inc. A data processor with most recently allocated register bit
JPH06301537A (ja) * 1993-04-16 1994-10-28 Fujitsu Ltd 命令フェッチ回路

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE2729452C3 (de) * 1977-06-30 1980-06-12 Grote & Hartmann Gmbh & Co Kg, 5600 Wuppertal Flachsicherung
US4594660A (en) * 1982-10-13 1986-06-10 Honeywell Information Systems Inc. Collector
US5173872A (en) * 1985-06-13 1992-12-22 Intel Corporation Content addressable memory for microprocessor system
US4862412A (en) * 1988-04-25 1989-08-29 Gte Laboratories Incorporated Content-addressable memory having control circuitry and independent controls for match and write cycles
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5471591A (en) * 1990-06-29 1995-11-28 Digital Equipment Corporation Combined write-operand queue and read-after-write dependency scoreboard
JP3015493B2 (ja) * 1991-04-26 2000-03-06 株式会社東芝 半導体連想記憶装置
US5345569A (en) * 1991-09-20 1994-09-06 Advanced Micro Devices, Inc. Apparatus and method for resolving dependencies among a plurality of instructions within a storage device
JP2775549B2 (ja) * 1992-05-08 1998-07-16 三菱電機株式会社 連想メモリセルおよび連想メモリ回路
US5369605A (en) * 1993-07-07 1994-11-29 Dell Usa, L.P. Incremental search content addressable memory for increased data compression efficiency
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
US5548776A (en) * 1993-09-30 1996-08-20 Intel Corporation N-wide bypass for data dependencies within register alias table
US5463745A (en) * 1993-12-22 1995-10-31 Intel Corporation Methods and apparatus for determining the next instruction pointer in an out-of-order execution computer system
US5519864A (en) * 1993-12-27 1996-05-21 Intel Corporation Method and apparatus for scheduling the dispatch of instructions from a reservation station
US5584037A (en) * 1994-03-01 1996-12-10 Intel Corporation Entry allocation in a circular buffer
US5535346A (en) * 1994-07-05 1996-07-09 Motorola, Inc. Data processor with future file with parallel update and method of operation
US5613083A (en) * 1994-09-30 1997-03-18 Intel Corporation Translation lookaside buffer that is non-blocking in response to a miss for use within a microprocessor capable of processing speculative instructions

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5134561A (en) * 1987-07-20 1992-07-28 International Business Machines Corporation Computer system with logic for writing instruction identifying data into array control lists for precise post-branch recoveries
JPH03129441A (ja) * 1989-06-20 1991-06-03 Fujitsu Ltd 分岐命令実行装置
JPH04238537A (ja) * 1991-01-23 1992-08-26 Nec Corp 並列パイプライン命令処理装置
JPH06242954A (ja) * 1993-01-08 1994-09-02 Internatl Business Mach Corp <Ibm> 独立にアクセスされる中間記憶域を利用してスーパースカラ・プロセッサ・システムにおける命令ディスパッチを改善する方法およびシステム
EP0614138A1 (en) * 1993-03-03 1994-09-07 Motorola, Inc. A data processor with most recently allocated register bit
JPH06301537A (ja) * 1993-04-16 1994-10-28 Fujitsu Ltd 命令フェッチ回路

Also Published As

Publication number Publication date
JP3699518B2 (ja) 2005-09-28
EP0724215A1 (en) 1996-07-31
US5748935A (en) 1998-05-05
KR960029970A (ko) 1996-08-17
JPH08263288A (ja) 1996-10-11

Similar Documents

Publication Publication Date Title
US6381692B1 (en) Pipelined asynchronous processing
JP3818315B2 (ja) スーパースケーラマイクロプロセサ
US5692167A (en) Method for verifying the correct processing of pipelined instructions including branch instructions and self-modifying code in a microprocessor
US6721874B1 (en) Method and system for dynamically shared completion table supporting multiple threads in a processing system
JP3588755B2 (ja) コンピュータシステム
EP0381444B1 (en) Branch prediction
JP3520371B2 (ja) レジスタ・ファイル・バックアップ・キュー
US5535346A (en) Data processor with future file with parallel update and method of operation
US20020087849A1 (en) Full multiprocessor speculation mechanism in a symmetric multiprocessor (smp) System
EP0644482A1 (en) Dispatch of instructions to multiple execution units
KR19980063489A (ko) 멀티스레드 프로세서의 명령어 및 연관된 인출 요청의 백그라운드 완료
EP2269134A1 (en) System and method of selectively committing a result of an executed instruction
EP0651331B1 (en) A write buffer for a superpipelined, superscalar microprocessor
US5784603A (en) Fast handling of branch delay slots on mispredicted branches
KR100411402B1 (ko) 파이프라인방식의프로세서에서잘못예측된분기로부터의복원방법및장치
US8082423B2 (en) Generating a flush vector from a first execution unit directly to every other execution unit of a plurality of execution units in order to block all register updates
JP2874351B2 (ja) 並列パイプライン命令処理装置
KR100305487B1 (ko) 특정유형의인스트럭션을동시에처리할수있는방법및데이터프로세싱시스템
US5737562A (en) CPU pipeline having queuing stage to facilitate branch instructions
EP0912927B1 (en) A load/store unit with multiple pointers for completing store and load-miss instructions
EP0912930B1 (en) A functional unit with a pointer for mispredicted branch resolution, and a superscalar microprocessor employing the same
KR100417459B1 (ko) 저장 및 적재 미스 명령들을 완료하기 위한 다수의 포인터들을 갖는 적재/저장 유닛
Hillebrand et al. Design and evaluation of a superscalar RISC processor
JPH11510290A (ja) シーケンシャルなリスト内の選択されたタイプの第1もしくは第2のオブジェクトを迅速に特定するためのスキャンチェーン

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20071123

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee