KR100407014B1 - 명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서 - Google Patents

명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서 Download PDF

Info

Publication number
KR100407014B1
KR100407014B1 KR10-2001-0000615A KR20010000615A KR100407014B1 KR 100407014 B1 KR100407014 B1 KR 100407014B1 KR 20010000615 A KR20010000615 A KR 20010000615A KR 100407014 B1 KR100407014 B1 KR 100407014B1
Authority
KR
South Korea
Prior art keywords
instruction
group
execution
instructions
microprocessor
Prior art date
Application number
KR10-2001-0000615A
Other languages
English (en)
Other versions
KR20010070436A (ko
Inventor
제임스알란 칼
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20010070436A publication Critical patent/KR20010070436A/ko
Application granted granted Critical
Publication of KR100407014B1 publication Critical patent/KR100407014B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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
    • G06F9/3834Maintaining memory consistency
    • 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
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

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

프로세서, 데이타 처리 시스템, 및 관련된 실행 방법이 제공된다. 프로세서는 명령어 세트를 수신하여 이를 명령어 그룹으로 편성하는데 적합하다. 그 다음, 명령어 그룹은 실행을 위해 디스페치(dispatch)된다. 명령어 그룹의 실행시에, 명령어 그룹과 연관된 예외 이벤트(exception event)를 나타내는 명령어 히스토리 정보가 기록된다. 그 후에, 명령어 그룹의 후속된 실행 동안에 예외 이벤트가 발생하는 것을 방지하기 위해 명령어 히스토리 정보에 응답하여 명령어의 실행이 수정된다. 프로세서는 명령어 캐쉬, L2 캐쉬 또는 시스템 메모리와 같은 저장 장치와, 크래킹 유닛(cracking unit)과, 기본 블럭 캐쉬를 포함한다. 크래킹 유닛은 저장 장치로부터 명령어 세트를 수신하도록 구성된다.

Description

명령어 히스토리 정보를 갖는 기본 블럭 캐쉬 마이크로프로세서{BASIC BLOCK CACHE MICROPROCESSOR WITH INSTRUCTION HISTORY INFORMATION}
본 발명은 마이크로프로세서 구조에 관한 것으로, 보다 구체적으로는 명령어 그룹 구조(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)를 이용하는 프로세서, 데이타 처리 시스템 및 방법에 관한 것이다. 프로세서는 명령어 세트를 수신하여 상기 명령어 세트를 명령어 그룹으로 편성한다. 그 다음, 프로세서는 명령어 그룹을 실행을 위해 디스페치한다. 명령어 그룹 실행시에, 이 명령어 그룹과 관련된 예외 이벤트를 나타내는 명령어 히스토리 정보가 기록된다. 그리고 나서, 프로세서는 상기 명령어 그룹의 이후 실행중에 예외 이벤트가 발생하는 것을 방지하기 위해 명령어 히스토리 정보에 응하여 명령어의 실행을 수정한다. 프로세서는 명령어 캐쉬, L2 캐쉬 또는 시스템 메모리와 같은 저장장치와, 크래킹 유닛 및 기본 블럭 캐쉬를 포함한다. 크래킹 유닛은 저장 장치로부터 한 세트의 명령어를 수신하도록 구성된다. 크래킹 유닛은 이 명령어 세트를 명령어 그룹으로 편성하는데 이용된다. 크래킹 유닛은 명령어 세트의 포멧을 제1 명령어 포멧으로부터 제2 명령어 포멧으로 수정할 수 있다. 기본 블럭 캐쉬의 구조는 명령어 그룹을 저장하기에 적합하다. 기본 블럭 캐쉬는 각각의 기본 블럭 캐쉬 엔트리에 대응하는 명령어 히스토리 필드를 포함한다. 명령어 히스토리 정보는 명령어 그룹과 관련된 예외 이벤트를 나타낸다. 양호한 실시예에서, 기본 블럭 캐쉬 내의 각각의 엔트리는 크래킹 유닛에 의해 생성된 하나의 명령어 그룹에 대응한다. 프로세서는, 명령어 그룹이 완료될 때 명령어 히스토리 필드 내에 정보를 저장하도록 구성된 완료 테이블 제어 논리부(completion table control logic)를 더 포함할 수 있다. 명령어 히스토리 정보는, 명령어 그룹 내의 명령어가 또다른 명령어에 대한 의존성(dependency)을 갖는지의 여부를 나타내거나, 명령어 그룹의 실행이 스토어 포워딩 예외(store forwarding exception)를 과거에 초래하였는지의 여부를 나타낼 수 있다. 이러한 실시예에서, 명령어 그룹의 실행이 스토어 포워딩 예외를 과거에 초래하였음을 검출한 것에 응하여, 프로세서는 정렬 모드(in-order-mode)로 실행되도록 구성된다.
본 발명은 1차 및 2차 송출큐를 이용하는 프로세서, 데이타 처리 시스템, 및 관련 방법에 관한 것이다. 프로세서는 명령어를 송출큐로 디스페치(dispatch)한다. 송출 유닛은 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 (20)

  1. 마이크로프로세서 명령어를 실행시키는 방법에 있어서,
    수신된 명령어 세트를 명령어 그룹으로 편성(organize)하고 상기 명령어 그룹내의 명령어들을 기본 블럭 캐쉬의 엔트리에 저장하는 단계와,
    실행을 위해 상기 명령어 그룹을 디스페치(dispatch)하는 단계와,
    상기 명령어 그룹이 실행되면, 상기 명령어 그룹내의 명령어가 또다른 명령어에 대한 의존성을 갖는지를 나타내는 명령어 히스토리 정보(instruction history information)를 기록하는 단계와,
    이후에 상기 명령어 그룹이 실행되는 동안에 상기 의존성으로 인하여 예외가 발생하는 것을 방지하기 위하여 상기 명령어 히스토리 정보에 응답하여 상기 명령어의 실행을 수정하는 단계
    를 포함하는 방법.
  2. 삭제
  3. 제1항에 있어서, 실행을 위해 상기 기본 블럭 캐쉬로부터 명령어 그룹을 송출하는 단계를 더 포함하는 방법.
  4. 제1항에 있어서, 상기 명령어 세트는 제1 명령어 포멧에 따라 포멧팅되고 상기 명령어 그룹 내의 명령어 세트는 제2 명령어 포멧에 따라 포멧팅되고, 상기 제2 명령어 포멧은 상기 제1 명령어 포멧보다 명령어당 더 많은 비트를 이용하는 방법.
  5. 제1항에 있어서, 명령어 히스토리 정보를 기록하는 상기 단계는, 상기 명령어 그룹이 스토어 포워딩 예외(store forwarding exception)를 초래하였는지의 여부를 나타내는 정보를 기록하는 단계를 포함하는 방법.
  6. 제5항에 있어서, 상기 명령어 그룹의 실행을 수정하는 단계는, 이후에 상기 명령어 그룹이 실행되기 이전에 정렬 실행 모드(in-order execution mode)로 진입하는 단계를 포함하는 방법.
  7. 마이크로프로세서에 있어서,
    저장 장치와,
    상기 저장 장치로부터 명령어 세트를 수신하도록 구성되며 상기 명령어 세트를 명령어 그룹으로 편성하도록 만들어진 크래킹 유닛과,
    상기 명령어 그룹을 저장하기에 적합한 기본 블럭 캐쉬-상기 기본 블럭 캐쉬는 기본 블럭 캐쉬 엔트리에 대응하는 명령어 히스토리 필드를 포함하고, 상기 명령어 히스토리 필드에 저장되는 명령어 히스토리 정보는 상기 명령어 그룹 내의 명령어가 또다른 명령어에 대한 의존성을 갖는지의 여부를 나타냄-
    를 포함하고, 상기 마이크로프로세서는 이후에 상기 명령어 그룹이 실행되는 동안에 상기 명령어 히스토리 정보에 응답하여 상기 명령어 그룹의 실행을 수정하도록 이루어져 상기 의존성으로 의한 예외를 초래하지 않고 상기 그룹이 실행되도록 하는 마이크로프로세서.
  8. 제7항에 있어서, 상기 기본 블럭 캐쉬 내의 각각의 엔트리는 상기 크래킹 유닛에 의해 생성된 명령어 그룹에 대응하는 마이크로프로세서.
  9. 제7항에 있어서, 상기 명령어 그룹이 완료될 때 상기 명령어 히스토리 필드 내에 정보를 저장하도록 구성된 완료 테이블 제어 논리부(completion table control logic)를 더 포함하는 마이크로프로세서.
  10. 삭제
  11. 제7항에 있어서, 상기 명령어 히스토리 정보는 상기 명령어 그룹의 실행이 스토어 포워딩 예외를 과거에 초래하였는지의 여부를 나타내는 마이크로프로세서.
  12. 제11항에 있어서, 상기 명령어 그룹의 실행이 스토어 포워딩 예외를 과거에 초래하였음을 검출한데 응답하여 상기 프로세서는 정렬 모드(in-order mode)에서 실행되도록 구성되는 마이크로프로세서.
  13. 제7항에 있어서, 상기 크래킹 유닛은 상기 명령어 세트의 포멧을 제1 명령어 포멧으로부터 제2 명령어 포멧으로 수정하고, 상기 제2 명령어 포멧은 상기 제1 명령어 포멧보다 명령어당 더 많은 비트를 이용하는 마이크로프로세서.
  14. 제7, 8, 9, 11, 12, 13항중 어느 한 항에 따른 적어도 하나의 마이크로프로세서와, 메모리와, 입력 수단과, 디스플레이 수단을 포함하는 데이타 처리 시스템.
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR10-2001-0000615A 2000-01-06 2001-01-05 명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서 KR100407014B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/477,569 2000-01-06
US09/477,569 US6697939B1 (en) 2000-01-06 2000-01-06 Basic block cache microprocessor with instruction history information

Publications (2)

Publication Number Publication Date
KR20010070436A KR20010070436A (ko) 2001-07-25
KR100407014B1 true KR100407014B1 (ko) 2003-11-28

Family

ID=23896471

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2001-0000615A KR100407014B1 (ko) 2000-01-06 2001-01-05 명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서

Country Status (5)

Country Link
US (1) US6697939B1 (ko)
JP (1) JP3683808B2 (ko)
KR (1) KR100407014B1 (ko)
CN (1) CN1155882C (ko)
HK (1) HK1035592A1 (ko)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100486259B1 (ko) * 2002-09-09 2005-05-03 삼성전자주식회사 컴퓨터 시스템의 동작 속도를 향상시키는 캐쉬 구조를 가지는 프로세서 및 캐쉬 관리 방법
JP3837386B2 (ja) * 2003-02-18 2006-10-25 誠 小川 情報処理装置
US20070186081A1 (en) * 2006-02-06 2007-08-09 Shailender Chaudhry Supporting out-of-order issue in an execute-ahead processor
US7380104B2 (en) * 2006-04-25 2008-05-27 International Business Machines Corporation Method and apparatus for back to back issue of dependent instructions in an out of order issue queue
US8082467B2 (en) * 2009-12-23 2011-12-20 International Business Machines Corporation Triggering workaround capabilities based on events active in a processor pipeline
US9104399B2 (en) * 2009-12-23 2015-08-11 International Business Machines Corporation Dual issuing of complex instruction set instructions
US9135005B2 (en) * 2010-01-28 2015-09-15 International Business Machines Corporation History and alignment based cracking for store multiple instructions for optimizing operand store compare penalties
US8495341B2 (en) * 2010-02-17 2013-07-23 International Business Machines Corporation Instruction length based cracking for instruction of variable length storage operands
US8938605B2 (en) * 2010-03-05 2015-01-20 International Business Machines Corporation Instruction cracking based on machine state
US8464030B2 (en) 2010-04-09 2013-06-11 International Business Machines Corporation Instruction cracking and issue shortening based on instruction base fields, index fields, operand fields, and various other instruction text bits
US8645669B2 (en) 2010-05-05 2014-02-04 International Business Machines Corporation Cracking destructively overlapping operands in variable length instructions
CN102541511B (zh) * 2010-12-30 2015-07-08 世意法(北京)半导体研发有限责任公司 用于可乱序执行指令的处理器的流水线排空
US9164772B2 (en) 2011-02-04 2015-10-20 Qualcomm Incorporated Hybrid queue for storing instructions from fetch queue directly in out-of-order queue or temporarily in in-order queue until space is available
US20120204008A1 (en) * 2011-02-04 2012-08-09 Qualcomm Incorporated Processor with a Hybrid Instruction Queue with Instruction Elaboration Between Sections
CN104657114B (zh) 2015-03-03 2019-09-06 上海兆芯集成电路有限公司 并行化的多分派系统和用于排序队列仲裁的方法
CN106557301B (zh) * 2015-09-25 2019-05-07 上海兆芯集成电路有限公司 经由多级保留站结构的发射指令分派方法
US10318302B2 (en) 2016-06-03 2019-06-11 Synopsys, Inc. Thread switching in microprocessor without full save and restore of register file
US10558463B2 (en) 2016-06-03 2020-02-11 Synopsys, Inc. Communication between threads of multi-thread processor
US10628320B2 (en) * 2016-06-03 2020-04-21 Synopsys, Inc. Modulization of cache structure utilizing independent tag array and data array in microprocessor
US10613859B2 (en) 2016-08-18 2020-04-07 Synopsys, Inc. Triple-pass execution using a retire queue having a functional unit to independently execute long latency instructions and dependent instructions
US10552158B2 (en) 2016-08-18 2020-02-04 Synopsys, Inc. Reorder buffer scoreboard having multiple valid bits to indicate a location of data
US11327791B2 (en) * 2019-08-21 2022-05-10 Arm Limited Apparatus and method for operating an issue queue
US10963402B1 (en) * 2019-12-28 2021-03-30 Advanced Micro Devices, Inc. Using age matrices for managing entries in sub-queues of a queue
US11650753B2 (en) * 2021-07-27 2023-05-16 Beijing Tenafe Electronic Technology Co., Ltd. Firmware-controlled and table-based conditioning for synchronous handling of exception cases

Citations (2)

* Cited by examiner, † Cited by third party
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 (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4176394A (en) * 1977-06-13 1979-11-27 Sperry Rand Corporation Apparatus for maintaining a history of the most recently executed instructions in a digital computer
US5333280A (en) * 1990-04-06 1994-07-26 Nec Corporation Parallel pipelined instruction processing system for very long instruction word
EP0454985B1 (en) * 1990-05-04 1996-12-18 International Business Machines Corporation Scalable compound instruction set machine architecture
US5214763A (en) * 1990-05-10 1993-05-25 International Business Machines Corporation Digital computer system capable of processing two or more instructions in parallel and having a coche and instruction compounding mechanism
US5287467A (en) * 1991-04-18 1994-02-15 International Business Machines Corporation Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit
CA2105806C (en) * 1992-09-18 2001-11-20 Paul V. Jeffs Apparatus for implementing interrupts in pipelined processors
US5925124A (en) * 1997-02-27 1999-07-20 International Business Machines Corporation Dynamic conversion between different instruction codes by recombination of instruction elements
US5887161A (en) * 1997-03-31 1999-03-23 International Business Machines Corporation Issuing instructions in a processor supporting out-of-order execution
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
US6108768A (en) * 1998-04-22 2000-08-22 Sun Microsystems, Inc. Reissue logic for individually reissuing instructions trapped in a multiissue stack based computing system
US6324640B1 (en) * 1998-06-30 2001-11-27 International Business Machines Corporation System and method for dispatching groups of instructions using pipelined register renaming

Patent Citations (2)

* Cited by examiner, † Cited by third party
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
HK1035592A1 (en) 2001-11-30
KR20010070436A (ko) 2001-07-25
JP2001297001A (ja) 2001-10-26
CN1155882C (zh) 2004-06-30
CN1303043A (zh) 2001-07-11
US6697939B1 (en) 2004-02-24
JP3683808B2 (ja) 2005-08-17

Similar Documents

Publication Publication Date Title
KR100407013B1 (ko) 1차 및 2차 송출큐를 갖는 마이크로프로세서
KR100407014B1 (ko) 명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서
KR100303673B1 (ko) 저장인스트럭션의결과전달방법및이를구현한프로세서
US6728866B1 (en) Partitioned issue queue and allocation strategy
KR100305310B1 (ko) 멀티스레드프로세서의명령어및연관된인출요청의백그라운드완료
US6662294B1 (en) Converting short branches to predicated instructions
JP3644959B2 (ja) マイクロプロセッサシステム
US5931957A (en) Support for out-of-order execution of loads and stores in a processor
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
US6725354B1 (en) Shared execution unit in a dual core processor
US20020073301A1 (en) Hardware for use with compiler generated branch information
JPH10312282A (ja) 命令完了を改良するための方法および装置
JP3577052B2 (ja) 命令発行装置及び命令発行方法
JP3689369B2 (ja) 2次リオーダ・バッファ・マイクロプロセッサ
KR100402820B1 (ko) 기본 블럭 캐쉬를 이용하는 마이크로프로세서
US7203821B2 (en) Method and apparatus to handle window management instructions without post serialization in an out of order multi-issue processor supporting multiple strands
US20040199749A1 (en) Method and apparatus to limit register file read ports in an out-of-order, multi-stranded processor
US6754813B1 (en) Apparatus and method of processing information for suppression of branch prediction
US7305586B2 (en) Accessing and manipulating microprocessor state
JP2000020307A (ja) 分散命令完了論理
US20100100709A1 (en) Instruction control apparatus and instruction control method
US6311267B1 (en) Just-in-time register renaming technique
JP3601785B2 (ja) マイクロプロセッサ内の命令取出ユニット

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: 20061101

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee