KR100407013B1 - 1차 및 2차 송출큐를 갖는 마이크로프로세서 - Google Patents
1차 및 2차 송출큐를 갖는 마이크로프로세서 Download PDFInfo
- Publication number
- KR100407013B1 KR100407013B1 KR10-2001-0000614A KR20010000614A KR100407013B1 KR 100407013 B1 KR100407013 B1 KR 100407013B1 KR 20010000614 A KR20010000614 A KR 20010000614A KR 100407013 B1 KR100407013 B1 KR 100407013B1
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- queue
- instructions
- execution
- dispatch
- Prior art date
Links
- 238000012545 processing Methods 0.000 claims abstract description 11
- 238000005336 cracking Methods 0.000 claims description 35
- 238000000034 method Methods 0.000 claims description 11
- 230000004044 response Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 9
- 230000015556 catabolic process Effects 0.000 description 5
- 238000006731 degradation reaction Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3865—Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
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차 송출큐에 저장된다. 명령어가 실행을 위해 현재 송출되는 것에 적합하지 않다면 2차 송출큐에 저장된다. 명령어가 다른 명령어로부터의 결과에 의존한다면 이 명령어는 1차 송출큐로부터 2차 송출큐로 이송될 수 있다. 한 실시예에서, 실행을 위해 명령어를 송출한 후에 이 명령어가 1차 송출큐로부터 2차 송출큐로 이송된다. 이 실시예에서, 상기 명령어는 소정 기간 동안 2차 송출큐 내에 머무를 것이다. 그 후, 이 명령어를 포함하는 2차 송출큐 엔트리는, 이 명령어가 거절(reject)되지 않았다면, 할당해제될 것이다.
Description
본 발명은 마이크로프로세서 구조에 관한 것으로, 보다 구체적으로는 명령어 그룹 구조(instruction group architecture)를 이용하는 마이크로프로세서, 대응하는 캐쉬 수단, 및 유용한 확장성에 관한 것이다.
마이크로프로세서 기술이 기가헤르쯔 성능까지 가능케함에 따라, 특정의 명령어 세트 구조(Instruction Set Architecture, ISA)로써 동작하도록 설계된 방대한 수의 설치된 소프트웨어와 호환성을 유지하면서 이미 개발완료된 기술을 이용하는 것이 마이크로프로세서 설계자에 있어서 주요한 해결과제이다. 이 문제를 해결하기 위해 설계자들은, 기존 ISA에 따라 포멧팅된 명령어를 수신하여 수신된 명령어의 명령어 포멧을 기가헤르쯔 실행 파이프라인 내에서 동작시키기에 보다 적합한 내부 ISA 포멧으로 변환할 수 있는 "계층화된 구조(layered architecture)" 마이크로프로세서를 개발해 왔다. 도 4로 되돌아가면, 계층화된 구조 마이크로프로세서(401)의 선택된 일부분이 도시되어 있다. 이 설계에서, 마이크로프로세서(401)의 명령어 캐쉬(410)은, 메인 메모리로부터 페치 유닛(402)이 가져온 명령어들을 수신 및 저장한다. 명령어 캐쉬 유닛(410) 내에 저장된 명령어들은 제1 ISA(즉, 프로세서(401)에 의해 실행되는 프로그램들은 제1 ISA 포멧으로 기록됨)에 따라 포멧팅된다. 그 다음, 명령어들은 명령어 캐쉬(410)으로부터 검색되어 ISA 변환 유닛(412)에 의해 제2 ISA로 변환된다. 제1 ISA로부터 제2 ISA로의 명령어의 변환은 복수개의 싸이클을 요구하기 때문에, 전형적으로 변환 프로세스는 파이프라인화되고, 그에 따라 임의의 주어진 시간에 제1 ISA로부터 제2 ISA로의 변환되는 명령어는 복수개 존재할 것이다. 그 다음, 변환된 명령어들은 프로세서(401)의 실행 파이프라인(422) 내에서 실행되기 위해 포워딩된다. 페치 유닛(402)는 분기 결정의 결과를 예측함으로써 분기 명령어 이후에 실행될 명령어의 어드레스를 판별하려고 시도하는 분기 예측 논리부(406)을 포함한다. 그 다음, 명령어들은 추론적으로 발생되어(speculatively issued) 분기 예측에 기초하여 실행된다. 그러나, 분기가 잘못 예측되면, 프로세서(401)의 명령어 캐쉬(410)과 마무리단(432) 사이에서 보류중인 명령어들은 플러시(flush)된다. 잘못 예측된 분기가 시스템 플러시를 유발할 경우에 촉발되는 성능 저하는 파이프라인 길이와 상관관계에 있다. 플러시되어야하는 파이프라인단의 개수가 많으면 많을수록 잘못된 분기 예측에 의한 성능저하는 더 커진다. 계층화된 구조는 프로세서 파이프라인을 추가시키고 주어진 시간에 잠재적으로 "비행중(in flight)"인 명령어의 개수를 증가시키기 때문에, 계층화된 구조에 관련된 잘못된 분기 예측에 의한 성능 저하는 프로세서의 성능에 대한 제한 요소가 될 수 있다. 따라서, 잘못된 분기 예측에 의한 성능 저하 문제를 해결한 계층화된 구조의 마이크로프로세서를 구현하는 것이 바람직하다. 또한, 구현된 해결책이, 코드 조각의 반복적 실행으로부터 발생하는 예외 조건(exception condition)의 반복적 발생을 적어도 부분적이나마 해결한다면 더욱 바람직할 것이다. 구현된 해결책이, 다음 실행될 명령어를 위해 송출큐(issue queue)를 탐색하는 능력을 희생하지 않고도 효과적으로 더 큰 송출큐를 가능하게 한다면, 더욱 바람직할 것이다.
상술한 문제점들은 명령어 그룹과, 명령어 그룹 포멧에 부합하는 캐쉬 수단을 이용하는 마이크로프로세서에 의해 그 상당 부분이 해결된다. 본 발명의 한 실시예는 마이크로프로세서 및 관련된 방법과 데이타 처리 시스템을 고려하고 있다. 이 마이크로프로세서는 제1 세트의 마이크로프로세서 명령어들을 수신하도록 구성된 명령어 크래킹 유닛(instruction cracking unit)을 포함한다. 명령어 크래킹 유닛은 명령어 세트를 명령어 그룹(instruction group)으로 편성하며, 그룹 내의 명령어들 각각은 공통된 명령어 그룹 태그(instruction group tag)를 공유한다. 프로세서는 명령어 그룹 포멧과 호환되도록 조직된 기본 블럭 캐쉬 수단을 포함하며, 기본 블럭 캐쉬는 크래킹 유닛에 의해 발생된 명령어 그룹을 캐쉬하도록 구성되어 있다. 프로세서의 실행 유닛은 명령어 그룹 내의 명령어들을 실행하는데 적합하다. 명령어 그룹 내의 한 명령어의 실행 동안에 플러시를 유발하는 예외(exception)가 발생하면, 플러시는 기본 블럭 캐쉬로부터 디스페치된 명령어들만 플러시한다. 기본 블럭 캐쉬에 도달한 명령어들만을 플러시함으로써, 프로세서는 크래킹 유닛 파이프라인 내에서 보류중인 명령어들이 플러시되는 것을 방지한다. 더 적은 명령어들이 플러시되기 때문에, 예외 상황 성능 저하가 감소된다. 한 실시예에서, 수신된 명령어들은 제1 명령어 포멧에 따라 포멧되고 제2 세트의 명령어들은 제2 명령어 포멧에 따라 포멧된다. 여기서 제2 명령어 포멧은 제1 명령어 포멧보다 넓다. 기본 블럭 캐쉬는 각각의 명령어 그룹을 기본 블럭 캐쉬의 대응하는 엔트리 내에 저장하도록 적절히 구성된다. 한 실시예에서, 기본 블럭 캐쉬 내의 각각의 엔트리는 대응하는 기본 블럭 캐쉬 엔트리를 나타내는 엔트리 필드와, 다음에 실행될 명령어 그룹을 가리키는 포인터를 포함한다. 양호하게는, 프로세서는 잘못 예측된 분기에 응답하여 캐쉬 엔트리의 포인터를 갱신하도록 구성된다.
본 발명은 성능을 향상시키기 위해 기본 블럭 캐쉬와 연계하여 명령어 히스토리 정보(instruction history information)를 이용하는 프로세서, 데이타 처리 시스템 및 방법을 개시한다. 프로세서는 명령어 세트를 수신하여, 이를 명령어 그룹으로 편성한다. 그 다음, 프로세서는 명령어 그룹을 실행을 위해 디스페치(dispatch)한다. 명령어 그룹이 실행되면, 이 명령어 그룹과 관련된 예외 이벤트를 나타내는 명령어 히스토리 정보가 기록된다. 그 후, 상기 명령어 그룹의 후속 실행 동안에 예외 이벤트가 발생하는 것을 방지하기 위해 명령어 히스토리 정보에 응하여 명령어의 실행이 수정된다. 프로세서는 명령어 캐쉬, L2 캐쉬 또는 시스템 메모리와 같은 저장장치와, 크래킹 유닛 및 기본 블럭 캐쉬를 포함한다. 크래킹 유닛은 저장 장치로부터 한 세트의 명령어를 수신하도록 구성된다. 크래킹 유닛은 이 명령어 세트를 명령어 그룹으로 편성하도록 구성된다. 크래킹 유닛은 명령어 세트의 포멧을 제1 명령어 포멧으로부터 제2 명령어 포멧으로 수정할 수 있다. 기본 블럭 캐쉬의 구조는 명령어 그룹을 저장하기에 적합하다. 기본 블럭 캐쉬는 각각의 기본 블럭 캐쉬 엔트리에 대응하는 명령어 히스토리 필드를 포함한다. 명령어 히스토리 정보는 명령어 그룹과 관련된 예외 이벤트를 나타낸다. 양호한 실시예에서, 기본 블럭 캐쉬 내의 각각의 엔트리는 크래킹 유닛에 의해 발생된 하나의 명령어 그룹에 대응한다. 프로세서는, 명령어 그룹이 완료될 때 정보를 명령어 히스토리 필드 내에 저장하도록 구성된 완료 테이블 제어 논리부(completion table control logic)를 더 포함할 수 있다. 명령어 히스토리 정보는, 명령어 그룹 내의 명령어가 또다른 명령어에 의존성을 갖는지의 여부를 나타내거나 명령어 그룹의 실행이 스토어 포워딩 예외(store forwarding exception)를 과거에 초래하였는지의 여부를 나타낼 수 있다. 이 실시예에서, 명령어 그룹의 실행이 스토어 포워딩 예외를 과거에 초래하였음을 검출한데 응하여, 프로세서는 정렬 모드(in-order-mode)로 실행되도록 구성된다.
본 발명은 1차 및 2차 송출큐를 이용하는 프로세서, 데이타 처리 시스템, 및 관련 방법을 개시한다. 프로세서는 명령어를 송출큐로 디스페치하기에 적합하다. 송출 유닛은 1차 송출큐와 2차 송출큐를 포함한다. 명령어가 실행을 위해 송출되기에 현재로서 적합하다면 1차 송출큐에 저장된다. 명령어가 실행을 위해 송출되기에 현재로서 적합하지 않다면 2차 송출큐에 저장된다. 프로세서는 다음에 송출될 명령어를 1차 송출큐 내의 명령어들로부터 결정한다. 만일 명령어가 다른 명령어로부터의 결과에 의존한다면 이 명령어는 1차 송출큐로부터 2차 송출큐로 이송될 수 있다. 한 실시예에서, 실행을 위해 명령어를 송출한 후 이 명령어가 1차 송출큐로부터 2차 송출큐로 이송된다. 이 실시예에서, 이 명령어는 지정된 지속 기간 동안 2차 송출큐 내에 머무를 것이다. 그 후, 이 명령어를 포함하는 2차 송출큐 엔트리는, 이 명령어가 거절되지 않았다면, 할당해제된다. 마이크로프로세서는 명령어 캐쉬와, 명령어 캐쉬로부터 명령어를 수신하도록 구성된 디스페치 유닛과, 디스페치 유닛으로부터 명령어를 수신하도록 구성된 송출 유닛을 포함한다. 송출 유닛은, 현재로서 실행하기에 적합한 디스페치된 명령어들을 1차 송출큐에 할당하고 현재로서 실행하기에 적합하지 못한 디스페치된 명령어들을 2차 송출큐에 할당한다.
도 1은 본 발명의 한 실시예에 따른 마이크로프로세서를 포함하는 데이타 처리 시스템의 선택된 구성 요소들의 블럭도.
도 2는 본 발명의 한 실시예에 따른 마이크로프로세서의 선택된 구성 요소들의 블럭도.
도 3은 도 2의 한 실시예에 의해 수행되는 명령어 크래킹 기능의 예.
도 4는 마이크로프로세서의 선택된 구성 요소들의 블럭도.
도 5는 도 2의 기본 캐시 블럭의 블럭도.
도 6은 도 2의 프로세서가 조우할 수 있는 다양한 분기 시나리오의 예.
도 7은 본 발명에서 사용하기에 적합한 완료 테이블의 블럭도.
도 8은 명령어 히스토리 정보를 포함하는 기본 블럭 캐쉬의 블럭도.
도 9는 본 발명의 한 실시예에 따른 1차 및 2차 송출큐를 포함하는 송출큐의 블럭도.
도 1을 참조하여, 본 발명에 따른 데이타 처리 시스템(100)의 한 실시예가 기술된다. 시스템(100)은 하나 이상의 중앙 처리 장치(프로세서, 101a, 101b, 101c)등을 포함한다(집합적으로 또는 총칭적으로 프로세서(101)이라 언급됨). 한 실시예에서, 각각의 프로세서(101)은 한정 명령어 세트 컴퓨터(Reduced Instruction Set Computer; RISC) 마이크로프로세서를 포함할 수 있다. RISC 프로세서에 대한 추가적인 정보는 씨.메이등에 의한PowerPC 설계 : RISC 프로세서군의 명세(Morgan Kaufmann, 1994년 제2판)에서 이용가능하다. 프로세서(101)은 시스템 버스(113)을 통해 시스템 메모리(250)과 다양한 다른 요소에 결합된다. ROM(102)는 시스템 버스(113)에 결합되며 시스템(100)의 소정의 기본적인 기능들을 제어하는 기본 BIOS(Basic Input/output System)를 포함할 수 있다. 나아가 도 1에는 I/O 어댑터(107)과 시스템 버스(113)에 결합된 네트워크 어댑터(106)이 도시되어 있다. I/O 어댑터(107)은 하드디스크(103) 및/또는 테이프 저장 장치(105)와 같은 대용량 저장 장치(104)에 시스템 버스(113)을 연결시킨다. 네트워크 어댑터(106)은 버스(113)을 외부 네트워크에 접속시켜, 데이타 처리 시스템(100)이 다른 시스템과 통신할 수 있도록 해준다. 디스플레이 모니터(136)은 디스플레이 어댑터(112)에 의해 시스템 버스(113)에 접속되며, 그래픽 집중형 응용프로그램(graphic intensive application)의 성능을 향상시키기 위한 그래픽 어댑터와 비디오 제어기를 포함할 수 있다. 한 실시예에서, 어댑터(107, 106, 및 112)는 (도시되지 않은) 중간 버스 브리지(intermediate bus bridge)를 경유해 시스템 버스(113)에 접속된 하나 이상의 I/O 버스들에 접속될수 있다. 하드디스크 제어기, 네트워크 어댑터, 및 그래픽 어댑터와 같은 주변 장치들을 접속시키기 위한 적절한 I/O 버스들은 본 명세서에서 참고용으로 인용하는 PCI Special Interest Group, Hillsboro, OR로부터 입수가능한 PCI(peripheral Components Interface) 로컬 버스 명세 개정판 2.2에 따른 PCI 버스를 포함한다. 추가적인 입력/출력 장치들이 사용자 인터페이스 어댑터(108)을 경유하여 시스템 버스(113)에 접속되어 있는 것이 도시되어 있다. 키보드(109), 마우스(110), 스피커(111)은 사용자 인터페이스 어댑터(108)을 경유하여 버스(113)에 접속되어 있다. 사용자 인터페이스 어댑터(108)은, 예를 들어, 복수개의 장치 어댑터를 하나의 집적 회로 내에 집적시킨 수퍼I/O 칩을 포함할 수 있다. 이와 같은 칩에 대한 추가적인 정보는, www.national.com에 있는 National Semiconductor Corporation사의PC87338/PC97338 ACPI 1.0 및 PC98/99 호환 수퍼I/O 데이타시트(1998년 11월)로부터 이용가능하다. 따라서, 도 1에서 구성된 바와 같이, 시스템(100)은 프로세서(101)과 같은 처리 수단과, 시스템 메모리(250) 및 대용량 저장 장치(104)를 포함한 저장 수단과, 키보드(109) 및 마우스(110)과 같은 입력 수단과, 스피커(111) 및 디스플레이(136)과 같은 출력 수단을 포함한다. 한 실시예에서, 시스템 메모리부(250)과 대용량 저장 장치(104)는 IBM사의 AIX와 같은 운영 체제 또는 도 1에 도시된 다양한 요소들의 기능을 조율할 수 있는 다른 적절한 운영 시스템을 집합적으로 저장한다. AIX 운영 체제에 대한 추가적인 정보는, www.ibm.com에 있는 IBM사로부터의AIX 버젼 4.3 테크니컬 레퍼런스: 베이스 오퍼레이팅 시스템 및 그 확장, 제1 및 2권(오더 넘버 SC23-4159 및 SC23-4160); AIX 버젼 4.3 시스템 유저스 가이드 : 커뮤니케이션 및 네트워크(오더 넘버 SC23-4122); 및 AIX 버젼 4.3 시스템 유저스 가이드 : 오퍼레이팅 시스템 및 디바이스 (오더 넘버 SC23-4121)로부터 입수할 수 있다.
도 2를 참조하면, 본 발명의 한 실시예에 따른 프로세서(101)의 간략화된 블럭도가 도시되어 있다. 도 2에 도시된 바와 같은 프로세서(101)은, 다음에 페치될 명령어의 어드레스를 발생시키기에 적합한 명령어 페치 유닛(instruction fetch unit, 202)를 포함한다. 페치 유닛(202)는, 분기 예측 논리부를 포함하며, 분기 예측 논리부는 그 이름이 의미하는 바와 같이 프로그램 실행 흐름에 영향을 주는 결정 결과를 예측하도록 만들어져 있다. 분기 결정을 올바르게 예측하는 능력은, 명령어들을 추론적으로 및 무순서로 실행시킴으로써 개선된 성능을 달성하는 프로세서(101)의 전반적인 능력에 있어서 중요한 인자이다. 페치 유닛(202)에 의해 발생된 명령어 어드레스는, 시스템 메모리 내용의 일부(subset)를 고속으로 저장할 수 있는 명령어 캐쉬(210)에 제공된다. 명령어 캐쉬(210)에 저장된 명령어들은 양호하게는 제1 ISA에 따라 포멧팅된다. 제1 ISA는, 예를 들어 PowerPC 또는 x86 호환 명령어 세트와 같은, 전형적인 레거시(legacy) ISA이다. PowerPC 명령어 세트에 관한 상세한 정보는 모토롤라사의 PowerPC 620 RISC 마이크로프로세서(오더 넘버 MPC620UM/AD) 사용자 메뉴얼에 나와 있다. 페치 유닛(202)에 의해 발생된 명령어 어드레스가 명령어 캐쉬(210) 내에 현재 복사되어 있는 시스템 메모리 위치에 대응한다면, 명령어 캐쉬(210)은 대응하는 명령어를 크래킹 유닛(212)로 포워딩한다. 페치 유닛(202)에 의해 발생된 명령어 어드레스에 대응하는 명령어가 현재 명령어 캐쉬(210)에 존재하지 않는다면[즉, 페치 유닛(202)에 의해 제공된 명령어 어드레스가 캐쉬(210) 내에 없다면], 크래킹 유닛(212)로 포워딩하기에 앞서 (도시되지 않은) L2 캐쉬 또는 시스템 메모리로부터 명령어를 가져와야 한다.
크래킹 유닛(212)는 인입되는 명령어 스트림을 수정하여 높은 동작 주파수(즉, 1 GHz를 초과하는 동작 주파수)의 하부 실행 파이프라인에서 실행하기에 최적화된 명령어 세트를 생성하도록 만들어져 있다. 한 실시예에서, 예를 들어, 크래킹 유닛(212)는 PowerPC마이크로프로세서가 지원하는 명령어 세트와 같은 32-비트폭 ISA 형태의 명령어를 수신하여, 양호하게는 기가헤르쯔 이상의 주파수 대역에서 동작하는 고속 실행 장치에서의 실행을 용이하게 해주는 더 넓은 폭의 제2 ISA로 변환한다. 크래킹 유닛(212)에 의해 발생된 명령어의 더 넓은폭의 포멧은, 예를 들어, 제1 포멧에 따라 포멧팅되어 크래킹 유닛(212)에 의해 수신된 명령어 내에서 단순히 암시되거나 참조되는 (오퍼랜드 값과 같은) 정보를 포함하는 명시적 필드(explicit field)를 포함할 수 있다. 한 실시예에서, 예를 들어, 크래킹 유닛(212)에 의해 발생된 명령어들의 ISA는 64 비트 이상의 폭이다.
한 실시예에서, 본 명세서에서 의도하는 크래킹 유닛(212)는, 제1 포멧으로부터 양호하게는 더 넓은폭의 제2 포멧으로 명령어를 변환하는 것 외에, 예를 들어 도 3에 기술된 예와 같이 페치된 명령어 세트들을 명령어 "그룹"(302)로 편성하도록 설계된다. 각각의 명령어 그룹(302)는 한 세트의 명령어 슬롯(304a, 304b)등[집합적으로 또는 총칭적으로 명령어 슬롯(304)로 언급됨]을 포함한다. 명령어 세트를 명령어 그룹으로 편성함으로써, 무엇보다도 많은 수의 비행(in-flight)중인 명령어들에 대한 완료 테이블(completion table)과 리네임 레지스터 매핑(rename register mapping)을 유지하는데 필요한 논리를 단순화시켜 고속 실행이 용이해진다.
예1에서, 참조 번호(301)이 가리키는 명령어 세트는 크래킹 유닛(212)에 의해 하나의 명령어 그룹(302)로 변환된다. 본 발명의 기술된 실시예에서, 각각의 명령어 그룹(302)는 참조 번호(304a, 304b, 304c, 304d, 및 304e)가 가리키는 5개의 슬롯을 포함한다. 각각의 슬롯(304)는 하나의 명령어를 포함한다. 한 실시예에서, 크래킹 유닛(212)에 의해 수신된 명령어 세트(301) 내의 명령어는 앞서 논의한 바와 같이 제1 ISA에 따라 포멧팅되고, 그룹(302) 내에 저장된 명령어는 제2의 더 넓은 포멧에 따라 포멧팅된다. 명령어 그룹을 사용함으로써 개별적으로 꼬리표를 붙여 추적해야(individually tagged and tracked)하는 명령어들의 개수를 감소시킴으로써, 리네임 복구 및 완료 테이블 논리가 단순화된다.
도 3의 예2는, 본 발명의 한 실시예에 따른 크래킹 유닛(212)에 의해 수행되는 명령어 그룹화의 제2 예를 도시하고 있다. 이 예는, 복잡한 명령어(complex instruction)들을 고속 실행용의 간단한 명령어들의 집합으로 분할하는 크래킹 유닛(212)의 능력을 예시하고 있다. 기술된 예에서, 2개의 LDU(load-with-update) 명령어는 각각 슬롯(304a 및 304c) 내의 한쌍의 load 명령어와, 슬롯(304b 및 304d) 내의 한쌍의 ADD 명령어를 포함하는 명령어 그룹으로 분할된다. 이 예에서, 그룹(302)는 분기 명령어를 포함하지 않기 때문에, 명령어 그룹(302)의 마지막 슬롯(304e)는 어떠한 명령어도 포함하지 않는다. PowerPCload-with-update 명령어는, 다른 명령어 세트내의 유사한 명령어와 같이, 복수개의 범용 레지스터(GRP)의 내용에 영향을 미치는 복잡한 명령어이다. 구체적으로, load-with-update 명령어는, 제1 GRP의 내용에 영향을 미치는 load 명령어와 제2 GRP의 내용에 영향을 미치는 ADD 명령어로 나눌수 있다. 따라서, 도 3의 예2의 명령어 그룹(302)에서, 2개 이상의 명령어 슬롯(304) 내의 명령어들은 크래킹 유닛(212)에 의해 수신된 하나의 명령어에 대응한다.
예3에서, 크래킹 유닛(212)로 들어가는 하나의 명령어는 복수개의 그룹(302)를 점유하는 명령어 세트들로 분할된다. 보다 구체적으로, 예3은 load multiple(LM) 명령어를 예시하고 있다. (PowerPC명령어 세트에 따른) load multiple 명령어는 메모리 내의 연속된 위치들의 내용을 연속 번호의 GRP들로 로딩한다. 기술된 예에서, 6개의 연속 메모리 위치의 load multiple은 6개의 load 명령어로 분할된다. 프로세서(101)의 기술된 예에 따른 각각의 그룹(302)는 최대 5개의 명령어를 포함하고 제5 슬롯(304e)는 분기 명령어용으로 예약되어 있기 때문에, 6개 레지스터의 load multiple은 각각 2개의 그룹(302a, 302b)로 분할된다. 4개의 load 명령어가 제2 그룹(302b)에 저장된다. 따라서, 예3에서, 하나의 명령어는 복수개의 명령어 그룹(302)를 유도하는 명령어 세트로 분할된다.
도 2로 되돌아가면, 양호한 실시예의 크래킹 유닛(212)에 의해 발생된 명령어 그룹(302)는 기본 블럭 캐쉬(213)으로 포워딩되고, 여기서 이들은 저장되어 실행이 보류된다. 도 5를 참조하면, 기본 블럭 캐쉬(213)의 실시예가 기술되어 있다. 기술된 예에서, 기본 블럭 캐쉬(213)은 엔트리(502a 내지 502n) 세트(일반적으로 또는 집합적으로 기본 블럭 캐쉬 엔트리(502)라 언급됨)를 포함한다. 한 실시예에서, 기본 블럭 캐쉬(213) 내의 각각의 엔트리(502)는 엔트리 식별자(504), 포인터(506), 및 명령어 어드레스(IA) 필드(507)을 포함할 것이다. 각각의 엔트리(502)에 대한 명령어 어드레스 필드(507)은 완료 테이블(218)의 IA 필드(704)와 유사하다. 한 실시예에서, 기본 블럭 캐쉬(504) 내의 각각의 엔트리(502)는 완료 테이블(218) 내의 엔트리에 대응하며 명령어 어드레스 필드(507)은 대응하는 명령어 그룹(302) 내의 제1 명령어의 명령어 어드레스를 가리킨다. 한 실시예에서, 포인터(506)은 분기 예측 알고리즘, 분기 히스토리 테이블, 또는 다른 적절한 분기 예측 메카니즘에 기초하여 다음에 실행될 명령어 그룹(302)의 엔트리 식별자를 가리킨다. 앞서 지적한 바와 같이, 크래킹 유닛(212)로 명령어 그룹(302)를 형성하는 양호한 구현 방법은 각각의 그룹(302) 내의 마지막 슬롯(304e)에 분기 명령어를 할당한다. 또한, 크래킹 유닛(212)의 양호한 실시예는 명령어 그룹(302)를 생성하는데, 여기서 명령어 그룹(302) 내의 분기 명령어의 개수는 1 (또는 그 이하)이다. 이러한 구조에서, 각각의 명령어 그룹(302)는, 도 6에 도시된 바와 같이 분기 트리(600)의 한 "레그"를 나타낸다. 여기서, 명령어 그룹(302)는 그들의 대응하는 명령어 그룹 엔트리(504) 값에 의해 표시된다. 예를 들어, 제1 명령어 그룹(302a)는 엔트리 번호(1)이 가리키는 방식이다. 예를 들어, 프로세서(101)의 분기 예측 메카니즘이, [제2 그룹(302b)에 대응하는] 레그2가 레그1 다음에 실행될 것이고 레그3은 레그2 다음에 실행될 것이라고 예측한다고 가정하자. 본 발명의 한 실시예에 따른 기본 블럭 캐쉬(213)은 포인터(506)이 실행될 다음 그룹(302)를 가리키도록 설정함으로써 이들 분기 예측을 반영한다. 기본 블럭 캐쉬(213) 내의 각각의 엔트리(502)의 포인터(506)은 디스페치될 다음 명령어 그룹(302)를 결정하도록 이용된다.
페치 유닛(202)가 명령어 캐쉬(210)과 연계하여 동작하듯이, 기본 블럭 캐쉬(213)은 블럭 페치 유닛(215)와 연계하여 동작한다. 보다 구체적으로, 블럭 페치 유닛(215)는 기본 블럭 캐쉬(213)에 제공되는 명령어 어드레스의 발생을 책임진다. 블럭 페치 유닛(215)에 의해 제공된 명령어 어드레스는 기본 블럭 캐쉬(213) 내의 명령어 어드레스 필드(507) 내의 어드레스와 비교된다. 블럭 페치 유닛(215)에 의해 제공된 명령어 어드레스가 기본 블럭 캐쉬(213) 내에 있다면, 적절한 명령어 그룹이 송출큐(220)으로 포워딩된다. 블럭 페치 유닛(215)에 의해 제공되는 어드레스가 기본 블럭 캐쉬(213) 내에 있지 않다면, 명령어 어드레스가 페치 유닛(202)로 피드백되어 명령어 캐쉬(210)으로부터 적절한 명령어를 검색해온다(retrieve). (다이 크기) 면적 절약에 적합한 한 실시예에서, 기본 블럭 캐쉬(213)은 명령어 캐쉬(210)의 제거를 가능하게 해준다. 이 실시예에서, L2 캐쉬 또는 시스템 메모리와 같은 적절한 저장 장치로부터 명령어가 검색되어 크래킹 유닛(212)로 직접 제공된다. 블럭 페치 유닛(213)에 의해 발생된 명령어 어드레스가 기본 블럭 캐쉬(213) 내에 없다면, 명령어 캐쉬(210)이 아니라 L2 캐쉬나 시스템 메모리로부터 적절한 명령어가 검색된다.
프로세서(101)의 기술된 실시예는 디스페치 유닛(214)를 표시하고 있다. 디스페치 유닛(214)는 각각의 명령어 그룹 내의 명령어들을 적절한 송출큐(220)으로 포워딩하기 이전에 모든 필요한 리소스가 가용상태임을 확실히 하는 역할을 한다. 또한 디스페치 유닛(214)는 디스페치 및 완료 제어 논리부(216)과 통신하면서 명령어가 송출된 순서를 추적하고, 아울러, 무순서 실행(out-of-order execution)을 용이하게 하기 위해 이들 명령어의 완료 상태를 추적한다. 크래킹 유닛(212)가 인입 명령어를 상술한 바와 같은 명령어 그룹으로 편성하는 프로세서(101)의 실시예에서, 각각의 명령어 그룹(302)는 송출된 명령어 그룹의 순서를 전달하는 완료 및 제어 논리부(216)에 의해 그룹 태그(GTAG)를 할당받는다. 예로서, 디스페치 유닛(214)는 연속된 명령어 그룹에게 단조 증가값(monotonically increasing value)을 할당할 수도 있다. 이러한 구조에서, 낮은 GTAG를 갖는 명령어 그룹은 높은 GTAG값을 갖는 명령어 그룹보다 앞서 송출되는(즉, 더 오래된) 것으로 알려져 있다. 프로세서(101)의 기술된 실시예는 디스페치 유닛(214)을 별개의 기능 블럭으로서 표시하고 있지만, 기본 블럭 캐쉬(213)의 그룹 명령어 편성 자체가 디스페치 유닛(214)의 기능을 포함할 수도 있다. 따라서, 일실시예에서, 디스페치 유닛(214)는 기본 블럭 캐쉬(213) 내에 포함되며 기본 블럭 캐쉬(213)은 송출큐(220)에 직접 접속된다.
디스페치 및 완료 제어 논리부(216)와 연계하여, 본 발명의 한 실시예에서는, 송출된 명령어 그룹의 상태를 추적하기 위해 완료 테이블(218)가 이용된다. 도 7을 참조하면, 완료 테이블(218)의 한 실시예의 블럭도가 도시되어 있다. 기술된 실시예에서, 완료 테이블(218)은 한 세트의 엔트리(702a 내지 702n)[집합적으로 또는 총칭적으로 완료 테이블 엔트리(702)라 언급됨]를 포함한다. 이 실시예에서, 완료 테이블(218) 내의 각각의 엔트리(702)는 명령어 어드레스(IA) 필드와 상태 비트 필드(706)을 포함한다. 이 실시예에서, 각각의 명령어 그룹(302)의 GTAG 값은, 명령어 그룹(302)에 대응하는 완료 정보가 저장되는 완료 테이블(218) 내의 엔트리(702)를 식별시켜준다. 따라서, 완료 테이블(218)의 엔트리1 내에 저장되는 명령어 그룹(302)는 GTAG 값이 1일 것이다. 이 실시예에서, 완료 테이블(218)은 낮은 GTAG 값을 갖는 명령어 그룹이 높은 GTAG 값을 갖는 명령어 그룹보다 실제로 더 어리다(younger)는 것을 가리키는 "랩 어라운드(wrap around)" 비트를 추가로 포함할 수 있다. 이 실시예에서, 명령어 어드레스 필드(704)는 대응하는 명령어 그룹(302)의 제1 슬롯(304a) 내에 명령어의 어드레스를 포함한다. 상태 필드(706)은, 예를 들어, 완료 테이블(218) 내의 대응하는 엔트리(702)가 가용상태인지의 여부 또는 보류중인 명령어 그룹에 엔트리가 할당되었는지의 여부를 가리키는 하나 이상의 상태 비트를 포함할 수 있다.
도 2에 도시된 프로세서(101)의 실시예에서, 명령어는 디스페치 유닛(214)로부터 송출큐(220)으로 송출된다. 명령어들은 대응하는 실행 파이프(222) 내에서의 실행을 위해 송출큐에서 대기한다. 프로세서(101)은 다양한 유형의 실행 파이프를 포함할 수 있다. 각각의 실행 파이프는 프로세서의 명령어 세트의 서브셋을 실행하도록 설계된다. 이 실시예에서, 실행 파이프(222)는 분기 유닛 파이프라인(224), 로드 스토어 파이프라인(226), 고정 소수점 산술 장치(228), 및 부동 소수점 장치(230)을 포함한다. 각각의 실행 파이프(222)는 2개 이상의 파이프라인단을 포함할 수 있다. 송출큐(220)에 저장된 명령어들은 다양한 송출 우선순위 알고리즘(issue priority algorithms)을 사용하여 실행 파이프(222)에 송출될 수 있다. 한 실시예에서, 예를 들어, 송출큐(220) 내의 가장 오래된 보류중인 명령어가 실행 파이프(222)로 송출될 다음 명령어가 된다. 이 실시예에서, 디스페치 유닛(214)에 의해 할당된 GTAG값은 송출큐(220) 내에서 보류중인 명령어들의 상대적 나이(relative age)를 판별하는데 이용된다. 송출하기 이전에, 명령어의 목적지 레지스터 오퍼랜드가 가용 리네임 GPR에 할당된다. 명령어가 궁극적으로 송출큐(220)으로부터 적절한 실행 파이프로 포워딩될 때, 실행 파이프는 명령어의 op 코드에 의해 지시된 적절한 동작을 수행하고 그 명령어가 파이프라인의 (참조 번호 232로 표시된) 최종단(final stage)에 도달하는 때쯤에는 그 명령어의 결과를 명령어의 리네임 GPR에 기록한다. 리네임 GPR과 그들의 대응하는 레지스터간에는 매핑이 유지된다. 명령어 그룹 내의 모든 명령어 (및 더 어린 명령어 그룹 내의 모든 명령어)가 예외(exception)를 발생시키지 않고 종료할 때, 완료 테이블(218) 내의 완료 포인터는 다음 명령어 그룹으로 인크리멘트된다. 완료 포인터가 새로운 명령어 그룹으로 인크리멘트될 때, 오래된 명령어 그룹 내의 명령어들과 관련된 리네임 레지스터들은 해방되어 오래된 명령어 그룹 내의 명령어들의 결과를 커미트(commit)한다. 종결된 (그러나 아직 커미트되지 않은) 명령어보다 더 오래된 하나 이상의 명령어가 예외를 발생시키면, 예외를 발생시킨 명령어 및 더 어린 명령어들은 모두 플러시되고 리네임 회복 루틴이 기동되어 알려진 상태중 가장 마지막에 알려진 유효한 상태로 GRP 매핑을 복구한다.
만일 예측된 분기가 채택되지 않으면 (잘못된 분기 예측), 실행 파이프(222) 및 송출큐(220) 내에서 보류중인 명령어들은 플러시된다. 또한, 잘못된 분기 예측과 관련된 기본 블럭 캐쉬(502)의 포인터(506)은 채택된 가장 최근의 분기를 반영하도록 갱신된다. 이러한 갱신 절차에 대한 예가, 프로그램 실행 결과가 레그1(명령어 그룹 302a)로부터 레그4(명령어 그룹 302d)로의 분기를 초래하는 경우에 대해 도 5에 도시되어 있다. 엔트리(502a)의 포인터(506)은, 기본 블럭 캐쉬(213)의 번호 2번 엔트리 내에 존재하는 명령어 그룹(즉, 명령어 그룹 302b)로의 분기를 앞서예측했기 때문에, 명령어 그룹(302a)로부터 그룹(302d)로의 실제적 분기는 잘못 예측되었다. 잘못예측된 분기는 검출되어 블럭 페치 유닛(215)로 피드백되고, 기본 블럭 캐쉬(213)과 각각의 파이프라인(222)의 최종단(232)사이에서 보류중인 명령들은 플러시되고, 기본 블럭 캐쉬(213)의 엔트리4 내의 명령어 그룹(302d)으로써 실행이 재개시된다. 또한, 기본 블럭 캐쉬(502a)의 포인터(506)은 이전값 2로부터 새로운 값 4로 변경되어 가장 최근의 분기 정보를 반영한다. 실행 파이프라인(222)에 근접하게 기본 블럭 캐쉬(213) 및 블럭 페치 유닛(215)를 채용함으로서, 본 발명은 잘못 예측된 분기에 대한 성능 감소 문제를 고려하고 있다. 보다 구체적으로, 명령어 크래킹 유닛(212)의 "하류"측 상에 기본 블럭 캐쉬(213)을 구현함으로써, 본 발명은 크래킹 유닛(212) 내에서 보류중인 명령어들을 잘못된 분기 예측 플러시 경로로부터 제거함으로써 잘못된 분기 예측이후에 소거되어야 하는 파이프라인단의 개수를 감소시키고 성능 저하를 감소시킨다. 또한, 기본 블럭 캐쉬(213)은 디스페치 및 완료 제어 유닛(216) 및 완료 테이블(218)의 구성에 부합하는 구조를 갖는 캐시 메카니즘을 고려함으로써 중재 논리부의 조직을 단순화시키고 이하에 기술하는 바와 같이 기본 블럭 캐시(213)에 대한 유용한 확장성의 구현을 용이하게 해준다.
한 실시예에서, 기본 블럭 캐시(213)은, 예외, 플러시, 인터럽트, 또는 다른 성능을 제한하는 이벤트(집합적으로 또는 총칭적으로 예외 이벤트라 언급됨)를 초래하는 시나리오를 피하기 위해 동일한 명령어 그룹의 후속된 실행 동안에 사용될 수도 있는 정보를 기록함으로써 개선된 프로세서 성능을 가능케해주는 명령어 히스토리 정보(information history information)를 더 포함한다. 도 8에 도시된 기본 블럭 캐쉬(213)의 한 실시예에서, 명령어 히스토리 정보는 각각의 엔트리(502)의 명령어 히스토리 필드(508)에 저장된다. 명령어 히스토리 필드(508)에 저장될 수 있는 명령어의 유형으로서, 로드 명령어가 실행된 최근에 스토어 포워딩 예외(store forwarding exception)를 초래한 특정 로드 명령어를 포함하는 명령어 그룹을 고려해보자. 스토어 포워딩 예외는, 공통 메모리 레퍼런스(common memory reference)를 공유하는 스토어 명령의 (프로그램 순서상) 뒤에 오는 로드 명령어가 무순서 머신(out-of-order machine) 내에서 스토어 명령어 이전에 실행될 때 발생한다. 로드 명령어가 스토어 명령어 이전에 실행되면 레지스터로부터 무효한 값을 가져오기 때문에, 명령어 플러시를 유발하는 예외가 발생된다. 기본 블럭 캐쉬(213)의 구조와 완료 및 제어 논리부(216)의 구조간의 병렬성(parallelism) 덕분에, 기본 블럭 캐쉬(213)내의 해당 엔트리에 대한 명령어들이 실행되고 완료되는 방식에 관하여 디스페치 및 완료 제어 논리부(216)에 의해 학습된 정보를 포워딩하는 태스크가 상당히 용이해진다. 이러한 병렬성이 없다면, 디스페치 및 완료 제어 논리부(216)으로부터의 완료 정보는, 그룹 명령어 정보를 그 구성 명령어들과 상호연관시키기 위해 중재 해싱 테이블 또는 다른 적절한 메카니즘을 통과해야만 할 것이다. 스토어 포워딩 예에서, 스토어 포워딩 예외의 검출시에, 디스페치 및 완료 제어 유닛(216)은 기본 블럭 캐쉬(213) 내의 적절한 엔트리의 명령어 히스토리 필드(508) 내에 스토어 포워딩 예외를 의미하는 하나 이상의 비트를 기록할 것이다. 명령어 그룹이 이후에 실행된다면, 스토어 포워딩 예외의 선행 발생을 가리키는 명령어 히스토리 정보가 사용되어 프로세서(101)을, 스토어 명령어가 완료되기 이전에 로드 명령어가 실행되는 것을 방지하는 정렬 모드로 둘 것이다. 따라서, 본 발명의 이 실시예는, 명령어 그룹과 관련된 예외 이벤트를 가리키는 명령어 히스토리 정보를 기록하고 명령어 그룹의 후속된 실행 동안에 예외 이벤트가 발생하는 것을 방지하기 위해 명령어 그룹의 실행을 수정하는 것을 고려하고 있다. 스토어 포워딩 예와 관련하여 설명하였지만, 본 명세서에서 의도하는 명령어 히스토리 정보 필드(508)은, 소정의 예측 메카니즘의 정확도와 관련된 정보와, 오퍼랜드 값 예측과, 캐쉬 미스/히트 정보등과 같은 재발적 예외 조건을 프로세서가 피할 수 있도록 다양한 명령어 히스토리 이벤트에 관련된 정보를 기록하는데 적합하다.
기본 블럭 캐쉬(213)의 실행 히스토리 필드(508) 내에 기록될 수 있는 정보의 한 예가 도 9에 도시된 실시예에 의해 부각된다. 이 예에서는 하나 이상의 송출큐(220)이 1차 송출큐(902)와 2차 송출큐(904)로 분할된다. 송출큐(220)의 최적 크기와 깊이는, 다른 대안들간의 균형을 나타낸다. 한편으로는, 명령어를 무순서 실행하는 프로세서(101)의 능력을 최대한 이용하기 위해 매우 크고 깊은 송출큐를구현하는 것이 바람직하다. 명령을 무순서 송출하는 능력은 송출큐(220) 내에서 보류중인 명령어의 개수에 의해 제한된다. 많은 수의 송출큐는, 무순서 처리에 적합한 많은 수의 명령어에 대응한다. 다른 한편, 송출큐(220)의 깊이가 증가함에 따라, 프로세서의 싸이클 타임 제약 내에서 송출될 다음 명령어를 결정하는 프로세서의 능력이 감소한다. 즉, 송출큐(220) 내에서 보류중인 명령어의 개수가 많을수록, 송출될 다음 명령어를 결정하는데 필요한 시간은 길어진다. 이러한 이유로 인해, 송출큐(220)과 같은 송출큐들은 종종 대략 20이하의 깊이로 제한된다. 본 발명의 한 실시예는, 송출될 다음 명령어를 찾기 위해 송출큐를 탐색하는데 필요한 논리부를 크게 증가시키지 않고도 깊은 송출큐의 이점을 달성할 수 있다. 본 발명은, 송출큐(220) 내에서 보류중인 명령어는 이미 송출되어 프로세서(101)의 실행 파이프라인(2223) 내에서 보류중이기 때문에 또는 오퍼랜드 값을 위해 다른 명령어의 완료를 기다리기 때문에, 종종 즉각적인 송출에 적합하지 않다는 사실을 이용하고 있다.
도 9를 참조하면, 본 발명의 한 실시예에 따른 송출큐(220)은 1차 송출큐(902) 및 2차 송출큐(904)를 포함한다. 1차 송출큐(902)는 즉각적인 송출에 적합한 명령어를 포함한다. 한 실시예에서, 디스페치 유닛(214)로부터 디스페치된 명령어들은 초기에 1차 송출큐(902)의 가용 엔트리에 저장된다. 명령어가 다른 명령어에 의존성을 가지는 것으로 후속 판별되면, 의존성 명령어는 자신이 의존하는 다른 명령어가 필요한 정보를 검색할 때까지 2차 송출큐(904)로 이동된다. 예를 들어, 로드 명령어 이후의 가산 명령어가 로드 명령의 결과를 요구하는 경우에, 두 명령어 모두 초기에는 1차 송출큐(902)로 디스페치될 것이다. 그러나, 가산 명령어가 로드 명령어에 의존성을 가진다는 것이 후속해서 판별되면, 가산 명령어는 1차 송출큐로부터 2차 송출큐로 이송된다. 도 8을 참조하여 앞서 논의된 바와 같이 명령어 히스토리 필드(508)을 이용하는 실시예에서, 가산 명령어의 의존성을 기록함으로써,명령어의 후속된 실행 동안에 가산 명령어가 2차 송출큐(220)으로 직접 저장될 수 있다. 2차 송출큐(904)는, 최근에 송출되어 프로세서의 실행 파이프라인에서 보류중인 명령어를 저장하는데 사용될 수도 있다. 이 실시예에서, 명령어는 1차 송출큐(902)로부터 송출되어 2차 송출큐(904)로 전송된다. 한 실시예에서, 명령어는 자신이 거절되지 않은 것으로 판별될 때까지 2차 송출큐(904) 내에 머무를 것이다. 명령어가 거절되지 않았다는 것을 판별하는 한 방법은, 2차 송출큐(904) 내의 각각의 엔트리에 관련된 (도시되지 않은) 타이머/카운터를 구현하는 것이다. 명령어가 초기에 1차 송출큐(902)로부터 2차 송출큐(904)로 전송될 때, 카운터/타이머가 개시된다. 한 실시예에서, 카운터/타이머는 카운터/타이머가 개시된 이래로 경과되는 클럭 싸이클의 개수를 카운트한다. 명령어가 거절되었음에 대한 검출없이 카운터/타이머가 선정된 개수의 싸이클을 카운트하면, 명령어는 성공적으로 완료된 것으로 간주되고 2차 송출큐(904) 내의 엔트리는 할당해제된다. 명령어 의존성 때문에 또는 명렁어가 최근에 1차 송출큐로부터 송출되었기 때문에, 디스페치되었지만 현재로서는 송출될 수 없는 명령어들이 있는 2차 송출큐와 함께, 실행을 위해 현재 송출될 수 있는 명령어 전용의 1차 송출큐를 포함하는 송출큐를 이용함으로써, 다음 송출될 명령어를 판별하는데 필요한 시간을 많이 증가시키지 않고도 송출큐의 유효 크기 또는 깊이가 증가될 수 있다.
잘못된 분기예측과 연관된 성능저하를 감소시키기 위해 그룹화된 명령어(즉, 제1 포멧으로부터 제2 포멧으로 변환된 명령어)를 저장하는데 적합한 캐쉬를 포함하는 마이크로프로세서의 다양한 실시예를 설명하였다. 그러나, 도시되고 설명된 본 발명의 형태들은 단시 현재로서 양호한 예로서 제시된 것임을 이해하여야 한다. 첨부된 청구범위는 양호한 실시예의 다양한 변형예도 포함하도록 해석되어야 한다.
Claims (15)
- 마이크로프로세서 명령어를 실행시키기 위한 방법에 있어서,1차 송출큐(issue queue) 및 2차 송출큐를 포함하는 송출 유닛으로 제1 명령어를 디스페치(dispatch)하는 단계와,상기 제1 명령어를 상기 1차 송출큐에 저장하는 단계와,그후에 상기 제1 명령어가 실행을 위해 송출하기에 현재 적합하지 않다고 판단되면, 상기 제1 명령어를 상기 2차 송출큐로 이동시키는 단계와,제2 명령어를 상기 1차 송출큐에 디스페치하는 단계와,상기 제2 명령어를 실행 유닛으로 송출한 후에, 상기 제2 명령어를 상기 2차 송출큐로 이동시키는 단계 - 상기 1차 송출큐에 남아있는 명령어들은 현재 실행 유닛으로 송출하기에 적합함-와,상기 1차 송출큐에 있는 명령어들중에서 실행을 위해 다음 송출할 명령어를 판단하는 단계를 포함하는 방법.
- 제1항에 있어서, 상기 제1 명령어가 실행을 위해 송출하기에 현재 적합하지 않다고 판단하는 단계는 상기 제1 명령어가 이전에 송출된 명령어에 대한 의존성을 포함하는지를 판단하는 단계를 포함하는 방법.
- 삭제
- 제1항에 있어서, 지정된 기간 동안 상기 제2 명령어를 상기 2차 송출큐 내에 유지하는 단계와, 그 후에, 상기 제2 명령어가 거절되지 않았다면 상기 제2 명령어를 저장한 상기 2차 송출큐 엔트리를 할당해제하는 단계를 더 포함하는 방법.
- 제1항에 있어서, 상기 제1 명령어를 상기 송출 유닛으로 디스페치하는 상기 단계는, 상기 제1 명령어를 포함하는 명령어 그룹을 기본 블럭 캐쉬(basic block cache)로부터 검색하는(retrieve) 단계를 포함하는 방법.
- 제5항에 있어서, 상기 제1 명령어를 후속하여 디스페치할 때, 상기 기본 블럭 캐쉬 내의 명령어 히스토리 정보를 검출하는 단계와, 상기 해당 명령어 히스토리 정보가 상기 제1 명령어가 다른 명령어에 의존함을 나타내는 경우에 상기 제1 명령어를 처음부터 상기 2차 송출큐로 송출하는 단계를 더 포함하는 방법.
- 마이크로프로세서에 있어서,명령어 캐쉬와,상기 명령어 캐쉬로부터 명령어를 수신하도록 구성된 디스페치 유닛과,상기 디스페치 유닛으로부터 명령어를 수신하도록 구성된 송출 유닛을 포함하며, 상기 송출 유닛은,디스페치된 제1 명령어를 1차 송출큐에 할당하고, 상기 제1 명령어가 실행에 적합하지 않다는 후속 판단에 따라 상기 제1 명령어를 2차 송출큐로 이동시키며,디스페치된 제2 명령어를 상기 1차 송출큐에 할당하고 상기 제2 명령어가 실행을 위해 송출된 후에, 상기 제2 명령어를 상기 2차 송출큐로 이동 - 상기 1차 송출큐에 남아있는 명령어들은 현재 실행에 적합함- 시키도록 구성되는 마이크로프로세서.
- 제7항에 있어서, 상기 명령어 캐쉬와 상기 디스페치 유닛 사이에 크래킹 논리부를 더 포함하되, 상기 크래킹 논리부는 상기 명령어 캐쉬로부터 수신된 명령어 세트를, 공통된 명령어 그룹 태그(common instruction group tag)를 공유하는 명령어 그룹(instruction group)으로 편성하도록 만들어진 마이크로프로세서.
- 제8항에 있어서, 상기 크래킹 논리부와 상기 디스페치 유닛 사이에 기본 블럭 캐쉬를 더 포함하되, 상기 기본 블럭 캐쉬는 상기 크래킹 논리부에 의해 형성된 명령어 그룹을 캐싱하는데 적합한 마이크로프로세서.
- 제9항에 있어서, 상기 기본 블럭 캐쉬는 명령어 히스토리 정보(instruction history information)를 포함하며, 상기 송출 유닛은, 명령어가 다른 명령어에 의존한다는 것이 상기 명령어 히스토리 정보에 의해 표시되면, 상기 명령어를 처음부터 2차 송출큐에 저장하도록 구성되는 마이크로프로세서.
- 제7항에 있어서, 상기 송출 유닛은 상기 제1 명령어가 이전에 송출된 명령어에 대한 의존성을 가지고 있는 경우에 상기 제1 명령어를 실행에 부적합하다고 판단하도록 구성되는 것에 더 특징이 있는 마이크로프로세서.
- 삭제
- 제7항에 있어서, 상기 송출 유닛은 상기 제2 명령어의 실행이 명령어 거절(instruction reject)을 초래하지 않았다는 판단에 응답하여 상기 제2 명령어를 상기 2차 송출큐로부터 할당해제하도록 구성되는 마이크로프로세서.
- 제13항에 있어서, 상기 송출 유닛은, 실행을 위해 상기 제2 명령어를 송출한 이래로 경과된 클럭 싸이클의 개수를 판단함으로써 상기 제2 명령어의 실행이 명령어 거절을 초래했는지의 여부를 판단하는데, 상기 경과된 클럭 싸이클의 개수가 선정된 값을 초과한다면 상기 제2 명령어는 명령어 거절을 초래하지 않은 것으로 판단되는 마이크로프로세서.
- 제7, 8, 9, 10, 11, 13, 14항중 어느 한 항에 따른 적어도 하나의 마이크로프로세서와, 메모리와, 입력 수단과, 디스플레이를 포함하는 데이타 처리 시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/478,311 | 2000-01-06 | ||
US09/478,311 US6609190B1 (en) | 2000-01-06 | 2000-01-06 | Microprocessor with primary and secondary issue queue |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20010070435A KR20010070435A (ko) | 2001-07-25 |
KR100407013B1 true KR100407013B1 (ko) | 2003-11-28 |
Family
ID=23899401
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR10-2001-0000614A KR100407013B1 (ko) | 2000-01-06 | 2001-01-05 | 1차 및 2차 송출큐를 갖는 마이크로프로세서 |
Country Status (5)
Country | Link |
---|---|
US (1) | US6609190B1 (ko) |
JP (1) | JP3540743B2 (ko) |
KR (1) | KR100407013B1 (ko) |
CN (1) | CN1163822C (ko) |
HK (1) | HK1037248A1 (ko) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7302553B2 (en) * | 2003-01-23 | 2007-11-27 | International Business Machines Corporation | Apparatus, system and method for quickly determining an oldest instruction in a non-moving instruction queue |
US7487335B1 (en) * | 2003-10-14 | 2009-02-03 | Sun Microsystems, Inc. | Method and apparatus for accessing registers during deferred execution |
KR100460009B1 (ko) * | 2004-06-23 | 2004-12-04 | 엔에이치엔(주) | 이미지 리소스를 로딩하는 방법 및 이미지 리소스 로딩시스템 |
US20060090061A1 (en) * | 2004-09-30 | 2006-04-27 | Haitham Akkary | Continual flow processor pipeline |
US7664936B2 (en) * | 2005-02-04 | 2010-02-16 | Mips Technologies, Inc. | Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages |
US7657891B2 (en) * | 2005-02-04 | 2010-02-02 | Mips Technologies, Inc. | Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency |
US7631130B2 (en) * | 2005-02-04 | 2009-12-08 | Mips Technologies, Inc | Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor |
US7613904B2 (en) * | 2005-02-04 | 2009-11-03 | Mips Technologies, Inc. | Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler |
US7490230B2 (en) * | 2005-02-04 | 2009-02-10 | Mips Technologies, Inc. | Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor |
US7681014B2 (en) * | 2005-02-04 | 2010-03-16 | Mips Technologies, Inc. | Multithreading instruction scheduler employing thread group priorities |
US7657883B2 (en) * | 2005-02-04 | 2010-02-02 | Mips Technologies, Inc. | Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor |
US7853777B2 (en) * | 2005-02-04 | 2010-12-14 | Mips Technologies, Inc. | Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions |
US7752627B2 (en) * | 2005-02-04 | 2010-07-06 | Mips Technologies, Inc. | Leaky-bucket thread scheduler in a multithreading microprocessor |
US7328330B2 (en) * | 2005-08-16 | 2008-02-05 | International Business Machines Corporation | Queue design supporting dependency checking and issue for SIMD instructions within a general purpose processor |
US20070070077A1 (en) * | 2005-09-26 | 2007-03-29 | Silicon Integrated Systems Corp. | Instruction removing mechanism and method using the same |
US7490224B2 (en) * | 2005-10-07 | 2009-02-10 | International Business Machines Corporation | Time-of-life counter design for handling instruction flushes from a queue |
US7822948B2 (en) * | 2008-01-03 | 2010-10-26 | International Business Machines Corporation | Apparatus, system, and method for discontiguous multiple issue of instructions |
US8103852B2 (en) * | 2008-12-22 | 2012-01-24 | International Business Machines Corporation | Information handling system including a processor with a bifurcated issue queue |
US9104399B2 (en) * | 2009-12-23 | 2015-08-11 | International Business Machines Corporation | Dual issuing of complex instruction set instructions |
US8935705B2 (en) * | 2011-05-13 | 2015-01-13 | Benefitfocus.Com, Inc. | Execution of highly concurrent processing tasks based on the updated dependency data structure at run-time |
US20130297912A1 (en) * | 2012-05-03 | 2013-11-07 | Freescale Semiconductor, Inc. | Apparatus and method for dynamic allocation of execution queues |
US9411589B2 (en) | 2012-12-11 | 2016-08-09 | International Business Machines Corporation | Branch-free condition evaluation |
US9256427B2 (en) | 2012-12-11 | 2016-02-09 | International Business Machines Corporation | Tracking multiple conditions in a general purpose register and instruction therefor |
US9582322B2 (en) | 2013-03-15 | 2017-02-28 | Soft Machines Inc. | Method and apparatus to avoid deadlock during instruction scheduling using dynamic port remapping |
US9348596B2 (en) | 2013-06-28 | 2016-05-24 | International Business Machines Corporation | Forming instruction groups based on decode time instruction optimization |
CN105549952A (zh) * | 2015-12-03 | 2016-05-04 | 上海高性能集成电路设计中心 | 一种基于记分牌原理的两级缓置发射的调控装置 |
US10402263B2 (en) * | 2017-12-04 | 2019-09-03 | Intel Corporation | Accelerating memory fault resolution by performing fast re-fetching |
US11669333B2 (en) | 2018-04-26 | 2023-06-06 | Qualcomm Incorporated | Method, apparatus, and system for reducing live readiness calculations in reservation stations |
US11327791B2 (en) * | 2019-08-21 | 2022-05-10 | Arm Limited | Apparatus and method for operating an issue queue |
US11327766B2 (en) * | 2020-07-31 | 2022-05-10 | International Business Machines Corporation | Instruction dispatch routing |
JP2023013799A (ja) * | 2021-07-16 | 2023-01-26 | 富士通株式会社 | 演算処理装置及び演算処理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5509130A (en) * | 1992-04-29 | 1996-04-16 | Sun Microsystems, Inc. | Method and apparatus for grouping multiple instructions, issuing grouped instructions simultaneously, and executing grouped instructions in a pipelined processor |
KR0175116B1 (ko) * | 1993-12-15 | 1999-04-01 | 윌리엄 더블유. 켈리 | 명령 인출 및 해제제어를 함유한 슈퍼스칼라 마이크로프로세서명령파이프라인 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2105806C (en) * | 1992-09-18 | 2001-11-20 | Paul V. Jeffs | Apparatus for implementing interrupts in pipelined processors |
US5644742A (en) * | 1995-02-14 | 1997-07-01 | Hal Computer Systems, Inc. | Processor structure and method for a time-out checkpoint |
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 |
US6061772A (en) * | 1997-06-30 | 2000-05-09 | Sun Microsystems, Inc. | Split write data processing mechanism for memory controllers utilizing inactive periods during write data processing for other transactions |
US6185675B1 (en) * | 1997-10-24 | 2001-02-06 | Advanced Micro Devices, Inc. | Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks |
-
2000
- 2000-01-06 US US09/478,311 patent/US6609190B1/en not_active Expired - Fee Related
- 2000-12-22 JP JP2000391228A patent/JP3540743B2/ja not_active Expired - Fee Related
- 2000-12-27 CN CNB001370073A patent/CN1163822C/zh not_active Expired - Fee Related
-
2001
- 2001-01-05 KR KR10-2001-0000614A patent/KR100407013B1/ko not_active IP Right Cessation
- 2001-09-27 HK HK01106811A patent/HK1037248A1/xx not_active IP Right Cessation
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5509130A (en) * | 1992-04-29 | 1996-04-16 | Sun Microsystems, Inc. | Method and apparatus for grouping multiple instructions, issuing grouped instructions simultaneously, and executing grouped instructions in a pipelined processor |
KR0175116B1 (ko) * | 1993-12-15 | 1999-04-01 | 윌리엄 더블유. 켈리 | 명령 인출 및 해제제어를 함유한 슈퍼스칼라 마이크로프로세서명령파이프라인 |
Also Published As
Publication number | Publication date |
---|---|
JP2001297000A (ja) | 2001-10-26 |
JP3540743B2 (ja) | 2004-07-07 |
CN1163822C (zh) | 2004-08-25 |
HK1037248A1 (en) | 2002-02-01 |
CN1303045A (zh) | 2001-07-11 |
KR20010070435A (ko) | 2001-07-25 |
US6609190B1 (en) | 2003-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100407013B1 (ko) | 1차 및 2차 송출큐를 갖는 마이크로프로세서 | |
KR100407014B1 (ko) | 명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서 | |
KR100303673B1 (ko) | 저장인스트럭션의결과전달방법및이를구현한프로세서 | |
US6728866B1 (en) | Partitioned issue queue and allocation strategy | |
KR100305310B1 (ko) | 멀티스레드프로세서의명령어및연관된인출요청의백그라운드완료 | |
JP3588755B2 (ja) | コンピュータシステム | |
US6662294B1 (en) | Converting short branches to predicated instructions | |
US5870582A (en) | Method and apparatus for completion of non-interruptible instructions before the instruction is dispatched | |
US5931957A (en) | Support for out-of-order execution of loads and stores in a processor | |
US7111126B2 (en) | Apparatus and method for loading data values | |
US6052776A (en) | Branch operation system where instructions are queued until preparations is ascertained to be completed and branch distance is considered as an execution condition | |
US5664137A (en) | Method and apparatus for executing and dispatching store operations in a computer system | |
JP3577052B2 (ja) | 命令発行装置及び命令発行方法 | |
US6725354B1 (en) | Shared execution unit in a dual core processor | |
US20020073301A1 (en) | Hardware for use with compiler generated branch information | |
JPH10283181A (ja) | プロセッサ内で命令を発行するための方法および装置 | |
JP3689369B2 (ja) | 2次リオーダ・バッファ・マイクロプロセッサ | |
JPH10283187A (ja) | プロセッサのアーキテクチャ状態を維持するための方法および装置 | |
KR100402820B1 (ko) | 기본 블럭 캐쉬를 이용하는 마이크로프로세서 | |
US6240507B1 (en) | Mechanism for multiple register renaming and method therefor | |
US20040199749A1 (en) | Method and apparatus to limit register file read ports in an out-of-order, multi-stranded processor | |
US7305586B2 (en) | Accessing and manipulating microprocessor state | |
US6311267B1 (en) | Just-in-time register renaming technique | |
US20100100709A1 (en) | Instruction control apparatus and instruction control method | |
US6658555B1 (en) | Determining successful completion of an instruction by comparing the number of pending instruction cycles with a number based on the number of stages in the pipeline |
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: 20071101 Year of fee payment: 5 |
|
LAPS | Lapse due to unpaid annual fee |