KR100986375B1 - 피연산자의 빠른 조건부 선택 - Google Patents

피연산자의 빠른 조건부 선택 Download PDF

Info

Publication number
KR100986375B1
KR100986375B1 KR1020087020385A KR20087020385A KR100986375B1 KR 100986375 B1 KR100986375 B1 KR 100986375B1 KR 1020087020385 A KR1020087020385 A KR 1020087020385A KR 20087020385 A KR20087020385 A KR 20087020385A KR 100986375 B1 KR100986375 B1 KR 100986375B1
Authority
KR
South Korea
Prior art keywords
operand
instruction
operands
selection criteria
execution
Prior art date
Application number
KR1020087020385A
Other languages
English (en)
Other versions
KR20080087171A (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 KR20080087171A publication Critical patent/KR20080087171A/ko
Application granted granted Critical
Publication of KR100986375B1 publication Critical patent/KR100986375B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30094Condition code generation, e.g. Carry, Zero flag
    • 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
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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

Landscapes

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

Abstract

피연산자 선택 명령에 의해 사용되지 않을 피연산자들을 기다림으로 인한 지연들은 피연산자 선택 명령의 프로세싱을 완료하기 위해 이러한 피연산자 데이터가 요구되지 않는다는 빠른(early) 인식에 기반하여 완화된다. 실행 이전의 적절한 포인트들에서, 선택 기준 또는 피연산자 선택 명령에 의해 특정되는 기준, 선택 기준에 영향을 주는 상태들 및 피연산자들의 사용가능성과 관련하여 결정들이 이루어진다. 홀드 회로는 프로세서 파이프라인 스톨(stall)들을 제어하는 홀드 신호의 액티베이션 및 해제를 제어하기 위해 상기 결정들을 이용한다. 사용되지 않을 다른 피연산자가 사용가능하지 않더라도, 선택된 피연산자가 사용가능하면, 피연산자 데이터를 기다리도록 요구되는 스톨은 스킵되거나 또는 초기에 종료된다. 선택 기준이 충족되고 선택된 피연산자가 패치되어 이용가능하게 될 때까지 피연산자들에 대한 기다림에 기인한 스톨이 유지된다.

Description

피연산자의 빠른 조건부 선택{EARLY CONDITIONAL SELECTION OF AN OPERAND}
본 발명은 일반적으로 프로세서 파이프라인에서 명령들을 처리하기 위한 기법들에 관한 것이며, 더욱 상세하게는, 파이프라이닝된 프로세서에서 동작하는 이전 명령에 의해 설정된 조건에 기반한 다수의 피연산자(operand)들로부터의 피연산자의 빠른(early) 조건부 선택에 관한 것이다.
셀폰들, 랩톱 컴퓨터들, 개인 정보 단말기들(PDAs) 등과 같은 공통적인 휴대용 제품들은 통신 및 멀티미디어 애플리케이션들을 지원하는 프로그램을 실행하는 프로세서를 사용하도록 요구한다. 이러한 제품들에 대한 프로세싱 시스템은 프로세서, 명령들의 소스, 입력 피연산자들의 소스 및 실행 결과들을 저장하기 위한 저장 공간을 포함한다. 예를 들어, 명령들 및 입력 피연산자들은 범용 레지스터들과, 예컨대 명령 캐시, 데이터 캐시 및 시스템 메모리를 포함하는 멀티-레벨 캐시들로 구성되는 계층적(hierarchical) 메모리 구성에 저장될 수 있다.
프로그램들의 실행에 있어서 높은 성능을 제공하기 위해, 프로세서는 전형적으로 애플리케이션 및 프로세서를 제조하기 위하여 사용되는 공정 기술에 대하여 최적화된 파이프라인에서 명령들을 실행한다. 높은 성능 프로세서들에서, 기억 장치로부터 피연산자들에 액세스하는 레이트는 프로세서 명령 실행 레이트보다 더 느린 경향이 있다. 그 결과, 기억 장치로부터 명령별로 특정된 피연산자들을 획득하는 것은 기억 장치 액세스 시간 및 프로세서 클록 사이클 시간에서의 차이들을 보상하기 위해 하나 이상의 사이클 동안 프로세서를 스톨링(stalling)하도록 할 수 있다. 또한, 명령이 이전 명령의 실행 결과인 소스 피연산자를 특정하는 경우가 종종 발생한다. 다수의 스테이지 실행 파이프라인들에서, 이전의 실행 결과를 요구하는 명령은 이전 명령의 실행 완료가 펜딩(pending)되면 스톨링되어야 한다. 이러한 스톨들은 프로세서의 성능을 제한하게 된다.
이러한 여러가지 양상들 중에서, 본 발명은 명령들을 실행시킬 때 발생할 수 있는 스톨들의 수를 최소화하는 것이 공통적으로 바람직하다는 것을 인식한다. 이에 따라, 스톨들을 최소화하고 통신 및 멀티미디어 애플리케이션들을 지원하는 프로그램들과 같은 프로그램들에서 브랜치(branch) 명령들의 사용을 피하거나 또는 최소화하는데 도움을 주는 피연산자 선택 명령들을 구현하는 것이 바람직할 수 있다. 프로세서에 대한 이러한 향상들은 프로세서 동작에 있어서의 향상된 성능 및 효율성을 제공한다.
본 발명의 실시예는 파이프라인 동작 방법에 적용된다. 상기 방법은 적어도 두 개의 피연산자(operand)들의 그룹으로부터 선택될 적어도 하나의 피연산자를 특정하는 명령을 탐지하는 단계를 포함하며, 상기 그룹의 적어도 하나의 피연산자는 파이프라인에서 인-플라잇(in-flight) 상태에 있을 수 있다. 상기 명령에 의해 특정되는 피연산자 선택 기준을 결정하는 추가적인 단계가 뒤따른다. 선택 기준이 결정되면, 상기 적어도 두 개의 피연산자들의 그룹으로부터 적어도 하나의 피연산자를 선택하기 위해 상기 피연산자 선택 기준이 평가된다. 그 다음에 선택되지 않은 피연산자가 사용가능하게 될 때까지 기다리지 않고 상기 적어도 하나의 선택된 피연산자가 사용가능하면 실행을 위한 상기 명령이 수행(commit)될 수 있다.
본 발명의 다른 양상은 파이프라인된(pipelined) 프로세서에서 명령들을 처리하기 위한 장치를 제공한다. 상기 장치는 다수의 명령들 중 각각의 명령에 의해 요구되는 입력 피연산자 데이터를 사용하여 명령들을 실행시키기 위한 실행 스테이지를 포함한다. 모든 입력 피연산자 데이터가 수신되어 홀드(hold)를 완료할 때까지 각각의 명령에 대한 홀드를 생성하는 홀드 회로가 사용된다. 상기 장치는 또한 상기 입력 피연산자 데이터의 수신이 완료되기 전에, 선택할 피연산자 데이터를 결정하고 선택된 피연산자 데이터가 사용가능하다고 결정되면 실행되는 명령에서 특정되는 선택 기준과 관련하여 상기 홀드를 종료하기 위한 수단을 포함한다.
여기에서 제시되는 본 발명의 개념들 및 추가적인 특징들에 대한 보다 완전한 이해는 다음의 상세한 설명 및 도면들로부터 명백하게 이루어질 것이다.
도 1은 본 발명의 실시예가 사용될 수 있는 예시적인 무선 통신 시스템의 블록 다이어그램이다.
도 2A는 본 발명의 제 1 실시예에 따른 피연산자 함수의 조건부 선택이 사용될 수 있는 파이프라인된 프로세서 컴플렉스의 기능적 블록 다이어그램이다.
도 2B는 본 발명에 따른 프로세서의 실행 스테이지들로 진입하기 전에 언제 프로세서를 스톨(stall)시킬 것인지를 결정하기 위한 조건들을 식별하는 결정 테이블이다.
도 2C는 본 발명의 제 2 실시예에 따른 패킹된(packed) 데이터 피연산자 함수의 조건부 선택이 사용될 수 있는 파이프라인된 프로세서 컴플렉스의 기능적 블록 다이어그램이다.
도 3은 본 발명에 따른 조건부 피연산자 선택 함수를 특정하는 32-비트 명령에 대한 일반적인 포맷을 나타내는 도면이다.
도 4는 본 발명에 따른 파이프라인에서 빠르게(early) 피연산자를 조건부로 선택하기 위해 요구되는 동작 단계들의 플로우차트이다.
본 발명은 본 발명의 여러 실시예들이 도시되는 도면들과 관련하여 보다 상세하게 설명될 것이다. 그러나, 본 발명은 다양한 형태들로 구현될 수 있으며 여기에서 설명되는 실시예들로 한정되는 것으로 해석되어서는 안된다. 그보다는 이러한 실시예들은 본 발명이 충분하고 완전하게 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 본 발명의 범위를 전달하도록 제공된다.
본 발명에 따른 연산들을 수행하거나 또는 연산들에 따라 동작되기 위한 컴퓨터 프로그램 코드 또는 "프로그램 코드"는 처음에 C, C++, JAVA®, Smalltalk, JavaScript®, Visual Basic®, TSQL, Perl 또는 다양한 다른 프로그래밍 언어들과 같은 상위 레벨 프로그래밍 언어로 기록될 수 있다. 이러한 언어들 중 하나로 기록된 프로그램은 상위 레벨 프로그램 코드를 네이티브(native) 어셈블러 프로그램 으로 변환하는 타겟 프로세서 아키텍처로 컴파일링된다. 타겟 프로세서 아키텍처를 위한 프로그램들은 또한 네이티브 어셈블러 언어로 직접 기록될 수 있다. 네이티브 어셈블러 프로그램은 기계 레벨 이진 명령들의 명령 연상 기호(mnemonic) 표현들을 사용한다. 여기에서 사용되는 프로그램 코드 또는 컴퓨터 판독가능 매체는 프로세서에 의해 포맷이 해석될 수 있는 객체 코드와 같은 기계어 코드를 지칭한다.
도 1은 본 발명의 실시예가 사용될 수 있는 예시적인 무선 통신 시스템(100)의 블록 다이어그램이다. 설명하기 위한 목적으로, 도 1은 세 개의 원격 유니트들(120, 130 및 150)과 두 개의 기지국들(140)을 도시한다. 공통적으로 무선 통신 시스템들은 추가적인 원격 유니트들 및 기지국들을 포함할 수 있다는 것을 이해하도록 한다. 원격 유니트들(120, 130 및 150)은 본 발명에 따른 프로그램 코드를 실행하고 동작하기 위한 프로세서를 포함하는 각각의 하드웨어 컴포넌트들(125A, 125B 및 125C)을 포함한다. 도 1은 기지국들(140)로부터 원격 유니트들(120, 130 및 150)로의 순방향 링크 신호들(180)과, 원격 유니트들(120, 130 및 150)로부터 기지국들(140)로의 역방향 링크 신호들(190)을 도시한다.
도 1에서, 원격 유니트(120)는 모바일 전화기로서 도시되고, 원격 유니트(130)는 휴대용 컴퓨터로서 도시되고, 원격 유니트(150)는 무선 로컬 루프 시스템의 고정 위치 원격 유니트로서 도시된다. 예를 들어, 원격 유니트들은 핸드-헬드 개인 통신 시스템(PCS) 유니트들, 개인 데이터 어시스턴스들과 같은 휴대용 데이터 유니트들 또는 미터 판독 장치와 같은 고정 위치 데이터 유니트들일 수 있다. 도 1이 본 발명의 설명에 따른 원격 유니트들을 도시하더라고, 본 발명은 이러한 예시적으로 도시된 유니트들로 한정되지 않는다. 예를 들어, 일반적으로 향상된 효율성을 가지는 프로세싱은 도시된 바와 같은 원격 유니트들뿐만 아니라 내부 프로세서들을 가지는 다수의 제품들에 대하여 바람직한 특성이다. 명령들을 효율적으로 실행시키는 향상된 특징은 소스 피연산자가 본 발명에 따라 조건부로 선택되는 명령들을 포함함으로써 파이프라인 프로세서에서 획득될 수 있다.
프로세서는 전형적으로 명령별로 특정된 피연산자들에 대하여 동작하는 다양한 세트의 명령들을 사용한다. 로드(load), 저장(store), 더하기(add), 곱하기(multiply), 시프트(shift), 선택(select), AND 및 OR 명령들은 명령 세트 아키텍처에서 제공될 수 있는 명령들의 예시이다. 선택 명령은 피연산자가 둘 이상의 피연산자들로부터 조건부로 선택될 수 있고 선택된 피연산자가 타겟 레지스터 주소로 저장되는 명령의 일례이다. 선택 명령을 효율적으로 실행하기 위해, 어떤 피연산자를 선택하는지에 대한 결정과 패치(fetch) 연산은 프로세서 스톨(stall)들에 기인한 시간 손실을 최소화하면서 처리된다.
도 2A는 피연산자 함수의 조건부 선택이 사용될 수 있는 예시적인 파이프라인된 프로세서 컴플렉스(200)의 기능적 블록 다이어그램이다. 프로세서 컴플렉스(200)는 프로세서 파이프라인(202), L1 명령 캐시(204), L1 데이터 캐시(206) 및 메모리 계층(hierarchy)(208)을 포함한다. 프로세서 컴플렉스와 연결될 수 있는 주변 장치들은 논의를 간결하게 하기 위해 도시되어 있지 않다. 본 발명의 제 1 실시예에 따른, 프로세서 컴플렉스(200)는 메모리 계층(208)에 저장된 프로그램 코 드를 실행하기 위해 하드웨어 컴포넌트들(125A-125C)에서 적절하게 사용될 수 있다.
프로세서 파이프라인(202)은 5개의 주요 스테이지들인 명령 패치 스테이지(210), 디코드 스테이지(212), 판독 레지스터 스테이지(214), 실행 스테이지(216), 및 라이트 백(write back) 스테이지(218)를 포함한다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 임의의 이러한 스테이지들은 관련된 기능의 일부분들을 수행하는 다수의 스테이지들로 분할될 수 있거나, 또는 파이프라인들은 추가적인 기능을 제공하기 위한 다른 스테이지들을 포함할 수 있다는 것을 이해할 것이다. 논의의 목적으로, 주요한 스테이지들 각각이 고속 설계를 위해 둘 이상의 스테이지들로 분할될 수 있더라도, 여러 주요한 스테이지들은 하나의 스테이지로서 도시된다. 예를 들어, 실행 스테이지(216)는 세 개의 서브-스테이지들인, 실행 A(220), 실행 B(222) 및 실행 C(224)로 분할된다.
하나의 프로세서 파이프라인(202)이 도시되어 있더라도, 조건부로 선택된 피연산자들을 가지는 명령들의 프로세싱은 수퍼스칼라 설계들 및 병렬 파이프라인들을 구현하는 다른 아키텍처들에 적용가능하다. 대안적인 구현들에서 피연산자 명령들의 조건부 선택을 지원하는 프로세서들은 프로세서 파이프라인(202)보다 더 적거나 또는 더 많은 스테이지들을 가질 수 있다. 예를 들어, 높은 클록 레이트들을 위해 설계된 수퍼스칼라 프로세서는 둘 이상의 병렬 파이프라인들을 가질 수 있고, 각각의 파이프라인은 명령 패치 스테이지(210), 디코드 스테이지(212), 판독 레지스터 스테이지(214), 실행 A 스테이지(220), 실행 B 스테이지(222), 실행 C 스테이 지(224) 및 라이트 백 스테이지(218)를 둘 이상의 파이프라인된 스테이지들로 분할할 수 있으며, 그리하여 높은 클록 레이트를 지원하기 위해 전체 프로세서 파이프라인 깊이(depth)를 증가시킨다.
프로세서 파이프라인(202)에서, 제 1 스테이지는 명령 패치 스테이지(210)이다. 명령 패치 스테이지(210)는 후속 스테이지들에 의한 프로세싱을 위해 L1 명령 캐시(204)로부터 명령들을 패치한다. L1 명령 캐시(204)에서 명령 패치가 미스(miss)되면, 상기 명령은 레벨 2(L2) 캐시 및 메인 메모리를 포함할 수 있는 메모리 계층(208)으로부터 패치된다. 명령들은 부트 판독 전용 메모리(ROM), 하드 드라이브, 광학 디스크와 같은 다른 소스들로부터 또는 인터넷과 같은 외부 인터페이스로부터 메인 메모리로 로딩될 수 있다.
명령 패치 스테이지(210)는 각각의 패치된 명령을 디코드 스테이지(212)로 제공한다. 디코드 스테이지(212)는 명령들을 파이프라인의 다음 스테이지들로 제공되는 제어 비트들의 집합으로 디코딩하고, 패치된 명령의 실행과 관련된 디코드에서의 추가적인 연산들을 지원할 수 있다.
선택 피연산자 타입 명령들의 일반적인 형태들은 예컨대 아래에서 추가적으로 설명되는 프로세싱 이전에 브랜치들을 피하고 데이터를 조작하거나 통합하기 위해 프로세서 파이프라인(202)에서 사용되고 실행될 수 있다. 예를 들어, 로드, 저장, 산술, 논리, 시프트, 비교, 비트 조작 명령들 등은 피연산자 데이터를 조건부로 처리하기 위해 피연산자 선택 함수의 추가를 통해 증대(augment)될 수 있다. 선택 피연산자 로드 명령 및 선택 피연산자 저장 명령에서, 범용 레지스터(GPR) 파일에 저장되고 GPR 레지스터 주소들로서 참조되는 적어도 두 개의 메모리 베이스 주소들 사이에서 선택이 이루어진다. 선택 더하기 명령에서, 피연산자는 적어도 두 개의 피연산자들로부터 선택되고 선택된 피연산자는 다른 피연산자와 더해진다. 선택 피연산자 명령들의 일반적인 형태들에서, 선택 기준 또는 충족되는 기준에 기반하여 피연산자들의 더 큰 그룹으로부터 피연산자들 중 하나 또는 피연산자들의 그룹이 선택될 수 있다. 선택된 피연산자 또는 피연산자들의 그룹은 선택 피연산자 명령들에 의해 지시되는 바와 같이 추가적인 프로세싱을 위해 실행 경로로 제공된다. 선택을 결정하기 위한 기준으로서 하나 이상의 기준이 사용될 수 있다는 것을 유의하도록 한다. 선택 피연산자 타입 명령들의 일반적인 형태의 서브세트는 선택 명령이며, 상기 선택 명령에서 피연산자는 두 개의 레지스터 피연산자들로부터 조건부로 선택되고 선택된 피연산자는 타겟 레지스터 주소로 저장된다. 선택 피연산자 명령의 다른 형태는 레지스터 피연산자 및 즉시적인(immediate) 값 사이에서의 선택을 특정하는 명령이다.
다른 예는 벡터 프로세서에서 사용될 수 있는, 피연산자들의 둘 이상의 블록들로부터 피연산자들의 블록을 선택하기 위해 사용되는 선택 피연산자 명령이다. 피연산자들의 각각의 블록은 블록의 시작 위치에 대한 포인터를 포함하는 선택 피연산자 명령에 있는 필드에 의해 참조된다. 또한, 일반적인 선택 기준은 다수의 비트 선택 기준으로부터 획득될 수 있는 바와 같이, 둘 보다 많은 선택들을 특정할 수 있다. 선택 기준은 어떤 피연산자들이 더 큰 그룹으로부터 선택되어야 하는지 여부, 선택될 피연산자들의 개수 또는 프로세서의 명령 세트 아키텍처에 의해 특정 되는 다른 선택 메커니즘을 특정할 수 있다.
피연산자 선택을 결정하기 위해 사용되는 조건들은 명령 세트 아키텍처에서 전형적으로 특정되는 다양한 산술, 로직, 및 다른 기능 명령들의 실행에서 프로세서에 의해 설정되는 상태 플래그(flag)들로부터 발생될 수 있다. 예를 들어, 네거티브(N) 비트(226)는, N 비트에 영향을 주는 이러한 명령들에 대하여, 실행 결과가 네거티브인지 아닌지 여부를 표시한다. 제로(Z) 비트(228)는, Z 비트에 영향을 주는 이러한 명령들에 대하여, 실행 결과가 모든 제로인지 여부를 표시한다. 전달(carry)(C) 비트(230)는, C 비트에 영향을 주는 이러한 명령들에 대하여, 실행 결과가 캐리-아웃(carry out)을 포함하는지 여부를 표시한다. 오버플로우(V) 비트(232)는, V 비트에 영향을 주는 이러한 명령들에 대하여, 실행 결과가 오버플로우되는지 여부를 표시한다. 이러한 비트들은 또한 프로그램 상태 레지스터의 일부일 수 있는 플래그 레지스터 또는 상태 코드(CC) 레지스터(234)에 저장될 수 있다.
상태 코드 비트들은 다양한 실행 스테이지들에 의해 설정될 수 있으나 상태 코드를 변경하는 프로그램 순서는 유지된다. 예를 들어, 더하기, 로직 연산, 비트 선택, 주소 생성 등과 같은 특정한 연산들은 실행 A 스테이지(220)에서 달성될 수 있다. 이러한 실행 A 스테이지(220) 명령들은 또한 상태 코드 레지스터(234)에 영향을 주도록 특정될 수 있으며 영향을 받은 상태 코드 비트들을 경로(240)를 통해 실행의 끝부분에서 전송할 수 있다. 레지스터 시프트 명령을 사용하는 산술 로직 유니트(ALU) 연산에서 특정되는 바와 같은, 보다 복잡한 연산들은 두 개의 개별적인 연산 단계들로 분리될 수 있다. 제 1 연산 단계는 실행 A 스테이지(220)에서 이루어지고 제 2 연산 단계는 실행 B 스테이지(222)에서 이루어진다. 실행 B 스테이지(222)에서의 명령 실행이 완료되면, 상태 코드 레지스터(234)에 대한 변경들이 경로(242)를 통해 전송될 수 있다. 보다 복잡한 특성을 가지는 연산들을 수행하기 위해서는 추가적인 실행 스테이지들이 필요할 수 있다. 예를 들어, 곱하기 명령은 곱셈 연산을 완료하기 위해 세 개의 스테이지들인, 실행 A 스테이지(220), 실행 B 스테이지(222) 및 실행 C 스테이지(224)를 취할 수 있다. 제 3 스테이지가 완료되면, 상태 코드 레지스터(234)는 다시 경로(244)를 통해 전송된 적절한 비트들에 의해 영향을 받을 수 있다. 실행 길이들의 변화들에 기인하여, 명령들은 프로그램 순서와는 상이한 순서로 완료될 수 있기 때문에, 상태 코드 레지스터(234)에 있는 비트들은 프로그램 순서에 따라 설정된다. 설명을 위해, 상태 레지스터(234) 비트들의 설정을 제어하기 위한 설비들은 CC 제어 로직(246)에 포함된다.
선택 피연산자 명령의 프로세싱은 디코드 스테이지(212)에서 시작할 수 있다. 피연산자 선택 기준 상태를 결정하기 전에 패치될 모든 피연산자들을 기다리기 보다는, 디코드 스테이지는 먼저 피연산자 선택 기준을 결정한다. 피연산자 선택 기준을 결정하기 위해, 파이프라인은 피연산자 선택 기준에 영향을 줄 수 있는 임의의 명령들이 파이프라인에 이미 존재하는지 여부를 결정하기 위해 체크되어야 한다. 상태 코드 레지스터에 영향을 주는 명령은 레지스터에 있는 오직 하나의 비트, 모든 비트들 또는 비트들의 몇몇 조합에 영향을 줄 수 있기 때문에, 선택 피연산자 명령에 의해 특정되는 피연산자 선택 기준은 상태 코드 레지스터에 있는 어떤 비트들의 조합이 요구되는지를 결정하기 위해 디코딩된다. 예를 들어, 이전 결과 가 설정된 Z 비트(228)를 통해 제로였다면 하나의 피연산자가 선택될 수 있으며, Z 비트가 설정되지 않았다면 상이한 피연산자가 선택될 수 있다. 이전 계산이 포지티브 넌-제로(non-zero) 결과를 가진다면 피연산자를 선택하는 것과 같은, 보다 복잡한 선택 기준은 N 비트(226) 및 Z 비트(228) 모두가 "0"으로 설정되어 있는지 여부를 보기 위해 N 비트(226) 및 Z 비트(228) 모두를 체크함으로써 획득될 수 있다. 상태 코드 레지스터(234) 값들은 상태 코드(CC) 경로(248)를 통해 상태 코드 비트들이 모니터링될 수 있는 디코드 스테이지(212), 판독 레지스터 스테이지(214) 및 실행 A 스테이지(220)로 전달된다.
디코드 스테이지(212)에 있는 선택 피연산자 명령과 함께, 상기 선택 피연산자 명령 앞에 네 개까지의 추가적인 명령들이 프로세서 파이프라인(202)에 존재할 수 있다. 이러한 네 개의 추가적인 명령들 중 세 개는 다양한 실행 스테이지들일 수 있다. 동일한 상태 코드 비트에 영향을 줄 수 있는 명령들과 동시에 다수의 실행 스테이지들이 동작한다면, 실행에 대한 프로그램 순서는 어떤 명령이 상태 코드 비트를 설정하는데 있어 우선순위를 가지는지 지시한다. 피연산자 선택 기준에서 사용되는 상태 코드 비트들에 영향을 주는, 선택 피연산자 명령에 앞서는, 마지막 명령은 룩 어헤드(look ahead) 프로세스에 의해 결정된다.
룩 어헤드 프로세스는 또한 파이프라인을 통과하는 각각의 명령으로부터 디코딩된 제어 비트들을 사용하여 디코드에서 시작한다. 제어 비트들의 일부는, 존재한다면, 명령이 어떤 상태 비트들에 영향을 주는지를 표시한다. 동작 스테이지가 상태 코드 레지스터(234)에 영향을 주는지 여부를 결정하기 위해 각각의 파이프 라인 스테이지가 체크될 수 있도록, 각각의 디코딩된 명령의 제어 비트들은 파이프라인을 통해 명령별로 특정된 연산들을 따른다. 일례로서, 룩 어헤드는 각각의 파이프라인 실행 스테이지에서 특정한 제어 비트들의 OR로서 동작할 수 있다. 이러한 접근은 관련된 상태 비트 또는 비트들에 영향을 주는 명령이 파이프라인 실행 스테이지들에 존재하지 않는 경우에 대한 빠른 테스트로서 유용하다. 제어 비트들은 파이프라인의 각각의 실행 스테이지에 대하여 사용가능하기 때문에, 상태 레지스터가 언제 영향을 받을 수 있는지가 또한 결정될 수 있다.
관련된 상태 비트 또는 비트들에 영향을 주는 명령이 파이프라인 실행 스테이지들에 존재하지 않으면, 디코드 스테이지에서 피연산자 선택 기준을 결정하기 위해 사용가능한 충분한 정보가 존재한다. 어떤 피연산자가 선택되어야 하는지 결정되면, 프로세싱은 다음의 판독 레지스터 스테이지(214)로 진행하며, 판독 레지스터 스테이지(214)는 선택된 피연산자만을 패치하기 위한 제어 정보를 제공받는다.
파이프라인 실행 스테이지들에 있는 적어도 하나의 명령이 관련된 상태 비트 또는 비트들에 영향을 준다면, 프로세싱은 다음의 판독 레지스터 스테이지(214)로 진행하며, 판독 레지스터 스테이지(214)는 선택 피연산자 명령에 의해 요구되는 모든 피연산자들을 패치하기 위한 제어 정보를 제공받는다. 모든 피연산자들이 패치되는 동안, 선택 기준의 결정은 모니터링된다. 아래에서 추가적으로 설명되는 바와 같이, 모든 피연산자들이 패치되기 전에 스톨 시간을 줄이기 위해 사용될 수 있는 선택 기준이 결정될 수 있다.
판독 레지스터 스테이지(214)는 실행 A 스테이지(220)와 같은 스테이지에서 처리되도록 요구되는 피연산자들을 패치한다. 상기 피연산자들은 범용 레지스터(GPR) 파일(250) 또는 포워딩 네트워크(미도시)로부터 패치될 수 있다. 포워딩 네트워크는 결과 피연산자들이 실행 스테이지들로부터 사용가능하게 되자마자 상기 결과 피연산자들을 제공하기 위해 GPR 파일(250) 주변의 빠른 경로를 제공한다. 포워딩 네트워크를 사용하더라도, 깊은(deep) 실행 파이프라인으로부터의 결과 피연산자들은 프로세서 파이프라인(202)에서 세 개의 사이클들을 차지하거나 또는 대안적인 구현에서 세 개 보다 많은 사이클들을 차지할 수 있다. 이러한 사이클들 동안, 실행 파이프라인으로부터의 결과 피연산자 데이터를 요구하는 판독 레지스터 스테이지(214)에 있는 명령은 결과 피연산자가 사용가능하게 될 때까지 기다려야 한다.
고려되어야 하는 스톨링 상황의 다른 예는 로드 명령의 실행과 함께 발생한다. L1 데이터 캐시(206)에서 미스가 존재한다면, 로드 명령의 실행은 상당한 개수의 사이클들을 차지할 수 있다. 로드 명령은 유효 주소를 생성하기 위해 실행 A 스테이지(220)에서 베이스 주소를 제공하고 즉각적인 값을 상기 베이스 주소로 더하도록 GPR 파일(250) 레지스터를 사용할 수 있다. 유효 주소는 데이터 경로(252)를 통해 L1 데이터 캐시(206)로 전송된다. L1 데이터 캐시(206)에 미스가 있으면, 데이터는 L2 캐시 및 메인 메모리를 포함할 수 있는 메모리 계층(208)으로부터 패치되어야 한다. L1 데이터 캐시의 미스 후에 데이터를 패치하기 위해 취해지는 사이클들 동안, 소스 피연산자로서 인-플라잇(in-flight) 로드 데이터를 요구하는 명령은 인-플라잇 피연산자가 사용가능하게 될 때까지 파이프라인에서 스톨된다. 상기 스톨은 판독 레지스터 스테이지(214) 또는 실행 A 스테이지(220)의 시작부분에서 발생한다고 고려될 수 있다. 미스가 해결되면, 로드 데이터는 경로(254)를 통해 라이트 백 연산으로 전달되며, 라이트 백 연산은 라이트 백 스테이지(218)의 일부로 고려될 수 있다. 그 다음에 피연산자는 GPR 파일에 기록되고 또한 포워딩 네트워크로 전송될 수 있다. 로드 연산에 기인한 선택 피연산자 명령의 실행에서의 스톨의 효과는 아래에서 논의되는 바와 같이 최소화될 수 있다.
몇몇 프로세서 파이프라인들에서, 레지스터 파일 액세스가 시작된 후에 선택 기준에 대한 평가가 이루어질 수 있다는 것을 유의하도록 한다. 이러한 경우에, 피연산자가 요구되지 않으며 아직 수신되지 않았다고 결정되면, 명령에 대한 프로세싱은 피연산자가 인-플라잇 상태에 있는지 트래킹하는 것을 중단하거나 또는 프로세서는 피연산자가 사용가능하다고 표시하는 태그에 대하여 포워딩 네트워크를 "청취(listen)"하는 것을 중단한다. 이러한 절차는 패치 연산보다 더욱 수동적인 연산이다. 본 발명에 내에서 어떠한 접근 방식도 동작가능하다.
도 2B는 프로세서의 실행 스테이지들로 진입하기 전에 언제 프로세서를 스톨시킬 것인지를 결정하기 위한 조건들을 식별하는 예시적인 결정 테이블(265)이다. 평가되는 파이프라인에 있는 명령은 두 개의 피연산자 선택들인, 피연산자 A 및 피연산자 B로부터 하나의 피연산자를 선택하는 것을 특정하는 선택 피연산자 명령이다. 피연산자 A 및 피연산자 B의 사용가능성은 각각 열들(266 및 267)에 도시된다. 테이블(265)은 선택 기준이 피연산자 A를 선택하도록 결정되는 시나리오에 기초한다. 피연산자가 사용가능하다고 표시되면, 상기 피연산자를 획득하기 위해 추가적인 사이클들이 요구되지 않는다. 선택 기준의 상태는 열(268)에 도시된다. 열(269)에서 도시되는 바와 같이, 패치 연산들은 사용가능하지 않은 하나 또는 둘 모두의 피연산자들을 획득하도록 지정된다. 포워딩 네트워크에 의해 또는 GPR 파일로부터 제공되는 피연산자들은 파이프라인을 스톨링하지 않고 사용가능할 수 있다. 선택 기준이 결정될 수 없으면(사용가능하지 않으면), 선택 기준에 영향을 줄 수 있는 파이프라인에 있는 적어도 하나의 명령에 기인한 것으로 간주된다. 스톨 열(270)에서 도시되는 바와 같이, 피연산자들 및 선택 기준을 포함하는 실행을 완료하기 위한 입력이 사용가능하지 않으면 파이프라인은 스톨된다. 일반적인 동작 시나리오들은 테이블의 행들에 의해 표시된다.
행(271)은 피연산자 A 및 피연산자 B 모두 사용가능하지 않으며 선택 기준 또한 사용가능하지 않은 것을 표시한다. 피연산자들 모두가 패치되고 선택 기준 상태 비트/들이 모니터링되는 동안 파이프라인은 판독 피연산자 스테이지에서 스톨된다. 행(272)은 피연산자들 모두가 사용가능하게 되기 전에 선택 기준이 결정된 것을 표시하며, 이러한 경우에 피연산자 B는 요구되지 않는다고 알려져 있다. 예를 들어, 행(271)의 시나리오를 통해 피연산자 B의 패치가 시작되었다면, 피연산자 B의 패치는 안전하게 종료될 수 있다. 파이프라인은 피연산자 A가 사용가능하게 되는 것을 기다리는 판독 스테이지에서 스톨된다. 행들(273 및 275)의 시나리오에서와 같이, 선택 기준이 결정되기 전에 피연산자 A 또는 피연산자 B가 사용가능하게 되면, 프로세싱은 다른 피연산자가 사용가능하게 되는 것을 기다리거나, 또는 선택 기준이 피연산자 패치 동작들에 영향을 줄 수 있기 때문에 선택 기준이 선택 되는 것을 기다리는 판독 스테이지에서 스톨된 상태를 유지한다. 시나리오(277)에서와 같이, 피연산자들 모두가 사용가능하거나 또는 파이프라인 스톨이 개시된 후이지만 선택 기준이 결정되기 전에 사용가능하게 되면, 프로세싱은 선택 기준이 결정되는 것을 기다리는 판독 스테이지에서 스톨된 상태를 유지한다. 행(274)의 시나리오에서와 같이, 판독 스톨이 개시된 후에 선택 기준이 결정되고 피연산자 A는 사용가능하나 피연산자 B는 사용가능하지 않으면, 피연산자 B의 패치는 종료되고 프로세싱은 실행 스테이지들로 진행한다. 프로세싱이 스톨링없이 행(274)의 시나리오를 진행하면, 입력들은 사용가능하기 때문에 판독 레지스터 스테이지에서 스톨이 요구되지 않을 것이며 프로세싱은 실행 스테이지들로 진행한다. 행(276)의 시나리오에서와 같이, 판독 스톨이 개시된 후에 선택 기준이 결정되고 피연산자 B는 사용가능하지만 피연산자 A는 사용가능하지 않으면, 피연산자 A가 사용가능하게 될 때까지 스톨은 계속된다. 프로세싱이 스톨링없이 행(276)과 같은 시나리오를 진행하면, 피연산자 A가 사용가능하지 않기 때문에 판독 레지스터 스테이지에서 스톨이 요구될 것이다. 피연산자들 모두와 선택 기준이 사용가능하면, 파이프라인 스톨은 요구되지 않으며 프로세싱은 실행 스테이지들로 진행한다.
여기에서 설명되는 바와 같이, 사용되지 않을 다른 피연산자가 사용가능하지 않더라도 선택된 피연산자가 사용가능하면, 실행을 개시하는 선택 피연산자 명령은 피연산자 데이터를 기다리기 위해 요구될 스톨을 스킵하거나 또는 스톨의 이른 종료를 야기하게 될 것이다. 선택 기준이 결정되고 선택된 피연산자가 패치되어 사용가능하게 될 때까지 선택 피연산자 명령의 피연산자들을 기다리는 것으로 인한 스톨은 유지된다.
프로세싱을 위한 피연산자들이 사용가능하면, 실행 스테이지로 진입하게 된다. 선택 기준에 기반하여 두 개의 GPR 파일 피연산자들 중에서 선택하고 선택된 피연산자를 타겟 GPR 파일 주소로 저장하는 선택 명령에 있어서, 이러한 동작은 실행 스테이지들을 바이패싱하고 선택된 피연산자를 라이트 백 스테이지(218) 및 프워딩 네트워크(미도시)로 포워딩할 수 있다. 각각의 실행 스테이지의 결과들을 파이프라인을 통과하는 후속 명령들로 포워딩하기 위해 전형적으로 결과 포워딩 네트워크(미도시)가 존재한다. 일반적인 선택 피연산자 명령들에서, 실행 스테이지 프로세싱을 개시하기 위해 선택된 피연산자는 실행 A 스테이지(20)로 전달된다.
각각의 실행 스테이지는 명령에 대한 프로세싱을 완료할 수 있거나 또는 명령별로 특정된 동작의 복잡도에 따라 요구되는 동작들의 일부만을 처리할 수 있다. 각각의 실행 스테이지가 자신의 동작을 완료하면, 그 결과들은 라이트 백 스테이지(218)로 직접 전송될 수 있다. 예를 들어, 명령이 실행 A 스테이지(220)의 끝부분에서 자신의 특정된 동작을 완료하면, 그 결과들은 경로(252)를 통해 라이트 백 스테이지(218)로 포워딩된다. 마찬가지로, 실행 B 스테이지(222)의 끝부분에서 자신들의 동작들을 완료하는 명령들은 자신들의 결과들을 경로(258)를 통해 라이트 백 스테이지(218)로 포워딩하고, 실행 C 스테이지(224)의 끝부분에서 자신들의 동작들을 완료하는 명령들은 자신들의 결과들을 경로(260)를 통해 라이트 백 스테이지(218)로 포워딩한다. 라이트 백 스테이지(218)는 상기 결과들을 다시 GPR 파일(250)에 있는 레지스터로 기록한다. 결과들은 프로그램 순서와 비교할 때 다른 순서로 라이트 백 스테이지(218)에서 수신될 수 있기 때문에, 라이트 백 스테이지(218)는 결과들을 GPR 파일(250)를 기록할 때 프로그램 순서를 유지하기 위해 프로세서 설비들을 사용한다.
패킹된 데이터 동작들의 사용을 통해, 선택 피연산자 타입 명령은 추가적인 플래그들의 사용에 의해 확장될 수 있다. 예를 들어, 더 많거나 또는 동일한(GE) 플래그들, 더 적은 플래그들(LE) 또는 다른 조건부 표시(CI)와 같은 한 세트의 플래그들이 패킹된 데이터 동작들에서 바이트 단위로 설정될 수 있다. 32 비트 데이터 타입들에서, 네 개의 CI 플래그들이 사용될 수 있다. 64 비트 데이터 타입들에서, 8개의 CI 플래그들이 사용될 수 있다.
도 2C는 본 발명의 제 2 실시예에 따른 패킹된 데이터 선택 피연산자 명령이 사용될 수 있는 파이프라인된 프로세서 컴플렉스(280)의 기능적 블록 다이어그램이다. 파이프라인 프로세서(282)는 선택 기준 또는 패킹된 32-비트 피연산자들을 지원하는 CI 플래그들(284)에 기반한 기준을 사용한다. CI 플래그들(284)은 프로그램 상태 워드에 결합된 CC/CI 레지스터(288)로서 상태 코드 레지스터(286)와 함께 포함될 수 있다.
패킹된 데이터 선택 피연산자 명령은 두 개의 패킹된 데이터 피연산자들로부터 바이트들을 선택하기 위해 CI 플래그들을 사용할 수 있다. 예를 들어, 32-비트 패킹된 데이터 선택 명령은 개별적인 CI[3:0] 플래그들을 사용하기 위해 명령 세트 아키텍처에서 특정될 수 있으며, 상기 플래그들은 피연산자 A로부터의 대응하는 바이트를 선택하기 위한 1과 피연산자 B로부터 대응하는 바이트를 선택하기 위한 0으 로 구성된다. 선택된 바이트들을 포함하는 32 비트 타겟 레지스터를 생성하기 위해, CI[3:0]=1010은 피연산자 A로부터 바이트 3을 선택하고, 피연산자 B로부터 바이트 2를 선택하고, 피연산자 A로부터 바이트 1을 선택하고, 피연산자 B로부터 바이트 0을 선택한다. CI[3:0]=1111이면, 피연산자 A의 모든 바이트들이 선택될 것이다. CI[3:0]=0000이면, 피연산자 B의 모든 바이트들이 선택될 것이다. CI[3:0]=1111이면, 피연산자 B는 요구되지 않으며 패칭될 필요가 없다. CI[3:0]=0000이면, 피연산자 A는 요구되지 않으며 패칭될 필요가 없다. 선택 기준은 프로그램 상태 워드에 있는 CI 플래그들의 비트 설정들에 의해 결정된다. 피연산자를 패칭하거나 또는 피연산자의 패칭을 생략하는지를 결정하기 위한 목적으로, 모두 1들이거나 또는 모두 0들인 CI 플래그들에 기반한 선택 기준이 사용될 수 있다.
도 2A의 홀드 회로(262) 및 도 2C의 홀드 회로(290)와 같은 홀드 회로의 사용에 의해 프로세서 파이프라인에서 스톨이 발생될 수 있다. 홀드 회로는 예컨대 파이프라인에서 명령을 스톨시키기 위해 파이프라인 스테이지 레지스터들을 게이팅(gate)하도록 사용될 수 있는 홀드 신호를 생성한다. 도 2A의 프로세서 파이프라인(202) 및 도 2C의 프로세서 파이프라인(282)에 대하여, 예컨대 입력들 모두가 사용가능한 것은 아니라면, 입력들의 도달을 펜딩(pending)하는 파이프라인이 홀딩되도록 홀드 신호는 판독 레지스터 스테이지에서 액티베이션될 수 있다. 모든 피연산자들이 사용가능하게 되고 선택 기준이 결정되었을 때 홀드 신호는 해제된다. 예시적으로, 도 2B의 테이블(265)에서 특정된 바와 같은 동작 시나리오들에 따라, 홀드 신호는 적절하게 액티베이션되고 해제될 수 있다.
선택 피연산자 명령들의 프로세싱은 명령 타입을 결정하고, 선택 기준을 결정하기 위한 조건 및 플래그 상태를 표시하는 상태 코드들과 CI 플래그들과 같은 플래그들을 검사하는 과정을 포함한다. 명령은 명령 포맷 내에 자신이 선택 피연산자 명령임을 표시하는 필드를 가질 수 있다. 본 발명은 다양한 명령 포맷들 및 아키텍처 사양에 적용가능하다.
도 3은 본 발명에 따른 조건부 피연산자 선택 함수를 특정하는 32-비트 명령(300)에 대한 일반적인 포맷을 나타내는 도면이다. 선택 피연산자 명령(300)은 자신을 선택 피연산자 명령으로 식별하는 연산코드(opcode)(302)와 적어도 두 개의 소스 피연산자 주소 필드들인 Ra(304) 및 Rb(306)를 포함한다. 연산코드(302)는 선택 기준 및 더하기, 곱하기, 시프트, 로직, 비트 조작 등과 같은 명령 동작 모두를 특정한다. 대안적으로, 개별적인 비트 또는 비트들이 명령을 선택 피연산자 명령으로 식별하기 위해 명령 포맷 내에서 특정될 수 있으며 연산코드는 함수 사양에 대하여만 사용된다. 다른 비트 필드들(308, 310 및 312)은 명령별로 특정된 필드들일 수 있으며, 명령을 실행할 것인지 여부에 대하여 제어하기 위한 상태 필드, 타겟 레지스터 주소 필드, 데이터 타입 등을 위해 사용될 수 있다.
도 4는 프로세서 파이프라인에서 빠르게 피연산자를 조건부로 선택하기 위해 요구되는 동작 단계들을 나타내는 플로우차트(400)이다. 단계 404에서, 패치된 명령은 예컨대 디코드 스테이지(212)와 같은 디코드 스테이지에서 디코딩된다. 단계 406에서, 명령이 선택 피연산자 명령인지 여부가 결정된다. 명령이 선택 피연산자 명령이 아니면, 프로세싱은 단계 408로 진행한다. 단계 408에서, 모든 피연산자들은 예컨대 GPR 파일(250)과 같은 범용 레지스터 파일로부터 적절하게 판독 레지스터 스테이지(214)로 액세스된다. 단계 410에서 피연산자들이 즉시 사용가능하지 않다고 결정되면, 단계 412에서 표시되는 바와 같이, 피연산자들 모두를 기다리기 위해 명령은 스톨되어야 한다. 단계 410에서 모든 피연산자들이 사용가능하다고 결정되면, 단계 414에서 명령은 예컨대 도 2A의 실행 A 스테이지(220)에서 시작하는 실행 파이프라인을 통해 진행하도록 허용된다.
단계 404에서 선택 피연산자 명령이 패치되고 디코딩되는 다른 시나리오를 고려하도록 한다. 이러한 경우에, 단계 406에서 패치 명령은 선택 피연산자 명령이라고 결정되고 프로세싱은 단계 416으로 진행한다. 단계 416에서, 피연산자 선택 기준이 도 2A의 CC 레지스터(234) 또는 도 2C의 CC/CI 레지스터(288)와 같은 상태 코드 레지스터의 현재 상태에 기반하여 결정될 수 있는지를 결정하기 위한 테스트가 이루어진다. 파이프라인에서 인-플라잇 상태에 있는 이전 명령 또는 명령들이 상태 플래그들에 영향을 줄 수 있고 이에 따라 피연산자 선택 기준에 영향을 줄 수 있다면, 선택 기준이 결정되지 않을 수 있다. 피연산자 선택 기준이 CC 또는 CI 레지스터들의 현재 상태에 기반하여 결정될 수 있다면, 프로세싱은 단계 418로 진행한다. 단계 418에서, 상기 선택 기준에 기반하여 선택된 피연산자가 패치된다. 프로세싱은 계속해서 예컨대 판독 레지스터 스테이지(214)에 도달하는 단계 420으로 진행한다. 단계 420에서, 선택된 피연산자가 사용가능한지 여부가 결정된다. 단계 420에서 선택된 피연산자가 즉시 사용가능하지 않다고 결정되면, 단계 422에서 표시되는 바와 같이, 선택된 피연산자를 기다라기 위해 명령은 스톨되어야 한다.
단계 420에서 선택된 피연산자가 사용가능하다고 결정되면, 프로세싱은 단계 424로 진행하며, 단계 424에서 상기 명령이 일반적인 선택 피연산자 명령 타입의 서브세트인 선택 명령 또는 일반적인 선택 피연산자 명령 타입인지 여부를 결정한다. 상기 명령이 선택 명령이면, 프로세싱은 단계 426으로 진행하며, 단계 426에서 실행 스테이지들(216)과 같은 실행 스테이지들은 바이패스되고 상기 피연산자는 라이트 백 스테이지(218)와 같은 라이트 백 스테이지로 포워딩된다. 상기 피연산자는 또한 포워딩 네트워크로 전송될 수 있다. 상기 명령이 일반적인 선택 피연산자 명령이면, 프로세싱은 예컨대 실행 A 스테이지(220)에서 시작하는 단계 414로 진행한다.
파이프라인에서 인-플라잇 상태에 있는 이전 명령 또는 명령들이 CC 레지스터(234) 또는 CC/CI 레지스터(288)에 영향을 줄 수 있고 이에 따라 피연산자 선택 기준에 영향을 줄 수 있는지를 단계 416의 테스트에서 결정하는 시나리오가 발생할 수 있다. 이러한 경우에, 프로세싱은 단계 430으로 진행하며, 단계 430에서 모든 피연산자들을 패치하고 상태 플래그들이 업데이트를 위해 모니터링되는 프로세스가 개시된다. 단계 432에서, 선택 기준의 결정과 관련된 모든 CC 또는 CI 비트들이 업데이트되었는지 여부를 결정하기 위한 테스트가 이루어진다. 관련된 CC 또는 CI 비트들이 업데이트되지 않았다면, 프로세싱은 단계 430으로 리턴하여 모든 피연산자들에 대한 패치가 계속된다. 모든 관련된 CC 또는 CI 비트들이 업데이트되었다 고 단계 432에서 결정되면, 프로세싱은 단계 434로 진행하며, 단계 434에서 선택 기준에 의해 필요하지 않다고 결정된 피연산자의 패치는 중단된다. 그 다음에 프로세싱은 단계 420으로 진행하고, 단계 420에서 선택된 피연산자가 사용가능한지 여부가 결정된다. 그렇지 않으면, 선택된 피연산자가 사용가능하다고 결정될 때까지, 단계 422에서 표시되는 바와 같이, 명령에 대한 프로세싱은 스톨되어야 한다.
선택된 피연산자가 사용가능하면, 프로세싱은 단계 424로 진행하며, 단계 424에서 상기 명령이 일반적인 선택 피연산자 명령 타입의 서브세트인 선택 명령 또는 일반적인 선택 피연산자 명령 타입인지 여부를 결정한다. 상기 명령이 선택 명령이면, 프로세싱은 단계 426으로 진행하며, 단계 426에서 실행 스테이지들(216)과 같은 실행 스테이지들은 바이패스되고 상기 피연산자는 라이트 백 스테이지(218)와 같은 라이트 백 스테이지로 포워딩된다. 상기 피연산자는 또한 포워딩 네트워크로 전송될 수 있다. 상기 명령이 일반적인 선택 피연산자 명령이면, 프로세싱은 예컨대 실행 A 스테이지(220)에서 시작하는 단계 414로 진행한다.
본 발명은 바람직한 실시예를 설명하였으며, 본 발명에 대한 설명은 본 명세서와 청구범위의 기재와 일관되는 다양한 실시예들에 적용될 수 있다는 것을 이해해야 할 것이다.

Claims (20)

  1. 파이프라인 동작 방법에 있어서,
    적어도 두 개의 피연산자(operand)들의 그룹으로부터 선택될 적어도 하나의 피연산자를 특정하는 명령을 탐지하는 단계;
    상기 명령에 의해 특정되는 피연산자 선택 기준을 결정하는 단계;
    상기 적어도 두 개의 피연산자들의 그룹으로부터 적어도 하나의 피연산자를 선택하기 위해 상기 피연산자 선택 기준을 평가하는 단계; 및
    선택되지 않은 피연산자가 사용가능하게 될 때까지 기다리지 않고 상기 적어도 하나의 선택된 피연산자가 사용가능하면 실행을 위해 상기 명령을 수행(commit)하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 선택 기준을 결정하는 단계는 상기 선택 기준을 위한 기초(basis)로서 사용되는 적어도 하나의 상태 플래그(condition flag)를 결정하기 위해 상기 명령을 디코딩하는 단계를 더 포함하는 방법.
  3. 제 1 항에 있어서,
    상기 선택 기준을 평가하는 단계는 상기 선택 기준에 의해 특정되는 상태 플래그들이 여전히 실행 중인 이전 명령에 의해 영향을 받을 가능성이 있으면 영향을 받을 가능성이 있는 상기 상태 플래그들을 기다리는(wait for) 단계를 더 포함하는 방법.
  4. 제 2 항에 있어서,
    상기 적어도 하나의 상태 플래그를 결정하기 위한 상기 단계는 상기 적어도 하나의 상태 플래그가 실행 중인 이전 명령에 의해 영향을 받을 수 있는지 여부를 체크하기 위해 프로세서 실행 파이프라인 스테이지들에서 룩-어헤드(look ahead)하는 단계를 더 포함하는 방법.
  5. 파이프라인 동작 방법에 있어서,
    적어도 세 개의 피연산자(operand)들의 그룹으로부터 선택될 적어도 두 개의 피연산자들을 특정하는 명령을 탐지하는 단계;
    상기 명령에 의해 특정되는 피연산자 선택 기준을 결정하는 단계;
    상기 적어도 세 개의 피연산자들의 그룹으로부터 적어도 두 개의 피연산자들을 선택하기 위해 상기 피연산자 선택 기준을 평가하는 단계; 및
    선택되지 않은 피연산자가 사용가능하게 될 때까지 기다리지 않고 상기 적어도 두 개의 선택된 피연산자들이 사용가능하면 실행을 위해 상기 명령을 수행(commit)하는 단계를 포함하는 방법.
  6. 제 1 항에 있어서,
    상기 명령은 상기 적어도 하나의 선택된 피연산자의 함수를 특정하는 방법.
  7. 제 6 항에 있어서,
    상기 함수는 상기 적어도 하나의 선택된 피연산자에 기반하여 계산된 결과를 리턴하는 방법.
  8. 파이프라인 동작 방법에 있어서,
    피연산자(operand)들로 구성되는 한 그룹의 블록들로부터 선택될 적어도 두 개의 피연산자들로 구성된 블록을 특정하는 명령을 탐지하는 단계;
    상기 명령에 의해 특정되는 피연산자 블록 선택 기준을 결정하는 단계;
    상기 피연산자(operand)들로 구성되는 한 그룹의 블록들로부터 적어도 두 개의 피연산자들로 구성된 블록을 선택하기 위해 상기 피연산자 블록 선택 기준을 평가하는 단계; 및
    선택되지 않은 피연산자 블록이 사용가능하게 될 때까지 기다리지 않고 상기 선택된 적어도 두 개의 피연산자들로 구성된 블록이 사용가능하면 실행을 위해 상기 명령을 수행(commit)하는 단계를 포함하는 방법.
  9. 제 1 항에 있어서,
    상기 선택 기준은 적어도 하나의 패킹된(packed) 데이터 바이트 상태 표시에 기반하는 방법.
  10. 프로세서 파이프라인에서 선택 피연산자 명령을 처리하는 방법으로서,
    상기 프로세서 파이프라인의 디코드 스테이지에서 상기 선택 피연산자 명령에서 특정되는 선택 기준을 디코딩하는 단계;
    상기 선택 기준에 의해 특정되는 상태 플래그들을 분석하는 단계;
    상기 상태 플래그들에 대한 상기 분석이 상기 선택 피연산자 명령에서 특정되는 적어도 두 개의 피연산자들의 그룹의 적어도 하나의 피연산자가 선택될 것이라고 표시하면, 선택되지 않은 피연산자에 대한 임의의 대기(wait)를 종료하는 단계; 및
    상기 적어도 하나의 선택된 피연산자를 사용하여 상기 선택 피연산자 명령을 실행하는 단계를 포함하는 방법.
  11. 제 10 항에 있어서,
    상기 상태 플래그들을 분석하는 단계는 상기 선택 기준에 의해 특정되는 상태 플래그들이 여전히 실행 중인 이전 명령에 의해 향을 받을 가능성이 있으면 영향을 받을 가능성이 있는 상기 상태 플래그들을 기다리는 단계를 더 포함하는 방법.
  12. 제 10 항에 있어서,
    상기 적어도 두 개의 피연산자들의 그룹은 레지스터 피연산자 및 즉시적인(immediate) 값 피연산자를 포함하는 방법.
  13. 제 10 항에 있어서,
    상기 선택 피연산자 명령을 실행하는 단계는 상기 적어도 하나의 선택된 피연산자의 함수인 결과를 리턴하는 단계를 더 포함하는 방법.
  14. 명령들을 처리하기 위한 파이프라인된(pipelined) 프로세서로서,
    다수의 명령들 중 각각의 명령에 의해 요구되는 입력 피연산자 데이터를 사용하여 명령들을 실행시키기 위한 실행 스테이지;
    각각의 명령에 대한 상기 입력 피연산자 데이터의 수신이 완료될 때까지, 상 기 실행 스테이지에 의한 각각의 명령의 실행 이전에, 차례대로 다수의 명령들 각각에 대한 홀드(hold)를 생성하기 위한 홀드 회로; 및
    상기 입력 피연산자 데이터의 수신이 완료되기 전에, 선택할 피연산자 데이터를 결정하고 선택된 피연산자 데이터가 사용가능하다고 결정되면 실행되는 명령에서 특정되는 선택 기준과 관련하여 상기 홀드를 종료하기 위한 수단을 포함하는 파이프라인된 프로세서.
  15. 제 14 항에 있어서,
    상기 홀드를 종료하는 동작은 명령이 실행을 완료하는데 필요하지 않은 입력 피연산자 데이터에 대한 패치(fetch) 연산을 종료하는 동작을 더 포함하는 파이프라인된 프로세서.
  16. 제 14 항에 있어서,
    상기 다수의 명령들 중 각각의 명령을 상기 선택 기준을 나타내는 상태 코드들을 특정하는 제어 비트들을 포함하는 제어 비트들로 디코딩하기 위한 디코더; 및
    상기 파이프라인을 통해 스테이지 별로(stage by stage) 상기 제어 비트들을 트래킹하는 파이프라인 스테이지들을 더 포함하는 파이프라인된 프로세서.
  17. 제 16 항에 있어서,
    상기 제어 비트들은 실행 스테이지가 상기 상태 코드들에 영향을 줄 수 있는지 여부를 결정하기 위해 각각의 파이프라인 스테이지에서 판독가능한 파이프라인된 프로세서.
  18. 제 14 항에 있어서,
    상기 실행되는 명령은 선택 피연산자 명령들을 특정하고 적어도 두 개의 피연산자들의 그룹으로부터 적어도 하나의 피연산자를 선택하기 위한 선택 기준을 특정하는 적어도 하나의 비트 필드와 선택될 각각의 피연산자에 대한 적어도 하나의 비트 필드를 포함하는 파이프라인된 프로세서.
  19. 제 18 항에 있어서,
    상기 명령은 상기 선택된 적어도 하나의 피연산자의 함수를 특정하는 비트 필드를 더 포함하는 파이프라인된 프로세서.
  20. 제 18 항에 있어서,
    각각의 피연산자에 대한 상기 적어도 하나의 비트 필드는 피연산자 데이터 엘리먼트들의 블록을 가리키는 주소인 파이프라인된 프로세서.
KR1020087020385A 2006-01-20 2007-01-22 피연산자의 빠른 조건부 선택 KR100986375B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/336,357 2006-01-20
US11/336,357 US9710269B2 (en) 2006-01-20 2006-01-20 Early conditional selection of an operand

Publications (2)

Publication Number Publication Date
KR20080087171A KR20080087171A (ko) 2008-09-30
KR100986375B1 true KR100986375B1 (ko) 2010-10-08

Family

ID=38286963

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087020385A KR100986375B1 (ko) 2006-01-20 2007-01-22 피연산자의 빠른 조건부 선택

Country Status (6)

Country Link
US (1) US9710269B2 (ko)
EP (2) EP1974254B1 (ko)
JP (1) JP5335440B2 (ko)
KR (1) KR100986375B1 (ko)
CN (1) CN101371223B (ko)
WO (1) WO2007085010A2 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130305020A1 (en) 2011-04-01 2013-11-14 Robert C. Valentine Vector friendly instruction format and execution thereof
CN104011670B (zh) 2011-12-22 2016-12-28 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
US9280344B2 (en) * 2012-09-27 2016-03-08 Texas Instruments Incorporated Repeated execution of instruction with field indicating trigger event, additional instruction, or trigger signal destination
KR101711388B1 (ko) 2013-01-28 2017-03-02 삼성전자주식회사 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치
US10459727B2 (en) 2015-12-31 2019-10-29 Microsoft Technology Licensing, Llc Loop code processor optimizations
US10592252B2 (en) 2015-12-31 2020-03-17 Microsoft Technology Licensing, Llc Efficient instruction processing for sparse data
US11385897B2 (en) * 2019-10-01 2022-07-12 Marvell Asia Pte, Ltd. Merge execution unit for microinstructions

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0863353A (ja) * 1994-07-14 1996-03-08 Advanced Risc Mach Ltd 掛け算累算命令を使用したデータ処理

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5150469A (en) 1988-12-12 1992-09-22 Digital Equipment Corporation System and method for processor pipeline control by selective signal deassertion
GB2228597A (en) * 1989-02-27 1990-08-29 Ibm Data processor with conditional instructions
JP3082944B2 (ja) 1990-12-20 2000-09-04 富士通株式会社 パイプライン処理装置
US5699537A (en) * 1995-12-22 1997-12-16 Intel Corporation Processor microarchitecture for efficient dynamic scheduling and execution of chains of dependent instructions
GB2317466B (en) 1996-09-23 2000-11-08 Advanced Risc Mach Ltd Data processing condition code flags
TW325552B (en) 1996-09-23 1998-01-21 Advanced Risc Mach Ltd Data processing condition code flags
GB2317464A (en) 1996-09-23 1998-03-25 Advanced Risc Mach Ltd Register addressing in a data processing apparatus
TW343318B (en) 1996-09-23 1998-10-21 Advanced Risc Mach Ltd Register addressing in a data processing apparatus
US6173393B1 (en) 1998-03-31 2001-01-09 Intel Corporation System for writing select non-contiguous bytes of data with single instruction having operand identifying byte mask corresponding to respective blocks of packed data
JP2000020309A (ja) 1998-06-30 2000-01-21 Toshiba Microelectronics Corp デジタルシグナルプロセッサ
JP2001051845A (ja) 1999-08-12 2001-02-23 Hitachi Ltd アウトオブオーダー実行方式
US6633971B2 (en) * 1999-10-01 2003-10-14 Hitachi, Ltd. Mechanism for forward data in a processor pipeline using a single pipefile connected to the pipeline
US20050188182A1 (en) * 1999-12-30 2005-08-25 Texas Instruments Incorporated Microprocessor having a set of byte intermingling instructions
US6604192B1 (en) 2000-01-24 2003-08-05 Hewlett-Packard Development Company, L.P. System and method for utilizing instruction attributes to detect data hazards
JP2001216275A (ja) 2000-02-01 2001-08-10 Sony Corp 画像処理装置および画像処理方法
WO2002042907A2 (en) 2000-11-27 2002-05-30 Koninklijke Philips Electronics N.V. Data processing apparatus with multi-operand instructions
JP4220722B2 (ja) 2001-05-02 2009-02-04 パイオニア株式会社 情報記録媒体および情報読取装置
US7028171B2 (en) * 2002-03-28 2006-04-11 Intel Corporation Multi-way select instructions using accumulated condition codes
JP2004062401A (ja) 2002-07-26 2004-02-26 Matsushita Electric Ind Co Ltd 演算プロセッサおよび当該演算プロセッサを用いたカメラ装置
US6944747B2 (en) * 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
US7636837B2 (en) * 2003-05-28 2009-12-22 Fujitsu Limited Apparatus and method for controlling instructions at time of failure of branch prediction
GB2409063B (en) 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0863353A (ja) * 1994-07-14 1996-03-08 Advanced Risc Mach Ltd 掛け算累算命令を使用したデータ処理

Also Published As

Publication number Publication date
EP1974254A2 (en) 2008-10-01
JP5335440B2 (ja) 2013-11-06
EP2461246B1 (en) 2017-03-29
US20070174592A1 (en) 2007-07-26
KR20080087171A (ko) 2008-09-30
WO2007085010A3 (en) 2007-12-13
US9710269B2 (en) 2017-07-18
CN101371223B (zh) 2015-07-15
JP2009524167A (ja) 2009-06-25
EP2461246A1 (en) 2012-06-06
CN101371223A (zh) 2009-02-18
WO2007085010A2 (en) 2007-07-26
EP1974254B1 (en) 2012-06-06

Similar Documents

Publication Publication Date Title
KR101459536B1 (ko) 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치
US6279105B1 (en) Pipelined two-cycle branch target address cache
TWI654562B (zh) 藉由演算法匹配、停用特徵或限制效能之回溯相容性
US8601239B2 (en) Extended register addressing using prefix instruction
US9367471B2 (en) Fetch width predictor
EP2864868B1 (en) Methods and apparatus to extend software branch target hints
RU2417407C2 (ru) Способы и устройство для моделирования поведения предсказания переходов явного вызова подпрограммы
US7444501B2 (en) Methods and apparatus for recognizing a subroutine call
JP2007515715A (ja) 命令キャッシュからラベル境界上のトレースキャッシュに遷移させる方法
KR100986375B1 (ko) 피연산자의 빠른 조건부 선택
US20120204008A1 (en) Processor with a Hybrid Instruction Queue with Instruction Elaboration Between Sections
US10664280B2 (en) Fetch ahead branch target buffer
JP2009524167A5 (ko)
US6983359B2 (en) Processor and method for pre-fetching out-of-order instructions
US6754813B1 (en) Apparatus and method of processing information for suppression of branch prediction
US6609191B1 (en) Method and apparatus for speculative microinstruction pairing
US20050144427A1 (en) Processor including branch prediction mechanism for far jump and far call instructions
US7343481B2 (en) Branch prediction in a data processing system utilizing a cache of previous static predictions
JP2001142707A (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: 20130927

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140929

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150930

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160929

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170929

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20180928

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20190924

Year of fee payment: 10