KR20160031503A - 마이크로프로세서에서의 선택적 리네이밍을 위한 방법 및 장치 - Google Patents

마이크로프로세서에서의 선택적 리네이밍을 위한 방법 및 장치 Download PDF

Info

Publication number
KR20160031503A
KR20160031503A KR1020167003105A KR20167003105A KR20160031503A KR 20160031503 A KR20160031503 A KR 20160031503A KR 1020167003105 A KR1020167003105 A KR 1020167003105A KR 20167003105 A KR20167003105 A KR 20167003105A KR 20160031503 A KR20160031503 A KR 20160031503A
Authority
KR
South Korea
Prior art keywords
instruction
register
physical register
architecture
processor
Prior art date
Application number
KR1020167003105A
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 KR20160031503A publication Critical patent/KR20160031503A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

아웃-오브-오더 프로세서로 하여금 사용중인 물리적 레지스터를 재사용하게 하기 위한 방법 및 장치가 본원에 개시된다. 방법 및 장치는 식별자들, 이를 테면, 토큰들 및/또는 RMT(rename map table) 및 PRF(physical register file)의 다른 식별자들을 사용하여, 명령 결과가 물리적 레지스터로 기록될 수 있는지 또는 기록될 수 없는지 여부를 나타낸다.

Description

마이크로프로세서에서의 선택적 리네이밍을 위한 방법 및 장치{METHOD AND APPARATUS FOR SELECTIVE RENAMING IN A MICROPROCESSOR}
[0001]본 특허 출원은, 2013년 7월 12일에 출원된 명칭이 Method and Apparatus for Selective Renaming in a Microprocessor인 가출원 제61/845,476호를 우선권으로 주장하고, 상기 출원의 양수인에게 양도되었고 이로써 본원에 인용에 의해 명시적으로 포함된다.
[0002]본 발명의 양상들은 전반적으로 프로세서들에 관한 것이며, 보다 구체적으로 마이크로프로세서에서의 선택적인 리네이밍에 관한 것이다.
[0003]레지스터 리네이밍은 프로세서 내 명령들의 스트림을 프로세싱할 경우 공통 프로세스이다. 예를 들어, 명령들이 명령 세트 아키텍처에 따라 아키텍처 레지스터들을 생성한다. 아키텍처 레지스터들은, 명령들의 결과들을 저장하는 물리적 레지스터들로 리네이밍된다.
[0004]RMT(rename map table)는 아키텍처 레지스터들을 물리적 레지스터들로 맵핑한다. 프로그램이 실행됨에 따라, 아키텍처 레지스터들이 계속해서 물리적 레지스터들로 맵핑되고, 결과들을 저장하기 위해 이용가능한 물리적 레지스터들의 수가 신속하게 대폭 감소된다. 따라서, 프로세서의 설계는, 명령에 의한 아키텍처 레지스터의 모든 각각의 신규 세대가, 결과물을 배치시키는 물리적 레지스터를 구비하는 것을 보장하기 위해서 많은 물리적 레지스터들을 제공해야 한다.
[0005]표준 솔루션은 고도로 복사되는(highly ported) 대규모 PRF(physical register file)를 구비하는 것이기 때문에 이것 자체로 문제가 될 수 있다. 고도로 복사된 PRF를 구비하는 것은 프로세서의 사이클 시간, 프로세서의 전력 소모뿐만 아니라 프로세서의 클락 속도, 즉, 프로세서가 얼마나 빠르게 또는 얼마나 느리게 실행되는지에 영향을 줄 수 있다.
[0006]이와 같이, PRF가 가능한 한 작을 수 있으므로, 레지스터 리네이밍을 위한 개선된 장치들 및 방법들이 바람직하다.
[0007]본 발명의 예시적인 구현들은, 머신에 의해 액세스될 경우, 머신으로 하여금 마이크로프로세서(및/또는 프로세서)에서의 선택적인 리네이밍을 위한 방법을 수행하게 하는, 시스템들, 방법들, 및 데이터를 포함하는 비일시적 컴퓨터 판독가능 저장 매체에 관한 것이다. 예를 들어, 하나 이상의 구현들에서, 프로세서를 동작시키는 방법은 제 1 프로듀서 명령을 획득함으로써 동작한다. 제 1 프로듀서 명령은 제 1 프로듀서 명령 결과를 포함한다. 제 1 프로듀서 명령은 또한 제 1 식별자를 포함한다. 제 1 식별자는 명령 시퀀스 식별자를 포함할 수 있다. 제 1 식별자는 토큰 카운트를 포함할 수 있다.
[0008]방법은 또한, 제 1 생산자 명령을 위한 아키텍처 레지스터의 제 1 세대를 생성함으로써 동작한다. 제 1 생산자 명령에 대한 아키텍처 레지스터의 제 1 세대를 생성하는 단계는 제 1 생산자 명령에 대한 아키텍처 레지스터의 제 1 세대에 대응하는 RMT(Rename Map Table)의 엔트리를 식별하는 단계를 포함한다.
[0009]방법은 추가로, 물리적 레지스터를 아키텍처 레지스터로 할당함으로써 동작한다. 물리적 레지스터를 아키텍처 레지스터로 할당하는 단계는 제 1 생산자 명령에 대한 아키텍처 레지스터의 제 1 세대와 연관되는 RMT(Rename Map Table)의 물리적 레지스터 엔트리를 식별하는 단계를 포함한다.
[0010]방법은 추가로, 제 2 생산자 명령을 획득하므로써 동작한다. 제 2 생산자 명령은 제 2 생산자 명령 결과 및 제 2 식별자를 포함한다. 제 2 식별자는 명령 시퀀스 식별자를 포함할 수 있다. 제 2 식별자는 토큰 카운트를 포함할 수 있다.
[0011]방법은 추가로, 아키텍처 레지스터의 제 2 세대를 생성하고 물리적 레지스터를 아키텍처 레지스터의 제 2 세대로 할당함으로써 동작한다.
[0012]방법은 추가로, 제 2 식별자가 제 1 식별자에 대응하는 경우, 제 2 생산자 명령 결과가 제 1 물리적 레지스터에 기록되게 함으로써 동작한다. 방법은 또한, 제 2 식별자가 제 1 식별자에 대응하지 않는 경우 제 2 생산자 명령 결과가 제 1 물리적 레지스터에 기록되지 않게 함으로써 동작한다.
[0013]하나 이상의 구현들에서, 방법은 추가로, 새로운 물리적 레지스터를 아키텍처 레지스터의 제 2 세대로 할당하고, 새로운 물리적 레지스터가 물리적 레지스터와 동일한 경우 물리적 레지스터를 자유롭게(freeing) 함으로써 동작한다.
[0014]프로세서는 아웃-오브-오더(out-of-order) 프로세서일 수 있다. 제 1 생산자 명령은 잠재적 파이프라인 플러시(flush) 명령일 수 있다. 일부 구현들에서, 아키텍처 레지스터는 명령 세트 아키텍처에 의해 정의된다.
[0015]하나 이상의 구현들에서, 방법은, 제 1 생산자 명령이 잠재적 파이프라인 플러시 명령이라는 것을 결정하고, 제 1 생산자 명령이 잠재적 파이프라인 플러시 명령이라는 결정에 응답하여 제 1 식별자 및 제 2 식별자를 리셋함으로써 동작한다.
[0016]하나 이상의 구현들은 적어도 하나의 아키텍처 레지스터와 적어도 하나의 명령 결과를 생성하기 위해 파이프라인 내 명령들을 프로세싱하도록 구성되는 프로세서를 포함한다. 프로세서는 RMT(rename map table)를 포함할 수 있다. RMT는, 적어도 하나의 아키텍처 레지스터를 적어도 하나의 물리적 레지스터로 각각 맵핑하는 적어도 하나의 엔트리를 포함할 수 있다. RMT의 적어도 하나의 엔트리는 RMT 식별자를 포함한다.
[0017]프로세서는 또한 PRF(physical register file)을 포함할 수 있다. PRF는 적어도 하나의 물리적 레지스터를 나타내는 적어도 하나의 엔트리를 포함할 수 있다. PRF의 적어도 하나의 엔트리는 PRF 식별자를 포함할 수 있다.
[0018]프로세서는, PRF 식별자가 RMT 식별자에 대응하는 경우, 명령 결과로 하여금 물리적 레지스터에 기록될 수 있게 하도록 구성되는 실행 모듈을 포함할 수 있다. 실행 모듈은 또한, PRF 식별자가 RMT 식별자에 대응하지 않는 경우 명령 결과가 물리적 레지스터에 기록되지 않게 할 수 있다.
[0019]대안적인 구현들에서, 프로세서를 동작시키는 방법은 프로세서 파이프라인으로부터 제 1 생산자 명령을 획득함으로써 동작한다. 제 1 생산자 명령은 제 1 생산자 명령 결과를 포함할 수 있다. 프로세서 파이프라인은 데이터 포워딩 네트워크를 포함할 수 있다. 프로세서를 동작시키는 방법은 추가로, 제 1 생산자 명령에 대한 아키텍처 레지스터의 제 1 세대를 생성하고 제 2 생산자 명령을 획득함으로써 동작한다. 제 2 생산자 명령은 제 2 생산자 명령 결과를 포함할 수 있다. 프로세서를 동작시키는 방법은 추가로, 아키텍처 레지스터의 제 2 세대를 생성하고, 물리적 레지스터를 아키텍처의 제 2 세대로 할당하고, 제 2 생산자 명령 결과가 물리적 레지스터에 기록되게 하고, 그리고 제 1 생산자 명령 결과가 데이터 포워딩 네트워크로부터 판독되게 함으로써 동작할 수 있다.
[0020]본 발명의 내용 섹션(Summary)이 청구항들의 범위 또는 의미를 해석하거나 또는 제한하기 위해 사용되지 않을 것이라는 것을 이해하면서 이를 제출한다. 본 발명의 내용 섹션은 청구된 주제물의 핵심적인 특징들 또는 본질적인 특징들을 식별하려고 의도되지 않으며, 청구된 요지의 범위를 결정하는 것을 돕기 위해 사용되는 것으로 의도되지도 않는다.
[0021]첨부된 도면들은 본원에 설명된 기술의 구현들의 설명을 돕기 위해 제시되며 오로지 구현들의 예시를 위해 제공될 뿐 이것으로 제한되지 않는다.
[0022]도 1은 하나 이상의 구현들에 따른 예시적인 프로세서의 블록도이다.
[0023]도 2는 하나 이상의 구현들에 따라 보다 상세한 도 1에 도시된 예시적인 프로세서의 다이어그램이다.
[0024]도 3은 일 구현에 따른 명령 리네임 스테이지에서, 프로세서에서 선택적인 리네이밍을 위한 방법론의 예시적인 흐름 다이어그램을 도시한다.
[0025]도 4는 일 구현에 따른 명령 완료 스테이지에서, 프로세서에서 선택적인 리네이밍을 위한 방법론의 예시적인 흐름 다이어그램을 도시한다.
[0026]도 5는 일 구현에 따른 명령 커밋(commit)/리타이어(retire) 스테이지에서, 프로세서에서 선택적인 리네이밍을 위한 방법론의 예시적인 흐름 다이어그램을 도시한다.
[0027]도 6은 대안적인 구현에 따른 데이터 포워딩 네트워크를 이용하여 프로세서에서 선택적인 리네이밍을 위한 방법론의 예시적인 흐름 다이어그램을 도시한다.
[0028]상세한 설명은 첨부된 도면들은 참고한다. 도면들에서, 도면 부호의 맨 왼쪽 자리(들)는 그 도면 부호가 처음 나타나는 도면을 식별한다. 동일한 번호들이 동일한 피쳐들과 컴포넌트들을 인용하기 위해 도면들 전체에 걸쳐 사용된다.
[0029]일반적으로, 본원에 개시된 청구물의 일 구현은, 프로세서의 사이클 시간, 프로세서의 파워 소모뿐만 아니라 프로세서의 클락 속도, 즉, 프로세서가 얼마나 빠르게 또는 느리게 실행되는지를 개선하기 위해서 아웃-오브-오더(out-of-order) 프로세서(및/또는 마이크로프로세서)에서의 선택적인 레지스터 리네이밍에 관한 것이다. 레지스터 리네이밍 시, 아키텍처 레지스터가 명령에 의해 처음으로 생성될 경우, 이는, 특정 프로세서에 대한 ISA(Instruction Set Architecture)에 기초하여, 상이한 네임, 즉, 물리적 레지스터 네임으로 리네이밍된다. 아키텍처 레지스터가 명령에 의해 두 번째로 생성될 경우, 아키텍처 레지스터의 제 2 세대는 통상적으로, 이전에 할당된 물리적 레지스터와 상이한 새로운 물리적 레지스터로 할당된다. 이러한 방식으로, 프로세서는 이제, 이전 물리적 레지스터에 대한 명령 결과의 생성 및 소비를 새로운 물리적 레지스터에 대한 명령 결과의 생성과 소비와 동시에, 또는 아웃-오브-오더로 실행할 수 있다. 이 프로세스는 프로세서 동작 속도를 높이는 경향이 있다.
[0030]RMT(rename map table)는 아키텍처 레지스터의 네임을 할당된 물리적 레지스터로 맵핑하므로, 명령들의 결과에 대한 생산자/소비자 쌍이 기록/판독을 위한 리네이밍된 물리적 레지스터를 보고 알게 된다. 아키텍처 레지스터의 제 2 세대에 새로운 물리적 레지스터가 할당되는 경우, RMT가 그에 따라 업데이트되므로, 제 2 생산자/소비자 쌍이 기록/판독을 위해 리네이밍된 물리적 레지스터를 보고 알게 된다.
[0031]이 리네이밍 프로세스에 존재하는 일 문제점은, 동일한 아키텍처 레지스터의 모든 각각의 세대에 상이한 물리적 레지스터가 할당된다는 것이다. 즉, 각각의 생산자/소비자 쌍에 상이한 물리적 레지스터가 할당된다. 그 결과, 프로세서가 신속하게 물리적 레지스터들을 다 써버리거나 또는 물리적 레지스터 파일(PRF)이 상당히 커진다.
[0032]본원에 설명된 하나 이상의 구현들에 따르면, 레지스터 리네이밍 물리적 레지스터들이 재사용되는 동안 PRF의 사이즈가 감소될 수 있다. 하나 이상의 구현들에서, PPF(potential pipeline flush) 명령들, 잠재적 복원 포인트들 등을 활용하여 물리적 레지스터 재사용이 성취된다. PPF 명령들은, 프로세서가 명령 페치 시간에 다음 명령이 어떤 명령이 될지를 추측하는 명령들이다.
[0033]조건 분기 명령은 PPF 명령의 예이다. 조건 분기 명령의 경우, 프로세서는, 명령이 실제로 실행될 때까지 분기가 일어나게 될지여부를 알지 못한다. 프로세서가 실제 실행 때까지 대기하는 것이 최적이 아니기 때문에, 예를 들어, 어느 분기가 궁극적으로 선택되고 분기 예측자에 의해 제공되는 타겟 어드레스로부터 명령들을 페칭할 것인지를 예측하거나 추측함으로써 프로세스의 속도를 높이기 위해 분기 예측자가 사용되는데, 명령이 완료되려면 많은 사이클들이 걸리기 때문이다.
[0034]분기 예측이 부정확했고 분기 예측에 응답하여 페칭된 명령들이 실행되지 않았어야 했다는 것으로 판명된 경우, 프로세서는, 예측들에 오류가 있었던 포인트로 그의 상태를 복원하려고 시도한다. 즉, 프로세서는, PPF 명령 이후에 아무것도 발생하지 않았던 것처럼 위장하려고 시도할 것이고, 프로세서는, 이것이 PPF 명령에 정확하게 있었던 것처럼 그의 상태를 재구성하려고 시도할 것이다.
[0035]PPF 명령의 다른 예는, TLB(translation lookaside buffer)의 미스(miss)를 겪고 페이지 오류를 유발시키고, 이후 정확한 트랜슬레이션을 TLB에 로딩할 수 있는 운영 시스템 코드로 전환하는 제어를 필요로 하는 메모리 동작(즉, 로드 또는 저장)이다.
[0036]본원에 설명된 하나 이상의 구현들에서, 파이프라인에 2개의 PPF 명령들이 존재하며, 이들 사이에 PPF 명령들이 없다. 이 경우, 프로세서 상태가 2개의 PPF 명령들 사이에 랜딩(land)해야 할 이유가 전혀 없을 것이다. 프로세서 상태는, 이것이 제 1 PPF 명령으로 복원할 필요가 있다면 제 1 PPF 명령에 랜딩할 것이고 또는 이것이 제 2 PPF 명령으로 복원할 필요가 있다면 제 2 PPF 명령에 랜딩할 것이다. 프로세서 상태는, 이를 테면, 아키텍처 레지스터가 처음으로 물리적 레지스터로 리네이밍되었던 포인트와 같이, 2개의 PPF 명령들 사이에 있는 임의의 포인트들로 복원할 필요가 없을 것이다.
[0037]추가적으로, 할당된 제 1 물리적 레지스터가 기록된 결과가 이미 소모되었다면, 이전 물리적 레지스터와는 상이한 새로운 물리적 레지스터를 보통 할당받게 될 아키텍처 레지스터의 다음 세대에 새로운 물리적 레지스터가 할당될 필요가 없다. 본원에 설명된 구현들에 따르면, 아키텍처 레지스터의 다음 세대는 이전 물리적 레지스터를 재사용할 수 있다. 즉, 아키텍처 레지스터의 이전 세대와 아키텍처 레지스터의 다음 세대 사이에 PPF 명령이 존재하지 않는다는 것을 아는 프로세서는, 이전 물리적 레지스터를, 발생하는 다음 생산자/소비자 쌍으로 할당할 수 있다.
[0038]2개의 PPF 명령들 사이에 발생하는 명령들에 의해 생성된 아키텍처 레지스터들의 다른 세대들에 마찬가지로 동일한 물리적 레지스터들이 할당된다는 것을 주목한다. 따라서, 다수의 명령들로부터의 아키텍처 레지스터의 다수의 세대들이 존재하는 경우, 각각의 아키텍처 레지스터에는, 다수의 아키텍처 레지스터들을 위한 다수의 물리적 레지스터들을 할당하는 것 대신에 동일한 물리적 레지스터가 할당될 수 있다. 이는, 본원에 설명된 구현들이 PRF의 사이즈가 감소되게 하는 메커니즘이다. 본원에 설명된 구현들은 또한 프로세서 전력을 절약하고 프로세서 클록 주파수를 개선시키는 식이다.
[0039]이러한 개념을 예시하자면, 일 시나리오에서, 제 1 생산자 명령은, 제 1 물리적 레지스터에 아키텍처 레지스터의 제 1 세대가 할당되었음을, RMT에서 찾음으로써 알게 된다. 제 1 생산자 명령은, 이와 같이, 그의 결과를 제 1 할당된 물리적 레지스터로 기록한다는 것을 알게 된다. 유사하게, 제 1 소비자 명령은, 제 1 할당된 물리적 레지스터로부터 제 1 생산자 명령들의 결과를 판독한다는 것을 RMT에서 찾음으로써 알게 된다. 제 1 소비자가 판독할 결과가 제 1 할당된 물리적 레지스터에 이미 기록되었다면, 제 1 소비자는 단지 제 1 생산자에 의해 제 1 할당된 물리적 레지스터에 기록되었던 결과를 판독할 뿐이다. 제 1 할당된 물리적 레지스터에 기록되었던 제 1 생산자 결과의 제 1 소비자가 그의 과제를 완료하고 따라서 제 1 생산자에 의해 제 1 할당된 물리적 레지스터로 기록되었던 결과는 더 이상 필요하지 않게 된다.
[0040]제 1 아키텍처 레지스터의 제 2 세대가 발생할 경우, 제 1 아키텍처 레지스터의 제 2 세대는, 제 1 생산자의 결과에 대해 다른 소비자들이 없다는 것을 보증받게 된다. 더욱이, 제 1 할당된 물리적 레지스터의 결과가 이미 소모되었기 때문에, 제 1 아키텍처 레지스터의 추후 세대들 모두가 그들의 결과를 판독할 제 2 할당된 물리적 레지스터를 찾을 것이다. 재차, 제 1 생산자에 의해 제 1 할당된 물리적 레지스터로 기록되었던 결과가 더 이상 필요하지 않게 된다.
[0041]대안적인 시나리오에서, 결과의 제 1 생산자는, 제 1 물리적 레지스터가 제 1 아키텍처 레지스터로 할당되었다는 것을 RMT에서 찾음으로써 알게 된다. 결과의 제 1 생산자는 이와 같이, 이것이 결과를 제 1 할당된 물리적 레지스터로 기록하게 된다는 것을 알게 된다. 마찬가지로, 결과의 제 1 소비자는, 이것이 제 1 할당된 물리적 레지스터로부터 결과를 판독하게 된다는 것을 RMT에서 찾음으로써 알게 된다. 그러나, 결과의 제 1 생산자가 아직 완료되지 않았기 때문에 제 1 소비자가 판독하게 될 결과가 제 1 할당된 물리적 레지스터로 이미 기록되었다면, 결과의 제 1 소비자는 제 1 할당된 물리적 레지스터에서 이용가능하게 될 제 1 생산자로부터의 결과를 대기할 수 있다. 그러나, 다른 것들 중에서도 대기하는 것은 프로세서가 느려지게 한다.
[0042]본원에 설명된 하나 이상의 구현들에서, 결과의 제 1 소비자가 그의 결과를 제 1 할당된 물리적 레지스터로 기록하기 위해 결과의 제 1 생산자를 대기하게 하는 것 대신에, 결과의 제 1 소비자가 프로세서 내 포워딩 네트워크로부터 직접적으로 결과를 획득한다. 즉, 결과의 제 1 소비자가 제 1 할당된 물리적 레지스터로부터 결과를 판독할 필요가 없다. 대신, 결과가 제 1 할당된 물리적 레지스터로 기록되기 전에 결과의 제 1 소비자가 프로세서의 포워딩 네트워크의 포워딩 경로들 중 하나로부터 결과를 획득힌다.
[0043]이와 같이, 제 1 아키텍처 레지스터의 제 2 세대가 발생한 경우, 제 1 소비자가 제 1 아키텍처 레지스터의 제 1 세대를 위해 저장된 제 1 할당된 물리적 레지스터를 필요로 하지 않는 결과가 되는데, 제 1 아키텍처 레지스터의 제 2 세대가 발생했을 때까지 제 1 소비자가 제 1 할당된 물리적 레지스터에 저장되는 결과를 이미 판독했거나(제 1 시나리오) 또는 제 1 소비자가 포워딩 네트워크로부터 결과를 이미 획득했기 때문이다(제 2 시나리오). 따라서, 제 1 할당된 물리적 레지스터가 이제 제 1 아키텍처 레지스터의 제 2 세대에 의한 재사용을 위해 자유롭다. 이러한 방식으로, 제 1 아키텍처 레지스터의 제 2 세대에는 제 1 아키텍처 레지스터의 제 1 세대가 할당되었던 동일한 물리적 레지스터 네임이 할당된다. 즉, 제 1 할당된 물리적 레지스터의 네임이 제 1 아키텍처 레지스터의 제 2 세대를 위해 재사용된다.
예시적인 RMT (Rename Map Table) 및 물리적 레지스터 파일 PRF
[0044]도 1은 본원에 설명된 하나 이상의 구현들에 따른 예시적인 프로세서(100)의 블록도를 도시한다. 도시된 프로세서(100)는 명령 파이프라인 내 명령들의 실행 동안 선택적인 레지스터 리네이밍을 사용하는 아웃-오브-오더 프로세서이다. 예시된 프로세서(100)와 같은 종래의 프로세서는, 데이터 캐시로부터 데이터를 그리고 명령 캐시로부터 명령들을 수신하는 파이프라인을 포함한다는 것이 알려진다. 제어기는 통상적으로, 명령들을 디코딩하고 실행하기 위해서 파이프라인 내부의 다양한 스테이지들과 실행 유닛들(이를 테면, 페치 스테이지, 디코드 스테이지 등)을 제어한다. 실행된 명령들로부터의 결과들은 이들이 완료된 경우 레지스터 파일, 데이터 캐시, 및 다른 버퍼들 또는 메모리 유닛들에 저장될 수 있다.
[0045]예시된 프로세서(100)는, 아키텍처 레지스터 네임들로부터 물리적 레지스터 네임들로 레지스터 네임들을 변경하는 선택적인 레지스터 리네이밍 메커니즘을 포함한다. 이는, RAW(read-after-write) 데이터 해저드들(hazards) 및 WAW(write-after-write) 데이터 해저드들과 같은 프로세서 성능-약화(performance-sapping) 데이터 해저드들을 제거하기 위해 완료될 수 있다.
[0046]예시된 레지스터 리네이밍 메커니즘은 리네임 맵 테이블(RMT)(102)을 포함한다. 하나 이상의 구현들에서, RMT(102)는, 아키텍처 레지스터들을 프로세서 내 물리적 레지스터들로 맵핑하는 임의의 적절한 메커니즘이다. RMT(102)는, 토큰들, 토큰 카운트들, 시퀀스 식별자들 등과 같은 식별자들을 동적으로 업데이트하는 것을 비롯하여, 아키텍처 레지스터들의 새로운 맵핑들을 물리적 레지스터들에 반영하기 위해 동적으로 업데이트될 수 있다.
[0047]예를 들어, 명령이 결과를 물리적 레지스터에 기록하는 것인 경우, 명령 결과에 대한 배분된 또는 할당된 물리적 레지스터 위치가 RMT(102)에 레코딩된다. 명령이 물리적 레지스터로부터 결과를 판독하는 것인 경우, 명령 결과가 기록되게 될, 배분되거나 할당된 물리적 레지스터 위치를 결정하기 위해 RMT(102)가 참고된다. 아키텍처 레지스터들이 프로세서(100) 내의 실제 물리적 위치들이 아니라는 것을 주목한다. 대신, 아키텍처 레지스터들은 특정 프로세서를 위한 ISA에 따른 프로세서의 명령들에 의해 생성된 레지스터들의 네임들이다.
[0048]예시된 레지스터 리네이밍 메커니즘이 PRF(물리적 레지스터 파일)(104)를 포함한다. 하나 이상의 구현들에서, PRF는 프로세서(100) 하드웨어에서 구현되는 물리적 레지스터들을 포함한 파일이다. 물리적 레지스터들은, 이미 커밋된(committed) 명령들의 결과들뿐만 아니라 아직 커밋되지 않은 후속 명령들의 결과들을 홀딩(hold)한다. 통상적으로, 아키텍처 레지스터들보다 더 많은 물리적 레지스터들이 존재한다.
[0049]예시된 RMT(102)는 아키텍처 레지스터 컬럼(106)과 물리적 레지스터 네임(PRN)을 포함한다. 아키텍처 레지스터 컬럼(106)은 물리적 엔티티가 아니다. 대신에, 아키텍처 레지스터 컬럼은 PRN 컬럼(108) 내 대응하는 엔트리에 액세스하기 위해 사용된 인덱스를 나타낼 뿐이다. PRN 컬럼(108)은 아키텍처 레지스터의 네임에 의해 인덱싱된다.
[0050]PRN 컬럼(108)은, 통상적으로 아키텍처 레지스터들보다 더 많은 물리적 레지스터들이 존재하더라도 물리적 레지스터들(P1-P5)을 포함한다. 아키텍처 레지스터들(R1-R5)는 이 예에서 물리적 레지스터들(P1-P5)로 리네이밍된다. 하나 이상의 구현들에서, 토큰들 및/또는 명령 시퀀스 ID들(예를 들어, Re-Order Buffer ID, Matrix ID 등)을 이용하여 아키텍처 레지스터는 이미 사용중인 물리적 레지스터를 재사용할 수 있다.
[0051]예를 들어, 예시된 RMT(102)는 토큰 컬럼(110)을 포함한다. 예시된 실시예에서, 구현들에 따르면 토큰들은 1비트, 2비트, 10비트 등과 같이 임의의 수의 비트들일 수 있지만, 토큰 컬럼(110)의 토큰들은 3비트 길이이다.
[0052]예시된 PRF(104)는 물리적 레지스터 컬럼(112)을 포함한다. 통상적으로 더 많은 물리적 레지스터들이 존재하지만, 물리적 레지스터 컬럼(112)은 물리적 레지스터들(P1-P5)을 포함한다.
[0053]예시된 PRF(104)는 물리적 레지스터의 네임으로 인덱싱된 물리적 레지스터 스테이터스 컬럼(114)을 포함한다. 물리적 레지스터 스테이터스 컬럼(114)은, 특정 물리적 레지스터가 자유 상태(free)인지 또는 사용 중(in use)인지 여부를 나타낸다. 예를 들어, 예시된 예에서, 물리적 레지스터 스테이터스 컬럼(114)은, 물리적 레지스터 P2가 <사용 중>이고 모든 다른 물리적 레지스터들이 <자유 상태>라는 것을 나타낸다. <사용 중> 지정은, 물리적 레지스터가 아키텍처 레지스터로 할당되었고 생성 명령이 그의 결과를 할당된 물리적 레지스터로 기록하는 것이라는 것을 나타낸다. 구현들에 따르면, <사용 중>인 물리적 레지스터들은 아키텍처 레지스터의 다른 생성에 의해 재사용될 수 있다. <자유 상태> 지정은, 물리적 레지스터가 아키텍처 레지스터로 할당되지 않았다는 것과 생성 명령에는 그 물리적 레지스터가 할당될 수 있다는 것을 나타낸다. 구현들에 따르면, <사용 중>에 있는 물리적 레지스터들은 아키텍처 레지스터의 다른 생성에 의해 재사용될 수 있다.
[0054]예시된 PRF(104)는 토큰 컬럼(116)을 포함한다. 예시된 실시예에서, 구현들에 따르면 토큰들은 1비트, 2비트, 10비트 등과 같이 임의의 수의 비트들일 수 있지만, 토큰 컬럼(116)의 토큰들은 3비트 길이이다. 토큰 컬럼(116) 내 물리적 레지스터 P2를 위한 토큰은 또한 그의 최하위 비트가 "1"로 설정된다.
[0055]도 1에 도시된 예에서, 화살표(120)는, 아키텍처 레지스터 R5가 물리적 레지스터 P2로 리네이밍(또는 맵핑)되었다는 것을 나타내고, 화살표(122)는, 물리적 레지스터 P2를 위한 토큰이 그의 최하위 비트가 "1"로 설정된다는 것을 나타낸다.
[0056]예시된 프로세서(100)는 데이터 포워딩 메커니즘(124)을 포함한다. 예시된 데이터 포워딩 메커니즘(124)은 데이터-의존 명령들로 하여금 연속 사이클에서 실행되게 한다. 예를 들어, 데이터-포워딩 메커니즘(124)은, 데이터가, PRF를 건너 뛰고 프로세서(100) 내 기능 유닛들 사이에서 직접 전송될 수 있게 한다.
예시적인 선택적 레지스터 리네이밍 장치
[0057]구현들에 따른 상기 논의로부터 상기해 볼 때, 제 1 아키텍처 레지스터의 제 2 세대에는, 제 1 아키텍처 레지스터의 제 1 세대가 할당되었던 동일한 물리적 레지스터가 할당된다. 통상적으로, 그러나, 아키텍처 레지스터의 제 1 세대의 제 1 생산자는, 제 1 할당된 물리적 레지스터가 또한 아키텍처 레지스터의 제 2 세대로 할당되었다는 것을 알지 못한다. 본원에 설명된 하나 이상의 구현들에 따르면, 예시된 프로세서(100)는, 생산자 명령이 그의 결과를 특정 물리적 레지스터로 기록할 수 있게 되는 상황들이 무엇인지 하에서 그리고 소비자 명령이 특정 물리적 레지스터로부터 결과를 판독할 수 있게 되는 상황들이 무엇이지 하에서 결정한다.
[0058]도 2는, 생산자 명령이 그의 결과를 특정 물리적 레지스터로 기록할 수 있게 되는 어떤 상황들과 소비자 명령이 특정 물리적 레지스터로부터 결과를 판독할 수 있게 되는 어떤 상황들 하에서 프로세서가 결정하는 본원에 설명된 하나 이상의 구현들에 따른 프로세서(100)의 블록도를 도시한다.
[0059]도시된 프로세서(100)는, RMT(102:102A, 102B, 102C 및 102D)의 몇 가지 버전들을 포함한다. 예시된 프로세서(100)는 또한 PRF(104: 104A, 104B, 104C 및 104D)의 몇 가지 버전들을 포함한다. PRF들은, 일단 생산자 명령이 그의 실행에 따라 완료되면 결과들이 기록되는 물리적 레지스터 파일들이다.
[0060]RMT의 각각의 버전(102A, 102B, 102C 및 102D)은 개별적인 아키텍처 레지스터 컬럼(106A, 106B, 106C 및 106D)를 포함한다.
[0061]RMT의 각각의 버전(102A, 102B, 102C 및 102D)은 개별적인 PRN 컬럼들(108A, 108B, 108C 및 108D)을 포함한다. PRN 컬럼들(108A, 108B, 108C 및 108D)은 아키텍처 레지스터 R4, R5 및 R6의 네임으로 인덱싱된다. 아키텍처 레지스터 컬럼은 물리적인 엔티티가 아니라, PRN 컬럼들(108A, 108B, 108C 및 108D)의 해당 엔트리에 액세스하기 위해 사용된 인덱스를 나타낸다. 예시적인 구현에서, 3개의 아키텍처 레지스터들이 도시되며 3개의 물리적 레지스터들이 도시된다. 통상적으로, 그러나, 아키텍처 레지스터들보다 더 많은 물리적 레지스터들이 있다.
[0062]RMT의 각각의 버전(102A, 102B, 102C 및 102D)이 개별 토큰 컬럼들(110A, 110B, 110C 및 110D)에 추가된다. 토큰 컬럼들(110A, 110B, 110C 및 110D)은, 생산자가 결과를 물리적 레지스터에 기록하도록 허용되는지 여부를 결정하기 위해 사용되는 비트들을 포함한다.
[0063]예시된 실시예에서, 본원에 설명된 다른 구현들에 따르면 토큰들이 3비트, 2비트, 10비트 등과 같이 임의의 수의 비트들일 수 있지만, 토큰 컬럼들(110A, 110B, 110C 및 110D)의 토큰들은 1비트 길이이다. 예를 들어, 토큰당 비트들의 수는 분기 명령들과 같이 2개의 PPF 명령들, 2개의 잠재적인 복원 포인트들 등 사이에서 발생할 것으로 예상되는 아키텍처 레지스터 생산물들(productions)의 수에 의존할 수 있다. 일부 예들에서, 평균적으로, 2개의 PPF들 사이에서 주어진 아키텍처 레지스터의 4개 이하의 리네임들이 예상된다면 토큰당 2개의 비트들이 충분할 수 있다. 본원에 설명된 하나 이상의 구현들에서, 모든 토큰 카운트들이 "0"에서 시작한다.
[0064]RMT의 각각의 버전(102A, 102B, 102C 및 102D)은 개별적인 물리적 레지스터 컬럼들(112A, 112B, 112C 및 112D)을 포함한다. 예시된 물리적 레지스터 컬럼들(112A, 112B, 112C, 및 112D)는 3개의 물리적 레지스터들(P1-P3)을 포함한다. 그러나, 통상적으로 더 많은 물리적 레지스터들이 존재한다.
[0065]RMT의 각각의 버전(102A, 102B, 102C 및 102D)은 개별적인 물리적 레지스터 스테이터스 컬럼들(114A, 114B, 114C 및 114D)을 포함한다. 물리적 레지스터 스테이터스 컬럼들(114A, 114B, 114C, 및 114D)은 물리적 레지스터들(P1, P2 및 P3)의 네임에 의해 인덱싱된다. 물리적 레지스터 스테이터스 컬럼들(114A, 114B, 114C, 및 114D)은, 특정 물리적 레지스터가 자유 상태인지 또는 사용 중인지 여부를 나타낸다.
[0066]RMT의 각각의 버전(102A, 102B, 102C 및 102D)은 개별적인 토큰 컬럼들(116A, 116B, 116C 및 116D)을 포함한다. 토큰 컬럼들(116A, 116B, 116C 및 116D)는 생산자가 결과를 물리적 레지스터에 기록하도록 허용되는지 여부를 결정하기 위해 사용되는 비트들을 포함한다.
[0067]도 2에 도시된 프로세서(100)는 프로그램 순서로 명령들(210)의 스트림을 페치하고 임의의 순서로 명령들을 실행한다. 예시된 구현에서, 프로세서(100)는 명령들(210A, 210B, 210C, 210D, 210E, 및 210F)을 프로세싱하고 있다. 예시된 실시예에서, 명령들(210B 및 210D)은 명령 스트림(210) 내 물리적 레지스터 P2 안으로 포인팅되는 화살표들에 의해 나타내어진 것과 같은 생산자 명령들이다. 명령들(210C 및 210E)은 물리적 레지스터 P2 밖으로 포인팅되는 화살표로 나타내어진 것과 같은 소비자 명령들이다.
[0068]도 2에 도시된 예에서, 명령(210B) 및 명령(210C)은 물리적 레지스터 P2에 의해 링크되는 생산자/소비자 명령 쌍을 구성한다. 프로세서(100)는 따라서, 소비자 명령(210C)이 물리적 레지스터 P2의 결과를 소비하기 전에 생산자 명령(210B)이 그의 결과를 물리적 레지스터 P2로 기록하는 것을 완료했음을 확인하기 위해서 대기한다. 유사하게, 명령들(210D 및 210E)은, 생산자/소비자 명령 쌍의 결과가 물리적 레지스터 P2에 의해 링크되는 다른 생산자/소비자 명령 쌍을 구성한다. 생산자/소비자 쌍(210B/210C)과 마찬가지로, 프로세서(100)는, 소비자 명령(210E)이 물리적 레지스터 P2의 결과를 소비하기 전에 생산자 명령(210D)이 그의 결과를 물리적 레지스터 P2로 기록하는 것을 완료했음을 확인하기 위해서 대기한다.
[0069]또한, 도 2에 도시된 예에서, 명령들(210A 및 210F)은 PPF 명령들, 프로세서(100)가 추측하고 있는(speculating) 잠재적인 복원 포인트들 등이다. 명령(210A) 및 명령(210F)이 PPF 명령들이더라도, 명령(210A)과 명령(210F) 사이에 PPF 명령이 존재하지 않는다. 따라서, 프로세서(100) 상태가 PPF 명령(210A)과 PPF 명령(210F) 사이에 랜딩하게 될 이유가 없게 된다. 최악의 시나리오에서, 프로세서 (100) 상태는, 상태가 PPF 명령(210A)으로 복원할 필요가 있다면 PPF 명령(210A)에 랜딩할 것이고 또는 상태가 PPF 명령(210F)으로 복원할 필요가 있다면 PPF 명령(210F)에 랜딩할 것이지만, 프로세서(100)는, 명령들(210B, 210C, 210D 또는 210E)로 복원하지 않을 것이다.
[0070]도시된 구현에서, 포인트(202)에서, 아키텍처 레지스터 R5(컬럼 106A)에는 물리적 레지스터 P1(컬럼 108A)이 할당되고 그의 연관된 토큰 카운트는 "0"(컬럼 110A)이다. 또한, 포인트(202)에서, 물리적 레지스터 P2(컬럼 112A)은 <자유 상태>(컬럼 114A)인 것으로 나타내어지고 그의 연관된 토큰 카운트는 "0"(컬럼 116A)이다.
[0071]RMT(102) 토큰 카운트들은 PPF 명령(포인트 202)을 조우할 때 "0"으로 리셋된다. 따라서, PPF 명령인 명령(210A)이 리네이밍되고 있을 경우, RMT(102A)의 토큰 카운트들 모두가 "0"으로 리셋된다. PRF(104A)의 토큰 카운트들은 변경되지 않는다. 도 2에서 PRF(104A)의 토큰 카운트들이 모두 "0"이 되는 것으로 도시되었지만, 이는 예시의 목적일 뿐이다. <자유 상태>인 것으로 나타내어지는 물리적 레지스터 P2 만이 그의 토큰을 "0"으로 셋팅할 필요가 있다.
[0072]아키텍처 레지스터 R5를 생성하는 제 1 생산자 명령이 포인트(204)에서 조우될 경우, RMT(102A) 내 아키텍처 레지스터 R5와 연관된 토큰이 체크된다. RMT(102A)의 토큰이 "0"이기 때문에 아키텍처 레지스터 R5를 생성하는 제 1 명령에는, 도 2에 예시된 예에서 물리적 레지스터 P2인 자유 상태 물리적 레지스터가 할당된다. 물리적 레지스터 P2는 또한 아키텍처 레지스터 R5에 대한 새로운 네임으로서 RMT(102B)으로 입력된다. RMT(102A)의 아키텍처 레지스터 R5와 연관된 토큰이 "1"로 증분되고 아키텍처 레지스터 R5를 생성하는 제 1 명령은 토큰=1을 다운시켜 프로세서(100) 파이프라인으로 전달한다. PRF(104A)의 물리적 레지스터 P2와 연관된 토큰이 마찬가지로 증분되어 물리적 레지스터 P2를 위한 PRF(104B)의 토큰 카운트=1이 된다. 이를 염두에 두면서, 3가지 시나리오들을 고려한다.
[0073]제 1 시나리오에서, 아키텍처 레지스터 R5를 생성하는 제 1 생산자 명령이 제 1 소비자 명령이 도달하기 전에 완료된다. 이 시나리오에서, "1"인 제 1 생산자의 토큰이 마찬가지로 "1"인 물리적 레지스터 P2와 연관된 토큰에 대응하고 그리고/또는 이 토큰과 일치하기 때문에, 제 1 생산자 명령이 물리적 레지스터 P2에 기록될 수 있게 된다.
[0074]제 2 시나리오에서, 제 1 생산자 명령이 완료되기 전에 제 1 소비자 명령이 도달한다. 이 시나리오에서, 소비자 명령은 프로세서(100) 파이프라인에서 결과를 직접적으로 추적하고 데이터 바이패스를 경유하여 결과를 획득할 수 있다. 생산자 명령은 여전히, 그의 생산물을 물리적 레지스터 P2에 기록할 수 있지만, 물리적 레지스터 P2에 기록된 결과가 사용되지 않는다.
[0075]제 3 시나리오에서, 제 2 생산자 명령은 포인트(206)에서 아키텍처 레지스터 R5의 제 2 세대를 생성한다. 제 2 생산자 명령의 결과가, 제 1 생산자 명령이 완료되기 전에 도달한다. 이 시나리오에서, 아키텍처 레지스터 R5와 연관된 토큰 카운트가 "0"보다 큰 경우, 새로운 물리적 레지스터가 할당되지 않고, 아키텍처 레지스터 R5를 위한 RMT(102)의 맵 엔트리는 물리적 레지스터 P2에 계속 남아있게 된다. 그러나, RMT(102)의 아키텍처 레지스터 R5와 연관된 토큰 카운트가 (예를 들어, "2"로) 증분된다. 물리적 레지스터 P2와 연관된 토큰 카운트가 또한 (예를 들어, "2"로) 증분된다. 제 2 생산자 명령은 "2"의 토큰 카운트를 다운시켜 프로세서(100) 파이프라인으로 전달한다. 제 1 생산자 명령이 추후에 (제 2 생산자 명령 전이나 후에) 임의의 포인트에서 완료되는 경우, 제 1 생산자 명령은, "1"인 그의 토큰이 더 이상 "2"인 물리적 레지스터 P2와 연관된 토큰에 대응하지 않고 그리고/또는 이 토큰과 일치하지 않기 때문에 물리적 레지스터 P2로 기록하도록 허용되지 않을 것이다.
[0076]PPF 명령(210F)이 포인트(208)에서 조우되는 경우, RMT(102C) 토큰 카운트가 RMT(102D)에 나타내어진 바와 같이 "0"으로 리셋되는 반면, PRF(104C) 토큰 카운트들이 PRF(104D)에 나타내어진 바와 같이 변경되지 않은 상태로 남아있게 된다.
[0077]제 1 생산자 명령이 커밋되는 경우, 아키텍처 레지스터 R5의 이전 맵핑이 체크된다. 물리적 레지스터 P1인 이전 맵핑이 물리적 레지스터 P2인 현재 맵핑과 상이하기 때문에, 아키텍처 레지스터 R5의 이전 맵핑이 재사용을 위해 자유 상태가 된다. 즉, 물리적 레지스터 P2가 사용을 위해 자유 상태가 된다. 이외에도, 물리적 레지스터 P2의 이전 맵핑과 연관된 토큰 카운트가 컬럼(116A)에 나타내어진 바와 같이 "0"으로 리셋된다.
[0078]제 2 생산자 명령이 커밋되는 경우, 아키텍처 레지스터 R5의 이전 맵핑이 체크된다. 아키텍처 레지스터 R5의 이전 맵핑(즉, 물리적 레지스터 P2)이 현재 맵핑(즉, 물리적 레지스터 P2)과 동일하기 때문에, 아키텍처 레지스터 R5, 즉, 물리적 레지스터 P2의 이전 매핑이 자유 상태가 되지 않는다.
명령 리네임 스테이지에서 예시적인 토큰-기반 선택적 레지스터 리네이밍 방법
[0079]도 3은 일 구현에 따른 명령 리네임 시에 프로세서 내 선택적 리네이밍을 위한 방법(300)의 예시적인 흐름도를 도시한다.
[0080]블록(302)에서, 방법(300)은 명령을 획득한다. 획득된 명령은 아키텍처 레지스터를 생성한다. 하나 이상의 구현들에서, 명령은 생산자 명령이다. 일 예에서, 프로세서(100) 내 페치 유닛(미도시)은 명령 파이프라인으로부터 명령들을 페치하고 디코딩한다. 도 2로 돌아가면, 프로세서(100)는 파이프라인으로부터 명령들(210A)을 획득한다.
[0081]블록(304)에서, 방법(300)은, 획득된 명령이 PPF 명령인지 여부를 결정한다. 블록(304)에서, 획득된 명령이 PPF 명령이라는 것이 결정되는 경우, 방법(300)의 제어가 블록(306)으로 전달된다. 반면에, 블록(304)에서, 획득된 명령이 PPF 명령이 아니라는 것이 결정되는 경우, 방법(300)의 제어가 블록(308)으로 전달된다.
[0082]블록(306)에서, 방법(300)은 RMT(102A)의 모든 토큰 카운트들을 "0"으로 리셋한다. RMT(102A)의 토큰 카운트들 모두를 "0"으로 리셋하는 것은, 이 세대와 모든 새로운 생산물들을 위한 새로운 리네임들을 선택하도록 방법(300)을 강제한다. 도 2에 도시된 예를 염두에 두면, 명령(210A)은 PPF 명령이고 포인트(202)에서 컬럼(110A)의 토큰 카운트들이 "0"으로 리셋된다.
[0083]블록(308), 방법(300)은 획득된 명령의 아키텍처 레지스터에 대응하는 RMT(102A)의 엔트리를 식별한다. 도 2에 도시된 예를 염두에 두면, 방법(300)은 명령(210A)에 대응하는 것으로 RMT(102A)의 컬럼(106A)의 아키텍처 레지스터 R5 엔트리를 식별한다.
[0084]블록(310)에서, 방법(300)은 명령의 아키텍처 레지스터에 대한 RMT(102A)에서의 맵핑 시 물리적 레지스터와 토큰 카운트를 식별한다. 도 2에 도시된 예를 염두에 두면, 방법(300)은 RMT(102A)의 컬럼(108A)의 물리적 레지스터 P1과 RMT(102A)의 컬럼(110A)의 토큰 카운트 "0"을 식별하며, 이는 RMT(102A)의 아키텍처 레지스터 R5에 대응한다.
[0085]블록(312)에서, 방법(300)은 명령의 아키텍처 레지스터에 대해 토큰 카운트="0"인지 여부를 결정한다. 명령의 아키텍처 레지스터에 대해 토큰 카운트="0"인 경우, 방법(300)의 제어는 블록(314)로 전달된다.
[0086]도 2에 도시된 예를 염두에 두면, 방법(300)은 RMT(102A)의 컬럼(110A)의 토큰="0"이라는 것을 결정하고 방법(300)의 제어가 블록(314)로 전달된다.
[0087]블록(314)에서, 방법(300)은, 새로운 현재 미사용 중인 물리적 레지스터를 PRF(104) 컬럼(112A)로부터 명령으로 할당하고, 새로운 현재 미사용 중인 물리적 레지스터를 리네이밍하고, RMT(102A)의 포지션에서 물리적 레지스터를 리네이밍된 물리적 레지스터로 변경한다. 하나 이상의 구현들에서, 방법(300)은 통상적으로 프리 리스트(free list)를 참고함으로써 새로운 네임, 즉, 자유 상태의 물리적 레지스터를 선택한다. 예를 들어, 방법(300)은 아키텍처 레지스터에 대한 RMT(102A) 엔트리를 리네이밍된 물리적 레지스터로 업데이트한다.
[0088]도 2에 도시된 예를 염두에 두면, 방법(300)은 물리적 레지스터 P2를 선택하고, 미사용 중인 (<자유 상태>) 물리적 레지스터 P2(컬럼 114A)를 명령(210A)으로 할당하고, 새로운 미사용 중인 물리적 레지스터 P2를 리네이밍하고, 물리적 레지스터 P1(RMT(102A)의 컬럼 108A)를 P2(RMT(102B)의 컬럼 108B)로 변경한다.
[0089]블록(316)에서, 방법(300)은 아키텍처 레지스터를 위한 RMT(102A) 포지션의 토큰 카운트를 "1"로 셋팅하고 리네이밍된 물리적 레지스터 포지션에 대한 PRF(104A) 포지션의 토큰 카운트를 "1"로 셋팅한다. 예를 들어, 방법(300)은 아키텍처 레지스터에 대한 RMT(102A)의 토큰 카운트를 "1"씩 증분시킨다.
[0090]도 2에 예시된 예를 염두에 두고, 방법(300)은 아키텍처 레지스터 R5 및 물리적 레지스터 P2에 대한 RMT(102A)의 컬럼(110A)의 토큰 카운트를 "1"로 셋팅하고 컬럼(116A)의 물리적 레지스터 P2를 위한 토큰 카운트를 "1"로 셋팅한다. 이는, 포인트(204)에서, 아키텍처 레지스터 R5 및 물리적 레지스터 P2에 대한 RMT(102B)의 컬럼(110B)의 토큰 카운트가 "1"이 되게 하고, PRF(104B)의 컬럼(116B)의 물리적 레지스터 P2에 대한 토큰 카운트가 "1"이 되게 한다.
[0091]블록(318)에서, 방법(300)은, 획득된 명령이 물리적 레지스터, 새롭게 할당된 물리적 레지스터를 기억하고, 그의 토큰 카운트="1"이라는 것을 보장한다.
[0092]도 2에 도시된 예를 염두에 두고, 방법(300)은, 명령(210A)이 물리적 레지스터 P2를 기억하고 컬럼(110B) 내 토큰 카운트가 "1"의 결과를 갖는다는 것을 보장한다. 하나 이상의 구현들에서, 아키텍처 레지스터 R5(예를 들어, 명령(210C))의 추후의 생산자들은, R5에 대한 RMT(102B)의 토큰이 "1"이라는 것을 발견하고 새로운 물리적 레지스터를 획득하려고 시도하지 않는다. 대신에, 추후의 생산자들이 그들의 목적지와 동일한 물리적 레지스터(즉, P2)를 사용한다.
[0093]그러나, 장래의 생산자들이 컬럼(110B)의 토큰 카운트를, PRF(104B)의 컬럼(116B)의 대응하는 물리적 레지스터 P2와 RMT(102B)에서 "1"씩 증분시킨다. 도 2에 도시된 예를 염두에 두면, 방법(300)이 명령(210C)을 획득할 경우 컬럼(110B)의 토큰이 "1" 내지 "2"씩 증분된다(컬럼 110C 및 컬럼 116C).
[0094]반면에, 방법(300)은, 블록 312에서, 명령의 아키텍처 레지스터에 대해 토큰 카운트≠0이라는 것을 결정하면, 방법(300)의 제어가 블록(320)으로 전달된다.
[0095]도 2에 도시된 예를 염두에 두면, 포인트(204)에서, 물리적 레지스터 P2(컬럼 112B)는 <사용 중>인 것으로 나타내어지고(컬럼 114B) 그리고 그의 연관된 토큰 카운트는 "1"이다(컬럼 116B). 이와 같이, 포인트(204)에서, 획득된 명령이 명령(210B)인 경우, 토큰 카운트는 "0"이 아니다. 토큰 카운트는 "1"이다.
[0096]블록(320)에서, 방법(300)은 PRF로부터 새로운 물리적 레지스터를 아키텍처 레지스터에 대한 명령에 할당하지 않는다. 리네이밍된 물리적 레지스터는 이것이 리네이밍되지 않았던 경우의 그것과 동일한 상태로 남아 있게 된다.
[0097]도 2에 도시된 예를 염두에 두면, 아키텍처 레지스터 R5에 대한 RMT(102B)의 컬럼(110B)의 토큰 카운트는 "1"이고 컬럼(116B)의 물리적 레지스터 P2에 대한 토큰 카운트는 "1"이다. 이와 같이, 방법(300)은 새로운 물리적 레지스터를 명령을 위한 아키텍처 레지스터 R5로 할당하지 않는다. 컬럼(108B)의 레지스터 P2는 P2인 채로 남아 있는다.
[0098]블록(322)에서, 방법(300)은 아키텍처 레지스터에 대한 RMT 포지션에서의 토큰 카운트를 "T+1"로 증분시킨다. 방법(300)은 또한, 새로운 사용 중인 물리적 레지스터에 대한 PRF 포지션에서의 토큰 카운트를 "T+1"로 증분시킨다.
[0099]도 2에 도시된 예를 염두에 두면, 아키텍처 레지스터 R5에 대한 RMT(102B) 포지션에서의 토큰 카운트가 "T+1"로 증분된다. P2에 대한 PRF(104C) 포지션에서의 토큰 카운트는 또한 "T+1"로 증분된다. 이는, 포인트(206)에서, 아키텍처 레지스터 R5 및 물리적 레지스터 P2에 대한 RMT(102C)의 컬럼(110C)의 토큰 카운트가 "2"가 되게 하고, PRF(104C)의 컬럼(116C)의 물리적 레지스터 P2에 대한 토큰 카운트가 "2"가 되게 한다.
[00100]블록(324)에서, 방법(300)은, 명령이, 이전 물리적 레지스터가 또한 새로운 물리적 레지스터이고, 명령에 대한 토큰이 "T+1"이라는 것을 기억한다는 것을 보장한다. 도 2에 도시된 예를 염두에 두면, 명령(210D)은, 물리적 레지스터 P2는 여전히 네임 P2를 갖고 컬럼(110C)의 토큰이 "2"의 결과를 갖는다는 것을 기억한다.
[00101]이 점에서, 획득된 명령이 도 2에 도시된 리네이밍 아키텍처에 의한 재사용을 위해 자유 상태가 되어 파이프라인에 진입하고 실행된다.
[00102]그 동안에, 아키텍처 레지스터 R5의 제 2 세대가 존재하는 경우, 예시를 위해서 아키텍처 레지스터 R5의 스테이터스가 현재 리네이밍된 물리적 레지스터 P2이고 물리적 레지스터 P2에 대한 토큰이 0이 아니라는 것(예를 들어, P2의 토큰="1")을 가정한다. 물리적 레지스터 P2가 이미 R5의 제 1 세대를 위해 사용되었더라도, 물리적 레지스터 P5가 R5의 제 2 세대를 위해 재사용된다. 새로운 물리적 레지스터를 R5의 제 2 세대로 할당하는 대신, 리네이밍 아키텍처가 물리적 레지스터 P2를 재사용하고 그의 토큰 카운트를 "1"에서 "2"로 증분시킨다. 리네이밍 아키텍처는 또한 PRF(104)의 토큰 카운트를 "1"에서 "2"로 증분시킨다.
[00103]물리적 레지스터 P2를 위한 토큰 카운트가 "2"이고 PRF를 위한 토큰 카운트가 "2"라는 것은 추가로, 제 1 생산자가 이 포인트에서 종료한다는 것을 가정한다. 제 1 생산자가 그의 생산물 결과를 물리적 레지스터 P2로 기록하려고 시도할 경우, 제 1 생산자는, 물리적 레지스터 P2의 토큰 카운트가 "2"이고 제 1 생산자의 토큰 카운트가 "1"이라는 것을 발견하게 된다. 이러한 상황들 하에서, 제 1 생산자는, 토큰 카운트들이 일치하지 않기 때문에 물리적 레지스터 P2에 그의 결과를 기록할 수 없게 된다.
명령 완료 스테이지에서의 예시적인 토큰-기반 선택적 레지스터 리네이밍 방법
[00104]도 4는 일 구현에 따른 명령 완료 시에 프로세서에서 선택적 리네이밍을 위한 방법(400)의 예시적인 흐름도를 도시한다. 본원에 사용된 바와 같이, 명령 완료 시각은 명령이 페치되었고 실행되지만 그의 결과가 아직 할당된 물리적 레지스터에 기록되지 않은 시기이다.
[00105]블록(402)에서, 방법(400)은 명령을 획득한다. 도 2에 도시된 예를 염두에 두면서, 방법(400)은 아키텍처 레지스터 R5의 제 2 세대를 생성하는 명령을 획득한다. 아키텍처 레지스터 R5의 제 2 세대를 생성하는 명령은 그의 토큰 카운트가 "1"이라는 것을 기억한다.
[00106]블록(404)에서, 방법(400)은, 획득된 명령에 의해 기억된 토큰 카운트가 할당된 물리적 레지스터와 현재 연관되는 PRF의 토큰에 대응하는 그리고/또는 이 토큰과 일치하는지 여부를 결정한다. 블록(404)에서, 방법(400)은, 획득된 명령에 의해 기억된 토큰 카운트가, 할당된 물리적 레지스터와 현재 연관되는 PRF의 토큰에 대응하고 그리고/또는 이 토큰과 일치한다는 것을 결정하면, 명령(400)의 제어가 블록(406)으로 전달된다. 도 2에 예시된 예를 염두에 두면, 방법(400)은, "1"의 명령의 토큰 카운트가, 할당된 물리적 레지스터 P2와 현재 연관되는 PRF 컬럼(116B)에 있는 "1"의 토큰 카운트에 대응하고 그리고/또는 이 토큰 카운트와 일치하는지 여부를 결정한다.
[00107]블록(406)에서, "1"의 명령의 토큰 카운트가 할당된 물리적 레지스터 P2와 현재 연관되는 PRF 컬럼(116B)에 있는 "1"의 토큰 카운트에 대응하고 그리고/또는 이 토큰 카운트와 일치하기 때문에, 방법(400)은 그의 결과를 PRF(104)의 할당된 물리적 레지스터 P2로 기록하기 위해 아키텍처 레지스터 R5의 제 2 세대를 생산하는 명령을 허락하고 그리고/또는 허용한다.
[00108]반면에, 블록(404)에서, 방법(400)이, 획득된 명령에 의해 기억된 토큰 카운트가, 할당된 물리적 레지스터와 현재 연관되는 PRF(104)의 토큰에 대응하지 않고 그리고/또는 이 토큰과 일치하지 않음을 결정하는 경우, 방법(400)의 제어가 블록(408)으로 전달된다.
[00109]도 2에 예시된 예를 염두에 두면, 방법(400)은, "1"의 명령의 토큰 카운트가, 물리적 레지스터 P2와 현재 연관되는 PRF 컬럼(116C)에 있는 "2"의 토큰 카운트에 대응하고 그리고/또는 이 토큰 카운트와 일치하는지 여부를 결정한다. 이와 같이, 블록(408)에서, 토큰 카운트가 일치하지 않기 때문에, 아키텍처 레지스터 R5의 제 2 세대를 생성하는 명령이 그의 결과를 물리적 레지스터 P2로 기록할 수 없게 된다.
명령 커밋 / 리타이어 스테이지에서 예시적인 토큰-기반 선택적 레지스터 리네 이밍 방법
[00110]도 5는 일 구현에 따른 명령 커밋/리타이어 시간에 프로세서 내 선택적인 리네이밍을 위한 방법(500)의 예시적인 흐름도를 도시한다. 본원에 사용된 바와 같이, 명령 커밋/리타이어 시간은 명령이 페칭되고 실행되어 그의 결과가 할당된 물리적 레지스터로 기록되었던 시기이고, 아키텍처 레지스터로 이전에 할당되었던 물리적 레지스터는 자유 상태가 된다.
[00111]블록(502)에서, 방법(500)은 명령들을 획득한다. 하나 이상의 구현들에서, 획득된 명령은 물리적 레지스터가 할당되는 아키텍처 레지스터 R5의 다른 세대를 생성한다.
[00112]블록(504)에서, 방법(500)은, 할당된 물리적 레지스터의 네임이 새롭게 할당된 물리적 레지스터와 상이한지 여부를 결정한다. 예를 들어, 할당된 물리적 레지스터의 네임이 P2이고 새롭게 할당된 물리적 레지스터의 네임이 P2와는 상이한 P3인 경우, 블록(506)에서, 방법(500)은, 물리적 레지스터 P2로 할당되는 PRF(104)의 엔트리가 자유 상태가 되게 하고 물리적 레지스터 P2를 위한 PRF(104)의 토큰 카운트를 "0"으로 리셋한다. 하나 이상의 구현들에서, 알려진 기술들을 이용하여 PRF(104)의 엔트리들이 자유 상태가 된다. 물리적 레지스터 P2가 자유 상태가 될 경우 물리적 레지스터를 위한 토큰 카운트가 "0"으로 리셋된다(칼럼 110D).
[00113]반면에, 방법(500)이, 할당된 물리적 레지스터의 네임이 새롭게 할당된 물리적 레지스터와 상이하지 않다는 것을 결정하는 경우, 블록(508)에서, 물리적 레지스터가 자유 상태가 되지 않는다.
예시적인 명령 시퀀스 ID-기반 선택적 레지스터 리네이밍 방법
[00114]일부 대안적인 구현들에서, 아키텍처 레지스터의 특정 세대를 특정 물리적 레지스터로 고유하게 결합시키는 토큰들을 이용하는 대신에, 명령 시퀀스 ID(예를 들어, Re-Order Buffer ID, Matrix ID 등)와 같은 임의의 다른 고유 식별자를 이용하는 것 또한 가능하다. 이 구현에서, RMT(102)는 엔트리당 하나의 비트를 지닐 것인데, 이는 연관된 아키텍처 레지스터가 최종 PPF 명령 이후에 리네이밍되었는지 여부를 나타낸다. PPF 명령은 이러한 비트들을 "0"으로 리셋하고, "0"은, 새로운 리네임이 생산물에 할당될 것이라는 것을 나타낸다. 새로운 리네임이 아키텍처 레지스터를 위해 할당되면, 대응하는 비트가 "1"로 세팅된다. 비트는, 다음 PPF 명령까지 "1"인 상태로 남아 있고 이 "1"은, 새로운 리네임이 이 아키텍처 레지스터로 할당될 필요가 없다는 것을 나타낸다.
[00115]대안적인 구현에서, PPF(104)는, 토큰 대신에, 물리적 레지스터마다 하나의 명령 시퀀스 식별자(ID)를 홀딩한다. 모든 각각의 생산자 명령은 (이것이 새롭게 할당된 물리적 레지스터든지 또는 아니든지) 그의 시퀀스 ID를 할당된 물리적 레지스터로 전송한다. 생산자 명령은 (종래대로) 그의 명령 시퀀스 ID를 그의 페이로드에 지닌다. 완료 시, 생산자 명령의 명령 시퀀스 ID가 물리적 레지스터의 명령 시퀀스 ID에 대응하고 그리고/또는 그 명령 시퀀스 ID와 일치하는 경우 생산자 명령은 결과를 그의 할당된 물리적 레지스터에 기록한다. 명령 커밋 시에, 이전 리네임이 현재 리네임과 상이하다면 이전 리네임이 재사용을 위해 자유 상태가 된다. 물리적 레지스터가 재사용을 위해 자유 상태가 될 때마다, 물리적 레지스터와 연관된 명령 시퀀스 ID가 일부 식별가능하게 무효한 또는 최초 상태(이를 테면, "0")로 리셋된다.
데이터 포워딩 네트워크를 이용한 예시적인 선택적 레지스터 리네이밍 방법
[00116]현대적 프로세서 하드웨어에서, 통상적으로, 하드웨어가 동시(즉, 동일한 클락 사이클로)에 프로그램-순서-연속적 명령들의 그룹에 대해 가시성을 갖는 프로세서 파이프라인의 프런트 엔드에 파이프라인 스테이지들이 존재한다. 이것이 발생할 경우, 토큰들 및/또는 명령 시퀀스 ID들과 같은 RMT 토큰들 또는 PRF 식별자들을 사용하지 않고 본원에 사용된 바와 같은 선택적 레지스터 리네이밍의 이점을 택하는 것이 가능하다.
[00117]예를 들어, 프로그램-순서 명령의 그룹 내 2개의 명령들이 동일한 아키텍처 레지스터를 생성하고 이러한 2개의 명령들 사이에 PPF 명령들이 없다면, 2개의 프로그램-순서-연속적 명령들 중 더 오래된 명령에는 그의 생산물 결과를 홀딩하기 위한 물리적 레지스터 네임이 할당될 필요가 없다. 대신, 2개의 프로그램-순서-연속적 명령들 중 더 오래된 명령의 모든 소비자들이 데이터 포워딩 네트워크를 통해 생산물 결과를 획득한다.
[00118]더 오래된 생산자 결과의 소비자들 모두는 동일한 클락 사이클에서 식별될 수 있는데, 동일한 클락 사이클에서 관찰되는 제 2 생산물 결과가 존재하기 때문이라는 것을 주목한다. 즉, 제 1 생산물 결과의 임의의 소비자들은 제 1 생산물 결과와 제 2 생산물 결과 사이에 존재해야 한다. 따라서, 그 결과의 더 오래된 생산자뿐만 아니라 소비자는 물리적 레지스터 네임을 다 사용해버릴 필요가 없다. 이 구현은, 전체 선택적인 레네이밍을 위해 사용되는 추가 하드웨어(이를 테면, 토큰들 및 토큰 관리)를, 파이프라인 스테이지에서 동시에 볼 수 있는 명령들에 걸쳐 사용하기 위해서 절충시킨다(trade off).
[00119]도 6은 대안적인 구현에 따른 데이터 포워딩 네트워크(바이패스 네트워크)를 이용하여 프로세서에서 선택적 리네이밍하기 위한 방법론의 예시적인 흐름도를 도시한다.
[00120]블록(602)에서, 방법(600)은 프로세서 파이프라인으로부터 제 1 명령을 획득한다. 하나 이상의 구현들에서, 명령은 생산자 명령이다. 명령이 도 2에 도시된 선택적 리네이밍 구조로 복귀할 때, 프로세서(100)는 명령 파이프라인(210)으로부터 명령(210A)을 획득한다.
[00121]블록(604), 방법(600)은 제 1 생산자 명령을 위한 아키텍처 레지스터의 제 1 세대를 생성한다. 제 1 아키텍처 레지스터는 특정 프로세서에 대한 ISA에 따라 생성될 수 있다. 도 2로 돌아가면, 명령(210A)은 아키텍처 레지스터 R5를 생성한다.
[00122]블록(606)에서, 방법(600)은 프로세서 파이프라인으로부터 제 2 생산자 명령을 획득한다. 도 2로 돌아가면, 프로세서(100)는 파이프라인으로부터 명령(210B)을 획득한다.
[00123]블록(608)에서, 방법(600)은 특정 프로세서에 대한 ISA에 따른 아키텍처 레지스터의 제 2 세대를 생성한다. 도 2로 돌아가면, 프로세서(100)는 아키텍처 레지스터 R5를 생성한다.
[00124]블록(610)에서, 방법(600)은 물리적 레지스터를 아키텍처 레지스터의 제 2 세대로 할당한다. 도 2로 돌아가면, 프로세서(100)는 물리적 레지스터 P2를 명령(210B)으로 할당한다.
[00125]블록(612)에서, 방법(600)은, 제 2 생산자 명령 결과가, 할당된 물리적 레지스터에 기록되게 한다. 도 2로 돌아가면, 프로세서(100)는 명령(210B)으로 하여금 그의 결과를 물리적 레지스터 P2에 기록하게 한다.
[00126]블록(614)에서, 방법(600)은 제 1 생산자 명령 결과가 데이터 포워딩 네트워크로부터 판독될 수 있게 한다. 도 1 및 도 2로 돌아가면, 프로세서(100)는 명령(210B) 결과가 데이터 포워딩 메커니즘(124)을 이용하여 포워딩 네트워크로부터 판독되게 한다.
[00127]다양한 방법들의 단계들 및 결정들이 본 개시물에 연속적으로 설명되었지만, 이러한 단계들과 결정들 중 일부는 함께 또는 동시에, 비동기식으로 또는 동기식으로, 파이프라인 방식으로 또는 이와 다른 방식으로 별개의 엘리먼트들에 의해 수행될 수 있다. 명시적으로 나타내어지거나, 맥락으로부터 명확하게 다르게 이루어지거나, 또는 본질적으로 요구되는 경우를 제외하고, 본 설명이 단계들과 결정들을 나열하는 것과 동일한 순서로 방법들과 결정들이 수행된다는 특정한 요건이 없다. 그러나, 선택된 변형들에서 단계들 및 결정들은 상술된 순서로 수행되지 않는다는 것을 주목해야 한다. 더욱이, 모든 예시된 단계 및 결정이 본 발명에 따른 모든 실시예/변형예에서 필요로 되지 않을 수 있는 한편, 구체적으로 나타내어지지 않았던 일부 단계들 및 결정들은 본 발명에 따른 일부 실시예들/변형예들에서 바람직하거나 또는 필수적일 수 있다.
[00128]당업자들은 정보 및 신호들이 다양한 상이한 기술들 및 기법들 중 임의의 것을 이용하여 표현될 수 있다는 것을 이해할 것이다. 예를 들어, 위의 설명 전체에 걸쳐 참조될 수 있는 데이터, 명령들, 커맨드들, 정보, 신호들, 비트들, 심볼들, 및 칩들은 전압들, 전류들, 전자기파들, 자기장들 또는 자기 입자들, 광 필드들 또는 광 입자들, 또는 이들의 임의의 결합으로 표현될 수 있다.
[00129]추가로, 당업자들은 본원에 개시된 실시예들과 관련하여 설명되는 다양한 예시적인 논리 블록들, 모듈들, 회로들 및 알고리즘 단계들이 전자 하드웨어, 컴퓨터 소프트웨어 또는 이 둘의 결합들로서 구현될 수 있다는 것을 인식할 것이다. 하드웨어와 소프트웨어의 이러한 상호 교환가능성을 명확하게 설명하기 위해, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들 및 단계들이 일반적으로 이들의 기능적 관점에서 위에서 설명되었다. 이러한 기능이 하드웨어로 구현되는지, 또는 소프트웨어로 구현되는지, 또는 하드웨어와 소프트웨어의 결합으로 구현되는 지 여부는 전체 시스템 상에 부과되는 설계 제약들 및 특정 애플리케이션에 의존한다. 당업자들은 설명된 기능을 각각의 특정한 애플리케이션에 대해 다양한 방식들로 구현할 수 있지만, 이러한 구현 결정들은 본 개시의 범위를 벗어나게 하는 것으로 해석되어서는 안 된다.
[00130]본원에 개시된 양상들과 관련하여 설명된 다양한 예시적 논리 블록들, 모듈들 및 회로들이, 범용 프로세서, DSP(digital signal processor), ASIC(application specific integrated circuit), FPGA(field programmable gate array) 또는 다른 프로그래머블 로직 디바이스, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트들, 또는 (본원에 설명된 기능들을 수행하도록 설계된) 이들의 임의의 결합으로 구현 또는 수행될 수 있다. 범용 프로세서는 마이크로프로세서일 수 있지만, 대안적으로, 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수 있다. 프로세서는 또한, 컴퓨팅 디바이스들의 결합, 예를 들어, DSP 및 마이크로프로세서의 결합, 복수의 마이크로프로세서들, DSP 코어와 결합된 하나 또는 둘 이상의 마이크로프로세서들, 또는 임의의 다른 이러한 구성으로서 구현될 수 있다.
[00131]본원에 개시된 실시예들과 관련하여 설명된 방법의 단계들 또는 알고리즘은 직접적으로 하드웨어로, 프로세서에 의해 실행되는 소프트웨어 모듈로, 또는 이 둘의 결합으로 구현될 수 있다. 소프트웨어 모듈은 RAM 메모리, 플래시 메모리, ROM 메모리, EPROM 메모리, EEPROM 메모리, 레지스터들, 하드디스크, 이동식(removable) 디스크, CD-ROM, 또는 당해 기술 분야에 공지된 임의의 다른 형태의 저장 매체에 상주할 수 있다. 예시적인 저장 매체는, 프로세서가 저장 매체로부터 정보를 판독하고, 저장 매체에 정보를 기록할 수 있도록 프로세서에 커플링된다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 프로세서 및 저장 매체는 ASIC에 상주할 수 있다. ASIC는 액세스 단말에 상주할 수 있다. 대안적으로, 프로세서 및 저장 매체는 액세스 단말 내에 개별 컴포넌트들로서 상주할 수 있다.
[00132]개시된 실시예들의 앞의 설명은 어떤 당업자라도 본 발명을 실시하거나 사용할 수 있도록 제공된다. 이러한 실시예들의 다양한 변경들은 당업자에게 쉽게 자명할 것이고 본원에 정의된 일반 원리들이 본 발명의 정신 또는 범위로부터 벗어나지 않고 다른 실시예들에 적용될 수 있다. 따라서, 본 발명이 본원에 나타내어진 실시예들로 제한되는 것으로 의도되지 않으며, 본원에 개시된 원리들 및 신규한 특징들과 부합하는 최광의 범위를 따른다.

Claims (30)

  1. 프로세서를 동작시키는 방법으로서,
    제 1 생산자 명령을 획득하는 단계 ―상기 제 1 생산자 명령은 제 1 생산자 명령 결과를 포함하고, 상기 제 1 생산자 명령은 제 1 식별자를 포함함―;
    상기 제 1 생산자 명령을 위한 아키텍처 레지스터의 제 1 세대를 생성하는 단계;
    물리적 레지스터를 상기 아키텍처 레지스터로 할당하는 단계;
    제 2 생산자 명령을 획득하는 단계 ―상기 제 2 생산자 명령은 제 2 생산자명령 결과를 포함하고, 상기 제 2 생산자 명령은 제 2 식별자를 포함함―;
    상기 아키텍처 레지스터의 제 2 세대를 생성하는 단계;
    상기 물리적 레지스터를 상기 아키텍처 레지스터의 상기 제 2 세대로 할당하는 단계;
    상기 제 2 생산자 명령 결과가 상기 제 1 물리적 레지스터에 기록되게 하는 단계; 및
    상기 제 2 생산자 명령 결과가 상기 제 1 물리적 레지스터에 기록되지 않게 하는 단계를 포함하는, 프로세서를 동작시키는 방법.
  2. 제 1 항에 있어서,
    새로운 물리적 레지스터를 상기 아키텍처 레지스터의 상기 제 2 세대로 할당하는 단계; 및
    상기 새로운 물리적 레지스터가 상기 물리적 레지스터와 동일하지 않은 경우 상기 물리적 레지스터를 자유롭게 하는(freeing) 단계를 더 포함하는, 프로세서를 동작시키는 방법.
  3. 제 1 항에 있어서,
    상기 제 1 생산자 명령을 위한 상기 아키텍처 레지스터의 상기 제 1 세대를 생성하는 단계는 상기 제 1 생산자 명령에 대한 상기 아키텍처 레지스터의 상기 제 1 세대에 대응하는 RMT(Rename Map Table)의 엔트리를 식별하는 단계를 포함하는, 프로세서를 동작시키는 방법.
  4. 제 3 항에 있어서,
    상기 물리적 레지스터를 상기 아키텍처 레지스터를 할당하는 단계는 상기 제 1 생산자 명령에 대한 상기 아키텍처 레지스터의 상기 제 1 세대와 연관되는 RMT(Rename Map Table)의 물리적 레지스터 엔트리를 식별하는 단계를 포함하는, 프로세서를 동작시키는 방법.
  5. 제 1 항에 있어서,
    명령이 잠재적 파이프라인 플러시(flush) 명령이라는 것을 결정하는 단계; 및
    상기 명령이 잠재적 파이프라인 플러시 명령이라는 결정에 응답하여 상기 명령에서 식별자들을 리셋하는 단계를 더 포함하는, 프로세서를 동작시키는 방법.
  6. 제 1 항에 있어서,
    상기 제 1 식별자는 명령 시퀀스 식별자를 포함하는, 프로세서를 동작시키는 방법.
  7. 제 1 항에 있어서,
    상기 제 2 식별자는 명령 시퀀스 식별자를 포함하는, 프로세서를 동작시키는 방법.
  8. 제 1 항에 있어서,
    상기 제 1 식별자는 토큰 카운트를 포함하는, 프로세서를 동작시키는 방법.
  9. 제 1 항에 있어서,
    상기 제 2 식별자는 토큰 카운트를 포함하는, 프로세서를 동작시키는 방법.
  10. 제 1 항에 있어서,
    상기 프로세서는 아웃-오브-오더 프로세서인, 프로세서를 동작시키는 방법.
  11. 제 5 항에 있어서,
    상기 제 1 명령은 잠재적 파이프라인 플러시 명령인, 프로세서를 동작시키는 방법.
  12. 제 1 항에 있어서,
    상기 아키텍처 레지스터의 상기 제 1 세대 및 상기 제 2 세대는 명령 세트 아키텍처에 의해 정의되는, 프로세서를 동작시키는 방법.
  13. 프로세서를 동작시키는 방법으로서,
    프로세서 파이프라인으로부터 제 1 생산자 명령을 획득하는 단계 ―상기 제 1 생산자 명령은 제 1 생산자 명령 결과를 포함하고, 상기 프로세서 파이프라인은 데이터 포워딩 네트워크를 포함함―;
    상기 제 1 생산자 명령을 위한 아키텍처 레지스터의 제 1 세대를 생성하는 단계;
    제 2 생산자 명령을 획득하는 단계 ―상기 제 2 생산자 명령은 제 2 생산자명령 결과를 포함함―;
    상기 아키텍처 레지스터의 제 2 세대를 생성하는 단계;
    상기 물리적 레지스터를 상기 아키텍처 레지스터의 상기 제 2 세대로 할당하는 단계;
    상기 제 2 생산자 명령 결과가 상기 제 1 물리적 레지스터에 기록되게 하는 단계; 및
    상기 제 1 생산자 명령 결과가 상기 데이터 포워딩 네트워크로부터 판독되게 하는 단계를 포함하는, 프로세서를 동작시키는 방법.
  14. 제 13 항에 있어서,
    상기 프로세서는 아웃-오브-오더 프로세서인, 프로세서를 동작시키는 방법.
  15. 제 13 항에 있어서,
    상기 아키텍처 레지스터의 상기 제 1 세대 및 상기 제 2 세대는 명령 세트 아키텍처에 의해 정의되는, 프로세서를 동작시키는 방법.
  16. 적어도 하나의 아키텍처 레지스터 및 적어도 하나의 식별자와 연관되는 적어도 하나의 명령 결과를 생성하기 위해 파이프라인 내 명령들을 프로세싱하도록 구성되는 프로세서로서,
    적어도 하나의 아키텍처 레지스터를 적어도 하나의 물리적 레지스터로 각각 맵핑하는 적어도 하나의 엔트리를 포함하는 RMT(rename map table) ―상기 PRF의 상기 적어도 하나의 엔트리는 PRF 식별자와 연관됨―;
    상기 적어도 하나의 물리적 레지스터를 나타내는 적어도 하나의 엔트리를 포함하는 PRF(physical register file) ―상기 PRF 내 상기 적어도 하나의 엔트리는 PRF 식별자를 포함함―; 및
    실행 모듈을 포함하고,
    상기 실행 모듈은,
    상기 PRF 식별자가 상기 명령 결과 식별자에 대응하는 경우 상기 명령 결과가 상기 물리적 레지스터에 기록되게 하고; 그리고
    상기 PRF 식별자는 상기 RMT 식별자에 대응하지 않는 경우 상기 명령 결과가 상기 물리적 레지스터에 기록되지 않게 하는 하도록 구성되는, 프로세서.
  17. 제 16 항에 있어서,
    상기 명령 결과 식별자 및 상기 PFR 식별자들은 토큰 카운트를 포함하는, 프로세서.
  18. 제 16 항에 있어서,
    상기 명령 결과 식별자 및 상기 PFF 식별자들은 명령 시퀀스 식별자를 포함하는, 프로세서.
  19. 제 16 항에 있어서,
    상기 프로세서는 아웃-오브-오더 프로세서인, 프로세서.
  20. 제 16 항에 있어서,
    상기 PRF는, 상기 적어도 하나의 물리적 레지스터가 자유 상태(free)인지 또는 사용중(in use)인지 여부의 표시를 포함하는, 프로세서.
  21. 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체로서,
    상기 데이터는 머신에 의해 액세스될 경우, 상기 머신으로 하여금,
    프로세서 파이프라인으로부터 제 1 생산자 명령을 획득하는 것 ―상기 제 1 생상자 명령은 제 1 생산자 명령 결과를 포함하고, 그리고 상기 프로세서 파이프라인은 데이터 포워딩 네트워크를 포함함―;
    상기 제 1 생산자 명령에 대한 아키텍처 레지스터의 제 1 세대를 생성하는 것;
    제 2 생산자 명령을 획득하는 것 ―상기 제 2 생산자 명령은 제 2 생산자명령 결과를 포함함―;
    상기 아키텍처 레지스터의 제 2 세대를 생성하는 것;
    상기 물리적 레지스터를 상기 아키텍처 레지스터의 상기 제 2 세대로 할당하는 것;
    상기 제 2 생산자 명령 결과가 상기 제 1 물리적 레지스터에 기록되게 하는 것; 및
    상기 제 1 생산자 명령 결과가 상기 데이터 포워딩 네트워크로부터 판독되게 하는 것을
    포함하는 동작들을 수행하게 하는, 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체.
  22. 제 21 항에 있어서,
    상기 머신에 의해 액세스될 경우, 상기 머신으로 하여금,
    새로운 물리적 레지스터를 상기 아키텍처 레지스터의 상기 제 2 세대로 할당하게 하는 것; 및
    상기 새로운 물리적 레지스터가 상기 물리적 레지스터와 동일하지 않은 경우 상기 물리적 레지스터를 자유롭게 하는 것
    의 동작들을 수행하게 하는 데이터를 더 포함하는, 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체.
  23. 제 21 항에 있어서,
    상기 제 1 생산자 명령에 대한 상기 아키텍처 레지스터의 상기 제 1 세대를 생성하는 것은 상기 제 1 생산자 명령에 대한 상기 아키텍처 레지스터의 상기 제 1 세대에 대응하는 RMT(Rename Map Table)의 엔트리를 식별하는 단계를 포함하는, 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체.
  24. 제 23 항에 있어서,
    상기 물리적 레지스터를 상기 아키텍처 레지스터에 할당하는 것은 상기 제 1 생산자 명령에 대한 상기 아키텍처 레지스터의 상기 제 1 세대와 연관되는 RMT(Rename Map Table)의 물리적 레지스터 엔트리를 식별하는 단계를 포함하는, 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체.
  25. 제 21 항에 있어서,
    상기 머신에 의해 액세스될 경우, 상기 머신으로 하여금,
    상기 제 1 생산자 명령이 잠재적인 파이프라인 플러쉬 명령임을 결정하는 동작들을 수행하게 하는 데이터를 더 포함하는, 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체.
  26. 제 21 항에 있어서,
    상기 제 1 식별자는 명령 시퀀스 식별자를 포함하는, 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체.
  27. 제 21 항에 있어서,
    상기 제 2 식별자는 명령 시퀀스 식별자를 포함하는, 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체.
  28. 제 21 항에 있어서,
    상기 제 1 식별자는 토큰 카운트를 포함하는, 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체.
  29. 제 21 항에 있어서,
    상기 제 2 식별자는 토큰 카운트를 포함하는, 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체.
  30. 제 21 항에 있어서,
    상기 프로세서는 아웃-오브-오더 프로세서인, 데이터를 포함하는 비일시적 컴퓨터-판독가능 저장 매체.
KR1020167003105A 2013-07-12 2014-07-11 마이크로프로세서에서의 선택적 리네이밍을 위한 방법 및 장치 KR20160031503A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361845476P 2013-07-12 2013-07-12
US61/845,476 2013-07-12
US14/091,340 2013-11-27
US14/091,340 US9471325B2 (en) 2013-07-12 2013-11-27 Method and apparatus for selective renaming in a microprocessor
PCT/US2014/046297 WO2015006659A1 (en) 2013-07-12 2014-07-11 Method and apparatus for selective renaming in a microprocessor

Publications (1)

Publication Number Publication Date
KR20160031503A true KR20160031503A (ko) 2016-03-22

Family

ID=52278112

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167003105A KR20160031503A (ko) 2013-07-12 2014-07-11 마이크로프로세서에서의 선택적 리네이밍을 위한 방법 및 장치

Country Status (6)

Country Link
US (1) US9471325B2 (ko)
EP (1) EP3019953A1 (ko)
JP (1) JP2016526745A (ko)
KR (1) KR20160031503A (ko)
CN (1) CN105359089B (ko)
WO (1) WO2015006659A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160232006A1 (en) * 2015-02-09 2016-08-11 Qualcomm Incorporated Fan out of result of explicit data graph execution instruction
US11429393B2 (en) * 2015-11-11 2022-08-30 Arm Limited Apparatus and method for supporting out-of-order program execution of instructions
US10963261B2 (en) 2017-04-18 2021-03-30 International Business Machines Corporation Sharing snapshots across save requests
US11010192B2 (en) 2017-04-18 2021-05-18 International Business Machines Corporation Register restoration using recovery buffers
US10838733B2 (en) 2017-04-18 2020-11-17 International Business Machines Corporation Register context restoration based on rename register recovery
US10740108B2 (en) 2017-04-18 2020-08-11 International Business Machines Corporation Management of store queue based on restoration operation
US10649785B2 (en) 2017-04-18 2020-05-12 International Business Machines Corporation Tracking changes to memory via check and recovery
US10545766B2 (en) 2017-04-18 2020-01-28 International Business Machines Corporation Register restoration using transactional memory register snapshots
US10782979B2 (en) 2017-04-18 2020-09-22 International Business Machines Corporation Restoring saved architected registers and suppressing verification of registers to be restored
US10572265B2 (en) 2017-04-18 2020-02-25 International Business Machines Corporation Selecting register restoration or register reloading
US10877768B1 (en) * 2019-09-06 2020-12-29 Microsoft Technology Licensing, Llc Minimizing traversal of a processor reorder buffer (ROB) for register rename map table (RMT) state recovery for interrupted instruction recovery in a processor
US11061677B1 (en) 2020-05-29 2021-07-13 Microsoft Technology Licensing, Llc Recovering register mapping state of a flushed instruction employing a snapshot of another register mapping state and traversing reorder buffer (ROB) entries in a processor
CN114356420B (zh) * 2021-12-28 2023-02-17 海光信息技术股份有限公司 指令流水线的处理方法及装置、电子装置及存储介质

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61253544A (ja) * 1985-05-07 1986-11-11 Hitachi Ltd 情報処理装置
US5197132A (en) * 1990-06-29 1993-03-23 Digital Equipment Corporation Register mapping system having a log containing sequential listing of registers that were changed in preceding cycles for precise post-branch recovery
US5694564A (en) * 1993-01-04 1997-12-02 Motorola, Inc. Data processing system a method for performing register renaming having back-up capability
WO1995032466A1 (en) * 1994-05-19 1995-11-30 Vlsi Technology, Inc. Flexible register mapping scheme
US5740414A (en) * 1995-02-14 1998-04-14 Hal Computer Systems, Inc. Method and apparatus for coordinating the use of physical registers in a microprocessor
US6356918B1 (en) * 1995-07-26 2002-03-12 International Business Machines Corporation Method and system for managing registers in a data processing system supports out-of-order and speculative instruction execution
US5764970A (en) * 1995-11-20 1998-06-09 International Business Machines Corporation Method and apparatus for supporting speculative branch and link/branch on count instructions
US5996068A (en) * 1997-03-26 1999-11-30 Lucent Technologies Inc. Method and apparatus for renaming registers corresponding to multiple thread identifications
US6061777A (en) * 1997-10-28 2000-05-09 International Business Machines Corporation Apparatus and method for reducing the number of rename registers required in the operation of a processor
US6092175A (en) * 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
DE60045286D1 (de) * 1999-09-08 2011-01-05 Hajime Seki Registerumbenennungssystem
JP3948615B2 (ja) * 2002-07-05 2007-07-25 富士通株式会社 プロセッサ及び命令制御方法
US7360063B2 (en) * 2006-03-02 2008-04-15 International Business Machines Corporation Method for SIMD-oriented management of register maps for map-based indirect register-file access
US7506139B2 (en) 2006-07-12 2009-03-17 International Business Machines Corporation Method and apparatus for register renaming using multiple physical register files and avoiding associative search
US7624253B2 (en) 2006-10-25 2009-11-24 Arm Limited Determining register availability for register renaming
CN100524208C (zh) * 2006-10-26 2009-08-05 中国科学院计算技术研究所 对状态寄存器进行重命名的方法和使用该方法的处理器
US20080148022A1 (en) * 2006-12-13 2008-06-19 Arm Limited Marking registers as available for register renaming
US7809930B2 (en) 2007-01-24 2010-10-05 Arm Limited Selective suppression of register renaming
CN101794214B (zh) 2009-02-04 2013-11-20 世意法(北京)半导体研发有限责任公司 使用多块物理寄存器映射表的寄存器重命名系统及其方法
US8335912B2 (en) 2009-04-22 2012-12-18 Oracle America, Inc. Logical map table for detecting dependency conditions between instructions having varying width operand values
US8707015B2 (en) 2010-07-01 2014-04-22 Advanced Micro Devices, Inc. Reclaiming physical registers renamed as microcode architectural registers to be available for renaming as instruction set architectural registers based on an active status indicator
US8661230B2 (en) 2011-04-15 2014-02-25 International Business Machines Corporation Allocation of counters from a pool of counters to track mappings of logical registers to physical registers for mapper based instruction executions

Also Published As

Publication number Publication date
EP3019953A1 (en) 2016-05-18
CN105359089A (zh) 2016-02-24
US20150019843A1 (en) 2015-01-15
WO2015006659A1 (en) 2015-01-15
JP2016526745A (ja) 2016-09-05
CN105359089B (zh) 2017-12-26
US9471325B2 (en) 2016-10-18

Similar Documents

Publication Publication Date Title
KR20160031503A (ko) 마이크로프로세서에서의 선택적 리네이밍을 위한 방법 및 장치
US8135942B2 (en) System and method for double-issue instructions using a dependency matrix and a side issue queue
JP6009608B2 (ja) 条件付き命令が無条件で出力を提供するシステム及び方法
JP6143872B2 (ja) 装置、方法、およびシステム
US6625723B1 (en) Unified renaming scheme for load and store instructions
US9256433B2 (en) Systems and methods for move elimination with bypass multiple instantiation table
US10678695B2 (en) Migration of data to register file cache
CN108196884B (zh) 利用生成重命名的计算机信息处理器
US9454371B2 (en) Micro-architecture for eliminating MOV operations
KR102524565B1 (ko) 로드 스토어 유닛들을 바이패싱하여 스토어 및 로드 추적
JP2005500616A (ja) 2レベルの分岐予測キャッシュによる分岐予測
KR20100032441A (ko) 조건부 명령을 비조건부 명령 및 선택 명령으로 확장하기 위한 방법 및 시스템
US20030182536A1 (en) Instruction issuing device and instruction issuing method
US8239661B2 (en) System and method for double-issue instructions using a dependency matrix
US11188332B2 (en) System and handling of register data in processors
US10949205B2 (en) Implementation of execution compression of instructions in slice target register file mapper
US11392386B2 (en) Program counter (PC)-relative load and store addressing for fused instructions
EP3060979A1 (en) Processor and methods for immediate handling and flag handling
EP3260978A1 (en) System and method of merging partial write result during retire phase
US7406587B1 (en) Method and system for renaming registers in a microprocessor
CN109564510B (zh) 用于在地址生成时间分配加载和存储队列的系统和方法
US7783692B1 (en) Fast flag generation
WO2013101323A1 (en) Micro-architecture for eliminating mov operations

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid