KR100472346B1 - 명령어 리플레이를 포함하는 프로세서 파이프라인 - Google Patents

명령어 리플레이를 포함하는 프로세서 파이프라인 Download PDF

Info

Publication number
KR100472346B1
KR100472346B1 KR10-2001-7008915A KR20017008915A KR100472346B1 KR 100472346 B1 KR100472346 B1 KR 100472346B1 KR 20017008915 A KR20017008915 A KR 20017008915A KR 100472346 B1 KR100472346 B1 KR 100472346B1
Authority
KR
South Korea
Prior art keywords
instructions
execution
queue
pipeline
instruction
Prior art date
Application number
KR10-2001-7008915A
Other languages
English (en)
Other versions
KR20010089588A (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 KR20010089588A publication Critical patent/KR20010089588A/ko
Application granted granted Critical
Publication of KR100472346B1 publication Critical patent/KR100472346B1/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/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, 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

Landscapes

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

Abstract

본 발명은 명령어를 실행하기 위한 방법을 제공한다. 방법은 파이프라인의 일부분의 스테이지가 준비되어 있는지 여부를 먼저 판단하지 않고 파이프라인의 일부분에서 제1 및 제2 복수의 명령어를 디스패치하고 실행하는 단계를 포함한다. 이 방법은 또한 실행 문제에 직면했는지 여부를 판단하는 단계와 제1 복수의 명령어가 실행 문제에 직면한 것을 판단한 것에 응답하여 제1 복수의 명령어를 리플레이하는 단계를 포함한다.
본 발명은 프로세서 파이프라인을 제공한다. 프로세서 파이프라인은 실행을 위하여 복수의 명령어를 페치하기 위한 전단부 및 이 전단부에 의하여 페치된 복수의 명령어를 실행하기 위한 후단부를 포함한다. 후단부는 명령어가 실행 문제를 갖고 있는지 여부를 판단하기 위한 회수 스테이지를 포함한다. 이 후단부는 정지가능한 것이 아니다. 프로세서 파이프라인은 또한 명령어가 실행 문제에 직면했다는 표시를 회수 스테이지로부터 명령어가 재실행될 수 있는 파이프라인의 리플레이 지점으로 전송하기 위한 채널을 포함한다.

Description

명령어 리플레이를 포함하는 프로세서 파이프라인{A PROCESSOR PIPELINE INCLUDING INSTRUCTION REPLAY}
본 발명은 일반적으로 파이프라인 방식의 프로세서(pipelined processor)에 관한 것으로, 특히 프로세서 파이프라인을 위한 리플레이 메커니즘에 관한 것이다.
컴퓨터 및 많은 다른 형태의 머신들(machines)은 머신의 메모리에 저장되는 프로그램된 명령어를 실행하는 "프로세서"에 기반하여 설계된다. RISC(reduced instruction set computers) 및 CISC(complex instruction set computers)와 같은 명령어 세트들의 복잡성에 의해 컴퓨터 및 프로세서들을 분류할 수 있다. 구조(architecture)는 프로세서의 하드웨어와 프로세서의 명령어 세트 사이의 인터페이스를 정의하는 범주인 것이다.
프로세서 구조의 제1 관점은 명령어가 순차적으로(sequentially) 또는 비순차적으로(out of order) 실행되는지 여부에 관한 것이다. 역사적으로, 프로세서들은 한번에 하나의 명령어를 실행하거나 또는 프로세서에 제공된 것과 명령어에 대한 코드가 동일한 순차적인 순서로 명령어를 실행했다. 이러한 구조는 "순차적인 프로그래밍 모델"이다. 비순차적인 구조는 코드가 프로세서에 제공되는 순서와 상이한 순서로, 즉 비순차적으로 명령어를 실행한다.
소프트웨어 코드의 순차적인 특성은 "데이터 의존성(data dependencies)" 및 "제어 의존성(control dependencies)"을 발생시킨다. 데이터 의존성은 다음 명령어가 오퍼랜드 x를 조작하고, x에서의 데이터가 이전의 명령어로부터의 결과일 때 발생한다. 나중의 명령어는 이전의 명령어의 오퍼랜드에 대한 데이터 의존성을 갖는다. 제어 의존성은 하나의 명령어가 2개의 다른 명령어 분기를 발생할 수 있고, 이들 중 오직 하나만이 실행될 때 발생한다. 통상적으로, 분기 선택은 조건에 따른다. 다양한 구조들이 이러한 데이터 및 제어 의존성을 고려한다.
프로세서 구조의 제2 관점은 명령어 처리가 "파이프라인"방식인지 여부이다. 파이프라인 방식의 처리에서, 프로세서는 메모리로부터 명령어를 페치(fetch)하고, 그 명령어를 파이프라인의 한 단부(one end)에 제공한다(feeds). 파이프라인은 수개의 "스테이지(stages)"를 가지며, 각각의 스테이지는 명령어를 그 다음 스테이지로 전송하기 전에 명령어를 처리하기 위하여 필요하거나 또는 적절한 다른 기능을 실행한다. 예를 들어, 하나의 스테이지는 명령어를 페치할 수 있고, 다음 스테이지는 그 명령어를 디코드할 수 있으며, 그 다음 스테이지는 디코드된 명령어를 실행할 수 있다. 각각의 스테이지는 통상적으로 명령어를 완료(completion)에 근접하게 이동시킨다.
파이프라인은 그 파이프라인의 제2 부분이 제2 명령어에 대해 동작하고 있는 동안에 파이프라인의 제1 부분이 제1 명령어에 대해 동작한다는 장점을 제공할 수 있다. 따라서, 하나 이상의 명령어가 한번에 처리되어, 명령어가 처리되는 유효속도(effective rate)를 증가시킬 수 있다.
일부의 파이프라인들은 "추론적으로(speculatively)" 명령어를 처리한다. 추론적인 실행은 관련있는 제어 및/또는 데이터 의존성을 해결하기 전에 명령어가 페치되고 실행된다는 것을 의미한다. 추론적 실행은 어떻게 데이터 및/또는 제어 의존성이 해결될 것인지를 예측하고, 그 예측에 기반하여 명령어를 실행하고, 그 후에 그 명령어 및 그로부터의 결과를 회수하기 전에 그 예측이 정확했는지를 검증한다.
검증 단계는 파이프라인 설계에 대한 도전(challenge)일 수 있다. 파이프라인의 한 단부에서, 실행된 명령어로부터의 결과는 모든 데이터 및 제어 의존성이 실제로 해결될 때까지 일시적으로 레지스터에 저장된다. 이후에, 파이프라인은 어떤 예측오류 또는 다른 문제 (즉, 두 개가 모두 일반적으로 예외(exceptions)로 언급됨)가 발생됐는지 여부를 검사한다. 실행 문제가 없을 경우에는, 실행된 명령어는 "회수되고(retired)", 그 결과는 구조상의 레지스터(architectural registers)에 저장되며, 이러한 연산(operation)은 "구조상의 상태로의 커밋(commitment to an architectural state)"으로 불린다. 만일 실행 문제들이 발생하면, 프로세서는 수정 루틴을 실행한다.
실행 문제들은
(1) 실행되지 않았어야 했던 명령어를 실행하는 것
(2) 실행됐어야 했던 명령어를 실행하지 않는 것
(3) 부정확한 데이터를 갖는 명령어를 실행하는 것
을 초래할 수 있는 문제들이다.
명령어 스트림을 정확하게 처리하기 위하여, 명령어의 후속 실행에서 실행 문제들의 영향도 또한 수정되어야 한다.
많은 종래 기술의 파이프라인 방식의 프로세서들은, 예외를 검출할 때 파이프라인을 "정지시킨다(stall)". 정지가능한 명령어 파이프라인에서, 많은 래치 또는 레지스터가 파이프라인의 스테이지를 통한 진행을 조절한다. 파이프라인 제어기는 래치 또는 레지스터를 인에이블시키거나 또는 디스에이블시키도록 하기 위한 신호를 발생한다. 정지하는 동안에, 래치들 또는 레지스터들은 명령어가 그 다음 스테이지로 전송되지 않도록 디스에이블된다. 정지 및 그 영향을 초래한 예외가 수정된 후에, 파이프라인 제어기는 래치들 또는 레지스터들을 다시 인에이블시키고, 파이프라인 스테이지들 사이에 리줌(resume)신호를 전송한다.
정지가능한 파이프라인을 동작시키기 위하여, 파이프라인 제어기는 파이프라인의 스테이지로부터 상태 신호를 수신하고, 수신된 신호로부터 정지할지 여부를 판단하며, 그 후에 정지하거나 또는 진행하기 위한 신호를 제공할 필요가 있다. 각각의 이러한 단계들은 시간이 걸리기 때문에, 정지시키기 위한 기능의 구현은 파이프라인의 동작 주파수를 제한할 수 있다.
몇몇 프로세서 파이프라인은 정지할 뿐만 아니라 "리플레이한다(replay)". 리플레이는 예외를 검출할 때에 명령어를 재실행하는 것이다. 만일 예외가 검출되면, 추론적인 결과는 무시되고, 예를 들어 구조상의 상태는 갱신되지 않고, 명령어가 회수되지 않는다. 프로세서는 문제를 수정하고, 그 명령어를 재실행한다.
리플레이를 채택한 하나의 프로세서는 DEC(Digital Equipment Corporation)사로부터 상업적으로 입수가능한 알파 21164 마이크로프로세서이다. 알파 21164는 파이프라인의 처음의 3개의 스테이지들만을 정지시킨다. 만일 문제가 제3 스테이지 이후에 발생하면, 알파 21164는 문제를 수정한 후에 전체 파이프라인을 리플레이한다. 따라서, 알파 21164는 고가의 정지회로(stalling circuitry) 및 리플레이할 때를 판단하기 위하여 필요한 복잡한 구조의 판단 회로(decision-making circuitry)를 겸비한다. 비록 문제가 집중될 수 있을지라도, 알파 21164는 전체 파이프라인을 리플레이한다. 만일 몇 개의 병렬 실행유닛(parallel execution units), 예로 수퍼스칼라 프로세서(superscalar processor)가 있고, 문제가 병렬 실행유닛들 중 하나의 실행유닛에 집중되면, 전체 파이프라인을 리플레이하는 것은 비효율적일 수 있다.
더 빠른 속도를 갖는 프로세서에 대한 요구가 계속하여 현재의 기술을 앞선다. 이러한 요구는 프로세서 구조의 모든 관점을 더 높은 명령어의 처리량의 견지에서 더 빠르게 되도록 압력을 가한다. 파이프라인 처리에서의 예외를 처리하기 위한 현재의 기술은 명령어 처리량을 상당히 감소시킬 수 있다.
본 발명은 전술된 하나 또는 그 이상의 문제에 대한 영향을 제거하거나 또는 적어도 감소시키는 것에 관한 것이다.
본 발명의 목적 및 장점은 다음의 상세한 설명을 읽고 첨부 도면을 참조할 경우에 명백해질 것이다.
도1은 본 발명에 따라 구성되고 동작되는 파이프라인의 일실시예를 개념적으로 도시한 도면.
도2a는 도1에 예시된 파이프라인의 전단부와 후단부 사이의 큐의 제1 실시예를 도시한 도면.
도2b는 도1에 예시된 파이프라인의 전단부와 후단부 사이의 큐의 제2 실시예를 도시한 도면.
도3a는 도1의 파이프라인의 특정한 일실시예를 개념적으로 도시한 도면.
도3b는 도3a의 파이프라인의 회수 스테이지의 일실시예를 도시한 도면.
도4a는 본 발명에 따라 명령어를 추론적으로 실행하고 회수하기 위한 방법의 실시예를 도시한 도면.
도4b는 본 발명에 따라 명령어를 실행하고 회수하기 위한 방법의 다른 실시예를 도시한 도면.
비록 본 발명이 다양한 수정 및 대안의 형태로 변경될 수 있지만, 특정한 실시예가 도면에 일례로 도시되고, 여기서 상세하게 기술된다. 그러나, 여기서 특정한 실시예의 설명은 기술된 특정한 형태로 본 발명을 제한하도록 의도된 것이 아니며, 반대로, 본 발명은 첨부된 청구범위에 의해 정의된 바와 같이 본 발명의 사상 및 범위내에 속한 모든 수정, 등가물(equivalents) 및 대안(alternatives)을 포괄한다는 것을 이해해야 한다.
발명의 요약
일실시예에서, 본 발명은 명령어를 실행하기 위한 방법을 제공한다. 이 방법은 파이프라인의 일부분의 스테이지가 준비되어 있는지 여부를 먼저 판단하지 않고, 파이프라인의 일부분에서 제1 및 제2 복수의 명령어를 디스패치(dispatching)하고 실행하는 단계를 포함한다. 이 방법은 또한 실행 문제에 직면했는지 여부를 판단하는 단계와 제1 복수의 명령어가 실행 문제에 직면한 것으로 판단한 것에 응답하여 제1 복수의 명령어를 리플레이하는 단계를 더 포함한다.
다른 실시예에서, 본 발명은 프로세서 파이프라인을 제공한다. 프로세서 파이프라인은 실행을 위하여 복수의 명령어를 페치하기 위한 전단부(front end) 및 이 전단부에 의하여 페치된 복수의 명령어를 실행하기 위한 후단부(back end)를 포함한다. 후단부는 명령어가 실행 문제를 갖고 있는지 여부를 판단하기 위한 회수 스테이지(retirement stage)를 포함한다. 이 후단부는 정지가능한 것이 아니다. 프로세서 파이프라인은 또한 명령어가 실행 문제에 직면했다는 표시를 회수 스테이지로부터 명령어가 재실행될 수 있는 파이프라인의 리플레이 지점(replay point)으로 전송하기 위한 채널을 포함한다.
본 발명의 예시적인 실시예는 후술된다. 명료성을 위하여, 실질적인 구현의 모든 특징들이 본 명세서에서 기술되는 것은 아니다. 이러한 실시예의 개발에서, 시스템 및 비즈니스와 관련된 제약에 따르는 것과 같은 개발자의 특정한 목표를 달성하기 위하여 많은 구현-특유의 결정(implementation-specific decisions)이 이루어져야 하고, 이것은 하나의 구현예로부터 다른 구현예로 변경될 수 있다는 것을 당연히 인식할 것이다. 더욱이, 비록 이러한 개발 노력이 복잡하고 시간-소비적일지라도, 이러한 노력은 당 기술분야에서 통상의 지식을 가진 자에 대한 일상적인 의무라는 것을 인식할 것이다.
도1은 본 발명에 따라 구성되고 동작되는 정지불가능한(non-stallable) 프로세서 파이프라인(10)의 일실시예를 개념적으로 도시한 것이다. 파이프라인(10)은 일반적으로 전단부(12), 후단부(14) 및 전단부(12)와 후단부(14) 사이에 위치한 큐(15)를 포함한다. 큐(15)는 채널(17)을 통해 전송되는 리플레이 요구(replay request)에 응답하여 후단부(14)가 리플레이될 수 있는 프로세서 파이프라인의 중간 상태(intermediate state)를 저장할 수 있다.
도1을 참조하면, 몇몇 실시예들의 큐(15)는 후단부(14)로부터 독립된 것이 아니라 후단부(14)의 일부분일 수 있다. 명료성과 후술되는 본 발명의 이러한 기재를 위하여, 큐(15) 및 후단부(14)는 파이프라인(10)의 독립된 부분들로서 기술할 것이다. 그렇지만, 본 발명은 이러한 것에 제한되지 않으며, 후단부(14)는 몇몇 대안의 실시예들에서 큐(15)를 포함할 수 있다.
여전히 도1을 참조하면, 전단부(12)는 매크로-명령어를 페치하고, 이러한 특정한 실시예에서, '마이크로-op(micro-ops)'를 발생시킨다. 마이크로-op는 일반적으로 하나 또는 몇 개의 클록 사이클동안에 프로세서의 단일 실행 유닛(도시되지 않음)에 의하여 실행될 수 있는 명령어이다. 매크로-명령어는 몇 개의 마이크로-op를 포함할 수 있다. 따라서, 매크로-명령어와 마이크로-op 사이의 일대일 대응은 불가능할 수 있다.
여전히 도1을 참조하면, 전단부(12)는 매크로-명령어를 마이크로-op로 디코드하고, 이것을 큐(15)에 저장한다. 후단부(14)는 전단부(12)에 의해 준비되고 큐에 저장된 명령어를 실행한다. 이후에, 명령어는 후단부(14)에 위치한 실행 유닛들 중 하나의 실행 유닛에서 실행 가능한 마이크로-op 또는 명령어에 적용된다..
여전히 도1을 참조하면, 병렬 실행을 위하여 큐(15)로부터 디스패치되는 이슈 그룹(issue group)은 명령어 또는 마이크로-op의 세트이다. 이슈 그룹은 하나 또는 그 이상의 마이크로-op를 포함할 수 있다. 몇몇 실시예들에서, 이슈 그룹의 마이크로-op는 1클록 사이클 동안에 큐에 기록된다. 큐에 저장된 마이크로-op는 후술된 바와 같이 재실행될 수 있는 파이프라인(10)의 중간 상태를 정의한다.
도2a는 도1의 큐(15)의 특정한 일실시예(35)를 도시한 것이다. 큐(35)는 후단부(14)의 몇 개의 병렬 실행 포트 또는 유닛(두 개가 모두 도시되지 않음)에 공급하기에 충분한 칼럼(columns)(33)을 가진다. 도1의 프로세서(10)는 독립된 실행 유닛으로 큐(35)의 각각의 칼럼(33)의 마이크로-op를 디스패치한다. 몇몇 실시예에서, 칼럼(33)의 수는 프로세서 파이프라인(10)에서의 병렬 실행 유닛의 수와 같다. 다른 실시예에서, 큐(35)는 오직 실행 유닛의 일부분에만 공급한다. 예를 들어, 일실시예는 N개의 병렬 ALU(arithmetic logic units)를 포함하고, 큐(35)는 N개의 칼럼(33)을 갖고 있으며, 각각의 칼럼을 ALU들 중 독립된 하나의 ALU에 공급한다.
도2a를 참조하면, 큐(35)는 병렬 실행 유닛마다 하나의 칼럼을 포함하지만, 그러나 다른 적합한 구조들이 사용될 수 있다. 몇몇 실시예들은 하나의 실행 유닛으로 마이크로-op를 각각 디스패치하는 N개의 큐(35)들을 사용한다. 도2a의 큐(35)는 마스터 큐이고, 후단부(14)내의 각각의 실행 유닛을 위한 마이크로-op를 저장한다.
여전히 도2a를 참조하면, 큐(35)는 후단부(14)에서 각각의 회수되지 않은 명령어의 마이크로-op를 저장할 만한 충분한 로우(rows)를 갖는다. 큐(35)의 각각의 로우는 마이크로-op의 하나의 이슈 그룹을 저장한다. 큐(35)에서, 마이크로-op는 그것들이 디코드된 매크로-명령어가 회수될 때까지 중첩-기록되지 않는다. 따라서, 큐(35)는 파이프라인(10)의 후단부(14)의 중간 상태를 저장한다. 중간 상태는 디스패치 스테이지와 최종 또는 회수된 상태 사이에 마이크로-op를 나타낸다. 후단부(14)는 전체 파이프라인(10)을 리플레이할 필요없이 큐(35)에 저장된 중간 상태부터 리플레이될 수 있다.
여전히 도2a를 참조하면, 큐(35)는 순환식이며, 헤드 포인터(head pointer)(34), 테일 포인터(tail pointer)(36) 및 리플레이 포인터(replay pointer)(38)를 포함한다. 헤드 포인터(34)는 큐(35)의 "헤드", 즉 새로운 마이크로-op가 큐(35)에 기록될 로우를 가리킨다. 테일 포인터(36)는 다음 로우, 즉 실행을 위하여 후단부(14)로 디스패치될 마이크로-op의 이슈 그룹을 가리킨다. 리플레이 포인터(38)는 리플레이 요구에 응답하여 디스패치될 마이크로-op의 제1 이슈 그룹을 포함하는 로우를 가리키며, 특정 실시예에서, 이 이슈그룹은 큐(35)의 가장 오래되고 회수되지 않은 이슈 그룹이다. 후단부의 리플레이를 시작하기 위하여, 파이프라인(10)은 리플레이 포인터(38)를 테일 포인터(36)로 복사한다. 이것은 가장 오래되고 회수되지 않은 이슈 그룹의 마이크로-op가 큐(35)로부터 디스패치되는 그 다음의 이슈 그룹이 되도록 테일 포인터(36)의 위치를 변경시킨다.
도2a에서, 헤드 포인터(34)는 새로운 마이크로-op가 큐(35)에 기록됨에 따라 증가된다. 유사하게, 마이크로-op가 큐(35)로부터 판독됨에 따라, 테일 포인터(36)는 증가된다. 따라서, 각각의 마이크로-op가 회수됨에 따라 리플레이 포인터(38)는 증가된다. 회수된 명령어로부터의 마이크로-op는 큐(35)의 로우를 재사용하기 위하여 헤드 포인터(34)가 증가됨에 따라 중첩-기록된다. 포인터(34,36 또는 38)들 중 하나의 포인터가 큐(35)내의 최종 엔트리에 도달할 때, 그 포인터는 큐(35)내의 최초 엔트리에 겹치도록(wrap around) 증가되며, 따라서 큐(35)를 순환식 버퍼(circular buffer)로 만들게 된다. 도2a의 실시예에서, 테일 포인터(36)는 통상적으로 헤드 포인터(34)에 뒤지고, 리플레이 포인터(38)는 테일 포인터(36)에 뒤진다.
여전히 도2a를 참조하면, 헤드 포인터(34)가 테일 포인터(36)와 같을 때 큐(35)는 비어 있게 된다. 몇몇 실시예에서, 각각의 헤드 포인터(34) 및 테일 포인터(36)는 여분의 비트를 갖는다. 만일 헤드 포인터(34)와 재실행 포인터(38)가 같고, 여분의 비트들이 상이하면, 큐(35)는 모두 차있게 된다. 만일 헤드 포인터(34)와 재실행 포인터(38)가 같고 여분의 비트들이 같으면, 큐는 비어 있게 된다. 대안의 실시예에서, 하나의 비어 있는 로우는 모두 차있는 큐의 상태를 검출하는 것에 대비하여 예비되고, 큐(35)가 모두 찼을 때 헤드 포인터(34)는 리플레이 포인터(38)보다 1이 작다. 다른 실시예들에서, 큐(35)가 모두 찼을 때 전체 파이프라인(10)이 리플레이된다.
도2b는 도1의 큐(15)의 제2 실시예(35')를 도시한 것이다. 큐(35')의 각각의 칼럼(33')은 시프트 레지스터이다. 큐(35')는 오직 헤드 포인터 및 테일 포인터(34',36')만을 사용하고, 마이크로-op의 로우를 회수시키는 것에 응답하여 물리적으로 각각의 마이크로-op의 로우, 즉 각각의 이슈 그룹을 아래로 시프팅한다. 따라서, 가장 오래되고 회수되지 않은 이슈 그룹의 마이크로-op는 큐(35')의 바닥 로우(bottom row)(39)에 있게 된다. 따라서, 도2a의 실시예의 재실행 포인터(38)는 사실상 큐(35')의 바닥 로우(39)에 있는 것이다. 그렇지 않으면, 도2b의 큐(35')는 도2a의 큐(35)와 유사하게 기능한다.
다시 도3a를 참조하면, 도1의 정지불가능한 파이프라인(10)의 전단부(12)는 적어도 페치 및 디코드 스테이지(16,18)를 포함한다. 전단부(12)는 그것이 메모리로부터 매크로-명령어를 페치하고, 마이크로-op를 큐(15)에 기록하는 한, 당 기술분야에 공지된 어떠한 설계로도 이루어질 수 있다. 다양한 실시예에서, 전단부(12)는 다른 스테이지 및/또는 기능을 포함할 수 있다.
여전히 도3a를 참조하면, 후단부(14)는 또한 몇 개의 처리 스테이지를 포함한다. 후단부(14)는 실행 스테이지(30) 및 회수 스테이지(32)를 포함한다. 후단부(14)는 큐로부터 디스패치되는 마이크로-op를 수신하고, 디스패치된 마이크로-op를 실행하며, 실행된 명령어를 회수한다. 회수 스테이지(32)는 실행 문제, 즉 예외를 검사하고 검출한다. 대안의 실시예는 특정한 구현에 따라 추가의 스테이지 및 기능을 포함할 수 있다.
여전히 도3a를 참조하면, 전술한 파이프라인(10)의 스테이지(16,18,30 및 32)는 단지 예시적인 것이며, 다양한 대안의 실시예에서 있을 수 있는 배타적 스테이지들이 아니다. 또한, 당 기술분야에서 통상의 지식을 가진 자가 이해할 수 있는 바와 같이, 프로세서 파이프라인(10)에서의 스테이지(16, 18, 30 및 32)와 기능의 구분은 반드시 도3a에 나타난 바와 같이 그렇게 구별되는 것은 아니다. 도1의 파이프라인(10)은 본 발명을 설명하는데 있어 명료성을 위하여 개념화된 것이다. 따라서, 스테이지들에 대한 전단부(12) 및 후단부(14)의 정확한 구조는 본 발명의 실시에 속한 것이 아니다.
여전히 도3a를 참조하면, 파이프라인의 후단부(14)는 정지불가능하다. 후단부(14)를 통한 진행은 플립-플롭 및/또는 자유롭게 동작하는 스테이지방식의 도미노 회로(staged domino circuits)(2개가 모두 도시되지 않음)에 의해 제어된다. 후단부(14)를 정지불가능하게 만듦으로써, 정지 제어 네트워크(stall control network)를 동작시키는 것과 관련된 타이밍 지연을 제거한다. 정지 제어 네트워크를 제거함으로써, 몇몇 실시예들은 파이프라인(10)의 동작 주파수를 실질적으로 증가시킬 수 있다. 여기서 사용된 바와 같이, "정지불가능한"이라는 용어는 실행 문제에 응답하여 정지되는 것이 아니라 플러싱되고 리플레이되는 파이프라인 또는 그 일부분을 말한다. 몇몇 실시예에서는, 전체 파이프라인(10)이 정지불가능하다.
여전히 도3a를 참조하면, 후단부(14)는 마이크로-op를 실행하기 위하여 요구되는 데이터 및 제어 의존성을 추론적으로 해결하는 예측을 수행한다. 실행 이후에, 마이크로-op 및 그 결과는 구조상의 상태로의 커밋을 대기하기 위해 일시적으로 저장된다. 구조상의 상태로의 커밋은 문제가 발생했는지 여부 및 예측이 정확했는지 여부를 판단하기 위한 검사를 포함한다. 문제의 검사는 당 기술분야에 공지된 임의의 적합한 방법에 의해 수행될 수 있으며, 구현에 따라 특정될 수 있다. 문제가 검사되는 정확한 방법은 본 발명에서는 중요하지 않다. 만일 문제 또는 부정확한 예측이 발견되면, 추론적인 실행의 결과는 무시된다. 이후에, 파이프라인(10)의 후단부(14)는 플러싱되거나 드레인되는데(drained), 즉 파이프라인(10)이 리셋되거나 또는 후단부(14)의 모든 명령어가 실행을 완료하도록 허용되고, 레지스터들은 리셋된다.
특정한 일실시예에서 전형적인 문제들은,
(1) 캐시 미스(cache miss)
(2) 분기 또는 단정된 예측오류( a branch or predicate misprediction)
(3) 페이지 폴트(page fault) 또는 허용되지 않은 명령어와 같은 예외
(4) TLR 미스(translation look-aside register miss)
(5) 적재/저장 충돌과 같은 소정의 데이터 의존성
들을 포함한다.
또한, 몇몇 문제들은 일부 실시예에서 후단부의 리플레이없이 처리될 수 있다. 이러한 변경들은 모두 구현에 특정된 것이며, 본 발명에 반드시 필수적인 것은 아니다.
일단 문제가 검출되면, 문제 및 그 영향은 수정된다. 또한, 그 수정은 구현에 특정된 것일 수 있다. 전형적인 문제 및 수정 조치(act)는 다음을 포함한다.
(a) 단정된 예측오류, 정확한 예측이 리플레이를 위해 삽입되어야 함. 또는
(b) 적재/저장 충돌, 저장은 완료되고, 캐시는 갱신되고, 그 후에 정확한 값이 로딩되어야 함.
는 것들을 포함한다.
문제의 수정은 빨리 수행될 수 있는데, 그 이유는 도1의 큐(15)가 도1의 파이프라인(10)의 중간 상태를 저장하기 때문이다. 따라서, 문제가 큐(15)에서 식별되고 수정될 수 있으며, 실행 스트림은 리플레이될 수 있다. 문제의 영향은 리플레이에서 수정될 것이다.
도3a를 참조하면, 후단부(14)는 큐(15)의 마이크로-op로부터 리플레이된다. 회수 스테이지(32)에 의한 실행 문제의 검출은 리플레이 요구를 발생시킨다. 회수 스테이지(32)는 채널(17)을 통해 큐(15)에 리플레이를 요구한다. 도2a의 실시예에서, 파이프라인(10)은 리플레이를 시작하기 위하여 리플레이 포인터(38)를 테일 포인터(36)로 복사한다. 이후에, 큐(15)로부터의 마이크로-op의 실행은 전술된 바와 같이 재시작된다. 실행 문제의 검출은 또한 후단부의 플러시 및 그것에 저장된 추론적인 실행 결과들의 플러시를 발생시킨다. 실행 문제를 갖는 명령어와 리플레이되는 명령어 사이에 위치한 명령어로부터의 결과는 구조상의 상태로 커밋되지 않는다.
도3a를 참조하면, 재실행(re-execution)의 결과는 실행 문제에 대하여 추론적으로 저장되고 검사된다. 비록 리플레이를 발생하는 문제가 다시 발생하지 않더라도, 다른 실행 문제들이 발생할 수 있다. 만일 새로운 문제가 검출되면, 다른 리플레이가 전술된 바와 같이 요구된다. 파이프라인(10)은 결국 구조상의 상태로 커밋될 수 있는 문제없는 결과들을 생성한다. 후단부(14)의 리플레이를 각각 반복(iteration)함으로써 후단부에서 명령어를 회수하는 방향으로 고려중인 이슈 그룹을 전진시킨다.
도3b는 도3a의 회수 스테이지(32)를 위한 회수 하드웨어(31)의 일실시예를 도시한 것이다. 회수 하드웨어(31)는 회수 로직(20), 추론적 레지스터 파일(22) 및 구조상의 레지스터 파일(24)을 포함하고, 또한 마스크(25)를 포함할 수 있다. 실행된 명령어로부터의 결과는 일시적으로 추론적 레지스터 파일(22)에 저장된다. 추론적 레지스터 파일(22)에 저장된 실행 결과에 대응하는 명령어를 실행하는 동안에, 회수 로직(20)은 어떤 실행 문제들이 발생했는지 여부를 판단한다. 만일 회수 로직(20)이 어떤 실행 문제도 발생하지 않은 것으로 판단하면, 회수 로직(20)은 실행 결과를 추론적 레지스터 파일(22)로부터 구조상의 레지스터 파일(24)로 기록하고 그 명령어를 회수한다. 만일 회수 로직(20)이 문제가 발생한 것으로 판단하면, 회수 로직(20)은 구조상의 레지스터 파일(22)에 그 결과를 기록하는 대신에 후단부의 재실행을 시작한다.
여전히 도3b를 참조하면, 몇몇 실시예들은 "부분적인(partial)" 파이프라인 리플레이가 실행 문제들에 응답하여 수행될 수 있도록 마스크(25)를 사용한다. 부분적인 리플레이는 도2a의 큐(35) 또는 도2b의 큐(35')의 칼럼들의 일부분의 마이크로-op를 재실행한다. 부분적인 리플레이는 재실행될 칼럼들의 일부분에 속한 마이크로-op에 관한 실행 문제에 응답하여 수행된다. 마스크(25)의 로우(27)는 실행 문제에 직면한 마이크로-op의 칼럼들을 나타내거나 또는 실행 문제에 직면하는 마이크로-op에 의존할 가능성이 있다. 예를 들어, 마스크(25)는 문제를 레지스테에 저장하는 각각의 실행 유닛으로 전송되는 마이크로-op의 칼럼들을 리플레이 또는 재실행시킬 수 있다. 실행 문제들에 직면한 칼럼에 의존하지 않는 명령어의 칼럼들은 정상적으로 회수될 수 있으며, "부분적인" 리플레이에서 재실행되지 않을 수 있다.
여전히 도3b를 참조하면, 회수 로직(20)은 어떤 명령어가 실행 문제에 직면했는지를 나타내도록 마스크(25)를 유지관리한다. 마스크(25)는 실행 문제들에 직면한 특정한 명령어를 나타내기 위하여 일련의 1과 0을 포함한다. 마스크(25)를 판독한 후에, 회수 로직(20)은 도2a 또는 도2b의 칼럼(33)의 서브세트로부터의 명령어의 리플레이를 명령한다. 재실행될 칼럼들의 서브세트는 적합한 서브세트, 즉 전체 칼럼(33)보다 적을 수 있다. 일실시예에서, 큐(15)는 N개의 병렬 실행 포트 또는 유닛(도시되지 않음)에 대응하는 N개의 칼럼(33)을 갖는다. 이러한 실시예에서, 마스크(25)는 N개의 2진수, 즉 각각의 병렬 실행 유닛에 대한 하나의 2진수를 포함한다. 마스크 데이터는 문제가 발생한 큐(15)의 칼럼 및 실행 포트를 나타내는 인덱스이다.
도3b 및 도2a를 참조하면, 일실시예의 회수 로직(20)은 실행 문제의 검출에 응답하여 큐(35)로 마스크 데이터 및 리플레이를 전송한다. 큐(35)의 테일 포인터(36)는 리플레이 요구를 수신한 것에 응답하여 전술된 바와 같이 위치가 변경된다. 이후에, 리플레이는 마스크 데이터가 발생된 실행 문제를 나타내는 큐(35)의 칼럼(33)에 대하여 선택적으로 진행된다. 다른 칼럼들로부터의 명령어는 재실행되지 않는다.
도4a는 파이프라인의 후단부, 예로 도3a 및/또는 도3b의 후단부(14)의 실행 스테이지들을 포함하는 부분에서 명령어를 실행하는 방법(40)을 도시한 것이다. 일실시예에서, 파이프라인의 후단부는 정지불가능하다. 블록(41)에서, 파이프라인(10)은 파이프라인의 스테이지들이 명령어를 수신할 준비가 되어 있는지 여부를 판단하지 않고 후단부의 파이프라인에서 복수의 명령어를 디스패치하고 실행한다. 블록(41)의 일례와 같이, 도3a의 파이프라인(10)은 복수의 이슈 그룹들을 큐(15)로부터 후단부(14)로 순차적으로 이슈한다. 큐(15)는 명령어를 디스패치하고, 그 명령어는 여기서 다양한 스테이지들이 준비되어 있는지 여부를 검사하지 않고 실행 스테이지(30)에서 실행된다. 블록(42)에서, 회수 스테이지(32)는 실행된 명령어가 실행 문제에 직면했는지 여부를 판단한다. 예를 들어, 이 단계는 실행 문제가 하나의 이슈 그룹의 명령어에서 발생했는지 여부를 판단한다는 것을 의미할 수 있다. 블록(44)에서, 큐(15)는 실행된 명령어의 일부분이 실행 문제에 직면한 것으로 판단한 것에 응답하여, 그 실행된 명령어의 일부분을 리플레이한다. 몇몇 일실시예에서, 이 부분은 전체 이슈 그룹이다. 다른 실시예에서, 이 부분은 전체 이슈 그룹들의 적합한 서브세트이다. 몇몇 실시예에서, 회수 스테이지(32)는 그 실행결과를 구조상의 상태로 커밋하는 문제들에 직면하지 않은 명령어로부터의 결과를 계속 유지한다. 일실시예에서, 커밋은 도3b의 구조상의 레지스터 파일(24)에 그 결과를 기록하는 것을 의미한다.
도3b 및 도4a를 참조하면, 이 방법(40)은 변경될 수 있다. 다양한 대안의 실시예에서, 문제없이 실행된 명령어로부터의 결과는, 그 결과를 구조상의 레지스터 파일(24)로 커밋하거나 또는 추론적적 레지스터 파일(22)에 그 결과를 유지함으로써 계속 유지될 수 있다. 후자의 경우에서, 추론적 레지스터 파일(22)의 내용은 문제없이 실행하는 몇 개의 명령어에 응답하여 구조상의 레지스터 파일(24)로 커밋된다.
도4b는 정지불가능한 파이프라인, 예로 도3a의 파이프라인에서 명령어를 실행하기 위한 다른 방법(45)을 도시한 것이다. 블록(46)에서, 파이프라인(10)은 이슈 그룹의 명령어를 추론적으로 실행한다. 블록(47)에서, 회수 스테이지(32)는 이슈 그룹의 어떤 명령어가 실행 문제에 직면했는지 여부를 판단한다. 블록(48)에서, 회수 로직(20)은 추론적으로 실행된 명령어중 어느 것이 실행 문제에 직면했다는 표시를 파이프라인(10)의 소정의 리플레이 지점으로 전송하는데, 예로 마스크(25)로부터의 데이터를 전송한다. 리플레이 지점은 도1 및 도3a의 큐(15)일 수 있다. 블록(49)에서, 파이프라인(10)은 예를들어, 큐(15)로부터 관련 명령어를 실행 유닛(도시되지 않음)으로 디스패치함으로써 실행 문제에 직면한 명령어를 리플레이한다. 블록(50)에서, 도3b의 회수 로직(20)은 실행 문제에 직면하지 않았던 명령어로부터의 결과를 도3b의 구조상의 레지스터 파일(35)로 커밋하고, 이러한 명령어를 회수한다.
도4b의 방법은 또한 파이프라인(10)의 다양한 포인트에서 명령어를 큐잉하는(queuing) 것을 포함한다. 예를 들어, 명령어는 디코딩 이후에 큐잉될 수 있다. 역시, 실행 문제에 직면한 명령어를 리플레이하는 것은 프로세서 파이프라인의 일부분, 예로 후단부를 리플레이하는 것을 의미할 수 있다.
다시 도3a를 참조하면, 프로세서 파이프라인(10)의 명령어 처리량은 전체의 파이프라인(10)을 리플레이하는 것보다 오히려 후단부를 리플레이함으로써 증가될 수 있다. 몇몇 실시예에서, 전체의 프로세서 파이프라인(10)의 리플레이는, 후단부의 리플레이보다 두 배가 많은 클록 사이클을 사용할 수 있으며, 그 이유는 프로세서 파이프라인(10)의 전단부(12)가 더 많은 스테이지들을 갖고 있기 때문이다. 이러한 상황에서, 본 발명의 실시는 후단부의 재실행을 통해서 실행 문제를 수정함으로써 소비 시간을 반으로 줄일 수 있다.
본 발명은 당 기술분야에서 통상의 지식을 가진 자에게 명백하게 상이하지만 동등한 방법들로써 변경되고 실시될 수 있는 바와 같이, 전술된 특정한 실시예들은 단지 예시적인 것이다. 또한, 어떤 제한도 여기서 도시된 구조의 상세한 설명, 다음의 청구범위에 기재된 것 이상으로 의도되지 않는다. 전술된 특정한 실시예들은 변경될 수 있고, 모든 이러한 변경은 본 발명의 범위 및 사상 내에서 고려된다. 따라서, 다음의 청구범위에 기재되는 바를 여기서 보호하고자 한다.

Claims (20)

  1. 명령어를 실행하기 위한 방법에 있어서,
    파이프라인의 일부분의 스테이지들이 준비되어 있는지 여부를 먼저 판단하지 않고 상기 파이프라인의 일부분에서 제1 및 제2 복수의 명령어를 디스패치하고 실행하는 단계;
    상기 명령어들이 실행 문제에 직면했는지 여부를 판단하는 단계; 및
    상기 제1 복수의 명령어가 실행 문제에 직면했다는 판단에 응답하여 상기 제1 복수의 명령어를 리플레이하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 제2 복수의 명령어가 실행 문제에 직면하지 않았다는 판단에 응답하여 상기 제2 복수의 명령어로부터의 결과를 유지하는 단계; 및
    상기 제1 복수의 명령어로부터의 결과를 플러싱하는 단계
    를 더 포함하는 방법.
  3. 제2항에 있어서,
    상기 판단하는 단계는 단일 이슈 그룹의 명령어에서의 실행 문제에 대하여 검사하는 단계를 포함하는
    방법.
  4. 제2항에 있어서,
    상기 제2 복수의 명령어가 실행 문제에 직면하지 않았다는 판단에 응답하여 상기 제2 복수의 명령어의 실행 결과를 추론적인 레지스터로부터 구조상의 레지스터로 기록하는 단계
    를 더 포함하는 방법.
  5. 명령어를 실행하기 위한 방법에 있어서,
    후단부 파이프라인(back-end pipeline)의 스테이지들이 명령어를 실행할 준비가 되어 있는지 여부를 판단하지 않고 상기 후단부 파이프라인에서 이슈 그룹의 명령어를 디스패치하고 실행하는 단계;
    상기 이슈 그룹의 명령어들이 실행 문제에 직면했는지 여부를 판단하는 단계;
    상기 이슈 그룹의 명령어들 중 어느 명령어가 실행 문제에 직면했는지를 상기 파이프라인내의 리플레이 지점으로 지시하는 단계; 및
    재실행을 위하여 상기 리플레이 지점으로부터 상기 이슈 그룹의 지시된 명령어를 재-디스패치하는 단계
    를 포함하는 방법.
  6. 파이프라인 방식의 프로세서에서 명령어를 처리하기 위한 방법에 있어서,
    상기 파이프라인 방식의 프로세서의 스테이지들이 상기 명령어들을 수신할 준비가 되어 있는지 여부를 판단하지 않고, 실행을 위해 상기 파이프라인 방식의 프로세서의 일련의 스테이지들을 통하여 복수의 명령어를 전송하는 단계;
    상기 복수의 명령어 중 어느 명령어가 문제없이 실행됐는지 여부를 판단하는 단계;
    상기 복수의 명령어 중 어느 명령어가 실행 문제에 직면했는지를 상기 파이프라인 방식의 프로세서의 리플레이 지점으로 지시하는 단계; 및
    상기 리플레이 지점으로부터 실행 문제에 직면한 것으로 지시된 명령어를 리플레이하는 단계
    를 포함하는 방법.
  7. 제6항에 있어서,
    큐의 로우에 연속된 이슈 그룹들의 명령어를 저장하는 단계
    를 더 포함하고,
    여기서, 상기 전송하는 단계는 상기 이슈 그룹들을 상기 큐로부터 병렬 실행 포트들로 순차적으로 전송하는 단계를 포함하는
    방법.
  8. 제6항에 있어서,
    상기 지시하는 단계는 회수 스테이지로부터 상기 이슈 그룹들의 명령어를 상기 일련의 스테이지들로 전송한 큐로 마스크 데이터를 전송하는 단계를 포함하고,
    여기서, 상기 마스크 데이터는 실행 문제에 직면한 명령어를 나타내는
    방법.
  9. 프로세서 파이프라인에 있어서,
    실행을 위하여 복수의 명령어를 페치하기 위한 전단부(front end);
    상기 전단부에 의해 페치된 상기 복수의 명령어를 실행하기 위한 후단부(back end) - 여기서, 상기 후단부는 명령어가 실행 문제에 직면했는지 여부를 판단하기 위한 회수 스테이지를 포함하며, 정지불가능함 - ; 및
    상기 명령어가 실행 문제에 직면했다는 표시를 상기 회수 스테이지로부터 상기 표시된 명령어가 재실행될 수 있는 리플레이 지점으로 전송하기 위한 채널
    을 포함하는 프로세서 파이프라인.
  10. 제9항에 있어서,
    상기 표시는 실행 문제에 직면한 명령어를 나타내기 위한 마스크를 포함하는
    프로세서 파이프라인.
  11. 제9항에 있어서,
    상기 리플레이 지점은 상기 전단부와 후단부 사이에 위치한 큐를 포함하고, 상기 큐는 상기 전단부로부터의 명령어를 저장하고, 상기 저장된 명령어는 상기 후단부에서 실행을 위하여 상기 큐로부터 디스패치되는
    프로세서 파이프라인.
  12. 제11항에 있어서,
    상기 큐는 실행을 위하여 디스패치되었지만 회수되지 않은 명령어를 포함하는 상기 후단부의 중간 상태를 저장하는
    프로세서 파이프라인.
  13. 제12항에 있어서,
    상기 큐는,
    복수의 로우 - 여기서, 상기 각각의 로우는 상기 전단부로부터의 이슈 그룹의 명령어를 저장하기 위한 것임 - ;
    상기 로우들 중에서, 상기 큐에 저장될 다음(next) 이슈 그룹의 명령어를 저장하기 위한 다음 로우에 대한 제1 포인터; 및
    상기 큐로부터 디스패치될 명령어의 다음 로우에 대한 제2 포인터를 포함하는
    프로세서 파이프라인.
  14. 프로세서 파이프라인에 있어서,
    전단부;
    정지불가능한 후단부;
    상기 전단부와 후단부 사이에 위치되어, 상기 전단부로부터 명령어를 수신하고, 상기 후단부에 의한 리플레이를 위해 상기 파이프라인의 중간 상태를 저장하기 위한 큐 ; 및
    상기 후단부가 상기 큐로부터 리플레이를 요구할 수 있도록 하는 채널
    을 포함하는 프로세서 파이프라인.
  15. 제14항에 있어서,
    상기 큐는,
    복수의 로우 - 여기서, 상기 각각의 로우는 상기 전단부로부터 수신된 하나의 이슈 그룹의 회수되지 않은 마이크로-op를 저장하기 위한 것임 - ;
    마이크로-op를 상기 큐에 저장하기 위한 다음 로우에 대한 제1 포인터; 및
    상기 후단부로 디스패치될 마이크로-op의 다음 로우에 대한 제2 포인터를 포함하는
    프로세서 파이프라인.
  16. 제15항에 있어서,
    상기 후단부는 복수의 병렬 실행 포트들을 갖는 실행 스테이지를 포함하고, 상기 큐는 각각의 병렬 실행 포트를 위한 하나의 칼럼을 갖고, 상기 각각의 실행 포트는 상기 칼럼들 중 하나로부터 명령어를 수신하는
    프로세서 파이프라인.
  17. 제16항에 있어서,
    명령어가 실행 문제에 직면했다는 판단에 응답하여 상기 칼럼들 중 어느 칼럼을 리플레이할 것인지를 나타내기 위한 마스크를 상기 큐로 전송하기 위한 회수 스테이지
    를 더 포함하는 프로세서 파이프라인.
  18. 명령어를 실행하기 위한 프로세서 파이프라인에 있어서,
    실행을 위하여 상기 명령어를 준비하기 위한 전단부;
    복수의 병렬 실행 유닛들을 구비한 후단부;
    상기 전단부와 후단부 사이에 위치되어, 상기 전단부로부터 명령어를 수신하고, 상기 후단부에 의한 리플레이를 위해 상기 파이프라인의 중간 상태를 저장하기 위한 큐 ; 및
    상기 후단부가 상기 큐로부터 부분적인 리플레이를 요구할 수 있도록 하는 채널
    을 포함하는 프로세서 파이프라인.
  19. 제18항에 있어서,
    상기 큐는,
    복수의 로우 - 여기서, 상기 각각의 로우는 상기 전단부로부터 수신된 하나의 이슈 그룹의 회수되지 않은 마이크로-op를 저장하기 위한 것임 - ;
    마이크로-op를 상기 큐에 저장하기 위한 다음 로우에 대한 제1 포인터; 및
    상기 후단부로 디스패치될 마이크로-op의 다음 로우에 대한 제2 포인터
    를 포함하고,
    여기서, 상기 큐는 각각의 병렬 실행 유닛을 위한 하나의 칼럼을 갖고, 상기 각각의 병렬 실행 유닛은 상기 칼럼 중 하나의 칼럼으로부터 마이크로-op를 수신하는
    프로세서 파이프라인.
  20. 제19항에 있어서,
    실행 문제에 직면했다는 판단에 응답하여 상기 칼럼들 중 어느 칼럼을 리플레이할 것인지를 나타내기 위한 마스크를 상기 큐로 전송하기 위한 회수 스테이지
    를 더 포함하는 프로세서 파이프라인.
KR10-2001-7008915A 1999-01-14 2000-01-05 명령어 리플레이를 포함하는 프로세서 파이프라인 KR100472346B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/231,426 US6205542B1 (en) 1997-12-24 1999-01-14 Processor pipeline including replay
US09/231,426 1999-01-14

Publications (2)

Publication Number Publication Date
KR20010089588A KR20010089588A (ko) 2001-10-06
KR100472346B1 true KR100472346B1 (ko) 2005-03-08

Family

ID=22869201

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2001-7008915A KR100472346B1 (ko) 1999-01-14 2000-01-05 명령어 리플레이를 포함하는 프로세서 파이프라인

Country Status (7)

Country Link
US (1) US6205542B1 (ko)
KR (1) KR100472346B1 (ko)
CN (1) CN1137435C (ko)
AU (1) AU2406300A (ko)
DE (1) DE10083848B4 (ko)
GB (1) GB2361564B (ko)
WO (1) WO2000042503A1 (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6625756B1 (en) * 1997-12-19 2003-09-23 Intel Corporation Replay mechanism for soft error recovery
US6047370A (en) * 1997-12-19 2000-04-04 Intel Corporation Control of processor pipeline movement through replay queue and pointer backup
IL125273A (en) * 1998-07-08 2006-08-20 Marvell Israel Misl Ltd Communication architecture
US6412067B1 (en) 1998-08-11 2002-06-25 Intel Corporation Backing out of a processor architectural state
US6282636B1 (en) * 1998-12-23 2001-08-28 Intel Corporation Decentralized exception processing system
US6643767B1 (en) * 2000-01-27 2003-11-04 Kabushiki Kaisha Toshiba Instruction scheduling system of a processor
US6877086B1 (en) * 2000-11-02 2005-04-05 Intel Corporation Method and apparatus for rescheduling multiple micro-operations in a processor using a replay queue and a counter
SE0004913D0 (sv) * 2000-12-29 2000-12-29 Ericsson Telefon Ab L M Processor
US6938126B2 (en) * 2002-04-12 2005-08-30 Intel Corporation Cache-line reuse-buffer
US6950925B1 (en) 2002-08-28 2005-09-27 Advanced Micro Devices, Inc. Scheduler for use in a microprocessor that supports data-speculative execution
US7080209B2 (en) * 2002-12-24 2006-07-18 Intel Corporation Method and apparatus for processing a load-lock instruction using a relaxed lock protocol
US20040123078A1 (en) * 2002-12-24 2004-06-24 Hum Herbert H Method and apparatus for processing a load-lock instruction using a scoreboard mechanism
DE102004051967A1 (de) * 2004-10-25 2006-04-27 Robert Bosch Gmbh Verfahren, Betriebssystem und Rechengerät zum Abarbeiten eines Computerprogramms
DE102004051966A1 (de) * 2004-10-25 2006-05-04 Robert Bosch Gmbh Verfahren, Betriebssystem und Rechengerät zum Abarbeiten eines Computerprogramms
US7152155B2 (en) * 2005-02-18 2006-12-19 Qualcomm Incorporated System and method of correcting a branch misprediction
US20070028078A1 (en) * 2005-07-26 2007-02-01 Arm Limited Instruction queues in pipelined processors
US7721067B2 (en) * 2006-01-20 2010-05-18 Qualcomm Incorporated Translation lookaside buffer manipulation
US8977837B2 (en) * 2009-05-27 2015-03-10 Arm Limited Apparatus and method for early issue and recovery for a conditional load instruction having multiple outcomes
US10678542B2 (en) * 2015-07-24 2020-06-09 Apple Inc. Non-shifting reservation station
US10452434B1 (en) 2017-09-11 2019-10-22 Apple Inc. Hierarchical reservation station
US20210119812A1 (en) * 2020-12-23 2021-04-22 Intel Corporation Time-based multi-dimensional key recreation mechanism using puf technologies

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5012403A (en) * 1988-04-01 1991-04-30 Digital Equipment Corporation Apparatus and method for replaying decoded instructions
US5784587A (en) * 1996-06-13 1998-07-21 Hewlett-Packard Company Method and system for recovering from cache misses

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4920477A (en) * 1987-04-20 1990-04-24 Multiflow Computer, Inc. Virtual address table look aside buffer miss recovery method and apparatus
US5297263A (en) * 1987-07-17 1994-03-22 Mitsubishi Denki Kabushiki Kaisha Microprocessor with pipeline system having exception processing features
US5307477A (en) * 1989-12-01 1994-04-26 Mips Computer Systems, Inc. Two-level cache memory system
US5428807A (en) 1993-06-17 1995-06-27 Digital Equipment Corporation Method and apparatus for propagating exception conditions of a computer system
US5421022A (en) 1993-06-17 1995-05-30 Digital Equipment Corporation Apparatus and method for speculatively executing instructions in a computer system
JPH07141176A (ja) * 1993-11-19 1995-06-02 Fujitsu Ltd コマンドリトライ制御方式
US5584037A (en) 1994-03-01 1996-12-10 Intel Corporation Entry allocation in a circular buffer
US5644742A (en) 1995-02-14 1997-07-01 Hal Computer Systems, Inc. Processor structure and method for a time-out checkpoint
US5822558A (en) 1995-04-12 1998-10-13 Advanced Micro Devices, Inc. Method and apparatus for predecoding variable byte-length instructions within a superscalar microprocessor
US5822574A (en) 1995-04-12 1998-10-13 Advanced Micro Devices, Inc. Functional unit with a pointer for mispredicted resolution, and a superscalar microprocessor employing the same
US5765208A (en) 1995-09-29 1998-06-09 Motorola, Inc. Method of speculatively executing store instructions prior to performing snoop operations
US5933618A (en) 1995-10-30 1999-08-03 Advanced Micro Devices, Inc. Speculative register storage for storing speculative results corresponding to register updated by a plurality of concurrently recorded instruction
US5787474A (en) 1995-11-20 1998-07-28 Advanced Micro Devices, Inc. Dependency checking structure for a pair of caches which are accessed from different pipeline stages of an instruction processing pipeline
US5901308A (en) 1996-03-18 1999-05-04 Digital Equipment Corporation Software mechanism for reducing exceptions generated by speculatively scheduled instructions
US5966544A (en) * 1996-11-13 1999-10-12 Intel Corporation Data speculatable processor having reply architecture
US5870579A (en) 1996-11-18 1999-02-09 Advanced Micro Devices, Inc. Reorder buffer including a circuit for selecting a designated mask corresponding to an instruction that results in an exception
US5764971A (en) 1996-12-11 1998-06-09 Industrial Technology Research Institute Method and apparatus for implementing precise interrupts in a pipelined data processing system
DE69814415T2 (de) 1997-01-29 2004-03-11 Advanced Micro Devices, Inc., Sunnyvale Zeilenorientierter wiedereinordnungsspeicher für superskalaren mikroprozessor
US5983321A (en) 1997-03-12 1999-11-09 Advanced Micro Devices, Inc. Cache holding register for receiving instruction packets and for providing the instruction packets to a predecode unit and instruction cache
US5987594A (en) * 1997-06-25 1999-11-16 Sun Microsystems, Inc. Apparatus for executing coded dependent instructions having variable latencies
US6079002A (en) * 1997-09-23 2000-06-20 International Business Machines Corporation Dynamic expansion of execution pipeline stages
US6047370A (en) * 1997-12-19 2000-04-04 Intel Corporation Control of processor pipeline movement through replay queue and pointer backup
US6076153A (en) 1997-12-24 2000-06-13 Intel Corporation Processor pipeline including partial replay
US6081887A (en) * 1998-05-13 2000-06-27 Compaq Computer Corporation System for passing an index value with each prediction in forward direction to enable truth predictor to associate truth value with particular branch instruction

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5012403A (en) * 1988-04-01 1991-04-30 Digital Equipment Corporation Apparatus and method for replaying decoded instructions
US5784587A (en) * 1996-06-13 1998-07-21 Hewlett-Packard Company Method and system for recovering from cache misses

Also Published As

Publication number Publication date
GB0116269D0 (en) 2001-08-29
WO2000042503A1 (en) 2000-07-20
US6205542B1 (en) 2001-03-20
CN1137435C (zh) 2004-02-04
GB2361564A (en) 2001-10-24
CN1337021A (zh) 2002-02-20
GB2361564B (en) 2003-11-26
KR20010089588A (ko) 2001-10-06
AU2406300A (en) 2000-08-01
DE10083848B4 (de) 2007-12-06
DE10083848T1 (de) 2002-03-07

Similar Documents

Publication Publication Date Title
KR100472346B1 (ko) 명령어 리플레이를 포함하는 프로세서 파이프라인
JP2597811B2 (ja) データ処理システム
US7330963B2 (en) Resolving all previous potentially excepting architectural operations before issuing store architectural operation
US6076153A (en) Processor pipeline including partial replay
US6772368B2 (en) Multiprocessor with pair-wise high reliability mode, and method therefore
JP3137157B2 (ja) プロセッサおよび命令推測実行方法
US7222227B2 (en) Control device for speculative instruction execution with a branch instruction insertion, and method for same
EP1296229B1 (en) Scoreboarding mechanism in a pipeline that includes replays and redirects
EP0779577B1 (en) Micoprocessor pipe control and register translation
US20200192742A1 (en) Error recovery for intra-core lockstep mode
US7849293B2 (en) Method and structure for low latency load-tagged pointer instruction for computer microarchitechture
US20060168432A1 (en) Branch prediction accuracy in a processor that supports speculative execution
US6457119B1 (en) Processor instruction pipeline with error detection scheme
US6073231A (en) Pipelined processor with microcontrol of register translation hardware
WO2001098895A1 (en) Mechanism for delivering precise exceptions in an out-of-order processor with speculative execution
US6047370A (en) Control of processor pipeline movement through replay queue and pointer backup
US5764971A (en) Method and apparatus for implementing precise interrupts in a pipelined data processing system
EP1296228B1 (en) Instruction Issue and retirement in processor having mismatched pipeline depths
US20040003214A1 (en) Instruction control method and processor
US6088790A (en) Using a table to track and locate the latest copy of an operand
WO2001061480A1 (en) Processor having replay architecture with fast and slow replay paths
KR102379886B1 (ko) 벡터 명령 처리
US11663014B2 (en) Speculatively executing instructions that follow a status updating instruction
CN117667477A (zh) 一种细粒度锁步容错的超标量乱序处理器设计方法及系统
WO2002054229A1 (en) Processor architecture for speculated values

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
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: 20130219

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20140203

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20150130

Year of fee payment: 11

LAPS Lapse due to unpaid annual fee