KR100402820B1 - 기본 블럭 캐쉬를 이용하는 마이크로프로세서 - Google Patents

기본 블럭 캐쉬를 이용하는 마이크로프로세서 Download PDF

Info

Publication number
KR100402820B1
KR100402820B1 KR10-2001-0000613A KR20010000613A KR100402820B1 KR 100402820 B1 KR100402820 B1 KR 100402820B1 KR 20010000613 A KR20010000613 A KR 20010000613A KR 100402820 B1 KR100402820 B1 KR 100402820B1
Authority
KR
South Korea
Prior art keywords
instruction
instructions
group
basic block
cache
Prior art date
Application number
KR10-2001-0000613A
Other languages
English (en)
Other versions
KR20010070434A (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 KR20010070434A publication Critical patent/KR20010070434A/ko
Application granted granted Critical
Publication of KR100402820B1 publication Critical patent/KR100402820B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache

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 세트의 마이크로프로세서 명령어를 수신하도록 구성된 명령어 크래킹 유닛(instruction cracking unit)을 포함한다. 명령어 크래킹 유닛은 명령어 세트를 명령어 그룹(instruction group)으로 편성하고 그룹 내의 명령어들 각각은 공통된 명령어 그룹 태그(common instruction group tag)를 공유한다. 프로세서는, 명령어 그룹 포멧과 호환되도록 조직되며 크래킹 유닛에 의해 발생된 명령어 그룹을 캐시하도록 구성된 기본 블럭 캐쉬 설비(basic block cache facility)를 포함한다. 프로세서의 실행 유닛은 명령어 그룹 내의 명령어를 실행시키는데 적합하다. 한 실시예에서, 명령어 그룹 내의 명령어의 실행 동안에 플러시(flush)를 유발하는 예외는 기본 블럭 캐쉬(basic block cache)로부터 페치된 명령어들만 플러시한다. 이런 식으로, 크래킹 유닛 파이프라인 내에서 대기중인(pending) 명령어들은 예외가 발생할때에도 보존되어 예외 상황 성능 저하를 감소시킨다. 한 실시예에서, 수신된 명령어들은 제1 명령어 포멧에 따라 포멧팅되고 제2 세트의 명령어들은 제2 명령어 포멧에 따라 포멧팅된다. 여기서, 제2 명령어 포멧은 제1 명령어 포멧보다 더 넓다. 기본 블럭 캐쉬는 기본 블럭 캐쉬의 대응하는 엔트리 내에 각각의 명령어 그룹을 저장하도록 적절히 구성된다. 한 실시예에서, 기본 블럭 캐쉬 내의 각각의 엔트리는 대응하는 기본 블럭 캐쉬 엔트리를 가리키는 엔트리 필드와, 실행될 다음 명령어 그룹을 가리키는 포인터 값 필드를 포함한다. 프로세서는 양호하게는 잘못예측된 분기에 응답하여 캐쉬 엔트리의 포인터 필드를 갱신하도록 구성된다.

Description

기본 블럭 캐쉬를 이용하는 마이크로프로세서{MICROPROCESSOR UTILIZING BASIC BLOCK CACHE}
본 발명은 마이크로프로세서 아키텍쳐에 관한 것으로, 보다 구체적으로는 명령어 그룹 아키텍쳐(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)를 더 포함할 수 있다. 명령어 히스토리 정보는, 명령어 그룹 내의 명령어가 다른 명령어에 의존성을 갖는지의 여부를 나타낼 수도 있고, 또는 명령어 그룹의 실행이 앞서 스토어 포워딩 예외(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) 내의 마지막 슬롯(304)에 분기 명령어를 할당한다. 또한, 크래킹 유닛(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) 내의 어드레스와 비교된다. 블럭 페치 유닛(213)에 의해 제공된 명령어 어드레스가 기본 블럭 캐쉬(213) 내에 있다면, 적절한 명령어 그룹이 송출큐(220)으로 포워딩된다. 블럭 페치 유닛(215)에 의해 제공되는 어드레스가 기본 블럭 캐쉬(213) 내에 있지 않다면, 명령어 어드레스가 페치 유닛(202)로 피드백되어 명령어 캐쉬(210)으로부터 적절한 명령어를 검색한다. (다이 크기) 면적 절약에 적합한 한 실시예에서, 기본 블럭 캐쉬(213)은 명령어 캐쉬(210)의 제거를 가능하게 해준다. 이 실시예에서, L2 캐쉬 또는 시스템 메모리와 같은 적절한 저장 장치로부터 명령어가 검색(retrieve)되어 크래킹 유닛(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)를 식별시켜준다. 따라서, 완료 테이블(118)의 엔트리1 내에 저장되는 명령어 그룹(302)는 GTAG 값이 1일 것이다. 이 실시예에서, 완료 테이블(118)은 낮은 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에 할당된다. 명령어가 궁극적으로 송출큐(120)으로부터 적절한 실행 파이프로 포워딩될 때, 실행 파이프는 명령어의 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)의 "하류(downstream)"측 상에 기본 블럭 캐쉬(213)을 구현함으로써, 본 발명은 크래킹 유닛(212) 내에서 대기중인 명령어들을 잘못된 분기 예측 플러시 경로로부터 제거함으로써 잘못된 분기 예측이후에 소거되어야 하는 파이프라인단의 개수를 감소시키고 성능 저하를 감소시킨다. 또한, 기본 블럭 캐쉬(213)은 디스페치 및 완료 제어 유닛(216) 및 완료 테이블(218)의 조직과 정합하는 구조를 갖는 캐시 메카니즘을 고려함으로써 중재 논리부의 조직을 단순화시키고 이하에 기술하는 바와 같이 기본 블럭 캐시(213)에 대한 유용한 확장성의 구현을 용이하게 해준다.
한 실시예에서, 기본 블럭 캐시(213)은, 예외, 플러시, 인터럽트, 또는 그밖의 성능을 제한하는 이벤트(집합적으로 또는 총칭적으로 예외 이벤트라 언급됨)를 초래하는 시나리오를 피하기 위해 동일한 명령어 그룹의 후속된 실행 동안에 사용될 수도 있는 정보를 기록함으로써 개선된 프로세서 성능을 가능케해주는 명령어 히스토리 정보(information history information)를 더 포함한다. 도 8에 도시된 기본 블럭 캐쉬(213)의 한 실시예에서, 명령어 히스토리 정보는 각각의 엔트리(502)의 명령어 히스토리 필드(508)에 저장된다. 명령어 히스토리 필드(508)에 저장될 수 있는 명령어의 유형으로서, 로드 명령어가 실행된 마지막 시간에 스토어 포워딩 예외를 초래하는 특정 로드 명령어를 포함하는 명령어 그룹을 고려해보자. 스토어 포워딩 예외는, 공통 메모리 레퍼런스(common memory reference)를 공유하는 스토어 명령의 (프로그램 순서상) 뒤에 오는 로드 명령어가 무순서 머쉰(out-of-order machine) 내에서 스토어 명령어 이전에 실행될 때 발생한다. 로드 명령어가 스토어 명령어 이전에 실행되면 로드 명령어는 레지스터로부터 유효하지 않은 값을 판독하게 되기 때문에, 명령어 플러시를 유발하는 예외가 발생된다. 기본 블럭 캐쉬(213)의 구조와 완료 및 제어 논리부(216)의 구조간의 유사성(parallelism)은 디스페치 및 완료 제어 논리부(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. 마이크로프로세서 내의 명령어를 처리하기 위한 방법에 있어서,
    제1 세트의 수신된 명령어를 하나의 명령어 그룹(instruction group)으로 변환시키는 단계와,
    상기 명령어 그룹을 기본 블럭 캐쉬(basic block cache)의 엔트리-각각의 캐쉬 엔트리는 하나의 명령어 그룹을 포함하도록 구성됨-에 저장하는 단계와,
    실행을 위해 상기 명령어 그룹 내의 명령어를 송출(issue)하는 단계와,
    상기 명령어 그룹 내의 명령어의 실행 동안에 발생된 예외(exception)에 응답하여, 상기 기본 블럭 캐쉬와 최종단(finish stage) 사이에 대기중인 명령어들만 플러시(flush)하는 단계
    를 포함하는 마이크로프로세서 내의 명령어 처리 방법.
  2. 제1항에 있어서, 상기 발생된 예외는 잘못된 분기 예측 예외(branch mispredict exception)를 포함하는 마이크로프로세서 내의 명령어 처리 방법.
  3. 제1항에 있어서, 상기 수신된 명령어들은 제1 명령어 포멧에 따라 포멧팅되고, 상기 명령어 그룹 내의 명령어들은 제2 명령어 포멧에 따라 포멧팅되는 마이크로프로세서 내의 명령어 처리 방법.
  4. 제3항에 있어서, 상기 제2 명령어 포멧은 상기 제1 명령어 포멧보다 더 넓은 마이크로프로세서 내의 명령어 처리 방법.
  5. 제4항에 있어서, 실행될 다음 명령어 그룹을 예측하는 포인터를 상기 캐쉬 설비의 각각의 엔트리에 할당하는 단계를 더 포함하는 마이크로프로세서 내의 명령어 처리 방법.
  6. 제5항에 있어서, 상기 명령어 그룹 중 하나를 실행시키는 동안에 잘못예측된 분기의 검출에 응답하여, 상기 잘못예측된 분기에 대응하는 상기 캐쉬 엔트리의 포인터를 갱신하는 단계를 더 포함하는 마이크로프로세서 내의 명령어 처리 방법.
  7. 마이크로프로세서에 있어서,
    제1 세트의 마이크로프로세서의 명령어를 수신하여 상기 명령어 세트를 하나의 명령어 그룹으로 편성하도록 구성된 명령어 크래킹 유닛과,
    상기 명령어 크래킹 유닛에 의해 발생된 명령어 그룹을 캐쉬하도록 구성된 기본 블럭 캐쉬 설비와,
    상기 명령어 그룹 내의 명령어를 실행시키기에 적합한 실행 유닛을 포함하고,
    상기 명령어 그룹 내의 한 명령어의 실행 동안에 발생되며 플러시를 유발하는 예외는, 상기 기본 블럭 캐쉬로부터 디스페치된 명령어들만 플러시하는 마이크로프로세서.
  8. 제7항에 있어서, 상기 기본 블럭 캐쉬 내의 명령어 그룹으로부터의 명령어를 검색(retrieve)하여 이를 송출큐로 포워딩하도록 구성된 디스페치 유닛을 더 포함하는 마이크로프로세서.
  9. 제7항에 있어서, 상기 수신된 명령어는 제1 명령어 포멧에 따라 포멧팅되며 상기 제2 세트의 명령어는 제2 명령어 포멧에 따라 포멧팅되고, 상기 제2 명령어 포멧은 상기 제1 명령어 포멧보다 넓은 마이크로프로세서.
  10. 제7항에 있어서, 상기 기본 블럭 캐쉬는, 각각의 명령어 그룹을 상기 기본 블럭 캐쉬의 대응하는 엔트리 내에 저장하도록 구성된 마이크로프로세서.
  11. 제10항에 있어서, 상기 기본 블럭 캐쉬는 상기 대응하는 기본 블럭 캐쉬 엔트리를 가리키는 엔트리 필드를 포함하는 마이크로프로세서.
  12. 제11항에 있어서, 상기 기본 블럭 캐쉬 내의 각각의 엔트리는 실행될 다음 명령어 그룹을 예측하는 포인터를 포함하는 마이크로프로세서.
  13. 제12항에 있어서, 상기 프로세서는 잘못 예측된 분기에 응답하여 캐쉬 엔트리의 포인터를 갱신하도록 구성된 마이크로프로세서.
  14. 프로세서와, 메모리와, 입력 수단과, 디스플레이를 포함하는 데이타 처리 시스템에 있어서, 상기 프로세서는
    제1 세트의 마이크로프로세서의 명령어를 수신하여 상기 명령어 세트를 하나의 명령어 그룹으로 편성하도록 구성된 명령어 크래킹 유닛과,
    상기 명령어 크래킹 유닛에 의해 발생된 상기 명령어 그룹을 캐쉬하도록 구성된 기본 블럭 캐쉬 설비와,
    상기 명령어 그룹 내의 명령어를 실행시키기에 적합한 실행 유닛을 포함하고,
    상기 명령어 그룹 내의 한 명령어의 실행 동안에 발생되며 플러시를 유발하는 예외는, 상기 기본 블럭 캐쉬로부터 디스페치된 명령어들만 플러시하는 데이타 처리 시스템.
  15. 제14항에 있어서, 상기 기본 블럭 캐쉬 내의 명령어 그룹으로부터 명령어를 검색하여 이를 송출큐로 포워딩하도록 구성된 디스페치 유닛을 더 포함하는 데이타 처리 시스템.
  16. 제14항에 있어서, 상기 수신된 명령어는 제1 명령어 포멧에 따라 포멧팅되며 상기 제2 세트의 명령어는 제2 명령어 포멧에 따라 포멧팅되고, 상기 명령어 포멧은 상기 제1 명령어 포멧보다 넓은 데이타 처리 시스템.
  17. 제14항에 있어서, 상기 기본 블럭 캐쉬는, 각각의 명령어 그룹을 상기 기본 블럭 캐쉬의 대응하는 엔트리 내에 저장하도록 구성된 데이타 처리 시스템.
  18. 제17항에 있어서, 상기 기본 블럭 캐쉬는 상기 대응하는 기본 블럭 캐쉬 엔트리를 가리키는 엔트리 필드를 포함하는 데이타 처리 시스템.
  19. 제18항에 있어서, 상기 기본 블럭 캐쉬 내의 각각의 엔트리는 실행될 다음 명령어 그룹을 예측하는 포인터를 포함하는 데이타 처리 시스템.
  20. 제19항에 있어서, 상기 프로세서는 잘못 예측된 분기에 응답하여 캐쉬 엔트리의 포인터를 갱신하도록 구성된 데이타 처리 시스템.
KR10-2001-0000613A 2000-01-06 2001-01-05 기본 블럭 캐쉬를 이용하는 마이크로프로세서 KR100402820B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US47830800A 2000-01-06 2000-01-06
US09/478,308 2000-01-06

Publications (2)

Publication Number Publication Date
KR20010070434A KR20010070434A (ko) 2001-07-25
KR100402820B1 true KR100402820B1 (ko) 2003-10-22

Family

ID=23899386

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2001-0000613A KR100402820B1 (ko) 2000-01-06 2001-01-05 기본 블럭 캐쉬를 이용하는 마이크로프로세서

Country Status (4)

Country Link
JP (1) JP3629551B2 (ko)
KR (1) KR100402820B1 (ko)
CN (1) CN1116638C (ko)
HK (1) HK1035946A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100395731C (zh) * 2006-02-23 2008-06-18 华为技术有限公司 处理器及其数据操作方法
JP2009163624A (ja) * 2008-01-09 2009-07-23 Nec Electronics Corp プロセッサ装置及び条件分岐処理方法
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
US10564979B2 (en) * 2017-11-30 2020-02-18 International Business Machines Corporation Coalescing global completion table entries in an out-of-order processor
US10572264B2 (en) * 2017-11-30 2020-02-25 International Business Machines Corporation Completing coalesced global completion table entries in an out-of-order processor
KR20190128392A (ko) * 2018-05-08 2019-11-18 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
US11409530B2 (en) * 2018-08-16 2022-08-09 Arm Limited System, method and apparatus for executing instructions

Also Published As

Publication number Publication date
CN1303044A (zh) 2001-07-11
JP2001229024A (ja) 2001-08-24
KR20010070434A (ko) 2001-07-25
JP3629551B2 (ja) 2005-03-16
CN1116638C (zh) 2003-07-30
HK1035946A1 (en) 2001-12-14

Similar Documents

Publication Publication Date Title
KR100407013B1 (ko) 1차 및 2차 송출큐를 갖는 마이크로프로세서
KR100407014B1 (ko) 명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서
US6728866B1 (en) Partitioned issue queue and allocation strategy
EP0871109B1 (en) Forwarding of results of store instructions
US6662294B1 (en) Converting short branches to predicated instructions
KR100305310B1 (ko) 멀티스레드프로세서의명령어및연관된인출요청의백그라운드완료
US6742111B2 (en) Reservation stations to increase instruction level parallelism
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
US5931957A (en) Support for out-of-order execution of loads and stores in a processor
JP3577052B2 (ja) 命令発行装置及び命令発行方法
US20020073301A1 (en) Hardware for use with compiler generated branch information
JPH10312282A (ja) 命令完了を改良するための方法および装置
KR19990087940A (ko) 단일클럭사이클내에불연속명령을페치하기위한방법및시스템
KR100402820B1 (ko) 기본 블럭 캐쉬를 이용하는 마이크로프로세서
JP3689369B2 (ja) 2次リオーダ・バッファ・マイクロプロセッサ
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
US6240507B1 (en) Mechanism for multiple register renaming and method therefor
US6754813B1 (en) Apparatus and method of processing information for suppression of branch prediction
CN116414458A (zh) 指令处理方法以及处理器
US6311267B1 (en) Just-in-time register renaming technique
US6473850B1 (en) System and method for handling instructions occurring after an ISYNC instruction
US6622236B1 (en) Microprocessor instruction fetch unit for processing instruction groups having multiple branch instructions
JPH0962508A (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: 20060904

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee