KR101595637B1 - 벡터 친숙형 명령어 형식 및 그의 실행 - Google Patents

벡터 친숙형 명령어 형식 및 그의 실행 Download PDF

Info

Publication number
KR101595637B1
KR101595637B1 KR1020137029045A KR20137029045A KR101595637B1 KR 101595637 B1 KR101595637 B1 KR 101595637B1 KR 1020137029045 A KR1020137029045 A KR 1020137029045A KR 20137029045 A KR20137029045 A KR 20137029045A KR 101595637 B1 KR101595637 B1 KR 101595637B1
Authority
KR
South Korea
Prior art keywords
field
vector
bit
data element
delete delete
Prior art date
Application number
KR1020137029045A
Other languages
English (en)
Other versions
KR20130137700A (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 KR20130137700A publication Critical patent/KR20130137700A/ko
Application granted granted Critical
Publication of KR101595637B1 publication Critical patent/KR101595637B1/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • 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/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • 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/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L29/00Semiconductor devices adapted for rectifying, amplifying, oscillating or switching, or capacitors or resistors with at least one potential-jump barrier or surface barrier, e.g. PN junction depletion layer or carrier concentration layer; Details of semiconductor bodies or of electrodes thereof  ; Multistep manufacturing processes therefor
    • H01L29/66Types of semiconductor device ; Multistep manufacturing processes therefor
    • H01L29/66007Multistep manufacturing processes
    • H01L29/66075Multistep manufacturing processes of devices having semiconductor bodies comprising group 14 or group 13/15 materials
    • H01L29/66227Multistep manufacturing processes of devices having semiconductor bodies comprising group 14 or group 13/15 materials the devices being controllable only by the electric current supplied or the electric potential applied, to an electrode which does not carry the current to be rectified, amplified or switched, e.g. three-terminal devices
    • H01L29/66409Unipolar field-effect transistors
    • H01L29/66477Unipolar field-effect transistors with an insulated gate, i.e. MISFET
    • H01L29/66553Unipolar field-effect transistors with an insulated gate, i.e. MISFET using inside spacers, permanent or not
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L29/00Semiconductor devices adapted for rectifying, amplifying, oscillating or switching, or capacitors or resistors with at least one potential-jump barrier or surface barrier, e.g. PN junction depletion layer or carrier concentration layer; Details of semiconductor bodies or of electrodes thereof  ; Multistep manufacturing processes therefor
    • H01L29/66Types of semiconductor device ; Multistep manufacturing processes therefor
    • H01L29/68Types of semiconductor device ; Multistep manufacturing processes therefor controllable by only the electric current supplied, or only the electric potential applied, to an electrode which does not carry the current to be rectified, amplified or switched
    • H01L29/76Unipolar devices, e.g. field effect transistors
    • H01L29/772Field effect transistors
    • H01L29/775Field effect transistors with one dimensional charge carrier gas channel, e.g. quantum wire FET
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L29/00Semiconductor devices adapted for rectifying, amplifying, oscillating or switching, or capacitors or resistors with at least one potential-jump barrier or surface barrier, e.g. PN junction depletion layer or carrier concentration layer; Details of semiconductor bodies or of electrodes thereof  ; Multistep manufacturing processes therefor
    • H01L29/66Types of semiconductor device ; Multistep manufacturing processes therefor
    • H01L29/68Types of semiconductor device ; Multistep manufacturing processes therefor controllable by only the electric current supplied, or only the electric potential applied, to an electrode which does not carry the current to be rectified, amplified or switched
    • H01L29/76Unipolar devices, e.g. field effect transistors
    • H01L29/772Field effect transistors
    • H01L29/78Field effect transistors with field effect produced by an insulated gate
    • H01L29/7831Field effect transistors with field effect produced by an insulated gate with multiple gate structure
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L29/00Semiconductor devices adapted for rectifying, amplifying, oscillating or switching, or capacitors or resistors with at least one potential-jump barrier or surface barrier, e.g. PN junction depletion layer or carrier concentration layer; Details of semiconductor bodies or of electrodes thereof  ; Multistep manufacturing processes therefor
    • H01L29/66Types of semiconductor device ; Multistep manufacturing processes therefor
    • H01L29/68Types of semiconductor device ; Multistep manufacturing processes therefor controllable by only the electric current supplied, or only the electric potential applied, to an electrode which does not carry the current to be rectified, amplified or switched
    • H01L29/76Unipolar devices, e.g. field effect transistors
    • H01L29/772Field effect transistors
    • H01L29/78Field effect transistors with field effect produced by an insulated gate
    • H01L29/786Thin film transistors, i.e. transistors with a channel being at least partly a thin film
    • H01L29/78696Thin film transistors, i.e. transistors with a channel being at least partly a thin film characterised by the structure of the channel, e.g. multichannel, transverse or longitudinal shape, length or width, doping structure, or the overlap or alignment between the channel and the gate, the source or the drain, or the contacting structure of the channel
    • 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/30018Bit or string instructions
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L29/00Semiconductor devices adapted for rectifying, amplifying, oscillating or switching, or capacitors or resistors with at least one potential-jump barrier or surface barrier, e.g. PN junction depletion layer or carrier concentration layer; Details of semiconductor bodies or of electrodes thereof  ; Multistep manufacturing processes therefor
    • H01L29/66Types of semiconductor device ; Multistep manufacturing processes therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Power Engineering (AREA)
  • Computer Hardware Design (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Condensed Matter Physics & Semiconductors (AREA)
  • Ceramic Engineering (AREA)
  • Mathematical Physics (AREA)
  • Manufacturing & Machinery (AREA)
  • Computing Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Stored Programmes (AREA)
  • Insulated Gate Type Field-Effect Transistor (AREA)
  • Image Processing (AREA)

Abstract

벡터 친숙형 명령어 형식 및 그의 실행. 본 발명의 일 실시예에 따르면, 프로세서는 명령어 집합을 실행하도록 구성되어 있다. 명령어 집합은 벡터 친숙형 명령어 형식을 포함한다. 벡터 친숙형 명령어 형식은 베이스 연산 필드, 수정자 필드, 보강 연산 필드, 및 데이터 요소 폭 필드를 포함하는 복수의 필드들을 가지며, 제1 명령어 형식은, 베이스 연산 필드, 수정자 필드, 알파 필드, 베타 필드, 및 데이터 요소 폭 필드에 상이한 값들을 배치하는 것을 통해, 상이한 버전의 베이스 연산들 및 상이한 보강 연산들을 지원하며, 명령어 스트림들에서 제1 명령어 형식으로 된 명령어들의 각각의 명령어에서 상이한 값들 중 하나만이 베이스 연산 필드, 수정자 필드, 알파 필드, 베타 필드, 및 데이터 요소 폭 필드 각각에 배치될 수 있다.

Description

벡터 친숙형 명령어 형식 및 그의 실행{VECTOR FRIENDLY INSTRUCTION FORMAT AND EXECUTION THEREOF}
관련 출원의 상호 참조
이 출원은 2011년 4월 1일자로 출원된 미국 가특허 출원 제61/471,043호에 기초하여 우선권을 주장하며, 이 출원은 참조 문헌으로서 본 명세서에 포함된다.
본 발명의 실시예는 컴퓨터 분야에 관한 것으로서, 보다 구체적으로는, 프로세서에 의해 지원되는 명령어 집합에 관한 것이다.
명령어 집합 또는 명령어 집합 아키텍처(instruction set architecture, ISA)는 네이티브 데이터 유형(native data type), 명령어, 레지스터 아키텍처, 어드레싱 모드, 메모리 아키텍처, 인터럽트 및 예외 처리, 및 외부 입력/출력(I/O)을 비롯한, 프로그래밍에 관련되어 있는 컴퓨터 아키텍처의 일부이다. 유의할 점은, 명령어라는 용어가 일반적으로 본 명세서에서, 마이크로 명령어(micro-instruction) 또는 마이크로 op(micro-op) - 즉, 프로세서의 디코더가 매크로 명령어를 디코딩한 결과 - 가 아니라, 매크로 명령어(macro-instruction) - 즉, 실행을 위해 프로세서에 제공되는 명령어 - 를 말한다는 것이다.
명령어 집합 아키텍처는 명령어 집합을 구현하는 데 사용되는 한 세트의 프로세서 설계 기법들인 마이크로 아키텍처(microarchitecture)와 구분된다. 상이한 마이크로 아키텍처를 갖는 프로세서는 공통의 명령어 집합을 공유할 수 있다. 예를 들어, Intel Pentium 4 프로세서, Intel Core 프로세서, 및 미국 캘리포니아주 서니베일 소재의 Advanced Micro Devices, Inc. 프로세서는 거의 동일한 버전의 x86 명령어 집합을 구현하지만(보다 새로운 버전에서는 어떤 확장이 부가되어 있음), 상이한 내부 설계를 가진다. 예를 들어, ISA의 동일한 레지스터 아키텍처는 전용 물리 레지스터, 레지스터 이름 변경 메커니즘[예컨대, 미국 특허 제5,446,912호에 기술되어 있는 바와 같은, RAT(Register Alias Table), ROB(Reorder Buffer), 및 RRF(retirement register file)의 사용; 미국 특허 제5,207,132호에 기술되어 있는 바와 같은, 다수의 맵 및 레지스터 풀의 사용]을 사용하는 하나 이상의 동적 할당 물리 레지스터 등을 비롯한 공지된 기법을 사용하여 상이한 마이크로 아키텍처에서 상이한 방식으로 구현될 수 있다. 달리 언급하지 않는 한, 레지스터 아키텍처, 레지스터 파일, 및 레지스터라는 문구는 본 명세서에서 소프트웨어/프로그래머에게 보이는 것 및 명령어가 레지스터를 지정하는 방식에 대해 사용된다. 구분이 필요한 경우, 레지스터 아키텍처에서의 레지스터/파일을 나타내기 위해, 논리적, 구조적, 또는 소프트웨어에 보이는(software visible)과 같은 형용사가 사용될 것인 반면, 주어진 마이크로 아키텍처에서 레지스터를 지정하는 데 상이한 형용사가 사용될 것이다[예컨대, 물리 레지스터, 재정렬 버퍼, 퇴장 레지스터(retirement register), 레지스터 풀(register pool))].
명령어 집합은 하나 이상의 명령어 형식을 포함한다. 주어진 명령어 형식은, 그 중에서도 특히, 수행될 연산 및 그 연산이 수행될 피연산자(들)를 지정하는 다양한 필드(비트의 수, 비트의 위치)를 정의한다. 어떤 명령어 형식은 명령어 템플릿[또는 하위 형식(subformat)]의 정의를 통해 추가로 분해된다. 예를 들어, 주어진 명령어 형식의 명령어 템플릿은 명령어 형식의 필드들의 상이한 서브셋(포함된 필드들이 통상적으로 동일한 순서로 있지만, 적어도 몇몇은, 보다 적은 필드가 포함되어 있기 때문에, 상이한 비트 위치를 가짐)을 가지도록 정의되고 및/또는 주어진 필드가 상이하게 해석되도록 정의될 수 있다. 주어진 명령어가 주어진 명령어 형식을 사용하여(그리고, 정의되어 있는 경우, 그 명령어 형식의 명령어 템플릿들 중 주어진 명령어 템플릿으로) 표현되고, 연산 및 피연산자를 지정한다. 명령어 스트림(instruction stream)은 특정의 명령어 시퀀스이고, 여기서 시퀀스 내의 각각의 명령어는 명령어 형식(그리고, 정의되어 있는 경우, 그 명령어 형식의 명령어 템플릿들 중 주어진 명령어 템플릿)으로 된 명령어의 어커런스(occurrence)이다.
과학, 금융, 자동 벡터화 일반 목적(auto-vectorized general purpose), RMS(recognition, mining, and synthesis, 인식, 마이닝 및 합성)/시각 및 멀티미디어 응용 프로그램(예컨대, 2D/3D 그래픽, 이미지 처리, 비디오 압축/압축 해제, 음성 인식 알고리즘 및 오디오 조작)은 종종 많은 수의 데이터 항목에 대해 동일한 연산이 수행되는 것을 필요로 한다["데이터 병렬성(data parallelism)"이라고 함]. SIMD(Single Instruction Multiple Data)는 프로세서로 하여금 다수의 데이터 항목에 대해 동일한 연산을 수행하게 하는 유형의 명령어를 말한다. SIMD 기술은 레지스터 내의 비트들을 다수의 고정-크기 데이터 요소 - 각각이 개별적인 값을 나타냄 - 로 논리적으로 분할할 수 있는 프로세서에 특히 적합하다. 예를 들어, 64-비트 레지스터 내의 비트들은 4개의 개별적인 16-비트 데이터 요소 - 각각이 개별적인 16-비트 값을 나타냄 - 로서 연산될 소스 피연산자로서 지정될 수 있다. 이 유형의 데이터는 압축 데이터 유형(packed data type) 또는 벡터 데이터 유형(vector data type)이라고 하고, 이 데이터 유형의 피연산자는 압축 데이터 피연산자(packed data operand) 또는 벡터 피연산자(vector operand)라고 한다. 환언하면, 압축 데이터 항목 또는 벡터는 압축 데이터 요소 시퀀스라고 하고; 압축 데이터 피연산자 또는 벡터 피연산자는 SIMD 명령어(압축 데이터 명령어 또는 벡터 명령어라고도 함)의 소스 또는 목적지 피연산자이다.
예로서, 한 유형의 SIMD 명령어는 동일한 크기의, 동일한 수의 데이터 요소를 갖는 그리고 동일한 데이터 요소 순서로 되어 있는 목적지 벡터 피연산자(결과 벡터 피연산자라고도 함)를 발생하기 위해 2개의 소스 벡터 피연산자에 대해 수직으로 수행될 단일 벡터 연산을 지정한다. 소스 벡터 피연산자에 있는 데이터 요소는 소스 데이터 요소라고 하는 반면, 목적지 벡터 피연산자에 있는 데이터 요소는 목적지 또는 결과 데이터 요소라고 한다. 이들 소스 벡터 피연산자는 동일한 크기이고, 동일한 폭의 데이터 요소를 포함하며, 따라서 동일한 수의 데이터 요소를 포함한다. 2개의 소스 벡터 피연산자에서 동일한 비트 위치에 있는 소스 데이터 요소는 데이터 요소 쌍(대응하는 데이터 요소라고도 함)을 형성한다. 그 SIMD 명령어에 의해 지정되는 연산은 이들 소스 데이터 요소 쌍 각각에 대해 개별적으로 수행되어 일치하는 수의 결과 데이터 요소를 발생하고, 따라서 각각의 소스 데이터 요소 쌍은 대응하는 결과 데이터 요소를 가진다. 연산이 수직이기 때문에 그리고 결과 벡터 피연산자가 동일한 크기이고, 동일한 수의 데이터 요소를 가지며, 결과 데이터 요소가 소스 벡터 피연산자와 동일한 데이터 요소 순서로 저장되기 때문에, 결과 데이터 요소는 소스 벡터 피연산자에서의 그의 대응하는 소스 데이터 요소 쌍과 동일한 결과 벡터 피연산자의 비트 위치에 있다. 이 예시적인 유형의 SIMD 명령어에 부가하여, (예컨대, 단지 하나의 또는 3개 이상의 소스 벡터 피연산자를 가지는; 수평으로 연산되는; 상이한 크기인 결과 벡터 피연산자를 발생하는; 상이한 크기의 데이터 요소를 가지는; 및/또는 상이한 데이터 요소 순서를 가지는) 각종의 다른 유형의 SIMD 명령어가 있다. 목적지 벡터 피연산자(또는 목적지 피연산자)라는 용어가, (다른 명령어에 의한 동일한 장소의 지정에 의해) 목적지 피연산자가 다른 명령어에 의한 소스 피연산자로서 액세스될 수 있도록, 목적지 피연산자를 어떤 장소(그 명령어에 의해 지정된 레지스터 또는 메모리 주소)에 저장하는 것을 비롯하여, 명령어에 의해 지정된 연산을 수행한 직접적인 결과로서 정의된다는 것을 잘 알 것이다.
x86, MMX™, SSE(Streaming SIMD Extensions, 스트리밍 SIMD 확장), SSE2, SSE3, SSE4.1, 및 SSE4.2 명령어를 포함하는 명령어 집합을 가지는 Intel® Core™ 프로세서에 의해 이용되는 것과 같은 SIMD 기술은 응용 프로그램 성능의 상당한 개선을 가능하게 해주었다(Core™ 및 MMX™는 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation의 등록 상표 또는 상표임). AVX(Advanced Vector Extensions)라고 하고 VEX 코딩 방식을 사용하는 부가적인 한 세트의 장래의 SIMD 확장이 발표되었다.
본 발명의 실시예를 예시하는 데 사용되는 이하의 설명 및 첨부 도면을 참조하면 본 발명이 가장 잘 이해될 수 있다.
도 1a는 본 발명의 일 실시예에 따른, 벡터 친숙형 명령어 형식(vector friendly instruction format)으로 된 명령어만을 가지는 명령어 스트림(instruction stream)을 나타낸 블록도.
도 1b는 본 발명의 일 실시예에 따른, 다수의 명령어 형식으로 된 명령어를 갖는 명령어 스트림을 나타낸 블록도.
도 2a는 본 발명의 실시예에 따른, 일반적인 벡터 친숙형 명령어 형식(generic vector friendly instruction format) 및 그의 클래스 A 명령어 템플릿(class A instruction template)을 나타낸 블록도.
도 2b는 본 발명의 실시예에 따른, 일반적인 벡터 친숙형 명령어 형식 및 그의 클래스 B 명령어 템플릿(class B instruction template)을 나타낸 블록도.
도 3a는 본 발명의 실시예에 따른, 예시적인 특정의 벡터 친숙형 명령어 형식(specific vector friendly instruction format)을 나타낸 블록도.
도 3b는 본 발명의 일 실시예에 따른, 전체 연산코드(full opcode) 필드(274)를 구성하는 특정의 벡터 친숙형 명령어 형식(300)의 필드들을 나타낸 블록도.
도 3c는 본 발명의 일 실시예에 따른, 레지스터 인덱스(register index) 필드(244)를 구성하는 특정의 벡터 친숙형 명령어 형식(300)의 필드들을 나타낸 블록도.
도 3d는 본 발명의 일 실시예에 따른, 보강 연산(augmentation operation) 필드(250)를 구성하는 특정의 벡터 친숙형 명령어 형식(300)의 필드들을 나타낸 블록도.
도 4a는 본 발명의 일 실시예에 따른, 벡터 친숙형 명령어 형식의 필드들 중 일부의 상호 관계를 보여주는 흐름도의 일부를 나타낸 도면.
도 4b는 본 발명의 일 실시예에 따른, 벡터 친숙형 명령어 형식의 필드들 중 일부의 상호 관계를 보여주는 흐름도의 제2 부분을 나타낸 도면.
도 4c는 본 발명의 일 실시예에 따른, 벡터 친숙형 명령어 형식의 필드들 중 일부의 상호 관계를 보여주는 흐름도의 제3 부분을 나타낸 도면.
도 4d는 본 발명의 일 실시예에 따른, 벡터 친숙형 명령어 형식의 필드들 중 일부의 상호 관계를 보여주는 흐름도의 나머지를 나타낸 도면.
도 4e는 본 발명의 일 실시예에 따른, 각각의 블록(415A 내지 415H)의 분해도.
도 5는 본 발명의 일 실시예에 따른 레지스터 아키텍처(500)의 블록도.
도 6a는 본 발명의 실시예에 따른, 메모리 액세스 없음 유형 연산(no memory access type operation)에 대한 레지스터 인덱스 필드(244)의 흐름도.
도 6b는 본 발명의 실시예에 따른, 메모리 액세스 유형 연산(memory access type operation)에 대한 레지스터 인덱스 필드(244), 스케일(scale) 필드(260), 변위(displacement) 필드(262A), 및 변위 인자(displacement factor) 필드(262B)의 사용을 나타낸 흐름도.
도 6c는 본 발명의 실시예에 따른, disp8, disp32, 및 스케일링된 변위의 변형들 간의 차이를 나타낸 표.
도 7a는 본 발명의 실시예에 따른, 반올림 제어(round control) 필드(254A)에 의해 지정될 수 있는 가능한 연산들의 그룹을 나타낸 표.
도 7b는 본 발명의 실시예에 따른, 반올림 제어 필드(259A)에 의해 지정될 수 있는 가능한 연산들의 그룹을 나타낸 표.
도 8a는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트일 때 데이터 변환(data transform) 필드(254B)에 의해 지정될 수 있는 가능한 데이터 변환 연산들의 그룹을 나타낸 표.
도 8b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트일 때 데이터 변환 필드(254B)에 의해 지정될 수 있는 가능한 데이터 변환 연산들의 그룹을 나타낸 표.
도 9는 본 발명의 실시예에 따른, 외적 뒤섞기(cross product swizzle)(815)를 나타낸 블록도.
도 10a는 본 발명의 실시예에 따른, 4-요소 패킷(820)을 통한 요소의 브로드캐스트(broadcast)를 나타낸 블록도.
도 10b는 본 발명의 실시예에 따른, 32 비트 데이터 요소 폭에 대한 1-요소 입도(granularity)의 브로드캐스트를 나타낸 블록도.
도 10c는 본 발명의 실시예에 따른, 32 비트 데이터 요소에 대한 4-요소 입도의 브로드캐스트를 나타낸 블록도.
도 11a는 본 발명의 실시예에 따른, 연산코드 맵(opcode map) 필드에 의해 지정될 수 있는 가능한 연산코드 맵의 그룹을 나타낸 표.
도 11b는 본 발명의 실시예에 따른, 연산코드 맵 필드에 의해 지정될 수 있는 가능한 프리픽스 인코딩(prefix encoding)의 그룹을 나타낸 표.
도 12a는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 load/op int에 대해 데이터 조작(data manipulation) 필드(254C) 및 브로드캐스트 필드(257B)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 12b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load/op int에 대해 데이터 조작 필드(254C) 및 브로드캐스트 필드(257B)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 12c는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 load/op fp에 대해 데이터 조작 필드(254C) 및 브로드캐스트 필드(257B)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 12d는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load/op fp에 대해 데이터 조작 필드(254C) 및 브로드캐스트 필드(257B)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 13a는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 load int에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 13b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load int에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 13c는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 load fp에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 13d는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load fp에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 14a는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 store int에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 14b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 store int에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 14c는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 store fp에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 14d는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 store fp에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 15a는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load graphics에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 15b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load packed graphics에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 15c는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 store graphics에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표.
도 16a는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 그리고 제2 소스 및 목적지가 동일한 경우, 기입 마스크 레지스터(write mask register) K1에서의 기입 마스크(write mask)를 사용하여 병합(merge)하는 예시적인 연산(1600)을 나타낸 블록도.
도 16b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 그리고 제2 소스 및 목적지가 동일한 경우, 모두가 1인 하드와이어된 마스크(hardwired mask)(하드와이어된 마스크는 기입 마스크 K0를 지정하는 명령어에 의해 사용됨)를 사용하여 병합하는 예시적인 연산(1625)을 나타낸 블록도.
도 16c는 본 발명의 실시예에 따른, 기입 마스크 레지스터에서의 비트와 8, 16, 32, 및 64 비트 데이터 요소 폭에 대한 512 비트 벡터의 데이터 요소 위치 간의 대응 관계를 나타낸 블록도.
도 16d는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 그리고 제2 소스 및 목적지가 상이한 경우, 기입 마스크 레지스터 K1에서의 기입 마스크를 사용하여 병합하는 예시적인 연산(1660)을 나타낸 블록도.
도 16e는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 그리고 제2 소스 및 목적지가 상이한 경우, 기입 마스크 레지스터 K1에서의 기입 마스크를 사용하여 제로화(zero)하는 예시적인 연산(1666)을 나타낸 블록도.
도 17a는 본 발명의 실시예에 따른, 예시적인 특정의 벡터 친숙형 명령어 형식으로부터의 필드들의 서브셋을 나타낸 도면.
도 17b는 본 발명의 실시예에 따른, 도 17a의 특정의 벡터 친숙형 명령어 형식으로 인코딩된 예시적인 특정의 벡터 친숙형 명령어로부터의 필드들의 서브셋을 나타낸 도면.
도 17c는 본 발명의 실시예에 따른, 도 17a의 특정의 벡터 친숙형 명령어 형식으로 인코딩된 예시적인 특정의 벡터 친숙형 명령어로부터의 필드들의 서브셋을 나타낸 도면.
도 17d는 본 발명의 실시예에 따른, 도 17a의 특정의 벡터 친숙형 명령어 형식으로 인코딩된 예시적인 특정의 벡터 친숙형 명령어로부터의 필드들의 서브셋을 나타낸 도면.
도 18a는 본 발명의 실시예에 따른, 예시적인 특정의 벡터 친숙형 명령어 형식으로부터의 필드들의 서브셋을 나타낸 도면.
도 18b는 본 발명의 실시예에 따른, 도 18a의 특정의 벡터 친숙형 명령어 형식으로 인코딩된 예시적인 특정의 벡터 친숙형 명령어로부터의 필드들의 서브셋을 나타낸 도면.
도 18c는 본 발명의 실시예에 따른, 도 18a의 특정의 벡터 친숙형 명령어 형식으로 인코딩된 예시적인 특정의 벡터 친숙형 명령어로부터의 필드들의 서브셋을 나타낸 도면.
도 18d는 본 발명의 실시예에 따른, 도 18a의 특정의 벡터 친숙형 명령어 형식으로 인코딩된 예시적인 특정의 벡터 친숙형 명령어로부터의 필드들의 서브셋을 나타낸 도면.
도 18e는 본 발명의 실시예에 따른, 도 18a의 특정의 벡터 친숙형 명령어 형식으로 인코딩된 예시적인 특정의 벡터 친숙형 명령어로부터의 필드들의 서브셋을 나타낸 도면.
도 18f는 본 발명의 실시예에 따른, 도 18a의 특정의 벡터 친숙형 명령어 형식으로 인코딩된 예시적인 특정의 벡터 친숙형 명령어로부터의 필드들의 서브셋을 나타낸 도면.
도 19a는 본 발명의 실시예에 따른, 제1 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스 없음, 전체 반올림 제어 유형 연산(210) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 19b는 본 발명의 실시예에 따른, 제1 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스 없음, 데이터 변환 유형 연산(215) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 19c는 본 발명의 실시예에 따른, 제1 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스(220) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 20a는 본 발명의 실시예에 따른, 제2 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스 없음, 전체 반올림 제어 유형 연산(210) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 20b는 본 발명의 실시예에 따른, 제2 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스 없음, 데이터 변환 유형 연산(215) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 20c는 본 발명의 실시예에 따른, 제2 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스(220) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 21a는 본 발명의 실시예에 따른, 제3 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스 없음, 전체 반올림 제어 유형 연산(210) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 21b는 본 발명의 실시예에 따른, 제3 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스 없음, 데이터 변환 유형 연산(215) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 21c는 본 발명의 실시예에 따른, 제3 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스(220) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 22a는 본 발명의 실시예에 따른, 제4 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스 없음, 전체 반올림 제어 유형 연산(210) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 22b는 본 발명의 실시예에 따른, 제4 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스 없음, 데이터 변환 유형 연산(215) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 22c는 본 발명의 실시예에 따른, 제4 예시적인 프로세서 파이프라인의 상이한 스테이지들에서, 클래스 A의 메모리 액세스(220) 명령어 템플릿의 어느 필드가 이용되는지를 나타낸 블록도.
도 23a는 본 발명의 실시예에 따른, 단일 CPU 코어를, 온-다이 상호연결 네트워크(on-die interconnect network)(2302)에의 그의 연결 및 레벨 2(L2) 캐시의 그의 지역 서브셋(local subset)(2304)과 함께, 나타낸 블록도.
도 23b는 본 발명의 실시예에 따른, 도 23a에서의 CPU 코어의 일부의 분해도.
도 24는 본 발명의 실시예에 따른, 예시적인 비순차 아키텍처(out-of-order architecture)를 나타낸 블록도.
도 25는 본 발명의 일 실시예에 따른 시스템(2500)의 블록도.
도 26은 본 발명의 일 실시예에 따른 제2 시스템(2600)의 블록도.
도 27은 본 발명의 일 실시예에 따른 제3 시스템(2700)의 블록도.
도 28은 본 발명의 일 실시예에 따른 SoC(2800)의 블록도.
도 29는 본 발명의 실시예에 따른, 단일 코어 프로세서 및 통합된 메모리 제어기 및 그래픽을 갖는 멀티코어 프로세서(multicore processor)(2900)의 블록도.
도 30은 본 발명의 실시예에 따른, 소스 명령어 집합에서의 이진 명령어를 대상 명령어 집합에서의 이진 명령어로 변환하는 소프트웨어 명령어 변환기의 사용을 대비하는 블록도.
이하의 설명에서, 본 발명에 대한 보다 철저한 이해를 제공하기 위해, 논리 구현, 연산코드, 피연산자를 지정하는 방식, 자원 분할/공유/복제 구현, 시스템 구성요소의 유형 및 상호 관계, 그리고 논리 분할/통합 선택 등의 많은 구체적인 상세가 기재되어 있다. 그렇지만, 당업자라면 본 발명이 이러한 구체적인 상세 없이도 실시될 수 있다는 것을 잘 알 것이다. 다른 경우에, 본 발명을 불명료하게 하지 않기 위해, 제어 구조, 게이트 레벨 회로, 및 전체 소프트웨어 명령어 시퀀스가 상세히 도시되어 있지 않다. 당업자라면, 포함된 설명에 의해, 과도한 실험 없이 적절한 기능을 구현할 수 있을 것이다.
또한, 본 명세서 전체에 걸쳐, 예를 들어, "일 실시예", "실시예" 또는 "하나 이상의 실시예"라고 언급하는 것이 특정의 특징이 본 발명의 실시예의 실시에 포함될 수 있지만, 모든 실시예가 특정의 특징을 꼭 포함할 필요는 없음을 의미한다는 것을 잘 알 것이다. 이와 유사하게, 설명에서, 다양한 특징이 개시를 간소화하기 위해 그리고 다양한 발명 측면의 이해를 돕기 위해 단일 실시예, 도면 또는 그의 설명에서 때때로 서로 그룹화되어 있다는 것을 잘 알 것이다. 게다가, 특정의 특징, 구조, 또는 특성이 일 실시예와 관련하여 기술될 때, 명확하게 기술되어 있든 그렇지 않든 간에, 다른 실시예들과 관련하여 이러한 특징, 구조, 또는 특성을 실시하는 것은 기술 분야의 당업자가 알고 있는 것으로 생각된다. 그렇지만, 이러한 개시 방법이 본 발명이 각각의 청구항에 명시적으로 기재되어 있는 것보다 더 많은 특징을 필요로 한다는 의사를 반영하는 것으로 해석되어서는 안된다. 오히려, 이하의 특허청구범위가 반영하고 있는 바와 같이, 발명 측면이 하나의 개시된 실시예의 모든 특징보다 적은 것에 있을 수 있다. 따라서, 상세한 설명 이후의 특허청구범위는 이로써 상세한 설명에 포함되고, 각각의 청구항은 그것만으로 본 발명의 별개의 실시예이다.
이하의 설명 및 특허청구범위에서, "결합된" 및 "연결된"이라는 용어가, 그의 파생어와 함께, 사용될 수 있다. 이들 용어가 서로에 대해 동의어로서 의도되어 있지 않다는 것을 잘 알 것이다. "결합된"은 물리적으로 또는 전기적으로 서로 직접 연결되어 있을 수 있거나 그렇지 않을 수 있는 2개 이상의 요소가 서로 협력하거나 상호작용하는 것을 나타내기 위해 사용된다. "연결된"은 서로 결합되어 있는 2개 이상의 요소 사이의 통신의 설정을 나타내기 위해 사용된다.
블록도의 예시적인 실시예를 참조하여 흐름도의 동작이 기술될 것이다. 그렇지만, 흐름도의 동작이 블록도를 참조하여 논의된 실시예 이외의 본 발명의 실시예에 의해 수행될 수 있다는 것과, 블록도를 참조하여 논의된 실시예가 흐름도를 참조하여 논의된 실시예와 상이한 동작을 수행할 수 있다는 것을 잘 알 것이다.
설명의 편의를 위해, 특정의 항목의 선택적인 성질(예컨대, 본 발명의 주어진 구현예에 의해 지원되지 않는 특징; 주어진 구현예에 의해 지원되지만 어떤 상황에서는 사용되고 다른 상황에서는 사용되지 않는 특징)을 나타내기 위해 도면에서 파선이 사용되었다.
벡터 친숙형 명령어 형식 - 도 1 내지 도 16
벡터 친숙형 명령어 형식은 벡터 명령어에 적합한 명령어 형식이다(예컨대, 벡터 연산에 특유한 특정의 필드들이 있다.). 벡터 친숙형 명령어 형식을 통해 벡터 연산 및 스칼라 연산 둘 다가 지원되는 실시예가 기술되어 있지만, 대안의 실시예는 벡터 친숙형 명령어 형식으로 된 벡터 연산만을 사용한다.
명령어 형식의 수 - 도 1a 및 도 1b
하나의 명령어 형식 - 도 1a
도 1a는 본 발명의 일 실시예에 따른, 벡터 친숙형 명령어 형식으로 된 명령어만을 가지는 명령어 스트림을 나타낸 블록도이다. 명령어 스트림은 모두가 벡터 친숙형 형식으로 되어 있는 J개의 명령어(100A 내지 100J)의 시퀀스를 포함한다. 본 발명의 일 실시예에서, 프로세서는 벡터 명령어 형식만을 지원하고 이 명령어 스트림을 실행할 수 있다.
다수의 명령어 형식 - 도 1b
도 1b는 본 발명의 일 실시예에 따른, 다수의 명령어 형식으로 된 명령어를 갖는 명령어 스트림을 나타낸 블록도이다. 명령어 스트림에서의 각각의 명령어는 벡터 친숙형 명령어 형식, 제2 형식, 또는 제3 형식으로 표현되어 있다. 명령어 스트림은 J개의 명령어(110A 내지 110J)를 포함하고 있다. 본 발명의 일 실시예에서, 프로세서는 다수의 명령어 형식(도 1b에 도시된 형식들을 포함함)을 지원하고, 도 1a 및 도 1b 둘 다에서의 명령어 스트림을 실행할 수 있다.
예시적인 일반적인 벡터 친숙형 명령어 형식 - 도 2a 및 도 2b
도 2a 및 도 2b는 본 발명의 실시예에 따른, 일반적인 벡터 친숙형 명령어 형식 및 그의 명령어 템플릿을 나타낸 블록도이다. 도 2a는 본 발명의 실시예에 따른, 일반적인 벡터 친숙형 명령어 형식 및 그의 클래스 A 명령어 템플릿을 나타낸 블록도인 반면; 도 2b는 본 발명의 실시예에 따른, 일반적인 벡터 친숙형 명령어 형식 및 그의 클래스 B 명령어 템플릿을 나타낸 블록도이다. 구체적으로는, 클래스 A 및 클래스 B 명령어 템플릿 - 이들 둘 다는 메모리 액세스 없음(205) 명령어 템플릿 및 메모리 액세스(220) 명령어 템플릿을 포함함 - 이 정의되어 있는 일반적인 벡터 친숙형 명령어 형식(200)이 나타내어져 있다. 벡터 친숙형 명령어 형식과 관련하여 "일반적인(generic)"이라는 용어는 임의의 특정의 명령어 집합에 연계되어 있지 않은 명령어 형식을 말한다. 벡터 친숙형 명령어 형식으로 된 명령어가 레지스터[메모리 액세스 없음(205) 명령어 템플릿] 또는 레지스터/메모리[메모리 액세스(220) 명령어 템플릿] 중 어느 하나로부터 오는 벡터에 대해 연산을 하는 실시예가 기술될 것이지만, 본 발명의 대안의 실시예는 이들 중 하나만을 지원할 수 있다. 또한, 벡터 명령어 형식으로 된 load 명령어 및 store 명령어가 있는 본 발명의 실시예가 기술될 것이지만, 대안의 실시예는, 그 대신에 또는 그에 부가하여, 벡터를 레지스터 내로 및 레지스터 밖으로[예컨대, 메모리로부터 레지스터로, 레지스터로부터 메모리로, 레지스터들 사이에서] 이동시키는 상이한 명령어 형식으로 된 명령어를 가지고 있다. 게다가, 2가지 클래스의 명령어 템플릿을 지원하는 본 발명의 실시예가 기술될 것이지만, 대안의 실시예는 이들 또는 3개 이상 중 하나만을 지원할 수 있다.
다음과 같은 것들: 32 비트(4 바이트) 또는 64 비트(8 바이트) 데이터 요소 폭(또는 크기)을 갖는 64 바이트 벡터 피연산자 길이(또는 크기) (따라서, 64 바이트 벡터는 16 더블워드-크기 요소 또는 대안적으로 8 쿼드워드-크기 요소로 이루어져 있음); 16 비트(2 바이트) 또는 8 비트(1 바이트) 데이터 요소 폭(또는 크기)을 갖는 64 바이트 벡터 피연산자 길이(또는 크기); 32 비트(4 바이트), 64 비트(8 바이트), 16 비트(2 바이트), 또는 8 비트(1 바이트) 데이터 요소 폭(또는 크기)을 갖는 32 바이트 벡터 피연산자 길이(또는 크기); 및 32 비트(4 바이트), 64 비트(8 바이트), 16 비트(2 바이트), 또는 8 비트(1 바이트) 데이터 요소 폭(또는 크기)을 갖는 16 바이트 벡터 피연산자 길이(또는 크기)를 지원하는 벡터 친숙형 명령어 형식이 본 발명의 실시예가 기술될 것이지만, 대안의 실시예는 보다 큰, 보다 작은, 또는 상이한 데이터 요소 폭[예컨대, 128 비트(16 바이트) 데이터 요소 폭]을 갖는 보다 큰, 보다 작은 및/또는 상이한 벡터 피연산자 크기(예컨대, 256 바이트 벡터 피연산자)를 지원할 수 있다.
도 2a에서의 클래스 A 명령어 템플릿은 다음과 같은 것을 포함하고 있다: 1) 메모리 액세스 없음(205) 명령어 템플릿 내에는, 메모리 액세스 없음, 전체 반올림 제어 유형 연산(210) 명령어 템플릿 및 메모리 액세스 없음, 데이터 변환 유형 연산(215) 명령어 템플릿이 도시되어 있음; 및 2) 메모리 액세스(220) 명령어 템플릿 내에는, 메모리 액세스, 임시(temporal)(225) 명령어 템플릿 및 메모리 액세스, 비임시(non-temporal)(230) 명령어 템플릿이 도시되어 있음. 도 2b에서의 클래스 B 명령어 템플릿은 다음과 같은 것을 포함하고 있다: 1) 메모리 액세스 없음(205) 명령어 템플릿 내에는, 메모리 액세스 없음, 기입 마스크 제어, 부분 반올림 제어 유형 연산(212) 명령어 템플릿 및 메모리 액세스 없음, 기입 마스크 제어, vsize 유형 연산(217) 명령어 템플릿이 도시되어 있음; 및 2) 메모리 액세스(220) 명령어 템플릿 내에는, 메모리 액세스, 기입 마스크 제어(227) 명령어 템플릿이 도시되어 있음.
형식
일반적인 벡터 친숙형 명령어 형식(200)은 도 2a 및 도 2b에 예시되어 있는 순서로 이하에 열거되는 하기의 필드들을 포함하고 있다.
형식 필드(240) - 이 필드에 있는 특정의 값(명령어 형식 식별자 값)은 벡터 친숙형 명령어 형식, 따라서 명령어 스트림에서의 벡터 친숙형 명령어 형식으로 된 명령어의 어커런스를 식별해준다. 이와 같이, 형식 필드(240)의 내용은 제1 명령어 형식으로 된 명령어의 어커런스를 다른 명령어 형식으로 된 명령어의 어커런스와 구분해주며, 그에 의해 벡터 친숙형 명령어 형식을 다른 명령어 형식을 가지는 명령어 집합에 도입하는 것을 가능하게 해준다. 그에 따라, 이 필드는 일반적인 벡터 친숙형 명령어 형식만을 가지는 명령어 집합에 필요하지 않다는 점에서 선택적이다.
베이스 연산 필드(242) - 그의 내용은 상이한 베이스 연산을 구분해준다. 본 명세서에서 나중에 기술되는 바와 같이, 베이스 연산 필드(242)는 연산코드 필드를 포함할 수 있고 및/또는 그의 일부일 수 있다.
레지스터 인덱스 필드(244) - 그의 내용은, 직접 또는 주소 발생을 통해, 레지스터에 있든 메모리에 있든 간에, 소스 및 목적지 피연산자의 장소를 지정한다. 이들은 PxQ(예컨대, 32x512) 레지스터 파일로부터 N개의 레지스터를 선택하기에 충분한 수의 비트를 포함한다. 일 실시예에서, N이 최대 3개의 소스 및 하나의 목적지 레지스터일 수 있지만, 대안의 실시예는 보다 많은 또는 보다 적은 수의 소스 및 목적지 레지스터를 지원할 수 있다 (예컨대, 이들 소스 중 하나가 또한 목적지로서 역할하는 경우 최대 2개의 소스를 지원할 수 있고, 이들 소스 중 하나가 또한 목적지로서 역할하는 경우 최대 3개의 소스를 지원할 수 있으며, 최대 2개의 소스 및 하나의 목적지를 지원할 수 있다). 일 실시예에서, P=32인 반면, 대안의 실시예는 보다 많은 또는 보다 적은 수의 레지스터(예컨대, 16)를 지원할 수 있다. 일 실시예에서, Q=512 비트인 반면, 대안의 실시예는 보다 많은 또는 보다 적은 수의 비트(예컨대, 128, 1024)를 지원할 수 있다
수정자(modifier) 필드(246) - 그의 내용은 메모리 액세스를 지정하는 일반적인 벡터 명령어 형식으로 된 명령어의 어커런스를 그렇지 않은 명령어와 구분해준다 - 즉, 메모리 액세스 없음(205) 명령어 템플릿과 메모리 액세스(220) 명령어 템플릿을 구분해줌 -. 메모리 액세스 연산은 메모리 계층구조로부터 판독하고 및/또는 그에 기입하는 반면(어떤 경우에, 레지스터 내의 값을 사용하여 소스 및/또는 목적지 주소를 지정함), 메모리 액세스 없음 연산은 그렇지 않다(예컨대, 소스 및 목적지가 레지스터임). 일 실시예에서, 이 필드가 또한 메모리 주소 계산을 수행하는 3가지 상이한 방식 중에서 선택을 하지만, 대안의 실시예는 메모리 주소 계산을 수행하는 보다 많은, 보다 적은, 또는 상이한 방식을 지원할 수 있다.
보강 연산 필드(250) - 그의 내용은 각종의 상이한 연산 중 어느 것이 베이스 연산에 부가하여 수행되어야 하는지를 구분해준다. 이 필드는 컨텍스트에 관련되어(context specific) 있다. 본 발명의 일 실시예에서, 이 필드는 클래스 필드(268), 알파(alpha) 필드(252), 및 베타(beta) 필드(254)로 나누어져 있다. 보강 연산 필드는 2개, 3개 또는 4개의 명령어보다는 단일 명령어에서 공통된 연산 그룹이 수행될 수 있게 해준다. 이하는 필요한 명령어의 수를 감소시키기 위해 보강 필드(250)를 사용하는 명령어(이 명령어의 명명법에 대해서는 본 명세서에서 나중에 보다 상세히 기술됨)의 몇몇 예이다.
Figure 112013099770000-pct00106
여기서 [rax]는 주소 발생을 위해 사용되는 베이스 포인터(base pointer)이고, {}는 데이터 조작 필드(본 명세서에 나중에 보다 상세히 기술됨)에 의해 지정되는 변환 연산을 나타낸다.
스케일 필드(260) - 그의 내용은 메모리 주소 발생을 위해 인덱스 필드의 내용을 스케일링하는 것을 가능하게 해준다(예컨대, 2스케일*인덱스+베이스를 사용하는 주소 발생의 경우).
변위 필드(262A) - 그의 내용은 메모리 주소 발생의 일부로서 사용된다(예컨대, 2스케일*인덱스+베이스+변위를 사용하는 주소 발생의 경우).
변위 인자 필드(262B)[변위 필드(262A)를 변위 인자 필드(262B) 바로 위에 병치하는 것은 한쪽 또는 다른쪽이 사용된다는 것을 나타낸다는 것에 유의함] - 그의 내용은 주소 발생의 일부로서 사용되고, 메모리 액세스의 크기(N)로 스케일링되어야 하는 변위 인자를 지정함 - 여기서 N은 메모리 액세스에서의 바이트의 수이다(예컨대, 2스케일*인덱스+베이스+스케일링된 변위를 사용하는 주소 발생의 경우). 중복 하위 비트(redundant low-order bits)는 무시되고, 따라서 변위 인자 필드의 내용은 메모리 피연산자 총 크기(N)와 곱해져, 유효 주소를 계산하는 데 사용될 최종 변위를 발생한다. N의 값은 전체 연산코드 필드(274)(본 명세서에 나중에 기술됨) 및 데이터 조작 필드(254C)(본 명세서에 나중에 기술됨)에 기초하여 런타임 시에 프로세서 하드웨어에 의해 결정된다. 변위 필드(262A) 및 변위 인자 필드(262B)는, 메모리 액세스 없음(205) 명령어 템플릿에 대해 사용되지 않고 및/또는 상이한 실시예가 둘 중 하나만을 구현하거나 어느 것도 구현하지 않는다는 점에서, 선택적이다.
데이터 요소 폭 필드(264) - 그의 내용은 (일부 실시예에서, 모든 명령어에 대해; 다른 실시예에서, 명령어들 중 일부에 대해서만) 다수의 데이터 요소 폭 중 어느 것이 사용되어야 하는지를 구분해준다. 이 필드는, 단지 하나의 데이터 요소 폭이 지원되고 및/또는 데이터 요소 폭이 연산코드의 어떤 측면을 사용하여 지원되는 경우에 필요하지 않다는 점에서, 선택적이다.
기입 마스크 필드(270) - 그의 내용은, 데이터 요소 위치별로, 목적지 벡터 피연산자에서의 데이터 요소 위치가 베이스 연산 및 보강 연산의 결과를 반영하는지를 제어한다. 클래스 A 명령어 템플릿은 병합-기입 마스킹(merging-writemasking)을 지원하는 반면, 클래스 B 명령어 템플릿은 병합-기입 마스킹 및 제로화(zeroing)-기입 마스킹 둘 다를 지원한다. 병합할 때, 벡터 마스크는 목적지에 있는 한 세트의 임의의 요소가 (베이스 연산 및 보강 연산에 의해 지정되는) 임의의 연산의 실행 동안 업데이트로부터 보호될 수 있게 해주고; 다른 일 실시예에서, 대응하는 마스크 비트가 0을 가지는 경우 목적지의 각각의 요소의 이전 값을 보존한다. 이와 달리, 제로화할 때, 벡터 마스크는 목적지에 있는 한 세트의 임의의 요소가 (베이스 연산 및 보강 연산에 의해 지정되는) 임의의 연산의 실행 동안 제로화될 수 있게 해주고; 일 실시예에서, 대응하는 마스크 비트가 0 값을 가질 때 목적지의 요소는 0으로 설정된다. 이 기능의 서브셋은 수행 중인 연산의 벡터 길이(즉, 첫번째 것부터 마지막 것까지, 수정 중인 요소의 간격)를 제어할 수 있는 것이지만; 수정되는 요소들이 연속적일 필요는 없다. 이와 같이, 기입 마스크 필드(270)는 로드(loads), 저장(stores), 산술(arithmetic), 논리(logical) 등을 비롯한 부분 벡터 연산을 가능하게 해준다. 또한, 이 마스킹은 폴트 억압(fault suppression)을 위해 사용될 수 있다[즉, 폴트를 야기할지도 모르는/폴트를 야기할 임의의 연산의 결과의 수신을 방지하기 위해 목적지의 데이터 요소 위치를 마스킹하는 것에 의해 - 예컨대, 메모리에 있는 벡터가 페이지 경계에 걸쳐 있다는 것 및 제2 페이지가 아니라 제1 페이지가 페이지 폴트(page fault)를 야기할 것이고, 제1 페이지 상에 있는 벡터의 모든 데이터 요소가 기입 마스크에 의해 마스킹되는 경우, 페이지 폴트가 무시될 수 있다는 것을 가정함]. 게다가, 기입 마스크는 특정 유형의 조건문(conditional statement)을 포함하는 "벡터화 루프(vectorizing loops)"를 가능하게 해준다. 기입 마스크 필드(270)의 내용이 사용될 기입 마스크를 포함하는 다수의 기입 마스크 레지스터 중 하나를 선택하는[따라서, 기입 마스크 필드(270)의 내용이 수행될 그 마스킹을 간접적으로 식별해주는] 본 발명의 실시예가 기술되어 있지만, 대안의 실시예은, 그 대신에 또는 그에 부가하여, 기입 마스크 필드(270)의 내용이 수행될 마스킹을 직접 지정할 수 있게 해준다. 게다가, 1) 레지스터 이름 변경 파이프라인 스테이지 동안, 목적지가 더 이상 암시적 소스(implicit source)가 아니기 때문에, 목적지 피연산자가 또한 소스가 아닌 명령어[비삼항 명령어(non-ternary instruction)라고도 함]에 대해 레지스터 이름 변경(register renaming)이 사용될 때 [연산의 결과가 아닌 임의의 데이터 요소(임의의 마스킹된 데이터 요소)가 제로화될 것이기 때문에, 현재의 목적지 레지스터로부터의 어떤 데이터 요소도 이름 변경된 목적지 레지스터로 복사될 필요가 없거나 연산과 함께 어떻게든 전달될 필요가 없음]; 및 2) 제로가 기입되기 때문에 재기입(write back) 스테이지 동안 제로화는 성능 향상을 가능하게 해준다.
즉치(immediate) 필드(272) - 그의 내용은 즉치의 지정을 가능하게 해준다. 이 필드는, 즉치를 지원하지 않는 일반적인 벡터 친숙형 형식의 구현예에서 존재하지 않고 즉치를 사용하지 않는 명령어에 존재하지 않는다는 점에서, 선택적이다.
명령어 템플릿 클래스 선택
클래스 필드(268) - 그의 내용은 상이한 클래스의 명령를 구분해준다. 도 2a 및 도 2b를 참조하면, 이 필드의 내용은 클래스 A 및 클래스 B 명령어 중에서 선택을 한다. 도 2a 및 도 2b에서, 모서리가 둥근 정사각형은 필드에 특정의 값이 존재한다는 것을 나타내는 데 사용된다[도 2a 및 도 2b에서, 각각, 클래스 필드(268)에 대해 클래스 A(268A) 및 클래스 B(268B)].
클래스 A의 메모리 액세스 없음 명령어 템플릿
클래스 A의 메모리 액세스 없음(205) 명령어 템플릿의 경우에, 알파 필드(252)는 RS 필드(252A)로서 해석되고, 그의 내용은 상이한 보강 연산 유형들 중 어느 것이 수행되어야 하는지를 구분해주는 반면 [예컨대, 반올림(252A.1) 및 데이터 변환(252A.2)은, 각각, 메모리 액세스 없음, 반올림 유형 연산(210) 및 메모리 액세스 없음, 데이터 변환 유형 연산(215) 명령어 템플릿에 대해 지정됨], 베타 필드(254)는 지정된 유형의 연산들 중 어느 것이 수행되어야 하는지를 구분해준다. 도 2에서, 모서리가 둥근 블록은 특정의 값이 존재한다는 것을 나타내는 데 사용된다 [예컨대, 수정자 필드(246) 내의 메모리 액세스 없음(246A); 알파 필드(252)/rs 필드(252A)에 대한 반올림(252A.1) 및 데이터 변환(252A.2)] 메모리 액세스 없음(205) 명령어 템플릿에서, 스케일 필드(260), 변위 필드(262A), 및 변위 스케일 필드(262B)는 존재하지 않는다.
메모리 액세스 없음 명령어 템플릿 - 전체 반올림 제어 유형 연산
메모리 액세스 없음 전체 반올림 제어 유형 연산(210) 명령어 템플릿에서, 베타 필드(254)는 반올림 제어 필드(254A)로서 해석되고, 그의 내용(들)은 정적 반올림(static rounding)을 제공한다. 본 발명의 기술된 실시예에서, 반올림 제어 필드(254A)는 SAE(suppress all floating point exceptions) 필드(256) 및 반올림 연산 필드(258)를 포함하지만, 대안의 실시예는 이들 개념 둘 다를 동일한 필드에 인코딩하거나 이들 개념/필드 중 한쪽 또는 다른쪽만을 가지는 것[예컨대, 반올림 연산 필드(258)만을 가질 수 있음]을 지원할 수 있다.
SAE 필드(256) - 그의 내용은 예외 이벤트 보고를 디스에이블할지 여부를 구분해주며; SAE 필드(256)의 내용이 억압이 인에이블되어 있다는 것을 나타낼 때, 주어진 명령어는 어떤 종류의 부동 소수점 예외 플래그도 보고하지 않으며, 어떤 부동 소수점 예외 처리자(exception handler)도 야기(raise)하지 않는다.
반올림 연산 필드(258) - 그의 내용은 한 그룹의 반올림 연산 중 어느 것을 수행할지를 구분해준다(예컨대, Round-up, Round-down, Round-towards-zero 및 Round-to-nearest). 이와 같이, 반올림 연산 필드(258)는 명령어별로 반올림 모드의 변경을 가능하게 해주고, 따라서 이것이 필요할 때 특히 유용하다. 프로세서가 반올림 모드를 지정하는 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 반올림 연산 필드(258)의 내용은 그 레지스터 값보다 우선(override)한다 [이러한 제어 레지스터에 대해 저장-수정-복원(save-modify-restore)을 수행할 필요 없이 반올림 모드를 선택할 수 있는 것은 유익하다].
메모리 액세스 없음 명령어 템플릿 - 데이터 변환 유형 연산
메모리 액세스 없음 데이터 변환 유형 연산(215) 명령어 템플릿에서, 베타 필드(254)는 데이터 변환 필드(254B)로서 해석되고, 그의 내용은 다수의 데이터 변환 중 어느 것이 수행되어야 하는지를 구분해준다(예컨대, 데이터 변환 없음, 뒤섞기(swizzle), 브로드캐스트).
클래스 A의 메모리 액세스 명령어 템플릿
클래스 A의 메모리 액세스(220) 명령어 템플릿의 경우에, 알파 필드(252)는 축출 힌트(eviction hint) 필드(252B)로서 해석되고, 그의 내용은 축출 힌트들 중 어느 것이 사용되어야 하는지를 구분해주는 반면 [도 2a에서, 임시(252B.1) 및 비임시(252B.2)가, 각각, 메모리 액세스, 임시(225) 명령어 템플릿 및 메모리 액세스, 비임시(230) 명령어 템플릿에 대해 지정됨], 베타 필드(254)는 데이터 조작 필드(254C)로서 해석되고, 그의 내용은 다수의 데이터 조작 연산[프리미티브(primitive)라고도 함] 중 어느 것이 수행되어야 하는지를 구분해준다[예컨대, 조작 없음; 브로드캐스트; 소스의 상향 변환(up conversion); 및 목적지의 하향 변환(down conversion)]. 메모리 액세스(220) 명령어 템플릿은 스케일 필드(260), 및 선택적으로 변위 필드(262A) 또는 변위 스케일 필드(262B)를 포함하고 있다.
벡터 메모리 명령어는 메모리로부터의 벡터 로드(vector load) 및 메모리로의 벡터 저장(vector store)을 수행하고, 변환이 지원된다. 정규의 벡터 명령어에서와 같이, 벡터 메모리 명령어는 데이터 요소별로 데이터를 메모리로부터/메모리로 전달하고, 실제로 전달되는 요소는 기입 마스크로서 선택되는 벡터 마스크의 내용에 의해 결정된다. 도 2a에서, 모서리가 둥근 정사각형은 특정의 값이 필드에 존재한다는 것을 나타내는 데 사용된다[예컨대, 수정자 필드(246)에 대한 메모리 액세스(246B); 알파 필드(252)/축출 힌트 필드(252B)에 대한 임시(252B.1) 및 비임시(252B.2)].
메모리 액세스 명령어 템플릿 - 임시
임시 데이터는 캐싱으로부터 이득을 볼 정도로 충분히 일찍 재사용될 가능성이 있는 데이터이다. 그렇지만, 이것은 힌트이고, 상이한 프로세서는 이를 상이한 방식으로(힌트를 완전히 무시하는 것을 포함함) 구현할 수 있다.
메모리 액세스 명령어 템플릿 - 비임시
비임시 데이터는 제1 레벨 캐시에 캐싱하는 것으로부터 이득을 볼 정도로 충분히 일찍 재사용될 가능성이 없는 데이터이며, 축출을 위한 우선순위를 부여받아야 한다. 그렇지만, 이것은 힌트이고, 상이한 프로세서는 이를 상이한 방식으로(힌트를 완전히 무시하는 것을 포함함) 구현할 수 있다.
클래스 B의 명령어 템플릿
클래스 B의 명령어 템플릿의 경우에, 알파 필드(252)는 기입 마스크 제어(Z) 필드(252C)로서 해석되고, 그의 내용은 기입 마스크 필드(270)에 의해 제어되는 기입 마스킹이 병합인지 제로화인지를 구분해준다.
클래스 B의 메모리 액세스 없음 명령어 템플릿
클래스 B의 메모리 액세스 없음(205) 명령어 템플릿의 경우에, 베타 필드(254)의 일부는 RL 필드(257A)로서 해석되고, 그의 내용은 상이한 보강 연산 유형들 중 어느 것이 수행되어야 하는지를 구분해주는 반면 [예컨대, 반올림(257A.1) 및 벡터 길이(VSIZE)(257A.2)는, 각각, 메모리 액세스 없음, 기입 마스크 제어, 부분 반올림 제어 유형 연산(212) 명령어 템플릿 및 메모리 액세스 없음, 기입 마스크 제어, VSIZE 유형 연산(217) 명령어 템플릿에 대해 지정되어 있음], 베타 필드(254)의 나머지는 지정된 유형의 연산들 중 어느 것이 수행되어야 하는지를 구분해준다. 도 2에서, 모서리가 둥근 블록은 특정의 값이 존재한다는 것을 나타내는 데 사용된다[예컨대, 수정자 필드(246)에 있는 메모리 액세스 없음(246A); RL 필드(257A)에 대한 반올림(257A.1) 및 VSIZE(257A.2)]. 메모리 액세스 없음(205) 명령어 템플릿에서, 스케일 필드(260), 변위 필드(262A), 및 변위 스케일 필드(262B)는 존재하지 않는다.
메모리 액세스 없음 명령어 템플릿 - 기입 마스크 제어, 부분 반올림 제어 유형 연산
메모리 액세스 없음, 기입 마스크 제어, 부분 반올림 제어 유형 연산(210) 명령어 템플릿에서, 베타 필드(254)의 나머지는 반올림 연산 필드(259A)로서 해석되고, 예외 이벤트 보고가 디스에이블되어 있다 (주어진 명령어는 어떤 종류의 부동 소수점 예외 플래그도 보고하지 않고, 어떤 부동 소수점 예외 처리자도 야기하지 않는다).
반올림 연산 필드(259A)는, - 반올림 연산 필드(258)와 같이, 그의 내용은 한 그룹의 반올림 연산 중 어느 것을 수행할지를 구분해준다(예컨대, Round-up, Round-down, Round-towards-zero 및 Round-to-nearest). 이와 같이, 반올림 연산 필드(259A)는 명령어별로 반올림 모드의 변경을 가능하게 해주고, 따라서 이것이 필요할 때 특히 유용하다. 프로세서가 반올림 모드를 지정하는 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 반올림 연산 필드(259A)의 내용은 그 레지스터 값보다 우선한다 [이러한 제어 레지스터에 대해 저장-수정-복원(save-modify-restore)을 수행할 필요 없이 반올림 모드를 선택할 수 있는 것은 유익하다].
메모리 액세스 없음 명령어 템플릿 - 기입 마스크 제어, VSIZE 유형 연산
메모리 액세스 없음, 기입 마스크 제어, VSIZE 유형 연산(217) 명령어 템플릿에서, 베타 필드(254)의 나머지는 벡터 길이 필드(259B)로서 해석되고, 그의 내용은 다수의 데이터 벡터 길이 중 어느 것이 수행되어야 하는지를 구분해준다(예컨대, 128, 256, 또는 512 비트).
클래스 B의 메모리 액세스 명령어 템플릿
클래스 B의 메모리 액세스(220) 명령어 템플릿의 경우에, 베타 필드(254)의 일부는 브로드캐스트 필드(257B)로서 해석되고, 그의 내용은 브로드캐스트 유형 데이터 조작 연산이 수행되어야 하는지 여부를 구분해주는 반면, 베타 필드(254)의 나머지는 벡터 길이 필드(259B)로서 해석된다. 메모리 액세스(220) 명령어 템플릿은 스케일 필드(260), 및 선택적으로 변위 필드(262A) 또는 변위 스케일 필드(262B)를 포함하고 있다.
필드에 관한 부가 설명
일반적인 벡터 친숙형 명령어 형식(200)과 관련하여, 전체 연산코드 필드(274)는 형식 필드(240), 베이스 연산 필드(242), 및 데이터 요소 폭 필드(264)를 포함하는 것으로 도시되어 있다. 전체 연산코드 필드(274)가 이들 필드 모두를 포함하는 일 실시예가 도시되어 있지만, 전체 연산코드 필드(274)는 이들 필드 전부를 지원하지 않는 실시예에서 이들 필드 전부가 아닌 일부를 포함하고 있다. 전체 연산코드 필드(274)는 연산 코드(operation code)를 제공한다.
보강 연산 필드(250), 데이터 요소 폭 필드(264), 및 기입 마스크 필드(270)는 이들 특징이 일반적인 벡터 친숙형 명령어 형식에서 명령어별로 지정될 수 있게 해준다.
기입 마스크 필드 및 데이터 요소 폭 필드의 조합은 상이한 데이터 요소 폭에 기초하여 마스크가 적용될 수 있게 해준다는 점에서 유형 명령어(typed instruction)를 생성한다.
명령어 형식은, 다른 필드의 내용에 기초하여 상이한 목적을 위해 상이한 필드를 재사용하기 때문에, 비교적 적은 수의 비트를 필요로 한다. 예를 들어, 하나의 관점은 수정자 필드의 내용이 도 2a 및 도 2b 상의 메모리 액세스 없음(205) 명령어 템플릿 및 도 2a 및 도 2b 상의 메모리 액세스(220) 명령어 템플릿 중에서 선택을 하는 것인 반면; 클래스 필드(268)의 내용이 그 메모리 액세스 없음(205) 명령어 템플릿 내에서 도 2a의 명령어 템플릿(210/215) 및 도 2b의 명령어 템플릿(212/217) 중에서 선택을 하는 것인 반면; 클래스 필드(268)의 내용이 그 메모리 액세스(220) 명령어 템플릿 내에서 도 2a의 명령어 템플릿(225/230) 및 도 2b의 명령어 템플릿(227) 중에서 선택을 한다는 것이다. 다른 관점으로부터 볼 때, 클래스 필드(268)의 내용은 도 2a의 클래스 A 명령어 템플릿 및 도 2b의 클래스 B 명령어 템플릿 중에서 선택을 하는 반면; 수정자 필드의 내용은 그 클래스 A 명령어 템플릿 내에서 도 2a의 명령어 템플릿(205) 및 명령어 템플릿(220) 중에서 선택을 하는 것인 반면; 수정자 필드의 내용은 그 클래스 B 명령어 템플릿 내에서 도 2b의 명령어 템플릿(205) 및 명령어 템플릿(220) 중에서 선택을 한다. 클래스 필드의 내용이 클래스 A 명령어 템플릿을 나타내는 경우, 수정자 필드(246)의 내용은 [rs 필드(252A)와 EH 필드(252B) 중에서] 알파 필드(252)의 해석을 선택한다. 관련된 방식에서, 수정자 필드(246) 및 클래스 필드(268)의 내용은 알파 필드가 rs 필드(252A)로서 해석되는지, EH 필드(252B)로서 해석되는지, 또는 기입 마스크 제어(Z) 필드(252C)로서 해석되는지를 선택한다. 클래스 필드 및 수정자 필드가 클래스 A 메모리 액세스 없음 연산을 나타내는 경우, 보강 필드의 베타 필드의 해석은 rs 필드의 내용에 기초하여 변하는 반면; 클래스 필드 및 수정자 필드가 클래스 B 메모리 액세스 없음 연산을 나타내는 경우, 베타 필드의 해석은 RL 필드의 내용에 의존한다. 클래스 필드 및 수정자 필드가 클래스 A 메모리 액세스 연산을 나타내는 경우, 보강 필드의 베타 필드의 해석은 베이스 연산 필드의 내용에 기초하여 변하는 반면; 클래스 필드 및 수정자 필드가 클래스 B 메모리 액세스 연산을 나타내는 경우, 보강 필드의 베타 필드의 브로드캐스트 필드(257B)의 해석은 베이스 연산 필드의 내용에 기초하여 변한다. 이와 같이, 베이스 연산 필드, 수정자 필드 및 보강 연산 필드의 조합은 아주 다양한 보강 연산이 지정될 수 있게 해준다.
클래스 A 및 클래스 B 내에서 발견되는 다양한 명령어 템플릿이 상이한 상황에서 유익하다. 클래스 B는 성능 이유로 제로화-기입 마스킹 또는 보다 작은 벡터 길이가 요망될 때 유용하다. 예를 들어, 제로화는, 더 이상 목적지와 인위적으로 병합할 필요가 없기 때문에, 이름 변경이 사용될 때 거짓 의존(fake dependence)을 피하는 것을 가능하게 해주고; 다른 예로서, 벡터 길이 제어는 벡터 마스크로 보다 짧은 벡터 크기를 에뮬레이트할 때 저장-로드 전달(store-load forwarding) 문제를 쉽게 해준다. 1) 반올림 모드 제어를 동시에 사용하는 동안 부동 소수점 예외(즉, SAE 필드의 내용이 아니오를 나타낼 때)를 가능하게 해주는 것; 2) 상향 변환, 뒤섞기, 스왑(swap), 및/또는 하향 변환을 사용할 수 있는 것; 3) 그래픽 데이터 유형에 대해 연산을 하는 것이 바람직할 때 클래스 A가 유용하다. 예를 들어, 상향 변환, 뒤섞기, 스왑, 하향 변환 및 그래픽 데이터 유형은 상이한 형식으로 된 소스에 대해 작업할 때 필요한 명령어의 수를 감소시키고; 다른 예로서, 예외를 가능하게 해주는 것은 유향 반올림 모드(directed rounding-mode)에 대한 완전한 IEEE 적합성을 제공한다. 또한, 본 발명의 일부 실시예에서, 상이한 프로세서 또는 프로세서 내의 상이한 코어는 클래스 A만, 클래스 B만, 또는 양쪽 클래스를 지원할 수 있다. 예를 들어, 범용 컴퓨팅을 목적으로 하는 고성능 범용 비순차 코어는 클래스 B만을 지원할 수 있고, 주로 그래픽 및/또는 과학 (처리율) 컴퓨팅을 목적으로 하는 코어는 클래스 A만을 지원할 수 있으며, 양쪽을 목적으로 하는 코어는 둘 다를 지원할 수 있다(물론, 양쪽 클래스로부터의 템플릿 및 명령어 전부는 아니지만 양쪽 클래스로부터의 템플릿 및 명령어의 어떤 혼합체를 가지는 코어는 본 발명의 범위 내에 속한다). 또한, 단일 프로세서는 다수의 코어를 포함할 수 있고, 이들 모두가 동일한 클래스를 지원하거나 상이한 코어가 상이한 클래스를 지원한다. 예를 들어, 개별적인 그래픽 및 범용 코어를 갖는 프로세서에서, 주로 그래픽 및/또는 과학 컴퓨팅을 목적으로 하는 그래픽 코어들 중 하나는 클래스 A만을 지원할 수 있는 반면, 범용 코어들 중 하나 이상은 클래스 B만을 지원하는 범용 컴퓨팅을 목적으로 하는 비순차 실행 및 레지스터 이름 변경을 갖는 고성능 범용 코어일 수 있다.  개별적인 그래픽 코어를 갖지 않는 다른 프로세서는 클래스 A 및 클래스 B 둘 다를 지원하는 하나 이상의 범용 순차 또는 비순차 코어를 포함할 수 있다. 물론, 본 발명의 다른 실시예에서, 하나의 클래스로부터의 특징이 또한 다른 클래스에서 구현될 수 있다. 상위 레벨 언어로 작성된 프로그램이 하기의 것을 포함하는 각종의 상이한 실행가능 형태로 될 것이다[예컨대, JIT(just in time) 컴파일되거나 정적 컴파일된다]: 1) 실행을 위해 대상 프로세서에 의해 지원되는 클래스(들)의 명령어만을 가지는 형태; 또는 2) 모든 클래스의 명령어의 상이한 조합을 사용하여 작성된 대안의 루틴을 가지며 현재 코드를 실행하고 있는 프로세서에 의해 지원되는 명령어에 기초하여 실행할 루틴을 선택하는 제어 흐름 코드를 가지는 형태.
예시적인 특정의 벡터 친숙형 명령어 형식 - 도 3a 내지 도 3d
도 3a는 본 발명의 실시예에 따른, 예시적인 특정의 벡터 친숙형 명령어 형식을 나타낸 블록도이다. 도 3a는 필드의 장소, 크기, 해석, 및 순서는 물론, 그 필드들 중 일부에 대한 값을 지정한다는 점에서 특정인, 특정의 벡터 친숙형 명령어 형식(300)을 나타낸 것이다. 특정의 벡터 친숙형 명령어 형식(300)은 x86 명령어 집합을 확장하는 데 사용될 수 있고, 따라서 그 필드들 중 일부는 기존의 x86 명령어 집합 및 그의 확장(예컨대, AVX)에서 사용되는 것과 유사하거나 동일하다. 이 형식은 확장을 갖는 기존의 x86 명령어 집합의 프리픽스 인코딩 필드, 실제 연산코드 바이트(real opcode byte) 필드, MOD R/M 필드, SIB 필드, 변위 필드, 및 즉치 필드와 일관성을 유지하고 있다. 도 2로부터의 필드와 도 3a 맵으로부터의 필드 간의 대응이 예시되어 있다.
비록 본 발명의 실시예가 예시를 위해 일반적인 벡터 친숙형 명령어 형식(200)과 관련하여 특정의 벡터 친숙형 명령어 형식(300)을 참조하여 기술되어 있지만, 본 발명이, 청구되는 경우를 제외하고는, 특정의 벡터 친숙형 명령어 형식(300)으로 제한되지 않는다는 것을 잘 알 것이다. 예를 들어, 일반적인 벡터 친숙형 명령어 형식(200)은 다양한 필드에 대해 각종의 가능한 크기를 생각하고 있는 반면, 특정의 벡터 친숙형 명령어 형식(300)은 특정의 크기의 필드를 가지는 것으로 도시되어 있다. 특정의 예로서, 특정의 벡터 친숙형 명령어 형식(300)에서 데이터 요소 폭 필드(264)가 1 비트 필드로서 예시되어 있지만, 본 발명이 그것으로 제한되지 않는다[즉, 일반적인 벡터 친숙형 명령어 형식(200)은 데이터 요소 폭 필드(264)의 다른 크기를 생각하고 있다].
형식 - 도 3a
일반적인 벡터 친숙형 명령어 형식(200)은 도 3a에 예시되어 있는 순서로 이하에 열거되는 하기의 필드들을 포함하고 있다.
EVEX 프리픽스(바이트 0 내지 바이트 3)
EVEX 프리픽스(302) - 4-바이트 형식으로 인코딩되어 있음.
형식 필드(240)(EVEX 바이트 0, 비트 [7:0]) - 제1 바이트(EVEX 바이트 0)는 형식 필드(240)이고, 0x62(본 발명의 일 실시예에서 벡터 친숙형 명령어 형식을 구분해주는 데 사용되는 고유값)를 포함하고 있다.
제2 내지 제4 바이트(EVEX 바이트 1 내지 3)는 특정의 기능을 제공하는 다수의 비트 필드를 포함하고 있다.
REX 필드(305)(EVEX 바이트 1, 비트 [7-5]) - EVEX.R 비트 필드(EVEX 바이트 1, 비트 [7] - R), EVEX.X 비트 필드(EVEX 바이트 1, 비트 [6] - X), 및 257BEX 바이트 1, 비트[5] - B)로 이루어져 있다. EVEX.R, EVEX.X, 및 EVEX.B 비트 필드는 대응하는 VEX 비트 필드와 동일한 기능을 제공하고, 1의 보수 형태를 사용하여 인코딩되어 있다(즉, ZMM0은 1111B로서 인코딩되어 있고, ZMM15는 0000B로서 인코딩되어 있음). 명령어의 다른 필드들은, 기술 분야에 공지된 바와 같이, 레지스터 인덱스의 하위 3 비트를 인코딩하고 있고(rrr, xxx, 및 bbb), 따라서 Rrrr, Xxxx, 및 Bbbb는 EVEX.R, EVEX.X, 및 EVEX.B를 부가함으로써 형성될 수 있다.
REX' 필드(310) - 이것은 REX' 필드(310)의 제1 부분이고, 확장된 32 레지스터 집합(extended 32 register set)의 상위 16 또는 하위 16 중 어느 하나를 인코딩하는 데 사용되는 EVEX.R' 비트 필드(EVEX 바이트 1, 비트 [4] - R')이다. 본 발명의 일 실시예에서, 이 비트는, 이하에 나타내는 다른 것들과 함께, (공지된 x86 32-비트 모드에서) 실제 연산코드 바이트가 62인 BOUND 명령어와 구분하기 위해 비트 반전된 형식으로 저장되지만 (이하에서 기술되는) MOD R/M 필드에 MOD 필드에서의 11의 값을 받아 들이지 않으며; 본 발명의 대안의 실시예는 이것 및 이하에 나타낸 다른 비트를 반전된 형식으로 저장하지 않는다. 1의 값은 하위 16 레지스터를 인코딩하는 데 사용된다. 환언하면, R'Rrrr은 EVEX.R', EVEX.R, 및 다른 필드로부터의 다른 RRR을 결합함으로써 형성된다.
연산코드 맵 필드(315)(EVEX 바이트 1, 비트 [3:0] - mmmm) - 그의 내용은 암시된 선두 연산코드 바이트(0F, 0F 38, 또는 0F 3A)를 인코딩한다..
데이터 요소 폭 필드(264)(EVEX 바이트 2, 비트 [7] - W) - 표기법 EVEX.W로 나타내어져 있다. EVEX.W는 데이터 유형의 입도(크기)(32-비트 데이터 요소 또는 64-비트 데이터 요소)를 정의하는 데 사용된다.
EVEX.vvvv(320)(EVEX 바이트 2, 비트 [6:3] - vvvv) - EVEX.vvvv의 역할은 다음과 같은 것을 포함할 수 있다: 1) EVEX.vvvv는 반전된(1의 보수) 형태로 지정되어 있는 제1 소스 레지스터 피연산자를 인코딩하고 2개 이상의 소스 피연산자를 갖는 명령어에 유효하다; 2) EVEX.vvvv는 특정의 벡터 시프트에 대해 1의 보수 형태로 지정되어 있는 목적지 레지스터 피연산자를 인코딩한다; 또는 3) EVEX.vvvv는 어떤 피연산자도 인코딩하지 않고, 그 필드는 예약되어 있으며 1111b를 포함하고 있어야 한다. 이와 같이, EVEX.vvvv 필드(320)는 반전된(1의 보수) 형태로 저장되어 있는 제1 소스 레지스터 지정자의 하위 4 비트를 인코딩한다. 명령어에 따라, 지정자 크기(specifier size)를 32 레지스터로 확장하기 위해 추가의 다른 EVEX 비트 필드가 사용된다.
EVEX.U 268 클래스 필드(EVEX 바이트 2, 비트 [2] - U) - EVEX.U = 0인 경우, 이는 클래스 A 또는 EVEX.U0을 나타내고; EVEX.U = 1인 경우, 이는 클래스 B 또는 EVEX.U1을 나타낸다.
프리픽스 인코딩 필드(325)(EVEX 바이트 2, 비트 [1:0] - pp) - 베이스 연산 필드에 대한 부가의 비트를 제공한다. EVEX 프리픽스 형식에서 레거시 SSE 명령어에 대한 지원을 제공하는 것에 부가하여, 이것은 또한 SIMD 프리픽스를 압축(compact)시키는 이점이 있다(SIMD 프리픽스를 표현하는 데 한 바이트를 필요로 하기보다는, EVEX 프리픽스는 2 비트만을 필요로 한다). 일 실시예에서, 레거시 형식 및 EVEX 프리픽스 형식 둘 다에서 SIMD 프리픽스(66H, F2H, F3H)를 사용하는 레거시 SSE 명령어를 지원하기 위해, 이들 레거시 SIMD 프리픽스는 SIMD 프리픽스 인코딩 필드에 인코딩되어 있고; 런타임 시에, 디코더의 PLA에 제공되기 전에 레거시 SIMD 프리픽스로 확장(expand)된다(따라서 PLA는 수정 없이 이들 레거시 명령어의 레거시 및 EVEX 형식 둘 다를 실행할 수 있다). 보다 새로운 명령어가 EVEX 프리픽스 인코딩 필드의 내용을 연산코드 확장으로서 직접 사용할 수 있지만, 특정의 실시예는 일관성을 위해 유사한 방식으로 확장하지만, 이들 레거시 SIMD 프리픽스에 의해 상이한 의미가 지정될 수 있게 해준다. 대안의 실시예는 2 비트 SIMD 프리픽스 인코딩을 지원하기 위해 PLA를 재설계할 수 있고, 따라서 확장을 필요로 하지 않는다.
알파 필드(252)(EVEX 바이트 3, 비트 [7] - EH; EVEX.EH, EVEX.rs, EVEX.RL, EVEX.write mask control, 및 EVEX.N라고도 함; 또한 α로 예시되어 있음) - 앞서 기술된 바와 같이, 이 필드는 컨텍스트에 관련되어 있다. 부가의 설명은 본 명세서에서 나중에 제공되어 있다.
베타 필드(254)(EVEX 바이트 3, 비트 [6:4] - SSS, EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB라고도 함; 또한 βββ로 예시되어 있음) - 앞서 기술된 바와 같이, 이 필드는 컨텍스트에 관련되어 있다. 부가의 설명은 본 명세서에서 나중에 제공되어 있다.
REX' 필드(310) - 이것은 REX' 필드(310)의 나머지이고, 확장된 32 레지스터 집합의 상위 16 또는 하위 16 중 어느 하나를 인코딩하는 데 사용될 수 있는 EVEX.V' 비트 필드(EVEX 바이트 3, 비트 [3] - V')이다. 이 비트는 비트 반전된 형식으로 저장되어 있다. 1의 값은 하위 16 레지스터를 인코딩하는 데 사용된다. 환언하면, V'VVVV는 EVEX.V', EVEX.vvvv를 결합하여 형성된다.
기입 마스크 필드(270)(EVEX 바이트 3, 비트 [2:0] - kkk) - 그의 내용은, 앞서 기술된 바와 같이, 기입 마스크 레지스터에서의 레지스터의 인덱스를 지정한다. 본 발명의 일 실시예에서, 특정의 값 EVEX.kkk=000은 특정의 명령어에 대해 어떤 기입 마스크도 사용되지 않는다는 것을 암시하는 특수한 거동(special behavior)을 가진다 (이것은 모두가 1에 하드와이어되어 있는 기입 마스크 또는 마스킹 하드웨어를 우회하는 하드웨어의 사용을 비롯한 각종의 방식으로 구현될 수 있다).
실제 연산코드 필드(330)(바이트 4)
이것은 연산코드 바이트(opcode byte)라고도 한다. 연산코드의 일부는 이 필드에 지정되어 있다.
MOD R/M 필드(340)(바이트 5)
수정자 필드(246)[MODR/M.MOD, 비트 [7-6] - MOD 필드(342)] - 앞서 기술된 바와 같이, MOD 필드(342)의 내용은 메모리 액세스 연산과 메모리 액세스 없음 연산을 구분해준다. 이 필드는 본 명세서에 나중에 더 기술될 것이다.
MODR/M.reg 필드(344), 비트 [5-3] - ModR/M.reg 필드의 역할은 2가지 상황으로 요약될 수 있다: ModR/M.reg는 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩하거나, ModR/M.reg는 연산코드 확장으로서 취급되고 임의의 명령어 피연산자를 인코딩하는 데 사용되지 않는다.
MODR/M.r/m 필드(346), 비트 [2-0] - ModR/M.r/m 필드의 역할은 다음과 같은 것을 포함할 수 있다: ModR/M.r/m은 메모리 주소를 참조하는 명령어 피연산자를 인코딩하거나, ModR/M.r/m은 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자를 인코딩한다.
스케일, 인덱스, 베이스(SIB) 바이트(바이트 6)
스케일 필드(260)(SIB.SS, 비트 [7-6] - 앞서 기술된 바와 같이, 스케일 필드(260)의 내용은 메모리 주소 발생을 위해 사용된다. 이 필드는 본 명세서에 나중에 더 기술될 것이다.
SIB.xxx(354) (비트 [5-3]) 및 SIB.bbb(356) (비트 [2-0]) - 이들 필드의 내용은 레지스터 인덱스 Xxxx 및 Bbbb와 관련하여 앞서 언급되었다.
변위 바이트(들) (바이트 7 또는 바이트 7-10)
변위 필드(262A)(바이트 7-10) - MOD 필드(342)가 10을 포함할 때, 바이트 7-10은 변위 필드(262A)이고, 이는 레거시 32-비트 변위(disp32)와 동일하게 동작하고 바이트 입도(byte granularity)로 동작한다.
변위 인자 필드(262B)(바이트 7) - MOD 필드(342)가 01을 포함할 때, 바이트 7은 변위 인자 필드(262B)이다. 이 필드의 장소는 바이트 입도로 동작하는 레거시 x86 명령어 집합 8-비트 변위(disp8)와 동일하다. disp8이 부호 확장되기 때문에, 이는 -128 내지 127 바이트 오프셋만을 어드레싱할 수 있고; 64 바이트 캐시 라인과 관련하여, disp8은 단지 4개의 정말로 유용한 값 -128, -64, 0, 및 64만으로 설정될 수 있는 8 비트를 사용하며; 보다 큰 범위가 종종 필요하기 때문에, disp32가 사용되지만; disp32는 4 바이트를 필요로 한다. disp8 및 disp32와 달리, 변위 인자 필드(262B)는 disp8의 재해석이고; 변위 인자 필드(262B)를 사용할 때, 변위 인자 필드의 내용과 메모리 피연산자 액세스의 크기(N)를 곱한 것에 의해 실제 변위가 결정된다. 이 유형의 변위는 disp8*N이라고 한다. 이것은 평균 명령어 길이를 감소시킨다(단일 바이트가 변위에 대해 사용되지만, 보다 큰 범위를 가짐). 이러한 압축된 변위(compressed displacement)는 유효 변위가 메모리 액세스의 입도의 배수라는 가정에 기초하고 있으며, 따라서 주소 오프셋의 중복 하위 비트가 인코딩될 필요가 없다. 환언하면, 변위 인자 필드(262B)는 레거시 x86 명령어 집합 8-비트 변위를 대체한다. 이와 같이, 변위 인자 필드(262B)는 x86 명령어 집합 8-비트 변위와 동일한 방식으로 인코딩되고(따라서 ModRM/SIB 인코딩 규칙의 변화가 없음), 유일한 예외는 disp8이 disp8*N으로 오버로드(overload)된다는 것이다. 환언하면, 인코딩 규칙 또는 인코딩 길이에서는 변화가 없고 하드웨어에 의한 변위 값의 해석에서만 변화가 있다[이는 바이트 단위 주소 오프셋(byte-wise address offset)을 획득하기 위해 메모리 피연산자의 크기만큼 변위를 스케일링할 필요가 있다].
즉치
즉치 필드(272)는 앞서 기술한 바와 같이 동작한다.
전체 연산코드 필드 - 도 3b
도 3b는 본 발명의 일 실시예에 따른, 전체 연산코드 필드(274)를 구성하는 특정의 벡터 친숙형 명령어 형식(300)의 필드들을 나타낸 블록도이다. 구체적으로는, 전체 연산코드 필드(274)는 형식 필드(240), 베이스 연산 필드(242), 및 데이터 요소 폭(W) 필드(264)를 포함하고 있다. 베이스 연산 필드(242)는 프리픽스 인코딩 필드(325), 연산코드 맵 필드(315), 및 실제 연산코드 필드(330)를 포함하고 있다.
레지스터 인덱스 필드 - 도 3c
도 3c는 본 발명의 일 실시예에 따른, 레지스터 인덱스 필드(244)를 구성하는 특정의 벡터 친숙형 명령어 형식(300)의 필드들을 나타낸 블록도이다. 구체적으로는, 레지스터 인덱스 필드(244)는 REX 필드(305), REX' 필드(310), MODR/M.reg 필드(344), MODR/M.r/m 필드(346), VVVV 필드(320), xxx 필드(354), 및 bbb 필드(356)를 포함하고 있다..
보강 연산 필드 - 도 3d
도 3d는 본 발명의 일 실시예에 따른, 보강 연산 필드(250)를 구성하는 특정의 벡터 친숙형 명령어 형식(300)의 필드들을 나타낸 블록도이다. 클래스(U) 필드(268)가 0을 포함할 때, 이는 EVEX.U0[클래스 A(268A)]을 나타내고; 1을 포함할 때, 이는 EVEX.U1[클래스 B(268B)]을 나타낸다. U=0이고 MOD 필드(342)가 11(메모리 액세스 없음 연산을 나타냄)을 포함할 때, 알파 필드(252)(EVEX 바이트 3, 비트 [7] - EH)는 rs 필드(252A)로서 해석된다. rs 필드(252A)가 1[반올림(252A.1)]을 포함할 때, 베타 필드(254)(EVEX 바이트 3, 비트 [6:4] - SSS)는 반올림 제어 필드(254A)로서 해석된다. 반올림 제어 필드(254A)는 1 비트 SAE 필드(256) 및 2 비트 반올림 연산 필드(258)를 포함하고 있다. rs 필드(252A)가 0[데이터 변환(252A.)]을 포함할 때, 베타 필드(254)(EVEX 바이트 3, 비트 [6:4] - SSS)는 3 비트 데이터 변환 필드(254B)로서 해석된다. U=0이고 MOD 필드(342)가 00, 01, 또는 10(메모리 액세스 연산을 나타냄)을 포함할 때, 알파 필드(252)(EVEX 바이트 3, 비트 [7] - EH)는 축출 힌트(EH) 필드(252B)로서 해석되고, 베타 필드(254)(EVEX 바이트 3, 비트 [6:4] - SSS)는 3 비트 데이터 조작 필드(254C)로서 해석된다.
U=1일 때, 알파 필드(252)(EVEX 바이트 3, 비트 [7] - EH)는 기입 마스크 제어(Z) 필드(252C)로서 해석된다. U=1이고 MOD 필드(342)가 11(메모리 액세스 없음 연산을 나타냄)을 포함할 때, 베타 필드(254)의 일부(EVEX 바이트 3, 비트 [4]- S0)는 RL 필드(257A)로서 해석되고; MOD 필드(342)가 1[반올림(257A.1)]을 포함할 때, 베타 필드(254)의 나머지(EVEX 바이트 3, 비트 [6-5]- S2-1)는 반올림 연산 필드(259A)로서 해석되는 반면, RL 필드(257A)가 0[VSIZE(257.A2)]을 포함할 때, 베타 필드(254)의 나머지(EVEX 바이트 3, 비트 [6-5]- S2-1)는 벡터 길이 필드(259B)(EVEX 바이트 3, 비트 [6-5]- L1-0)로서 해석된다. U=1이고 MOD 필드(342)가 00, 01, 또는 10(메모리 액세스 연산을 나타냄)을 포함할 때, 베타 필드(254)(EVEX 바이트 3, 비트 [6:4] - SSS)는 벡터 길이 필드(259B)(EVEX 바이트 3, 비트 [6-5]- L1-0) 및 브로드캐스트 필드(257B)(EVEX 바이트 3, 비트 [4]- B)로서 해석된다.
어떤 부가의 요점
벡터 형식은 레지스터의 수를 32(REX')로 확장한다.
비파괴적 소스 레지스터 인코딩(3 및 4 피연산자 구문에 적용가능함): 이것은 명령어 구문에서의 제1 소스 피연산자이다. 이는 표기법 EVEX.vvvv로 표현된다. 이 필드는 1의 보수 형태(반전된 형태)를 사용하여 인코딩된다 - 즉, ZMM0은 1111B로서 인코딩되고, ZMM15는 0000B로서 인코딩된다 -. 유의할 점은, 소스를 32 레지스터로 확장하기 위해서는 EVEX에서의 부가의 비트 필드가 필요하다는 것이다.
EVEX.W는 몇몇 명령어에 대해 데이터 유형 크기(32-비트 또는 64-비트)를 정의한다.
32 확장된 레지스터 집합 인코딩: EVEX 프리픽스는 다음과 같은 전용 비트 필드로 소스당 32 레지스터를 인코딩하기 위해 부가의 비트 필드를 제공한다: EVEX.R' 및 EVEX.V'(레지스터-레지스터 형식에 대한 EVEX.X와 함께).
SIMD 프리픽스의 압축: 레거시 SSE 명령어는 SIMD 프리픽스(66H, F2H, F3H)를 연산코드 확장 필드로서 효과적으로 사용한다. EVEX 프리픽스 인코딩은 512 비트 벡터 길이를 사용하여 이러한 레거시 SSE 명령어의 기능별 능력을 가능하게 해준다.
2-바이트 및 3-바이트 연산코드의 압축: 보다 최근에 소개된 레거시 SSE 명령어는 2-바이트 및 3-바이트 연산코드를 이용한다. 하나 또는 2개의 선두 바이트는 0FH, 및 0FH 3AH/0FH 38H이다. 1-바이트 이스케이프(escape)(0FH) 및 2-바이트 이스케이프(0FH 3AH, 0FH 38H)도 역시 연산코드 확장 필드로서 해석될 수 있다. EVEX.mmm 필드는 많은 레거시 명령어가 일정한 바이트 시퀀스 0FH, 0FH 3AH, 0FH 38H 없이 인코딩될 수 있게 해주기 위해 압축을 제공한다.
벡터 친숙형 명령어 형식의 필드들 중 일부의 상호 관계를 보여주는 예시적인 흐름도 - 도 4a 내지 도 4e
도 4a 내지 도 4d는 본 발명의 일 실시예에 따른, 벡터 친숙형 명령어 형식의 필드들 중 일부의 상호 관계를 보여주는 흐름도를 나타낸 것인 반면; 도 4e는 본 발명의 일 실시예에 따른, 각각의 블록(415A 내지 415H)의 분해도이다. 블록(400)에서, 초기 필드의 값이 벡터 친숙형 명령어 형식(예컨대, 0x62)을 나타내는지가 판정된다. 그렇지 않은 경우, 제어는 명령어 집합의 다른 형식들 중 하나에 따라 명령어가 처리되는 블록(402)으로 넘어간다. 그러한 경우, 제어는 블록(492)으로 넘어간다.
블록(492)에서, 클래스(U) 필드가 클래스 A 또는 클래스 B 명령어 템플릿을 나타내는지가 판정된다. 클래스 A의 경우에, 제어는 2개의 개별적인 블록: 블록(404A) 및 블록(490)으로 넘어간다. 그렇지 않은 경우, 제어는 원으로 둘러싸인 B를 통해 도 4c 상의 2개의 개별적인 블록: 블록(404B) 및 블록(493)으로 넘어간다.
블록(404A)에서, 수정자 필드의 내용이 메모리 액세스 없음 연산 또는 메모리 액세스 연산을 나타내는지가 판정된다. 메모리 액세스 없음 연산의 경우에[예컨대, MOD 필드(342) = 11], 제어는 블록(406 및 408)으로 넘어간다. 메모리 액세스 연산의 경우에[예컨대, MOD 필드(342) = 00, 01, 또는 10], 제어는 (원으로 둘러싸인 A를 통해 도 4b 상의) 블록(422), 블록(430), 및 블록(440A) 각각으로 넘어간다.
알파 필드(252)로 표시된 모서리가 둥근 상자는 블록(408) 및 블록(422)을 포함하고 있는데, 그 이유는 이들 블록이 알파 필드(252)의 상이한 해석을 나타내기 때문이다. 구체적으로는, 블록(408)은 알파 필드(252)가 rs 필드(252A)로서 해석되는 것을 나타내는 반면, 블록(422)은 알파 필드(252)가 축출 힌트 필드(252B)로서 해석되는 때를 나타낸다.
블록(406)에서, 레지스터 인덱스 필드(244)의 내용은 도 6a에 예시되어 있는 바와 같이 사용된다.
블록(408)에서, rs 필드(252A)의 내용이 반올림 유형 연산[예컨대, rs 필드(252A) = 1] 또는 데이터 변환 유형 연산[예컨대, rs 필드(252A) = 0]을 나타내는지가 판정된다. 전자의 경우에, 제어는 블록(410), 블록(412A), 및 블록(414) 각각으로 넘어간다. 후자의 경우에, 제어는 블록(416)으로 넘어간다.
베타(반올림 제어) 필드(254A)로 표시되어 있는 모서리가 둥근 상자는 블록(410) 및 블록(412A)을 포함하고 있다. 블록(410)은 SAE 필드(256)의 내용에 관한 결정(부동 소수점 예외를 억압할지 여부)을 나타내고 있는 반면, 블록(412A)은 반올림 연산 필드(258)의 내용에 기초한 결정(한 그룹의 가능한 반올림 연산 중 하나를 구분하는 것)을 나타내고 있다. 블록(410) 및 블록(412A)에 행해진 결정은 도 7a에 예시되어 있다.
블록(414, 416, 442, 448, 454, 460, 468, 및 474) 모두는 데이터 요소 폭(w) 필드(264)의 내용에 관한 결정을 나타내고 있다. 도 4에 예시된 바와 같이, 도 3a의 특정의 벡터 친숙형 명령어 형식(300)에서 데이터 요소 폭 필드(264)는 1 비트 필드이다. 그에 따라, 이들 블록은 데이터 요소 폭이 64 비트(예컨대, 1) 또는 32 비트(예컨대, 0)인지를 결정한다. 블록(414)과 관련하여, 이 결정은 흐름의 이 분기의 종료를 나타낸다. 이와 달리, 제어는 64 비트 및 32 비트 데이터 요소 폭에 대해, 각각, 블록(416)으로부터 블록(418) 또는 블록(420)으로 넘어간다.
베타(데이터 변환) 필드(254B)로 표시되어 있는 모서리가 둥근 상자는 블록(418) 및 블록(420) 둘 다를 포함하고 있고; 따라서 베타 필드(254)가 데이터 변환 필드(254B)로서 해석되는 경우를 나타낸다. 블록(418 및 420)에서, 데이터 변환 필드(254B)의 내용은 다수의 데이터 변환 연산 중 어느 것이 수행되어야 하는지를 구분해주는 데 사용된다. 블록(418) 및 블록(420)에 대한 가능한 데이터 변환 연산의 그룹들이, 각각, 도 8a 및 도 8b에 도시되어 있다.
블록(422)에서, 축출 힌트 필드(252B)의 내용은 한 그룹의 가능한 축출 힌트 옵션 중 어느 것이 사용되어야 하는지를 구분해주는 데 사용된다. 도 4는 특정의 벡터 친숙형 명령어 형식(300)으로부터의 1 비트 축출 힌트 필드(252B)의 사용을 나타낸 것이다. 구체적으로는, 축출 힌트 연산은 비임시(1) 및 임시(0)이다. 이것은 흐름도의 이 분기의 종료를 나타낸다.
블록(430)에서, 레지스터 인덱스 필드(244), 스케일 필드(260), 및 변위 필드(262A) 또는 변위 인자 필드(262B)의 내용은 도 6b에 나타낸 바와 같이 사용된다. 이것은 흐름도의 이 분기의 종료를 나타낸다.
블록(440A)에서, 베이스 연산 필드(242)의 내용은 한 그룹의 상이한 메모리 액세스 연산 중 어느 것이 수행되어야 하는지를 구분해주는 데 사용된다. 이하의 표는 본 발명의 일 실시예에 따른, 한 그룹의 지원되는 메모리 액세스 연산은 물론, 각각에 대한 블록(440A)으로부터의 제어 흐름도 나타내고 있다. 본 발명의 대안의 실시예는 보다 많은, 보다 적은, 또는 상이한 메모리 액세스 연산을 지원할 수 있다.
Figure 112013099545752-pct00002
앞서 기술한 바와 같이, 블록(442, 448, 454, 460, 468, 및 474)은 데이터 요소 폭에 기초하여 제어 흐름의 변경을 결정하고; 제어 흐름은 이하의 표에 예시되어 있다.
Figure 112013099545752-pct00003
이와 유사하게, 블록(480, 482, 및 484)의 결정은, 각각, 도 15a, 도 15b, 및 도 15c에 예시되어 있다. 베타(데이터 조작) 필드(254C)로 표시되어 있는 모서리가 둥근 상자는 블록(444A, 446A, 450A, 452A, 456, 458, 462, 464, 470, 472, 476, 478, 480, 482, 및 484)을 포함하고 있고; 그에 의해 데이터 조작 필드(254C)의 내용이 한 그룹의 가능한 데이터 조작 연산 중 어느 것이 수행되어야 하는지를 구분해주는 것을 나타내고 있다.
블록(490)에서, 기입 마스크(k) 필드(270)의 내용 및 데이터 요소 폭(w) 필드(264)의 내용은 연산에서 사용될 기입 마스크를 결정하는 데 사용된다. 도 4는 8개의 기입 마스크 레지스터가 있고 레지스터 000가 기입 마스크가 사용되어서는 안된다는 것을 나타내는 실시예를 나타낸 것이다. 기입 마스크 필드(270)의 내용이 000 이외의 것을 나타내는 경우, 제어는 도 16a 내지 도 16d로 넘어간다.
블록(404B)에서, 수정자 필드의 내용이 메모리 액세스 없음 연산 또는 메모리 액세스 연산을 나타내는지가 판정된다. 메모리 액세스 없음 연산의 경우에[예컨대, MOD 필드(342) = 11], 제어는 (원으로 둘러싸인 E를 통해 도 4a 상의) 블록(406) 및 블록(495)으로 넘어간다. 메모리 액세스 연산의 경우에[예컨대, MOD 필드(342) = 00, 01, 또는 10], 제어는 블록(498), (원으로 둘러싸인 D를 통해 도 4a 상의) 블록(430), 및 (원으로 둘러싸인 C를 통해 도 4d 상의) 블록(440B)으로 넘어간다.
베타 필드(254)로 표시된 모서리가 둥근 상자는 블록(495), 블록(412B), 및 블록(498)을 포함하고 있는데, 그 이유는 이들 블록이 베타 필드(254)의 일부의 상이한 해석을 나타내기 때문이다. 구체적으로는, 블록(495)은 베타 필드(254)의 일부가 RL 필드(257A)로서 해석되는 것을 나타내는 반면, 도 4d 상의 브로드캐스트 필드(257B)로 표시되어 있는 모서리가 둥근 상자는 베타 필드(254)의 이 일부가 브로드캐스트 필드(257B)로서 해석되는 것을 나타낸다.
블록(495)에서, RL 필드(257A)의 내용이 반올림 유형 연산[예컨대, RL 필드(257A) = 1] 또는 벡터 길이 유형 연산[예컨대, RL 필드(257A) = 0]을 나타내는지가 판정된다. 전자의 경우에, 제어는 블록(412B), 및 블록(415A) 각각으로 넘어간다. 후자의 경우에, 제어는 블록(498), 및 블록(415B) 각각으로 넘어간다.
블록(412B)은 반올림 연산 필드(259A)의 내용에 기초한 결정(한 그룹의 가능한 반올림 연산 중 하나를 구분하는 것)을 나타내고 있다. 블록(412B)에 행해진 결정은 도 7b에 예시되어 있다.
블록(415A 내지 415H)은 연산을 할 데이터 요소의 폭에 관한 결정을 나타내고 있다. 예시되어 있는 바와 같이, 클래스 B(U=1일 때)에 대한 지원되는 데이터 요소는 64 비트, 32 비트, 16 비트, 및 8 비트이다. 이들 블록을 수행하는 예시적인 방식은 도 4e를 참조하여 본 명세서에서 나중에 기술될 것이다. 블록(415A) 및 블록(415B)은, 각각, 흐름도의 이들 분기의 종료를 나타낸다. 415A와 관련하여, 16 비트 및 8 비트 데이터 요소 폭으로의 라인은 파선으로 나타내어져 있는데, 그 이유는 본 발명의 일 실시예에서, 이들이 지원되지 않기 때문이고; 오히려, 16 비트 또는 8 비트 데이터 요소에 대해 연산을 하는 클래스 B에 대한 메모리 액세스 없음 유형 연산이 있는 경우, RL 필드(257A)의 내용은 0일 것으로 예상되고, 따라서 제어를 블록(495)으로부터 블록(415B 및 498)으로 흐르게 한다(환언하면, 부분 반올림이 이용가능하지 않음).
블록(498)에서, 벡터 길이(LL) 필드(259B)의 내용은 연산될 벡터의 크기를 결정하는 데 사용된다. 도 4는 1) 128 비트(00); 2) 256 비트(01); 512 비트(10)가 지원되는 반면; (11)은 예약되어 있는 실시예를 나타낸 것이다. 예약된 11은 상이한 유형의 명령어에 대한 상이한 목적을 위해 또는 본 발명의 상이한 실시예를 위해 사용될 수 있다. 예를 들어, 11은 다음과 같은 예시적인 목적을 위해 사용될 수 있을 것이다: 1) 1024 비트의 벡터 길이를 지정하기 위해; 또는 2) 동적 벡터 길이 레지스터가 사용되어야 한다는 것을 지정하기 위해. 상이한 실시예는 프로그램에 의해 판독가능하고 기입가능한 벡터 길이를 인코딩하는 데 사용되는 특수 레지스터를 비롯한 동적 벡터 길이 레지스터(들)를 상이하게 구현할 수 있다. 동적 벡터 길이 레지스터는 명령어의 벡터 길이에 대해 사용될 값을 저장한다. 상이한 실시예가 동적 벡터 길이 레지스터를 통해 다수의 상이한 벡터 길이를 지원할 수 있는 반면, 본 발명의 일 실시예는 128-비트의 배수(예컨대, 128, 256, 512, 1024, 2048…)를 지원한다. 동적 벡터 길이 레지스터로서 기능하는 하나 이상의 레지스터의 세트가 있는 경우, 본 발명의 상이한 실시예는 상이한 기법을 사용하여(예컨대, 명령어의 유형에 기초하여) 그 레지스터들 중에서 선택을 할 수 있다.
블록(440B)에서, 베이스 연산 필드(242)의 내용은 한 그룹의 상이한 메모리 액세스 연산 중 어느 것이 수행되어야 하는지를 구분해주는 데 사용된다. 이하의 표는 본 발명의 일 실시예에 따른, 한 그룹의 지원되는 메모리 액세스 연산은 물론, 각각에 대한 블록(440B)으로부터의 제어 흐름도 나타내고 있다. 본 발명의 대안의 실시예는 보다 많은, 보다 적은, 또는 상이한 메모리 액세스 연산을 지원할 수 있다.
Figure 112013099545752-pct00004
앞서 설명된 바와 같이, 블록(415C 내지 415H)은 데이터 요소 폭에 기초하여 제어 흐름의 변경을 결정하고; 제어 흐름은 이하의 표에 예시되어 있다.
Figure 112013099545752-pct00005
브로드캐스트 필드(257B)라고 표시되어 있는 모서리가 둥근 상자는 블록(444B, 446B, 450B, 및 452B)을 포함하고 있고; 그에 의해 브로드캐스트 필드(257B)의 내용이 브로드캐스트 연산이 수행되어야 하는지를 구분해준다는 것을 나타내고 있다. 예시된 바와 같이, 본 발명의 일 실시예는 브로드캐스트(b) 필드(257B)의 내용이 64 비트 및 32 비트의 데이터 요소 폭에 대해 브로드캐스트 연산이 수행되는지 여부를 선택할 수 있게 해주고(즉, 16 비트 및 8 비트 데이터 요소 폭에 대한 옵션이 아님); 오히려, 16 비트 또는 8 비트 데이터 요소에 대해 연산을 하는 클래스 B에 대한 메모리 액세스 유형 연산이 있는 경우, 브로드캐스트(B) 필드(257B)의 내용은 0일 것으로 예상된다.
블록(493)에서, 알파 필드(252)[기입 마스크 제어(Z) 필드(252C)]의 내용, 기입 마스크(k) 필드(270)의 내용, 및 데이터 요소 폭의 결정은 수행될 기입 마스크 연산(병합 또는 제로화) 및 연산에서 사용될 기입 마스크를 결정하는 데 사용된다. 본 발명의 일부 실시예에서, 알파 필드(252)[기입 마스크 제어(Z) 필드(252C)]는 저장을 수행하는 메모리 액세스 연산에 대해(제로 마스킹을 위해) 0일 것으로 예상된다. 데이터 요소 폭의 결정이 블록(415)과 동일한 방식으로 행해진다. 도 4는 8개의 기입 마스크 레지스터가 있고 레지스터 000가 기입 마스크가 사용되어서는 안된다는 것을 나타내는 실시예를 나타낸 것이다. 기입 마스크 필드(270)의 내용이 000 이외의 것을 나타내는 경우, 제어는 도 16d 및 도 16e로 넘어간다.
도 4e는 본 발명의 일 실시예에 따른, 각각의 블록(415A 내지 415H)의 분해도이다. 구체적으로는, 블록들(415A 내지 415H) 각각에 대한 흐름을 나타내는 단일 흐름(415)이 예시되어 있다. 블록(417A)에서, 실제 연산코드 필드(330)의 내용의 일부 또는 전부가 2개의 데이터 요소 폭 세트 - 제1 세트(417A.1)(예컨대, 64 비트 및 32 비트를 포함함) 및 제2 세트(417A.2)(예컨대, 16 비트 및 8 비트) - 중에서 선택을 하는 데 사용된다. 블록(417B)에 예시되어 있는 바와 같이, 데이터 요소 폭(w) 필드(264)에 기초하여 제1 세트(417A.1)에 대한 데이터 요소 폭이 결정되는 반면; 제2 세트(417A.2) 내에서는, 다음과 같이 데이터 요소 폭을 결정하는 2가지 방식이 있다: 417A.2.2[실제 연산코드 필드(330)에만 기초함] 및 417A.2.1[블록(417C)에 예시되어 있는 바와 같이, 데이터 요소 폭(w) 필드(264)에 기초함]. 도 4에 예시된 바와 같이, 도 3a의 특정의 벡터 친숙형 명령어 형식(300)에서 데이터 요소 폭 필드(264)는 1 비트 필드이다. 그에 따라, 이들 블록(417B)은 데이터 요소 폭이 64 비트(예컨대, 1) 또는 32 비트(예컨대, 0)인지를 결정하는 반면; 블록(417C)은 데이터 요소 폭이 16 비트(예컨대, 1) 또는 8 비트(예컨대, 0)인지를 결정한다. 도 4e가 데이터 요소 폭을 결정하는 데 실제 연산코드 필드(417A)가 관여되는 것을 나타내고 있지만, 대안의 실시예는 단지 w 필드를 사용하도록(예컨대, 1 비트 w 필드를 갖고 단지 2개의 데이터 요소 크기를 지원하도록; 2 비트 w 필드를 갖고 4개의 데이터 요소 크기를 지원하도록) 구현될 수 있다.
본 발명의 실시예가 도 4를 참조하여 기술되어 있지만, 대안의 실시예는 상이한 흐름을 사용할 수 있다. 예를 들어, 블록(480, 482, 및 484)으로 예시되어 있는 바와 같이, 단지 하나의 데이터 요소 폭을 지원하는 연산은 데이터 요소 폭 결정을 가질 필요가 없고[예컨대, 블록(442)], 2개의 베타 필드 결정[예컨대, 블록(444A 및 446A)]을 필요로 하지 않으며; 대안의 실시예는 이러한 연산 모두에 대해 하나의 데이터 요소 폭만을 지원하거나, 모든 유형의 연산에 대해 양쪽 데이터 요소 폭을 지원하거나(데이터 요소 폭 그리고 load graphics, load packed graphics, 및 store graphics 연산에 대한 추가의 베타 필드 결정을 필요로 할 것임), 다른 연산들 중 일부에 대해 상이한 데이터 요소 폭을 지원하지 않을 수 있다(예컨대, load/op 연산에 대해 상이한 데이터 요소 폭을 지원하지 않음). 이와 유사하게, 대안의 실시예는 메모리 액세스 없음 반올림 유형 연산 및 메모리 액세스 없음 데이터 변환 유형 연산 중 하나 이상에 대해 상이한 데이터 요소 폭을 지원하지 않을 수 있다 [전자의 경우에, 블록(414 및 415A)이 존재하지 않을 것이고, 후자의 경우에, 블록(415B)이 존재하지 않을 것인 반면, 블록(416)이 존재하지 않을 것이고 블록(418 및 420)이 병합될 것이다]. 다른 예로서, 본 발명의 상이한 실시예는 클래스(U) 필드(268)를 포함하지 않을 수 있고 클래스 A 또는 B 명령어 템플릿 중 하나만을 지원할 수 있으며; 반올림 연산 필드(258)가 아니라 SAE 필드(256)를 포함할 수 있고; 반올림 연산 필드(259A)를 포함하지 않을 수 있으며; 축출 힌트 필드(252B)를 포함하지 않을 수 있고; 클래스 A 및 B 명령어 템플릿 중 어느 하나 또는 둘 다에 반올림 유형 연산을 포함하지 않을 수 있으며; 데이터 변환 유형 연산을 포함하지 않을 수 있고; 메모리 액세스 없음(205) 및 메모리 액세스(220) 중 어느 하나 또는 둘 다에서 벡터 길이 필드(259B)를 포함하지 않을 수 있으며; load/op 및 load 연산 중 한쪽 또는 다른쪽만을 지원하고; 기입 마스크 필드(270)를 포함하지 않을 수 있고; 기입 마스크 제어(Z) 필드(252C)를 포함하지 않을 수 있으며; 및/또는 벡터 길이 필드(259B)를 포함하지 않을 수 있다.
예시적인 레지스터 아키텍처 - 도 5
도 5는 본 발명의 일 실시예에 따른 레지스터 아키텍처(500)의 블록도이다. 레지스터 아키텍처의 레지스터 파일 및 레지스터가 이하에 열거되어 있다:
벡터 레지스터 파일(510) - 예시되어 있는 실시예에서, 512 비트 폭인 32개의 벡터 레지스터가 있고; 이들 레지스터는 zmm0 내지 zmm31로서 참조된다. 하위 16개 zmm 레지스터의 하위 256 비트는 레지스터 ymm0-16 상에 중복되어 있다. 하위 16개 zmm 레지스터의 하위 128 비트(ymm 레지스터의 하위 128 비트)는 레지스터 xmm0-15 상에 중복되어 있다. 특정의 벡터 친숙형 명령어 형식(300)은, 이하의 표에 예시된 바와 같이, 이들 중복된 레지스터 파일에 대해 연산을 행한다.
Figure 112013099545752-pct00006
환언하면, 벡터 길이 필드(259B)는 최대 길이와 하나 이상의 다른 보다 짧은 길이 중에서 선택을 하고, 여기서 각각의 이러한 보다 짧은 길이는 이전의 길이의 1/2 길이이며; 벡터 길이 필드(259B)를 갖지 않는 명령어 템플릿은 최대 벡터 길이에 대해 연산을 한다. 게다가, 일 실시예에서, 특정의 벡터 친숙형 명령어 형식(300)의 클래스 B 명령어 템플릿은 압축 또는 스칼라 단정도/배정도(single/double-precision) 부동 소수점 데이터 및 압축 또는 스칼라 정수 데이터에 대해 연산을 한다. 스칼라 연산은 zmm/ymm/xmm 레지스터 내의 최하위 데이터 요소 위치에 대해 수행되는 연산이고; 상위 데이터 요소 위치는 실시예에 따라 명령어 이전과 동일한 채로 있거나 제로화된다.
기입 마스크 레지스터(515) - 예시되어 있는 실시예에서, 각각이 64 비트 크기인 8개의 기입 마스크 레지스터(k0 내지 k7)가 있다. 앞서 기술한 바와 같이, 본 발명의 일 실시예에서, 벡터 마스크 레지스터 k0는 기입 마스크로서 사용될 수 없고; 보통 k0를 나타내는 인코딩이 기입 마스크에 대해 사용될 때, 이는 0xFFFF의 하드와이어된 기입 마스크를 선택하고, 그 명령어에 대한 기입 마스킹을 효과적으로 디스에이블시킨다.
MXCSR(Multimedia Extensions Control Status Register)(520) - 예시되어 있는 실시예에서, 이 32-비트 레지스터는 부동 소수점 연산에서 사용되는 상태 및 제어 비트를 제공한다.
범용 레지스터(525) - 예시되어 있는 실시예에서, 메모리 피연산자를 어드레싱하기 위해 기존의 x86 어드레싱 모드와 함께 사용되는 16개의 64-비트 범용 레지스터가 있다. 이들 레지스터는 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15라는 이름으로 참조된다.
EFLAGS(Extended flags) 레지스터(530) - 예시되어 있는 실시예에서, 이 32-비트 레지스터는 많은 명령어의 결과를 기록하는 데 사용된다.
FCW(Floating Point Control Word) 레지스터(540) 및 FSW(Floating Point Status Word) 레지스터(530) - 예시되어 있는 실시예에서, 이들 레지스터는 FCW의 경우에 반올림 모드, 예외 마스크 및 플래그를 설정하기 위해 그리고 FSW의 경우에 예외를 추적하기 위해 x87 명령어 집합 확장에 의해 사용된다.
MMX 압축 정수 플랫(flat) 레지스터 파일(550)이 앨리어싱되어 있는 스칼라 부동 소수점 스택(stack) 레지스터 파일(x87 스택)(545) - 예시되어 있는 실시예에서, x87 스택은 x87 명령어 집합 확장을 사용하여 32/64/80-비트 부동 소수점 데이터에 대해 스칼라 부동 소수점 연산을 수행하는 데 사용되는 8-요소 스택인 반면; MMX 레지스터는 64-비트 압축 정수 데이터에 대해 연산을 수행하는 것은 물론, MMX 레지스터와 XMM 레지스터 사이에서 수행되는 어떤 연산에 대한 피연산자를 보유하는 데 사용된다.
세그먼트 레지스터(555) - 예시된 실시예에서, 세그먼트화된 주소 발생을 위해 사용되는 데이터를 저장하는 데 사용되는 6개의 16-비트 레지스터가 있다.
RIP 레지스터(565) - 예시된 실시예에서, 이 64-비트 레지스터는 명령어 포인터를 저장한다.
본 발명의 대안의 실시예는 보다 넓은 또는 보다 좁은 레지스터를 사용할 수 있다. 그에 부가하여, 본 발명의 대안의 실시예는 보다 많은, 보다 적은, 또는 상이한 레지스터 파일 및 레지스터를 사용할 수 있다.
레지스터 인덱스 필드, 스케일 필드, 변위 필드, 및 변위 인자 필드 흐름 - 도 6a 내지 도 6c
수정자 필드 = 메모리 액세스 없음 - 도 6a
도 6a는 본 발명의 실시예에 따른, 메모리 액세스 없음 유형 연산에 대한 레지스터 인덱스 필드(244)의 흐름도이다. 도 6a는 mod 필드(342)(=11)에 따라 레지스터-레지스터 어드레싱이 수행되고 있는 것을 나타내는 블록(600)으로 시작한다. 블록(600)으로부터, 제어는 블록(605)으로 넘어간다.
블록(605)에서, 레지스터를 어드레싱하기 위해 레지스터 인덱스 필드(244)로부터 비트가 선택된다. 특정의 벡터 친숙형 명령어 형식(300)과 관련하여, 확장을 갖는 기존의 x86 명령어 집합은 REX 필드(305), reg 필드(344), r/m 필드(346), VVVV 필드(320), xxx 필드(354), 및 bbb 필드(356)에 기초하여 아주 다양한 상이한 레지스터 어드레싱 옵션을 가능하게 해준다. REX' 필드(310)는 이들 옵션을 확장시킨다. 블록(605)으로부터, 제어는 블록(610)으로 넘어간다.
블록(610)에서, 레지스터 A가 선택되고(예컨대, zmm19), 제어는 블록(615)으로 넘어간다. 블록(615)에서, 레지스터 B가 선택되고(예컨대, zmm5), 제어는 선택적으로 블록(620)으로 넘어간다. 블록(625)에서, 레지스터 C가 선택된다(예컨대, zmm7). 레지스터 A는 소스 피연산자 레지스터일 수 있고; 레지스터 B는 소스 피연산자 레지스터, 목적지 피연산자 레지스터, 또는 소스/목적지 피연산자 레지스터일 수 있으며; 레지스터 C는 소스 피연산자 레지스터, 목적지 피연산자 레지스터, 또는 소스/목적지 피연산자일 수 있다.
수정자 필드 = 메모리 액세스 - 도 6b
도 6b는 본 발명의 실시예에 따른, 메모리 액세스 유형 연산에 대한 레지스터 인덱스 필드(244), 스케일 필드(260), 변위 필드(262A), 및 변위 인자 필드(262B)의 사용을 나타낸 흐름도이다. 도 6b는 레지스터-메모리 어드레싱[mod 필드(342) = 00, 01, 또는 10]을 나타내는 블록(630)으로 시작한다. 630으로부터, 제어는 블록(635)으로 넘어간다.
블록(635)에서, 레지스터를 어드레싱하기 위해 레지스터 인덱스 필드로부터 비트가 선택되고, 제어는 블록(640)으로 넘어간다.
블록(640)에서, 레지스터 A가 선택되고(예컨대, zmm19), 제어는 선택적으로 블록(645)으로 넘어간다. 블록(645)에서, 레지스터 B가 선택되고(예컨대, zmm31), 제어는 블록(650)으로 넘어간다. 블록(645)이 사용되지 않는 경우에, 제어는 블록(640)으로부터 블록(650)으로 바로 넘어간다.
블록(650)에서, REX 필드(305), REX' 필드(310), mod r/m 필드(340), SIB 바이트(350), 및 변위 필드(262A) 또는 변위 인자 필드(262B)의 내용이 메모리를 어드레싱하는 데 사용되고; 구체적으로는, 인덱스 및 베이스는 REX 필드(305) 및 SIB 바이트(350)로부터 풀링되는 반면, 스케일 필드(260)[ss 필드(352)]의 내용은 SIB 바이트(350)로부터 풀링된다. 블록(650)으로부터, 제어는 블록(660)으로 넘어간다.
블록(660)에서, 메모리 액세스 모드가 [예컨대, mod 필드(342)의 내용에 기초하여] 결정된다. 메모리 액세스 모드가 변위 없음(no displacement) 모드[mod 필드(342) = 00]인 경우, 제어는 다음과 같이 주소가 발생되는 블록(665)으로 넘어간다: 2ss*인덱스+베이스.
메모리 액세스 모드가 비스케일링된 변위 모드[mod 필드(342) = 10]인 경우, 제어는 다음과 같이 주소가 발생되는 블록(670)으로 넘어간다: 2ss*인덱스+베이스+disp32. 메모리 액세스 모드가 스케일링된 변위 모드[mod 필드(342) = 01]인 경우에, 제어는 다음과 같이 주소가 발생되는 블록(675)으로 넘어가고: 2ss*인덱스+베이스+스케일링된 변위; 여기서 스케일링된 변위(disp8*n) = 변위 인자 필드(262B)의 내용×메모리 액세스 크기(N)이며, 여기서 N은 전체 연산코드 필드(274)(예컨대, 베이스 연산 필드 및/또는 데이터 요소 폭 필드) 및 보강 연산 필드(250)[예컨대, 클래스 필드(268) 및 데이터 조작 필드(254C), 벡터 길이 필드(259B), 및/또는 브로드캐스트 필드(257B)]의 내용에 의존한다.
스케일링된 변위 - 도 6c
도 6c는 본 발명의 실시예에 따른, disp8, disp32, 및 스케일링된 변위의 변형들 간의 차이를 나타낸 표이다. 표의 열들은 1) 바이트 단위로 증가되는 주소를 나타내는 "바이트"; 2) -128 내지 127을 저장하는 데 사용되는 1 바이트 필드인 "disp8 필드"; 3) -231 내지 231-1을 저장하는 데 사용되는 4 바이트 필드인 "disp32 필드"; 및 4) -128 내지 127을 저장하는 데 사용되는 1 바이트 필드인 "disp32*N 필드"이고, 이 열은 "N=1", "N=2", 및 "N=64"인 경우의 하위 열을 가진다.
"바이트" 열에 있는 행들에서의 값들은 열을 따라 내려가면서 증가한다. 제2 열, 제3 열, 및 각각의 하위 열은 그 필드에 의해 발생될 수 있는 주소에 대한 행들에 흑색 원을 포함하고 있다. disp8 필드, disp32 필드, 및 N=1인 경우가 그의 범위 내에서 모든 바이트에 대해 흑색점을 가진다는 것에 유의할 필요가 있고, 이는 이들 필드가 바이트 입도로 증가한다는 것을 나타낸다. 이와 달리, N=2 열은 2 바이트씩 증가하고, 그에 따라 단지 그의 범위 내에서 하나 걸러 바이트에 대해 흑색점을 가지며, 그에 따라 이는 disp8 필드와 비교하여 보다 넓은 범위를 갖지만 보다 거친 입도를 가지는 반면, 동시에 이는 disp32 필드의 바이트의 1/4을 필요로 한다. N=64 열은 64 바이트씩 증가하고, 그에 따라 단지 그의 범위 내에서 매 64개 바이트마다 흑색점을 가지며; 그에 따라, 이는 disp8 필드 및 N=2와 비교하여 보다 넓은 범위를 갖지만 보다 거친 입도를 가지는 반면, 이와 동시에, 이는 disp32 필드의 바이트의 1/4을 필요로 한다.
반올림 필드 표 - 도 7a 및 도 7b
도 7a는 본 발명의 실시예에 따른, 반올림 제어 필드(254A)에 의해 지정될 수 있는 가능한 연산들의 그룹을 나타낸 표이다. 도 7a는 제1 열이 [반올림 제어 필드(254A)로서 역할하고 SAE 필드(256) 및 반올림 연산 필드(258)로 분해되는] 베타 필드(254)의 가능한 내용을 포함하는 것으로 나타내고 있다.
이와 유사하게, 도 7b는 본 발명의 실시예에 따른, 반올림 제어 필드(259A)에 의해 지정될 수 있는 가능한 연산들의 그룹을 나타낸 표이다. 클래스 B 명령어 템플릿의 경우에, SAE 필드(256)가 없고, 부동 소수점 예외 억압(floating point exception suppression)이 항상 활성이다.
유의할 점은, 일부 명령어가 이미 반올림 모드를 즉치 비트(immediate bit)를 통해 정적으로 지정하는 것을 가능하게 해주는 일 실시예에서, 즉치 비트는 반올림 모드 연산 필드(258 및 259A)보다 우선순위를 가진다.
데이터 유형
이하의 표는 본 명세서에서 사용되는 어떤 예시적인 데이터 유형을 열거하고 있다[이들 중 일부는 Microsoft's® DirectX® 10 (Microsoft®, DirectX®, Data Conversion Rules(2010년 8월 17일) 참조):
Figure 112013099545752-pct00007
UNORM은 부호없는 정규화된 정수를 나타내고, n-비트 숫자에 대해, 모두가 0인 것은 0.0f를 의미하고, 모두가 1인 것은 1.0f를 의미한다는 것을 의미함. 0.0f부터 1.0f까지의 균등한 간격으로 있는 부동 소수점 값의 시퀀스가 표현된다 - 예컨대, 2-비트 UNORM은 0.0f, 1/3, 2/3, 및 1.0f를 나타낸다 -.
SNORM은 부호있는 정규화된 정수를 나타내고, n-비트 2의 보수 숫자에 대해, 최대값은 1.0f를 의미하고(예컨대, 5-비트 값 01111은 1.0f에 매핑됨), 최소값은 -1.0f를 의미한다(예컨대, 5-비트 값 10000은 -1.0f에 매핑됨). 그에 부가하여, 두번째 최소 수는 -1.0f에 매핑된다(예컨대, 5-비트 값 10001은 -1.0f에 매핑됨). 따라서, -1.0f.에 대한 2개의 정수 표현이 있다. 0.0f에 대한 하나의 표현, 및 1.0f에 대한 하나의 표현이 있다. 이 결과, (-1.0f...0.0f) 범위에 있는 균등한 간격으로 있는 부동 소수점 값에 대한 정수 표현들의 세트, 및 또한 (0.0f...1.0f) 범위에 있는 숫자들에 대한 상보적 표현들의 세트가 얻어진다.
앞서 기술한 바와 같이, SIMD 기술은 레지스터 내의 비트들을 다수의 고정/크기 데이터 요소 - 각각이 개별적인 값을 나타냄 - 로 논리적으로 분할할 수 있는 프로세서에 특히 적합하다. 이 유형의 데이터는 압축 데이터 유형 또는 벡터 데이터 유형이라고 하고, 이 데이터 유형의 피연산자는 압축 데이터 피연산자 또는 벡터 피연산자라고 한다. 통상적으로, 벡터 피연산자의 데이터 요소는 동일한 데이터 유형이고; 주어진 데이터 요소의 데이터 유형은 데이터 요소 데이터 유형이라고 한다. 모든 데이터 요소의 데이터 요소 데이터 유형이 동일한 경우, 벡터 피연산자는 그 데이터 유형이라고 할 수 있다 (예컨대, 벡터 피연산자의 모든 데이터 요소가 32-비트 부동 소수점 데이터 요소 데이터 유형인 경우, 벡터 피연산자는 32-비트 부동 소수점 벡터 피연산자라고 할 수 있다).
단일 값 데이터 요소 데이터 유형 및 다중 값 데이터 요소 데이터 유형을 지원하는 본 발명의 실시예가 기술되어 있다. 단일 값 데이터 요소 데이터 유형은 각각의 데이터 요소에 단일 값을 저장하고; 본 발명의 일부 실시예에서 사용되는 단일 값 데이터 요소 데이터 유형의 예는 32-비트 부동 소수점, 64-비트 부동 소수점, 32-비트 부호없는 정수(unsigned integer), 64-비트 부호없는 정수, 32-비트 부호있는 정수(signed integer), 및 64-비트 부호있는 정수이다. 다중 값 데이터 요소 데이터 유형은 각각의 데이터 요소 위치에 패킷을 저장하고 - 패킷 안에 다수의 값이 포함되어 있음 -; 본 발명의 일부 실시예에서 사용되는 다중 값 데이터 요소 데이터 유형의 예는 이하에서 기술되는 패킷 그래픽 데이터 요소 데이터 유형이다:
UNORM10A10B10C2D: 3개의 UNORM10 값 및 1개의 UNORM2 값의 32-비트 패킷, 32b 필드의 최상위 비트에 위치하는 마지막 2b(10b) 필드로 시작한다(예컨대, unorm2D [31-30] float 10C [29-20] float 10B [20-10] float 10A [9-0], 여기서 D-A는 슬롯 위치를 나타내고, 선행하는 이름/숫자는 형식을 나타냄).
FLOAT11A11B10C: 2개의 FLOAT11 값 및 1개의 FLOAT10 값의 32-비트 패킷, 상위 비트에 위치하는 마지막 것으로 시작한다(예컨대, float 10C [31-22] float 11B [21-11] float 11A [10-0]).
유의할 점은, 상기 다중 값 데이터 요소 데이터 유형의 패킷에서의 상이한 값들은 상이한 수의 비트로 표현되어 있지만, 대안의 실시예가 상이한 구성을 가질 수 있다(예컨대, 보다 많은 값들이 상이한 수의 비트로 표현됨, 모든 값들이 동일한 수의 비트로 표현됨)는 것이다.
단일 값 데이터 요소 데이터 유형 및 다중 값 데이터 요소 데이터 유형 둘 다를 지원하는 실시예가 기술되어 있지만, 대안의 실시예는 한쪽 또는 다른쪽을 지원할 수 있다. 그에 부가하여, 특정의 데이터 유형을 이용하는 본 발명의 실시예가 기술되어 있지만, 본 발명의 대안의 실시예는 보다 많은, 보다 적은, 또는 상이한 데이터 유형을 이용할 수 있다.
데이터 변환 필드 표 - 도 8a 및 도 8b
도 8a 및 도 8b는 본 발명의 실시예에 따른, 데이터 변환 필드에 의해 지정될 수 있는 가능한 데이터 변환 연산들의 그룹을 나타낸 표이다. 양쪽 표에서의 제1 열은 데이터 변환 필드(254B)의 내용의 가능한 값을 나타내고 있고; 제2 열은 기능을 나타내고 있으며, 제3 열은 사용법을 나타내고 있다.
데이터 요소 크기 필드 = 64 비트 - 도 8a
도 8a는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트일 때 데이터 변환 필드에 의해 지정될 수 있는 가능한 데이터 변환 연산들의 그룹을 나타낸 표이다. 이 표는 64-비트 레지스터 SwizzUpConv 뒤섞기 프리미티브(swizzle primitive)라고 하며, 블록(418)을 나타낸 것이다. 표기법: dcba는 소스에서의 1개의 256-비트 블록을 형성하는 64-비트 요소를 나타내고('a' 최하위 및 'd' 최상위), 따라서 aaaa는 소스에서의 256-비트 블록의 최하위 요소가 목적지에서의 동일한 256-비트 블록의 4개의 요소 모두에 복제된다는 것을 의미하고; 소스 및 목적지에서 2개의 256-비트 블록에 대해 도시된 패턴이 이어서 반복된다. 표기법 'hgfe dcba'는 전체 소스 레지스터(full source register)를 나타내는 데 사용되고, 여기서 'a'는 최하위 요소이고 'h'는 최상위 요소이다. 그렇지만, 각각의 256-비트 블록이 레지스터 뒤섞기를 위해 동일한 치환(permutation)을 수행하기 때문에, 최하위 블록만이 예시되어 있다.
데이터 요소 크기 필드 = 32 비트 - 도 8b
도 8b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트일 때 데이터 변환 필드에 의해 지정될 수 있는 가능한 데이터 변환 연산들의 그룹을 나타낸 표이다. 이 표는 32-비트 레지스터 SwizzUpConv 뒤섞기 프리미티브라고 하며, 블록(420)을 나타낸 것이다. 표기법: dcba는 소스에서의 1개의 128-비트 블록을 형성하는 32-비트 요소를 나타내고('a' 최하위 및 'd' 최상위), 따라서 aaaa는 소스에서의 128-비트 블록의 최하위 요소가 목적지에서의 동일한 128-비트 블록의 4개의 요소 모두에 복제된다는 것을 의미하고; 소스 및 목적지에서 4개의 128-비트 블록 모두에 대해 도시된 패턴이 이어서 반복된다. 'ponm lkji hgfe dcba'라는 표현은 소스 레지스터를 나타내는 데 사용되고, 여기서 'a'는 최하위 요소이고 'p'는 최상위 요소이다. 그렇지만, 각각의 128-비트 블록이 레지스터 뒤섞기를 위해 동일한 치환을 수행하기 때문에, 최하위 블록만이 도시되어 있다.
도 8b는 도 8a 및 도 8b에 도시된 연산들 모두의 의미를 추가로 예시하기 위해 2개의 예시적인 연산을 호출한다: 도 9에 예시되어 있는 외적 뒤섞기(815) 및 도 10a에 예시되어 있는 4-요소 패킷(820)를 통한 요소의 브로드캐스트.
예시적인 뒤섞기 연산 - 도 9
도 9는 본 발명의 실시예에 따른, 외적 뒤섞기(815)를 나타낸 블록도이다. 도 9는 둘 다 512 비트 폭이고 연속적인 128개 블록(패킷 위치 3 내지 패킷 위치 0이라고 함)으로 분해되는 소스 피연산자(900) 및 목적지 피연산자(910)를 나타낸 것이고, 여기서 각각의 블록은 4개의 32 비트 데이터 요소로 분해된다[예컨대, 소스 피연산자(900)에서의 패킷 위치 0의 내용은 D0 C0 B0 A0인 반면, 목적지 피연산자(910)에서의 패킷 위치 0의 내용은 D0 A0 C0 B0임].
예시적인 브로드캐스트 연산 - 도 10a 내지 도 10c
도 10a는 본 발명의 실시예에 따른, 4-요소 패킷(820)을 통한 요소의 브로드캐스트를 나타낸 블록도이다. 도 10a는 둘 다 512 비트 폭이고 연속적인 128개 블록(패킷 위치 3 내지 패킷 위치 0이라고 함)으로 분해되는 소스 피연산자(1000) 및 목적지 피연산자(1010)를 나타낸 것이고, 여기서 각각의 블록은 4개의 32 비트 데이터 요소로 분해된다[예컨대, 소스 피연산자(1000)에서의 패킷 위치 0의 내용은 D0 C0 B0 A0인 반면, 목적지 피연산자(1010)에서의 패킷 위치 0의 내용은 A0 A0 A0 A0이고; 소스 피연산자(1000)에서의 패킷 위치 1의 내용은 D1 C1 B1 A1인 반면, 목적지 피연산자(1010)에서의 패킷 위치 1의 내용은 A1 A1 A1 A1임].
도 10a는 메모리 액세스 없음 연산에 대한 예시적인 브로드캐스트인 반면, 도 10b 및 도 10c는 메모리 액세스 연산에 대한 예시적인 브로드캐스트이다. 소스 메모리 피연산자가 총수보다 적은 수의 요소를 포함하고 있을 때, 유효 소스 피연산자의 요소들의 전체 수(32-비트 명령어에 대해 16, 64-비트 명령어에 대해 8)를 형성하기 위해 소스 메모리 피연산자가 브로드캐스트(반복)될 수 있다. 이 유형의 브로드캐스트 연산은 도 12a 내지 도 12d에서 언급되고 있다. 2가지 브로드캐스트 입도가 있다:
소스 메모리 피연산자의 1개의 요소가 (32-비트 명령어에 대해) 전체 16-요소 유효 소스 피연산자를 형성하기 위해 16회 또는 (64-비트 명령어에 대해) 전체 8-요소 유효 소스 피연산자를 형성하기 위해 8회 브로드캐스트되는 1-요소 입도. 도 10b는 본 발명의 실시예에 따른, 32 비트 데이터 요소 폭에 대한 1-요소 입도의 브로드캐스트를 나타낸 블록도이다. 연산의 한 예가 도 12b에서 1210으로 표시되어 있다. 도 10b는 1개의 32 비트 데이터 요소(A0)를 가지는 메모리로부터 오는 소스 피연산자(1020) 및 512 비트 폭이고 16개의 32 비트 데이터 요소를 포함하는 목적지 피연산자(1030)[목적지 피연산자(1030)에서 모든 데이터 요소가 A0임]를 나타내고 있다. 1-요소 브로드캐스트는 벡터 소스와 스칼라 소스가 섞여 있는 명령어에 대해 유용하고, 여기서 소스들 중 하나는 상이한 연산들에 걸쳐 공통이다.
소스 메모리 피연산자의 4개의 요소가 (32-비트 명령어에 대해) 전체 16-요소 유효 소스 피연산자를 형성하기 위해 4회 또는 (64-비트 명령어에 대해) 전체 8-요소 유효 소스 피연산자를 형성하기 위해 2회 브로드캐스트되는 4-요소 입도. 도 10c는 본 발명의 실시예에 따른, 32 비트 데이터 요소에 대한 4-요소 입도의 브로드캐스트를 나타낸 블록도이다. 연산의 한 예가 도 12b에서 1220으로 표시되어 있다. 도 10c는 4개의 32 비트 데이터 요소(D0 C0 B0 A0)를 가지는 메모리로부터 오는 소스 피연산자(1040), 및 512 비트 폭이고 연속적인 128개 블록(패킷 위치 3 내지 패킷 위치 0이라고 함)으로 분해되는 목적지 피연산자(1050)를 나타낸 것이고, 여기서 각각의 블록은 4개의 32 비트 데이터 요소로 분해된다[예컨대, 목적지 피연산자(1050)의 패킷 위치 3 내지 패킷 위치 0 각각에서의 내용은 D0 C0 B0 A0임]. 4to16 브로드캐스트는 AOS(array of structures) 소스 코드에 아주 유용하고, 여기서 (컬러 성분 RGBA와 같이) 압축된 값들의 어레이에 대해 계산이 수행되고; 이 경우에, 벡터 명령어의 상이한 연산들에 걸쳐 사용되는 공통의 패킷이 있을 때 4to16은 유익하다(16-요소 벡터는 각각 4개의 요소로 된 4개의 패킷의 어레이로 간주됨).
베이스 연산 필드 표 - 도 11a 및 도 11b
연산코드 맵 필드 - 도 11a
도 11a는 본 발명의 실시예에 따른, 연산코드 맵 필드에 의해 지정될 수 있는 가능한 연산코드 맵의 그룹을 나타낸 표이다. 제1 열은 연산코드 맵 필드(315)의 내용의 가능한 값들을 나타내고; 제2 열은 암시된 선두 연산코드 바이트를 나타내며, 제3 열은 즉치가 존재할 수 있는지를 나타낸다.
프리픽스 인코딩 필드 - 도 11b
도 11b는 본 발명의 실시예에 따른, 연산코드 맵 필드에 의해 지정될 수 있는 가능한 프리픽스 인코딩의 그룹을 나타낸 표이다. 제1 열은 프리픽스 인코딩 필드(325)의 내용의 가능한 값들을 나타내고; 제2 열은 그 프리픽스의 의미를 나타낸다.
데이터 조작 필드 표 - 도 12 내지 도 15
도 12 내지 도 15는, 본 발명의 실시예에 따른, 데이터 조작 필드(254C) 및 브로드캐스트 필드(257B)(도 12a 내지 도 12d의 경우)에 의해, 각각, 지정될 수 있는 가능한 데이터 조작 연산 및 브로드캐스트 연산의 그룹들을 나타낸 표이다. 표에서의 제1 열은 데이터 조작 필드(254C)의 내용의 가능한 값들을 나타내고; 제2 열은 기능을 나타내며, 제3 열은 사용법을 나타내고 있다.
Load/OP에 대한 데이터 조작 필드 표 - 도 12a 내지 도 12d
도 12a 내지 도 12d는, 본 발명의 실시예에 따른, load/op 명령어에 대해 데이터 조작 필드(254C) 및 브로드캐스트 필드(257B)에 의해, 각각, 지정될 수 있는 가능한 데이터 조작 연산 및 브로드캐스트 연산의 그룹들을 나타낸 표이다. 도 3a 내지 도 3d에서의 예시적인 특정의 벡터 친숙형 명령어 형식의 경우에, 데이터 조작 필드(254C)는 3 비트 필드이고, 브로드캐스트 필드(257B)는 1 비트 필드이다. 예시된 실시예에서, 브로드캐스트 필드(257B)의 내용은 도 12a 내지 도 12d에 나오는 표에서의 처음 2개의 행 중에서 선택을 하는데; 환언하면, 그의 내용은 데이터 조작 필드(254C)에서의 000 및 001에 해당하는 것 중에서 선택을 한다. 이것은 도 12a 내지 도 12d에서 표의 처음 2개의 행만을 포함하는 괄호를 사용하여 나타내어져 있다.
Load/OP 정수 및 데이터 요소 크기 필드 = 64 비트 - 도 12a
도 12a는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 load/op int에 대해 데이터 조작 필드(254C) 및 브로드캐스트 필드(257B)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 64-비트 정수 Load-op SwizzUpConvi64 (쿼드워드) 뒤섞기/변환 프리미티브라고 하고, 블록(444A) 및 블록(444B)을 나타낸 것이다.
Load/OP 정수 및 데이터 요소 크기 필드 = 32 비트 - 도 12b
도 12b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load/op int에 대해 데이터 조작 필드(254C) 및 브로드캐스트 필드(257B)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 32-비트 정수 Load-op SwizzUpConvi32 뒤섞기/변환 프리미티브라고 하고, 블록(446A) 및 블록(446B)을 나타낸 것이다.
Load/OP 부동 소수점 및 데이터 요소 크기 필드 = 64 비트 - 도 12c
도 12c는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 load/op fp에 대해 데이터 조작 필드(254C) 및 브로드캐스트 필드(257B)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 64-비트 부동 소수점 Load-op SwizzUpConvf64 뒤섞기/변환 프리미티브라고 하고, 블록(450A) 및 블록(450B)을 나타낸 것이다.
Load/OP 부동 소수점 및 데이터 요소 크기 필드 = 32 비트 - 도 12d
도 12d는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load/op fp에 대해 데이터 조작 필드(254C) 및 브로드캐스트 필드(257B)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 32-비트 부동 소수점 Load-op SwizzUpConvf32 뒤섞기/변환 프리미티브라고 하고, 블록(452A) 및 블록(452B)을 나타낸 것이다.
Load에 대한 데이터 조작 필드 표 - 도 13a 내지 도 13d
도 13a 내지 도 13d는 본 발명의 실시예에 따른, load 명령어에 대한 데이터 조작 필드에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다.
Load 정수 및 데이터 요소 크기 필드 = 64 비트 - 도 13a
도 13a는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 load int에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 UpConvi64라고 하고, 블록(456)을 나타낸 것이다.
Load 정수 및 데이터 요소 크기 필드 = 32 비트 - 도 13b
도 13b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load int에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 UpConvi32라고 하고, 블록(458)을 나타낸 것이다.
Load 부동 소수점 및 데이터 요소 크기 필드 = 64 비트 - 도 13c
도 13c는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 load fp에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 UpConvf64라고 하고, 블록(462)을 나타낸 것이다.
Load 부동 소수점 및 데이터 요소 크기 필드 = 32 비트 - 도 13d
도 13d는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load fp에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 UpConvf32라고 하고, 블록(464)을 나타낸 것이다.
부가의 요점
도 13a 내지 도 13d(load/op 표) 각각에서 지정되는 가능한 데이터 조작 연산들의 그룹은 대응하는 도 12a 내지 도 12d(load 표)의 그룹의 서브셋이다. 구체적으로는, 서브셋은 브로드캐스트 연산을 포함하고 있지 않다. 이러한 이유는 전체 연산코드 필드(274) 내의 특정의 값[예컨대, 개더(gather) 또는 브로드캐스트 연산을 지정하는 값]이 데이터 조작 필드(254C)에 지정된 브로드캐스트와 함께 사용될 수 없고, 따라서 전체 연산코드 필드(274) 내의 이러한 값이 도 12a 내지 도 12d(load 표)의 로드에서만 사용될 수 있기 때문이다. 보다 구체적인 예로서, 브로드캐스트 연산을 지정하는 전체 연산코드 필드(274) 내의 값이 있는 경우, 데이터 조작 필드(254C)도 역시 브로드캐스트 연산을 나타낼 수 없다. 본 발명의 특정 실시예가 개별적인 load/op 및 load 표에 개별적인 load/op 및 load 연산을 포함하고 있지만, 대안의 실시예는 이 시행 메커니즘을 가질 필요가 없다 (예컨대, load/op만을 지원할 수 있고, load만을 지원할 수 있으며, 전체 연산코드 필드(274) 내의 브로드캐스트가 데이터 조작 필드(254C) 내의 브로드캐스트를 무시하게 하는 것으로 결정할 수 있다).
Store에 대한 데이터 조작 필드 표 - 도 14a 내지 도 14d
도 14a 내지 도 14d는 본 발명의 실시예에 따른, store 명령어에 대한 데이터 조작 필드에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다.
Store 정수 및 데이터 요소 크기 필드 = 64 비트 - 도 14a
도 14a는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 store int에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 DownConvi64라고 하고, 블록(470)을 나타낸 것이다.
Store 정수 및 데이터 요소 크기 필드 = 32 비트 - 도 14b
도 14b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 store int에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 DownConvi32라고 하고, 블록(472)을 나타낸 것이다.
Store 부동 소수점 및 데이터 요소 크기 필드 = 64 비트 - 도 14c
도 14c는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 store fp에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 DownConvf64라고 하고, 블록(476)을 나타낸 것이다.
Store 부동 소수점 및 데이터 요소 크기 필드 = 32 비트 - 도 14d
도 14d는 본 발명의 실시예에 따른, 데이터 요소 폭이 64 비트인 경우 store fp에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 DownConvf32라고 하고, 블록(478)을 나타낸 것이다.
그래픽 데이터 유형에 대한 데이터 조작 필드 표 - 도 15a 내지 도 15c
도 15a 내지 도 15c는 본 발명의 실시예에 따른, 그래픽 데이터 유형에 대해 연산을 하는 명령어에 대한 데이터 조작 필드에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다.
Load Graphics - 도 15a
도 15a는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load graphics에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 UpConvg32라고 하고, 블록(480)을 나타낸 것이다.
Load Packed Graphics - 도 15b
도 15b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 load packed graphics에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 UpConvpg32라고 하고, 블록(482)을 나타낸 것이다.
Store Graphics - 도 15c
도 15c는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 store graphics에 대해 데이터 조작 필드(254C)에 의해 지정될 수 있는 가능한 데이터 조작 연산들의 그룹을 나타낸 표이다. 이 표는 UpConvg32라고 하고, 블록(484)을 나타낸 것이다.
기입 마스크 필드 - 도 16a 내지 도 16d
도 16a 및 도 16b는 본 발명의 실시예에 따른, 상이한 기입 마스크로 수행되는 2개의 병합 연산을 나타낸 것이며, 제2 소스 및 목적지는 동일하다. 도 16a는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 그리고 제2 소스 및 목적지가 동일한 경우, 기입 마스크 레지스터 K1에서의 기입 마스크를 사용하여 병합하는 예시적인 연산(1600)을 나타낸 블록도이다. 도 16a는 소스 피연산자(1605); 소스/목적지 피연산자(1610); 마스크 레지스터 K1의 내용(1615)(하위 16 비트는 1과 0이 혼합된 것을 포함함); 및 목적지 피연산자(1620)를 나타내고 있다. 마스크 레지스터 K1에서의 하위 16 비트 위치들 각각은 데이터 요소 위치들 중 하나에 대응한다[K1 [0]는 데이터 요소 위치 0에 대응하고, K1 [1]은 데이터 요소 위치 1에 대응하며, 기타 등등]. 목적지 피연산자(1620)에서의 각각의 데이터 요소 위치에 대해, 그 위치는, 마스크 레지스터 K1에서의 대응하는 비트 위치가 0인지 1인지에 따라, 각각, 소스/목적지(1610)에서의 그 데이터 요소 위치의 내용 또는 연산[가산(add)으로 예시되어 있음]의 결과를 포함한다. 다른 실시예에서, 소스/목적지 피연산자(1610)는 제2 소스 피연산자로 대체된다. 그 실시예에서, 목적지 피연산자(1620)는 마스크 레지스터 K1의 대응하는 비트 위치가 0인 데이터 요소 위치들의 내용에서의 연산 이전으로부터의 목적지 피연산자(1620)의 내용(있는 경우)을 포함하고 마스크 레지스터 K1의 대응하는 비트 위치가 1인 데이터 요소 위치들의 내용에서의 연산의 결과(있는 경우)를 포함하고 있다.
앞서 기술한 바와 같이, 본 발명의 일 실시예는 마스킹이 수행되어서는 안된다는 것을 나타내기 위해 K0를 사용한다. 도 16b는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 그리고 제2 소스 및 목적지가 동일한 경우, 모두가 1인 하드와이어된 마스크(하드와이어된 마스크는 기입 마스크 K0를 지정하는 명령어에 의해 사용됨)를 사용하여 병합하는 예시적인 연산(1625)을 나타낸 블록도이다. 도 16b는, K1(1615)이 하드와이어된 마스크(1630)로 대체되고 목적지 피연산자(1620)가 목적지 피연산자(1635)로 대체되는 것을 제외하고는, 도 16a와 동일하다. 하드와이어된 마스크(1630)는 모두가 1이고, 따라서 목적지 피연산자(1635)는 연산의 결과를 나타내는 데이터 요소를 포함하고 있다.
도 16c는 본 발명의 실시예에 따른, 기입 마스크 레지스터에서의 비트와 8, 16, 32, 및 64 비트 데이터 요소 폭에 대한 512 비트 벡터의 데이터 요소 위치 간의 대응 관계를 나타낸 블록도이다. 구체적으로는, 64 비트 레지스터 KN(1640)이 예시되어 있고, 여기서 데이터 요소 폭이 8 비트일 때 64 비트 전부가 사용되고, 데이터 요소 폭이 16 비트일 때 최하위 32 비트만이 사용되며, 데이터 요소 폭이 32 비트일 때 최하위 16 비트만이 사용되고, 데이터 요소 폭이 64 비트일 때 최하위 8 비트만이 사용된다. 256 비트 벡터의 경우, 데이터 요소 폭이 8 비트일 때 최하위 32 비트만이 사용되고, 데이터 요소 폭이 16 비트일 때 최하위 16 비트만이 사용되며, 데이터 요소 폭이 32 비트일 때 최하위 8 비트만이 사용되고, 데이터 요소 폭이 64 비트일 때 최하위 4 비트만이 사용된다. 128 비트 벡터의 경우, 데이터 요소 폭이 8 비트일 때 최하위 16 비트만이 사용되고, 데이터 요소 폭이 16 비트일 때 최하위 8 비트만이 사용되며, 데이터 요소 폭이 32 비트일 때 최하위 2 비트만이 사용되고, 데이터 요소 폭이 64 비트일 때 최하위 2 비트만이 사용된다.
주어진 마스크 레지스터의 값이 벡터 비교 명령어의 직접 결과로서 설정되거나, GP 레지스터로부터 전달되거나, 2개의 마스크 사이의 논리 연산의 직접 결과로서 계산될 수 있다.
도 16d는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 그리고 제2 소스 및 목적지가 상이한 경우, 기입 마스크 레지스터 K1에서의 기입 마스크를 사용하여 병합하는 예시적인 연산(1660)을 나타낸 블록도이다.
도 16e는 본 발명의 실시예에 따른, 데이터 요소 폭이 32 비트인 경우 그리고 제2 소스 및 목적지가 상이한 경우, 기입 마스크 레지스터 K1에서의 기입 마스크를 사용하여 제로화하는 예시적인 연산(1666)을 나타낸 블록도이다. 제로화 연산이 목적지가 소스와 상이한 연산에 대해서만 예시되어 있지만, 제2 소스와 목적지가 동일한 경우에도 제로화가 동작한다.
예시적인 템플릿 및 명령어 - 도 17 및 도 18
이하의 표기법은 도 17 및 도 18에 대한 소개로서 제공되어 있다.
피연산자 표기법
Figure 112013099545752-pct00008
벡터 피연산자 값 표기법
Figure 112013099545752-pct00009
SwizzUpConv, FullUpConv 및 DownConv 함수 규약
Figure 112013099545752-pct00010
EVEX . U0 에 대한 예시적인 명령어 인코딩 - 도 17a 내지 도 17d
도 17a는 본 발명의 실시예에 따른, 예시적인 특정의 벡터 친숙형 명령어 형식으로부터의 필드들의 서브셋을 나타낸 것이다. 구체적으로는, 도 17a는 EVEX 프리픽스(302), 실제 연산코드 필드(330), 및 MOD R/M 필드(340)를 나타내고 있다. 이 실시예에서, 형식 필드(240)는 명령어 형식이 벡터 친숙형 명령어 형식이라는 것을 나타내기 위해 0x62를 포함하고 있다.
도 17b 내지 도 17d 각각은 본 발명의 실시예에 따른, 도 17a의 특정의 벡터 친숙형 명령어 형식으로 인코딩된 예시적인 특정의 벡터 친숙형 명령어로부터의 필드들의 서브셋을 나타낸 것이다. 도 17b 내지 도 17d의 설명에서, VADDPS 명령어의 다양한 예시적인 구성에 대한 그 필드들의 가능한 인코딩을 설명하기 위해 일부 필드들의 구체적인 사용이 기술되어 있다. 도 17b 내지 도 17d 각각에서, 형식 필드(240)는 명령어가 벡터 친숙형 명령어 형식으로 인코딩되어 있다는 것을 나타내기 위해 0x62를 포함하고 있고, 실제 연산코드 필드(330)는 VADDPS 연산코드를 포함하고 있다. 도 17b 내지 도 17d 각각은 본 발명의 실시예에 따른, EVEX.U0 클래스에서의 VADDPS 명령어의 인코딩을 나타낸 것이고; 도 17b 및 도 17c는 메모리 액세스 없음(205) 명령어 템플릿으로 된 VADDPS의 EXEV.U0 인코딩을 나타낸 것인 반면, 도 17d는 메모리 액세스(220) 명령어 템플릿으로 된 VADDPS의 EVEX.U0 인코딩을 나타낸 것이다. VADDPS 명령어는 제1 레지스터 또는 메모리 피연산자(예컨대, zmm3)로부터의 압축 단정도 부동 소수점 값(packed single-prevision floating-point values)을 제2 레지스터(예컨대, zmm2)에 가산하고 기입 마스크(예컨대, k1)에 따라 결과를 제3 레지스터(예컨대, zmm1)에 저장한다. 이 명령어는 명령어의 인코딩에 따라 다양한 반올림 연산, 데이터 변환 연산, 또는 데이터 조작 연산을 가능하게 해준다. 이 명령어는 이하의 명령어 니모닉(instruction mnemonic)에 의해 기술될 수 있다: EVEX.U0.NDS.512.0F 58 /r VADDPS zmm1 {k1}, zmm2, Sf32(zmm3/mV) {eh}.
도 17b는 메모리 액세스 없음, 전체 반올림 제어 유형 연산(210) 명령어 템플릿으로 된 VADDPS 명령어의 인코딩을 나타낸 것이다. 데이터 요소 폭 필드(264)는 32 비트 데이터 요소 폭을 나타내기 위해 0이다. 클래스 필드(268)(즉, EVEX.U)는 EVEX.U0 클래스를 나타내기 위해 0으로 설정되어 있다. 알파 필드(252)는 RS 필드(252A)(즉, EVEX.rs)로서 해석되고, 반올림 제어 유형 연산을 선택하기 위해 1[즉, RS 필드(252A.1)]로 설정되어 있다. 알파 필드(252)가 RS 필드(252A.1)로서 역할하고 있기 때문에, 베타 필드(254)는 반올림 연산 필드(258)(즉, EVEX.r2-0)로서 해석된다. 구체적으로는, EVEX.r2는 SAE 필드(256)로서 해석되는 반면, EVEX.r1-0은 반올림 제어 필드(254A)로서 역할한다. 수정자 필드(246)[즉, MODR/M.MOD(342)]는 메모리 액세스 없음을 나타내기 위해 11로 설정되어 있다(즉, 레지스터 zmm3은 메모리 피연산자 대신에 제1 소스 피연산자이다).
도 17c는 메모리 액세스 없음, 데이터 변환 유형 연산(215) 명령어 템플릿으로 된 VADDPS 명령어의 인코딩을 나타낸 것이다. 도 17c의 인코딩은, 알파 필드(252) 및 베타 필드(254)를 제외하고는, 도 17b와 동일하다. 알파 필드(252)는 RS 필드(252A)(즉, EVEX.rs)로서 해석되고, 데이터 변환 유형 연산을 선택하기 위해 0[즉, RS 필드(252A.2)]로 설정되어 있다. 알파 필드(252)가 RS 필드(252A.2)로서 역할하고 있기 때문에, 베타 필드(254)는 데이터 변환 필드(254B)(즉, EVEX.s2-0)로서 해석된다.
도 17d는 메모리 액세스(220) 명령어 템플릿으로 된 VADDPS 명령어의 인코딩을 나타낸 것이다. 데이터 요소 폭 필드(264)는 32 비트 데이터 요소 폭을 나타내기 위해 0이다. 클래스 필드(268)(즉, EVEX.U)는 EVEX.U0 클래스를 나타내기 위해 0으로 설정되어 있다. 알파 필드(252)는 축출 힌트 필드(252B)(즉, EVEX.EH)로서 해석된다. 베타 필드(254)는 데이터 조작 필드(254C)(즉, EVEX.s2 -0)로서 해석된다. 수정자 필드(246)[즉, MODR/M.MOD(342)]는 제1 소스 피연산자가 메모리 피연산자라는 것을 나타내기 위해 00, 01 또는 10으로 설정되고 있고; 이것은 도 17d에서
Figure 112013099545752-pct00011
[즉, 11을 제외한 임의의 입력)로서 도시되어 있다.
EVEX . U1 에 대한 예시적인 명령어 인코딩 - 도 18a 내지 도 18f
도 18a는 본 발명의 실시예에 따른, 예시적인 특정의 벡터 친숙형 명령어 형식으로부터의 필드들의 서브셋을 나타낸 것이다. 구체적으로는, 도 18a는 EVEX 프리픽스(302), 실제 연산코드 필드(330), 및 MOD R/M 필드(340)를 나타내고 있다. 이 실시예에서, 형식 필드(240)는 명령어 형식이 벡터 친숙형 명령어 형식이라는 것을 나타내기 위해 0x62를 포함하고 있다.
도 18b 내지 도 18f 각각은 본 발명의 실시예에 따른, 도 18a의 특정의 벡터 친숙형 명령어 형식으로 인코딩된 예시적인 특정의 벡터 친숙형 명령어로부터의 필드들의 서브셋을 나타낸 것이다. 도 18b 내지 도 18f의 설명에서, VADDPS 명령어의 다양한 예시적인 구성에 대한 그 필드들의 가능한 인코딩을 설명하기 위해 일부 필드들의 구체적인 사용이 기술되어 있다. 도 18b 내지 도 18f 각각에서, 형식 필드(240)는 명령어가 벡터 친숙형 명령어 형식으로 인코딩되어 있다는 것을 나타내기 위해 0x62를 포함하고 있고, 실제 연산코드 필드(330)는 VADDPS 연산코드를 포함하고 있다. 도 18b 내지 도 18f 각각은 본 발명의 실시예에 따른, EVEX.U1 클래스에서의 VADDPS 명령어의 인코딩을 나타낸 것이고; 도 18b 내지 도 18e 각각은 메모리 액세스 없음(205) 명령어 템플릿으로 된 VADDPS의 EXEV.U1 인코딩을 나타낸 것인 반면, 도 18f는 메모리 액세스(220) 명령어 템플릿으로 된 VADDPS의 EVEX.U1 인코딩을 나타낸 것이다.
도 18b는 메모리 액세스 없음, 기입 마스크 제어, 부분 반올림 제어 유형 연산(212) 명령어 템플릿으로 된 VADDPS 명령어의 인코딩을 나타낸 것이다. 데이터 요소 폭 필드(264)는 32 비트 데이터 요소 폭을 나타내기 위해 0이다. 클래스 필드(268)(즉, EVEX.U)는 EVEX.U1 클래스를 나타내기 위해 1로 설정되어 있다. 알파 필드(252)는 (병합 또는 제로화 기입 마스크 중에서 선택하는) 기입 마스크 제어 필드(252C)로서 해석된다. 베타 필드(254)의 최하위 비트는 RL 필드(257A)로서 해석되고, 부분 반올림 유형 연산[즉, 반올림(257A.1)]을 나타내기 위해 1로 설정되어 있다. 베타 필드(254)의 최상위 2 비트는 반올림 연산 필드(259A)로서 해석된다. 수정자 필드(246)[즉, MODR/M.MOD(342)]는 메모리 액세스 없음을 나타내기 위해 11로 설정되어 있다(즉, 레지스터 zmm3은 메모리 피연산자 대신에 제1 소스 피연산자이다). 이 인코딩에서, VADDPS 명령어는 제1 레지스터(예컨대, zmm3)로부터의 압축 단정도 부동 소수점 값(packed single-precision floating-point value)을 제2 레지스터(예컨대, zmm2)에 가산하고 기입 마스크(예컨대, k1)에 따라 반올림된 결과를 제3 레지스터(예컨대, zmm1)에 저장한다. 이것은 이하의 니모닉에 의해 기술될 수 있다: 제로화-기입 마스킹에 대한 EVEX.U1.NDS.512.0F.W0 58 /r VADDPS zmm1 {k1} {z}, zmm2, zmm3 {er} 및 병합-기입 마스킹에 대한 {z}를 갖지 않는 동일한 니모닉. 이 섹션에서 이하에 보여지는 다른 니모닉이 모두 {z}를 포함하지만, {z}를 갖지 않는 동일한 니모닉이 역시 마찬가지로 가능하다는 것을 잘 알 것이다.
도 18c 내지 도 18e 각각은 메모리 액세스 없음, 기입 마스크 제어, VSIZE 유형 연산(217) 명령어 템플릿으로 된 VADDPS 명령어의 인코딩을 나타낸 것이다. 도 18c 내지 도 18e의 인코딩은, 베타 필드를 제외하고는, 도 17b와 동일하다. 도 18c 내지 도 18e 각각에서, 베타 필드(254)의 최하위 비트는 RL 필드(257A)로서 해석되고, VSIZE 유형 연산(257A.2)을 나타내기 위해 0으로 설정되어 있다. 베타 필드(254)의 최상위 2 비트는 벡터 길이 필드(259B)로서 해석된다.
도 18c에서, 벡터 길이 필드(259B)는 512 비트의 벡터 크기를 나타내기 위해 10으로 설정된다. 도 18d에서, 벡터 길이 필드(259B)는 256 비트의 벡터 크기를 나타내기 위해 01로 설정된다. 도 18e에서, 벡터 길이 필드(259B)는 128 비트의 벡터 크기를 나타내기 위해 00으로 설정된다. 이 인코딩에서, VADDPS 명령어는 제1 레지스터(예컨대, zmm3)로부터의 압축 단정도 부동 소수점 값을 제2 레지스터(예컨대, zmm2)에 가산하고 기입 마스크(예컨대, k1)에 따라 결과를 제3 레지스터(예컨대, zmm1)에 저장한다. 도 18c는 이하의 니모닉에 의해 기술될 수 있다: EVEX.U1.NDS.512.0F.W0 58 /r VADDPS zmm1 {k1} {z}, zmm2, zmm3. 도 18d는 이하의 니모닉에 의해 기술될 수 있다: EVEX.U1.NDS.256.0F.W0 58 /r VADDPS ymm1 {k1} {z}, ymm2, ymm3. 도 18e는 이하의 니모닉에 의해 기술될 수 있다: EVEX.U1.NDS.128.0F.W0 58 /r VADDPS xmm1 {k1} {z}, xmm2, xmm3.
도 18f는 메모리 액세스, 기입 마스크 제어(227) 명령어 템플릿으로 된 VADDPS 명령어의 인코딩을 나타낸 것이다. 데이터 요소 폭 필드(264)는 32 비트 데이터 요소 폭을 나타내기 위해 0이다. 클래스 필드(268)(즉, EVEX.U)는 EVEX.U1 클래스를 나타내기 위해 1로 설정되어 있다. 알파 필드(252)는 (병합 또는 제로화 기입 마스크 중에서 선택하는) 기입 마스크 제어 필드(252C)로서 해석된다. 베타 필드(254)의 최하위 비트는 브로드캐스트 필드(257B)로서 해석된다. 베타 필드(254)의 최상위 2 비트는 벡터 길이 필드(259B)로서 해석된다. 수정자 필드(246)[즉, MODR/M.MOD(342)]는 제1 소스 피연산자가 메모리 피연산자라는 것을 나타내기 위해 00, 01 또는 10으로 설정되고 있고; 이것은 도 18f에서
Figure 112013099770000-pct00012
[즉, 11을 제외한 임의의 입력)로서 도시되어 있다. 이 인코딩에서, VADDPS 명령어는 로드 시에 브로드캐스트될 수 있는, 메모리 피연산자로부터의 압축 단정도 부동 소수점 값을 제1 레지스터(예컨대, zmm2)에 가산하고 기입 마스크(예컨대, k1)에 따라 결과를 제2 레지스터(예컨대, zmm1)에 저장한다. 벡터 길이 필드가 512 비트의 벡터를 나타낼 때, 이것은 이하의 니모닉에 의해 기술될 수 있다: EVEX.U1.NDS.512.0F.W0 58 /r VADDPS zmm1 {k1} {z}, zmm2, B32(mV). 벡터 길이 필드가 256 비트의 벡터를 나타낼 때, 이것은 이하의 니모닉에 의해 기술될 수 있다: EVEX.U1.NDS.256.0F.W0 58 /r VADDPS ymm1 {k1} {z}, ymm2, B32(mV). 벡터 길이 필드가 128 비트의 벡터를 나타낼 때, 이것은 이하의 니모닉에 의해 기술될 수 있다: EVEX.U1.NDS.128.0F.W0 58 /r VADDPS xmm1 {k1} {z}, xmm2, B32(mV).
예시적인 Displacement8 *N 값
본 발명의 일 실시예에서, 메모리 액세스 크기 N은, 사용되는 명령어 템플릿 및 이하에서 기술되는 기타 인자들에 따라, 베이스 연산 필드, 데이터 요소 폭 필드, 및 보강 연산 필드 중 2개 이상의 필드의 내용에 기초하여 결정된다. 본 발명의 일 실시예에서, U=0(클래스 A)과 관련하여, 이하의 표들은 메모리에서 액세스되고 있는 벡터(또는 요소)의 크기, 및 이와 유사하게, 압축된 변위(disp8*N)에 대한 변위 인자를 보여주고 있다. 유의할 점은, 일부 명령어가 메모리의 레벨에서 전체 벡터 입도 대신에 요소 입도로 동작하고, 따라서 이하의 표들에서 "요소 레벨" 열을 사용해야만 한다는 것이다. 기능 열의 라벨(예컨대, U/Si64)은 베이스 연산 필드에 의해 지정되는 메모리 액세스 유형(예컨대, U/Si는 load int 및 load/op int를 나타냄) 및 데이터 요소 폭(예컨대, 64는 64 비트 데이터 요소 폭임)을 나타낸다. 이 열에 있는 값들은 도 3의 실시예에서의 데이터 조작 필드(254C)의 가능한 값들이다. 도 4b를 참조하면, 다양한 메모리 액세스 유형은 (어떤 경우에, 데이터 요소 폭 결정을 통해) 그의 데이터 조작 도 12a 내지 도 15c로 흐르는 것으로 도시되어 있고; 다양한 표(12a 내지 15c)는 N의 값의 선택을 수행하고, 따라서 적절한 경우 열 2 및 열 3에 배치된다. 예로서, load/op int 64 비트 데이터 요소 폭 메모리 액세스 연산은 도 12a로 흐르고, 그곳에서 데이터 조작 필드(254C)의 내용은 데이터 조작 연산(도 12a에 나타내어져 있음) 및 N의 값(이하에 나타내어져 있음) 둘 다를 선택하기 위해 사용된다. 다른 예로서, [베이스 연산 필드(242)에서 브로드캐스트를 나타내고 있는] load int 64 비트 데이터 요소 폭 메모리 액세스 연산은 도 13a로 흐르고, 그곳에서 데이터 조작 필드(254C)의 내용은 데이터 조작 연산(브로드캐스트 데이터 변환을 포함하지 않는 도 13a에 나타내어져 있음) 및 N의 값(이하에 나타내어져 있음) 둘 다를 선택하기 위해 사용된다. 이와 같이, 제2 열은 베이스 연산 필드(242)가 브로드캐스트 또는 요소 레벨 메모리 액세스를 지정하지 않는 명령어에 대한 것이고; 제3 열의 제1 하위 열은 베이스 연산 필드(242)가 브로드캐스트를 지정하지만 요소 레벨 메모리 액세스를 지정하지 않는 명령어에 대한 것이며; 제3 열의 제2 하위 열은 베이스 연산 필드(242)가 브로드캐스트 또는 요소 레벨 메모리 액세스를 지정하는 명령어에 대한 것이다.
SwizzleUpConverti64 및 UpConverti64
Figure 112013099545752-pct00013
SwizzleUpConverti32 및 UpConverti32
Figure 112013099545752-pct00014
SwizzleUpConvertf64 및 UpConvertf64
SwizzleUpConvertf32 UpConvertf32
Figure 112013099545752-pct00016
Down Conversioni64
Figure 112013099545752-pct00017
Down Conversioni32
Figure 112013099545752-pct00018
Down Conversionf64
Figure 112013099545752-pct00019
Down Conversionf32
Figure 112013099545752-pct00020
UpConvertg32
Figure 112013099545752-pct00021
UpConvertpg32
Figure 112013099545752-pct00022
Down Conversiong32
Figure 112013099545752-pct00023
본 발명의 일 실시예에서, U=1(클래스 B)과 관련하여, 다양한 명령어는, 상이한 유형의 명령어에 대해, [벡터 길이 필드(259B)의 내용에 의해 결정되는] 벡터 길이, 벡터 연산의 유형 및 브로드캐스트가 수행되는지[베이스 연산 필드(242) 및/또는 브로드캐스트 필드(257B)의 값], 및 [도 4e에 기술된 바와 같이 실제 연산코드 필드(330) 및/또는 데이터 요소 폭 필드(264)의 내용에 의해 결정되는] 데이터 요소 폭에 기초하여 결정되는 메모리 액세스 크기 N과 관련하여 disp8을 사용함으로써 압축된 변위를 사용할 수 있다. 일반적으로, 메모리 액세스 크기 N은 메모리 입력에서의 바이트의 수(예컨대, 전체 512-비트 메모리 벡터에 액세스할 때 64)에 대응한다. 본 발명의 일 실시예에서, 이하의 제1 표는 이하의 제2 표에서 사용되는 용어들의 일부를 설명하며, 이하의 제2 표는 다양한 유형의 명령어에 대한 N의 값을 제공한다. 이하의 표에서의 튜플(Tuple)은 메모리 내의 데이터의 압축된 구조이다.
Figure 112013099545752-pct00024
Figure 112013099545752-pct00025
예약 비트
또한, 본 발명의 일부 실시예에서, 상이한 프로세서 또는 프로세서 내의 상이한 코어는 클래스 A만, 클래스 B만, 또는 양쪽 클래스를 지원할 수 있다.  예를 들어, 범용 컴퓨팅을 목적으로 하는 고성능 범용 비순차 코어는 클래스 B만을 지원할 수 있고, 주로 그래픽 및/또는 과학 (처리율) 컴퓨팅을 목적으로 하는 코어는 클래스 A만을 지원할 수 있으며, 양쪽을 목적으로 하는 코어는 둘 다를 지원할 수 있다(물론, 양쪽 클래스로부터의 템플릿 및 명령어 전부는 아니지만 양쪽 클래스로부터의 템플릿 및 명령어의 어떤 혼합체를 가지는 코어는 본 발명의 범위 내에 속한다).  또한, 단일 프로세서는 다수의 코어를 포함할 수 있고, 이들 모두가 동일한 클래스를 지원하거나 상이한 코어가 상이한 클래스를 지원한다.  예를 들어, 개별적인 그래픽 및 범용 코어를 갖는 프로세서에서, 주로 그래픽 및/또는 과학 컴퓨팅을 목적으로 하는 그래픽 코어들 중 하나는 클래스 A만을 지원할 수 있는 반면, 범용 코어들 중 하나 이상은 클래스 B만을 지원하는 범용 컴퓨팅을 목적으로 하는 고성능 범용 비순차 코어일 수 있다.  개별적인 그래픽 코어를 갖지 않는 다른 프로세서는 클래스 A 및 클래스 B 둘 다를 지원하는 하나 이상의 범용 순차 또는 비순차 코어를 포함할 수 있다.  물론, 본 발명의 다른 실시예에서, 하나의 클래스로부터의 특징이 또한 다른 클래스에서 구현될 수 있다.  상위 레벨 언어로 작성된 프로그램이 하기의 것을 포함하는 각종의 상이한 실행가능 형태로 될 것이다[예컨대, JIT(just in time) 컴파일되거나 정적 컴파일된다]: 1) 실행을 위해 대상 프로세서에 의해 지원되는 클래스(들)의 명령어만을 가지는 형태; 또는 2) 모든 클래스의 명령어의 상이한 조합을 사용하여 작성된 대안의 루틴을 가지며 현재 코드를 실행하고 있는 프로세서에 의해 지원되는 명령어에 기초하여 실행할 루틴을 선택하는 제어 흐름 코드를 가지는 형태.
Figure 112013099545752-pct00026
로드, 브로드캐스트 및 삽입과 관련하여, 본 발명의 일 실시예는 베이스 연산 필드로 상이한 버전의 브로드캐스트를 구현하고, 따라서 브로드캐스트 필드(257B)가 필요하지 않다.  바이트/워드 연산의 경우, 본 발명의 일 실시예는 브로드캐스트 필드(257B)로 브로드캐스트를 지원하지 않는데, 그 이유는 이 특징을 지원하는 하드웨어 비용이 현재 정당화되지 않았기 때문이다.  (한 유형의 로드인) 개더(gather)에 관해서 말하면, 본 발명의 일 실시예는 베이스 연산 필드로 상이한 버전의 브로드캐스트를 구현하고, 따라서 브로드캐스트 필드(257B)가 필요하지 않다.  스캐터(scatter), 추출 및 저장과 관련하여, 일 실시예는 브로드캐스트 필드(257B)로 브로드캐스트를 지원하지 않는데, 그 이유는 이 유형의 명령어가 (메모리 소스가 아니라) 레지스터 소스 및 메모리 목적지를 가지며, 메모리가 소스일 때만 브로드캐스트가 의미있기 때문이다.  개더 명령어의 마스크는 완료 마스크(completion mask)이고; 따라서 병합 기입 마스크 연산이 현재 요망되는 연산이다. 저장, 스캐터 또는 추출에 대해 제로화 기입 마스크를 수행하는 것은 메모리 내의 장소를 제로화할 것이다 - 벡터 저장, 스캐터 또는 추출이 통상적으로 사용되지 않는 연산 -.  비교를 위해, 본 발명의 일 실시예에서, 제로화 기입 마스킹은 자연스럽지 않을 것인데, 그 이유는, 비교 결과가 부정적인 경우(예컨대, 동등 비교의 경우에 비교되는 2개의 요소가 같지 않음), 비교가 이미 0을 기입하며, 따라서 비교 결과가 어떻게 해석되는지를 방해할 수 있기 때문이다.
예시적인 파이프라인 - 도 19 내지 도 22
도 19 내지 도 22는 본 발명의 실시예에 따른, 도 2a에서의 명령어 템플릿의 어느 필드가 4개의 예시적인 프로세서 파이프라인의 상이한 스테이지들에서 이용되는지를 나타낸 블록도이다. 유의할 점은, 요구되는 이해 수준에서, 예시된 파이프라인 스테이지 및 그의 기능이 공지되어 있다는 것이다. 도 19 내지 도 22 각각은 A, B 및 C 도면을 포함하며, 이들 도면 각각은 메모리 액세스 없음, 전체 반올림 제어 유형 연산(210) 명령어 템플릿; 메모리 액세스 없음, 데이터 변환 유형 연산(215) 명령어 템플릿; 및 메모리 액세스(225/230) 명령어 템플릿을 나타내고 있다. 도 19 내지 도 22 각각이 상이한 예시적인 파이프라인을 나타내고 있지만, 각각의 도면 번호에 대한 각각의 a 내지 c 도면에 동일한 파이프라인이 도시되어 있다. 예를 들어, 도 19a는 메모리 액세스 없음, 전체 반올림 제어 유형 연산(210) 명령어 템플릿 및 제1 예시적인 명령어 파이프라인을 나타낸 것이고; 도 19b는 메모리 액세스 없음 데이터 변환 유형 연산(215) 및 도 19a에서와 동일한 예시적인 파이프라인을 나타낸 것인 반면; 도 20a는 메모리 액세스 없음, 전체 반올림 제어 유형 연산(210) 명령어 템플릿 및 제2 예시적인 프로세서 파이프라인을 나타낸 것이다.
도 19 내지 도 22는, 각각, 프로세서 파이프라인(1900), 프로세서 파이프라인(2000), 프로세서 파이프라인(2100), 및 프로세서 파이프라인(2200)을 나타낸 것이다. 파이프라인 스테이지 이름이 상이한 예시적인 파이프라인에 걸쳐 동일한 경우, 이해의 편의를 위해 동일한 참조 번호가 사용되었지만; 이것은 상이한 예시적인 파이프라인에 걸쳐 동일한 이름의 파이프라인 스테이지가 동일하다는 것을 암시하지 않고 단지 그 스테이지가 유사한 연산을 수행한다는 것을 나타낸다(그렇지만 그 스테이지가 보다 많은 또는 보다 적은 하위 연산을 포함할 수 있음).
예시적인 일반 파이프라인 - 도 19
프로세서 파이프라인(1900)은 일반 프로세서 파이프라인을 나타내고, 따라서 페치 스테이지(1910), 디코딩 스테이지(1920), 레지스터 판독/메모리 판독 스테이지(1930), 데이터 변환 스테이지(1940), 실행 스테이지(1950), 및 재기입/메모리 기입 스테이지(1960)를 포함하고 있다.
괄호 및 명령어 템플릿으로부터 프로세서 파이프라인 스테이지로의 화살표선은 상이한 파이프라인 스테이지에 의해 이용되는 필드를 나타낸다. 예를 들어, 도 19a에서, 모든 필드가 디코딩 스테이지(1920)에 의해 이용되고; 레지스터 인덱스 필드(244)는 레지스터 판독/메모리 판독 스테이지(1930)에 의해 이용되며; 베이스 연산 필드(292), rs 필드(252A)[반올림(252A.1)], SAE 필드(256), 반올림 연산 필드(258), 및 데이터 요소 폭 필드(264)는 실행 스테이지(1950)에 의해 이용되고; 데이터 요소 폭 필드(264)는 또한 재기입/메모리 기입 스테이지(1960)에 의해 이용되며; 기입 마스크 필드(270)는 실행 스테이지(1950) 또는 재기입/메모리 기입 스테이지(1960)에 의해 사용된다. [선택적으로 2개의 상이한 스테이지에서 기입 마스크 필드(270)를 사용하는 것은 기입 마스크 필드가 실행 스테이지(1950)에서 마스킹된 데이터 요소에 대한 연산의 실행을 디스에이블할 수 있거나(그에 의해 그 데이터 요소 위치가 기입/메모리 기입 스테이지(1960)에서 갱신되는 것을 방지함), 실행 스테이지(1950)가 연산을 수행할 수 있고, 마스킹된 데이터 요소 위치의 갱신을 방지하기 위해, 기입/메모리 기입 스테이지(1960) 동안 기입 마스크가 적용될 수 있다는 것을 나타낸다].
유의할 점은, 화살표선이 반드시 상이한 필드에 의해 이용되는 유일한 스테이지(들)를 나타내는 것은 아니고 그 필드가 가장 큰 영향을 미치게 가능성이 있는 경우를 나타낸다는 것이다. A 도면과 B 도면 사이에서와 같이, 유의할 점은, 보강 연산 필드(250)가 반올림 연산을 위해 실행 스테이지(1950)에 의해 이용된다는 것; 보강 연산 필드(250)가 데이터 변환 유형 연산을 위해 데이터 변환 스테이지(1940)에 의해 이용된다는 것; 및 데이터 요소 폭 필드(264)로부터 실행 스테이지(1950)로의 선이 데이터 변환 스테이지(1940)로 이동된다는 것이 주된 차이점이라는 것이다. 도 19c는 베이스 연산 필드(242)가 그 대신에 레지스터 판독/메모리 판독 스테이지(1930)로 가는 것; 보강 연산 필드(250)의 EH 필드(252B)가 레지스터 판독/메모리 판독 스테이지(1930)에 의해 이용되는 것; 메모리 판독 연산인지 메모리 기입 연산인지에 따라, 스케일 필드(260), 변위 필드(262A)/변위 인자 필드(262B), 기입 마스크 필드(270), 및 데이터 요소 폭 필드(264)가 선택적으로 레지스터 판독/메모리 판독 스테이지(1930) 또는 재기입/메모리 기입(1960)에 의해 이용되는 것을 나타내고 있다. 파이프라인 스테이지가 즉치 필드(272)를 이용하게 된다는 것이 공지되어 있기 때문에, 본 발명을 모호하게 하지 않기 위해 그 필드에 대한 매핑이 표현되어 있지 않다.
예시적인 순차 파이프라인 - 도 20
프로세서 파이프라인(2000)은 순차 프로세서 파이프라인을 나타내고, 프로세서 파이프라인(1900)과 동일한 이름의 파이프라인 스테이지를 가지지만, 페치 스테이지(1910)와 디코딩 스테이지(1920) 사이에 삽입된 길이 디코딩 스테이지(2012)를 가진다.
도 20a 내지 도 20c에 대한 매핑은 기본적으로 도 19a 내지 도 19c에서의 매핑과 동일하다.
제1 예시적인 비순차 파이프라인 - 도 21
프로세서 파이프라인(2100)은 프로세서 파이프라인(2000)과 동일한 이름의 파이프라인 스테이지를 가지지만, 다음과 같은 것도 역시 가지는 제1 예시적인 비순차 파이프라인을 나타낸다: 1) 디코딩 스테이지(1920)와 레지스터 판독/메모리 판독 스테이지(1930) 사이에 삽입된 할당 스테이지(2122), 이름 변경 스테이지(2124), 및 스케줄링 스테이지(2126); 및 2) 재기입/메모리 기입 스테이지(1960) 이후에 부가된 재정렬 버퍼(rob) 판독 스테이지(2162), 예외 처리 스테이지(2164), 및 커밋 스테이지(2166).
도 21a 내지 도 21c에서, 매핑은 일반적으로 다음과 같은 것을 제외하고는 도 20a 내지 도 20c에서의 매핑과 동일하다: 1) 레지스터 인덱스 필드(244) 및 수정자 필드(246)가 이름 변경 스테이지(2124)에 의해 이용되는 것; 2) 도 21a에서만, 마스킹된 데이터 요소 위치에 대한 예외를 억압하기 위해 기입 마스크 필드(270)가 또한 선택적으로 예외 처리 스테이지(2164)에 의해 사용되는 것; 및 3) 도 21a에서만, 부동 소수점 예외가 억압될 것인지에 따라, SAE 필드(256)가 선택적으로 실행 스테이지(1950) 및 예외 처리 스테이지(2164)에 의해 사용된다.
제2 예시적인 비순차 파이프라인 - 도 22
프로세서 파이프라인(2200)은, 실행/데이터 변환 스테이지(2245)를 형성하기 위해 데이터 변환 및 실행 스테이지가 병합되어 있다는 것을 제외하고는, 프로세서 파이프라인(2100)과 동일한 이름의 프로세서 파이프라인 스테이지를 가지는 제2 예시적인 비순차 파이프라인을 나타낸 것이다.
도 22a 내지 도 22c에서의 매핑은, 데이터 변환 스테이지(1940) 및 실행 스테이지(1950)으로 개별적으로 갔던 매핑이 그 대신에 실행/데이터 변환 스테이지(2245)로 가는 것을 제외하고는, 기본적으로 도 21a 내지 도 21c에서의 매핑과 동일하다.
예시적인 파이프라인 상에서의 클래스 B 명령어 템플릿
이하의 표는 본 발명의 실시예에 따른 도 2b에서의 명령어 템플릿의 필드들을 수용하기 위해 도 19 내지 도 22를 어떻게 수정해야 하는지를 나타내고 있다.
Figure 112013099545752-pct00027
디코딩 스테이지(1920)
각종의 상이한 공지된 디코딩 유닛이 디코딩 스테이지(1920)에서 사용될 수 있을 것이다. 예를 들어, 디코딩 유닛은 각각의 매크로 명령어를 싱글 와이드 마이크로 명령어(single wide micro instruction)로 디코딩할 수 있다. 다른 예로서, 디코딩 유닛은 어떤 매크로 명령어를 싱글 와이드 마이크로 명령어로 디코딩하고, 다른 매크로 명령어를 멀티플 와이드 마이크로 명령어(multiple wide micro instruction)로 디코딩할 수 있다. 비순차 프로세서 파이프라인에 특히 적합한 다른 예로서, 디코딩 유닛은 각각의 매크로 명령어를 하나 이상의 마이크로-연산(micro-op)으로 디코딩할 수 있고, 여기서 각각의 마이크로-연산은 비순차로 발행 및 실행될 수 있다.
또한, 디코딩 유닛이 하나 이상의 디코더로 구현될 수 있고, 기술 분야에 공지된 바와 같이, 각각의 디코더가 PLA(programmable logic array)로서 구현될 수 있다는 것에 유의해야 한다. 예로서, 주어진 디코딩 유닛은 1) 상이한 매크로 명령어를 상이한 디코더로 보내는 조정 논리(steering logic); 2) (제2, 제3 및 제4 디코더보다 더 많이) 명령어 집합의 서브셋을 디코딩하고 한번에 2개의 마이크로-연산을 발생할 수 있는 제1 디코더; 3) 각각이 전체 명령어 집합의 서브셋만을 디코딩하고 한번에 단지 하나의 마이크로-연산을 발생할 수 있는 제2, 제3, 및 제4 디코더; 4) 전체 명령어 집합의 서브셋만을 디코딩하고 한번에 4개의 마이크로-연산을 발생할 수 있는 마이크로-시퀀서 ROM; 및 5) 누구의 출력이 마이크로-연산 큐에 제공되는지를 결정하는 디코더 및 마이크로-시퀀서 ROM에 의한 멀티플렉싱 논리 피드를 가질 수 있다. 디코더 유닛의 다른 실시예는 보다 많은 또는 보다 적은 명령어 및 명령어 서브셋을 디코딩하는 보다 많은 또는 보다 적은 디코더를 가질 수 있다. 예를 들어, 일 실시예는 각각이 한번에 2개의 마이크로-연산을 발생할 수 있는 제2, 제3, 및 제4 디코더를 가질 수 있고; 한번에 8개의 마이크로-연산을 발생하는 마이크로-시퀀서 ROM을 포함할 수 있다.
예시적인 프로세서 아키텍처 - 도 23 및 도 24
예시적인 순차 프로세서 아키텍처 - 도 23a 및 도 23b
도 23a 및 도 23b는 예시적인 순차 프로세서 아키텍처의 블록도를 나타낸 것이다. 이 예시적인 실시예는 와이드 벡터 프로세서(wide vector processor)(VPU)로 보강되는 순차 CPU 코어의 다중 인스턴스화를 중심으로 설계되어 있다. 정확한 응용 프로그램에 따라, 코어는 고대역폭 상호연결 네트워크를 통해 어떤 고정 함수 논리, 메모리 I/O 인터페이스, 및 다른 필요한 I/O 논리와 통신한다. 예를 들어, 이 실시예를 독립형 GPU로서 구현하는 것은 통상적으로 PCIe 버스를 포함할 것이다.
도 23a는 본 발명의 실시예에 따른, 단일 CPU 코어를, 온-다이 상호연결 네트워크(2302)에의 그의 연결 및 레벨 2(L2) 캐시의 그의 지역 서브셋(2304)과 함께, 나타낸 블록도이다. 명령어 디코더(2300)는 특정의 벡터 명령어 형식(300)을 포함하는 확장을 갖는 x86 명령어 집합을 지원한다. 본 발명의 일 실시예에서, (설계를 단순화하기 위해) 스칼라 유닛(2308) 및 벡터 유닛(2310)이 개별적인 레지스터 집합[각각, 스칼라 레지스터(2312) 및 벡터 레지스터(2314)]을 사용하고 이들 사이에서 전달되는 데이터가 메모리에 기입된 다음에 레벨 1(L1) 캐시(2306)로부터 재판독되지만, 본 발명의 대안의 실시예는 상이한 방식을 사용할 수 있다(예컨대, 단일 레지스터 집합을 사용하거나, 기입 및 재판독 없이 2개의 레지스터 파일 간에 데이터가 전달될 수 있게 해주는 통신 경로를 포함할 수 있음).
L1 캐시(2306)는 스칼라 및 벡터 유닛 내의 캐시 메모리에의 저 지연시간 액세스를 가능하게 해준다. 벡터 친숙형 명령어 형식으로 된 load-op 명령어와 함께, 이것은 L1 캐시(2306)가 얼마간 확장된 레지스터 파일처럼 취급될 수 있다는 것을 의미한다. 이것은, 특히 축출 힌트 필드(252B)에 의해, 많은 알고리즘의 성능을 상당히 향상시킨다.
L2 캐시(2304)의 지역 서브셋은, CPU 코어당 하나씩, 개별적인 지역 서브셋으로 나누어져 있는 전역 L2 캐시의 일부이다. 각각의 CPU는 L2 캐시(2304)의 그 자신의 지역 서브셋으로의 직접 액세스 경로를 가진다. CPU 코어에 의해 판독된 데이터는 그의 L2 캐시 서브셋(2304)에 저장되고, 그 자신의 로컬 L2 캐시 서브셋에 액세스하는 다른 CPU와 병렬로 빠르게 액세스될 수 있다. CPU 코어에 의해 기입된 데이터는 그 자신의 L2 캐시 서브셋(2304)에 저장되고, 필요한 경우, 다른 서브셋으로부터 플러시된다. 링 네트워크는 공유 데이터에 대한 일관성(coherency)을 보장해준다.
도 23b는 본 발명의 실시예에 따른, 도 23a에서의 CPU 코어의 일부의 분해도이다. 도 23b는 L1 캐시(2304)의 L1 데이터 캐시(2306A) 부분은 물론, 벡터 유닛(2310) 및 벡터 레지스터(2314)에 관한 부가 상세를 포함하고 있다. 구체적으로는, 벡터 유닛(2310)은 정수, 단정도 부동 소수점(single-precision float), 및 배정도 부동 소수점(double-precision float) 명령어를 실행하는 16-와이드(16-wide) 벡터 처리 유닛(VPU)[16-와이드 ALU(2328) 참조]이다. VPU는 뒤섞기 유닛(2320)에 의해 레지스터 입력을 뒤섞는 것, 숫자 변환 유닛(2322A 및 2322B)에 의한 숫자 변환, 및 메모리 입력에 대한 복제 유닛(2324)에 의한 복제를 지원한다. 기입 마스크 레지스터(2326)는 얻어지는 벡터 기입을 예측하는 것을 가능하게 해준다.
예컨대, 행렬 곱셈을 지원하기 위해, 레지스터 데이터가 각종의 방식으로 뒤섞기될 수 있다. 메모리로부터의 데이터가 VPU 레인(VPU lane)을 통해 복제될 수 있다. 이것은 그래픽 및 비그래픽 병렬 데이터 처리 둘 다에서 통상적인 연산이며, 이는 캐시 효율성을 상당히 향상시킨다.
CPU 코어, L2 캐시 및 다른 논리 블록 등의 에이전트들이 칩 내에서 서로 통신할 수 있게 해주기 위해, 링 네트워크는 양방향이다. 각각의 링 데이터 경로는 방향당 512 비트 폭이다.
예시적인 비순차 아키텍처 - 도 24
도 24는 본 발명의 실시예에 따른, 예시적인 비순차 아키텍처를 나타낸 블록도이다. 구체적으로는, 도 24는 벡터 친숙형 명령어 형식 및 그의 실행을 포함시키기 위해 수정된 공지된 예시적인 비순차 아키텍처를 나타낸 것이다. 도 24에서, 화살표는 2개 이상의 유닛 사이의 결합을 나타내고, 화살표의 방향은 그 유닛들 사이의 데이터 흐름의 방향을 나타낸다. 도 24는 실행 엔진 유닛(2410) 및 메모리 유닛(2415)에 결합되어 있는 프런트 엔드 유닛(2405)를 포함하고; 실행 엔진 유닛(2410)은 또한 메모리 유닛(2415)에 결합되어 있다.
프런트 엔드 유닛(2405)은 레벨 2(L2) 분기 예측 유닛(2422)에 결합되어 있는 레벨 1(L1) 분기 예측 유닛(2420)을 포함하고 있다. L1 및 L2 분기 예측 유닛(2420 및 2422)은 L1 명령어 캐시 유닛(2424)에 결합되어 있다. L1 명령어 캐시 유닛(2424)은 명령어 TLB(translation lookaside buffer)(2426)에 결합되어 있고, 명령어 TLB(2426)는 또한 명령어 페치 및 프리디코딩(instruction fetch and predecode) 유닛(2428)에 결합되어 있다. 명령어 페치 및 프리디코딩 유닛(2428)은 명령어 큐(instruction queue) 유닛(2430)에 결합되어 있고, 명령어 큐 유닛(2430)은 또한 디코딩 유닛(2432)에 결합되어 있다. 디코딩 유닛(2432)은 하나의 복합 디코더(complex decoder) 유닛(2434) 및 3개의 단순 디코더(simple decoder) 유닛(2436, 2438, 및 2440)을 포함하고 있다. 디코딩 유닛(2432)은 마이크로-코드 ROM 유닛(2442)을 포함하고 있다. 디코딩 유닛(2432)은 디코딩 스테이지 섹션에서 앞서 기술된 바와 같이 동작할 수 있다. L1 명령어 캐시 유닛(2424)은 또한 메모리 유닛(2415) 내의 L2 캐시 유닛(2448)에 결합되어 있다. 명령어 TLB 유닛(2426)은 또한 메모리 유닛(2415) 내의 제2 레벨 TLB 유닛(2446)에 결합되어 있다. 디코딩 유닛(2432), 마이크로-코드 ROM 유닛(2442), 및 루프 스트림 검출기 유닛(2444) 각각은 실행 엔진 유닛(2410) 내의 이름 변경/할당기(rename/allocator) 유닛(2456)에 결합되어 있다.
실행 엔진 유닛(2410)은 퇴장(retirement) 유닛(2474) 및 통합 스케줄러(unified scheduler) 유닛(2458)에 결합되어 있는 이름 변경/할당기 유닛(2456)을 포함하고 있다. 퇴장 유닛(2474)은 또한 실행 유닛(2460)에 결합되어 있고, 재정렬 버퍼 유닛(2478)을 포함하고 있다. 통합 스케줄러 유닛(2458)은 또한 물리 레지스터 파일 유닛(2476)에 결합되어 있고, 물리 레지스터 파일 유닛(2476)은 실행 유닛(2460)에 결합되어 있다. 물리 레지스터 파일 유닛(2476)은 벡터 레지스터 유닛(2477A), 기입 마스크 레지스터 유닛(2477B), 및 스칼라 레지스터 유닛(2477C)을 포함하고 있고; 이들 레지스터 유닛은 벡터 레지스터(510), 벡터 마스크 레지스터(515), 및 범용 레지스터(525)를 제공할 수 있고; 물리 레지스터 파일 유닛(2476)은 도시되지 않은 부가의 레지스터 파일[예컨대, MMX 압축 정수 플랫 레지스터 파일(550) 상에 앨리어싱되어 있는 스칼라 부동 소수점 스택 레지스터 파일(545)]을 포함할 수 있다. 실행 유닛(2460)은 3개의 스칼라 및 벡터 혼합 유닛(2462, 2464, 및 2472); 로드 유닛(2466); 주소 저장 유닛(2468); 데이터 저장 유닛(2470)을 포함하고 있다. 로드 유닛(2466), 주소 저장 유닛(2468), 및 데이터 저장 유닛(2470) 각각은 또한 메모리 유닛(2415) 내의 데이터 TLB 유닛(2452)에 결합되어 있다.
메모리 유닛(2415)은 데이터 TLB 유닛(2452)에 결합되어 있는 제2 레벨 TLB 유닛(2446)을 포함하고 있다. 데이터 TLB 유닛(2452)은 L1 데이터 캐시 유닛(2454)에 결합되어 있다. L1 데이터 캐시 유닛(2454)은 또한 L2 캐시 유닛(2448)에 결합되어 있다. 일부 실시예에서, L2 캐시 유닛(2448)은 또한 메모리 유닛(2415)의 내부 및/또는 외부에 있는 L3 및 상위 캐시 유닛(2450)에 결합되어 있다.
예로서, 예시적인 비순차 아키텍처는 프로세서 파이프라인(2200)을 다음과 같이 구현할 수 있다: 1) 명령어 페치 및 프리디코딩 유닛(2428)은 페치 및 길이 디코딩 스테이지(1910 및 2012)를 수행하고; 2) 디코딩 유닛(2432)은 디코딩 스테이지(1920)를 수행하며; 3) 이름 변경/할당기 유닛(2456)은 할당 스테이지(2122) 및 이름 변경 스테이지(2124)를 수행하고; 4) 통합 스케줄러(2458)는 스케줄링 스테이지(2126)를 수행하며; 5) 물리 레지스터 파일 유닛(2476), 재정렬 버퍼 유닛(2478), 및 메모리 유닛(2415)은 레지스터 판독/메모리 판독 스테이지(1930)을 수행하고; 실행 유닛(2460)은 실행/데이터 변환 스테이지(2245)를 수행하며; 6) 메모리 유닛(2415) 및 재정렬 버퍼 유닛(2478)은 재기입/메모리 기입 스테이지(1960)를 수행하고; 7) 퇴장 유닛(2474)은 ROB 판독 스테이지(2162)를 수행하며; 8) 다양한 유닛이 예외 처리 스테이지(2164)에 관여되어 있을 수 있고; 9) 퇴장 유닛(2474) 및 물리 레지스터 파일 유닛(2476)은 커밋 스테이지(2166)를 수행한다.
예시적인 단일 코어 및 멀티코어 프로세서 - 도 29
도 29는 본 발명의 실시예에 따른, 단일 코어 프로세서 및 통합된 메모리 제어기 및 그래픽을 갖는 멀티코어 프로세서(2900)의 블록도이다. 도 29에서의 실선 상자는 단일 코어(2902A)를 갖는 프로세서(2900), 시스템 에이전트(2910), 하나 이상의 버스 제어기 유닛(2916)의 세트를 나타내는 반면, 선택적인 부가인 파선 상자는 다수의 코어(2902A 내지 2902N)를 갖는 대안의 프로세서(2900), 시스템 에이전트 유닛(2910) 내의 하나 이상의 통합된 메모리 제어기 유닛(들)(2914)의 세트, 및 통합된 그래픽 논리(2908)를 나타내고 있다.
메모리 계층구조는 코어 내의 하나 이상의 레벨의 캐시, 한 세트 또는 하나 이상의 공유 캐시 유닛(2906), 및 한 세트의 통합된 메모리 제어기 유닛(2914)에 결합되어 있는 외부 메모리(도시 생략)를 포함하고 있다. 한 세트의 공유 캐시 유닛(2906)은 하나 이상의 중간-레벨 캐시[레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 기타 레벨의 캐시 등], LLC(last level cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서, 링 기반 상호연결 유닛(2912)이 통합된 그래픽 논리(2908), 한 세트의 공유 캐시 유닛(2906), 및 시스템 에이전트 유닛(2910)을 상호연결시키고 있지만, 대안의 실시예는 이러한 유닛을 상호연결시키는 임의의 수의 공지된 기법을 사용할 수 있다.
일부 실시예에서, 코어들(2902A 내지 2902N) 중 하나 이상의 코어는 멀티-스레딩을 할 수 있다. 시스템 에이전트(2910)는 코어들(2902A 내지 2902N)을 조정하고 동작시키는 그 구성요소들을 포함하고 있다. 시스템 에이전트 유닛(2910)은, 예를 들어, PCU(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(2902A 내지 2902N) 및 통합된 그래픽 논리(2908)의 전원 상태를 조절하는 데 필요한 논리 및 구성요소일 수 있거나 이를 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부적으로 연결된 디스플레이를 구동하기 위한 것이다.
코어들(2902A 내지 2902N)은 아키텍처 및/또는 명령어 집합의 면에서 동질적이거나 이질적일 수 있다. 예를 들어, 코어들(2902A 내지 2902N) 중 일부는 (에컨대, 도 23a 및 도 23b에 도시된 것과 같이) 순차일 수 있는 반면, 다른 것들은 (예컨대, 도 24에 도시된 것과 같이) 비순차이다. 다른 예로서, 코어들(2902A 내지 2902N) 중 2개 이상은 동일한 명령어 집합을 실행할 수 있을지도 모르는 반면, 다른 것들은 그 명령어 집합의 서브셋만 또는 상이한 명령어 집합을 실행할 수 있을지도 모른다. 코어들 중 적어도 하나는 본 명세서에 기술된 벡터 친숙형 명령어 형식을 실행할 수 있다.
프로세서는 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation으로부터 입수가능한 Core™ i3, i5, i7, 2 Duo 및 Quad, Xeon™ 또는 Itanium 프로세서 등의 범용 프로세서일 수 있다. 다른 대안으로서, 프로세서는 다른 회사의 것일 수 있다. 프로세서는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, 코프로세서, 임베디드 프로세서 등과 같은 특수-목적 프로세서일 수 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(2900)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS 등의 다수의 공정 기술들 중 임의의 것을 사용하여 하나 이상의 기판의 일부일 수 있고 및/또는 그 기판 상에 구현될 수 있다.
예시적인 컴퓨터 시스템 및 프로세서 - 도 25 내지 도 28
도 25 내지 도 27은 프로세서(2900)를 포함하기에 적당한 예시적인 시스템인 반면, 도 28은 코어들(2902) 중 하나 이상을 포함할 수 있는 예시적인 SoC(system on a chip)이다. 랩톱, 데스크톱, 핸드헬드 PC, PDA(personal digital assistant), 엔지니어링 워크스테이션, 서버, 네트워크 디바이스, 네트워크 허브, 스위치, 임베디드 프로세서, DSP(digital signal processor), 그래픽 디바이스, 비디오 게임 디바이스, 셋톱 박스, 마이크로 제어기, 휴대폰, 휴대용 미디어 플레이어, 핸드헬드 디바이스, 및 다양한 다른 전자 디바이스에 대한 기술 분야에 공지된 다른 시스템 설계 및 구성도 역시 적합하다. 일반적으로, 본 명세서에 개시되어 있는 프로세서 및/또는 다른 실행 논리를 포함할 수 있는 아주 다양한 시스템 또는 전자 디바이스가 일반적으로 적당하다.
이제 도 25를 참조하면, 본 발명의 일 실시예에 따른 시스템(2500)의 블록도가 도시되어 있다. 시스템(2500)은 그래픽 메모리 제어기 허브(graphics memory controller hub, GMCH)(2520)에 결합되어 있는 하나 이상의 프로세서(2510, 2515)를 포함할 수 있다. 부가의 프로세서(2515)의 선택적인 특성은 도 25에서 파선으로 나타내어져 있다.
각각의 프로세서(2510, 2515)는 어떤 버전의 프로세서(2900)일 수 있다. 그렇지만, 통합된 그래픽 논리 및 통합된 메모리 제어 유닛이 프로세서(2510, 2515)에 존재할 가능성이 없다는 것에 유의해야 한다.
도 25는 GMCH(2520)가, 예를 들어, DRAM(dynamic random access memory)일 수 있는 메모리(2540)에 결합되어 있을 수 있다는 것을 나타내고 있다. DRAM은, 적어도 하나의 실시예에서, 비휘발성 캐시와 연관되어 있을 수 있다.
GMCH(2520)는 칩셋 또는 칩셋의 일부분일 수 있다. GMCH(2520)은 프로세서(들)(2510, 2515)와 통신하고 프로세서(들)(2510, 2515)와 메모리(2540) 사이의 상호작용을 제어할 수 있다. GMCH(2520)는 또한 프로세서(들)(2510, 2515)와 시스템(2500)의 다른 요소들 사이의 가속 버스 인터페이스로서 역할할 수 있다. 적어도 하나의 실시예에서, GMCH(2520)는 FSB(frontside bus)(2595) 등의 멀티-드롭 버스(multi-drop bus)를 통해 프로세서(들)(2510, 2515)와 통신한다.
게다가, GMCH(2520)는 디스플레이(2545)(평판 디스플레이 등)에 결합되어 있다. GMCH(2520)는 통합된 그래픽 가속기를 포함할 수 있다. GMCH(2520)는 또한 다양한 주변 장치를 시스템(2500)에 결합시키는 데 사용될 수 있는 입/출력(I/O) 제어기 허브[input/output (I/O) controller hub, ICH](2550)에 결합되어 있다. 예를 들어, 도 25의 실시예에는, ICH(2550)에 결합되어 있는 개별 그래픽 디바이스일 수 있는 외부 그래픽 디바이스(2560)가, 다른 주변 장치(2570)와 함께, 도시되어 있다.
다른 대안으로서, 부가의 또는 상이한 프로세서가 또한 시스템(2500)에 존재할 수 있다. 예를 들어, 부가의 프로세서(들)(2515)는 프로세서(2510)와 동일한 부가의 프로세서(들), 프로세서(2510)에 이질적이거나 비대칭인 부가의 프로세서(들), 가속기[예컨대, 그래픽 가속기 또는 DSP(digital signal processing) 유닛 등], FPGA(field programmable gate array), 또는 임의의 다른 프로세서를 포함할 수 있다. 아키텍처, 마이크로 아키텍처, 열, 전력 소모 특성 등을 비롯한 성능 척도의 면에서 물리적 자원들(2510, 2515) 간에 다양한 차이점이 있을 수 있다. 이들 차이점은 실질적으로 처리 요소들(2510, 2515) 간의 비대칭 및 이질성으로서 나타날 수 있다. 적어도 하나의 실시예에서, 다양한 처리 요소(2510, 2515)가 동일한 다이 패키지에 존재할 수 있다.
이제 도 26을 참조하면, 본 발명의 일 실시예에 따른 제2 시스템(2600)의 블록도가 도시되어 있다. 도 26에 도시된 바와 같이, 멀티프로세서 시스템(2600)은 포인트-투-포인트 상호연결 시스템이고, 포인트-투-포인트 상호연결부(2650)를 통해 결합되어 있는 제1 프로세서(2670) 및 제2 프로세서(2680)를 포함하고 있다. 도 26에 도시된 바와 같이, 각각의 프로세서(2670 및 2680)는 어떤 버전의 프로세서(2900)일 수 있다.
다른 대안으로서, 프로세서들(2670, 2680) 중 하나 이상은 프로세서 이외의 요소[가속기 또는 FPGA(field programmable gate array) 등]일 수 있다.
단지 2개의 프로세서(2670, 2680)가 도시되어 있지만, 본 발명의 범위가 그것으로 제한되지 않는다는 것을 잘 알 것이다. 다른 실시예에서, 주어진 프로세서에 하나 이상의 부가의 처리 요소가 존재할 수 있다.
프로세서(2670)는 통합된 메모리 제어기 허브(IMC)(2672) 및 포인트-투-포인트(P-P) 인터페이스(2676 및 2678)를 추가로 포함할 수 있다. 이와 유사하게, 제2 프로세서(2680)는 IMC(2682) 및 P-P 인터페이스(2686 및 2688)를 포함할 수 있다. 프로세서(2670, 2680)는 PtP(point-to-point) 인터페이스 회로(2678, 2688)를 사용하여 PtP 인터페이스(2650)를 통해 데이터를 교환할 수 있다. 도 26에 도시된 바와 같이, IMC(2672 및 2682)는 프로세서를 각자의 메모리, 즉 각자의 프로세서에 로컬적으로 부착되어 있는 메인 메모리의 일부분일 수 있는 메모리(2632) 및 메모리(2634)에 결합시킨다.
프로세서(2670, 2680) 각각은 포인트-투-포인트 인터페이스 회로(2676, 2694, 2686, 2698)를 사용하여 개개의 P-P 인터페이스(2652, 2654)를 통해 칩셋(2690)과 데이터를 교환할 수 있다. 칩셋(2690)은 또한 고성능 그래픽 인터페이스(2639)를 통해 고성능 그래픽 회로(2638)와 데이터를 교환할 수 있다.
공유 캐시(도시 생략)는 양쪽 프로세서 중 어느 한 프로세서에 포함될 수 있지만, P-P 상호연결부를 통해 프로세서들과 연결될 수 있으며, 따라서, 프로세서가 저전력 모드에 들어가는 경우, 어느 한 프로세서 또는 양쪽 프로세서의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(2690)은 인터페이스(2696)를 통해 제1 버스(2616)에 결합될 수 있다. 일 실시예에서, 제1 버스(2616)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI Express 버스 또는 다른 3세대 I/O 상호연결 버스 등의 버스일 수 있지만, 본 발명의 범위가 그것으로 제한되지 않는다.
도 26에 도시된 바와 같이, 다양한 I/O 디바이스(2614)가, 제1 버스(2616)를 제2 버스(2620)에 결합시키는 버스 브리지(2618)와 함께, 제1 버스(2616)에 결합될 수 있다. 일 실시예에서, 제2 버스(2620)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드/마우스(2622), 통신 디바이스(2626), 및 코드(2630)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 디바이스 등의 데이터 저장 유닛(2628)을 비롯한 다양한 디바이스가 제2 버스(2620)에 결합될 수 있다. 게다가, 오디오 I/O(2624)는 제2 버스(2620)에 결합될 수 있다. 유의할 점은, 다른 아키텍처가 가능하다는 것이다. 예를 들어, 도 26의 포인트-투-포인트 아키텍처 대신에, 시스템은 멀티-드롭 버스 또는 다른 이러한 아키텍처를 구현할 수 있다.
이제 도 27을 참조하면, 본 발명의 일 실시예에 따른 제3 시스템(2700)의 블록도가 도시되어 있다. 도 26 및 도 27에서의 유사한 요소가 유사한 참조 번호를 지니고 있으며; 도 27의 다른 측면들을 모호하게 하는 것을 피하기 위해, 도 26의 어떤 측면이 도 27로부터 생략되어 있다.
도 27은 처리 요소(2670, 2680)가 통합된 메모리 및 I/O 제어 논리("CL")(각각, 2672 및 2682)를 포함할 수 있다는 것을 나타내고 있다. 적어도 하나의 실시예에서, CL(2672, 2682)은 도 29 및 도 26과 관련하여 앞서 기술한 것과 같은 메모리 제어기 허브 논리(IMC)를 포함할 수 있다. 그에 부가하여, CL(2672, 2682)은 또한 I/O 제어 논리를 포함할 수 있다. 도 27은 메모리(2632, 2634)가 CL(2672, 2682)에 결합되어 있는 것 뿐만 아니라, I/O 디바이스(2714)도 역시 제어 논리(2672, 2682)에 결합되어 있는 것을 나타내고 있다. 레거시 I/O 디바이스(2715)는 칩셋(2690)에 결합되어 있다.
이제 도 28을 참조하면, 본 발명의 일 실시예에 따른 SoC(2800)의 블록도가 도시되어 있다. 도 29에서의 유사한 요소가 유사한 참조 번호를 지니고 있다. 또한, 파선 상자는 보다 진보된 SoC에서의 선택적인 특징이다. 도 28에서, 상호연결 유닛(들)(2802)은 하나 이상의 코어(2902A 내지 2902N) 및 공유 캐시 유닛(들)(2906)의 세트를 포함하는 응용 프로그램 프로세서(2810); 시스템 에이전트 유닛(2910); 버스 제어기 유닛(들)(2916); 통합된 메모리 제어 유닛(들)(2914); 통합된 그래픽 논리(2908), 정지 및/또는 비디오 카메라 기능을 제공하는 이미지 프로세서(2824), 하드웨어 오디오 가속을 제공하는 오디오 프로세서(2826), 및 비디오 인코딩/디코딩 가속을 제공하는 비디오 프로세서(2828)를 포함할 수 있는 한 세트 또는 하나 이상의 미디어 프로세서(2820); SRAM(static random access memory) 유닛(2830); DMA(direct memory access) 유닛(2832); 및 하나 이상의 외부 디스플레이에 결합되는 디스플레이 유닛(2840)에 결합되어 있다.
본 명세서에 개시된 메커니즘의 실시예는 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 방식의 조합으로 구현될 수 있다. 본 발명의 실시예는 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 요소를 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능 시스템 상에서 실행되는 컴퓨터 프로그램 또는 프로그램 코드로서 구현될 수 있다.
도 26에 예시되어 있는 코드(2630) 등의 프로그램 코드는 본 명세서에 기술된 기능을 수행하여 출력 정보를 발생하기 위해 입력 데이터에 주어질 수 있다. 출력 정보는 공지된 방식으로 하나 이상의 출력 디바이스에 주어질 수 있다. 이 출원의 목적상, 처리 시스템은, 예를 들어, DSP(digital signal processor), 마이크로컨트롤러, ASIC(application specific integrated circuit), 또는 마이크로프로세서 등의 프로세서를 가지는 임의의 시스템을 포함하고 있다.
프로그램 코드는 처리 시스템과 통신하기 위해 고수준의 절차적 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또한, 원하는 경우, 어셈블리어 또는 기계어로 구현될 수 있다. 실제로, 본 명세서에 기술된 메커니즘의 범위가 임의의 특정의 프로그래밍 언어로 제한되지 않는다. 어느 경우든지, 언어는 컴파일되는 또는 인터프리트되는 언어일 수 있다.
적어도 하나의 실시예의 하나 이상의 측면은 프로세서 내에서 다양한 논리를 나타내는 기계 판독가능 매체 상에 저장되어 있는 대표적인 명령어에 의해 구현될 수 있고, 이 명령어는, 기계에 의해 판독될 때, 기계로 하여금 본 명세서에 기술된 기법들을 수행하는 논리를 제조하게 한다. "IP 코어"라고 하는 이러한 표현은 유형의(tangible) 기계 판독가능 매체 상에 저장되고, 논리 또는 프로세서를 실제로 제조하는 제조 기계에 로드하기 위해, 다양한 고객 또는 제조 시설에 공급될 수 있다.
이러한 기계 판독가능 저장 매체는 하드 디스크, 임의의 다른 유형의 디스크 - 플로피 디스크, 광 디스크(CD-ROM(compact disk read-only memory), CD-RW(compact disk rewritable)), 및 광자기 디스크를 포함함 -, ROM(read-only memory), DRAM(dynamic random access memory) 등의 RAM(random access memory), SRAM(static random access memory), EPROM(erasable programmable read-only memory), 플래시 메모리, EEPROM(electrically erasable programmable read-only memory) 등의 반도체 디바이스, 자기 또는 광 카드, 또는 전자 명령어를 저장하기에 적당한 임의의 다른 유형의 매체 등의 저장 매체를 비롯한 기계 또는 디바이스에 의해 제조 또는 형성되는 비일시적, 유형의 물품을 포함할 수 있지만, 이들로 제한되지 않는다.
그에 따라, 본 발명의 실시예는 또한 벡터 친숙형 명령어 형식으로 된 명령어를 포함하는 또는 본 명세서에 기술된 구조, 회로, 장치, 프로세서, 및/또는 시스템 특징을 정의하는 HDL(Hardware Description Language) 등의 설계 데이터를 포함하는 비일시적, 유형의 기계 판독가능 매체를 포함한다. 이러한 실시예는 또한 프로그램 제품이라고도 할 수 있다.
어떤 경우에, 명령어 변환기는 소스 명령어 집합으로부터 대상 명령어 집합으로 명령어를 변환하는 데 사용될 수 있다. 예를 들어, 명령어 변환기는 명령어를 코어에 의해 처리될 하나 이상의 다른 명령어로 번역(예컨대, 정적 이진 번역, 동적 컴파일을 비롯한 동적 이진 번역을 사용함), 모핑, 에뮬레이트 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 명령어 변환기는 온-프로세서(on processor)에, 오프-프로세서(off processor)에, 또는 일부는 온-프로세서에 일부는 오프-프로세서에 있을 수 있다.
도 30은 본 발명의 실시예에 따른, 소스 명령어 집합에서의 이진 명령어를 대상 명령어 집합에서의 이진 명령어로 변환하는 소프트웨어 명령어 변환기의 사용을 대비하는 블록도이다. 예시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 다른 대안으로서, 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합으로 구현될 수 있다. 도 30은 상위 레벨 언어(3002)로 된 프로그램이 기본적으로 적어도 하나의 x86 명령어 집합 코어를 갖는 프로세서(3016)에 의해 실행될 수 있는 x86 이진 코드(3006)를 발생하기 위해 x86 컴파일러(3004)를 사용하여 컴파일될 수 있다는 것을 나타내고 있다(컴파일된 명령어들 중 일부가 벡터 친숙형 명령어 형식으로 되어 있는 것으로 가정됨). 적어도 하나의 x86 명령어 집합 코어를 갖는 프로세서(3016)는 적어도 하나의 x86 명령어 집합 코어를 갖는 Intel 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 집합 코어의 명령어 집합의 상당 부분 또는 (2) 적어도 하나의 x86 명령어 집합 코어를 갖는 Intel 프로세서 상에서 실행되도록 되어 있는 오브젝트 코드 버전의 응용 프로그램 또는 기타 소프트웨어를 호환가능하게 실행하거나 다른 방식으로 처리함으로써, 적어도 하나의 x86 명령어 집합 코어를 갖는 Intel 프로세서와 실질적으로 동일한 기능을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(3004)는, 부가의 링크 처리를 사용하여 또는 그를 사용함이 없이, 적어도 하나의 x86 명령어 집합 코어를 갖는 프로세서(3016) 상에서 실행될 수 있는 x86 이진 코드(3006)(예컨대, 오브젝트 코드)를 발생하는 동작을 하는 컴파일러를 나타낸다. 이와 유사하게, 도 30은 상위 레벨 언어(3002)로 된 프로그램이 기본적으로 적어도 하나의 x86 명령어 집합 코어를 갖지 않는 프로세서(3014)(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 집합을 실행하는 및/또는 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 집합을 실행하는 코어를 갖는 프로세서)에 의해 실행될 수 있는 대안의 명령어 집합 이진 코드(3010)를 발생하기 위해 대안의 명령어 집합 컴파일러(3008)를 사용하여 컴파일될 수 있는 것을 나타내고 있다. 명령어 변환기(3012)는 x86 이진 코드(3006)를, 기본적으로 x86 명령어 집합 코어를 갖지 않는 프로세서(3014)에 의해 실행될 수 있는 코드로 변환하는 데 사용된다. 이 변환된 코드는 대안의 명령어 집합 이진 코드(3010)와 동일할 가능성이 없지만 - 그 이유는 이것을 할 수 있는 명령어 변환기를 만들기가 어렵기 때문임 -; 변환된 코드는 일반 동작을 달성할 것이고 대안의 명령어 집합으로부터의 명령어로 이루어져 있을 것이다. 이와 같이, 명령어 변환기(3012)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 집합 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스가 x86 이진 코드(3006)를 실행할 수 있게 해주는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
본 명세서에 개시된 벡터 친숙형 명령어 형식으로 된 명령어(들)의 특정 동작이 하드웨어 구성요소에 의해 수행될 수 있고 회로 또는 기타 하드웨어 구성요소가 동작을 수행하는 명령어로 프로그램되게 하거나 적어도 그렇게 하는 데 사용되는 기계-실행가능 명령어로 구현될 수 있다. 회로는, 단지 몇가지 일례를 들자면, 범용 또는 특수-목적 프로세서, 또는 논리 회로를 포함할 수 있다. 동작은 또한 선택적으로 하드웨어와 소프트웨어의 조합에 의해 수행될 수 있다. 실행 논리 및/또는 프로세서는 명령어 지정 결과 피연산자를 저장하기 위해 기계 명령어 또는 기계 명령어로부터 도출된 하나 이상의 제어 신호에 응답하는 특정의 또는 특별한 회로 또는 기타 논리를 포함할 수 있다. 예를 들어, 본 명세서에 개시된 명령어(들)의 실시예는 도 25 내지 도 28의 시스템들 중 하나 이상에서 실행될 수 있고, 벡터 친숙형 명령어 형식으로 된 명령어(들)의 실시예는 시스템들에서 실행될 프로그램 코드에 저장될 수 있다. 그에 부가하여, 이들 도면의 처리 요소는 본 명세서에 상세히 기술된 상세한 파이프라인들 및/또는 아키텍처들(예컨대, 순차 아키텍처 및 비순차 아키텍처) 중 하나를 이용할 수 있다. 예를 들어, 순차 아키텍처의 디코딩 유닛은 명령어(들)를 디코딩하고, 디코딩된 명령어를 벡터 또는 스칼라으로 전달하는 등을 할 수 있다.
이상의 설명은 본 발명의 바람직한 실시예를 설명하기 위한 것이다. 이상의 논의로부터, 또한 특히 발전이 빠르고 추가의 개선이 쉽게 예측되지 않는 이러한 기술 영역에서, 본 발명의 구성 및 상세가 첨부 도면 및 그의 등가물의 범위 내에서 본 발명의 원리를 벗어나지 않고 당업자에 의해 수정될 수 있다는 것이 명백할 것이다. 예를 들어, 방법의 하나 이상의 동작이 결합되거나 추가로 분리될 수 있다.
대안의 실시예
본질적으로 벡터 친숙형 명령어 형식을 실행하게 될 실시예들이 기술되어 있지만, 본 발명의 대안의 실시예는 상이한 명령어 집합을 실행하는 프로세서(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 집합을 실행하는 프로세서, 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 집합을 실행하는 프로세서) 상에서 실행 중인 에뮬레이션 계층(emulation layer)을 통해 벡터 친숙형 명령어 형식을 실행할 수 있다. 또한, 도면에서의 흐름도는 본 발명의 특정 실시예에 의해 수행되는 동작들의 특정의 순서를 나타내고 있지만, 이러한 순서가 예시적인 것임을 잘 알 것이다 (예컨대, 대안의 실시예는 동작들을 상이한 순서로 수행하거나, 특정의 동작들을 결합하거나, 특정의 동작들을 중복시키거나 할 수 있다).
이상의 설명에서, 설명의 목적상, 본 발명의 실시예에 대한 완전한 이해를 제공하기 위해 수많은 구체적인 상세가 기술되어 있다. 그렇지만, 하나 이상의 다른 실시예가 이들 구체적인 상세 중 일부가 없어도 실시될 수 있다는 것이 당업자에게는 명백할 것이다. 기술된 특정의 실시예는 본 발명을 제한하기 위한 것이 아니라 본 발명의 실시예를 설명하기 위해 제공되어 있다. 본 발명의 범위는 이상에 제공된 특정의 일례에 의해서가 아니라 이하의 특허청구범위에 의해서만 결정되어야 한다.

Claims (128)

  1. 삭제
  2. 삭제
  3. 삭제
  4. 삭제
  5. 삭제
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 장치로서,
    명령어 집합을 실행하도록 구성되어 있는 프로세서
    를 포함하며,
    상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 클래스 필드, 알파 필드, 및 베타 필드를 포함하는 복수의 필드들을 갖고, 상기 제1 명령어 형식은 상기 알파 필드 및 상기 베타 필드에 상이한 값들을 배치하는 것을 통해 상이한 보강 연산들을 지원하며, 명령어 스트림들에서 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 상기 상이한 값들 중 하나만이 상기 알파 필드 및 상기 베타 필드 각각에 배치될 수 있고,
    상기 프로세서는,
    메모리 액세스를 지정하지 않는 어커런스들 각각에 대해, 그 어커런스에서 상기 알파 필드의 내용에 기초하여, 반올림 유형 연산으로 보강해야 하는지 여부를 구분해주고 - 상기 알파 필드의 내용이 상기 반올림 유형 연산을 나타낼 때, 상기 베타 필드는 SAE(suppress all floating point exceptions) 필드 및 반올림 연산 필드로서 해석됨 - ;
    메모리 액세스를 지정하지 않고 상기 알파 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 SAE 필드의 내용에 기초하여, 부동 소수점 예외 보고가 디스에이블될 것인지 여부를 구분해주며;
    메모리 액세스를 지정하지 않고 상기 알파 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 반올림 연산 필드의 내용에 기초하여, 복수의 반올림 연산들 중 어느 것을 적용해야 하는지를 구분해주는 것과 같이
    제1 클래스를 지정하는 상기 클래스 필드의 내용에 의해 상기 제1 명령어 형식으로 된 명령어들의 어커런스들을 디코딩하는 디코딩 유닛을 포함하는 장치.
  21. 삭제
  22. 제20항에 있어서, 상기 디코딩 유닛은 또한
    메모리 액세스를 지정하지 않는 어커런스들 각각에 대해, 상기 베타 필드를 RL 필드를 포함하는 것으로서 해석하고;
    메모리 액세스를 지정하지 않는 어커런스들 각각에 대해, 그 어커런스에서 상기 RL 필드의 내용에 기초하여, 반올림 유형 연산으로 보강해야 하는지 벡터 길이 유형 연산으로 보강해야 하는지를 구분해주며 - 상기 RL 필드의 내용이 상기 반올림 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 반올림 연산 필드로서 해석되고, 상기 RL 필드의 내용이 상기 벡터 길이 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 그 대신에 벡터 길이 필드로서 해석됨 - ;
    메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 반올림 연산 필드로서 해석되는 것에 기초하여, 상기 복수의 반올림 연산들 중 어느 것을 적용해야 하는지를 구분해주는 것과 같이
    제2 클래스를 지정하는 상기 클래스 필드의 내용에 의해 상기 제1 명령어 형식으로 된 명령어들의 어커런스들을 디코딩하는 것인 장치.
  23. 삭제
  24. 제22항에 있어서, 상기 디코딩 유닛은 또한
    메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 벡터 길이 유형 연산을 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 벡터 길이 필드로서 해석되는 것에 기초하여, 복수의 벡터 길이들 중 어느 것을 사용해야 하는지를 구분해주는 것과 같이
    상기 제2 클래스를 지정하는 상기 클래스 필드의 내용에 의해 상기 제1 명령어 형식으로 된 명령어들의 어커런스들을 디코딩하는 것인 장치.
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 장치로서,
    명령어 집합을 실행하도록 구성되어 있는 프로세서
    를 포함하며,
    상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 제1 복수의 템플릿을 포함하고, 상기 제1 명령어 형식은 베이스 연산 필드, 데이터 요소 폭(W) 필드, 및 기입 마스크 필드를 포함하는 복수의 필드들을 가지며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드에서의 상이한 값들을 통해, 상이한 벡터 연산들의 지정을 지원하고, 상기 벡터 연산들 각각은 복수의 데이터 요소들을 상이한 데이터 요소 위치들에 포함하는 목적지 벡터 피연산자를 생성하며, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 상이한 데이터 요소 폭들의 지정을 지원하고, 상기 베이스 연산 필드, 상기 데이터 요소 폭 필드, 및 상기 기입 마스크 필드 각각은 명령어 스트림들에서 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 하나의 값만을 저장할 수 있으며,
    상기 프로세서는
    상기 어커런스들 각각에 대해, 상기 데이터 요소 폭 필드의 내용에 기초하여, 상기 데이터 요소 폭들 중 어느 것을 사용해야 하는지를 구분해주고;
    상기 어커런스들 각각에 대해, 그 어커런스에 대한 상기 기입 마스크 필드의 내용 및 상기 데이터 요소 폭에 기초하여, 상기 어커런스의 벡터 연산으로부터 얻어지는 데이터 요소들 중 어느 것이 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 하는지 여부를 구분해주는 것 - 상기 기입 마스크 필드에 배치될 수 있는 상이한 값들 중 하나는 상기 어커런스의 벡터 연산의 결과들 모두가 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 한다는 것을 나타내기 위해 예약되어 있고, 상기 기입 마스크 필드에 배치될 수 있는 상이한 값들 중 다른 것들은 구성가능 기입 마스크들을 저장하는 상이한 기입 마스크 레지스터들을 구분해주며, 상기 어커런스에 대한 상기 데이터 요소 폭은 어느 데이터 요소 위치들이 상기 구성가능 기입 마스크들의 어느 비트들과 대응하는지를 구분해줌 - 과 같이
    상기 제1 복수의 템플릿에서 상기 명령어들의 어커런스들을 디코딩하는 디코딩 유닛을 포함하는 장치.
  30. 제29항에 있어서, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 32 비트 데이터 요소 폭 및 64 비트 데이터 요소 폭의 지정을 지원하고, 상기 기입 마스크 레지스터들은 적어도 64 비트이며, 상기 기입 마스크의 단일 비트가 상기 목적지 벡터 피연산자의 데이터 요소 위치들 각각에 대해 사용되고, 상기 기입 마스크 레지스터의 하위 16 비트는 32 비트 데이터 요소들을 갖는 512 비트 벡터들에 대해 사용되고, 상기 기입 마스크 레지스터의 하위 8 비트는 32 비트 데이터 요소들을 갖는 512 비트 벡터들에 대해 사용되는 장치.
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 장치로서,
    명령어 집합을 실행하도록 구성되어 있는 프로세서
    를 포함하며,
    상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 제1 복수의 템플릿을 포함하고, 각각의 템플릿은 베이스 연산 필드, 데이터 요소 폭(W) 필드, 벡터 길이 필드, 및 기입 마스크 필드를 포함하는 복수의 필드들을 포함하며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드에서의 상이한 값들을 통해, 복수의 상이한 벡터 연산들의 지정을 지원하고, 상기 복수의 벡터 연산들 각각은 적어도 하나의 목적지 벡터 피연산자를 생성하기 위해 적어도 하나의 소스 벡터 피연산자의 복수의 상이한 데이터 요소 위치들 각각에 대해 연산이 독립적으로 수행될 것을 필요로 하고, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 32 비트 데이터 요소 폭 및 64 비트 데이터 요소 폭의 지정을 지원하며, 상기 제1 복수의 템플릿은, 상기 벡터 길이 필드에서의 상이한 값들을 통해, 복수의 상이한 벡터 길이들의 지정을 지원하고, 상기 제1 명령어 형식은, 상기 기입 마스크 필드에서의 상이한 값들을 통해, 상이한 기입 마스크들의 지정을 지원하며, 명령어 스트림들에서 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 상기 상이한 값들 중 하나만이 상기 베이스 연산 필드, 상기 데이터 요소 폭 필드, 및 상기 기입 마스크 필드 각각에 배치될 수 있고,
    상기 프로세서는,
    상기 어커런스들 각각에 대해, 상기 베이스 연산 필드의 내용에 기초하여, 상기 상이한 벡터 연산들 중 어느 것을 수행해야 하는지를 구분해주고;
    상기 어커런스들 각각에 대해, 상기 데이터 요소 폭 필드의 내용에 기초하여, 상기 데이터 요소 폭들 중 어느 것을 사용해야 하는지를 구분해주며;
    상기 어커런스들 각각에 대해, 상기 벡터 길이 필드의 내용에 기초하여, 상기 벡터 길이들 중 어느 것을 사용해야 하는지를 구분해주고;
    상기 어커런스들 각각에 대해, 상기 기입 마스크 필드의 내용에 기초하여, 상기 상이한 기입 마스크들 중 어느 것을 사용해야 하는지를 구분해주는 것 - 상기 어커런스에 대한 상기 데이터 요소 폭 및 상기 벡터 길이는 어느 데이터 요소 위치들이 상기 어커런스의 기입 마스크의 어느 비트들과 대응하는지를 구분해주고, 상기 어커런스에 대한 상기 기입 마스크는, 데이터 요소 위치별로, 상기 어커런스의 벡터 연산의 결과들이 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 하는지 여부를 지정함 - 과 같이
    상기 제1 복수의 템플릿에서 상기 명령어들의 어커런스들을 디코딩하는 디코딩 유닛을 포함하는 장치.
  39. 삭제
  40. 삭제
  41. 삭제
  42. 제38항에 있어서, 상기 제1 명령어 형식은 제로화-기입 마스킹(zeroing-writemasking) 연산을 지원하는 장치.
  43. 제38항 또는 제42항에 있어서, 상기 기입 마스크 필드에 배치될 수 있는 상이한 값들 중 하나는 상기 어커런스의 벡터 연산의 결과들 모두가 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 한다는 것을 나타내기 위해 예약되어 있는 장치.
  44. 삭제
  45. 삭제
  46. 삭제
  47. 삭제
  48. 삭제
  49. 삭제
  50. 삭제
  51. 삭제
  52. 삭제
  53. 삭제
  54. 삭제
  55. 삭제
  56. 삭제
  57. 장치로서,
    명령어 집합을 실행하도록 구성되어 있는 프로세서
    를 포함하며,
    상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 베이스 연산 필드, 수정자 필드, 데이터 요소 폭 필드, 및 보강 연산 필드를 포함하는 복수의 필드들을 가지며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드에서의 상이한 값들을 통해, 복수의 상이한 벡터 연산들의 지정을 지원하고, 상기 복수의 벡터 연산들 각각은 복수의 데이터 요소들을 상이한 데이터 요소 위치들에 포함하는 목적지 벡터 피연산자를 생성하며, 상기 제1 명령어 형식은, 상기 수정자 필드에서의 상이한 값들을 통해, 메모리 액세스 연산 및 메모리 액세스 없음 연산의 지정을 지원하고, 상기 수정자 필드의 내용이 스케일링된 변위를 갖는 메모리 액세스 연산을 지정할 때, 상기 제1 명령어 형식은 변위 인자 필드를 포함하며, 상기 베이스 연산 필드, 상기 수정자 필드, 상기 데이터 요소 폭 필드, 및 상기 보강 연산 필드 각각은 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 하나의 값만을 저장할 수 있으며,
    상기 프로세서는,
    명령어 스트림들에서 출현하는 상기 제1 명령어 형식으로 된 명령어들을 실행하는 프로세서 파이프라인을 포함하고,
    상기 파이프라인은,
    그 상이한 어커런스들에서 상기 수정자 필드의 내용에 기초하여, 스케일링된 변위를 갖는 메모리 액세스를 지정하는 상기 제1 명령어 형식으로 된 명령어들의 어커런스들과 지정하지 않는 어커런스들을 구분해주고;
    상기 수정자 필드의 내용을 통해 스케일링된 변위를 갖는 메모리 액세스를 지정하는 어커런스들에 대해, 상기 베이스 연산 필드, 상기 데이터 요소 폭 필드, 및 상기 보강 연산 필드 중 2개 이상의 내용에 기초하여, 복수의 메모리 액세스 크기들을 구분해주며;
    상기 수정자 필드의 내용을 통해 스케일링된 변위를 갖는 메모리 액세스를 지정하는 어커런스들 각각에 대해, 상기 메모리 액세스의 크기를 상기 변위 인자 필드의 내용과 곱하는 것에 기초하여 스케일링된 변위를 결정 - 상기 스케일링된 변위는 주소를 발생하는 데 사용되는 것임 - 하도록 구성되어 있는 장치.
  58. 삭제
  59. 삭제
  60. 제57항에 있어서, 상기 수정자 필드의 내용이 스케일링된 변위를 갖는 메모리 액세스 연산을 지정할 때, 스케일, 인덱스, 및 베이스가 상기 제1 명령어 형식의 필드들로부터 풀링되고, 상기 스케일, 인덱스, 베이스 및 스케일링된 변위는 주소를 발생하는 데 사용되는 장치.
  61. 제60항에 있어서, 상기 스케일은 2 비트 스케일 필드로부터 풀링되고, 상기 인덱스는 1 비트 X 필드 및 3 비트 XXX 필드의 조합으로부터 풀링되며, 상기 베이스는 1 비트 B 필드 및 3 비트 BBB의 조합으로부터 풀링되는 장치.
  62. 제57항 또는 제61항에 있어서, 상기 복수의 메모리 액세스 크기들을 구분해주기 위해 사용되는 필드들의 선택은 상기 보강 연산 필드 내의 클래스 필드의 내용에 기초하는 장치.
  63. 삭제
  64. 삭제
  65. 제57항, 제60항 및 제61항 중 어느 한 항에 있어서, 상기 변위 인자 필드는 단일 바이트이고, 상기 변위 인자 필드의 내용은 -128 내지 127의 부호있는 값으로서 해석되며, 상기 복수의 메모리 액세스 크기들은 상기 메모리 액세스에서의 바이트 수에 대응하고, 상기 복수의 메모리 액세스 크기들은 1 바이트, 2 바이트, 4 바이트, 8 바이트, 16 바이트, 32 바이트, 및 64 바이트인 장치.
  66. 삭제
  67. 삭제
  68. 삭제
  69. 삭제
  70. 삭제
  71. 삭제
  72. 삭제
  73. 삭제
  74. 삭제
  75. 삭제
  76. 삭제
  77. 삭제
  78. 장치로서,
    프로세서
    를 포함하며,
    상기 프로세서는,
    각각이 적어도 512 비트 크기인 복수의 아키텍처 벡터 레지스터들(architectural vector registers), 및
    구성가능 기입 마스크들을 저장하는 적어도 64 비트 크기인 복수의 아키텍처 기입 마스크 레지스터들(architectural write mask registers)을 포함하고,
    상기 프로세서는, 명령어 집합을 실행하도록 구성되어 있으며, 상기 명령어 집합은 벡터 친숙형 명령어 형식을 포함하는 복수의 명령어 형식을 포함하고, 상기 벡터 친숙형 명령어 형식으로 된 벡터 명령어들은 복수의 데이터 요소들을 상이한 데이터 요소 위치들에 포함하는 목적지 벡터 피연산자를 생성하는 벡터 연산들을 지정하며, 상기 벡터 친숙형 명령어 형식은,
    상기 벡터 친숙형 명령어 형식을 고유하게 식별해주는 값을 저장하는 1 바이트 형식 필드;
    상기 벡터 친숙형 명령어 형식으로 된 특정의 명령어들에 대해 상기 아키텍처 벡터 레지스터들을 어드레싱하기 위해 3개의 하위 비트의 제1 세트와 결합되는 한 비트를 저장하는 1 비트 R 필드;
    상기 벡터 친숙형 명령어 형식으로 된 특정의 명령어들에 대해 상기 아키텍처 벡터 레지스터들을 어드레싱하기 위해 3개의 하위 비트의 제2 세트와 결합되는 한 비트를 저장하는 1 비트 X 필드;
    상기 벡터 친숙형 명령어 형식으로 된 특정의 명령어들에 대해 상기 아키텍처 벡터 레지스터들을 어드레싱하기 위해 3개의 하위 비트의 제3 세트와 결합되는 한 비트를 저장하는 1 비트 B 필드;
    상기 벡터 친숙형 명령어 형식으로 된 특정의 명령어들에 대해 상기 아키텍처 벡터 레지스터들을 어드레싱하기 위해 상기 R 필드의 비트와 3개의 하위 비트의 상기 제1 세트의 상기 결합에 최상위 비트로서 부가되는 한 비트를 저장하는 1 비트 R' 필드;
    베이스 연산 필드의 일부인 4 비트 연산코드 맵;
    상기 벡터 친숙형 명령어 형식으로 된 특정의 명령어들에 대해 32 비트 데이터 요소 크기와 64 비트 데이터 요소 크기를 구분해주기 위해 한 비트를 저장하는 1 비트 데이터 요소 폭(W) 필드;
    상기 벡터 친숙형 명령어 형식으로 된 특정의 명령어들에 대해 상기 아키텍처 벡터 레지스터들을 어드레싱하기 위해 사용되는 하위 4 비트를 저장하는 4 비트 V 필드;
    2가지 명령어 템플릿 클래스를 구분해주기 위해 사용되는 한 비트를 저장하는 1 비트 클래스(U) 필드;
    상기 베이스 연산 필드의 일부인 2 비트 프리픽스 인코딩 필드;
    반올림 유형 연산 필드, 데이터 변환 유형 연산 필드, 축출 힌트 필드, 기입 마스크 제어 필드, 또는 예약된 필드로서 해석되는 1 비트 알파 필드 - 상기 기입 마스크 제어 필드의 내용은 병합 기입 마스크 및 제로화 기입 마스크 중에서 선택을 함 - ;
    상기 클래스 필드의 내용이 제1 클래스를 나타낼 때 수정자 필드의 내용 및 상기 알파 필드의 내용에 따라 전체 반올림 제어 필드, 데이터 변환 필드, 또는 데이터 조작 필드로서 해석되고, 상기 클래스 필드의 내용이 제2 클래스를 나타낼 때 상기 벡터 친숙형 명령어 형식으로 된 특정의 명령어들에 대해 2 비트 반올림 연산 필드, 2 비트 벡터 길이 필드, 또는 2 비트 벡터 길이 필드 및 그 뒤에 오는 브로드캐스트 필드를 포함하는 것으로 해석되는 3 비트 베타 필드;
    상기 벡터 친숙형 명령어 형식으로 된 특정의 명령어들에 대해 상기 아키텍처 벡터 레지스터들을 어드레싱하기 위해 상기 V 필드의 4 비트에 최상위 비트로서 부가되는 한 비트를 저장하는 1 비트 V' 필드;
    예약되어 있는 하나의 값을 제외하고, 모두가 상기 아키텍처 기입 마스크 레지스터들의 상이한 것들을 어드레싱하는 상이한 값들을 저장하는 3 비트 기입 마스크 필드 - 상기 구성가능 기입 마스크들 각각은, 데이터 요소 위치별로, 상기 벡터 명령어의 벡터 연산의 결과들이 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 하는지 여부를 지정하는 반면, 상기 하나의 예약된 값은 상기 벡터 명령어의 벡터 연산의 결과들 모두가 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 한다는 것을 나타내기 위한 것임 - ;
    상기 베이스 연산 필드의 일부인 한 바이트를 저장하는 1 바이트 실제 연산코드 필드 - 상기 베이스 연산 필드의 내용은 상이한 베이스 연산들을 구분해줌 - ; 및
    메모리 액세스를 필요로 하는 연산과 그렇지 않은 연산을 구분해주기 위해 사용되는 2 비트를 저장하는 상기 수정자 필드를 상기의 크기 및 상기의 순서로 포함하는 장치.
  79. 삭제
  80. 제78항에 있어서, 상기 3 비트 베타 필드가 상기 2 비트 반올림 연산 필드 또는 상기 2 비트 벡터 길이 필드를 포함하는 것으로 해석될 때, 상기 3 비트 베타 필드는 상기 2 비트 반올림 연산 필드 및 상기 2 비트 벡터 길이 필드를 언제 사용해야 하는지를 구분해주기 위해 사용되는 한 비트를 저장하는 1 비트 RL 필드를 포함하는 것으로 해석되는 장치.
  81. 제78항 또는 제80항에 있어서,
    상기 벡터 친숙형 명령어 형식은 또한 상기 수정자 필드 이후에,
    3 비트 MODR/M.rEg 필드, 및
    3 비트 MODR/M.r/m 필드를 상기의 크기 및 상기의 순서로 포함하고,
    상기 벡터 친숙형 명령어 형식은 또한 상기 수정자 필드의 내용이 스케일링된 변위를 갖는 메모리 액세스 연산을 나타낼 때, 상기 MODR/M.r/m 필드 이후에,
    2 비트 스케일 필드;
    3 비트 XXX 필드;
    3 비트 BBB 필드; 및
    8 비트 변위 인자 필드를 상기의 크기 및 상기의 순서로 포함하며,
    스케일, 인덱스, 및 베이스는, 각각, 상기 2 비트 스케일 필드, 상기 1 비트 X 필드와 상기 3 비트 XXX 필드의 결합, 및 상기 1 비트 B 필드와 상기 3 비트 BBB 필드의 결합으로부터 풀링되고, 스케일링된 변위는 메모리 액세스의 크기와 상기 변위 인자 필드의 내용을 곱한 것에 기초하여 발생되며, 상기 스케일, 인덱스, 베이스 및 스케일링된 변위는 상기 메모리 액세스를 위한 주소를 발생하는 데 사용되고,
    상기 주소는 2스케일 + 상기 인덱스 + 상기 베이스 + 상기 스케일링된 변위에 의해 발생되는
    장치.
  82. 삭제
  83. 삭제
  84. 삭제
  85. 삭제
  86. 삭제
  87. 장치로서,
    명령어 집합을 실행하도록 구성되어 있는 프로세서
    를 포함하며,
    상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 베이스 연산 필드, 수정자 필드, 클래스 필드, 알파 필드, 및 베타 필드를 포함하는 복수의 필드들을 가지며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드, 상기 수정자 필드, 상기 클래스 필드, 상기 알파 필드, 및 상기 베타 필드에 상이한 값들을 배치하는 것을 통해, 상이한 버전의 베이스 연산들 및 상이한 보강 연산들을 지원하며, 명령어 스트림들에서 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 상기 상이한 값들 중 하나만이 상기 베이스 연산 필드, 상기 수정자 필드, 상기 클래스 필드, 상기 알파 필드, 및 상기 베타 필드 각각에 배치될 수 있고, 상기 클래스 필드에서의 제1 값은 제1 클래스를 지정하고 제2 값은 제2 클래스를 지정하며,
    상기 프로세서는,
    그 상이한 어커런스들에서 상기 수정자 필드의 내용에 기초하여, 메모리 액세스를 지정하는 상기 제1 명령어 형식으로 된 명령어들의 어커런스들과 지정하지 않는 어커런스들을 구분해주고 - 상기 수정자 필드의 내용이 메모리 액세스를 지정할 때, 상기 베타 필드는 브로드캐스트 필드 및 벡터 길이 필드로서 해석되고, 상기 수정자 필드의 내용이 메모리 액세스를 지정하지 않을 때, 상기 베타 필드의 일부는 RL 필드로서 해석됨 - ;
    상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 브로드캐스트 필드 및 상기 벡터 길이 필드로서 해석되는 것에 기초하여, 브로드캐스트해야 하는지 여부 및 복수의 벡터 길이들 중 어느 것을 사용해야 하는지를 구분해주며;
    상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않는 어커런스들 각각에 대해, 그 어커런스에서 상기 RL 필드의 내용에 기초하여, 반올림 유형 연산으로 또는 벡터 길이 유형 연산으로 보강해야 하는지를 구분해주고 - 상기 RL 필드의 내용이 상기 반올림 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 반올림 연산 필드로서 해석되고, 상기 RL 필드의 내용이 상기 벡터 길이 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 그 대신에 상기 벡터 길이 필드로서 해석됨 - ;
    상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 반올림 연산 필드로서 해석되는 것에 기초하여, 복수의 반올림 연산들 중 어느 것을 적용해야 하는지를 구분해주며;
    상기 어커런스들 각각에 대해, 그 어커런스에서 상기 알파 필드의 내용 및 상기 알파 필드가 기입 마스크 제어 필드로서 해석되는 것에 기초하여, 병합 기입 마스크 연산을 수행해야 하는지 또는 제로화 기입 마스크 연산을 수행해야 하는지를 구분해주는 것과 같이
    상기 제2 클래스를 지정하는 상기 클래스 필드의 내용에 의해 상기 제1 명령어 형식으로 된 명령어들의 어커런스들을 디코딩하는 디코딩 유닛을 포함하는 장치.
  88. 삭제
  89. 제87항에 있어서, 상기 제1 명령어 형식은 데이터 요소 폭 필드를 추가로 포함하고, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 상이한 데이터 요소 폭들의 지정을 지원하며,
    상기 제1 명령어 형식은 상기 베이스 연산 필드 내에 실제 연산코드 필드를 추가로 포함하고, 상기 실제 연산코드 필드의 내용은, 상기 어커런스들 각각에 대해, 상기 데이터 요소 폭 필드의 내용이 64 비트 데이터 요소 크기 및 32 비트 데이터 요소 크기 중에서 선택을 하는지 16 비트 데이터 요소 크기 및 8 비트 데이터 요소 크기 중에서 선택을 하는지를 구분해주는
    는 장치.
  90. 삭제
  91. 삭제
  92. 삭제
  93. 삭제
  94. 삭제
  95. 삭제
  96. 삭제
  97. 제87항 또는 제89항에 있어서, 상기 제2 클래스는 상기 수정자 필드의 내용이 스케일링된 변위를 갖는 메모리 액세스 연산을 지정하는 것을 지원하고, 이 경우에, 상기 제1 명령어 형식은 변위 인자 필드 및 스케일, 인덱스, 및 베이스가 풀링되는 필드들을 포함하며, 상기 스케일링된 변위는 메모리 액세스의 크기와 상기 변위 인자 필드의 내용을 곱한 것에 기초하여 발생되고, 상기 스케일, 인덱스, 베이스 및 스케일링된 변위는 상기 메모리 액세스를 위한 주소를 발생하는 데 사용되는 장치.
  98. 삭제
  99. 삭제
  100. 삭제
  101. 장치로서,
    명령어 집합을 실행하도록 구성되어 있는 프로세서
    를 포함하며,
    상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 제1 복수의 템플릿을 포함하고, 상기 제1 명령어 형식은 베이스 연산 필드, 알파 필드, 데이터 요소 폭(W) 필드, 및 기입 마스크 필드를 포함하는 복수의 필드들을 가지며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드에서의 상이한 값들을 통해, 상이한 벡터 연산들의 지정을 지원하고, 상기 벡터 연산들 각각은 복수의 데이터 요소들을 상이한 데이터 요소 위치들에 포함하는 목적지 벡터 피연산자를 생성하며, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 상이한 데이터 요소 폭들의 지정을 지원하며, 상기 베이스 연산 필드, 상기 알파 필드, 상기 데이터 요소 폭 필드, 및 상기 기입 마스크 필드 각각은 명령어 스트림들에서 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 하나의 값만을 저장할 수 있으며,
    상기 프로세서는
    상기 어커런스들 각각에 대해, 상기 데이터 요소 폭 필드의 내용에 기초하여, 상기 데이터 요소 폭들 중 어느 것을 사용해야 하는지를 구분해주며;
    상기 어커런스들 각각에 대해, 상기 알파 필드의 내용 및 상기 알파 필드가 기입 마스크 제어 필드로서 해석되는 것에 기초하여, 병합 기입 마스크 연산을 수행해야 하는지 제로화 기입 마스크 연산을 수행해야 하는지를 구분해주고;
    상기 어커런스들 각각에 대해, 그 어커런스에 대한 상기 기입 마스크 필드의 내용 및 상기 데이터 요소 폭에 기초하여, 상기 어커런스의 벡터 연산으로부터 얻어지는 데이터 요소들 중 어느 것이 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 하는지 여부를 구분해주는 것 - 상기 기입 마스크 필드에 배치될 수 있는 상이한 값들 중 하나는 상기 어커런스의 벡터 연산의 결과들 모두가 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 한다는 것을 나타내기 위해 예약되어 있고, 상기 기입 마스크 필드에 배치될 수 있는 상이한 값들 중 다른 것들은 구성가능 기입 마스크들을 저장하는 상이한 기입 마스크 레지스터들을 구분해주며, 상기 어커런스에 대한 데이터 요소 폭은 어느 데이터 요소 위치들이 상기 구성가능 기입 마스크들의 어느 비트들과 대응하는지를 구분해줌 - 과 같이
    상기 제1 복수의 템플릿에서 상기 명령어들의 어커런스들을 디코딩하는 디코딩 유닛을 포함하는 장치.
  102. 삭제
  103. 제101항에 있어서, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 8 비트 데이터 요소 폭, 16 비트 데이터 요소 폭, 32 비트 데이터 요소 폭 및 64 비트 데이터 요소 폭의 지정을 지원하는 장치.
  104. 삭제
  105. 삭제
  106. 삭제
  107. 삭제
  108. 장치로서,
    명령어 집합을 실행하도록 구성되어 있는 프로세서
    를 포함하며,
    상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 베이스 연산 필드, 수정자 필드, 및 베타 필드를 포함하는 복수의 필드들을 가지며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드, 상기 수정자 필드, 및 상기 베타 필드에 상이한 값들을 배치하는 것을 통해, 상이한 버전의 베이스 연산들 및 상이한 보강 연산들을 지원하며, 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 상기 상이한 값들 중 하나만이 상기 베이스 연산 필드, 상기 수정자 필드, 및 상기 베타 필드 각각에 배치될 수 있고,
    상기 프로세서는,
    상기 제1 명령어 형식으로 된 복수의 명령어들을 디코딩하는 디코딩 유닛을 포함하고,
    상기 디코딩 유닛은,
    그 상이한 명령어들에서 상기 수정자 필드의 내용에 기초하여, 상기 복수의 명령어들 중 메모리 액세스를 지정하는 명령어들과 지정하지 않는 명령어들을 구분해주고 - 상기 수정자 필드의 내용이 메모리 액세스를 지정하지 않을 때, 상기 베타 필드의 일부는 RL 필드로서 해석됨 - ;
    상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않는 복수의 명령어들 각각에 대해, 그 명령어에서 상기 RL 필드의 내용에 기초하여, 반올림 유형 연산으로 또는 벡터 길이 유형 연산으로 보강해야 하는지를 구분해주며 - 상기 RL 필드의 내용이 상기 반올림 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 반올림 연산 필드로서 해석되고, 상기 RL 필드의 내용이 상기 벡터 길이 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 그 대신에 벡터 길이 필드로서 해석됨 - ;
    상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 복수의 명령어들 각각에 대해, 그 명령어에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 반올림 연산 필드로서 해석되는 것에 기초하여, 복수의 반올림 연산들 중 어느 것을 적용해야 하는지를 구분해주고;
    상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 벡터 길이 유형 연산을 지정하는 복수의 명령어들 각각에 대해, 그 명령어에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 벡터 길이 필드로서 해석되는 것에 기초하여, 복수의 벡터 길이들 중 어느 것을 사용해야 하는지를 구분해주는 것과 같이
    상기 제1 명령어 형식으로 된 상기 복수의 명령어들을 디코딩하도록 구성되어 있는 장치.
  109. 삭제
  110. 삭제
  111. 제108항에 있어서, 상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 명령어들 각각에 대해, 모든 부동 소수점 예외 보고가 디스에이블되는 장치.
  112. 삭제
  113. 삭제
  114. 삭제
  115. 제108항에 있어서, 상기 제1 명령어 형식은 데이터 요소 폭 필드를 추가로 포함하고, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 상이한 데이터 요소 폭들의 지정을 지원하며,
    상기 제1 명령어 형식은 상기 베이스 연산 필드 내에 실제 연산코드 필드를 추가로 포함하고, 상기 실제 연산코드 필드의 내용은, 상기 어커런스들 각각에 대해, 상기 데이터 요소 폭 필드의 내용이 64 비트 데이터 요소 크기 및 32 비트 데이터 요소 크기 중에서 선택을 하는지 16 비트 데이터 요소 크기 및 8 비트 데이터 요소 크기 중에서 선택을 하는지를 구분해주는
    장치.
  116. 삭제
  117. 삭제
  118. 삭제
  119. 삭제
  120. 삭제
  121. 삭제
  122. 삭제
  123. 삭제
  124. 삭제
  125. 삭제
  126. 삭제
  127. 삭제
  128. 삭제
KR1020137029045A 2011-04-01 2011-09-30 벡터 친숙형 명령어 형식 및 그의 실행 KR101595637B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201161471043P 2011-04-01 2011-04-01
US61/471,043 2011-04-01
PCT/US2011/054303 WO2012134532A1 (en) 2011-04-01 2011-09-30 Vector friendly instruction format and execution thereof

Publications (2)

Publication Number Publication Date
KR20130137700A KR20130137700A (ko) 2013-12-17
KR101595637B1 true KR101595637B1 (ko) 2016-02-18

Family

ID=46931820

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137029045A KR101595637B1 (ko) 2011-04-01 2011-09-30 벡터 친숙형 명령어 형식 및 그의 실행

Country Status (11)

Country Link
US (7) US20130305020A1 (ko)
EP (4) EP3422178B1 (ko)
JP (3) JP5739055B2 (ko)
KR (1) KR101595637B1 (ko)
CN (5) CN106406817B (ko)
DE (1) DE102020102331A1 (ko)
ES (1) ES2943248T3 (ko)
GB (1) GB2502936A (ko)
PL (1) PL3422178T3 (ko)
TW (2) TWI506546B (ko)
WO (1) WO2012134532A1 (ko)

Families Citing this family (92)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106406817B (zh) 2011-04-01 2019-06-14 英特尔公司 向量友好指令格式及其执行
US9411583B2 (en) * 2011-12-22 2016-08-09 Intel Corporation Vector instruction for presenting complex conjugates of respective complex numbers
WO2013095553A1 (en) 2011-12-22 2013-06-27 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
US9619236B2 (en) 2011-12-23 2017-04-11 Intel Corporation Apparatus and method of improved insert instructions
CN107025093B (zh) 2011-12-23 2019-07-09 英特尔公司 用于指令处理的装置、用于处理指令的方法和机器可读介质
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
WO2013095612A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for broadcasting from a general purpose register to a vector register
CN107220029B (zh) * 2011-12-23 2020-10-27 英特尔公司 掩码置换指令的装置和方法
US9411739B2 (en) * 2012-11-30 2016-08-09 Intel Corporation System, method and apparatus for improving transactional memory (TM) throughput using TM region indicators
US9189236B2 (en) * 2012-12-21 2015-11-17 Intel Corporation Speculative non-faulting loads and gathers
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9207942B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses,and methods for zeroing of bits in a data element
US9817663B2 (en) * 2013-03-19 2017-11-14 Apple Inc. Enhanced Macroscalar predicate operations
US9645820B2 (en) 2013-06-27 2017-05-09 Intel Corporation Apparatus and method to reserve and permute bits in a mask register
US9405539B2 (en) 2013-07-31 2016-08-02 Intel Corporation Providing vector sub-byte decompression functionality
CN104346285B (zh) * 2013-08-06 2018-05-11 华为技术有限公司 内存访问处理方法、装置及系统
US20150052330A1 (en) * 2013-08-14 2015-02-19 Qualcomm Incorporated Vector arithmetic reduction
US10296489B2 (en) * 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit shuffle
US10296334B2 (en) * 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit gather
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
GB2540944B (en) * 2015-07-31 2018-02-21 Advanced Risc Mach Ltd Vector operand bitsize control
GB2540939B (en) * 2015-07-31 2019-01-23 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
US10768935B2 (en) * 2015-10-29 2020-09-08 Intel Corporation Boosting local memory performance in processor graphics
US10691456B2 (en) 2015-11-13 2020-06-23 International Business Machines Corporation Vector store instruction having instruction-specified byte count to be stored supporting big and little endian processing
US10691453B2 (en) 2015-11-13 2020-06-23 International Business Machines Corporation Vector load with instruction-specified byte count less than a vector size for big and little endian processing
US9990317B2 (en) * 2015-11-24 2018-06-05 Qualcomm Incorporated Full-mask partial-bit-field (FM-PBF) technique for latency sensitive masked-write
US10180829B2 (en) * 2015-12-15 2019-01-15 Nxp Usa, Inc. System and method for modulo addressing vectorization with invariant code motion
US10338920B2 (en) * 2015-12-18 2019-07-02 Intel Corporation Instructions and logic for get-multiple-vector-elements operations
US20170185402A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Instructions and logic for bit field address and insertion
US10019264B2 (en) * 2016-02-24 2018-07-10 Intel Corporation System and method for contextual vectorization of instructions at runtime
GB2548602B (en) * 2016-03-23 2019-10-23 Advanced Risc Mach Ltd Program loop control
CN107315718B (zh) * 2016-04-26 2020-08-21 中科寒武纪科技股份有限公司 一种用于执行向量内积运算的装置和方法
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US10282204B2 (en) * 2016-07-02 2019-05-07 Intel Corporation Systems, apparatuses, and methods for strided load
US10176110B2 (en) 2016-07-18 2019-01-08 International Business Machines Corporation Marking storage keys to indicate memory used to back address translation structures
US10761849B2 (en) 2016-09-22 2020-09-01 Intel Corporation Processors, methods, systems, and instruction conversion modules for instructions with compact instruction encodings due to use of context of a prior instruction
US10268580B2 (en) * 2016-09-30 2019-04-23 Intel Corporation Processors and methods for managing cache tiering with gather-scatter vector semantics
US11023231B2 (en) * 2016-10-01 2021-06-01 Intel Corporation Systems and methods for executing a fused multiply-add instruction for complex numbers
EP3336691B1 (en) 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
EP3336692B1 (en) 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
US10657126B2 (en) * 2016-12-23 2020-05-19 Cadreon LLC Meta-join and meta-group-by indexes for big data
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
WO2018154273A1 (en) * 2017-02-23 2018-08-30 Arm Limited Element by vector operations in a data processing apparatus
EP3602277B1 (en) 2017-03-20 2022-08-03 Intel Corporation Systems, methods, and apparatuses for dot production operations
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
GB2564853B (en) * 2017-07-20 2021-09-08 Advanced Risc Mach Ltd Vector interleaving in a data processing apparatus
CN108958801B (zh) 2017-10-30 2021-06-25 上海寒武纪信息科技有限公司 神经网络处理器及使用处理器执行向量最大值指令的方法
US11360930B2 (en) * 2017-12-19 2022-06-14 Samsung Electronics Co., Ltd. Neural processing accelerator
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
CN108388446A (zh) * 2018-02-05 2018-08-10 上海寒武纪信息科技有限公司 运算模块以及方法
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US11366663B2 (en) 2018-11-09 2022-06-21 Intel Corporation Systems and methods for performing 16-bit floating-point vector dot product instructions
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11886875B2 (en) * 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US11099848B1 (en) * 2020-01-30 2021-08-24 Arm Limited Overlapped-immediate/register-field-specifying instruction
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
KR20220018776A (ko) * 2020-08-07 2022-02-15 삼성전자주식회사 반도체 메모리 장치
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
US11379390B1 (en) * 2020-12-14 2022-07-05 International Business Machines Corporation In-line data packet transformations
US20220336456A1 (en) * 2021-04-19 2022-10-20 Samsung Electronics Co., Ltd. Integrated circuit devices including stacked gate structures with different dimensions
US20230068484A1 (en) * 2021-08-25 2023-03-02 International Business Machines Corporation Independent gate length tunability for stacked transistors

Family Cites Families (83)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3189094A (en) * 1963-01-03 1965-06-15 Halliburton Co Firing apparatus for gun perforators
JPS57209570A (en) 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
JP2539357B2 (ja) * 1985-03-15 1996-10-02 株式会社日立製作所 デ−タ処理装置
US4873630A (en) 1985-07-31 1989-10-10 Unisys Corporation Scientific processor to support a host processor referencing common memory
US4945479A (en) * 1985-07-31 1990-07-31 Unisys Corporation Tightly coupled scientific processing system
JPH0724013B2 (ja) 1986-09-10 1995-03-15 株式会社日立製作所 ベクトルプロセツサ
JPH04156613A (ja) * 1990-10-20 1992-05-29 Fujitsu Ltd 命令バッファ装置
JP2956707B2 (ja) * 1990-10-29 1999-10-04 富士通株式会社 情報処理装置
US5207132A (en) 1991-10-16 1993-05-04 Textron Inc. Elliptical lobed drive system
US5418973A (en) * 1992-06-22 1995-05-23 Digital Equipment Corporation Digital computer system with cache controller coordinating both vector and scalar operations
AU4804493A (en) * 1992-08-07 1994-03-03 Thinking Machines Corporation Massively parallel computer including auxiliary vector processor
JP3248992B2 (ja) * 1993-07-13 2002-01-21 富士通株式会社 マルチプロセッサ
US5446912A (en) 1993-09-30 1995-08-29 Intel Corporation Partial width stalls within register alias table
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
US5903769A (en) 1997-03-31 1999-05-11 Sun Microsystems, Inc. Conditional vector processing
US6505290B1 (en) 1997-09-05 2003-01-07 Motorola, Inc. Method and apparatus for interfacing a processor to a coprocessor
US6189094B1 (en) * 1998-05-27 2001-02-13 Arm Limited Recirculating register file
US6185670B1 (en) * 1998-10-12 2001-02-06 Intel Corporation System for reducing number of opcodes required in a processor using an instruction format including operation class code and operation selector code fields
US7529907B2 (en) * 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
US8127121B2 (en) * 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
JP2002536712A (ja) * 1999-01-28 2002-10-29 エーティーアイ インターナショナル エスアールエル 第2のアーキテクチャのコンピュータにおける第1のコンピュータアーキテクチャ用プログラムの実行
US6625724B1 (en) 2000-03-28 2003-09-23 Intel Corporation Method and apparatus to support an expanded register set
US6857061B1 (en) * 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US6788303B2 (en) * 2001-02-27 2004-09-07 3Dlabs Inc., Ltd Vector instruction set
US6986025B2 (en) * 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
US7529912B2 (en) * 2002-02-12 2009-05-05 Via Technologies, Inc. Apparatus and method for instruction-level specification of floating point format
US7941651B1 (en) * 2002-06-27 2011-05-10 Intel Corporation Method and apparatus for combining micro-operations to process immediate data
US6986023B2 (en) * 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
JP2005535966A (ja) * 2002-08-09 2005-11-24 インテル・コーポレーション アライメントまたはブロードキャスト命令を含むマルチメディア・コプロセッサの制御メカニズム
US7917734B2 (en) 2003-06-30 2011-03-29 Intel Corporation Determining length of instruction with multiple byte escape code based on information from other than opcode byte
US7734748B1 (en) * 2003-10-03 2010-06-08 Nortel Networks Limited Method and apparatus for intelligent management of a network element
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
US7302627B1 (en) * 2004-04-05 2007-11-27 Mimar Tibet Apparatus for efficient LFSR calculation in a SIMD processor
US7052968B1 (en) * 2004-04-07 2006-05-30 Advanced Micro Devices, Inc. Method and system for aligning IC die to package substrate
US7493474B1 (en) * 2004-11-10 2009-02-17 Altera Corporation Methods and apparatus for transforming, loading, and executing super-set instructions
US7430207B2 (en) 2005-02-07 2008-09-30 Reti Corporation Preemptive weighted round robin scheduler
US20070074004A1 (en) 2005-09-28 2007-03-29 Arc International (Uk) Limited Systems and methods for selectively decoupling a parallel extended instruction pipeline
US7457938B2 (en) * 2005-09-30 2008-11-25 Intel Corporation Staggered execution stack for vector processing
US7627735B2 (en) 2005-10-21 2009-12-01 Intel Corporation Implementing vector memory operations
US20070157030A1 (en) * 2005-12-30 2007-07-05 Feghali Wajdi K Cryptographic system component
US7725682B2 (en) * 2006-01-10 2010-05-25 International Business Machines Corporation Method and apparatus for sharing storage and execution resources between architectural units in a microprocessor using a polymorphic function unit
US9710269B2 (en) * 2006-01-20 2017-07-18 Qualcomm Incorporated Early conditional selection of an operand
US8010953B2 (en) * 2006-04-04 2011-08-30 International Business Machines Corporation Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine
US7676647B2 (en) * 2006-08-18 2010-03-09 Qualcomm Incorporated System and method of processing data using scalar/vector instructions
KR100813533B1 (ko) * 2006-09-13 2008-03-17 주식회사 하이닉스반도체 반도체 메모리 장치 및 그 데이터 마스크 방법
US9223751B2 (en) * 2006-09-22 2015-12-29 Intel Corporation Performing rounding operations responsive to an instruction
US8572354B2 (en) * 2006-09-28 2013-10-29 3Dlabs Inc., Ltd. Programmable logic unit and method for translating and processing instructions using interpretation registers
US20080100628A1 (en) 2006-10-31 2008-05-01 International Business Machines Corporation Single Precision Vector Permute Immediate with "Word" Vector Write Mask
US7836278B2 (en) * 2007-07-25 2010-11-16 Advanced Micro Devices, Inc. Three operand instruction extension for X86 architecture
TWI351179B (en) 2007-08-20 2011-10-21 Lite On Technology Corp Data processing method and computer system medium thereof
US8561037B2 (en) * 2007-08-29 2013-10-15 Convey Computer Compiler for generating an executable comprising instructions for a plurality of different instruction sets
EP2210171A1 (en) 2007-11-05 2010-07-28 Sandbridge Technologies, Inc. Method of encoding register instruction fields
US8667250B2 (en) 2007-12-26 2014-03-04 Intel Corporation Methods, apparatus, and instructions for converting vector data
US20090172348A1 (en) 2007-12-26 2009-07-02 Robert Cavin Methods, apparatus, and instructions for processing vector data
US9529592B2 (en) 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US8281109B2 (en) 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
US8681173B2 (en) 2007-12-31 2014-03-25 Intel Corporation Device, system, and method for improving processing efficiency by collectively applying operations
US7984273B2 (en) 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US8108614B2 (en) 2007-12-31 2012-01-31 Eric Sprangle Mechanism for effectively caching streaming and non-streaming data patterns
US8447962B2 (en) 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
GB2456775B (en) 2008-01-22 2012-10-31 Advanced Risc Mach Ltd Apparatus and method for performing permutation operations on data
US8046400B2 (en) * 2008-04-10 2011-10-25 Via Technologies, Inc. Apparatus and method for optimizing the performance of x87 floating point addition instructions in a microprocessor
US20100024183A1 (en) * 2008-06-30 2010-02-04 Cuprys Lawrence M Removable tool for a display assembly
JP5357475B2 (ja) * 2008-09-09 2013-12-04 ルネサスエレクトロニクス株式会社 データプロセッサ
US8326904B2 (en) * 2009-01-27 2012-12-04 International Business Machines Corporation Trigonometric summation vector execution unit
US8335910B2 (en) * 2009-05-19 2012-12-18 Via Technologies, Inc. Early release of cache data with start/end marks when instructions are only partially present
US8533438B2 (en) * 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
US8627042B2 (en) 2009-12-30 2014-01-07 International Business Machines Corporation Data parallel function call for determining if called routine is data parallel
US9141386B2 (en) 2010-09-24 2015-09-22 Intel Corporation Vector logical reduction operation implemented using swizzling on a semiconductor chip
US9092213B2 (en) 2010-09-24 2015-07-28 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation
US8667042B2 (en) 2010-09-24 2014-03-04 Intel Corporation Functional unit for vector integer multiply add instruction
US8972698B2 (en) 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
US20120185670A1 (en) 2011-01-14 2012-07-19 Toll Bret L Scalar integer instructions capable of execution with three registers
CN106406817B (zh) * 2011-04-01 2019-06-14 英特尔公司 向量友好指令格式及其执行
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
US20120254593A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for jumps using a mask register
US20120254589A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian System, apparatus, and method for aligning registers
WO2013095553A1 (en) 2011-12-22 2013-06-27 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
CN107092465B (zh) 2011-12-23 2021-06-29 英特尔公司 用于提供向量混合和置换功能的指令和逻辑
KR101786453B1 (ko) 2011-12-28 2017-10-18 인텔 코포레이션 집적 회로 디바이스의 트랜지스터들을 적층한 장치 및 제조방법
CN104054181B (zh) * 2011-12-30 2017-10-20 英特尔公司 全包围栅晶体管的可变栅极宽度

Also Published As

Publication number Publication date
JP2017079078A (ja) 2017-04-27
CN107608716B (zh) 2020-12-15
CN104951277A (zh) 2015-09-30
EP3422178B1 (en) 2023-02-15
GB201317902D0 (en) 2013-11-27
CN106406817B (zh) 2019-06-14
CN107608716A (zh) 2018-01-19
PL3422178T3 (pl) 2023-06-26
US20240061683A1 (en) 2024-02-22
EP3805921A2 (en) 2021-04-14
US20190227800A1 (en) 2019-07-25
US20190196830A1 (en) 2019-06-27
CN106406817A (zh) 2017-02-15
US20220129274A1 (en) 2022-04-28
JP2014509764A (ja) 2014-04-21
TW201520890A (zh) 2015-06-01
JP6339164B2 (ja) 2018-06-06
US11210096B2 (en) 2021-12-28
WO2012134532A1 (en) 2012-10-04
US20130305020A1 (en) 2013-11-14
EP4250101A2 (en) 2023-09-27
US20200394042A1 (en) 2020-12-17
TW201243715A (en) 2012-11-01
EP3422178A3 (en) 2019-04-10
EP2695054A1 (en) 2014-02-12
US10795680B2 (en) 2020-10-06
GB2502936A (en) 2013-12-11
ES2943248T3 (es) 2023-06-12
CN112463219A (zh) 2021-03-09
US20140149724A1 (en) 2014-05-29
JP5739055B2 (ja) 2015-06-24
EP3805921B1 (en) 2023-09-06
US11740904B2 (en) 2023-08-29
EP4250101A3 (en) 2024-01-03
US9513917B2 (en) 2016-12-06
EP3422178A2 (en) 2019-01-02
EP2695054B1 (en) 2018-08-15
DE102020102331A1 (de) 2020-09-03
EP2695054A4 (en) 2017-05-31
CN103502935A (zh) 2014-01-08
JP2015158940A (ja) 2015-09-03
JP6058732B2 (ja) 2017-01-11
TWI506546B (zh) 2015-11-01
EP3805921A3 (en) 2021-06-30
CN104951277B (zh) 2017-11-21
CN103502935B (zh) 2016-10-12
TWI467477B (zh) 2015-01-01
KR20130137700A (ko) 2013-12-17
US11573798B2 (en) 2023-02-07

Similar Documents

Publication Publication Date Title
KR101595637B1 (ko) 벡터 친숙형 명령어 형식 및 그의 실행
KR101692914B1 (ko) Sha256 알고리즘의 메시지 스케줄링을 위한 명령어 세트
TWI489381B (zh) 多暫存器散布指令
KR102508075B1 (ko) 인덱스 및 즉치로 벡터 치환을 수행하기 위한 방법 및 장치
KR101818985B1 (ko) 마스킹된 결과 요소들로의 전파를 이용하여 소스 요소들을 대응하는 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
CN113791820B (zh) 位矩阵乘法
TWI760341B (zh) 用於跨步載入的系統、設備及方法
KR101729424B1 (ko) 128-비트 프로세서에서의 skein256 sha3 알고리즘에 대한 명령어 세트
KR20170099873A (ko) 벡터 비트 셔플을 수행하기 위한 방법 및 장치
KR20170099855A (ko) 마스크 및 벡터 레지스터들 사이의 가변 확장을 위한 방법 및 장치
JP6738579B2 (ja) 命令フローを最適化するチェックを実行するための装置および方法
KR20170096101A (ko) 실행을 위해 데이터 성분들을 로딩하는데 있어서 공간 구역성을 고려하기 위한 장치 및 방법
CN108292228B (zh) 用于基于通道的步进收集的系统、设备和方法
TWI599951B (zh) 用於融合乘法乘法指令的處理器、方法及系統
KR101826707B1 (ko) 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
KR20170097015A (ko) 마스크를 마스크 값들의 벡터로 확장하기 위한 방법 및 장치
JP2017534982A (ja) 4d座標から4dのz曲線インデックスを計算するための機械レベル命令
TWI464676B (zh) 映射源運算元至不同範圍的系統、設備及方法
KR102528073B1 (ko) 벡터 비트 수집을 수행하기 위한 방법 및 장치
KR20170099864A (ko) 마스크 값을 압축하기 위한 방법 및 장치
JP2018506762A (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
FPAY Annual fee payment

Payment date: 20190129

Year of fee payment: 4