KR101473906B1 - 재구성 가능한 부동 소수점 유닛을 구비한 프로세서 - Google Patents

재구성 가능한 부동 소수점 유닛을 구비한 프로세서 Download PDF

Info

Publication number
KR101473906B1
KR101473906B1 KR1020097019832A KR20097019832A KR101473906B1 KR 101473906 B1 KR101473906 B1 KR 101473906B1 KR 1020097019832 A KR1020097019832 A KR 1020097019832A KR 20097019832 A KR20097019832 A KR 20097019832A KR 101473906 B1 KR101473906 B1 KR 101473906B1
Authority
KR
South Korea
Prior art keywords
bit
operations
instruction
processor
bit mode
Prior art date
Application number
KR1020097019832A
Other languages
English (en)
Other versions
KR20090118985A (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 KR20090118985A publication Critical patent/KR20090118985A/ko
Application granted granted Critical
Publication of KR101473906B1 publication Critical patent/KR101473906B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • 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/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/3017Runtime instruction translation, e.g. macros
    • 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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Nonlinear Science (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

프로세서(100)를 작동시키는 기법이 제공되는바, 프로세서의 부동 소수점 유닛(FPU)이 풀-비트(full-bit) 모드 또는 감소-비트(reduced-bit) 모드에서 동작하는지를 판별하는 단계를 포함한다. 명령어가 페치되며 그리고 상기 명령어는 상기 풀-비트 모드가 표시되는 때에 단일 연산으로 디코딩되며, 상기 감소-비트 모드가 표시되는 때에 다수의 연산들로 디코딩된다.
풀 비트 모드, 감소 비트 모드, 부동 소수점 유닛, 단일 연산, 다수 연산

Description

재구성 가능한 부동 소수점 유닛을 구비한 프로세서{PROCESSOR WITH RECONFIGURABLE FLOATING POINT UNIT}
일반적으로 본 발명은 프로세서에 관한 것이며, 좀더 상세하게는 재구성 가능한 부동 소수점 유닛에 관한 것이다.
잘 알려진 바와 같이, 부동 소수점 유닛(floating point unit : FPU)은 프로세서 시스템의 일부로서, 부동 소수점 수(floating point number)에 대한 연산을 수행하도록 특별히 설계된 것이다. 일반적으로, 부동 소수점 연산은 덧셈, 뺄셈, 곱셈, 나눗셈, 그리고 제곱근(square root) 연산을 포함한다. 또한, 몇몇 프로세서 시스템은 지수함수 계산 또는 삼각함수 계산과 같은 다양한 초월 함수(transcendental function) 계산을 수행할 수 있지만, 대부분의 현대적인 프로세서들에서는 소프트웨어 라이브러리 루틴으로 이러한 연산들이 수행된다. 가장 최근의 범용 컴퓨터 아키텍처들에서, FPU는 다수의 실행 유닛들을 포함한다. 이러한 아키텍처들에서, 부동 소수점 연산은 통상적으로 정수 연산에 대해 독립적으로 수행되며 그리고 파이프라인화되는 것이 일반적이다. FPU의 실행 유닛들은 특화될 수도 있으며 그리고 좀더 간단한 연산들(예컨대, 덧셈과 곱셈)과 좀더 복잡한 연산들(예컨대, 나눗셈) 사이에서 나뉘어질 수도 있다. 몇몇 케이스에서는, 간단한 연산들만 이 하드웨어적으로 구현되며, 반면에 복잡한 연산들은 에뮬레이트된다.
잘 알려진 바와 같이, 명령어 집합은 프로세서가 실행할 수 있는 명령어들을 정의한다. 명령어는, 산술 명령어(예컨대, 덧셈 및 뺄셈), 논리 명령어(예컨대, AND, OR, NOT 명령어), 데이터 명령어(예컨대, move, input, output, load, store 명령어)를 포함한다. 명령어 집합 또는 명령어 집합 아키텍처(instruction set architecture : ISA)는 프로그래밍에 관련된 프로세서 아키텍처의 일부이며, 네이티브 데이터 유형, 명령어, 레지스터, 어드레싱 모드, 메모리 아키텍처, 인터럽트 및 예외 핸들링, 그리고 외부 입력/출력(I/O)를 포함한다. ISA는 옵코드들(opcodes)(operational codes)의 집합에 대한 세부사항 즉, 특정한 중앙처리 장치(CPU) 아키텍처에 의해 구현되는 네이티브 커맨드(native command)를 포함한다. 알려진 바와 같이, 옵코드는 수행될 연산을 특정하는 기계어 명령어(machine language instruction)이 일부분이다. 완전한 기계어 명령어는 옵코드를 포함하며 그리고 통상적으로는 하나 이상의 오퍼랜드(operand) 즉, 연산이 적용될 데이터를 특정한다. 옵코드들이 적용되는 오퍼랜드들은, CPU 아키텍처에 따라, 레지스터들, 메모리내의 값들, 스택에 저장된 값들, I/O 포트, 데이터 버스 등등을 포함한다.
잘 알려진 바와 같이, 상이한 마이크로아키텍처들을 갖는 컴퓨터들은 공통 명령어 집합을 공유할 수 있다. 예를 들어, 서로 다른 제조업자들의 프로세서들은 거의 동일한 버전의 명령어 집합(예컨대, x86 명령어 집합)을 구비할 수도 있지만, 실질적으로 상이한 내부 설계를 갖는다. 전형적으로, 복잡 명령 집합 컴퓨터(CICS)는, 1개 또는 2개의 기본 연산들(가령, "덧셈" 과 "곱셈")과 암시적(implicit) 명 령어를 결합하는 명령어들을 갖는바, 이는 메모리에 액세스하고, 사용되는 레지스터를 증분시키고, 또는 메모리 또는 레지스터에 저장된 위치들(locations)을 디레퍼런싱(dereferencing)하기 위한 것이다. 축소 명령 집합 컴퓨터(RISC)는, 더 간단하고 더 빠른 명령어 집합을 구현하고 있지만, 코드 밀도는 더 낮다(즉, 주어진 태스크를 처리하기 위해서 더 많은 프로그램 메모리 공간이 필요하다). RISC 명령어는 가령, 2개의 레지스터들을 "더하라(add)" 또는 레지스터에 메모리 위치를 "로드하라(load)" 라는 것과 같은 하나의 암시적 연산만을 구현하는 것이 일반적이다.
지난 세월동안 많은 수의 서로 다른 명령어 집합들이 x86형 프로세서에 적용되어 왔다. 예를 들어, 1997년에 매트릭스 매쓰 확장(matrix math extension : MMX) 명령어 집합이 소개되었다. 일반적으로, MMX는 이전 CPU 설계의 종래의 부동 소수점 레지스터를 재-사용하도록 설계되었기 때문에, MMX 명령어를 실행하는 CPU는, 부동 소수점 및 단일-명령 다중-데이터(SIMD) 유형의 데이터를 동시에 작업할 수 없었다. 더 나아가, 상기 MMX 명령어 집합은 오직 정수(integer)에 대해서만 작용되도록 설계되었다. MMX 명령어 집합의 기능을 추가하기 위해서, 1999년에 스트리밍 SIMD 확장(streaming SIMD extension : SSE)이 소개되었다. SSE 명령 집합에는 XMM0 ~ XMM7 이라 호칭되는 8개의 새로운 128-비트 레지스터들이 추가되었다. 128-비트 레지스터들 각각은 4개의 32-비트 단일-정밀도(single-precision) 부동 소수점 수들을 함께 패킹(packing)한다. SSE 명령어 집합에서, 128-비트 레지스터들은, 운영 시스템(operating system)이 이들을 명시적으로 인에이블링할 때까지 디폴트(default)로 디스에이블되며, 그리고 태스크 스위치들에 걸쳐서 운영 시스템 이 보존해야할 필요가 있는 추가 프로그램 상태들이다. 부동 소수점 지원의 부가로 인해, SSE 명령어 집합(및 SSE 명령어 집합의 후속 버전들)는 MMX 명령어 집합보다 더 널리 이용된다.
SSE2 명령어 집합은 이중-정밀도(double-precision)(64-비트) 부동 소수점 및 8/16/32 비트 정수 데이터 유형들에 대한 새로운 매쓰(math) 명령어들을 부가하였으며, 이들 모두는 SSE에서 이미 소개된 동일한 128-비트 XMM 벡터 레지스터 파일 상에서 작동한다. SSE3 명령어 집합은, 디지털 신호 처리기(DSP) 지향 수학 명령어들 및 몇몇 프로세스(쓰레드) 관리 명령어들을 SSE2 명령어 집합에 부가하였다. SSSE3 명령어 집합은, 16개의 새로운 옵코드들을 SSE3 명령어 집합에 부가하였는바, 이는 하나의 워드에 퍼뮤팅 바이트(permuting bytes), 올바른 라운딩으로 16-비트 고정 소수점 수를 곱하는 것 그리고 워드내 어큐뮬레이트 명령어(accumulate instructions)를 포함한다. SSE4 명령어 집합에는, 내적(dot product) 명령어, 추가적인 정수 명령어들 등이 부가되었다.
본 발명의 다양한 양상에 따르면, 부동 소수점 유닛(FPU)을 포함하는 프로세서 설계가 제공되는바, 상기 부동 소수점 유닛은 공통 제어 섹션과 2개의 실질적으로 동일한 64-비트 데이터 경로들 즉, 탑(top) 데이터 경로와 바텀(bottom) 데이터 경로를 포함하며, 이들 2개의 데이터 경로들은 128-비트 명령어 집합의 부동 소수점 명령어를 실행하는데 이용된다. 제어 섹션은, 지시기(indicator) 예컨대, 모드 비트를 통하여, 상기 탑 데이터 경로와 바텀 데이터 경로를 포함하는 128-비트 데이터 경로 또는 바텀 데이터 경로 중 어느 하나 상에서 128-비트 명령어 집합을 실행하도록 구성된다. 본 발명의 프로세서 설계는 3개의 상이한 구성들을 갖는 프로세서 칩을 제공하는바 즉, 최대 성능을 위해서 128-비트 FPU를 갖는 프로세서 칩과, 전력 소모를 감소시키기 위해서 64-비트 FPU를 갖는 프로세서 칩과, 낮은 전력 소비를 위해서 64-비트 FPU로 동적으로 다운-빈(down-binned)될 수 있는 128-비트 FPU를 갖는 프로세서 칩이 그것이다. 다운-빈(down-binned)될 수 있는 프로세서 칩에서, 다운 빈닝(down-binning)은 전력 요구사항에 기초하여, 부트-업 시에(at boot-up) 또는 실행-시간에서(at run-time) 수행될 수도 있다.
바람직하게, 상기 프로세서 설계는 공통 제어 섹션(로직)을 채용하는바, 예컨대, 하나 이상의 전단 디코더(front-end decoder), 부동 소수점 재명명 유닛, FP 스케줄링 유닛, FP 예외 및 파이프라인 제어 유닛, 그리고 FP 퇴거 유닛을 채용하는바, 이것은 상이한 구성들 중에서 공통적인 것이다. 임의의 경우에 있어서, 상기 전단 디코더는, 모드 비트에 따라, 128-비트 명령어를 하나의 128-비트 네이티브 연산 또는 2개의 64-비트 연산들로 크랙킹(cracking)하도록 구성된다. 많은 명령어 집합들의 단일-명령 다중-데이터(SIMD) 속성은 상기 탑 데이터 경로가 상기 바텀 데이터 경로의 복제품(duplicate)이 되는 것을 허용한다. 전술한 바와 같이, 탑 데이터 경로와 바텀 데이터 경로 둘다는 공통 제어 섹션(인터페이스)을 갖는데, 이는 동일한 블록들이 64-비트 데이터 경로와 128-비트 데이터 경로에서 이용되는 것을 허용한다. 128-비트 데이터 경로에 있어서, 네이티브 연산들은 2개의 64-비트 하프 연산들(half operations)(hops) 즉, 하이 hop(hi hop)와 로우 hop(lo hop)로 재매핑되는바, 이들은 탑 데이터 경로와 바텀 데이터 경로에 각각 제공된다. 64-비트 데이터 경로에 있어서, 네이티브 연산은 하나의 64-비트 하프 연산(즉, 하나의 lo hop)으로 직접 변환된다.
128-비트 데이터에 작용하는 비-SIMD(non-SIMD) 명령어들에 대해서, 탑 데이터 경로와 바텀 데이터 경로 사이에서 데이터를 셔플링하기 위해서 바이패스 유닛(bypass unit)이 구현되는데, 따라서 128-비트 셔플(shuffle), 팩(pack), 그리고 언팩(unpack) 명령어들이 적절히 실행될 수 있다. 상기 바이패스 유닛은 동일한 데이터 경로 내의 데이터 경로 블록들 사이에서(예컨대, 바텀 FP 합산기(adder)와 바텀 FP 곱셈기(multiplier) 사이에서) 포워딩하도록 구성되며, 뿐만 아니라 탑 및 바텀 데이터 경로들의 레지스터 파일로부터 데이터를 판독하도록 구성된다. 본 명세서에서 사용되는 "접속(coupled)" 이라는 용어는, 구성요소들(또는 유닛들)간의 직접적인 전기적 연결과 하나 이상의 중간 구성요소들(또는 유닛들)에 의해서 달성되는 구성요소들(또는 유닛들)간의 간접적인 전기적 연결 둘다를 포함한다.
본 발명의 일양상에 따르면, 프로세서를 동작시키는 방법이 제공되는바, 상기 방법은 프로세서의 부동 소수점 유닛(FPU)이 풀-비트 모드(full-bit mode) 또는 감소-비트 모드(reduced-bit mode)에서 동작할지를 판별하는 단계를 포함한다. 풀-비트 모드가 표시되면, 패치된 명령어는 단일 연산으로 디코드되며, 또는 감소-비트 모드가 표시되면 다수의 연산들로 디코딩된다. 예를 들어, 풀-비트 모드는 128-비트 모드가 될 수 있으며, 감소-비트 모드는 64-비트 모드가 될 수 있다. 다른 일례로서, 풀-비트 모드는 256-비트 모드가 될 수 있으며, 감소-비트 모드는 32-비트 모드가 될 수 있다. 또 다른 일례로서, 풀-비트 모드는 128-비트 모드가 될 수 있으며, 감소-비트 모드는 32-비트 모드가 될 수 있다.
본 발명의 다른 양상에 따르면, 지시기, 디코더, 부동 소수점 유닛(FPU)을 포함하는 프로세서가 개시된다. 디코더는 지시기에 접속되며 그리고 상기 지시기에 근거하여 명령어를 단일 연산으로 또는 다수의 연산들로 디코딩하도록 구성된다. FPU는 디코더에 접속되며 그리고 상기 지시기에 근거하여, 하나의 프로세서 사이클에서 상기 하나의 연산의 실행을 개시하도록 구성되거나 또는 하나 이상의 프로세서 사이클들에서 상기 다수 연산들의 실행을 개시하도록 구성된다.
본 발명의 또 다른 양상에 따르면, 지시기, 프로세서, 프로세서에 접속된 메모리 서브시스템을 포함하는 시스템이 개시된다. 프로세서는 디코더와 부동 소수점 유닛(FPU)을 포함한다. 디코더는 지시기에 접속되며 그리고 상기 지시기에 근거하여 명령어를 단일 연산으로 또는 다수 연산들로 디코딩하도록 구성된다. FPU는 디코더에 접속되며 그리고 상기 지시기에 근거하여, 하나의 프로세서 사이클에서 상기 단일 연산의 실행을 개시하도록 구성되거나 또는 하나 이상의 프로세서 사이클들에서 상기 다수 연산들의 실행을 개시하도록 구성된다.
첨부한 도면들을 참조함으로써, 본 발명이 더욱 더 잘 이해될 것이며, 그리고 다양한 많은 피쳐들 및 장점들도 해당 기술분야의 당업자에게 명백해질 것이다.
도1은 본 발명의 일실시예에 따라 구성된 프로세서의 관련 부분에 대한 전기적인 블록도이다.
도2는 도1의 프로세서의 부동 소수점 유닛(FPU)의 관련 부분에 대한 전기 블록도이다.
도3은 도2를 따라 구성된 프로세서를 포함하는 컴퓨터 시스템의 관련 부분에 대한 블록도이다.
도4는 지시기(indicator)에 근거하여 명령어들을 디코딩하는 프로세스의 순서도이다.
상이한 도면들에서 동일한 도면부호를 이용한다는 것은, 유사하거나 또는 동일한 구성요소들임을 나타낸다.
도1을 참조하면, 재구성가능한(reconfigurable) 부동 소수점 유닛(FPU)을 포함하는 프로세서(100)의 관련 부분이 예시된다. 프로세서(100)는 명령어 캐시로서 기능하는 캐시 메모리(cache)(102)를 포함한다. 하나 이상의 실시예들에서, 캐시(102)는, 레벨 1(L1) 변환 색인 버퍼(translation look-aside buffer : TLB), 레벨 2(L2) TLB, 프리-디코드 캐시, 및 분기 예측 테이블을 통합한다. 상기 캐시(102)는 버스 인터페이스 유닛(BIU)(138)과 L2 캐시 제어기(136)에 접속된다. 캐시(102)와 명령어 디코더(106)에 접속되는 페치/디코드 제어 유닛(104)은, 지시기(110)로부터 구성 신호(configuration signal)(FP 128 신호)를 수신하는바, 이는 레지스터, 퓨즈 등등에 대응할 수 있다. FP 128 신호의 논리 레벨이, 상기 프로세서가 128-비트 모드에서 또는 64-비트 모드에서 동작하는지를 결정한다. 비록, 여기에서 논의되는 바는 주로 128-비트 모드 또는 64-비트 모드에서 동작하는 프로세 서에 관한 것이지만, 개시된 기술은 상이한 모드들(예컨대, 256-비트 모드 및 128-비트 모드)에도 똑같이 적용가능하다. 페치/디코드 제어 유닛(104)은 캐시(102)로부터의 명령어 페칭을 제어하며 그리고 명령어 디코더(106)에 의한 명령어 디코딩을 제어한다. 디코딩된 명령어들은 명령어 디코더(106)로부터 명령어 제어 유닛(ICU)(108)에 제공되며, 명령어 제어 유닛(108)은 여러 기능들 중에서, 디코딩된 명령어(연산)가 정수 유닛(111)으로 디스패치되어야만 하는지 또는 비순서적(out-of-order) 실행 유닛(112)의 부동 소수점 유닛(FPU)(113)으로 디스패치되어야 하는지를 판별한다.
정수 유닛(111)은 정수 스케줄러(114)를 포함하는바, 정수 스케줄러는 정수 연산들을 실행하는 다수의 정수 실행 유닛(integer execution unit : IEU)(116)에 접속되며, 그리고 정수 유닛(111)은 정수 연산들을 위해 어드레스들을 생성하는 다수의 어드레스 생성 유닛(AGU)(118)들을 포함한다. 또한, 상기 IEU(116)와 AGU(118)는 로드/스토어(LS) 유닛(132)에 접속되며, 로드/스토어 유닛(132)은 캐시(134)에 접속된다. 캐시(134)는 데이터 캐시로서 기능하며 그리고 L1 TLB 와 L2 TLB를 구현할 수도 있다. 상기 캐시(134)는 BIU(138) 및 L2 캐시 제어기(136)에 접속된다. FPU(113)는 FPU 스택 맵/재명명 유닛(FPU stack map/rename unit)(120), FPU 스케줄러(122), 그리고 FPU 레지스터 파일(124)을 포함한다. FPU 레지스터 파일(124)은 3개의 로직 파이프들에 접속되는바, 3개의 로직 파이프들은 스토어 콘트롤(STC) 파이프(126), 부동 소수점 합산(FADD) 파이프(128), 부동 소수점 곱셈(FMUL)(130) 파이프이다. 이들 3개의 파이프들 각각은 다중 스테이지들을 갖는 하나 이상의 실행 유닛들을 포함할 수도 있다. 또한, 3개의 로직 파이프들은 LS 유닛(132)에 접속된다.
도2를 참조하면, 도1의 프로세서(100)의 관련 부분이 좀더 상세하게 예시되어 있다. 전술한 바와 같이, 페치/디코드 제어 회로(104)(도1)는, 명령어들(예컨대, SSE 명령어들)의 하나 이상의 캐시 라인들이 캐시(102)로부터 페치되게 하며 그리고 명령어 디코더(106)에 의해서 디코딩되게 한다. 전형적인 아키텍처에서, 각각의 캐시 라인들은 다수의 명령어들을 포함한다. 일실시예에서, 명령어 디코더(106)는 한번에 3개의 명령어들을 디코딩하도록 구성된다. 하지만, 본 명세서에서 개시된 기법들은, 3개보다 많거나 또는 3개보다 적은 명령어들을 한번에 디코딩하는 프로세서에게도 동일하게 적용될 수 있다라는 점을 유의해야 한다. 비록, 본 명세서에서 논의되는 바는 주로 SSE 명령어에 관한 것이지만, 본 명세서에 개시된 기술들은 예컨대 SSE2, SSE3, SSSE3, SSE4, MMX, 3DNOW!™ 등등을 포함하는 임의의 명령어 집합 아키텍처(ISA)를 실행하는 프로세서에도 폭 넓게 적용될 수 있다는 점을 유의해야 한다. 디코더(106)에 의해 제공되는 디코딩된 명령어들(연산들)은, 명령어 큐(queue)(208)에 저장되는바, 명령어 큐는 예컨대, 명령어 제어 유닛(ICU)(108) 내에 위치한다. 전술한 바와 같이, 지시기(110)는, 캐시(102)로부터 페치된 명령어들을 디코딩하기 위하여, 페치/디코드 제어 유닛(104)이 명령어 디코더(106)를 어떻게 구성할지를 지시한다.
개시된 실시예에서, 지시기(110)는 로직 신호(FP 128 신호)를 제공하는바, 로직 신호는 FPU(113)가 어떻게 구성될지를(따라서, 명령어가 어떻게 취급될지를) 나타낸다. 상기 FP 128 신호는 다양한 많은 로직 블록들에게 분배되는바, 이는 FPU(113)이 어떻게 동작하는지를 제어하기 위한 것이다. 예를 들어, FP 128 신호가 어써트되는 때에, 풀-비트 모드가 표시되며 그리고 FPU(113)는 탑 데이터 경로와 바텀 데이터 경로(250, 270) 둘다를 포함하도록 구성되는바, 따라서 상기 FPU(113)는 128-비트 명령어들의 128-비트 연산들을 수행하도록 구성된다. 이러한 경우, 각각의 128-비트 명령어는 하나의 연산(operation)으로 디코딩된다. FP 128 신호가 어써트되지 않는 때에, 감소-비트 모드가 표시되며 그리고 탑 데이터 경로와 바텀 데이터 경로(250, 270) 둘다가 프로세서(100) 내에 포함되는지에 상관없이, FPU(113)는 오직 바텀 데이터 경로(270)만을 이용한다. FP 128 신호가 어써트되지 않는 때에, 상기 FPU(113)는 64-비트 연산들을 수행하도록 구성되는바, 따라서 상기 명령어 디코더(106)는 각각의 128-비트 명령어를 2개의 64-비트 연산들로 크랙킹한다. 스캔 정렬기/마이크로코드 엔진(scan aligner/microcode engine) (SA/ME)(202)은 SA(204)와 ME(206)를 포함하며, 그리고 예를 들면 ICU(108) 내에 포함될 수도 있다. SA(204)는, 프로세서(100)의 동작 동안에 필요에 따라, 명령어 큐(208)로부터 명령어들을 뽑아내도록(pull) 구성된다. 예를 들어, SA(204)는 3개의 명령어들을 명령어 큐(208)로부터 한번에 뽑아낼 수도 있다. 프로세서 사이클당 3개 보다 많거나 또는 적은 명령어들을 명령어 큐로부터 뽑아낼 수 있는 프로세서들에게도 본 명세서에서 개시된 기술들이 폭 넓게 적용가능하다는 점을 유의해야 한다.
예시된 바와 같이, SA(204)는 프로세서 사이클 당 3개의 고속경로(fastpath) (즉, 마이크로코드화되지 않은) 명령어들을 뽑아내어 디스패치하도록 구성된다. 예시된 실시예에서, 이러한 명령어들은 ADDPD, MULPD, 및 MOVAPD 이다. 이들은 패킹된-이중 합산 명령어(packed-double addition instruction), 패킹된-이중 곱셈 명령어(packed-double multiply instruction), 및 패킹된-이중 이동 명령어(packed-double move instruction)를 각각 가리킨다. FP 128 신호가 어서트된다고 가정하면(즉, FPU 113은 128-비트 모드에 있음), SA(204)의 상부 다중화기(205)의 '1'로 라벨링된 입력들이 상부 다중화기(205)의 관련 출력들로 제공된다. 128-비트 모드에서는, 3개의 128-비트 명령어들이 한번에 디스패치된다. 다른 한편으로, 만일 FP 128 신호가 어서트되지 않는다면(즉, FPU 113은 64-비트 모드에 있음), SA(204)의 각각의 상부 다중화기(205)의 '0'으로 라벨링된 입력들이 상부 다중화기(205)의 관련 출력들로 제공된다. 이 경우, 상기 128-비트 명령어는 2개의 64-비트 연산들로 크래킹되기 때문에, ADDPD 명령어에 대해서 2개의 연산들(즉, ADDLO 및 ADDHI)이 슬롯 0과 슬롯 1에 각각 제공된다. 또한, MULPD 명령어에 대해서는 제 1 연산(MULLO)이 슬롯 2에 제공된다.
따라서, 64-비트 모드에서는, 프로세서 사이클 당 128-비트 명령어들의 1과 1/2 (1.5)이 디스패치된다. 다음 프로세서 사이클에서는, MULPD 명령어에 대한 제 2 연산(MULHI)이 슬롯 0에 제공되며 그리고 MOVAPD 명령어에 대한 2개의 연산들(MOVALO 및 MOVAHI)이 슬롯1과 슬롯 2에 각각 제공된다. 따라서, 64-비트 모드 예제에서는, 제 1 프로세서 사이클에서 ADDLO, ADDHI 및 MULLO 가 디스패치된다. 다음의 제 2 프로세서 사이클에서, MULHI, MOVALO 및 MOVAHI 가 디스패치된다. 도2 에 도시된 다중화기(205)의 구성이, 64-비트 모드에서의 제 1 프로세서 사이클에 적용가능하다는 점을 유의해야 한다. 요컨대, 128-비트 모드에서는 3개의 128-비트 고속경로 명령어들(예컨대, 3개의 x86 SSE 명령어들)이 각 사이클마다 디스패치될 수 있다. 이와 유사하게, 64-비트 모드에서는 128-비트 고속경로 명령어들의 1과 1/2(예컨대, 1.5 128-비트 x86 SSE 명령어들)이 각각의 프로세서 사이클에서 디스패치될 수 있다.
예시된 바와 같이, 적절한 사이즈의 판독-전용 메모리(ROM)를 포함할 수도 있는 마이크로코드 엔진(ME)(206)은 비-고속경로(non-fastpath) 명령어들을 위해 마이크로코드를 제공한다. ME(206)는 128-비트 마이크로코드, 64-비트 마이크로코드, 또는 공유 마이크로코드(즉, 128-비트 명령어와 64-비트 명령어들 사이에서 공유되는 마이크로코드)를 포함할 수 있다. 명령어 디코더(106)는, 명령어가 고속경로 명령어인지 또는 마이크로코드를 필요로 하는 명령어인지를 판별한다. 마이크로코드화된 명령어라고 표시되는 때에, 상기 ME(206)는 SA(204) 내에 포함된 3개의 하위 멀티플렉서(207)의 입력에 연산들을 제공한다. 명령어 디코더(106)로부터 고속경로 신호가 제공되어, 3개의 하위 멀티플렉서(207)의 라인을 선택한다. 3개의 하위 멀티플렉서(207) 모두는 동일한 방식(same way)을 가리키며 그리고 고속경로 또는 마이크로코드화된 연산 중 어느 하나를 제공한다. 예를 들어, 명령어 큐(208)로부터의 다음 명령어가 복잡한 명령어 예컨대, 부동 소수점 사인(floating point sine : FSIN) 명령어라고 가정하면, 마이크로코드화된 명령어에 대응하는 모든 연산들이 ME(206)로부터 출력될 때까지 그 어떤 다른 명령어들도 명령어 큐(208)로부 터 출력되지 않는다.
마이크로코드화된 명령어가 검출되면, 마이크로코드로의 엔트리 포인트(an entry point into the microcode)가 생성되는바, 이는 마이크로코드화된 명령어에 대응한다. 마이크로코드화된 명령어에 대응하늠 모든 연산들이 판독될 때까지, 연산들의 하나 이상의 라인들이 ME(206)로부터 판독된다. 예를 들어, ME(206)는 라인 당 3개의 연산들을 포함할 수도 있다. 적어도 하나의 실시예에서, 동일한 프로세서 싸이클 동안에 고속경로 명령어는 마이크로코드화된 명령어로서 패치될 수 없다. 이 경우, SA/ME(202)로부터의 슬롯들 내에 버블(bubble)이 발생할 수도 있다. 마이크로코드의 사용 및 복잡한 명령어에 대응하는 연산들의 개수를 예측하는 로직을 구현함으로써, 설계자가 버블들을 감소 또는 제거할 수 있음을 유의해야 한다. 일반적으로, 마이크로코드화된 명령어는 2개 이상의 관련 연산들을 갖는다. 전형적인 일례에서, 오직 2개만의 연산들을 갖는 명령어는 고속경로 이중 명령어(fastpath double instruction)로서 구현될 수도 있다. 마이크로코드화된 명령어에 대응하는 마이크로 시퀀스의 말미에 후속하여, 다음 명령어가 명령어 큐(208)로부터 출력될 수 있다. 이때, 이용가능한 리소스들에 근거하여 연산들이 디스패치되지 않는다는 점을 유의해야 한다.
프로세서 아키텍처에 따라, 리소스들은 슬롯에 특정할 수도 있다(slot specific). 예를 들면, 정수 유닛들(integer units)은 소정 슬롯들에서만 이용가능한 전용 리소스들을 가질 수도 있다. 예를 들어, 정수 유닛은 오직 슬롯 0에만 존재하는 정수 승수(integer multiplier)를 포함할 수 있다. 이 경우, 마이크로코드 프로그래머는, 정수 곱셈(integer multiply) 연산이 슬롯 1 또는 슬롯 2에 적용되지 않는다는 점을 확실히 할 필요가 있다. 또한, 공유 리소스들이 오직 정수측에만 존재하는 경우, 마이크로코드 설계자는, 리소스를 필요로 하는 연산에 대해 할당된 슬롯에서 리소스가 이용가능하다는 점을 보장할 필요가 있을 것이다. 일반적으로, 정수측과 리소스를 공유하지 않는 부동 소수점 연산들은 임의의 슬롯으로 갈 수 있다. 일단 연산들이 스케줄러에 도달하면, 상기 연산들은 재배열될 수도 있으며 그리고 이용가능한 리소스들에 근거하여 비순서적으로 실행될 수도 있음을 유의해야 한다.
일실시예에서, SA/ME(202)에 의해 제공되는 연산들은 x86 연산들이다. SA/ME(202)의 슬롯 0, 1, 및 2에 있는 연산들은 부동 소수점 재명명1(floating point rename 1 : FPRN1) 유닛(212)의 슬롯 0, 1, 및 2에 제공되는바, FPRN1 유닛(212)은 FPU 스택 맵/재명명 유닛(120)에 포함될 수도 있다. FPRN1 유닛(212)의 여러 기능들 중에서, FPRN1 유닛(212)은 각각의 연산을 적절한 파이프(예컨대, 파이프 0, 파이프 1, 파이프 2)에 할당한다. FPRN1 유닛(212)은, 각각의 슬롯 0, 슬롯 1, 슬롯 2에서 128-비트 디코더(214)와 64-비트 디코더(216)를 포함한다. 디코더(214)는 x86 연산들을 128-비트 연산들을 위한 실행 연산들(execute operations)(exop_0, exop_1, exop_2)로 디코딩한다. 이와 유사하게 디코더(216)는 x86 연산들을 64-비트 연산들을 위한 실행 연산들로 디코딩한다. 상기 실행 연산들은, 그들 자신의 조밀한(condensed) 옵코드(operational code) 스페이스, 레지스터 스페이스, 어드레스 스페이스 등등을 가지며 그리고 예를 들면 12-비트 실행 연산 들이 될 수도 있다. FP128 신호는 FPU(113)의 구성에 기초하여, 디코더(214)와 디코더(216) 중에서 어떤 것이 선택되는지를 지시한다.
FP128 신호가 어써트된다면, 멀티플렉서(218)는 디코더(214)를 선택한다. FP128 신호가 어써트되지 않는다면, 멀티플렉서(218)는 디코더(216)를 선택한다. 예시된 실행 연산들에 대한 연상 기호(mnemonics)는 FPKADDPD, FPKMULPD, FPKMOVPD 이며, 이들은 예시된 x86 연산들 ADDPD, MULPD, MOVPD에 각각 대응한다. 상기 실행 연산들은, FPRN1 유닛(212)으로부터 FPRN2 유닛(220)으로의 각각의 슬롯들 상에 제공된다. FPRN1 유닛(212)과 FPRN2 유닛(220) 둘다는, FPU 스택 맵/재명명 유닛(120) 내에 구현될 수도 있다. FPRN2 유닛(220)에서, 실행 연산들은, 로직 재명명(logic rename : LRN) 스페이스로부터 물리적 재명명(physical rename : PRN) 스페이스로 매핑된다. 일실시예에서, FPRN2 유닛(220)은 48 엔트리들(0-47)을 갖는 레지스터 파일을 포함한다. 이러한 실시예에서, 128-비트 모드에서는, 상위 32개의 엔트리들(0-31)만이 이용되며 그리고 64-비트 모드에서는 48개의 엔트리들 모두가 이용된다. 128-비트 모드에서, 각각의 SSE 레지스터는 오직 하나의 엔트리(16 에서 31)를 갖는다. 64-비트 모드에서는, 각각의 SSE 레지스터는 2개의 엔트리(16 에서 47)를 갖는바, 이는 레지스터들이 하프 레지스터로 취급되기 때문이다. 64-비트 모드에서, 모든 레지스터 지정(designation)은 하위 지정(low designation)(예컨대, xmm0.lo)과 상위 지정(high designation)(예컨대, xmm0.hi)을 갖는다. 하위 지정은 16-31 엔트리들에 대응하며 그리고 상위 지정은 32-47 엔트리들에 대응한다.
FPRN2 유닛(220)은 FPU 스택 맵/재명명 유닛(120)에 포함될 수도 있는 부동 소수점 퇴거 큐(FPRQ) 유닛(240)과 통신하여, 오래된 레지스터들을 자유 레지스터 리스트(free register list)로 반환하고 그리고 자유 레지스터 리스트로부터 새로운 레지스터들을 수신한다. FPRQ 유닛(240)은 프로세서의 모드에 기초하여, 128-비트 또는 64-비트 슬롯 중 하나를 갖는다. 예를 들어, 프로세서가 128-비트 모드에 있다면, 3개의 명령어들이 3개의 슬롯들을 차지할 것이다. 다른 한편으로, 프로세서가 64-비트 모드에 있다면, 1.5개의 명령어들(예컨대, ADDLO, ADDHI, MULLO)은 FPRQ 유닛(240)의 3개의 슬롯들을 점유할 것이다. FPRN2 유닛(220)의 출력들은 부동 소수점 유닛 스케줄러(FPSC)(230)에 제공되는바, FPSC(230)는 예컨대 36개의 엔트리들을 포함하도록 구성된다. FPSC(230)는 리소스 이용가능성에 따라 연산들을 골라내도록(pick) 구성된다.
종속성에 따라, 연산들은 비순서적으로 적절한 파이프(개시된 일례에서는 pipe 0, pipe 1 또는 pipe 2)에 발행될 수 있다. 개시된 실시예에서는, 각 파이프에 대해서 하나씩인 3개의 독립적인 연산 피커(operation pickers)들이 FPSC(230)에 적용된다. 각각의 피커는, 관련된 파이프에 발행될 수 있는 연산을 위치시키기 위하여, FPSC(230) 내의 엔트리들을 시험한다. 각각의 실행 연산(execute pipe)에 할당된 파이프는, 관련된 실행 연산과 함께 FPSC(230) 안에 기입되는 정보의 일부분들 중 하나(one of the pieces of information) 이다. 일실시예에서, 피커가 실행준비가 되어있는 실행 연산을 하나 이상 찾아낸다면, 상기 피커는 가장 오래된 실행 연산을 선택한다. FPSC(230)는, 가장 젊은 연산을 큐의 탑에 위치시키고 그리고 가장 오래된 연산을 큐의 바닥에 위치시킴으로써, 나이 순서(age ordering)를 유지할 수도 있다. 선별된 연산들(picked operation)은 부동 소수점 예외 파이프라인 제어 유닛(Floating Point Exception Pipeline Control unit : FPEPC unit)(242)으로 제공된다. 상기 FPSC(230)와 FPEPC 유닛(242)은 FPU 스케줄러(122) 내에 포함될 수도 있다.
예시된 바와 같이, 데이터 어드레스들은 FPSC(230)로부터 부동 소수점 레지스터 파일(124)로 제공되는바, 이는 탑 데이터 경로(250)에서 부동 소수점 레지스터 파일 하이(FPRFHI)(252)를 포함하며 그리고 바텀 데이터 경로(270)에서 부동 소수점 레지스터 파일 로우(FPRFLO)(272)를 포함한다. 실시예에 따라, 탑 데이터 경로(250)는 구현되지 않을 수도 있으며, 또는 구현이 이용되지 않을 수도 있다. 각각의 데이터 경로(250, 270)들은, 부동 소수점 레지스터 파일(FPRFHI 252 및 FPRFLO 72)을 포함하며, 부동 소수점 바이패스(FPBYP) 유닛(254)을 공유하며, 제 1 파이프(부동 소수점 add(FPA) 유닛과 MMX ALU(MMA) 유닛을 포함하는)를 포함하며, 제 2 파이프(부동 소수점 곱셈(FPM) 유닛, MMX 곱셈기(MMM) 유닛 및 MMX 정수 곱셈기(IMM) 유닛을 포함하는)를 포함하며, 그리고 제 3 파이프(스토어 제어(STC) 유닛을 포함하는)를 포함한다. 다른 유닛들 또는 추가적인 유닛들이 파이프들 내에 구현될 수도 있다는 점을 유의해야 한다. 예시된 실시예에서는, 5개의 판독 어드레스들(5개의 데이터 소스들에 대응 즉, 2개는 FPA/MMA 유닛들에 대한 것, 2개는 FPM/MMM/IMM 유닛들에 대한 것, 그리고 1개는 STC 유닛들에 대한 것)이 부동 소수점 레지스터 파일(FPRF)에게 제공되는바, 이는 FPRFHI(252) 및 FPRFLO(272)를 포함할 수도 있다.
상기 FPEPC 유닛(242)은, 각 슬롯들(즉, 슬롯 0, 1 및 2)에 대한 각각의 실행 연산들에 대해서 N-비트(예컨대, 12-비트)의 옵코드(그리고 추가적인 제어 정보)를 수신한다. FPEPC 유닛(242)은 디코더(FP128HI)(244), 디코더(FP128LO)(246), 및 각 슬롯들(즉, 슬롯 0, 1, 2)에 대한 멀티플렉서(248)를 포함한다. 128-비트 명령어에 대한 실행 연산은 2개의 하프 연산들(hops)로 분할될 수 있다. 이 경우, 실행 연산은 관련된 하이 하프 연산(hi hop) 및 로우 하프 연산(lo hop)을 갖는다. 전형적으로는 상기 하이 하프 연산(hi hop)는 로우 하프 연산(lo hop)과 동일하다. 하지만, 몇몇 실행 연산들에 대해서는, hi hop와 lo hop는 동일하지 않다. 상기 디코더(244 및 246)는 hi hop와 lo hop는 동일하지 않은 경우, hi hop와 lo hop를 각각 제공하는 기능을 수행한다. 프로세서(100)가 64-비트 모드로 구성된다고 가정하면, 멀티플렉서(248)는 피드-쓰루 경로(feed-through paht)(즉, 디코더 244와 246을 이용하지 않음)를 선택한다. 이 경우, 실행 연산들은 변화되지 않고 공급되며(feed-through unchanged) 그리고 상기 연산들은 실행을 위해서 바텀 데이터 경로(270) 즉, FPALO/MMALO 유닛(276)(파이프 0), FPMLO/MMMLO/IMMLO 유닛(278)(파이프 1), 및 STCLO 유닛(280)(파이프 2)에 제공된다.
프로세서(100)가 128-비트 모드로 구성되는 경우, 멀티플렉서(248)는 디코더(2446)를 선택하며 그리고 디코더들(244, 246)은 모든 슬롯들에서 적용된다. 이 경우, 실행을 위해서 로우 하프 연산들(lo hops)은 바텀 데이터 경로(270) 즉, FPALO/MMALO 유닛(276)(파이프 0), FPMLO/MMMLO/IMMLO 유닛(278)(파이프 1), 및 STCLO 유닛(280)(파이프 2)에 제공된다. 그리고 하이 하프 연산들(hi hpos)은 탑 데이터 경로(250) 즉, FPAHI/MMAHI 유닛(256)(파이프 0), FPMHI/MMMHI/IMMHI 유닛(258)(파이프 1), 및 STCHI 유닛(260)(파이프 2)에 제공된다.
STC(126) 내에 구현될 수도 있는 STC 유닛들(260 및 280)로부터의 데이터는 LS 유닛(132)에게 제공된다. LS 유닛(132) 내의 load data는, FPU 레지스터 파일(124)이 FPRFHI(252)와 FPRFLO(272)을 포함하는 때에, 컨버터들(262, 264, 282, 284)을 통해서 FPU 레지스터 파일(124)에게 제공된다. 상기 컨버터들(262, 264, 282, 284)은 load data를 64-비트 데이터로부터 예컨대 90-비트 데이터로 변환하기 위해서 제공된다. 탑 데이터 경로(250)의 파이프 0 및 파이프 1의 적절한 유닛으로부터의 결과 데이터(result data)는 멀티플렉서(266, 268)에 의해 각각 선택된다. 이와 유사하게, 바텀 데이터 경로(270)의 파이프 0 및 파이프 1의 적절한 유닛으로부터의 결과 데이터는 멀티플렉서(286, 288)에 의해 각각 선택된다.
도3을 참조하면, 프로세서(302)를 포함하는 컴퓨터 시스템(300)이 예시되어 있는바, 프로세서(300)는 도1 및 도2에 도시된 프로세서를 따라서 구성된 하나 이상의 프로세서들을 포함할 수도 있다. 프로세서(302)는 메모리 서브시스템(304)에 접속되며, 메모리 서브시스템은 적절한 용량의 휘발성 및 비휘발성 메모리를 포함한다. 또한, 상기 프로세서는 입력 디바이스(예컨대, 마우스, 키보드 등등)에 접속되며 그리고 디스플레이(예컨대, 액정 표시장치 LCD)에 접속된다.
도4를 참조하면, 명령어가 어떻게 디코딩될지를 결정하는 디코딩 루틴(400)이 예시되어 있다. 블록 402에서 루틴(400)이 개시되며, 이 시점에서 제어가 블록 404로 전달되는바, 여기에서 하나 이상의 명령어들이 페치된다. 다음으로, 결정 블 록 406에서, 지시기(indicator)(예컨대, 레지스터)가 어써트되었는지가 판별된다. 지시기가 어써트되었다면, 제어는 블록 406으로부터 블록 408로 전달되며, 블록 408에서는 페치된 명령어들이 단일 연산으로 디코딩된다. 블록 408에 후속하여, 제어는 블록 412로 전달되며, 블록 412에서는 루틴(400)이 종료한다. 블록 406에서, 지시기가 어써트되지 않았다면, 제어는 블록 410으로 전달되며, 블록 410에서는 페치된 명령어는 다수의 연산들로 디코딩된다. 블록 410에 후속하여 제어는 블록 412로 전달된다.
결과적으로, 페치된 명령어가 단일 연산으로 디코딩되거나 또는 다수의 연산들로 디코딩되는 것을 허용하는 기술들이 본 명세서에 개시되어 있다. 예를 들어, 하나의 128-비트 명령어는 지시기에 따라, 하나의 128-비트 연산으로 디코딩될 수도 있으며 또는 2개의 64-비트 연산들로 디코딩될 수도 있다.
본 명세서에 대한 고찰 및 발명의 상세한 설명에 개시된 내용의 구현으로부터 본 발명의 다른 실시예들, 사용예들 및 장점들이 해당 기술분야의 당업자들에게 명백해질 것이다. 발명의 상세한 설명 및 도면들은 단지 예시로서만 간주되어야만 하며, 따라서 본 발명의 범위는 오직 아래의 청구범위 및 이의 등가물에 의해서 제한되는 것으로 의도된다.

Claims (10)

  1. 프로세서의 부동 소수점 유닛(FPU)이 풀-비트(full-bit) 모드 또는 감소-비트(reduced-bit) 모드에서 동작하는지를 판별하는 단계(460)와;
    명령어를 페치하는 단계(404)와;
    상기 프로세서가 상기 풀-비트 모드에서 동작한다라고 판별하는 것에 응답하여, 상기 명령어를 단일 연산으로 디코딩하는 단계와; 그리고
    상기 프로세서가 상기 감소-비트 모드에서 동작한다라고 판별하는 것에 응답하여, 상기 명령어를 다수의 연산들로 디코딩하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 판별하는 단계는,
    지시기(indicator)에 근거하여 상기 프로세서가 상기 풀-비트 모드 또는 상기 감소-비트 모드에서 동작하는지를 판별하는 것을 특징으로 하는 방법.
  3. 제1항에 있어서,
    상기 명령어는 128-비트 명령어이며, 상기 풀-비트 모드는 128-비트 모드이고, 그리고 상기 감소-비트 모드는 64-비트 모드이며,
    상기 판별하는 단계는,
    상기 프로세서가 상기 128-비트 모드 또는 상기 64-비트 모드에서 동작하는지를 판별하는 것을 특징으로 하는 방법.
  4. 제3항에 있어서,
    상기 디코딩하는 단계는,
    상기 판별 단계에 근거하여, 128-비트 명령어를 상기 128-비트 모드에 대한 하나의 연산 또는 상기 64-비트 모드에 대한 2개의 연산들로 디코딩하는 것을 특징으로 하는 방법.
  5. 제1항에 있어서,
    상기 단일 연산은 하나의 128-비트 연산에 대응하며 그리고 상기 다수의 연산들은 2개의 64-비트 연산들에 대응하는 것을 특징으로 하는 방법.
  6. 프로세서로서,
    지시기(indicator)(110);
    상기 지시기(110)에 접속된 디코더(106), 상기 디코더(106)는 상기 지시기가 제 1 모드를 나타낼 때 제 1 정밀도(precision)의 명령어를 단일 연산으로 디코딩하며 그리고 상기 지시기가 제 2 모드를 나타낼 때 상기 제 1 정밀도의 상기 명령어를 다수의 연산들로 디코딩하며; 그리고
    상기 디코더(106)에 접속된 부동 소수점 유닛(FPU)(120)
    을 포함하며,
    상기 부동 소수점 유닛(FPU)(120)은 상기 지시기에 근거하여, 하나의 프로세서 싸이클에서 상기 단일 연산의 실행을 개시하거나 또는 하나 이상의 프로세서 싸이클들에서 상기 다수의 연산들의 실행을 개시하는 것을 특징으로 하는 프로세서.
  7. 제6항에 있어서,
    상기 명령어는 128-비트 명령어이며 그리고 상기 디코더(106)는 상기 지시기에 근거하여, 상기 128-비트 명령어를 128-비트 연산에 대응하는 상기 단일 연산으로 디코딩하거나 또는 상기 128-비트 명령어를 2개의 64-비트 연산들에 대응하는 상기 다수의 연산들로 디코딩하는 것을 특징으로 하는 프로세서.
  8. 제6항에 있어서,
    상기 다수의 연산들은 2개의 연산들을 포함하며 그리고
    상기 부동 소수점 유닛(FPU)(120)은 바텀 데이터 경로(bottom data path)(270)를 더 포함하며, 상기 바텀 데이터 경로(270)는 하나 이상의 프로세서 싸이클들에서 상기 2개의 연산들 둘다에 대한 실행을 개시하도록 된 것을 특징으로 하는 프로세서.
  9. 제6항에 있어서,
    상기 부동 소수점 유닛(FPU)(120)은,
    상기 단일 연산의 제 1 절반(a first one-half)을 실행하도록 된 탑 데이터 경로(250); 및
    상기 단일 연산의 제 2 절반(a second one-half)을 실행하도록 된 바텀 데이터 경로(270)
    를 더 포함하는 것을 특징으로 하는 프로세서.
  10. 제9항에 있어서,
    상기 탑 데이터 경로(250)와 상기 바텀 데이터 경로(270)에 접속된 공통 제어 섹션(212, 220, 230)을 더 포함하는 것을 특징으로 하는 프로세서.
KR1020097019832A 2007-02-28 2008-02-28 재구성 가능한 부동 소수점 유닛을 구비한 프로세서 KR101473906B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/680,331 US7565513B2 (en) 2007-02-28 2007-02-28 Processor with power saving reconfigurable floating point unit decoding an instruction to single full bit operation or multiple reduced bit operations
US11/680,331 2007-02-28

Publications (2)

Publication Number Publication Date
KR20090118985A KR20090118985A (ko) 2009-11-18
KR101473906B1 true KR101473906B1 (ko) 2014-12-17

Family

ID=39431246

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097019832A KR101473906B1 (ko) 2007-02-28 2008-02-28 재구성 가능한 부동 소수점 유닛을 구비한 프로세서

Country Status (6)

Country Link
US (1) US7565513B2 (ko)
EP (2) EP2487581B1 (ko)
KR (1) KR101473906B1 (ko)
CN (1) CN101802779B (ko)
TW (1) TWI479412B (ko)
WO (1) WO2008106184A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230090254A (ko) 2021-12-14 2023-06-21 서울대학교산학협력단 부동 소수점 연산 방법 및 장치
KR20240102915A (ko) 2022-12-26 2024-07-03 서울대학교산학협력단 부동소수점 연산 방법 및 연산 장치

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8185495B2 (en) * 2008-02-01 2012-05-22 Microsoft Corporation Representation of qualitative object changes in a knowledge based framework for a multi-master synchronization environment
US20090248919A1 (en) * 2008-03-25 2009-10-01 Jerzy Szwagrzyk Method for external fifo acceleration
US8386807B2 (en) * 2008-09-30 2013-02-26 Intel Corporation Power management for processing unit
KR101687995B1 (ko) 2010-09-27 2016-12-20 삼성전자주식회사 프로세서 및 그 동작 방법
US9176738B2 (en) * 2011-01-12 2015-11-03 Advanced Micro Devices, Inc. Method and apparatus for fast decoding and enhancing execution speed of an instruction
US9128697B1 (en) * 2011-07-18 2015-09-08 Apple Inc. Computer numerical storage format with precision type indicator
WO2013095600A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Method and apparatus for decimal floating-point data logical extraction
US10754983B2 (en) * 2017-03-31 2020-08-25 Interset Software Inc. Anonymization of sensitive data for use in user interfaces
US10338919B2 (en) 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
DE102018110607A1 (de) 2017-05-08 2018-11-08 Nvidia Corporation Verallgemeinerte Beschleunigung von Matrix-Multiplikations-und-Akkumulations-Operationen
US11544065B2 (en) 2019-09-27 2023-01-03 Advanced Micro Devices, Inc. Bit width reconfiguration using a shadow-latch configured register file
US11599359B2 (en) 2020-05-18 2023-03-07 Advanced Micro Devices, Inc. Methods and systems for utilizing a master-shadow physical register file based on verified activation
WO2022241168A1 (en) * 2021-05-13 2022-11-17 Nvidia Corporation Performing matrix value indication

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5590365A (en) * 1990-03-30 1996-12-31 Kabushiki Kaisha Toshiba Pipeline information processing circuit for floating point operations
US5574928A (en) * 1993-10-29 1996-11-12 Advanced Micro Devices, Inc. Mixed integer/floating point processor core for a superscalar microprocessor with a plurality of operand buses for transferring operand segments
US5631859A (en) * 1994-10-27 1997-05-20 Hewlett-Packard Company Floating point arithmetic unit having logic for quad precision arithmetic
US5889679A (en) * 1997-07-15 1999-03-30 Integrated Device Technology, Inc. Fuse array control for smart function enable
US6230257B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Method and apparatus for staggering execution of a single packed data instruction using the same circuit
US6308252B1 (en) * 1999-02-04 2001-10-23 Kabushiki Kaisha Toshiba Processor method and apparatus for performing single operand operation and multiple parallel operand operation
US6732259B1 (en) * 1999-07-30 2004-05-04 Mips Technologies, Inc. Processor having a conditional branch extension of an instruction set architecture
US6857061B1 (en) * 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US7290121B2 (en) * 2003-06-12 2007-10-30 Advanced Micro Devices, Inc. Method and data processor with reduced stalling due to operand dependencies
US7346763B2 (en) * 2004-06-02 2008-03-18 Broadcom Corporation Processor instruction with repeated execution code
US7268577B2 (en) * 2004-12-17 2007-09-11 International Business Machines Corporation Changing chip function based on fuse states

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230090254A (ko) 2021-12-14 2023-06-21 서울대학교산학협력단 부동 소수점 연산 방법 및 장치
KR20240102915A (ko) 2022-12-26 2024-07-03 서울대학교산학협력단 부동소수점 연산 방법 및 연산 장치

Also Published As

Publication number Publication date
US20080209184A1 (en) 2008-08-28
EP2487581A1 (en) 2012-08-15
KR20090118985A (ko) 2009-11-18
EP2487581B1 (en) 2013-07-24
EP2118741B1 (en) 2012-05-30
EP2118741A1 (en) 2009-11-18
TWI479412B (zh) 2015-04-01
CN101802779B (zh) 2014-05-07
US7565513B2 (en) 2009-07-21
TW200842701A (en) 2008-11-01
CN101802779A (zh) 2010-08-11
WO2008106184A1 (en) 2008-09-04

Similar Documents

Publication Publication Date Title
KR101473906B1 (ko) 재구성 가능한 부동 소수점 유닛을 구비한 프로세서
EP2524303B1 (en) Mapping between registers used by multiple instruction sets
EP0789297B1 (en) Data processor loading data and performing multiply-add operation in parallel
US7836278B2 (en) Three operand instruction extension for X86 architecture
US20050283589A1 (en) Data processor
US20020133682A1 (en) System with wide operand architecture, and method
EP4020176A1 (en) Apparatus and method for conjugate transpose and multiply
US6061781A (en) Concurrent execution of divide microinstructions in floating point unit and overflow detection microinstructions in integer unit for integer divide
EP1261914B1 (en) Processing architecture having an array bounds check capability
US20080209185A1 (en) Processor with reconfigurable floating point unit
US20110047355A1 (en) Offset Based Register Address Indexing
WO2020210620A1 (en) Multiply-accumulate instruction processing method and apparatus
JP2001501001A (ja) データ処理システムにおける入力オペランド制御
US20220413855A1 (en) Cache support for indirect loads and indirect stores in graph applications
EP4020174A1 (en) Apparatus and method for complex matrix multiplication
EP4020177A1 (en) Apparatus and method for complex matrix conjugate transpose
EP4020179A1 (en) Apparatus and method for complex matrix transpose and multiply
US6408380B1 (en) Execution of an instruction to load two independently selected registers in a single cycle
JP2001504956A (ja) データ処理システム・レジスタ制御
US11960897B2 (en) Apparatus and methods employing a shared read post register file
EP4109245B1 (en) Apparatus and method for vector packed signed/unsigned shift, round, and saturate
US20060184773A1 (en) Inverting data on result bus to prepare for instruction in the next cycle for high frequency execution units
JP2001501329A (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: 20171117

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20181115

Year of fee payment: 5