KR101595637B1 - 벡터 친숙형 명령어 형식 및 그의 실행 - Google Patents
벡터 친숙형 명령어 형식 및 그의 실행 Download PDFInfo
- 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
Links
- 239000013598 vector Substances 0.000 title claims abstract description 306
- 239000003607 modifier Substances 0.000 claims abstract description 57
- 230000002787 reinforcement Effects 0.000 claims abstract description 14
- 230000015654 memory Effects 0.000 claims description 271
- 238000006073 displacement reaction Methods 0.000 claims description 86
- 238000006243 chemical reaction Methods 0.000 claims description 42
- 238000007667 floating Methods 0.000 claims description 21
- 238000000034 method Methods 0.000 claims description 17
- 230000003190 augmentative effect Effects 0.000 claims description 5
- 230000003416 augmentation Effects 0.000 claims description 4
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 116
- 238000010586 diagram Methods 0.000 description 77
- 238000013501 data transformation Methods 0.000 description 15
- 235000019580 granularity Nutrition 0.000 description 14
- 230000000873 masking effect Effects 0.000 description 14
- 238000012545 processing Methods 0.000 description 13
- 230000001343 mnemonic effect Effects 0.000 description 12
- 230000006870 function Effects 0.000 description 10
- 230000008859 change Effects 0.000 description 8
- 238000013507 mapping Methods 0.000 description 8
- 239000003795 chemical substances by application Substances 0.000 description 7
- 230000006835 compression Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 7
- 238000013519 translation Methods 0.000 description 6
- 230000000295 complement effect Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000001629 suppression Effects 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000010367 cloning Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000002789 length control Methods 0.000 description 1
- 230000005291 magnetic effect Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000005039 memory span Effects 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01L—SEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
- H01L29/00—Semiconductor 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/66—Types of semiconductor device ; Multistep manufacturing processes therefor
- H01L29/66007—Multistep manufacturing processes
- H01L29/66075—Multistep manufacturing processes of devices having semiconductor bodies comprising group 14 or group 13/15 materials
- H01L29/66227—Multistep 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/66409—Unipolar field-effect transistors
- H01L29/66477—Unipolar field-effect transistors with an insulated gate, i.e. MISFET
- H01L29/66553—Unipolar field-effect transistors with an insulated gate, i.e. MISFET using inside spacers, permanent or not
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01L—SEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
- H01L29/00—Semiconductor 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/66—Types of semiconductor device ; Multistep manufacturing processes therefor
- H01L29/68—Types 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/76—Unipolar devices, e.g. field effect transistors
- H01L29/772—Field effect transistors
- H01L29/775—Field effect transistors with one dimensional charge carrier gas channel, e.g. quantum wire FET
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01L—SEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
- H01L29/00—Semiconductor 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/66—Types of semiconductor device ; Multistep manufacturing processes therefor
- H01L29/68—Types 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/76—Unipolar devices, e.g. field effect transistors
- H01L29/772—Field effect transistors
- H01L29/78—Field effect transistors with field effect produced by an insulated gate
- H01L29/7831—Field effect transistors with field effect produced by an insulated gate with multiple gate structure
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01L—SEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
- H01L29/00—Semiconductor 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/66—Types of semiconductor device ; Multistep manufacturing processes therefor
- H01L29/68—Types 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/76—Unipolar devices, e.g. field effect transistors
- H01L29/772—Field effect transistors
- H01L29/78—Field effect transistors with field effect produced by an insulated gate
- H01L29/786—Thin film transistors, i.e. transistors with a channel being at least partly a thin film
- H01L29/78696—Thin 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01L—SEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
- H01L29/00—Semiconductor 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/66—Types 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
관련 출원의 상호 참조
이 출원은 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은 본 발명의 실시예에 따른, 소스 명령어 집합에서의 이진 명령어를 대상 명령어 집합에서의 이진 명령어로 변환하는 소프트웨어 명령어 변환기의 사용을 대비하는 블록도.
도 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)를 사용하는 명령어(이 명령어의 명명법에 대해서는 본 명세서에서 나중에 보다 상세히 기술됨)의 몇몇 예이다.
여기서 [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)으로부터의 제어 흐름도 나타내고 있다. 본 발명의 대안의 실시예는 보다 많은, 보다 적은, 또는 상이한 메모리 액세스 연산을 지원할 수 있다.
앞서 기술한 바와 같이, 블록(442, 448, 454, 460, 468, 및 474)은 데이터 요소 폭에 기초하여 제어 흐름의 변경을 결정하고; 제어 흐름은 이하의 표에 예시되어 있다.
이와 유사하게, 블록(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)으로부터의 제어 흐름도 나타내고 있다. 본 발명의 대안의 실시예는 보다 많은, 보다 적은, 또는 상이한 메모리 액세스 연산을 지원할 수 있다.
앞서 설명된 바와 같이, 블록(415C 내지 415H)은 데이터 요소 폭에 기초하여 제어 흐름의 변경을 결정하고; 제어 흐름은 이하의 표에 예시되어 있다.
브로드캐스트 필드(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)은, 이하의 표에 예시된 바와 같이, 이들 중복된 레지스터 파일에 대해 연산을 행한다.
환언하면, 벡터 길이 필드(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일) 참조):
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에 대한 소개로서 제공되어 있다.
피연산자 표기법
벡터 피연산자 값 표기법
SwizzUpConv, FullUpConv 및 DownConv 함수 규약
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에서 [즉, 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에서 [즉, 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
SwizzleUpConverti32 및 UpConverti32
SwizzleUpConvertf64 및 UpConvertf64
SwizzleUpConvertf32 및 UpConvertf32
Down Conversioni64
Down Conversioni32
Down Conversionf64
Down Conversionf32
UpConvertg32
UpConvertpg32
Down Conversiong32
본 발명의 일 실시예에서, U=1(클래스 B)과 관련하여, 다양한 명령어는, 상이한 유형의 명령어에 대해, [벡터 길이 필드(259B)의 내용에 의해 결정되는] 벡터 길이, 벡터 연산의 유형 및 브로드캐스트가 수행되는지[베이스 연산 필드(242) 및/또는 브로드캐스트 필드(257B)의 값], 및 [도 4e에 기술된 바와 같이 실제 연산코드 필드(330) 및/또는 데이터 요소 폭 필드(264)의 내용에 의해 결정되는] 데이터 요소 폭에 기초하여 결정되는 메모리 액세스 크기 N과 관련하여 disp8을 사용함으로써 압축된 변위를 사용할 수 있다. 일반적으로, 메모리 액세스 크기 N은 메모리 입력에서의 바이트의 수(예컨대, 전체 512-비트 메모리 벡터에 액세스할 때 64)에 대응한다. 본 발명의 일 실시예에서, 이하의 제1 표는 이하의 제2 표에서 사용되는 용어들의 일부를 설명하며, 이하의 제2 표는 다양한 유형의 명령어에 대한 N의 값을 제공한다. 이하의 표에서의 튜플(Tuple)은 메모리 내의 데이터의 압축된 구조이다.
예약 비트
또한, 본 발명의 일부 실시예에서, 상이한 프로세서 또는 프로세서 내의 상이한 코어는 클래스 A만, 클래스 B만, 또는 양쪽 클래스를 지원할 수 있다. 예를 들어, 범용 컴퓨팅을 목적으로 하는 고성능 범용 비순차 코어는 클래스 B만을 지원할 수 있고, 주로 그래픽 및/또는 과학 (처리율) 컴퓨팅을 목적으로 하는 코어는 클래스 A만을 지원할 수 있으며, 양쪽을 목적으로 하는 코어는 둘 다를 지원할 수 있다(물론, 양쪽 클래스로부터의 템플릿 및 명령어 전부는 아니지만 양쪽 클래스로부터의 템플릿 및 명령어의 어떤 혼합체를 가지는 코어는 본 발명의 범위 내에 속한다). 또한, 단일 프로세서는 다수의 코어를 포함할 수 있고, 이들 모두가 동일한 클래스를 지원하거나 상이한 코어가 상이한 클래스를 지원한다. 예를 들어, 개별적인 그래픽 및 범용 코어를 갖는 프로세서에서, 주로 그래픽 및/또는 과학 컴퓨팅을 목적으로 하는 그래픽 코어들 중 하나는 클래스 A만을 지원할 수 있는 반면, 범용 코어들 중 하나 이상은 클래스 B만을 지원하는 범용 컴퓨팅을 목적으로 하는 고성능 범용 비순차 코어일 수 있다. 개별적인 그래픽 코어를 갖지 않는 다른 프로세서는 클래스 A 및 클래스 B 둘 다를 지원하는 하나 이상의 범용 순차 또는 비순차 코어를 포함할 수 있다. 물론, 본 발명의 다른 실시예에서, 하나의 클래스로부터의 특징이 또한 다른 클래스에서 구현될 수 있다. 상위 레벨 언어로 작성된 프로그램이 하기의 것을 포함하는 각종의 상이한 실행가능 형태로 될 것이다[예컨대, JIT(just in time) 컴파일되거나 정적 컴파일된다]: 1) 실행을 위해 대상 프로세서에 의해 지원되는 클래스(들)의 명령어만을 가지는 형태; 또는 2) 모든 클래스의 명령어의 상이한 조합을 사용하여 작성된 대안의 루틴을 가지며 현재 코드를 실행하고 있는 프로세서에 의해 지원되는 명령어에 기초하여 실행할 루틴을 선택하는 제어 흐름 코드를 가지는 형태.
로드, 브로드캐스트 및 삽입과 관련하여, 본 발명의 일 실시예는 베이스 연산 필드로 상이한 버전의 브로드캐스트를 구현하고, 따라서 브로드캐스트 필드(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를 어떻게 수정해야 하는지를 나타내고 있다.
디코딩 스테이지(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 명령어 형식을 포함하고, 상기 제1 명령어 형식은 클래스 필드, 알파 필드, 및 베타 필드를 포함하는 복수의 필드들을 갖고, 상기 제1 명령어 형식은 상기 알파 필드 및 상기 베타 필드에 상이한 값들을 배치하는 것을 통해 상이한 보강 연산들을 지원하며, 명령어 스트림들에서 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 상기 상이한 값들 중 하나만이 상기 알파 필드 및 상기 베타 필드 각각에 배치될 수 있고,
상기 프로세서는,
메모리 액세스를 지정하지 않는 어커런스들 각각에 대해, 그 어커런스에서 상기 알파 필드의 내용에 기초하여, 반올림 유형 연산으로 보강해야 하는지 여부를 구분해주고 - 상기 알파 필드의 내용이 상기 반올림 유형 연산을 나타낼 때, 상기 베타 필드는 SAE(suppress all floating point exceptions) 필드 및 반올림 연산 필드로서 해석됨 - ;
메모리 액세스를 지정하지 않고 상기 알파 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 SAE 필드의 내용에 기초하여, 부동 소수점 예외 보고가 디스에이블될 것인지 여부를 구분해주며;
메모리 액세스를 지정하지 않고 상기 알파 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 반올림 연산 필드의 내용에 기초하여, 복수의 반올림 연산들 중 어느 것을 적용해야 하는지를 구분해주는 것과 같이
제1 클래스를 지정하는 상기 클래스 필드의 내용에 의해 상기 제1 명령어 형식으로 된 명령어들의 어커런스들을 디코딩하는 디코딩 유닛을 포함하는 장치. - 삭제
- 제20항에 있어서, 상기 디코딩 유닛은 또한
메모리 액세스를 지정하지 않는 어커런스들 각각에 대해, 상기 베타 필드를 RL 필드를 포함하는 것으로서 해석하고;
메모리 액세스를 지정하지 않는 어커런스들 각각에 대해, 그 어커런스에서 상기 RL 필드의 내용에 기초하여, 반올림 유형 연산으로 보강해야 하는지 벡터 길이 유형 연산으로 보강해야 하는지를 구분해주며 - 상기 RL 필드의 내용이 상기 반올림 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 반올림 연산 필드로서 해석되고, 상기 RL 필드의 내용이 상기 벡터 길이 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 그 대신에 벡터 길이 필드로서 해석됨 - ;
메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 반올림 연산 필드로서 해석되는 것에 기초하여, 상기 복수의 반올림 연산들 중 어느 것을 적용해야 하는지를 구분해주는 것과 같이
제2 클래스를 지정하는 상기 클래스 필드의 내용에 의해 상기 제1 명령어 형식으로 된 명령어들의 어커런스들을 디코딩하는 것인 장치. - 삭제
- 제22항에 있어서, 상기 디코딩 유닛은 또한
메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 벡터 길이 유형 연산을 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 벡터 길이 필드로서 해석되는 것에 기초하여, 복수의 벡터 길이들 중 어느 것을 사용해야 하는지를 구분해주는 것과 같이
상기 제2 클래스를 지정하는 상기 클래스 필드의 내용에 의해 상기 제1 명령어 형식으로 된 명령어들의 어커런스들을 디코딩하는 것인 장치. - 삭제
- 삭제
- 삭제
- 삭제
- 장치로서,
명령어 집합을 실행하도록 구성되어 있는 프로세서
를 포함하며,
상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 제1 복수의 템플릿을 포함하고, 상기 제1 명령어 형식은 베이스 연산 필드, 데이터 요소 폭(W) 필드, 및 기입 마스크 필드를 포함하는 복수의 필드들을 가지며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드에서의 상이한 값들을 통해, 상이한 벡터 연산들의 지정을 지원하고, 상기 벡터 연산들 각각은 복수의 데이터 요소들을 상이한 데이터 요소 위치들에 포함하는 목적지 벡터 피연산자를 생성하며, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 상이한 데이터 요소 폭들의 지정을 지원하고, 상기 베이스 연산 필드, 상기 데이터 요소 폭 필드, 및 상기 기입 마스크 필드 각각은 명령어 스트림들에서 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 하나의 값만을 저장할 수 있으며,
상기 프로세서는
상기 어커런스들 각각에 대해, 상기 데이터 요소 폭 필드의 내용에 기초하여, 상기 데이터 요소 폭들 중 어느 것을 사용해야 하는지를 구분해주고;
상기 어커런스들 각각에 대해, 그 어커런스에 대한 상기 기입 마스크 필드의 내용 및 상기 데이터 요소 폭에 기초하여, 상기 어커런스의 벡터 연산으로부터 얻어지는 데이터 요소들 중 어느 것이 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 하는지 여부를 구분해주는 것 - 상기 기입 마스크 필드에 배치될 수 있는 상이한 값들 중 하나는 상기 어커런스의 벡터 연산의 결과들 모두가 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 한다는 것을 나타내기 위해 예약되어 있고, 상기 기입 마스크 필드에 배치될 수 있는 상이한 값들 중 다른 것들은 구성가능 기입 마스크들을 저장하는 상이한 기입 마스크 레지스터들을 구분해주며, 상기 어커런스에 대한 상기 데이터 요소 폭은 어느 데이터 요소 위치들이 상기 구성가능 기입 마스크들의 어느 비트들과 대응하는지를 구분해줌 - 과 같이
상기 제1 복수의 템플릿에서 상기 명령어들의 어커런스들을 디코딩하는 디코딩 유닛을 포함하는 장치. - 제29항에 있어서, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 32 비트 데이터 요소 폭 및 64 비트 데이터 요소 폭의 지정을 지원하고, 상기 기입 마스크 레지스터들은 적어도 64 비트이며, 상기 기입 마스크의 단일 비트가 상기 목적지 벡터 피연산자의 데이터 요소 위치들 각각에 대해 사용되고, 상기 기입 마스크 레지스터의 하위 16 비트는 32 비트 데이터 요소들을 갖는 512 비트 벡터들에 대해 사용되고, 상기 기입 마스크 레지스터의 하위 8 비트는 32 비트 데이터 요소들을 갖는 512 비트 벡터들에 대해 사용되는 장치.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 장치로서,
명령어 집합을 실행하도록 구성되어 있는 프로세서
를 포함하며,
상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 제1 복수의 템플릿을 포함하고, 각각의 템플릿은 베이스 연산 필드, 데이터 요소 폭(W) 필드, 벡터 길이 필드, 및 기입 마스크 필드를 포함하는 복수의 필드들을 포함하며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드에서의 상이한 값들을 통해, 복수의 상이한 벡터 연산들의 지정을 지원하고, 상기 복수의 벡터 연산들 각각은 적어도 하나의 목적지 벡터 피연산자를 생성하기 위해 적어도 하나의 소스 벡터 피연산자의 복수의 상이한 데이터 요소 위치들 각각에 대해 연산이 독립적으로 수행될 것을 필요로 하고, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 32 비트 데이터 요소 폭 및 64 비트 데이터 요소 폭의 지정을 지원하며, 상기 제1 복수의 템플릿은, 상기 벡터 길이 필드에서의 상이한 값들을 통해, 복수의 상이한 벡터 길이들의 지정을 지원하고, 상기 제1 명령어 형식은, 상기 기입 마스크 필드에서의 상이한 값들을 통해, 상이한 기입 마스크들의 지정을 지원하며, 명령어 스트림들에서 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 상기 상이한 값들 중 하나만이 상기 베이스 연산 필드, 상기 데이터 요소 폭 필드, 및 상기 기입 마스크 필드 각각에 배치될 수 있고,
상기 프로세서는,
상기 어커런스들 각각에 대해, 상기 베이스 연산 필드의 내용에 기초하여, 상기 상이한 벡터 연산들 중 어느 것을 수행해야 하는지를 구분해주고;
상기 어커런스들 각각에 대해, 상기 데이터 요소 폭 필드의 내용에 기초하여, 상기 데이터 요소 폭들 중 어느 것을 사용해야 하는지를 구분해주며;
상기 어커런스들 각각에 대해, 상기 벡터 길이 필드의 내용에 기초하여, 상기 벡터 길이들 중 어느 것을 사용해야 하는지를 구분해주고;
상기 어커런스들 각각에 대해, 상기 기입 마스크 필드의 내용에 기초하여, 상기 상이한 기입 마스크들 중 어느 것을 사용해야 하는지를 구분해주는 것 - 상기 어커런스에 대한 상기 데이터 요소 폭 및 상기 벡터 길이는 어느 데이터 요소 위치들이 상기 어커런스의 기입 마스크의 어느 비트들과 대응하는지를 구분해주고, 상기 어커런스에 대한 상기 기입 마스크는, 데이터 요소 위치별로, 상기 어커런스의 벡터 연산의 결과들이 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 하는지 여부를 지정함 - 과 같이
상기 제1 복수의 템플릿에서 상기 명령어들의 어커런스들을 디코딩하는 디코딩 유닛을 포함하는 장치. - 삭제
- 삭제
- 삭제
- 제38항에 있어서, 상기 제1 명령어 형식은 제로화-기입 마스킹(zeroing-writemasking) 연산을 지원하는 장치.
- 제38항 또는 제42항에 있어서, 상기 기입 마스크 필드에 배치될 수 있는 상이한 값들 중 하나는 상기 어커런스의 벡터 연산의 결과들 모두가 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 한다는 것을 나타내기 위해 예약되어 있는 장치.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 장치로서,
명령어 집합을 실행하도록 구성되어 있는 프로세서
를 포함하며,
상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 베이스 연산 필드, 수정자 필드, 데이터 요소 폭 필드, 및 보강 연산 필드를 포함하는 복수의 필드들을 가지며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드에서의 상이한 값들을 통해, 복수의 상이한 벡터 연산들의 지정을 지원하고, 상기 복수의 벡터 연산들 각각은 복수의 데이터 요소들을 상이한 데이터 요소 위치들에 포함하는 목적지 벡터 피연산자를 생성하며, 상기 제1 명령어 형식은, 상기 수정자 필드에서의 상이한 값들을 통해, 메모리 액세스 연산 및 메모리 액세스 없음 연산의 지정을 지원하고, 상기 수정자 필드의 내용이 스케일링된 변위를 갖는 메모리 액세스 연산을 지정할 때, 상기 제1 명령어 형식은 변위 인자 필드를 포함하며, 상기 베이스 연산 필드, 상기 수정자 필드, 상기 데이터 요소 폭 필드, 및 상기 보강 연산 필드 각각은 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 하나의 값만을 저장할 수 있으며,
상기 프로세서는,
명령어 스트림들에서 출현하는 상기 제1 명령어 형식으로 된 명령어들을 실행하는 프로세서 파이프라인을 포함하고,
상기 파이프라인은,
그 상이한 어커런스들에서 상기 수정자 필드의 내용에 기초하여, 스케일링된 변위를 갖는 메모리 액세스를 지정하는 상기 제1 명령어 형식으로 된 명령어들의 어커런스들과 지정하지 않는 어커런스들을 구분해주고;
상기 수정자 필드의 내용을 통해 스케일링된 변위를 갖는 메모리 액세스를 지정하는 어커런스들에 대해, 상기 베이스 연산 필드, 상기 데이터 요소 폭 필드, 및 상기 보강 연산 필드 중 2개 이상의 내용에 기초하여, 복수의 메모리 액세스 크기들을 구분해주며;
상기 수정자 필드의 내용을 통해 스케일링된 변위를 갖는 메모리 액세스를 지정하는 어커런스들 각각에 대해, 상기 메모리 액세스의 크기를 상기 변위 인자 필드의 내용과 곱하는 것에 기초하여 스케일링된 변위를 결정 - 상기 스케일링된 변위는 주소를 발생하는 데 사용되는 것임 - 하도록 구성되어 있는 장치. - 삭제
- 삭제
- 제57항에 있어서, 상기 수정자 필드의 내용이 스케일링된 변위를 갖는 메모리 액세스 연산을 지정할 때, 스케일, 인덱스, 및 베이스가 상기 제1 명령어 형식의 필드들로부터 풀링되고, 상기 스케일, 인덱스, 베이스 및 스케일링된 변위는 주소를 발생하는 데 사용되는 장치.
- 제60항에 있어서, 상기 스케일은 2 비트 스케일 필드로부터 풀링되고, 상기 인덱스는 1 비트 X 필드 및 3 비트 XXX 필드의 조합으로부터 풀링되며, 상기 베이스는 1 비트 B 필드 및 3 비트 BBB의 조합으로부터 풀링되는 장치.
- 제57항 또는 제61항에 있어서, 상기 복수의 메모리 액세스 크기들을 구분해주기 위해 사용되는 필드들의 선택은 상기 보강 연산 필드 내의 클래스 필드의 내용에 기초하는 장치.
- 삭제
- 삭제
- 제57항, 제60항 및 제61항 중 어느 한 항에 있어서, 상기 변위 인자 필드는 단일 바이트이고, 상기 변위 인자 필드의 내용은 -128 내지 127의 부호있는 값으로서 해석되며, 상기 복수의 메모리 액세스 크기들은 상기 메모리 액세스에서의 바이트 수에 대응하고, 상기 복수의 메모리 액세스 크기들은 1 바이트, 2 바이트, 4 바이트, 8 바이트, 16 바이트, 32 바이트, 및 64 바이트인 장치.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 장치로서,
프로세서
를 포함하며,
상기 프로세서는,
각각이 적어도 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 비트를 저장하는 상기 수정자 필드를 상기의 크기 및 상기의 순서로 포함하는 장치. - 삭제
- 제78항에 있어서, 상기 3 비트 베타 필드가 상기 2 비트 반올림 연산 필드 또는 상기 2 비트 벡터 길이 필드를 포함하는 것으로 해석될 때, 상기 3 비트 베타 필드는 상기 2 비트 반올림 연산 필드 및 상기 2 비트 벡터 길이 필드를 언제 사용해야 하는지를 구분해주기 위해 사용되는 한 비트를 저장하는 1 비트 RL 필드를 포함하는 것으로 해석되는 장치.
- 제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스케일 + 상기 인덱스 + 상기 베이스 + 상기 스케일링된 변위에 의해 발생되는
장치. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 장치로서,
명령어 집합을 실행하도록 구성되어 있는 프로세서
를 포함하며,
상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 베이스 연산 필드, 수정자 필드, 클래스 필드, 알파 필드, 및 베타 필드를 포함하는 복수의 필드들을 가지며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드, 상기 수정자 필드, 상기 클래스 필드, 상기 알파 필드, 및 상기 베타 필드에 상이한 값들을 배치하는 것을 통해, 상이한 버전의 베이스 연산들 및 상이한 보강 연산들을 지원하며, 명령어 스트림들에서 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 상기 상이한 값들 중 하나만이 상기 베이스 연산 필드, 상기 수정자 필드, 상기 클래스 필드, 상기 알파 필드, 및 상기 베타 필드 각각에 배치될 수 있고, 상기 클래스 필드에서의 제1 값은 제1 클래스를 지정하고 제2 값은 제2 클래스를 지정하며,
상기 프로세서는,
그 상이한 어커런스들에서 상기 수정자 필드의 내용에 기초하여, 메모리 액세스를 지정하는 상기 제1 명령어 형식으로 된 명령어들의 어커런스들과 지정하지 않는 어커런스들을 구분해주고 - 상기 수정자 필드의 내용이 메모리 액세스를 지정할 때, 상기 베타 필드는 브로드캐스트 필드 및 벡터 길이 필드로서 해석되고, 상기 수정자 필드의 내용이 메모리 액세스를 지정하지 않을 때, 상기 베타 필드의 일부는 RL 필드로서 해석됨 - ;
상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 브로드캐스트 필드 및 상기 벡터 길이 필드로서 해석되는 것에 기초하여, 브로드캐스트해야 하는지 여부 및 복수의 벡터 길이들 중 어느 것을 사용해야 하는지를 구분해주며;
상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않는 어커런스들 각각에 대해, 그 어커런스에서 상기 RL 필드의 내용에 기초하여, 반올림 유형 연산으로 또는 벡터 길이 유형 연산으로 보강해야 하는지를 구분해주고 - 상기 RL 필드의 내용이 상기 반올림 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 반올림 연산 필드로서 해석되고, 상기 RL 필드의 내용이 상기 벡터 길이 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 그 대신에 상기 벡터 길이 필드로서 해석됨 - ;
상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 어커런스들 각각에 대해, 그 어커런스에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 반올림 연산 필드로서 해석되는 것에 기초하여, 복수의 반올림 연산들 중 어느 것을 적용해야 하는지를 구분해주며;
상기 어커런스들 각각에 대해, 그 어커런스에서 상기 알파 필드의 내용 및 상기 알파 필드가 기입 마스크 제어 필드로서 해석되는 것에 기초하여, 병합 기입 마스크 연산을 수행해야 하는지 또는 제로화 기입 마스크 연산을 수행해야 하는지를 구분해주는 것과 같이
상기 제2 클래스를 지정하는 상기 클래스 필드의 내용에 의해 상기 제1 명령어 형식으로 된 명령어들의 어커런스들을 디코딩하는 디코딩 유닛을 포함하는 장치. - 삭제
- 제87항에 있어서, 상기 제1 명령어 형식은 데이터 요소 폭 필드를 추가로 포함하고, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 상이한 데이터 요소 폭들의 지정을 지원하며,
상기 제1 명령어 형식은 상기 베이스 연산 필드 내에 실제 연산코드 필드를 추가로 포함하고, 상기 실제 연산코드 필드의 내용은, 상기 어커런스들 각각에 대해, 상기 데이터 요소 폭 필드의 내용이 64 비트 데이터 요소 크기 및 32 비트 데이터 요소 크기 중에서 선택을 하는지 16 비트 데이터 요소 크기 및 8 비트 데이터 요소 크기 중에서 선택을 하는지를 구분해주는
는 장치. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 제87항 또는 제89항에 있어서, 상기 제2 클래스는 상기 수정자 필드의 내용이 스케일링된 변위를 갖는 메모리 액세스 연산을 지정하는 것을 지원하고, 이 경우에, 상기 제1 명령어 형식은 변위 인자 필드 및 스케일, 인덱스, 및 베이스가 풀링되는 필드들을 포함하며, 상기 스케일링된 변위는 메모리 액세스의 크기와 상기 변위 인자 필드의 내용을 곱한 것에 기초하여 발생되고, 상기 스케일, 인덱스, 베이스 및 스케일링된 변위는 상기 메모리 액세스를 위한 주소를 발생하는 데 사용되는 장치.
- 삭제
- 삭제
- 삭제
- 장치로서,
명령어 집합을 실행하도록 구성되어 있는 프로세서
를 포함하며,
상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 제1 복수의 템플릿을 포함하고, 상기 제1 명령어 형식은 베이스 연산 필드, 알파 필드, 데이터 요소 폭(W) 필드, 및 기입 마스크 필드를 포함하는 복수의 필드들을 가지며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드에서의 상이한 값들을 통해, 상이한 벡터 연산들의 지정을 지원하고, 상기 벡터 연산들 각각은 복수의 데이터 요소들을 상이한 데이터 요소 위치들에 포함하는 목적지 벡터 피연산자를 생성하며, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 상이한 데이터 요소 폭들의 지정을 지원하며, 상기 베이스 연산 필드, 상기 알파 필드, 상기 데이터 요소 폭 필드, 및 상기 기입 마스크 필드 각각은 명령어 스트림들에서 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 하나의 값만을 저장할 수 있으며,
상기 프로세서는
상기 어커런스들 각각에 대해, 상기 데이터 요소 폭 필드의 내용에 기초하여, 상기 데이터 요소 폭들 중 어느 것을 사용해야 하는지를 구분해주며;
상기 어커런스들 각각에 대해, 상기 알파 필드의 내용 및 상기 알파 필드가 기입 마스크 제어 필드로서 해석되는 것에 기초하여, 병합 기입 마스크 연산을 수행해야 하는지 제로화 기입 마스크 연산을 수행해야 하는지를 구분해주고;
상기 어커런스들 각각에 대해, 그 어커런스에 대한 상기 기입 마스크 필드의 내용 및 상기 데이터 요소 폭에 기초하여, 상기 어커런스의 벡터 연산으로부터 얻어지는 데이터 요소들 중 어느 것이 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 하는지 여부를 구분해주는 것 - 상기 기입 마스크 필드에 배치될 수 있는 상이한 값들 중 하나는 상기 어커런스의 벡터 연산의 결과들 모두가 상기 목적지 벡터 피연산자의 대응하는 데이터 요소 위치들에 반영되어야 한다는 것을 나타내기 위해 예약되어 있고, 상기 기입 마스크 필드에 배치될 수 있는 상이한 값들 중 다른 것들은 구성가능 기입 마스크들을 저장하는 상이한 기입 마스크 레지스터들을 구분해주며, 상기 어커런스에 대한 데이터 요소 폭은 어느 데이터 요소 위치들이 상기 구성가능 기입 마스크들의 어느 비트들과 대응하는지를 구분해줌 - 과 같이
상기 제1 복수의 템플릿에서 상기 명령어들의 어커런스들을 디코딩하는 디코딩 유닛을 포함하는 장치. - 삭제
- 제101항에 있어서, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 8 비트 데이터 요소 폭, 16 비트 데이터 요소 폭, 32 비트 데이터 요소 폭 및 64 비트 데이터 요소 폭의 지정을 지원하는 장치.
- 삭제
- 삭제
- 삭제
- 삭제
- 장치로서,
명령어 집합을 실행하도록 구성되어 있는 프로세서
를 포함하며,
상기 명령어 집합은 제1 명령어 형식을 포함하고, 상기 제1 명령어 형식은 베이스 연산 필드, 수정자 필드, 및 베타 필드를 포함하는 복수의 필드들을 가지며, 상기 제1 명령어 형식은, 상기 베이스 연산 필드, 상기 수정자 필드, 및 상기 베타 필드에 상이한 값들을 배치하는 것을 통해, 상이한 버전의 베이스 연산들 및 상이한 보강 연산들을 지원하며, 상기 제1 명령어 형식으로 된 명령어의 각각의 어커런스에서 상기 상이한 값들 중 하나만이 상기 베이스 연산 필드, 상기 수정자 필드, 및 상기 베타 필드 각각에 배치될 수 있고,
상기 프로세서는,
상기 제1 명령어 형식으로 된 복수의 명령어들을 디코딩하는 디코딩 유닛을 포함하고,
상기 디코딩 유닛은,
그 상이한 명령어들에서 상기 수정자 필드의 내용에 기초하여, 상기 복수의 명령어들 중 메모리 액세스를 지정하는 명령어들과 지정하지 않는 명령어들을 구분해주고 - 상기 수정자 필드의 내용이 메모리 액세스를 지정하지 않을 때, 상기 베타 필드의 일부는 RL 필드로서 해석됨 - ;
상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않는 복수의 명령어들 각각에 대해, 그 명령어에서 상기 RL 필드의 내용에 기초하여, 반올림 유형 연산으로 또는 벡터 길이 유형 연산으로 보강해야 하는지를 구분해주며 - 상기 RL 필드의 내용이 상기 반올림 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 반올림 연산 필드로서 해석되고, 상기 RL 필드의 내용이 상기 벡터 길이 유형 연산을 나타낼 때, 상기 베타 필드의 나머지는 그 대신에 벡터 길이 필드로서 해석됨 - ;
상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 복수의 명령어들 각각에 대해, 그 명령어에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 반올림 연산 필드로서 해석되는 것에 기초하여, 복수의 반올림 연산들 중 어느 것을 적용해야 하는지를 구분해주고;
상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 벡터 길이 유형 연산을 지정하는 복수의 명령어들 각각에 대해, 그 명령어에서 상기 베타 필드의 내용 및 상기 베타 필드가 상기 벡터 길이 필드로서 해석되는 것에 기초하여, 복수의 벡터 길이들 중 어느 것을 사용해야 하는지를 구분해주는 것과 같이
상기 제1 명령어 형식으로 된 상기 복수의 명령어들을 디코딩하도록 구성되어 있는 장치. - 삭제
- 삭제
- 제108항에 있어서, 상기 수정자 필드의 내용을 통해 메모리 액세스를 지정하지 않고 상기 RL 필드의 내용을 통해 상기 반올림 유형 연산을 지정하는 명령어들 각각에 대해, 모든 부동 소수점 예외 보고가 디스에이블되는 장치.
- 삭제
- 삭제
- 삭제
- 제108항에 있어서, 상기 제1 명령어 형식은 데이터 요소 폭 필드를 추가로 포함하고, 상기 제1 명령어 형식은, 상기 데이터 요소 폭 필드에서의 상이한 값들을 통해, 상이한 데이터 요소 폭들의 지정을 지원하며,
상기 제1 명령어 형식은 상기 베이스 연산 필드 내에 실제 연산코드 필드를 추가로 포함하고, 상기 실제 연산코드 필드의 내용은, 상기 어커런스들 각각에 대해, 상기 데이터 요소 폭 필드의 내용이 64 비트 데이터 요소 크기 및 32 비트 데이터 요소 크기 중에서 선택을 하는지 16 비트 데이터 요소 크기 및 8 비트 데이터 요소 크기 중에서 선택을 하는지를 구분해주는
장치. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
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)
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)
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 | 英特尔公司 | 全包围栅晶体管的可变栅极宽度 |
-
2011
- 2011-09-30 CN CN201610804703.9A patent/CN106406817B/zh active Active
- 2011-09-30 CN CN201510464707.2A patent/CN104951277B/zh active Active
- 2011-09-30 JP JP2014502538A patent/JP5739055B2/ja active Active
- 2011-09-30 ES ES18177235T patent/ES2943248T3/es active Active
- 2011-09-30 EP EP18177235.1A patent/EP3422178B1/en active Active
- 2011-09-30 EP EP23191570.3A patent/EP4250101A3/en active Pending
- 2011-09-30 US US13/976,707 patent/US20130305020A1/en not_active Abandoned
- 2011-09-30 KR KR1020137029045A patent/KR101595637B1/ko active IP Right Grant
- 2011-09-30 EP EP20199439.9A patent/EP3805921B1/en active Active
- 2011-09-30 CN CN201180070598.6A patent/CN103502935B/zh active Active
- 2011-09-30 CN CN202011424482.5A patent/CN112463219A/zh active Pending
- 2011-09-30 GB GB1317902.3A patent/GB2502936A/en not_active Withdrawn
- 2011-09-30 CN CN201710936456.2A patent/CN107608716B/zh active Active
- 2011-09-30 WO PCT/US2011/054303 patent/WO2012134532A1/en active Application Filing
- 2011-09-30 PL PL18177235.1T patent/PL3422178T3/pl unknown
- 2011-09-30 EP EP11862801.5A patent/EP2695054B1/en active Active
- 2011-12-07 TW TW103135824A patent/TWI506546B/zh active
- 2011-12-07 TW TW100145056A patent/TWI467477B/zh active
-
2014
- 2014-01-31 US US14/170,397 patent/US9513917B2/en active Active
-
2015
- 2015-04-22 JP JP2015087178A patent/JP6058732B2/ja active Active
-
2016
- 2016-12-07 JP JP2016237947A patent/JP6339164B2/ja active Active
-
2019
- 2019-02-28 US US16/289,506 patent/US10795680B2/en active Active
- 2019-03-01 US US16/290,544 patent/US11573798B2/en active Active
-
2020
- 2020-01-30 DE DE102020102331.6A patent/DE102020102331A1/de active Pending
- 2020-08-27 US US17/004,711 patent/US11210096B2/en active Active
-
2021
- 2021-11-11 US US17/524,624 patent/US11740904B2/en active Active
-
2023
- 2023-08-28 US US18/239,106 patent/US20240061683A1/en active Pending
Also Published As
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 |