KR20020025687A - 마이크로프로세서의 명령 처리 방법 및 마이크로프로세서 - Google Patents

마이크로프로세서의 명령 처리 방법 및 마이크로프로세서 Download PDF

Info

Publication number
KR20020025687A
KR20020025687A KR1020010056804A KR20010056804A KR20020025687A KR 20020025687 A KR20020025687 A KR 20020025687A KR 1020010056804 A KR1020010056804 A KR 1020010056804A KR 20010056804 A KR20010056804 A KR 20010056804A KR 20020025687 A KR20020025687 A KR 20020025687A
Authority
KR
South Korea
Prior art keywords
instruction
sequence
instructions
microprocessor
branch
Prior art date
Application number
KR1020010056804A
Other languages
English (en)
Inventor
칼제임스알랜
무어챨스로버트
Original Assignee
포만 제프리 엘
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 포만 제프리 엘, 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 포만 제프리 엘
Publication of KR20020025687A publication Critical patent/KR20020025687A/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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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

Abstract

마이크로프로세서와 마이크로프로세서에서 명령들을 처리하는 방법이 개시된다. 처음에, 명령들의 시퀀스가 마이크로프로세서의 디스페치 유닛에 의해 디스페치 된다. 코드 시퀀스 인식 유닛(CSR)이 명령의 시퀀스 내에서 짧은 분기 시퀀스를 탐지하도록 구성되며, 이 경우 짧은 분기 시퀀스는 조건 세팅 명령, 조건부 분기 및 조건부 분기가 취해지지 않으면 실행되는 적어도 하나의 부가 명령을 포함한다. 그 다음, 짧은 분기 시퀀스는 조건 세팅 명령과 짧은 분기 시퀀스의 각 부가 명령에 대응하는 술어적 명령을 포함하는 술어적 명령어 시퀀스로 내부적으로 변환된다. 그 다음, 술어적 명령어 시퀀스는 프로세서의 적어도 하나의 기능 유닛에서 실행된다. 짧은 분기 시퀀스를 탐지하는 단계는 조건부 분기 명령과 관련된 상대 분기 어드레스를 계산하는 단계와 상대 분기 어드레스를 명시된 최대치와 비교하는 단계를 포함할 수 있다. 일실시예에서, 수신된 명령들의 시퀀스는 프로세서에 의해 명령어 그룹으로 변환될 수 있다. 이러한 실시예에서, 짧은 분기 시퀀스의 명령들의 명시된 최대의 수는 명령어 그룹에서 명령들의 수의 함수일 수 있다. 조건부 분기 문장이 명령어 그룹의 마지막 슬롯으로 바람직하게는 할당되는 실시예에 있어서, 짧은 분기 시퀀스의 부가 명령들이 후속하는 명령어 그룹에 놓인다. 짧은 분기 시퀀스를 술어적 명령어 시퀀스로 변환하는 단계는 짧은 분기 시퀀스의 각 부가 명령을 유사한 술어적 명령으로 변환하는 단계를 포함할 수 있다. 일실시예에서, 각 부가 명령을 그의 유사한 술어적 명령으로 변환하는 단계는 사전 결정된 오프셋에의해 각 부가 명령의 연산 코드를 조정함에 의해 짧은 분기 시퀀스에서 각 부가 명령에 대해 술어적 명령 연산 코드를 결정하는 단계를 포함한다. 다른 실시예에서, 연산 코드 변환은 연산 코드 룩업 테이블로서 달성될 수 있다.

Description

마이크로프로세서의 명령 처리 방법 및 마이크로프로세서{CONVERTING SHORT BRANCHES TO PREDICATED INSTRUCTIONS}
본 발명은 일반적으로 마이크로프로세서의 구조에 관한 것이며, 특히 하나 이상의 술어적 명령(predicated instruction)으로 변환하기에 적합한 명령어 그룹내에서 코드 시퀀스들(code sequences)을 검출하는 데에 명령어 그룹 구조(instruction group architecture)와 로직(logic)을 활용하는 마이크로프로세서에 관한 것이다.
마이크로프로세서 기술이 기가 헤르츠(giga hertz)의 성능을 가능하게 함에 따라, 마이크로프로세서 디자이너들에게 있어서 주요한 당면 과제는, 특정 명령어 세트 구조(instruction set architecture(ISA))로 작동하도록 디자인되어 설치된 소프트웨어의 거대한 베이스(base)와 호환성을 유지하면서 현 수준의 기술들을 이용하는 것이다. 이러한 문제를 취급하기 위해, 디자이너들은, 기존 ISA(an existing ISA)에 따라 포맷된 명령들을 수신하고, 그 수신된 명령들의 명령 포맷을 기가 헤르츠 실행 파이프라인들(pipelines)에서 작동하기에 더욱 적합한 내부 ISA(an internal ISA)로 변환하도록 된 "층형 구조(implemented layered architecture)"의 마이크로프로세서들을 구현해 왔다.
층형 구조가 프로세서 파이프라인에 더해지고, 주어진 시간에 잠재적으로 "비행중인(in flight)" 명령들의 수를 증가시키기 때문에, 층형 구조와 관련된 분기의 잘못된 예측 페널티(branch mispredict penalty)가 아주 중요한 문제이다. 분기의 잘못된 예측 페널티들을 최소화하기 위한 한가지 방법은 단순히 분기 명령들의 수를 줄이려는 시도이다. 분기의 잘못된 예측이 단지 분기 명령에서 발생할 수 있으므로, 분기 명령들을 포함하지 않는 코드 시퀀스는 결코 잘못 예측될 수 없다. 코드 시퀀스에서 분기 명령들의 수를 줄이는 잘 알려진 방법은 술어적 명령들(predicated instructions)의 사용을 포함한다. 술어적 명령들은, 만약 술어적 명령 자체 내에 명기된 조건이 충족되면, 고정 소수점 가산과 같은 함수를 수행하는 명령들을 지칭한다. 만약 조건이 충족되지 않으면, 명령은 NOP로서 취급된다.
술어적 명령들은 조건부 분기 명령이 뒤따르는 조건 세팅 명령(a condition setting instruction)(비교(compare)와 같은)과 조건의 상태에 따라 실행되는 짧은 코드 시퀀스를 포함하는 코드 시퀀스를 유익하게 대체할 수 있다. 이러한 시퀀스에서, 조건부 분기는 조건의 상태에 따르는 상대적으로 짧은 코드 시퀀스 주위로 분기하는데 사용된다. 이러한 코드 시퀀스의 술어적 명령 구현에 있어서, 조건부 분기 명령문(statement)이 제거되며, 짧은 코드 시퀀스내의 명령들 각각이 술어적 명령으로 바뀐다. 예를 들면, 코드 시퀀스:
COMP R1, 0 // 조건 세팅 명령
BEQ LBL // R1=0 이면, LBL1로 분기
ADD R2, R3, R4
ADD R2, R2, R5
LBL1, NOP
다음과 같은 술어적 명령들로 바뀔 수 있다:
COMP R1, 0 // 조건 세팅 명령
PADD R2, R3, R4, NE // 조건(NE)이 참일 때만 실행되는 술어 가산
PADD R2, R2, R5, NE // 조건(NE)이 참일 때만 실행되는 술어 가산
전형적으로, 술어적 명령들은 술어적 명령들을 지원하는 명령어 세트 및 하드웨어에서 사용하기 위해 디자인된 컴파일러에 의해 하이 레벨 소스 코드(highlevel source code)로부터 발생된다. 술어적 명령들은 그들의 비-술어적 유사성 명령어(non-predicated analogies)와는 별개의 연산 코드(opcode)를 가질 수 있다. 하지만, 술어적 명령들을 포함하지 않는 명령어 세트에 대한 코드를 컴파일할 때, 컴파일러는 조건부 분기 명령을 포함하는 실행가능한 코드를 발생하도록 강요된다. 짧은 분기에 특징이 있는 코드 시퀀스를 인지할 수 있고, 더 나아가서, 시퀀스를 명령 디코드나 디스페치(dispatch)하는 동안 술어적 코드 시퀀스로 변환하고, 술어적 코드 시퀀스를 실행할 수 있는 프로세서 하드웨어를 구현하는 것이 아주 바람직할 것이다. 만약 술어적 실행 하드웨어(predicated execution hardware)를 이용하는 데 기존 코드의 재컴파일이 요구되지 않도록, 이러한 술어적 명령 변환이 시스템 사용자에게 투명하다면, 더욱 바람직할 것이다.
앞에서 설명된 목적들은 마이크로프로세서와, 마이크로프로세서에서 명령들을 처리하는 방법으로써 달성된다. 처음에, 명령들의 시퀀스는 마이크로프로세서의 디스페치 유닛에 의해 디스페치된다. 코드 시퀀스 인식 유닛(CSR)은 명령의 시퀀스 내에서 짧은 분기 시퀀스를 검출하도록 구성되며, 여기서 짧은 분기 시퀀스는 조건 세팅 명령, 조건부 분기 및 조건부 분기가 취해지지 않으면 실행되는 적어도 하나의 부가 명령을 포함한다. 그 다음, 짧은 분기 시퀀스는 조건 세팅 명령과 짧은 분기 시퀀스 내의 각각의 부가 명령에 대응하는 술어적 명령을 포함하는 술어적 명령어 시퀀스로 내부적으로 변환된다. 그 다음, 술어적 명령어 시퀀스는 프로세서의 적어도 하나의 기능 유닛에서 실행된다. 짧은 분기 시퀀스의 검출은 조건부 분기 명령과 관련된 상대 분기 어드레스를 계산하는 것과 그 상대 분기 어드레스를 명시된 최대치(specified maximum)와 비교하는 것을 포함할 수 있다. 일실시예에서, 수신된 명령들의 시퀀스는 프로세서에 의해 명령어 그룹으로 변환될 수 있다. 이러한 실시예에서, 짧은 분기 시퀀스 내의 명령들의 명시된 최대 수는 명령어 그룹 내의 명령들의 수의 함수일 수 있다. 조건부 분기 명령문이 명령어 그룹의 마지막 슬롯에 바람직하게는 할당되는 실시예에서, 짧은 분기 시퀀스의 부가 명령들이 다음 후속 명령어 그룹에 놓인다. 짧은 분기 시퀀스를 술어적 명령어 시퀀스로 변환하는 것은, 짧은 분기 시퀀스의 각 부가 명령을 유사한 술어적 명령으로 변환하는 것을 포함할 수 있다. 일실시예에서, 각 부가 명령을 그와 유사한 술어적 명령으로 변환하는 것은, 사전 결정된 오프셋(offset)에 의해 각 부가 명령의 연산 코드를 조정함에 의해 짧은 분기 시퀀스의 각 부가 명령에 대한 술어적 명령 연산 코드를 결정하는 것을 포함한다. 다른 실시예에서, 연산 코드 변환은 연산 코드 룩업(lookup) 테이블을 사용하여 달성될 수 있다.
도 1은 본 발명의 일실시예에 따른 마이크로프로세서를 포함하는 데이터 처리 시스템의 선택된 구성 요소들의 블록도.
도 2는 본 발명의 일실시예에 따른 마이크로프로세서의 선택된 구성 요소들의 블록도.
도 3은 도 2의 프로세서의 일실시예에 의해 수행되는 명령어 크래킹 기능의 예들을 설명.
도 4는 본 발명의 일실시예에 따른 마이크로프로세서의 선택된 부분들을 설명하는 블록도.
도 5는 도 2의 마이크로프로세서의 기본 캐시 블록의 블록도.
도 6은 도 2의 프로세서가 직면할 수도 있는 다양한 분기 시나리오들의 실례를 도시한 도면.
도 7은 본 발명에 사용하기에 적합한 완료 테이블(completion table)의 블록도.
도면의 주요 부분에 대한 부호의 설명
101a, 101b, 101c... : CPU102 : 롬
250 : 램103 : 하드디스크
105 : 테이프 장치107 : 입/출력 어댑터
106 : 통신 어댑터 108 : 사용자 인터페이스 어댑터
109 : 키보드110 : 마우스
111 : 스피커112 : 디스플레이 어댑터
136 : 디스플레이202 : 페치 유닛
210 : 명령어 캐시212 : 크래킹 유닛
213 ; 기본 블록 캐시214 : 디스페치 유닛
215 : 블록 페치216 : 디스페치 및 완료 제어 장치
218 : 완료 테이블220 : 발행 큐
224 : 분기 장치226 : LSU
228 : FXU230 : FPU
본 발명의 다른 목적들과 이점들은 다음의 상세한 설명과 여기에 첨부된 도면들을 이해함에 의해 명백해질 수 있다.
본 발명이 다양한 변경과 대안의 형태들의 여지가 있는 한편, 특정 실시예들이 도면들의 예로서 보여지며, 본 문서에서 상세히 설명될 것이다. 그러나, 본 문서에 제안된 도면들과 상세한 설명이 본 발명을 나타낸 특정 실시예로 제한하려는 의도가 아니며, 그와 반대로, 본 발명은 모든 변경들, 등가물들, 대안들이 첨부된 특허 청구의 범위에 의해 규정되는 본 발명의 정신과 범위에 포함되는 것으로 이해해야 할 것이다.
이제 도 1을 보면, 본 발명에 따른 데이터 처리 시스템(100)의 실시예가 도시된다. 시스템(100)은 하나 이상의 중앙 처리 유닛들(프로세서들)(101a,101b, 101c) 등등(통칭해서 전반적으로 프로세서(들)(101)로서 지칭됨)을 포함한다. 일실시예에서, 각 프로세서(101)는 축소 명령 세트 컴퓨터(Reduced Instruction Set Computer (RISC)) 마이크로프로세서를 포함할 수 있다. 일반적으로 RISC 프로세서들에 관한 부가적인 정보는 C. May et al. Ed.,PowerPC® Architecture: A Specification for a New Family of RISC Processors,(Morgn Kaufmann, 1994 2d edition)에서 이용할 수 있다. 프로세서들(101)은 시스템 버스(113)에 의하여 시스템 메모리(250)와 다양한 다른 구성 요소들에 연결된다. 롬(ROM)(102)은 시스템 버스(113)에 연결되고, 기본 입/출력 시스템(basic input/output system(BIOS))을 포함할 수 있으며, 이러한 BIOS는 시스템(100)의 기본 기능들을 제어한다. 도 1은 시스템 버스(113)에 연결되는 I/O 어댑터(107)와 네트워크 어댑터(106)를 더욱 도시한다. I/O 어댑터(107)는 시스템 버스(113)를 하드디스크(103) 및/또는 테이프 저장 드라이브)105)와 같은 대용량 저장 장치들(mass storage devices)(104)과 링크시킨다. 네트워크 어댑터(106)는, 데이터 처리 시스템(100)이 다른 이러한 시스템들과 통신할 수 있게 해주는 외부 네트워크와 버스(113)를 서로 연결시킨다. 디스플레이 모니터(136)는 디스플레이 어댑터(112)에 의해 시스템 버스(113)에 연결되며, 그래픽 지향 애플리케이션들의 성능을 개선하기 위한 그래픽 어댑터와 비디오 제어 장치(controller)를 포함할 수도 있다. 일실시예에서, 어댑터들(107,106,112)은 중간 버스 브리지(intermediate bus bridge)(표시되지 않음)에 의해 시스템 버스(113)에 연결되는 하나 이상의 I/O 버스들에 연결될 수 있다. 하드디스크 제어 장치들, 네트워크 어댑터들 및 그래픽 어댑터들과 같은 주변 장치들을 연결하기에 적합한 I/O 버스들이, PCI(Peripheral Components Interface) SIG(Special Interest Group), Hillsboro, OR로부터 입수 할 수 있는 PCI 로컬 버스 사양 Rev. 2.2(PCI Local Bus Specification Rev. 2.2)━이는 본 명세서에서 참조로 인용됨━에 따라 명시되는 PCI 버스를 포함한다. 부가적인 입/출력 장치들은 사용자 인터페이스 어댑터(108)에 의해 시스템 버스(113)에 연결되는 것으로 도시된다. 키보드(109), 마우스(110) 및 스피커(111)는 모두 사용자 인터페이스 어댑터(108)에 의해 버스(113)에 링크되며, 사용자 인터페이스 어댑터(108)는, 예를 들면, 다중 디바이스 어댑터들을 단일의 집적 회로로 집적한 슈퍼 I/O 칩(Super I/O chip)을 포함할 수 있다. 이러한 칩의 하나에 관한 부가적인 정보에 있어서, 독자는 www.national.com에서 네셔널 반도체(National Semiconductor Corporation)(1998. 11)로부터PC87338/PC97338 ACPI 1.0PC98/99 Compliant SuperI/O데이터 시트를 조회할 수 있다. 이리하여, 도 1에서 구성되는 바와 같이, 시스템(100)은 프로세서들(101)의 형태로 처리 수단을 포함하며, 시스템 메모리(250)와 대용량 저장 장치(104)를 포함하는 저장 수단, 키보드(109)와 마우스(110)와 같은 입력 수단,스피커(111)와 디스플레이(136)를 포함하는 출력 수단을 포함한다. 일실시예에서, 시스템 메모리(250)와 대용량 저장 장치(104)의 일부는 IBM(IBM Corporation)의 AIX 운영체제나 도 1에서 보여진 다양한 구성 요소들의 기능들을 통합(조정)하는 다른 적절한 운영체제와 같은 운영체제를 총괄적으로 저장한다. AIX 운영체제에 관한 부가적인 세부 사항은AIX Version 4.3 Technical Reference에서 이용할 수 있다:Base Operating System and Extensions, Volumes 1 과 2(주문 번호(order number) SC23-4159와 SC23-4160);AIX Version 4.3 System User's Guide : Communications and Networks(주문 번호 SC23-4122); 그리고,AIX Version 4.3 System User's Guide: www.ibm.com에서 IBM의Operating System and Devices(주문 번호 SC23-4121), 본 문서에 참조로 인용됨.
이제 도 2를 살펴보면, 본 발명의 일실시예에 따른 프로세서(101)의 단순한 블록도가 설명된다. 도 2에서 도시되는 프로세서(101)는 페치될 다음 명령의 어드레스를 발생하기에 적합한 명령어 페치 유닛(202)을 포함한다. 페치 유닛(202)에 의해 발생된 명령어 어드레스는 명령어 캐시(210)에 제공된다. 페치 유닛(202)는, 그 이름이 말하는 바와 같이, 프로그램 실행 흐름(flow)을 초래하는 판정 결과에 대해 정통한 예측(informed prediction)을 하도록 구성된 분기 예측 로직(branch prediction logic)를 포함할 수 있다. 분기 판정들을 정확하게 예측하는 능력은 명령들을 추론적으로(speculatively) 그리고 무순서로(out-of-order) 실행함에 의해 개선된 성능을 이루기 위한 프로세서(101)의 전체적인 능력에 있어서 중요한 요소이다. 페치 유닛(202)에 의해 발생된 명령어 어드레스는 명령어 캐시(210)에 제공되며, 고속의 저장 장치 내의 시스템 메모리의 내용들의 서브세트(subset)를 포함한다. 명령어 캐시(210)에 저장된 명령들은 바람직하게는 제 1 ISA에 따라 우선적으로 포맷되며, 제 1 ISA는, 전형적으로 예를 들면, PowerPC®나 x86 호환 명령어 세트와 같은 레거시 ISA(legacy ISA)이다. PowerPC®명령어 세트에 관한 상세한 정보는 모토롤라로부터 이용할 수 있는PowerPC® 620 RISC Microprocessor User's Manual에서 이용할 수 있다(주문 번호 MPC620UM/AD). 이는 본 문서에 참조로 인용된다. 만약, 페치 유닛(202)로부터 발생된 어드레스 명령이 명령어 캐시(210)에서 현재 복제되는 시스템 메모리 위치에 대응하면, 명령어 캐시(210)는 그 대응하는 명령을 크래킹 유닛(212)으로 전달한다. 만약, 페치 유닛(202)으로부터 발생된 명령어 어드레스에 대응하는 명령이 현재 명령어 캐시(210)에 있지 않는다면(즉, 페치 유닛(202)에 의해 제공된 명령어 어드레스가 명령 캐시(210)에서 미스(miss)되면), 그 명령이 크래킹 유닛(212)으로 전달될 수 있기 전에, 그 명령이 L2 캐시(도시되지 않음) 혹은 시스템 메모리로부터 페치되야만 한다.
크래킹 유닛(212)은 입력 명령 스트림(incoming instruction stream)을 수정하여, 높은 동작 주파수(즉, 1 GHz를 넘는 동작 주파수)의 기본적인 실행 파이프라인에서 실행하기에 최적화된 명령들의 세트를 생성하기에 적합하다. 일실시예에서, 예를 들면, 크래킹 유닛(212)는 PowerPC®마이크로프로세서에 의해 지원되는 명령어 세트와 같은 32-비트 폭의 ISA(32-bit wide ISA)의 명령들을 수신하고, 명령들을 기가 헤르츠의 주파수 범위와 그 이상에서 동작하는 고속의 실행 유닛에서의 실행을 용이하게하는, 바람직하게 보다 넓은 폭의 제 2 ISA로 변환한다. 크래킹 유닛(212)에 의해 발생된 명령들의 보다 넓은 폭의 포맷은, 예컨대, 제 1 포맷에 따라 포맷된 크래킹 유닛(212)에 의해 수신된 명령들내에 단지 함축되고 참조된 (피연산자(operand) 값들과 같은) 정보를 포함하는 명시적 필드(explicit fields)를 포함할 수 있다. 일실시예에서, 예를 들면, 크래킹 유닛(212)에 의해 발생된 명령들의 ISA는 64비트 이상의 비트 폭을 갖는다.
일 실시예에서, 본 명세서에서 고려되는 크래킹 유닛(212)은 명령들을 제 1 포맷으로부터, 바람직하게 더욱 폭이 넓은, 제 2 포맷으로 변환하는 것 외에 또, 페치된 명령들의 세트를 명령어 "그룹들(302)"로 조직하도록 디자인되며, 그 예들이 도 3에서 도시된다. 각 명령어 그룹(302)은 명령 슬롯들(304a,304b) 등등(통칭해서 전반적으로 명령 슬롯들(304)로서 지칭됨)의 세트를 포함한다. 명령들의 세트를 명령어 그룹들로 조직하는 것은, 무엇보다도, 다수의 비행중(in-flight) 명령에 대한 재명령 레지스터 매핑 및 완료 테이블(rename register mapping and completion table)을 유지하는데 필요한 로직(logic)을 단순화함에 의해, 고속의 실행을 촉진한다.
도 3에서, 크래킹 유닛(212)에 의해 수행될 수 있는 명령어 그룹의 3가지 예가 도시된다. 예 1에서, 참조 번호(301)로 표시된 명령들의 세트는 크래킹 유닛(212)에 의해 단일 명령어 그룹(302)으로 변환된다. 본 발명의 도시된 실시예에서, 각 명령어 그룹(302)은 참조 번호들(304a), (304b), (304c), (304d) 및 (304e)에 의해 표시되는 다섯 개의 슬롯을 포함한다. 각 슬롯(304)은 단일 명령을포함할 수 있다. 이러한 실시예에서, 각 명령어 그룹은 최대 다섯 개의 명령들을 포함할 수 있다. 일실시예에서, 크래킹 유닛(212)에 의해 수신된 명령들(301)의 세트의 명령들은, 앞에서 논의된 바와 같이, 제 1 ISA에 따라 포맷되고, 그룹들(302)에 저장된 명령들은 제 2 보다 넓은 폭의 포맷에 따라 포맷된다. 명령어 그룹들의 사용은 개별적으로 태그가 붙고 추적(track)돼야만 하는 명령들의 수를 줄임에 의해, 재명령 복구 및 완료 테이블 로직(renaming recovery and completion table logic)을 단순화한다. 따라서, 명령어 그룹들의 사용은 무순서 프로세서(out-of-order processor)에서 계류중인 명령들을 추적하는 프로세스를 단순화하려는 일환으로 각 명령에 대한 몇 가지 정보를 희생하는 것을 고려한다.
도 3의 예 2는 본 발명의 일실시예에 따른 크래킹 유닛(212)에 의해 수행되는 명령의 그룹화의 제 2 예이다. 이러한 예는 더욱 빠른 실행을 위해 복잡한 명령들을 단순한 명령들의 그룹으로 분해하는 크래킹 유닛(212)의 능력을 보여준다. 도시된 예에서, 두개의 LDU(load-with-update) 명령의 시퀀스가, 슬롯(304a, 304c)에서 각기 한 쌍의 로드 명령과 슬롯(304b,304d)에서 각기 한 쌍의 ADD 명령을 포함하는 명령어 그룹으로 분해된다. 이러한 예에서, 그룹(302)은 분기 명령을 포함하지 않기 때문에, 명령어 그룹(302)의 마지막 슬롯(304e)은 명령을 포함하지 않는다. PowerPC®의 LDU(load-with-update) 명령은, 다른 명령어 세트들의 유사한 명령들처럼, 그 명령이 다중 범용 레지스터들(general purpose registers(GPRs))의 내용들에 영향을 미치는 복잡한 명령이다. 특히 LDU 명령은 제 1 GPR의 내용들에 영향을 미치는 로드 명령과 제 2 GPR에 영향을 미치는 ADD 명령으로 분해될 수 있다. 따라서, 도 3의 예 2의 명령어 그룹(302)에서, 두개 이상의 명령 슬롯들(304)내의 명령들이 크래킹 유닛(212)에 의해 수신된 단일 명령에 대응한다.
예 3에서, 크래킹 유닛(212)에 진입하는 단일 명령은 다중 그룹들(302)을 점유하는 명령들의 세트로 분해된다. 보다 구체적으로, 예 3은 다중 로드(load multiple(LM)) 명령을 설명한다. (PowerPC®의 명령어 세트에 따르는) 다중 로드 명령은 메모리의 연속적인 위치들의 내용들을 연속하여 번호가 매겨진 GPR들로 로드한다. 도시된 예에서, 여섯 개의 연속적인 메모리 위치들의 다중의 로드는 여섯 개의 로드 명령들로 분해된다. 프로세서(101)의 도시된 실시예에 따른 각 그룹(302)이 기껏해야 다섯 개의 명령들을 포함하고, 다섯 번째 슬롯(304e)이 분기 명령들을 위해 유보되어 있기 때문에, 여섯 개의 레지스터들의 다중 로드는 각기 두 개의 그룹(302a,302b)로 분해된다. 로드 명령들 중의 4개는 제 1그룹(302a)에 저장되고, 나머지 두 개의 로드 명령은 제 2그룹(302b)에 저장된다. 따라서, 예 3에서, 단일 명령이 다중 명령어 그룹들(302)을 점유하는 명령들의 세트로 분해된다.
이제 도 2로 돌아가면, 크래킹 유닛(212)의 바람직한 실시예에 의해 발생된 명령어 그룹들(302)은 실행 계류중(pending execution)으로 저장되는 기본 블록 캐시(213)로 전달된다. 도 5를 언급하면, 기본 블록 캐시(213)의 실시예가 도시된다. 도시된 실시예에서, 기본 블록 캐시(213)는 (502a)에서 (502n)까지의 엔트리들(통칭해서 전반적으로 기본 블록 캐시 엔트리들(502)로서 지칭됨)의 세트를 포함한다. 일실시예에서, 기본 블록 캐시(213)의 각 엔트리(502)는 단일 명령어 그룹(302)을포함한다. 게다가, 각 엔트리(502)는 엔트리 식별자(entry identifier)(504), 포인터(506) 및 명령어 어드레스(IA) 필드(507)를 포함할 수 있다. 각 엔트리(502)에 대한 명령어 어드레스 필드(507)는 완료 테이블(218)의 IA 필드(704)와 유사하다. 일실시예에서, 기본 블록 캐시(504)의 각 엔트리(502)는 완료 테이블(218)의 엔트리에 대응하며, 명령어 어드레스 필드(507)는 대응하는 명령어 그룹(302)에서 첫번째 명령의 명령어 어드레스를 나타낸다. 일실시예에서, 포인터(506)는 분기 예측 알고리즘, 분기 히스토리(history) 테이블, 혹은 다른 적절한 분기 예측 메카니즘(branch prediction mechanism)에 기초하여 실행될 다음의 명령어 그룹(302)의 엔트리 식별자를 나타낸다.
앞에서 지적된 바와 같이, 크래킹 유닛(212)를 사용하여 명령어 그룹(302)을 형성하는 본 바람직한 실시예는 분기 명령들을 각 그룹(302)의 마지막 슬롯(304)으로 할당한다. 게다가, 크래킹 유닛(212)의 바람직한 실시예는 그룹(302)의 분기 명령의 수가 하나의(또는 그 보다 적은) 명령어 그룹들(302)을 발생한다. 이러한 배열에서, 각 명령어 그룹(302)은, 도 6(여기에서 명령 그룹들(302)은 그들의 대응하는 명령어 그룹 엔트리(504) 값들에 의해 나타내짐)에서 나타내지는 바와 같이, 분기 트리(600)의 "다리(leg)"를 나타내는 것으로 생각될 수 있다. 예를 들면, 제 1 명령어 그룹(302a)은 그것의 엔트리 번호(1)에 의해 표시된다. 예로서, 프로세서(101)의 분기 예측 메카니즘은, 다리 2(제 2 그룹(302b)에 대응함)가 다리 1에 후속하여 실행될 것이며, 다리 3 이 다리 2 에 후속하여 실행될 것임을 예측한다고 가정하자. 본 발명의 일실시예에 따른 기본 블록 캐시(213)는 실행될 다음그룹(302)을 나타내도록 포인터(506)를 세팅함에 의해 이러한 분기 예측들을 반영한다. 기본 블록 캐시(213)의 각 엔트리(502)의 포인터(506)는 디스페치될 다음 명령어 그룹(302)을 결정하는데 활용될 수 있다.
기본 블록 캐시(213)는 페치 유닛(202)이 명령어 캐시(210)와 작동하는 방법과 유사하게 블록 페치 유닛(215)과 함께 작동한다. 보다 구체적으로, 블록 페치 유닛(215)은 기본 블록 캐시(213)에 제공되는 명령어 어드레스를 생성하는 것을 담당한다. 블록 페치 유닛(215)에 의해 제공되는 명령어 어드레스는 기본 블록 캐시(213)의 명령어 어드레스 필드들(507)의 어드레스들과 비교된다. 만약, 기본 블록 캐시(213)에 의해 제공된 명령어 어드레스가 기본 블록 캐시내(213)에서 히트(hit)하면, 적절한 명령어 그룹이 발행 큐(issue queues)(220)로 전달된다. 만약, 블록 페치 유닛(215)에 의해 제공된 어드레스가 기본 블록 캐시(213)에서 미스(miss)되면, 명령어 어드레스는 명령어 캐시 (210)로부터 적절한 명령들을 인출하기 위해 페치 유닛(202)로 피드백된다. 그것의 영역(다이 사이즈(die size))의 보존에 적합한 일실시예에서, 기본 블록 캐시(213)는 명령어 캐시(210)의 제거를 가능하게 한다. 이러한 실시예에서, 명령들은 L2 캐시나 시스템 메모리와 같은 적합한 저장 장치로부터 인출되고, 크래킹 유닛(212)로 직접 제공된다. 만약, 블록 페치 유닛(213)에 의해 발생된 명령어 어드레스가 기본 블록 캐시(213)에서 미스되면, 적절한 명령들이 명령어 캐시(210)로부터가 아니라 L2 캐시 혹은 시스템 메모리로부터 인출된다.
프로세서(101)의 도시된 실시예는 디스페치 유닛(214)을 더욱 나타낸다. 디스페치 유닛(214)은, 각 명령어 그룹의 명령들을 그들의 해당 발행 큐(220)로 전달하기 이전에, 모든 필요한 자원들이 이용할 수 있다는 것을 보증하는 역할을 한다. 게다가 디스페치 유닛(214)은 무순서 실행을 용이하게 하기 위해, 명령들이 발행되었던 순서 및 이들 명령의 완료상태를 추적하는 디스페치 및 완료 제어 로직(216)과 통신한다. 크래킹 유닛(212)이 입력 명령들을, 앞에서 논의된 바와 같이, 명령어 그룹들로 조직하는 마이크로프로세서(101)의 실시예에서, 각 명령어 그룹(302)은 발행된 명령어 그룹들의 순서를 운반하는 그룹 태그(GTAG)를 완료 및 제어 로직(216)에 의해 할당받는다. 예로서, 디스페치 유닛(214)는 단조증가하는 값들을 연속적인 명령어 그룹들에 할당할 수 있다. 이러한 배열에서, 낮은 GTAG 값들을 갖는 명령어 그룹들은 큰 GTAG 값들을 갖는 명령어 그룹들에 앞서 발행된 것이다(즉, 보다 나이가 적다). 비록 프로세서(101)의 도시된 실시예가 별개의 기능 블록으로서 디스페치 유닛(214)를 나타내지만, 기본 블록 캐시(213)의 그룹 명령의 조직화는 그 캐시(213)내에 디스페치 유닛(214)의 기능성을 통합할 수 있게 한다. 따라서, 일실시예에서, 디스페치 유닛(214)는 기본 블록 캐시(213)내에서 통합되고, 발행 큐(220)에 직접 연결된다.
디스페치 및 완료 제어 논리(216)와 관련하여, 완료 테이블(218)이 발행된 명령어 그룹들의 상태를 추적하기 위해 본 발명의 일실시예에서 활용된다. 도 7로 돌아가면, 완료 테이블(218)의 일실시예의 블록도가 있다. 도시된 실시예에서, 완료 테이블(218)은 (702a)에서 (702n)까지의 엔트리들의 세트(본 명세서에서는 통칭하여 전반적으로 완료 테이블 엔트리들(702)로서 지칭됨)의 세트를 포함한다. 이러한 실시예에서, 완료 테이블(218)의 각 엔트리(702)는 명령어 어드레스(IA) 필드(704)와 상태 비트 필드(706)를 포함한다. 이러한 실시예에서, 각 명령어 그룹(302)의 GTAG 값은 명령어 그룹(302)에 대응하는 완료 정보가 저장된 완료 테이블의 엔트리(702)를 식별한다. 이리하여, 완료 테이블(118)의 엔트리(1)에 저장된 명령어 그룹(302)은 1의 GTAG 값을 가질 것이다. 이러한 실시예에서, 완료 테이블(218)은 낮은 GTAG 값을 갖는 명령어 그룹이 큰 GTAG 값을 갖는 명령어 그룹보다 실제로 나이가 적다(younger)는 것을 나타내는 랩어라운드(wrap around) 비트를 포함한다. 일실시예에서, 명령어 어드레스 필드(704)는 대응하는 명령어 그룹(302)의 제 1 슬롯(304a)에 명령어 어드레스를 포함한다. 상태 필드(706)는, 예를 들면, 완료 테이블(218)의 대응하는 엔트리(702)가 이용할 수 있는 것인지, 혹은 엔트리가 계류중인 명령어 그룹에 할당되었는지를 나타내는 하나 이상의 상태 비트들을 포함할 수 있다.
도 2에 도시된 프로세서(101)의 실시예에서, 명령들은 디스페치 유닛(214)으로부터, 대응하는 실행 파이프라인(222)에서 실행을 기다리고 있는 발행 큐(220)로 발행된다. 프로세서(101)는 각각이 프로세서의 명령어 세트의 서브세트를 실행하도록 디자인된 다양한 형태의 실행 파이프(pipe)를 포함할 수 있다. 일실시예에서, 실행 파이프(222)는 분기 유닛 파이프라인(224), 로드 저장 파이프라인(226), 고정 소수점 연산 유닛(fixed point arithmetic unit)(228) 및 부동 소수점 유닛(floating point unit)(230)을 포함할 수 있다. 각 실행 파이프(222)는 두 개 이상의 파이프라인 스테이지(stage)를 포함할 수 있다. 발행 큐(220)에 저장된 명령들은 다양한 발행 우선 순위 알고리즘 중 임의의 것을 사용하여, 실행 파이프(222)로 발행될 수 있다. 일실시예에서, 예를 들면, 발행 큐(220) 내의 가장 나이가 많은 계류중인 명령이 실행 파이프들(222)로 발행되는 다음 명령이다. 이러한 예에서, 디스페치 유닛(214)에 의해 할당된 GTAG 값들이 발행 큐(220)에서 계류중인 명령들의 상대적인 나이를 결정하는데 활용된다. 발행에 앞서, 명령의 목적지 레지스터 피연산자(destination register operand)가 이용 가능한 재명령 GPR로 할당된다. 명령이 마침내 발행 큐들(220)로부터 해당 실행 파이프로 전달될 때, 실행 파이프는 명령의 연산 코드에 의해 나타내진 해당 연산을 수행하고, 명령이 파이프라인의 종료 스테이지(참조 번호(132)에 의해 표시됨)에 도달하는 시간에 명령의 결과를 명령의 재명령 GPR에 기록한다. 매핑(mapping)은 재명령 GPR들과 그들의 대응하는 아키텍티드 레지스터들(architected registers) 사이에서 유지된다. 명령어 그룹의 모든 명령들(그리고 보다 나이가 적은 명령어 그룹내(younger instruction group)의 모든 명령들)이 예외를 발생함이 없이 종료될 때, 완료 테이블(218)의 완료 포인터는 증분되어, 다음 명령어 그룹을 가르킨다. 완료 포인터가 증분되어 새로운 명령어 그룹을 가르킬 때, 이전 명령어 그룹의 명령들과 관련된 재명령 레지스터들은 해제되며, 이전 명령어 그룹의 명령들의 결과가 커미트(commit)된다. 만약, 종료된 그러나 아직 커미트되지 않은 명령보다 나이가 든 하나 이상의 명령들이 예외를 발생하면, 예외를 발생한 명령과 이보다 나이가 어린 명령들이 플러시(flush)되고, 재명령 복구 루틴이 마지막으로 알려진 유효한 상태로 GPR 매핑이 리턴되게 한다.
만약, 예측된 분기가 취해지지 않으면(분기의 잘못된 예측), 실행 파이프들(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)를 통합시킴에 의해, 본 발명은 잘못 예측된 분기에 대한 성능 페널티(penalty)를 저감하는 것을 고려한다. 보다 구체적으로, 명령 크래킹 유닛(212)의 "다운스트림(downstream)" 측 상에 기본 블록 캐시(213)를 구현함에 의해, 본 발명은 크래킹 유닛(212)에 계류중인 명령들을 분기의 잘못 예측된 플러시 경로로부터 제거하며, 이로써 분기의 잘못 예측에 후속하여 일소(purge)되어야 하는 파이프라인 스테이지의 수가 저감되고 성능 페널티가 저감된다. 기본 블록 캐시(213)는 디스페치 및 완료 제어 장치(216)와 완료 테이블(218)의 조직화에 부합되는 구조를 갖는 캐싱 메카니즘을 고려하며, 이로써 개재 로직(intervening logic)의 조직화가 단순화되고, 다음에 설명되는 바와 같이, 기본 블록 캐시(213)으로 유용한 확장 기능을 구현하는 것이 용이해진다.
분기의 잘못된 예측에 의해 야기된 성능 페널티는 코드 시퀀스 인식 유닛(code sequence recognition unit(CSR))를 포함함에 의해 본 발명에 따른 프로세서(101)에서 최소화된다. CSR은 짧은 분기 시퀀스를 포함하는 코드 시퀀스들을 탐지하도록 바람직하게 구성된다. 짧은 분기 시퀀스는 조건 세팅 명령과 이에 후속하는 조건부 분기 명령 및 "실질적(substantive)" 명령들의 짧은 시퀀스에 특징이 있다. 조건 세팅 명령은, PowerPC®의 구조의 조건 레지스터나 다른 구조의 이와 유사한 레지스터의 내용들을 변경하는, 비교 명령과 같은 전형적인 명령이다. 실질적 명령들은, 하나 이상의 범용 혹은 부동 소수점 레지스터들의 내용들에 영향을 미치는, 가산 명령들과 같은 전형적인 명령들이다. 만약, CSR이 짧은 분기 시퀀스의 존재를 탐지하면, 시퀀스로부터 분기 명령을 제거하고, 실질적 명령들의 각각을 유사한 술어적 명령으로 대체함에 의해 기능적으로 등가인 술어적 코드 시퀀스를 발생시킨다.
앞에서 설명된 바와 같이, 크래킹 유닛(212)를 포함하는 프로세서(101)의 실시예에서, 도 4에서 참조 번호(402)에 의해 표시되는 CSR은 크래킹 유닛(212)에 내장될 수 있다. 이러한 실시예에서, CSR(402)은 명령어 그룹(302)에서 조건부 분기 명령의 존재를 탐지하도록 구성된다. 만약, 조건부 분기가 탐지되면, 시퀀스가 짧은 분기 시퀀스를 구성하는지를 결정하기 위해, 조건 분기 명령의 분기 어드레스는 조건부 분기 명령의 명령어 어드레스와 비교된다. 짧은 분기 시퀀스는, 명령어 그룹(302)이 포함할 수 있는 명령들의 수 보다 많은 실질적 명령들을 포함할 수 없는 분기 시퀀스로서 도시될 수도 있다. 만약, 예를 들면, 크래킹 유닛(212)에 의해 발생된 명령어 그룹들(302)이 4개의 실질적 명령들을 포함할 수 있으면, 짧은 분기 시퀀스에서 실체 명령들의 수의 상한은 4로 제한될 수 있다.
고정 길이 명령들을 사용하는 구조에서, 조건부 분기 명령이(취해질 때) 점프하게 되는 명령의 수는 조건부 분기 명령의 명령어 어드레스와 분기 목표 사이의 오프셋을 명령 당 바이트수로 나누는 것에 의해 계산될 수 있다. 만약, 분기 루프 내의 명령들의 수가 짧은 분기 시퀀스에 대해 허락된 명령들의 최대의 수를 넘지 않는다면, CSR(402)은 조건부 분기 명령을 제거하고, 각각의 실질적 명령을 그것의 술어적 등가 명령으로 변환함에 의해, 코드 시퀀스를 기능적으로 등가인 술어적 코드 시퀀스(404)로 변환한다.
일실시예에서, 코드 시퀀스 변환 프로세스는 비-술어적 등가(non-predicated equivalent)의 함수인 연산 코드를 갖는 술어적 연산들을 구현함에 의해 단순화된다. 예를 들면, 각 술어적 명령에 대응하는 비-술어적 연산 코드로부터의 고정된 오프셋인 연산 코드가 할당될 수 있다. 비-술어적 연산 코드들의 함수로서 술어적 명령 연산 코드들을 실행하기에 적합하지 않은 구조들에 적합한 다른 실시예에서, CSR(402)는 각각의 실질적 명령과 등가의 술어적 연산 코드를 지정하는 연산 코드 룩업(lookup) 테이블(403)을 활용할 수 있다. 변환하는 동안, CSR(402)은 원래의코드 시퀀스내의 각각의 비-술어적 실질적 명령에 대한 적합한 술어적 명령 연산 코드를 인출한다. 술어적 명령의 피연산자들은 비-술어적 명령과 동일하게 남아있다. 술어적 명령의 실행의 기초가 되는 조건 코드는 원래의 코드 시퀀스의 조건부 분기 명령으로부터 결정되며, 각 술어적 명령에 포함된다.
앞에서 논의된 바와 같이, 크래킹 유닛(212)가 명령들을 그룹화함에 있어 명령어 그룹(302)내의 마지막 슬롯에 분기 명령을 바람직하게 할당하는 실시예에 있어서, CSR(402)은 술어적 명령어 시퀀스를 형성함에 있어 연속적인 명령어 그룹들의 내용들을 평가하도록 구성될 수 있다. 이러한 실시예에서, 코드 시퀀스는 각 명령어 그룹(302)의 마지막 슬롯을 검사함에 의해 탐지될 수 있다. 만약, 마지막 슬롯이 조건부 분기 명령을 포함하면, CSR(402)은 분기 목표(target)가, 앞에서 논의된 바와 같이, 짧은 분기를 구성하는지를 결정한다. 만약, 짧은 분기의 최대 길이가 명령어 그룹(302)에 포함된 실질적 명령들의 최대의 수로서 정의되면, CSR(402)은 단지 조건부 분기를 포함한 그룹(302)에 바로 후속하는 명령어 그룹(302)의 실질적 명령들을 변환할 필요가 있을 뿐이다.
본 명세서에서 의도되는 술어적 실행을 지원하기 위해, FXU(228), FPU(230), LSU(226)를 포함하는 실행 유닛들의 각각이 술어적 명령들을 실행하도록 구성된다. 일실시예에서, 술어적 회로(predicated circuit)는 술어 조건(predicated condition)이 평가되는 예비 실행 파이프라인 스테이지를 포함할 수도 있다. 만약, 술어 조건이 참이면, 실행 유닛는 종래의 방법으로 명령을 실행한다. 만약, 술어 조건이 거짓이면, 명령은 a) 명령을 실행하기 전과 같은 상태로 목표 레지스터를남겨두는 방법과 b) 그 술어적 명령의 결과에 의존하는 다른 명령들에게 진행할 수 있음을 알리는 방법으로 실행 파이프라인으로부터 제거되어야만 한다. 이러한 목적들은, 술어적 명령(predicated instruction)의 결과를 버리고, 술어적 명령의 결과가 커미트되는 모든 종속적 명령들에 브로드캐스팅함(broadcasting)에 의해 충족될 수 있다. 다른 실시예에서, 술어적 명령은 그의 결과 중의 단지 하나만이 커미트되는 두 개의 명령으로서 발행될 수 있다. 그 명령들 중의 하나가 술어적 명령과 같은 계산(혹은 다른 기능)을 수행할 것이며, 그 나머지 명령은 어떠한 기능도 수행하지 않을 것이다. 커미트된 명령은 술어 조건에 의존한다. 또 다른 실시예에서, 술어 조건이 거짓이라는 결정에 따라, 술어 명령은 재명령 로직을 작동시키며 동시에 NOP를 시뮬레이션하기 위해 목표 레지스터의 판독 및 이에 후속하는 즉각적인 라이트 백(write back)을 수행할 수 있다.
본 발명이, 짧은 분기 코드 시퀀스들을 술어적 실행 코드 시퀀스들로의 하드웨어적 변환을 가능하게 하고, 변환된 시퀀스들의 실행을 가능하게 함에 의해 개선된 성능을 의도한다는 것은 본 기술 분야에 통상의 지식을 가진 당업자에게 자명할 것이다. 본 발명의 상세한 설명과 도면들에서 보여지고 설명되는 본 발명의 형태는 단지 현재의 바람직한 예시로서만 취급되는 것으로 이해해야 한다. 이하 특허 청구의 범위는 개시된 바람직한 실시예들의 모든 변형들을 포함하도록 넓게 해석되는 것으로 보아야 한다.
본 발명은 짧은 분기에 특징이 있는 코드 시퀀스를 인지할 수 있고, 더 나아가서, 시퀀스를 명령 디코드나 디스페치(dispatch)하는 동안 술어적 코드 시퀀스로 변환하고, 술어적 코드 시퀀스를 실행할 수 있는 프로세서 하드웨어를 제공하며, 술어적 실행 하드웨어(predicated execution hardware)를 이용하는데 있어서, 기존 코드의 재컴파일이 요구되지 않도록, 이러한 술어적 명령 변환이 시스템 사용자에게 투명하게 된다.

Claims (20)

  1. 마이크로프로세서에서 명령을 처리하는 방법에 있어서,
    명령들의 시퀀스(a sequence of instructions)를 수신하는 단계와
    명령들의 상기 시퀀스 내에서 짧은 분기 시퀀스(a short branch sequence)를 탐지하는 단계━상기 짧은 분기 시퀀스는 조건 세팅 명령(a condition setting instruction), 조건부 분기(a conditional branch) 및 적어도 하나의 부가 명령(one additional instruction)을 포함하며, 상기 부가 명령은 조건부 분기가 취해지지 않으면 조건적으로 실행됨━와,
    상기 짧은 분기 시퀀스를, 상기 조건 세팅 명령과 상기 짧은 분기 시퀀스내의 각 부가 명령에 대응하는 술어적 명령을 포함하는 술어적 명령어 시퀀스(predicated instruction sequence)로 내부적으로 변환하는 단계와,
    상기 프로세서의 적어도 하나의 기능 유닛(one functional unit)에서 상기 술어적 명령어 시퀀스를 실행하는 단계를 포함하는
    마이크로프로세서에서의 명령 처리 방법.
  2. 제 1 항에 있어서,
    상기 짧은 분기 시퀀스를 탐지하는 단계는 상기 조건부 분기 명령과 관련된 상대 분기 어드레스를 계산하는 단계를 포함하는
    마이크로프로세서에서의 명령 처리 방법.
  3. 제 2 항에 있어서,
    상기 상대 분기 어드레스를 명시된 최대치(a specified maximum)와 비교하는 단계를 더 포함하는
    마이크로프로세서에서의 명령 처리 방법.
  4. 제 3 항에 있어서,
    수신된 명령들의 시퀀스를 명령어 그룹으로 조직하는 단계를 더 포함하되, 상기 명시된 최대 상대 분기 어드레스는 명령어 그룹내의 명령들의 수의 함수인
    마이크로프로세서에서의 명령 처리 방법.
  5. 제 1 항에 있어서,
    명령들의 시퀀스로부터 명령어 그룹을 형성하는 단계를 더 포함하되, 상기 짧은 분기 시퀀스를 탐지하는 단계는 상기 명령어 그룹에서 조건부 분기 명령을 탐지하는 단계를 포함하는
    마이크로프로세서에서의 명령 처리 방법.
  6. 제 5 항에 있어서,
    조건부 분기 명령문(the conditional branch statement)이 상기 명령어 그룹의 마지막 슬롯에 놓이는
    마이크로프로세서에서의 명령 처리 방법.
  7. 제 6 항에 있어서,
    상기 짧은 분기 시퀀스의 각각의 부가 명령은 상기 조건부 분기 명령문을 포함하는 명령어 그룹에 후속하는 명령어 그룹에 위치하는
    마이크로프로세서에서 명령들을 처리하는 방법.
  8. 제 1 항에 있어서,
    상기 짧은 분기 시퀀스를 술어적 명령어 시퀀스로 변환하는 상기 단계는 상기 짧은 분기 시퀀스의 각각의 부가 명령을 유사한 술어적 명령으로 변환하는 단계를 포함하는
    마이크로프로세서에서의 명령 처리 방법.
  9. 제 8 항에 있어서,
    각각의 부가 명령을 그의 유사한 술어적 명령으로 변환하는 상기 단계는 상기 짧은 분기 시퀀스의 각각의 부가 명령에 대해 술어적 명령 연산 코드(a predicated instruction opcode))를 결정하는 단계를 포함하는
    마이크로프로세서에서의 명령 처리 방법.
  10. 제 9 항에 있어서,
    상기 술어적 명령 연산 코드를 결정하는 상기 단계는 사전 결정된 오프셋(a predetermined offset)에 의해 각 부가 명령의 연산 코드를 조정하는 단계를 포함하는
    마이크로프로세서에서의 명령 처리 방법.
  11. 제 9 항에 있어서,
    상기 술어적 명령 연산 코드를 결정하는 상기 단계는 연산 코드 룩업 테이블(an opcode lookup table)에서 술어적 명령 연산 코드를 인출하는 단계를 포함하는
    마이크로프로세서에서 명령들을 처리하는 방법.
  12. 제 1 항에 있어서,
    각 술어적 명령이 실질적 명령(a substantive instruction)과 상기 조건 세팅 명령에 의해 세팅된 조건(a condition)을 포함하되, 상기 실질적 명령은 조건이 참이면 실행되는
    마이크로프로세서에서 명령들을 처리하는 방법.
  13. 명령들의 시퀀스를 디스페치하기에 적합한 디스페치 유닛과,
    상기 명령들의 시퀀스에서 짧은 분기 시퀀스를 탐지할 수 있게 하고, 또한 상기 짧은 분기 시퀀스를 기능적으로 등가인 술어적 명령어 시퀀스로 변환할 수 있게 하는 코드 시퀀스 인식 유닛(a code sequence recognition unit(CSR))━ 상기 짧은 분기 시퀀스는 조건 세팅 명령, 조건부 분기 및 적어도 하나의 부가 명령을 포함함━과,
    상기 술어적 명령어 시퀀스를 실행할 수 있게 하는 적어도 하나의 실행 유닛을 포함하는
    마이크로프로세서.
  14. 제 13 항에 있어서,
    상기 CSR이 조건부 분기 명령과 관련된 상대 분기 어드레스를 계산하고, 상기 상대 분기 어드레스를 지정된 최대치와 비교할 수 있게 하는
    마이크로프로세서.
  15. 제 14 항에 있어서,
    상기 마이크로프로세서는 상기 수신된 명령들의 시퀀스를 명령어 그룹으로 조직할 수 있게 하며, 상기 명시된 최대 상대 분기 어드레스는 명령어 그룹의 명령들의 수의 함수인
    마이크로프로세서.
  16. 제 13 항에 있어서,
    상기 CSR은 상기 짧은 분기 시퀀스의 적어도 하나의 부가 명령의 각각을 유사한 술어적 명령으로 변환하도록 구성되는
    마이크로프로세서.
  17. 제 16 항에 있어서,
    상기 CSR은, 상기 짧은 분기 시퀀스의 각각의 부가 명령에 대한 술어적 명령연산 코드를 결정함에 의해, 상기 적어도 하나의 부가 명령의 각각을 그의 유사한 술어적 명령으로 변환할 수 있게 하는
    마이크로프로세서.
  18. 제 17 항에 있어서,
    상기 CSR이 상기 술어적 연산 코드를 결정하는 것은 사전 결정된 오프셋에 의해 각 부가 명령의 연산 코드를 조정하는 것을 포함하는
    마이크로프로세서.
  19. 제 17 항에 있어서,
    상기 술어적 명령 연산 코드를 결정하는 것은 연산 코드 룩업 테이블에서 술어적 명령 연산 코드를 인출하는 것을 포함하는
    마이크로프로세서.
  20. 프로세서, 메모리, 입력 수단 및 디스플레이를 포함하는 데이터 처리 시스템에 있어서,
    상기 프로세서는,
    명령들의 시퀀스를 디스페치하기에 적합한 디스페치 유닛와,
    상기 명령들의 시퀀스에서 짧은 분기 시퀀스를 탐지할 수 있게 하고, 또한 상기 짧은 분기 시퀀스를 기능적으로 등가인 술어적 명령어 시퀀스로 변환할 수 있게 하는 코드 시퀀스 인식 유닛(a code sequence recognition unit(CSR))━상기 짧은 분기 시퀀스는 조건 세팅 명령, 조건부 분기 및 적어도 하나의 부가 명령을 포함함━과,
    상기 술어적 명령어 시퀀스를 실행할 수 있게 하는 적어도 하나의 실행 유닛을 포함하는
    데이터 처리 시스템.
KR1020010056804A 2000-09-28 2001-09-14 마이크로프로세서의 명령 처리 방법 및 마이크로프로세서 KR20020025687A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/671,868 2000-09-28
US09/671,868 US6662294B1 (en) 2000-09-28 2000-09-28 Converting short branches to predicated instructions

Publications (1)

Publication Number Publication Date
KR20020025687A true KR20020025687A (ko) 2002-04-04

Family

ID=24696194

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020010056804A KR20020025687A (ko) 2000-09-28 2001-09-14 마이크로프로세서의 명령 처리 방법 및 마이크로프로세서

Country Status (5)

Country Link
US (1) US6662294B1 (ko)
JP (1) JP2002149401A (ko)
KR (1) KR20020025687A (ko)
CN (1) CN1148650C (ko)
TW (1) TW571236B (ko)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7210025B1 (en) * 2000-04-19 2007-04-24 Uht Augustus K Automatic and transparent hardware conversion of traditional control flow to predicates
US7299343B2 (en) * 2002-09-27 2007-11-20 Verisilicon Holdings (Cayman Islands) Co. Ltd. System and method for cooperative execution of multiple branching instructions in a processor
US20040064685A1 (en) * 2002-09-27 2004-04-01 Hung Nguyen System and method for real-time tracing and profiling of a superscalar processor implementing conditional execution
US7275149B1 (en) * 2003-03-25 2007-09-25 Verisilicon Holdings (Cayman Islands) Co. Ltd. System and method for evaluating and efficiently executing conditional instructions
US20040230781A1 (en) * 2003-05-16 2004-11-18 Via-Cyrix, Inc. Method and system for predicting the execution of conditional instructions in a processor
GB2402510A (en) * 2003-06-05 2004-12-08 Advanced Risc Mach Ltd Predication instruction within a data processing system
US20040255103A1 (en) * 2003-06-11 2004-12-16 Via-Cyrix, Inc. Method and system for terminating unnecessary processing of a conditional instruction in a processor
US20050066151A1 (en) * 2003-09-19 2005-03-24 Sailesh Kottapalli Method and apparatus for handling predicated instructions in an out-of-order processor
JP4784912B2 (ja) * 2004-03-02 2011-10-05 パナソニック株式会社 情報処理装置
US7234043B2 (en) * 2005-03-07 2007-06-19 Arm Limited Decoding predication instructions within a superscaler data processing system
JP4873546B2 (ja) * 2006-06-20 2012-02-08 ルネサスエレクトロニクス株式会社 データ処理装置、データ処理方法
US8095917B2 (en) * 2007-06-04 2012-01-10 Microsoft Corporation Debugger for virtual intermediate language operations
US20100262813A1 (en) * 2009-04-14 2010-10-14 International Business Machines Corporation Detecting and Handling Short Forward Branch Conversion Candidates
US8433885B2 (en) * 2009-09-09 2013-04-30 Board Of Regents Of The University Of Texas System Method, system and computer-accessible medium for providing a distributed predicate prediction
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
JP5707011B2 (ja) * 2010-06-18 2015-04-22 ボード・オブ・リージエンツ,ザ・ユニバーシテイ・オブ・テキサス・システム 統合分岐先・述語予測
US9256408B2 (en) 2012-01-20 2016-02-09 Qualcomm Incorporated Optimizing texture commands for graphics processing unit
US9207938B2 (en) * 2012-08-29 2015-12-08 Hewlett-Packard Development Company, L.P. Instruction forwarding based on predication criteria
US9367314B2 (en) * 2013-03-15 2016-06-14 Intel Corporation Converting conditional short forward branches to computationally equivalent predicated instructions
JP2015201119A (ja) * 2014-04-10 2015-11-12 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US20170083327A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Implicit program order
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10776115B2 (en) 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US10936316B2 (en) 2015-09-19 2021-03-02 Microsoft Technology Licensing, Llc Dense read encoding for dataflow ISA
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US20170123798A1 (en) 2015-11-01 2017-05-04 Centipede Semi Ltd. Hardware-based run-time mitigation of blocks having multiple conditional branches
WO2017072615A1 (en) * 2015-11-01 2017-05-04 Centipede Semi Ltd. Hardware-based run-time mitigation of conditional branches

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06110685A (ja) * 1990-06-29 1994-04-22 Digital Equip Corp <Dec> 高性能プロセッサにおける分岐予想方法
KR19990014132A (ko) * 1997-07-25 1999-02-25 빈센트 비. 인그라시아 데이터 프로세서에서 조건부 분기 실행을 제어하기 위한 방법 및 장치
JPH11259297A (ja) * 1998-03-13 1999-09-24 Toshiba Corp 命令割り当て方法及び命令割り当て装置
JPH11296368A (ja) * 1998-04-08 1999-10-29 Matsushita Electric Ind Co Ltd プロセッサ、コンパイラ及び命令列変換装置
JP2000330788A (ja) * 1999-05-03 2000-11-30 Stmicroelectronics Sa コンピュータシステム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10124315A (ja) 1996-10-18 1998-05-15 Hitachi Ltd 分岐処理方法およびそのための情報処理装置
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6446258B1 (en) * 1998-11-03 2002-09-03 Intle Corporation Interactive instruction scheduling and block ordering

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06110685A (ja) * 1990-06-29 1994-04-22 Digital Equip Corp <Dec> 高性能プロセッサにおける分岐予想方法
KR19990014132A (ko) * 1997-07-25 1999-02-25 빈센트 비. 인그라시아 데이터 프로세서에서 조건부 분기 실행을 제어하기 위한 방법 및 장치
JPH11259297A (ja) * 1998-03-13 1999-09-24 Toshiba Corp 命令割り当て方法及び命令割り当て装置
JPH11296368A (ja) * 1998-04-08 1999-10-29 Matsushita Electric Ind Co Ltd プロセッサ、コンパイラ及び命令列変換装置
JP2000330788A (ja) * 1999-05-03 2000-11-30 Stmicroelectronics Sa コンピュータシステム

Also Published As

Publication number Publication date
JP2002149401A (ja) 2002-05-24
CN1347029A (zh) 2002-05-01
TW571236B (en) 2004-01-11
CN1148650C (zh) 2004-05-05
US6662294B1 (en) 2003-12-09

Similar Documents

Publication Publication Date Title
KR20020025687A (ko) 마이크로프로세서의 명령 처리 방법 및 마이크로프로세서
US6609190B1 (en) Microprocessor with primary and secondary issue queue
EP0888584B1 (en) Central processing unit having an x86 and dsp core and including a dsp function decoder which maps x86 instructions to dsp instructions
US6105129A (en) Converting register data from a first format type to a second format type if a second type instruction consumes data produced by a first type instruction
US6021485A (en) Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching
US6728866B1 (en) Partitioned issue queue and allocation strategy
US9311095B2 (en) Using register last use information to perform decode time computer instruction optimization
US8200987B2 (en) Dynamic object-level code translation for improved performance of a computer processor
US6279105B1 (en) Pipelined two-cycle branch target address cache
US6697939B1 (en) Basic block cache microprocessor with instruction history information
US6742111B2 (en) Reservation stations to increase instruction level parallelism
US5931957A (en) Support for out-of-order execution of loads and stores in a processor
US20020073301A1 (en) Hardware for use with compiler generated branch information
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
EP1256053B1 (en) Secondary reorder buffer microprocessor
KR100402820B1 (ko) 기본 블럭 캐쉬를 이용하는 마이크로프로세서
EP2461246B1 (en) Early conditional selection of an operand
US6871343B1 (en) Central processing apparatus and a compile method
JP3683439B2 (ja) 分岐予測を抑止する情報処理装置および方法
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
CA2356805A1 (en) Converting short branches to predicated instructions
JP2001249805A (ja) マイクロプロセッサ内の命令取出ユニット
KR20020096252A (ko) 프로세서에서의 명령 실행 방법, 컴퓨터 시스템에사용하기 위한 프로세서 및 데이터 처리 시스템

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E601 Decision to refuse application