KR101555412B1 - 벡터 압축 및 회전 기능 제공 명령어 및 로직 - Google Patents
벡터 압축 및 회전 기능 제공 명령어 및 로직 Download PDFInfo
- Publication number
- KR101555412B1 KR101555412B1 KR1020130130028A KR20130130028A KR101555412B1 KR 101555412 B1 KR101555412 B1 KR 101555412B1 KR 1020130130028 A KR1020130130028 A KR 1020130130028A KR 20130130028 A KR20130130028 A KR 20130130028A KR 101555412 B1 KR101555412 B1 KR 101555412B1
- Authority
- KR
- South Korea
- Prior art keywords
- vector
- destination
- processor
- instruction
- register
- Prior art date
Links
- 239000013598 vector Substances 0.000 title claims abstract description 348
- 230000006835 compression Effects 0.000 claims abstract description 75
- 238000007906 compression Methods 0.000 claims abstract description 75
- 238000000034 method Methods 0.000 claims abstract description 75
- 230000004044 response Effects 0.000 claims abstract description 9
- 238000012545 processing Methods 0.000 claims description 149
- 230000015654 memory Effects 0.000 claims description 122
- 239000000463 material Substances 0.000 claims description 2
- 230000006870 function Effects 0.000 abstract description 31
- 230000008569 process Effects 0.000 description 56
- 238000010586 diagram Methods 0.000 description 43
- 238000003860 storage Methods 0.000 description 29
- 238000007667 floating Methods 0.000 description 24
- 101100269850 Caenorhabditis elegans mask-1 gene Proteins 0.000 description 11
- 238000004519 manufacturing process Methods 0.000 description 11
- 238000013461 design Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 6
- 239000000872 buffer Substances 0.000 description 6
- 239000003795 chemical substances by application Substances 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 238000013500 data storage Methods 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 5
- 238000006073 displacement reaction Methods 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 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 4
- 238000011161 development Methods 0.000 description 4
- 238000004088 simulation Methods 0.000 description 4
- 230000003993 interaction Effects 0.000 description 3
- 230000033001 locomotion Effects 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 235000019800 disodium phosphate Nutrition 0.000 description 2
- -1 e.g. Substances 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 229910052754 neon Inorganic materials 0.000 description 2
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 1
- 102000001332 SRC Human genes 0.000 description 1
- 108060006706 SRC Proteins 0.000 description 1
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 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
- 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
- G06F15/8076—Details on data register access
-
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- 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
-
- 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/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
- 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
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- 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/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- 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/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- 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/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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/62—Details of cache specific to multiprocessor cache arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
Abstract
명령어 및 로직은 벡터 압축 및 회전 기능을 제공한다. 일부 실시예는 벡터 소스, 마스크, 벡터 목적지 및 목적지 오프셋을 지정하는 명령어에 응답하여, 마스크를 판독하고 대응하는 마스크되지 않은 벡터 요소를 벡터 목적지 오프셋 위치에서 시작하여 벡터 소스에서 벡터 목적지 내의 인접한 순차적인 위치로 복사한다. 일부 실시예에서, 벡터 소스로부터의 마스크되지 않은 벡터 요소는 벡터 목적지 내의 총 요소 위치의 수를 모듈로로 하여 인접한 순차적인 요소 위치로 복사된다. 대안의 일부 실시예에서, 복사는 벡터 목적지가 충만 상태일 때마다 중단되고, 마스크되지 않은 벡터 요소를 벡터 소스에서 벡터 목적지 내의 인접한 순차적인 요소 위치로 복사할 때, 마스크 내의 대응하는 필드의 값은 마스크된 값으로 변경된다. 대안의 실시예는 벡터 목적지의 요소를 제로화하고, 벡터 소스에서 어떠한 요소도 복사되지 않는다.
Description
본 발명은 처리 로직, 마이크로프로세서, 및 프로세서 또는 다른 처리 로직에 의해 실행될 때 논리적, 수학적, 또는 다른 기능적 연산을 수행하는 연관된 명령어 집합 아키텍처(instruction set architecture)의 분야에 관한 것이다. 특히, 본 발명은 벡터 압축(vector compress) 및 회전 기능(rotate functionality)을 제공하는 명령어 및 로직에 관한 것이다.
현대의 프로세서는 흔히 계산 집약적이지만, 예를 들면, 단일 명령어 다중 데이터(SIMD:single instruction multiple data) 벡터 레지스터와 같은 다양한 데이터 저장 장치를 이용한 효율적인 구현을 통해 활용될 수 있는 고레벨의 데이터 병렬성(data parallelism)을 제공하는 연산을 제공하는 명령어를 포함한다. 그리고 중앙 처리 장치(CPU)는 처리 벡터(processing vectors)를 지원하는 병렬 하드웨어를 제공할 수 있다. 벡터는 연속적인 많은 데이터 요소(data elements)를 유지하는 데이터 구조이다. 크기가 M인 벡터 레지스터(vector register)는 크기가 O인 N개의 벡터 요소를 포함할 수 있으며, 여기서 N=M/O이다. 예를 들면, 64 바이트 벡터 레지스터는 (a) 각 요소가 1 바이트를 차지하는 데이터 항목(data item)을 유지하는 64개의 벡터 요소, (b) 각각 2 바이트(또는 1 "워드(word)")를 차지하는 데이터 항목을 유지하는 32개의 벡터 요소, (c) 각각 4 바이트(또는 1 "더블워드(doubleword)")를 차지하는 데이터 항목을 유지하는 16개의 벡터 요소, 또는 (d) 각각 8바이트(또는 1 "쿼드워드(quadword)")를 차지하는 데이터 항목을 유지하는 8개의 벡터 요소로 분할될 수 있다.
애플리케이션 또는 소프트웨어 코드(code)를 벡터화(vectorizing)하는 것은 애플리케이션을 컴파일(compile)하고, 예를 들면, 넓은 또는 큰 폭의 벡터 아키텍처와 같은 특정 시스템 또는 명령어 집합 아키텍처를 설치하고, 및/또는 이를 실행하는 것을 포함할 수 있다.
컴퓨팅 산업은 벡터화(vectorization), 동시적 다중스레딩(simultaneous multithreading), 예측(predication) 등과 같은 아키텍처 및 연산 기술의 효율성을 테스트하는 다양한 프로그래밍 벤치마크(benchmarks)를 개발하였다. 이러한 벤치마크의 한가지 슈트(suite)는 스탠더드 퍼포먼스 이벨류에이션 코퍼레이션(SPEC)에서 생산된다. SPEC 벤치마크는 프로세서 및 플랫폼(platform) 아키텍처의 성능을 "벤치마크"하는데 널리 이용되고 있다. SPEC 벤치마크를 구성하는 프로그램은 컴퓨터 성능을 향상시키기 위해 새로운 컴파일레이션(compilation) 및 연산 기술을 발견하려는 시도로 산업 전문가들에 의해 프로파일되고 분석된다. CPU2006이라는 SPEC 벤치마크 슈트 중 하나는 시스템의 프로세서, 메모리 서브시스템 및 컴파일러를 강조하기 위해 선택된 정수(integer) 및 부동 소수점(floating point) CPU 집약적인 벤치마크를 포함한다. CPU2006은 데이터 레이아웃 및 NAMD의 내부 루프에서 도출된, 일리노이 대학 어바나 샴페인(University of Illinois, Urbana-Champaign)에서 이론 및 전산 생물물리학 그룹(Theoretical Computational Biophysics Group)의 짐 필립스(Jim Phillips)에 의해 개발된 대형 생체분자(biomolecular) 시스템의 시뮬레이션을 위한 병렬 프로그램인 444.NAMD라고 하는 프로그램을 포함한다. NAMD의 거의 모든 런타임은 작은 함수 집합에서 원자간(inter-atomic) 상호작용을 계산하는데 소모된다. 이 집합은 코드의 대부분과 분리되어 CPU2006용의 콤팩트한 벤치마크를 형성하였다. 연산 코어(computational core)는 광범위한 기계 아키텍처의 성능을 양호하게 하지만, 플랫폼에 특정하게 최적화되지 않는다.
NAMD 프로그램은 병렬 확장성(parallel scalability)에 대한 2002 고든 벨(Gordon Bell) 어워드의 수상작이었지만, 직렬 성능도 동등하게 중요하다. 벤치마크의 모든 대부분의 병렬 부분을 벡터화한 후, 예를 들면, 벡터화될 수 없는, 직렬 부분은 전형적으로 벤치마크의 런타임 중 훨씬 더 중요한 부분을 나타낸다. 이러한 상황은 병렬 확장성이 높은 계산 집약적인 프로그램의 일반적인 경우의 전형적인 예이다. 벡터화를 이용하여 대부분의 병렬 부분의 속도를 높이고 나면, 성능 제한 문제 및 병목현상(bottlenecks)을 제거하여 다른 벡터화될 수 없거나 직렬 부분의 프로그램의 성능을 높이는 힘든 작업이 남는다.
지금까지, 그러한 성능 제한 문제 및 병목현상에 대한 가능한 해결책이 적절히 검토되지 않았다.
본 발명은 첨부의 도면에서 제한 없이 예를 들어 예시된다.
도 1a는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 시스템의 일 실시예의 블록도이다.
도 1b는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 시스템의 다른 실시예의 블록도이다.
도 1c는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 시스템의 또 다른 실시예의 블록도이다.
도 2는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 프로세서의 일 실시예의 블록도이다.
도 3a는 일 실시예에 따른 패킹된 데이터 형태를 예시한다.
도 3b는 일 실시예에 따른 패킹된 데이터 형태를 예시한다.
도 3c는 일 실시예에 따른 패킹된 데이터 형태를 예시한다.
도 3d는 일 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 명령어 인코딩을 예시한다.
도 3e는 다른 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 명령어 인코딩을 예시한다.
도 3f는 또 다른 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 명령어 인코딩을 예시한다.
도 3g 또 다른 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 명령어 인코딩을 예시한다.
도 3h는 또 다른 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 명령어 인코딩을 예시한다.
도 4a는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 프로세서 마이크로 아키텍처의 일 실시예의 구성 요소를 예시한다.
도 4b는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 프로세서 마이크로 아키텍처의 다른 실시예의 구성 요소를 예시한다.
도 5는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 프로세서의 일 실시예의 블록도이다.
도 6은 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 컴퓨터 시스템의 일 실시예의 블록도이다.
도 7은 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 컴퓨터 시스템의 다른 실시예의 블록도이다.
도 8은 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 컴퓨터 시스템의 또 다른 실시예의 블록도이다.
도 9는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 시스템 온 칩의 일 실시예의 블록도이다.
도 10은 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 프로세서의 일 실시예의 블록도이다.
도 11은 벡터 압축 및 회전 기능을 제공하는 IP 코어 개발 시스템의 일 실시예의 블록도이다.
도 12는 벡터 압축 및 회전 기능을 제공하는 아키텍처 에뮬레이션 시스템의 일 실시예를 예시한다.
도 13은 벡터 압축 및 회전 기능을 제공하는 명령어를 변환(translate)하는 시스템의 일 실시예를 예시한다.
도 14a는 벡터 압축 및 회전 기능을 제공하는 명령어의 일 실시예의 흐름도를 예시한다.
도 14b는 벡터 압축 및 회전 기능을 제공하는 명령어의 다른 실시예의 흐름도를 예시한다.
도 15a는 벡터 압축 및 회전 기능을 제공하는 명령어를 이용하는 프로세스의 일 실시예의 흐름도를 예시한다.
도 15b는 벡터 압축 및 회전 기능을 제공하는 명령어를 이용하는 프로세스의 다른 실시예의 흐름도를 예시한다.
도 16a는 벡터 압축 및 회전 기능을 제공하는 프로세스의 일 실시예의 흐름도를 예시한다.
도 16b는 벡터 압축 및 회전 기능을 제공하는 프로세스의 대안의 실시예의 흐름도를 예시한다.
도 17은 벡터 압축 및 회전 기능을 제공하는 프로세스의 또 다른 실시예의 흐름도를 예시한다.
도 18은 벤치마크 애플리케이션에서 벡터 압축 기능을 제공하는 프로세스의 일 실시예의 흐름도를 예시한다.
도 19a는 벤치마크 애플리케이션에서 벡터 압축 및 회전 기능을 제공하는 프로세스의 일 실시예의 흐름도를 예시한다.
도 19b는 벤치마크 애플리케이션에서 벡터 압축 및 회전 기능을 제공하는 프로세스의 대안의 실시예의 흐름도를 예시한다.
도 1a는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 시스템의 일 실시예의 블록도이다.
도 1b는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 시스템의 다른 실시예의 블록도이다.
도 1c는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 시스템의 또 다른 실시예의 블록도이다.
도 2는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 프로세서의 일 실시예의 블록도이다.
도 3a는 일 실시예에 따른 패킹된 데이터 형태를 예시한다.
도 3b는 일 실시예에 따른 패킹된 데이터 형태를 예시한다.
도 3c는 일 실시예에 따른 패킹된 데이터 형태를 예시한다.
도 3d는 일 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 명령어 인코딩을 예시한다.
도 3e는 다른 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 명령어 인코딩을 예시한다.
도 3f는 또 다른 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 명령어 인코딩을 예시한다.
도 3g 또 다른 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 명령어 인코딩을 예시한다.
도 3h는 또 다른 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 명령어 인코딩을 예시한다.
도 4a는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 프로세서 마이크로 아키텍처의 일 실시예의 구성 요소를 예시한다.
도 4b는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 프로세서 마이크로 아키텍처의 다른 실시예의 구성 요소를 예시한다.
도 5는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 프로세서의 일 실시예의 블록도이다.
도 6은 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 컴퓨터 시스템의 일 실시예의 블록도이다.
도 7은 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 컴퓨터 시스템의 다른 실시예의 블록도이다.
도 8은 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 컴퓨터 시스템의 또 다른 실시예의 블록도이다.
도 9는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 시스템 온 칩의 일 실시예의 블록도이다.
도 10은 벡터 압축 및 회전 기능을 제공하는 명령어를 실행하는 프로세서의 일 실시예의 블록도이다.
도 11은 벡터 압축 및 회전 기능을 제공하는 IP 코어 개발 시스템의 일 실시예의 블록도이다.
도 12는 벡터 압축 및 회전 기능을 제공하는 아키텍처 에뮬레이션 시스템의 일 실시예를 예시한다.
도 13은 벡터 압축 및 회전 기능을 제공하는 명령어를 변환(translate)하는 시스템의 일 실시예를 예시한다.
도 14a는 벡터 압축 및 회전 기능을 제공하는 명령어의 일 실시예의 흐름도를 예시한다.
도 14b는 벡터 압축 및 회전 기능을 제공하는 명령어의 다른 실시예의 흐름도를 예시한다.
도 15a는 벡터 압축 및 회전 기능을 제공하는 명령어를 이용하는 프로세스의 일 실시예의 흐름도를 예시한다.
도 15b는 벡터 압축 및 회전 기능을 제공하는 명령어를 이용하는 프로세스의 다른 실시예의 흐름도를 예시한다.
도 16a는 벡터 압축 및 회전 기능을 제공하는 프로세스의 일 실시예의 흐름도를 예시한다.
도 16b는 벡터 압축 및 회전 기능을 제공하는 프로세스의 대안의 실시예의 흐름도를 예시한다.
도 17은 벡터 압축 및 회전 기능을 제공하는 프로세스의 또 다른 실시예의 흐름도를 예시한다.
도 18은 벤치마크 애플리케이션에서 벡터 압축 기능을 제공하는 프로세스의 일 실시예의 흐름도를 예시한다.
도 19a는 벤치마크 애플리케이션에서 벡터 압축 및 회전 기능을 제공하는 프로세스의 일 실시예의 흐름도를 예시한다.
도 19b는 벤치마크 애플리케이션에서 벡터 압축 및 회전 기능을 제공하는 프로세스의 대안의 실시예의 흐름도를 예시한다.
다음의 설명에는 프로세서, 컴퓨터 시스템, 또는 다른 처리 장치 내에서 또는 그와 관련하여 벡터 압축(vector compress) 및 회전 기능(rotate functionality)을 제공하는 명령어(instructions) 및 처리 로직(processing logic)이 개시된다.
본 명세서에는 벡터 압축 및 회전 기능을 제공하는 명령어 및 로직이 개시된다. 일부 실시예는 벡터 소스(vector source), 마스크(mask), 벡터 목적지(vector destination) 및 목적지 오프셋(destination offset)을 지정하는 명령어에 응답하여 마스크를 판독하고, 대응하는 마스크되지 않은 벡터 요소(unmasked vector elements)를 벡터 목적지 오프셋 위치에서 시작하여 벡터 소스에서 벡터 목적지 내의 인접한 순차적인 위치로 복사(copy)한다. 대안의 실시예는 벡터 목적지의 요소들을 제로화(zero)하고, 벡터 소스에서 어떤 요소도 복사되지 않는다. 일부 실시예에서, 벡터 소스로부터의 마스크되지 않은 벡터 요소는 벡터 목적지 내의 총 요소 위치 수를 모듈로(modulo)로 하여 인접한 순차적인 요소 위치로 복사된다. 대안의 일부 실시예에서, 복사는 벡터 목적지가 충만(full) 상태일 때마다 중단된다. 마스크되지 않은 벡터 요소를 벡터 소스에서 벡터 목적지 내의 인접한 순차적인 요소 위치로 복사할 때, 마스크 내 대응하는 필드의 값은 또한 마스크된 값으로도 변경될 수 있다. 따라서, 마스크 값은 진행 및/또는 완료를 추적하는데 이용될 수 있으며, 해당 명령어는 충만 상태가 된 목적지가 메모리에 저장된 후에 재실행될 수 있다. 다음에, 해당 명령어는 수정된 마스크 및 벡터 목적지 오프셋 0을 이용하여 벡터 압축 및 회전 명령어의 실행을 여전히 필요로 하는 요소들만을 압축할 수 있고, 그럼으로써 명령어 처리율(throughput)을 향상시키도록 재실행될 수 있다.
SIMD 압축 및 회전 명령어는 애플리케이션에서, 예를 들면, 그렇지 않고 쉽게 벡터화되지 않는 SPEC 벤치마크 슈트의 444.NAMD의 내부 루프에서와 같은 벤치마크 애플리케이션에서 벡터 압축 기능을 제공하여, 외부 메모리로의 고가의 순차적인 저장의 횟수를 감소시키고, 성능 및 명령어 처리율을 증가시키고, 전력 사용을 감소시키는데 이용될 수 있음을 인식할 것이다.
다음의 설명에서는, 본 발명의 실시예를 좀 더 철저히 이해하기 위해 처리 로직, 프로세서 형태, 마이크로 아키텍처 상태, 이벤트, 및 가능화(enablement) 메커니즘 등과 같은 많은 구체적인 상세 내용이 기술된다. 그러나, 당업자는 본 발명이 그러한 구체적인 상세 내용이 없이도 실시될 수 있음을 인식할 것이다. 또한, 본 발명의 실시예를 불필요하게 불명확하게 하는 것을 막기 위해 어떤 공지의 구조, 및 회로 등은 구체적으로 도시되지 않았다.
비록 다음의 실시예가 프로세서를 참조하여 설명되지만, 다른 실시예는 다른 형태의 집적 회로 및 로직 장치에도 적용가능하다. 본 발명의 실시예의 유사한 기술 및 가르침은 더 높은 파이프라인 처리율 및 향상된 성능으로부터 이익을 얻을 수 있는 다른 형태의 회로 또는 반도체 장치에 적용될 수 있다. 본 발명의 실시예의 가르침은 데이터 조작을 수행하는 어떤 프로세서 또는 기계에도 적용가능하다. 그러나, 본 발명은 512비트, 256비트, 128비트, 64비트, 32비트, 또는 16비트 데이터 연산을 수행하는 프로세서 또는 기계에 한정되지 않고 데이터 조작 또는 관리를 수행하는 어떤 프로세서 및 기계에도 적용될 수 있다. 또한, 다음의 설명은 예를 제공하고, 첨부의 도면은 예시 목적으로 다양한 예를 도시한다. 그러나, 이들 예는 본 발명의 실시예의 모든 가능한 구현의 완벽한 목록을 제공하기보다 단지 본 발명의 실시예의 예들을 제공하는 것으로 의도되므로 제한적인 의미로 해석되지 않아야 한다.
비록 아래의 예들에서는 실행 유닛 및 로직 회로의 문맥 내에서 명령어 처리 및 분산이 기술되지만, 본 발명의 다른 실시예는 기계 판독가능한 유형의 형태의 매체에 저장되어, 기계에 의해 실행될 때 그 기계가 본 발명의 적어도 일 실시예와 일치하는 기능을 수행하게 하는 데이터 또는 명령어를 통해 성취될 수 있다. 일 실시예에서, 본 발명의 실시예와 연관된 기능은 기계 실행가능한 명령어로 구현된다. 그러한 명령어는 그 명령어로 프로그램된 범용 또는 특수 목적의 프로세서가 본 발명의 단계들을 수행하게 하는데 이용될 수 있다. 본 발명의 실시예는 본 발명의 실시예에 따른 하나 이상의 연산을 수행하는 컴퓨터(또는 다른 전자 장치)를 프로그램하는데 이용될 수 있는 명령어를 저장한 기계 또는 컴퓨터 판독가능한 매체를 포함할 수 있는 컴퓨터 프로그램 제품(product) 또는 소프트웨어로 제공될 수 있다. 대안으로, 본 발명의 실시예의 단계들은 그 단계들을 수행하는 고정 함수(fixed-function) 로직을 포함하는 특정 하드웨어 컴포넌트에 의해, 또는 프로그램된 컴퓨터 컴포넌트 및 고정 함수 하드웨어 컴포넌트의 어떤 조합에 의해 수행될 수 있다.
본 발명의 실시예를 수행하는 로직을 프로그램하는데 이용되는 명령어는 시스템의 메모리, 이를 테면, DRAM, 캐시, 플래시 메모리, 또는 다른 저장장치 내에 저장될 수 있다. 또한, 그러한 명령어는 네트워크를 통해 또는 다른 컴퓨터 판독가능한 매체를 통해 분산될 수 있다. 따라서, 기계 판독가능한 매체는 기계(예를 들면, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하거나 전송하는 어떤 메커니즘, 다음으로 한정되지 않지만, 플로피 디스크, 광학 디스크, 콤팩트 디스크 판독 전용 메모리(CD-ROMs), 및 광자기 디스크, 판독 전용 메모리(ROMs), 랜덤 액세스 메모리(RAM), 소거 및 프로그램가능 판독 전용 메모리(EPROM), 전기적 소거 및 프로그램가능 판독 전용 메모리(EEPROM), 자기 또는 광학 카드, 플래시 메모리, 또는 인터넷을 통해 전기, 광학, 음향 또는 다른 형태의 전파 신호(예를 들면, 반송파, 적외선 신호, 디지털 신호 등)를 매개로 하여 정보를 전송할 때 이용되는 유형의 기계 판독가능한 저장장치를 포함할 수 있다. 따라서, 컴퓨터 판독가능한 매체는 기계(예를 들면, 컴퓨터)에 의해 판독가능한 형태로 전자 명령어 또는 정보를 저장하거나 전송하는데 적합한 어떤 형태의 유형의 기계 판독가능한 매체라도 포함한다.
설계는 창작부터 제조 시뮬레이션까지 여러 단계를 거칠 수 있다. 설계를 표현하는 데이터는 많은 방식으로 설계를 표현할 수 있다. 먼저, 시뮬레이션에서 유용한 것으로서, 하드웨어는 하드웨어 기술 언어(hardware description language) 또는 다른 기능적 기술 언어(functional description language)를 이용하여 표현될 수 있다. 또한, 설계 과정의 일부 단계에서 로직 및/또는 트랜지스터 게이트를 갖는 회로 레벨 모델이 생성될 수 있다. 또한, 대부분의 설계는 어떤 단계에서 하드웨어 모델에서 다양한 장치들의 물리적 배치를 표현하는 데이터 레벨에 이를 수 있다. 통상의 반도체 제조 기술이 이용되는 경우, 하드웨어 모델을 표현하는 데이터는 집적 회로를 제조하는데 이용되는 마스크의 여러 마스크 층에 다양한 특징의 존재 여부를 지정하는 데이터일 수 있다. 설계의 어떤 표현에서, 그러한 데이터는 어떤 형태의 기계 판독가능한 매체에도 저장될 수 있다. 디스크와 같은 메모리 또는 자기 또는 광학 저장장치는 정보의 전송을 위해 변조된 또는 그와 달리 생성된 광학 또는 전자파를 통해 전송된 정보를 저장하는 기계 판독가능한 매체일 수 있다. 코드 또는 설계를 표현하거나 운반하는 전기적 반송파가 전기 신호의 복사, 버퍼링, 또는 재전송을 수행할 정도로 전송되는 경우, 새로운 복사가 이루어진다. 따라서, 통신 제공자 또는 네트워크 제공자는 유형의 기계 판독가능한 매체에, 적어도 일시적으로, 반송파로 인코드된 정보와 같은 본 발명의 실시예의 기술을 구현한 물품(article)을 저장할 수 있다.
현대의 프로세서에서, 많은 다른 실행 유닛은 다양한 코드 및 명령어를 처리하고 실행하는데 이용된다. 일부 명령어는 빠르게 완료하지만, 다른 명령어는 완료하는데 많은 클럭 사이클을 필요로 할 수 있기 때문에, 모든 명령어가 똑같이 생성되지 않는다. 명령어의 처리율이 빠를수록, 프로세서의 전체 성능은 더 우수하다. 따라서, 많은 명령어를 가능한 빠르게 실행하는 것이 유리할 것이다. 그러나, 복잡도가 더 크고 실행 시간 및 프로세서 자원 면에서 더 많은 것을 요구하는 특정 명령어가 있다. 예를 들면, 부동 소수점(floating point) 명령어, 로드(load)/저장(store) 연산, 데이터 이동 등이 있다.
더 많은 컴퓨터 시스템이 인터넷, 텍스트, 및 멀티미디어 애플리케이션에서 이용됨에 따라, 시간이 지나면서 추가적인 프로세서 지원이 도입되었다. 일 실시예에서, 명령어 집합은 데이터 형태, 명령어, 레지스터 아키텍처, 어드레싱 모드, 메모리 아키텍처, 인터럽트(interrupt) 및 예외 처리(exception handling), 및 외부 입출력(I/O)을 포함하여 하나 이상의 컴퓨터 아키텍처와 연관될 수 있다.
일 실시예에서, 명령어 집합 아키텍처(ISA)는 하나 이상의 명령어 집합을 실행하는데 이용되는 프로세서 로직 및 회로를 포함하는 하나 이상의 마이크로 아키텍처로 구현될 수 있다. 따라서, 서로 다른 마이크로 아키텍처를 갖는 프로세서들은 공통 명령어 집합 중 적어도 일부를 공유할 수 있다. 예를 들면, Intel® Pentium 4 프로세서, Intel® CoreTM 프로세서, 및 캘리포니아주 서니베일(Sunnyvale CA) 소재의 어드밴스드 마이크로 디바이스사(Advanced Micro Devices, Inc)의 프로세서는 거의 동일한 버전의 x86 명령어 집합(일부 확장에는 새로운 버전이 추가됨)을 구현하지만, 내부 설계가 다르다. 마찬가지로, ARM 홀딩스사(ARM Holdings, Ltd.), MIPS, 또는 이들의 라이센시(licensees) 또는 어댑터와 같은, 다른 프로세서 개발 회사에서 설계한 프로세서는 공통 명령어 집합 중 적어도 일부를 공유할 수 있지만, 프로세서 설계가 다를 수 있다. 예를 들면, ISA와 동일한 레지스터 아키텍처는 전용 물리적 레지스터, 레지스터 리네이밍(renaming) 메커니즘을 이용하여(예를 들면, 레지스터 알리아스 테이블(RAT), 재배열 버퍼(ROB) 및 회수(retirement) 레지스터 파일을 이용하여) 동적으로 할당된 하나 이상의 물리적 레지스터를 포함하여 새로운 또는 공지의 기술을 이용한 다양한 마이크로 아키텍처로 다른 방식으로 구현될 수 있다. 일 실시예에서, 레지스터는 하나 이상의 레지스터, 레지스터 아키텍처, 레지스터 파일, 또는 소프트웨어 프로그래머에 의해 어드레스가능하거나 어드레스가능하지 않을 수 있는 다른 레지스터 집합을 포함할 수 있다.
일 실시예에서, 명령어는 하나 이상의 명령어 포맷을 포함할 수 있다. 일 실시예에서, 명령어 포맷은 무엇보다도 수행될 연산 및 그 연산이 수행되는 오퍼랜드(operand(s))를 지정하는 다양한 필드(비트 수, 비트 위치 등)를 나타낼 수 있다. 일부 명령어 포맷은 명령어 템플릿(templates)(또는 서브 포맷)으로 더 규정되고 분류될 수 있다. 예를 들면, 소정의 명령어 포맷의 명령어 템플릿들은 명령어 포맷 필드의 서로 다른 부분집합을 갖도록 규정되고 및/또는 소정 필드가 서로 다르게 해석되도록 규정될 수 있다. 일 실시예에서, 명령어는 명령어 포맷을 이용하여 (그리고 규정된 경우 그 명령어 포맷의 명령어 템플릿들 중 소정의 명령어 템플릿으로) 표현되고 연산 및 그 연산이 수행되는 오퍼랜드를 지정하거나 나타낸다.
과학적, 금융적, 자동 벡터화된 범용의 RMS(인지, 마이닝, 및 합성), 시각적 및 멀티미디어 애플리케이션(예를 들면, 2D/3D 그래픽, 이미지 처리, 비디오 압축/압축해제, 음성 인식 알고리즘 및 오디오 조작)은 많은 수의 데이터 항목에 대해 동일한 연산 수행을 요구한다. 일 실시예에서, 단일 명령어 다중 데이터(SIMD)는 프로세서가 다중 데이터 요소에 대한 연산을 수행하게 하는 명령어의 한 형태를 지칭한다. SIMD 기술은 레지스터 내의 비트들을 각각이 개별 값을 나타내는 고정 크기 또는 가변 크기의 많은 데이터 요소들로 논리적으로 분할할 수 있는 프로세서에서 이용될 수 있다. 예를 들면, 일 실시예에서, 64비트 레지스터 내의 비트들은 각각이 개별 16비트 값을 나타내는 4개의 개별 16비트 데이터 요소를 포함하는 소스 오퍼랜드로 구조화될 수 있다. 이러한 형태의 데이터는 '패킹된(packed)' 데이터 형태 또는 '벡터(vector)' 데이터 형태라고 지칭될 수 있고, 이러한 데이터 형태의 오퍼랜드는 패킹된 데이터 오퍼랜드 또는 벡터 오퍼랜드라고 지칭된다. 일 실시예에서, 패킹된 데이터 항목 또는 벡터는 단일 레지스터 내에 저장된 패킹된 데이터 요소들의 시퀀스일 수 있고 패킹된 데이터 오퍼랜드 또는 벡터 오퍼랜드는 SIMD 명령어(또는 '패킹된 데이터 명령어' 또는 '벡터 명령어')의 소스 또는 목적지 오퍼랜드일 수 있다. 일 실시예에서, SIMD 명령어는 2개의 소스 벡터 오퍼랜드에 대해 수행될 단일 벡터 연산을 지정하여 크기가 같거나 다른 목적지 벡터 오퍼랜드(결과 벡터 오퍼랜드라고도 지칭됨)를 생성하며, 이때 데이터 요소들의 수는 같거나 다르고, 데이터 요소 순서는 같거나 다르다.
x86, MMXTM, 스트리밍 SIMD 확장(SSE), SSE2, SSE3, SSE4.1, 및 SSE4.2 명령어를 포함하는 명령어 집합을 갖는 Intel® CoreTM 프로세서, 벡터 부동 소수점(VFP) 및/또는 NEON 명령어를 포함하는 명령어 집합을 갖는 ARM Cortex® 프로세서 패밀리와 같은 ARM 프로세서, 및 중국 과학원(Chinese Academy of Sciences)의 컴퓨팅 기술 연구소(ICT)에서 개발한 룽신(Loongson) 프로세서 패밀리와 같은 MIPS 프로세서에 채용된 바와 같은 SIMD 기술은 애플리케이션 성능 면에서 상당한 향상을 가능하게 하였다(CoreTM 및 MMXTM은 캘리포니아주 산타클라라(Santa Clara, Calif.) 소재의 인텔 코퍼레이션(Intel Corporation)의 등록 상표 또는 상표이다).
일 실시예에서, 목적지 및 소스 레지스터/데이터는 해당 데이터 또는 연산의 소스 또는 목적지를 나타내는 일반적인 용어이다. 일부 실시예에서, 이들은 레지스터, 메모리, 또는 도시된 바와 다른 명칭 또는 기능을 갖는 다른 저장소(storage areas)로 구현될 수 있다. 예를 들면, 일 실시예에서, "DEST1"은 일시적인 저장 레지스터 또는 다른 저장소일 수 있는 반면, "SRC1" 및 "SRC2"는 제1 및 제2 소스 저장 레지스터 또는 다른 저장소 등일 수 있다. 다른 실시예에서, SRC 및 DEST 저장소들 중 둘 이상은 동일한 저장소(예를 들면, SIMD 레지스터) 내의 서로 다른 데이터 저장 소자에 해당할 수 있다. 일 실시예에서, 소스 레지스터들 중 하나는 또한, 예를 들면, 제1 및 제2 소스 데이터에 대해 수행된 연산 결과를 목적지 레지스터로 기능하는 2개의 소스 레지스터 중 하나에 재기록(writing back)함으로써 목적지 레지스터로도 작용할 수 있다.
도 1a는 본 발명의 일 실시예에 따른 명령어를 실행하는 실행 유닛을 포함하는 프로세서를 포함하여 구성된 예시적인 컴퓨터 시스템의 블록도이다. 시스템(100)은 본 명세서에서 기술된 실시예에서와 같이 본 발명에 따라 데이터 처리 알고리즘을 수행하는 로직을 포함하는 실행 유닛을 채용하는 프로세서(102)와 같은 컴포넌트를 포함한다. 시스템(100)은 비록 (다른 마이크로프로세서를 갖는 PC, 엔지니어링 워크스테이션(engineering workstations), 및 셋탑 박스(set-top boxes) 등을 포함하여) 다른 시스템도 또한 이용될 수 있지만, 캘리포니아주 산타클라라(Santa Clara, California) 소재의 인텔 코퍼레이션(Intel Corporation)에서 입수가능한 PENTIUM® III, PENTIUM® 4, XeonTM, Itanium®, XScaleTM 및/또는 StrongARMTM 마이크로프로세서에 기반한 처리 시스템을 대표한다. 일 실시예에서, 샘플 시스템(100)은 비록 다른 오퍼레이팅 시스템(예를 들면, 유닉스(UNIX) 및 리눅스(Linux)), 임베디드 소프트웨어, 및/또는 그래픽 사용자 인터페이스도 또한 이용될 수 있지만, 워싱톤주 레드몬드(Redmond, Washington) 소재의 마이크로소프트 코퍼레이션(Microsoft Corporation)에서 입수가능한 WINDOWSTM 오퍼레이팅 시스템의 버전을 실행할 수 있다. 따라서, 본 발명의 실시예는 하드웨어 회로 및 소프트웨어의 어떤 특정한 조합으로 한정되지 않는다.
실시예는 컴퓨터 시스템으로 한정되지 않는다. 본 발명의 대안의 실시예는 핸드헬드 장치 및 임베디드 응용예와 같은 다른 장치에도 이용될 수 있다. 핸드헬드 장치의 일부 예는 셀룰러폰, 인터넷 프로토콜 장치, 디지털 카메라, 개인 휴대 정보 단말기(PDAs), 및 핸드헬드 PC를 포함한다. 임베디드 응용예는 마이크로컨트롤러, 디지털 신호 프로세서(DSP), 시스템 온 칩, 네트워크 컴퓨터(NetPC), 셋탑 박스, 네트워크 허브(hubs), 광역 네트워크(WAN) 스위치, 또는 적어도 일 실시예에 따라 하나 이상의 명령어를 수행할 수 있는 어떤 다른 시스템을 포함할 수 있다.
도 1a는 본 발명의 일 실시예에 따라 적어도 하나의 명령어를 실행하는 알고리즘을 수행하는 하나 이상의 실행 유닛(108)을 포함하는 프로세서(102)를 포함하여 구성된 컴퓨터 시스템(100)의 블록도이다. 일 실시예는 단일 프로세서 데스크탑 또는 서버 시스템의 문맥 내에서 설명될 수 있지만, 대안의 실시예는 다중프로세서 시스템에 포함될 수 있다. 시스템(100)은 '허브' 시스템 아키텍처의 일례이다. 컴퓨터 시스템(100)은 데이터 신호를 처리하는 프로세서(102)를 포함한다. 프로세서(102)는 복합 명령어 집합 컴퓨터(CISC) 마이크로프로세서, 축약형 명령어 집합 컴퓨팅(RISC) 마이크로프로세서, 매우 긴 명령어(VLIW) 마이크로프로세서, 명령어 집합들의 조합을 실행하는 프로세서, 또는, 예를 들면 디지털 신호 프로세서와 같은 어떤 다른 프로세서 장치일 수 있다. 프로세서(102)는 프로세서(102)와 시스템(100) 내의 다른 컴포넌트 간에서 데이터 신호를 전송할 수 있는 프로세서 버스(110)에 연결된다. 시스템(100)의 구성 요소들은 당업자에게 잘 알려진 이들의 통상적인 기능을 수행한다.
일 실시예에서, 프로세서(102)는 레벨 1(L1) 내부 캐시 메모리(104)를 포함한다. 이러한 아키텍처에 따라, 프로세서(102)는 단일 내부 캐시 또는 다중 레벨의 내부 캐시를 구비할 수 있다. 대안으로, 다른 실시예에서, 캐시 메모리는 프로세서(102)의 외부에 상주할 수 있다. 다른 실시예는 또한 특정 구현 및 필요에 따라 내부 및 외부 캐시 양자의 조합도 포함할 수 있다. 레지스터 파일(106)은 여러 형태의 데이터를 정수(integer) 레지스터, 부동 소수점(floating point) 레지스터, 상태 레지스터, 및 명령어 포인터 레지스터를 포함하여 다양한 레지스터에 저장할 수 있다.
프로세서(102)에는 또한 정수 및 부동 소수점 연산을 수행하는 로직을 포함하는 실행 유닛(108)도 상주한다. 프로세서(102)는 또한 소정의 매크로명령어(macroinstructions)를 위한 마이크로코드(microcode)를 저장하는 마이크로코드(ucode) ROM을 포함한다. 일 실시예에서, 실행 유닛(108)은 패킹된(packed) 명령어 집합(109)을 처리하는 로직을 포함한다. 패킹된 명령어 집합(109)을, 그 명령어를 실행하는 회로와 연관시켜, 범용 프로세서(102)의 명령어 집합에 포함시킴으로써, 범용 프로세서(102)에 패킹된 데이터를 이용하여 많은 멀티미디어 애플리케이션에 의해 이용되는 연산이 수행될 수 있다. 따라서, 많은 멀티미디어 애플리케이션은 프로세서의 데이터 버스의 전체 폭을 이용하여 패킹된 데이터에 대해 연산을 수행함으로써 좀 더 효율적으로 가속화되고 실행될 수 있다. 이로써 프로세서의 데이터 버스 전체에 걸쳐 더 작은 데이터 유닛을 전송할 필요없이 데이터 요소에 대한 한번 이상의 연산을 한번에 수행할 수 있다.
실행 유닛(108)의 대안의 실시예는 또한 마이크로컨트롤러, 임베디드 프로세서, 그래픽 장치, DSP, 및 다른 형태의 로직 회로에도 이용될 수 있다. 시스템(100)은 메모리(120)를 포함한다. 메모리(120)는 동적 랜덤 액세스 메모리(DRAM) 장치, 정적 랜덤 액세스 메모리(SRAM) 장치, 플래시 메모리 장치, 또는 다른 메모리 장치일 수 있다. 메모리(120)는 명령어 및/또는 프로세서(102)에 의해 실행될 수 있는 데이터 신호로 표현된 데이터를 저장할 수 있다.
시스템 로직 칩(116)은 프로세서 버스(110) 및 메모리(120)에 연결된다. 예시된 실시예에서 시스템 로직 칩(116)은 메모리 제어기 허브(MCH)이다. 프로세서(102)는 프로세서 버스(110)를 통해 MCH(116)와 통신할 수 있다. MCH(116)는 명령어 및 데이터 저장을 위해 그리고 그래픽 커맨드, 데이터 및 텍스처(textures)의 저장을 위해 메모리(120)에 고대역폭 메모리 경로(118)를 제공한다. MCH(116)는 프로세서(102), 메모리(120), 및 시스템(100) 내의 다른 컴포넌트 간에 데이터 신호를 전달하고, 프로세서 버스(110), 메모리(120), 및 시스템 I/O(122) 간에 데이터 신호를 연결(bridge)하기 위한 것이다. 일부 실시예에서, 시스템 로직 칩(116)은 그래픽 제어기(112)에 연결하기 위한 그래픽 포트를 제공할 수 있다. MCH(116)는 메모리 인터페이스(118)를 통해 메모리(120)에 연결된다. 그래픽 카드(112)는 가속 그래픽 포트(AGP) 상호접속부(interconnect)(114)를 통해 MCH(116)에 연결된다.
시스템(100)은 사유(proprietary) 허브 인터페이스 버스(122)를 이용하여 MCH(116)를 I/O 제어기 허브(ICH)(130)에 연결한다. ICH(130)는 로컬 I/O 버스를 통해 일부 I/O 장치에 직접 연결을 제공한다. 로컬 I/O 버스는 주변장치(peripherals)를 메모리(120), 칩셋, 및 프로세서(102)에 연결하기 위한 고속 I/O 버스이다. 일부 예는 오디오 제어기, 펌웨어 허브(플래시 BIOS)(128), 무선 송수신기(126), 데이터 저장장치(124), 사용자 입력 및 키보드 인터페이스를 포함하는 레거시(legacy) I/O 제어기, 범용 직렬 버스(USB)와 같은 직렬 확장 포트, 및 네트워크 제어기(134)이다. 데이터 저장 장치(124)는 하드디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 장치, 플래시 메모리 장치, 또는 다른 대용량 저장 장치를 포함할 수 있다.
시스템의 다른 실시예에서, 일 실시예에 따른 명령어는 시스템 온 칩과 함께 이용될 수 있다. 시스템 온 칩의 일 실시예는 프로세서 및 메모리를 포함한다. 한가지 그러한 시스템의 메모리는 플래시 메모리이다. 플래시 메모리는 프로세서 및 다른 시스템 컴포넌트와 같은 다이(die)에 배치될 수 있다. 또한, 메모리 제어기 또는 그래픽 제어기와 같은 다른 로직 블록도 시스템 온 칩 상에 배치될 수 있다.
도 1b는 본 발명의 일 실시예의 원리를 구현하는 데이터 처리 시스템(140)을 예시한다. 당업자는 본 명세서에서 기술된 실시예가 본 발명의 실시예의 범주로부터 벗어남이 없이 대안의 처리 시스템과 함께 이용될 수 있음을 쉽게 인식할 것이다.
컴퓨터 시스템(140)은 일 실시예에 따른 적어도 하나의 명령어를 수행할 수 있는 처리 코어(159)를 포함한다. 일 실시예에서, 처리 코어(159)는 다음으로 한정되지 않지만 CISC, RISC 또는 VLIW 형태의 아키텍처를 포함하는 어떤 형태의 아키텍처의 처리 유닛을 나타낸다. 처리 코어(159)는 또한 하나 이상의 프로세스 기술로 그리고 기계 판독가능한 매체 상에 충분히 상세히 표현됨으로써 제조에 적합할 수 있으며, 상기 제조를 용이하게 하는데 적합할 수 있다.
처리 코어(159)는 실행 유닛(142), 레지스터 파일(들) 집합(145), 및 디코더(144)를 포함한다. 처리 코어(159)는 또한 본 발명의 실시예를 이해하는데 필요하지 않은 추가 회로(미도시)를 포함한다. 실행 유닛(142)은 처리 코어(159)에 수신된 명령어를 실행하는데 이용된다. 전형적인 프로세서 명령어를 수행하는 것 외에, 실행 유닛(142)은 패킹된 명령어 집합(143) 내의 패킹된 데이터 포맷에 대해 연산을 수행하는 명령어를 수행할 수 있다. 패킹된 명령어 집합(143)은 본 발명의 실시예를 수행하는 명령어 및 다른 패킹된 명령어를 포함한다. 실행 유닛(142)은 내부 버스를 통해 레지스터 파일(145)에 연결된다. 레지스터 파일(145)은 데이터를 포함하여 정보를 저장하는 처리 코어(159) 상의 저장소를 나타낸다. 전술한 바와 같이, 패킹된 데이터를 저장하는데 이용되는 저장소는 중요하지 않다는 것이 이해된다. 실행 유닛(142)은 디코더(144)에 연결된다. 디코더(144)는 처리 코어(159)에 수신된 명령어를 제어 신호 및/또는 마이크로코드 엔트리점(entry points)으로 디코드하는데 이용된다. 이러한 제어 신호 및/또는 마이크로코드 엔트리점에 응답하여, 실행 유닛(142)은 적절한 연산을 수행한다. 일 실시예에서, 디코더는 명령어 내에 표시된 해당 데이터에 대해 어떤 연산을 수행하여야 하는지를 나타내는 명령어의 연산코드(opcode)를 해석하는데 이용된다.
처리 코어(159)는 버스(141)와 연결되어 다음으로 한정되지 않지만, 예를 들면, 동기식 동적 랜덤 액세스 메모리(SDRAM) 제어(146), 정적 랜덤 액세스 메모리(SRAM) 제어(147), 버스트 플래시 메모리 인터페이스(148), 국제 개인용 컴퓨터 메모리 카드 협회(PCMCIA)/콤팩트 플래시(CF) 카드 제어(149), 액정 디스플레이(LCD) 제어(150), 직접 메모리 접근(DMA) 제어기(151), 및 대안의 버스 마스터 인터페이스(152)를 포함할 수 있는 다양한 다른 시스템 장치와 통신한다. 일 실시예에서, 데이터 처리 시스템(140)은 또한 I/O 버스(153)를 통해 다양한 I/O 장치와 통신하기 위한 I/O 브리지(154)를 포함할 수 있다. 이러한 I/O 장치는 다음으로 한정되지 않지만, 예를 들면, 범용 비동기식 송/수신기(UART)(155), 범용 직렬 버스(USB)(156), 블루투스 무선 UART(157) 및 I/O 확장 인터페이스(158)를 포함할 수 있다.
데이터 처리 시스템(140)의 일 실시예는 텍스트 스트링(text string) 비교 연산을 포함하여 SIMD 연산을 수행할 수 있는 모바일 네트워크 및/또는 무선 통신 및 처리 코어(159)를 제공한다. 처리 코어(159)는 월시 하다마드(Walsh-Hadamard) 변환, 고속 푸리에 변환(FFT), 이산 코사인 변환(DCT), 및 이들 각각의 역변환 등의 이산 변환을 포함하여 다양한 오디오, 비디오, 이미징 및 통신 알고리즘; 컬러 공간(color space) 변환, 비디오 인코드 움직임 추정 또는 비디오 디코드 움직임 보상과 같은 압축/압축해제 기술; 및 펄스 코드 변조(PCM)와 같은 변조/복조(MODEM) 기능으로 프로그램될 수 있다.
도 1c는 벡터 압축 및 회전 기능을 제공하는 명령어를 실행할 수 있는 데이터 처리 시스템의 또 다른 대안의 실시예를 예시한다. 대안의 일 실시예에 따르면, 데이터 처리 시스템(160)은 메인 프로세서(166), SIMD 코프로세서(coprocessor)(161), 캐시 메모리(167), 및 입/출력 시스템(168)을 포함할 수 있다. 입/출력 시스템(168)은 선택적으로 무선 인터페이스(169)에 연결될 수 있다. SIMD 코프로세서(161)는 일 실시예에 따른 명령어를 포함하여 연산을 수행할 수 있다. 처리 코어(170)는 하나 이상의 프로세스 기술로 그리고 기계 판독가능한 매체 상에 충분히 상세히 표현됨으로써 제조에 적합할 수 있고, 처리 코어(170)를 포함하는 데이터 처리 시스템(160)의 전부 또는 일부의 제조를 용이하게 하는데 적합할 수 있다.
일 실시예에서, SIMD 코프로세서(161)는 실행 유닛(162) 및 레지스터 파일(들) 집합(164)을 포함한다. 메인 프로세서(166)의 일 실시예는 실행 유닛(162)에 의한 실행을 위해 일 실시예에 따른 명령어를 포함하여 명령어 집합(163)의 명령어를 인식하는 디코더(165)를 포함한다. 대안의 실시예에서, SIMD 코프로세서(161)는 또한 명령어 집합(163)의 명령어를 디코드하는 디코더(165B)의 적어도 일부를 포함한다. 처리 코어(170)는 또한 본 발명의 실시예를 이해하는데 필요하지 않은 추가 회로(미도시)를 포함한다.
동작에 있어서, 메인 프로세서(166)는 캐시 메모리(167), 및 입/출력 시스템(168)과의 상호작용을 포함하여 일반적인 형태의 데이터 처리 연산을 제어하는 일련의 데이터 처리 명령어를 실행한다. 일련의 데이터 처리 명령어 내에는 SIMD 코프로세서 명령어가 삽입된다. 메인 프로세서(166)의 디코더(165)는 이러한 SIMD 코프로세서 명령어를 부착된 SIMD 코프로세서(161)에 의해 실행되어야하는 형태로 인식한다. 따라서, 메인 프로세서(166)는 이러한 SIMD 코프로세서 명령어(또는 SIMD 코프로세서 명령어를 나타내는 제어 신호)를 코프로세서 버스(171) 상에 발행(issue)하며, 그로부터 그 명령어는 어떤 부착된 SIMD 코프로세서에 의해 수신된다. 이 경우, SIMD 코프로세서(161)는 그 목적으로 의도된 어떤 수신된 SIMD 코프로세서 명령어를 수신하고 실행할 것이다.
데이터는 SIMD 코프로세서 명령어에 의해 무선 인터페이스(169)를 통해 수신되어 처리될 수 있다. 일례에서, 음성 통신은 디지털 신호 형태로 수신될 수 있고, 이는 SIMD 코프로세서 명령어에 의해 처리되어 음성 통신을 나타내는 디지털 오디오 샘플을 재생성할 수 있다. 다른 예에서, 압축된 오디오 및/또는 비디오는 디지털 비트 스트림 형태로 수신될 수 있고, 이는 SIMD 코프로세서 명령어에 의해 처리되어 디지털 오디오 샘플 및/또는 동영상 프레임을 재생성할 수 있다. 처리 코어(170)의 일 실시예에서, 메인 프로세서(166), 및 SIMD 코프로세서(161)는 실행 유닛(162), 레지스터 파일(들) 집합(164), 및 디코더(165)를 포함하는 단일 처리 코어(170)에 통합되어 일 실시예에 따른 명령어를 포함하는 명령어 집합(163)의 명령어를 인식한다.
도 2는 본 발명의 일 실시예에 따른 명령어를 수행하는 로직 회로를 포함하는 프로세서(200)의 마이크로 아키텍처의 블록도이다. 일부 실시예에서, 일 실시예에 따른 명령어는 바이트, 워드, 더블워드, 쿼드워드 등의 크기뿐만 아니라, 단정도 및 배정도 정수(single and double precision integer) 및 부동 소수점 데이터 형태(datatypes)와 같은 데이터 형태를 갖는 데이터 요소에 대해 연산하도록 실행될 수 있다. 일 실시예에서, 순차적(in-order) 프론트 엔드(201)는 실행될 명령어를 페치(fetch)하고 그 명령어를 나중에 프로세서 파이프라인에 이용되도록 준비하는 프로세서(200)의 일부이다. 프론트 엔드(201)는 여러 유닛을 포함할 수 있다. 일 실시예에서, 명령어 프리페처(prefetcher)(226)는 메모리에서 명령어를 페치하고 이들을 명령어 디코더(228)에 공급하고 다시 이들을 디코드하거나 해석한다. 예를 들면, 일 실시예에서, 디코더는 수신된 명령어를 기계가 실행할 수 있는 "마이크로 명령어" 또는 "마이크로 연산"이라는(마이크로 op 또는 uops라고도 함) 하나 이상의 연산으로 디코드한다. 다른 실시예에서, 디코더는 명령어를 마이크로 아키텍처에 의해 이용되는 연산코드 및 해당 데이터 및 제어 필드로 분석하여 일 실시예에 따른 연산을 수행한다. 일 실시예에서, 트레이스(trace) 캐시(230)는 디코드된 uops를 취하고 이들을 uop 큐(234)에서 실행을 위해 프로그램 순서화된 시퀀스 또는 트레이스로 어셈블한다. 트레이스 캐시(230)가 복합 명령어를 만나면, 마이크로코드 ROM(232)은 연산을 완료하는데 필요한 uops를 제공한다.
일부 명령어는 단일 마이크로 op로 변환되며, 반면에 다른 명령어는 전체 연산의 완료를 위해 여러 마이크로 op(micro-ops)가 필요하다. 일 실시예에서, 만일 명령어 완료를 위해 4개보다 많은 마이크로 op가 필요한 경우, 디코더(228)는 마이크로코드 ROM(232)에 액세스하여 명령어를 수행한다. 일 실시예에서, 명령어는 명령어 디코더(228)에서 처리할 작은 수의 마이크로 op로 디코드될 수 있다. 다른 실시예에서, 연산을 성취하기 위해 많은 마이크로 op가 필요한 경우 명령어는 마이크로코드 ROM(232) 내에 저장될 수 있다. 트레이스 캐시(230)는 일 실시예에 따른 하나 이상의 명령어를 완료하기 위해 정확한 마이크로 명령어 포인터를 결정하여 마이크로코드 시퀀스를 마이크로코드 ROM(232)에서 판독하는 엔트리점 프로그램가능 로직 어레이(PLA)를 지칭한다. 마이크로코드 ROM(232)에서 명령어의 마이크로 op 시퀀싱을 완료한 후, 기계의 프론트 엔드(201)는 트레이스 캐시(230)에서 마이크로 op의 페칭을 재개한다.
비순차적(out-of-order) 실행 엔진(203)은 명령어 실행을 준비하는 곳이다. 비순차적 실행 로직은 명령어가 실행을 위해 파이프라인을 따라 진행하여 스케줄됨에 따라 그 명령어의 흐름을 원활하게 하고 재배열하여 성능을 최적화하는 복수의 버퍼를 갖는다. 할당기(allocator) 로직은 각 uop가 실행을 위해 순차적으로 필요한 기계 버퍼 및 자원을 할당한다. 레지스터 리네이밍 로직은 로직 레지스터를 레지스터 파일 내의 엔트리로 리네임한다. 할당기는 또한 명령어 스케줄러, 즉 메모리 스케줄러, 고속 스케줄러(202), 저속/일반적인 부동 소수점 스케줄러(204), 및 간단한 부동 소수점 스케줄러(206) 앞에, 하나가 메모리 연산을 위한 것이고 하나가 비메모리 연산을 위한 것인 2개의 uop 큐(queues) 중 하나의 큐의 각 uop의 엔트리를 할당한다. uop 스케줄러(202, 204, 206)는 uops가 자신들의 연산을 완료하는데 필요한 이들의 의존적 입력 레지스터 오퍼랜드 소스의 준비성(readliness) 및 실행 자원의 유효성(availabilty)에 기초하여 uop가 실행할 준비가 된 때를 결정한다. 일 실시예의 고속 스케줄러(202)는 메인 클록 사이클의 각 절반마다 스케줄할 수 있는 반면, 다른 스케줄러는 단지 메인 프로세서 클럭 사이클마다 한번만 스케줄할 수 있다. 스케줄러는 디스패치 포트가 실행에 맞게 uops를 스케줄하는 것을 중재한다.
레지스터 파일(208, 210)은 스케줄러(202, 204, 206)와, 실행 블록(211) 내의 실행 유닛(212, 214, 216, 218, 220, 222, 224) 사이에 위치한다. 정수 및 부동 소수점 연산 각각을 위해 개별의 레지스터 파일(208, 210)이 존재한다. 일 실시예의 각 레지스터 파일(208, 210)은 또한 아직까지 레지스터 파일에 기록되지 않은 막 완료된 결과를 바이패스(bypass)하거나 새로운 의존적인 uops로 전달할 수 있는 바이패스 네트워크를 포함한다. 정수 레지스터 파일(208) 및 부동 소수점 레지스터 파일(210)은 또한 데이터를 다른 것과 통신할 수 있다. 일 실시예에서, 정수 레지스터 파일(208)은 제1 레지스터 파일이 데이터의 하위 32비트용이고 제2 레지스터 파일이 데이터의 상위 32비트용인 2개의 개별 레지스터 파일로 분리된다. 일 실시예의 부동 소수점 레지스터 파일(210)은 부동 소수점 명령어가 전형적으로 64 내지 128비트 폭의 오퍼랜드를 갖기 때문에 128비트 폭의 엔트리(entries)를 갖는다.
실행 블록(211)은 명령어를 실제로 실행하는 실행 유닛(212, 214, 216, 218, 220, 222, 224)을 포함한다. 이 섹션은 마이크로 명령어들이 실행할 필요가 있는 정수 및 부동 소수점 데이터 오퍼랜드 값들을 저장하는 레지스터 파일(208, 210)을 포함한다. 일 실시예의 프로세서(200)는 복수의 실행 유닛, 즉 어드레스 생성 유닛(AGU)(212), AGU(214), 고속 ALU(216), 고속 ALU(218), 저속 ALU(220), 부동 소수점 ALU(222), 부동 소수점 이동 유닛(224)으로 구성된다. 일 실시예에서, 부동 소수점 실행 블록(222, 224)은 부동 소수점, MMX, SIMD, 및 SSE, 또는 다른 연산을 실행한다. 일 실시예의 부동 소수점 ALU(222)는 분주(divide), 제곱근(square root), 및 나머지 마이크로 op를 실행하는 64비트x64비트 부동 소수점 분주기를 포함한다. 본 발명의 실시예에서, 부동 소수점 값과 관련된 명령어는 부동 소수점 하드웨어로 처리될 수 있다. 일 실시예에서, ALU 연산은 고속 ALU 실행 유닛(216, 218)으로 이동한다. 일 실시예의 고속 ALU(216, 218)는 클럭 사이클 절반의 유효 지연(effective latency)을 갖고 고속 연산을 실행할 수 있다. 일 실시예에서, 대부분의 복소(complex) 정수 연산은 저속 ALU(220)가 곱셈기, 시프트, 플래그(flag) 로직, 및 분기(branch) 처리와 같은 장시간 지연 형태의 연산용 정수 실행 하드웨어를 포함하기 때문에 저속 ALU(220)로 이동한다. 메모리 로드(load)/저장(store) 연산은 AGU(212, 214)에 의해 실행된다. 일 실시예에서, 정수 ALU(216, 218, 220)는 64비트 데이터 오퍼랜드에 대해 정수 연산을 수행하는 문맥 내에서 기술된다. 대안의 실시예에서, ALU(216, 218, 220)는 16, 32, 128, 256 등을 포함하는 다양한 데이터 비트를 지원하도록 구현될 수 있다. 마찬가지로, 부동 소수점 유닛(222, 224)은 다양한 폭의 비트를 갖는 다양한 오퍼랜드를 지원하도록 구현될 수 있다. 일 실시예에서, 부동 소수점 유닛(222, 224)은 SIMD 및 멀티미디어 명령어와 관련된 128비트 폭의 패킹된 데이터 오퍼랜드에 대해 연산할 수 있다.
일 실시예에서, uops 스케줄러(202, 204, 206)는 부모 로드(parent load)가 실행을 완료하기 전에 의존적인 연산을 디스패치(dispatch)한다. uops가 프로세서(200)에서 추론적으로 스케줄되고 실행되기 때문에, 프로세서(200)는 또한 메모리 누락(misses)을 처리하는 로직을 포함한다. 만일 데이터 캐시에서 데이터 로드가 누락하면, 파이프라인 플라이트 중(in flight)에 일시적으로 부정확한 데이터를 갖는 스케줄러를 남긴 의존적인 연산이 있을 수 있다. 재생(replay) 메커니즘은 부정확한 데이터를 이용하는 명령어를 추적하고 재실행한다. 단지 의존적인 연산만 재생될 필요가 있고 독립적인 연산은 완료되도록 한다. 프로세서의 일 실시예의 스케줄러 및 재생 메커니즘은 또한 벡터 압축 및 회전 기능을 제공하는 명령어를 획득하도록 설계된다.
"레지스터"라는 용어는 명령어의 일부로 이용되어 오퍼랜드를 식별하는 온 보드(on-board) 프로세서 저장 위치를 지칭할 수 있다. 다시 말하면, 레지스터는 (프로그래머의 관점에서) 프로세서의 외부에서 이용가능한 것일 수 있다. 그러나, 일 실시예의 레지스터는 의미가 특정 형태의 회로로 한정되지 않아야 한다. 그보다, 일 실시예의 레지스터는 데이터를 저장하고 제공할 수 있으며, 본 명세서에서 기술된 기능을 수행할 수 있다. 본 명세서에서 기술된 레지스터는 전용 물리적 레지스터, 레지스터 리네이밍을 이용하여 동적으로 할당된 물리적 레지스터, 전용 및 동적으로 할당된 물리적 레지스터의 조합 등과 같은 어떤 수의 다른 기술을 이용한 프로세서 내의 회로로 구현될 수 있다. 일 실시예에서, 정수 레지스터는 32비트 정수 데이터를 저장한다. 일 실시예의 레지스터 파일은 또한 패킹된 데이터용 8개의 멀티미디어 SIMD 레지스터를 포함한다. 아래의 설명에서, 레지스터는 캘리포니아주 산타클라라(Santa Clara, California) 소재의 인텔 코퍼레이션(Intel Corporation)의 MMX 기술로 가능한 마이크로프로세서에서 64비트 폭의 MMXTM 레지스터(어떤 경우에는, 'mm' 레지스터라고도 지칭됨)와 같은 패킹된 데이터를 유지하도록 설계된 데이터 레지스터인 것으로 이해된다. 정수 및 부동 소수점 형태 둘 다에서 이용가능한 이러한 MMX 레지스터는 SIMD 및 SSE 명령어를 수반하는 패킹된 데이터 요소로 연산할 수 있다. 마찬가지로, SSE2, SSE3, SSE4, 또는 그 이상(일반적으로 "SSEx"라고 지칭됨)과 관련된 128비트 폭의 XMM 레지스터는 또한 그러한 패킹된 데이터 오퍼랜드를 유지하는데 이용될 수 있다. 일 실시예에서, 패킹된 데이터 및 정수 데이터를 저장할 때, 레지스터는 그 두 데이터 형태를 구별할 필요가 없다. 일 실시예에서, 정수 및 부동 소수점은 동일 레지스터 파일에 포함되거나 서로 다른 레지스터 파일에 포함된다. 또한, 일 실시예에서, 부동 소수점 및 정수 데이터는 서로 다른 레지스터 또는 동일 레지스터에 저장될 수 있다.
다음의 도면의 예에서는, 많은 데이터 오퍼랜드에 대해 기술된다. 도 3a는 본 발명의 일 실시예에 따른 멀티미디어 레지스터 내의 다양한 패킹된 데이터 형태 표현을 예시한다. 도 3a는 128비트 폭의 오퍼랜드에 대한 패킹된 바이트(310), 패킹된 워드(320), 및 패킹된 더블워드(dword)(330)의 데이터 형태를 예시한다. 이 예의 패킹된 바이트 포맷(310)은 길이가 128비트이고 16개의 패킹된 바이트 데이터 요소를 포함한다. 여기서, 1 바이트는 8비트 데이터로 규정된다. 각 바이트 데이터 요소에 대한 정보는 바이트 0의 경우 비트 7 내지 비트 0, 바이트 1의 경우 비트 15 내지 비트 8, 바이트 2의 경우 비트 23 내지 비트 16, 마지막으로 바이트 15의 경우 비트 120 내지 비트 127에 저장된다. 따라서, 레지스터에는 모든 이용가능한 비트들이 이용된다. 이러한 저장 배열은 프로세서의 저장 효율을 증가시켜 준다. 또한, 16개의 데이터 요소를 액세스함에 따라, 이제 16개의 데이터 요소에 대해 한 번의 연산이 병렬로 수행될 수 있다.
일반적으로, 데이터 요소는 길이가 같은 다른 데이터 요소와 함께 단일 레지스터 또는 메모리 위치에 저장되는 개별 데이터 피스(piece)이다. SSEx 기술과 관련된 패킹된 데이터 시퀀스에서, XMM 레지스터에 저장된 데이터 요소들의 수는 128비트 나누기 개별 데이터 요소의 비트 길이이다. 유사하게, MMX 및 SSE 기술과 관련된 패킹된 데이터 시퀀스에서, MMX 레지스터에 저장된 데이터 요소의 수는 64비트 나누기 개별 데이터 요소의 비트 길이이다. 비록 도 3a에 예시된 데이터 형태가 128비트 길이지만, 본 발명의 실시예는 또한 64비트 폭, 256비트 폭, 512비트 폭, 또는 다른 크기의 오퍼랜드와 연산할 수 있다. 이 예의 패킹된 워드 포맷(320)은 길이가 128비트이고 8개의 패킹된 워드 데이터 요소를 포함한다. 각 패킹된 워드는 16비트의 정보를 포함한다. 도 3a의 패킹된 더블워드 포맷(330)은 길이가 128비트이고 4개의 패킹된 더블워드 데이터 요소를 포함한다. 각 패킹된 더블워드 데이터 요소는 32비트의 정보를 포함한다. 패킹된 쿼드워드는 길이가 128비트이고 2개의 패킹된 쿼드워드 데이터 요소를 포함한다.
도 3b는 대안의 레지스터 내부의(in-register) 데이터 저장 포맷을 예시한다. 각 패킹된 데이터는 하나보다 많은 독립 데이터 요소를 포함할 수 있다. 3가지 패킹된 데이터 포맷, 즉 패킹된 하프(half)(341), 패킹된 싱글(single)(342), 및 패킹된 더블(double)(343)이 예시된다. 패킹된 하프(341), 패킹된 싱글(342), 및 패킹된 더블(343)의 일 실시예는 고정점(fixed-point) 데이터 요소를 포함한다. 대안의 실시예에서, 패킹된 하프(341), 패킹된 싱글(342), 및 패킹된 더블(343) 중 하나 이상은 부동 소수점 데이터 요소를 포함할 수 있다. 패킹된 하프(341)의 대안의 일 실시예는 길이가 8개의 16비트 데이터 요소를 포함하는 128비트이다. 패킹된 싱글(342)의 일 실시예는 길이가 128비트이고 4개의 32비트 데이터 요소를 포함한다. 패킹된 더블(343)의 일 실시예는 길이가 128비트이고 2개의 64비트 데이터 요소를 포함한다. 이러한 패킹된 데이터 포맷은 다른 레지스터 길이, 예를 들면, 96비트, 160비트, 192비트, 224비트, 256비트, 512비트 또는 그 이상으로 확장될 수 있음을 인식할 것이다.
도 3c는 본 발명의 일 실시예에 따른 멀티미디어 레지스터 내의 서명된(signed) 및 비서명된(unsigned) 다양한 패킹된 데이터 형태 표현을 예시한다. 비서명된 패킹된 바이트 표현(344)은 SIMD 레지스터 내의 비서명된 패킹된 바이트의 저장을 예시한다. 각 바이트 데이터 요소의 정보는 바이트 0의 경우 비트 7 내지 비트 0, 바이트 1의 경우 비트 15 내지 비트 8, 바이트 2의 경우 비트 23 내지 비트 16, 등등, 마지막으로 바이트 15의 경우 비트 120 내지 비트 127에 저장된다. 따라서, 레지스터에는 모든 이용가능한 비트들이 이용된다. 이러한 저장 배열은 프로세서의 저장 효율을 증가시킬 수 있다. 또한, 16개의 데이터 요소를 액세스함에 따라, 이제 16개의 데이터 요소에 대해 한 번의 연산이 병렬 방식으로 수행될 수 있다. 서명된 패킹된 바이트 표현(345)은 서명된 패킹된 바이트의 저장을 예시한다. 모든 바이트 데이터 요소의 8번째 비트는 서명 표시자(sign indicator)임을 주목하자. 비서명된 패킹된 워드 표현(346)은 워드 7 내지 워드 0가 SIMD 레지스터에 어떻게 저장되는지를 예시한다. 서명된 패킹된 워드 표현(347)은 비서명된 패킹된 워드의 레지스터 내부 표현(346)과 유사하다. 각 워드 데이터 요소의 16번째 비트는 서명 표시자임을 주목하자. 비서명된 패킹된 더블워드 표현(348)은 더블워드 데이터 요소가 어떻게 저장되는지를 보여준다. 서명된 패킹된 더블워드 표현(349)은 비서명된 패킹된 더블워드의 레지스터 내부 표현(348)과 유사하다. 필요한 서명 비트는 각 더블워드 데이터 요소의 32번째 비트임을 주목하자.
도 3d는 32 또는 그 이상의 비트를 갖는 연산 인코딩(연산코드, opcode) 포맷(360), 및 intel.com/products/processor/manuals/의 월드 와이드 웹(www) 상에서 캘리포니아주 산타클라라(Santa Clara, CA) 소재의 인텔 코퍼레이션(Intel Corporation)에서 입수가능한, "Intel® 64 및 IA-32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B: Instruction Set Reference A-Z"에 기술된 연산코드 포맷의 한 형태에 해당하는 레지스터/메모리 오퍼랜드 어드레싱 모드의 일 실시예를 도시한다. 일 실시예에서, 명령어는 필드(361 및 362) 중 하나 이상에 의해 인코드될 수 있다. 2개까지의 소스 오퍼랜드 식별자(364 및 365)를 포함하여, 명령어 당 2개까지의 오퍼랜드 위치가 식별될 수 있다. 일 실시예에서, 목적지 오퍼랜드 식별자(366)는 소스 오퍼랜드 식별자(364)와 동일하지만, 다른 실시예에서 이들은 서로 다르다. 대안의 실시예에서, 목적지 오퍼랜드 식별자(366)는 소스 오퍼랜드 식별자(365)와 동일하지만, 다른 실시예에서 이들은 서로 다르다. 일 실시예에서, 소스 오퍼랜드 식별자(364 및 365)에 의해 식별된 소스 오퍼랜드 중 하나는 해당 명령어의 결과에 의해 오버라이트(overwritten)되지만, 다른 실시예에서 식별자(364)는 소스 레지스터 요소에 해당하고 식별자(365)는 목적지 레지스터 요소에 해당한다. 일 실시예에서, 오퍼랜드 식별자(364 및 365)는 32비트 또는 64비트 소스 및 목적지 오퍼랜드를 식별하는데 이용될 수 있다.
도 3e는 40 또는 그 이상의 비트를 갖는 다른 대안의 연산 인코딩(연산코드) 포맷(370)을 도시한다. 연산코드 포맷(370)은 연산코드 포맷(360)에 대응하고 선택적 프리픽스(prefix) 바이트(378)를 포함한다. 일 실시예에 따른 명령어는 필드(378, 371, 및 372) 중 하나 이상에 의해 인코드될 수 있다. 소스 오퍼랜드 식별자(374 및 375)에 의해 그리고 프리픽스 바이트(378)에 의해 명령어 당 2개까지의 오퍼랜드 위치가 식별될 수 있다. 일 실시예에서, 프리픽스 바이트(378)는 32비트 또는 64비트 소스 및 목적지 오퍼랜드를 식별하는데 이용될 수 있다. 일 실시예에서, 목적지 오퍼랜드 식별자(376)는 소스 오퍼랜드 식별자(374)와 동일하지만, 다른 실시예에서 이들은 서로 다르다. 대안의 실시예에서, 목적지 오퍼랜드 식별자(376)는 소스 오퍼랜드 식별자(375)와 동일하지만, 다른 실시예에서 이들은 서로 다르다. 일 실시예에서, 명령어는 오퍼랜드 식별자(374 및 375)에 의해 식별된 오퍼랜드 중 하나 이상에 대해 연산하고 오퍼랜드 식별자(374 및 375)에 의해 식별된 하나 이상의 오퍼랜드는 그 명령어의 결과에 의해 오버라이트되지만, 다른 실시예예서, 식별자(374 및 375)에 의해 식별된 오퍼랜드는 다른 레지스터의 다른 데이터 요소에 기록된다. 연산코드 포맷(360 및 370)은 MOD 필드(363 및 373)에 의해 그리고 선택적인 스케일 인덱스 베이스(scale-index-base) 및 변위(displacement) 바이트에 의해 부분적으로 지정된 레지스터 간(register to register), 메모리 레지스터 간(memory to register), 메모리별 레지스터(register by memory), 레지스터별(register by register), 즉시 레지스터(register by immediate), 레지스터 메모리 간(register to memory) 어드레싱을 가능하게 해준다.
다음에 도 3f를 참조하면, 대안의 일부 실시예에서, 코프로세서 데이터 처리(CDP) 명령어를 통해 64비트(또는 128비트, 또는 256비트, 또는 512비트 또는 그 이상) 단일 명령어 다중 데이터(SIMD) 산술 연산이 수행될 수 있다. 연산 인코딩(연산코드) 포맷(380)은 CDP 연산코드 필드(382 및 389)를 갖는 하나의 그러한 CDP 명령어를 묘사한다. 대안의 실시예에서, CDP 명령어의 형태, 즉 필드(383, 384, 387, 및 388) 중 하나 이상에 의해 연산이 인코드될 수 있다. 2개까지의 오퍼랜드 식별자(385 및 390) 및 1개의 목적지 오퍼랜드 식별자(386)를 포함하여, 명령어 당 3개까지의 오퍼랜드 위치가 식별될 수 있다. 코프로세서의 일 실시예는 8, 16, 32, 및 64비트 값들에 대해 연산할 수 있다. 일 실시예에서, 명령어는 정수 데이터 요소에 대해 수행된다. 일부 실시예에서, 명령어는 조건 필드(381)를 이용하여 조건부로 실행될 수 있다. 일부 실시예에서, 소스 데이터 크기는 필드(383)에 의해 인코드될 수 있다. 일부 실시예에서, 0(Z), 부(negative)(N), 반올림(carry)(C), 및 오버플로우(overflow)(V) 검출은 SIMD 필드에서 수행될 수 있다. 일부 실시예에서, 포화(saturation) 형태는 필드(384)에 의해 인코드될 수 있다.
다음에, 도 3g를 참조하면, intel.com/products/processor/manuals/의 월드 와이드 웹(www) 상에서 캘리포니아주 산타클라라(Santa Clara, CA) 소재의 인텔 코퍼레이션(Intel Corp.)에서 입수가능한, "Intel® Advanced Vector Extensions Programming Reference"에 기술된 연산코드 포맷의 한 형태에 해당하는, 또 다른 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 또 다른 대안의 연산 인코딩(연산코드) 포맷(397)이 도시되어 있다.
원래의 x86 명령어 집합은 그의 존재가 제1 "연산코드" 바이트로부터 알려진 추가 바이트에 포함된 어드레스 음절(syllable) 및 즉시(immediate) 오퍼랜드의 다양한 포맷을 갖는 1바이트 연산코드를 제공한다. 또한, 소정의 바이트 값들이 연산코드의 수정자(modifiers)(이들은 해당 명령어 앞에 위치하여야 하므로 프리픽스라고 함)로 예약되어(reserved) 있다. (이러한 특별한 프리픽스 값을 포함하여) 256개 연산코드 바이트의 원래의 팔레트(palette)가 고갈된 경우, 1바이트가 256개 연산코드의 새로운 집합으로의 이스케이프(escape)로 전용되었다. 벡터 명령어(예를 들면, SIMD)가 추가된 경우, 더 많은 연산코드의 필요성이 발생하였고, 프리픽스를 이용하여 확장된 경우에도 "2 바이트" 연산코드 맵(map)이 불충분하였다. 이를 위해, 선택적인 프리픽스에 2 바이트를 더하여 식별자로 이용하는 추가 맵에 새로운 명령어가 추가되었다.
또한, 64비트 모드의 추가 레지스터를 도모하기 위해, 프리픽스와 연산코드(및 연산코드를 결정하는데 필요한 어떤 이스케이프 바이트) 사이에 추가 프리픽스("REX"라고 함)가 이용될 수 있다. 일 실시예에서, REX는 64비트 모드의 추가 레지스터의 이용을 나타내기 위해 4개의 "페이로드(payload)" 비트를 가질 수 있다. 다른 실시예에서, REX는 4비트보다 적거나 많은 비트를 가질 수 있다. (일반적으로 포맷(360) 및/또는 포맷(370)에 대응하는) 적어도 하나의 명령어 집합의 일반적인 포맷이 다음과 같이 일반적으로 예시된다.
[prefixes] [rex] escape [escape2] opcode modrm (etc.)
연산코드 포맷(397)은 연산코드 포맷(370)에 대응하고, 흔히 이용되는 대부분의 다른 레거시 명령어 프리픽스 바이트 및 이스케이프 코드를 대체하는 (일 실시예에서 C4 16진수(hex)로 시작하는) 선택적인 VEX 프리픽스 바이트(391)를 포함한다. 예를 들면, 다음은 2개의 필드를 이용하여 명령어를 인코드하는 실시예를 예시하며, 이는 제2 이스케이프 코드가 원래 명령어에 존재하는 경우, 또는 REX 필드 내 추가 비트(예를 들면, XB 및 W 필드)가 이용될 필요가 있는 경우에 이용될 수 있다. 아래에 예시된 실시예에서, 레거시 이스케이프는 새로운 이스케이프 값으로 나타내며, 레거시 프리픽스는 "페이로드" 바이트의 일부로 충분히 압축되고, 추가 확장을 위해 레거시 프리픽스가 재생되어(reclaimed) 이용가능하고, 제2 이스케이프 코드는 "맵" 필드에서 미래의 맵 또는 이용가능한 특징 공간으로 압축되며, 새로운 특징(new features)(예를 들면, 증가된 벡터 길이 및 추가 소스 레지스터 지정자(specifier))이 추가된다.
일 실시예에 따른 명령어는 필드(391 및 392) 중 하나 이상에 의해 인코드될 수 있다. 명령어 당 4개까지의 오퍼랜드 위치가 소스 오퍼랜드 식별자(374 및 375)와 조합하고 또한 선택적인 스케일-인덱스-베이스(SIB) 식별자(393), 선택적인 변위 식별자(394), 및 선택적인 즉시 바이트(395)와 조합하여 필드(391)에 의해 식별될 수 있다. 일 실시예에서, VEX 프리픽스 바이트(391)는 32비트 또는 64비트 소스 및 목적지 오퍼랜드 및/또는 128비트 또는 256비트 SIMD 레지스터 또는 메모리 오퍼랜드를 식별하는데 이용될 수 있다. 일 실시예에서, 연산코드 포맷(397)에 의해 제공된 기능은 연산코드 포맷(370)과 중복될 수 있지만, 다른 실시예에서 이들은 서로 다르다. 연산코드 포맷(370 및 397)은 MOD 필드(373)에 의해 그리고 선택적인 (SIB) 식별자(393), 선택적인 변위 식별자(394), 및 선택적인 즉시 바이트(395)에 의해 부분적으로 지정된 레지스터 간, 메모리 레지스터 간, 메모리별 레지스터, 레지스터별, 즉시 레지스터, 레지스터 메모리 간 어드레싱을 가능하게 해준다.
다음에, 도 3h를 참조하면, 또 다른 실시예에 따른 벡터 압축 및 회전 기능을 제공하는 또 다른 대안의 연산 인코딩(연산코드) 포맷(398)이 도시되어 있다. 연산코드 포맷(398)은 연산코드 포맷(370 및 397)에 대응하고, 흔히 이용되는 대부분의 다른 레거시 명령어 프리픽스 바이트 및 이스케이프 코드를 대체하고 추가 기능을 제공하는 (일 실시예에서 62 16진수(62 hex)로 시작하는) 선택적인 EVEX 프리픽스 바이트(396)를 포함한다. 일 실시예에 따른 명령어는 필드(396 및 392) 중 하나 이상에 의해 인코드될 수 있다. 명령어 당 4개까지의 오퍼랜드 위치 및 마스크는 소스 오퍼랜드 식별자(374 및 375)와 조합하고 그리고 선택적인 스케일-인덱스-베이스(SIB) 식별자(393), 선택적인 변위 식별자(394), 및 선택적인 즉시 바이트(395)와 조합하여 필드(396)에 의해 식별될 수 있다. 일 실시예에서, EVEX 프리픽스 바이트(396)는 32비트 또는 64비트 소스 및 목적지 오퍼랜드 및/또는 128비트, 256비트 또는 512 비트 SIMD 레지스터 또는 메모리 오퍼랜드를 식별하는데 이용될 수 있다. 일 실시예에서, 연산코드 포맷(398)에 의해 제공되는 기능은 연산코드 포맷(370 또는 397)과 중복될 수 있지만, 다른 실시예에서 이들은 서로 다르다. 연산코드 포맷(398)은 MOD 필드(373)에 의해 그리고 선택적인 (SIB) 식별자(393), 선택적인 변위 식별자(394), 및 선택적인 즉시 바이트(395)에 의해 부분적으로 지정된 레지스터 간, 메모리 레지스터 간, 메모리별 레지스터, 레지스터별, 즉시 레지스터, 레지스터 메모리 간 어드레싱을 마스크로 가능하게 해준다. (일반적으로 포맷(360) 및/또는 포맷(370)에 대응하는) 적어도 하나의 명령어 집합의 일반적인 포맷은 다음과 같이 일반적으로 예시된다.
evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib][disp][imm]
일 실시예에서, EVEX 포맷(398)에 따라 인코드된 명령어는, 예를 들면, 사용자가 구성가능한 마스크 레지스터, 또는 추가 오퍼랜드, 또는 128비트, 256비트 또는 512비트 벡터 레지스터, 또는 선택할 더 많은 레지스터 등 중에서 선택한 것과 같은 추가의 새로운 특징과 함께 벡터 압축 및 회전 기능을 제공하는데 이용될 수 있는 추가 "페이로드" 비트를 가질 수 있다.
예를 들면, VEX 포맷(397)이 암묵적(implicit) 마스크로 벡터 압축 및 회전 기능을 제공하는데 이용될 수 있는 경우, EVEX 포맷(398)은 사용자가 구성가능한 명시적(explicit) 마스크로 벡터 압축 및 회전 기능을 제공하는데 이용될 수 있다. 또한, VEX 포맷(397)이 128비트 또는 256비트 벡터 레지스터에 대해 벡터 압축 및 회전 기능을 제공하는데 이용될 수 있는 경우, EVEX 포맷(398)은 128비트, 256비트, 512비트 또는 그 이상(또는 그 이하)의 벡터 레지스터에 대해 벡터 압축 및 회전 기능을 제공하는데 이용될 수 있다.
벡터 압축 및 회전 기능을 제공하는 일례의 명령어가 다음의 예로 예시된다.
명령어 | 목적지 | 마스크 | 소스1 | 소스2 | 설명 |
압축-회전 | Vmm1 | 마스크1 | Vmm2/ 메모리 |
오프셋 | 마스크1에 따라, Vmm2 또는 메모리로부터의 마스크되지 않은 요소를 해당 위치, 즉 회전에 따라 Vmm1의 오프셋에서 시작하여 Vmm1 내의 인접한 순차적인 요소 위치로 복사. |
압축-회전-제로(0) | Vmm1 | 마스크1 | Vmm2/ 메모리 |
오프셋 | 마스크1에 따라, Vmm2 또는 메모리로부터의 마스크되지 않은 요소를 해당 위치, 즉 회전에 따라 Vmm1의 오프셋에서 시작하여 Vmm1 내의 인접한 순차적인 요소 위치로 복사하고, 마스크되지 않은 요소가 Vmm2 또는 메모리에서 Vmm1으로 복사되지 않은 Vmm1 내의 어떤 요소를 제로화. |
압축-채움(fill)-회전 | Vmm1 | 마스크1 | Vmm2/ 메모리 |
오프셋 | 마스크1에 따라, Vmm2 또는 메모리로부터의 마스크되지 않은 요소를 해당 위치, 즉 Vmm1이 충만 상태일 때까지 Vmm1의 오프셋에서 시작하여 Vmm1 내의 인접한 순차적인 요소 위치로 복사하고, 마스크되지 않은 요소가 Vmm2 또는 메모리에서 Vmm1으로 복사된 마스크1 내의 각 마스크 요소를 제로화. |
앞의 예에서와 같이, SIMD 압축 및 회전 명령어는 애플리케이션, 예를 들면, 그렇지 않고 쉽게 벡터화되지 않는 SPEC 벤치마크 슈트의 444.NAMD의 내부 루프에서와 같은 벤치마크 애플리케이션에서 벡터 압축 기능을 제공하여, 외부 메모리로의 고가의 순차적인 저장의 횟수를 감소시키고, 성능 및 명령어 처리율을 증가시키고, 전력 사용을 감소시키는데 이용될 수 있음을 인식할 것이다.
도 4a는 본 발명의 적어도 일 실시예에 따른 순차적(in-order) 파이프라인 및 레지스터 리네이밍단, 비순차적(out-of-order) 발행/실행 파이프라인을 예시하는 블록도이다. 도 4b는 본 발명의 적어도 일 실시예에 따른 프로세서에 포함된 순차적 아키텍처 코어 및 레지스터 리네이밍 로직, 비순차적 발행/실행 로직을 예시하는 블록도이다. 도 4a에서 실선 박스는 순차적 파이프라인을 예시하는 반면, 점선 박스는 레지스터 리네이밍, 비순차적 발행/실행 파이프라인을 예시한다. 마찬가지로, 도 4b에서 실선 박스는 순차적 아키텍처 로직을 예시하는 반면, 점선 박스는 레지스터 리네이밍 로직 및 비순차적 발행/실행 로직을 예시한다.
도 4a에서, 프로세서 파이프라인(400)은 페치단(402), 길이 디코드단(404), 디코드단(406), 할당단(408), 리네이밍단(410), 스케줄링(디스패치 또는 발행으로도 알려짐)단(412), 레지스터 판독/메모리 판독단(414), 실행단(416), 재기록(write back)/메모리 기록단(418), 예외 처리단(422), 및 커밋(commit)단(424)을 포함한다.
도 4b에서, 화살표는 2개 이상의 유닛 간의 연결을 나타내고 화살표의 방향은 그 유닛들 간의 데이터 흐름의 방향을 나타낸다. 도 4b는 실행 엔진 유닛(450)에 연결된 프론트 엔드 유닛(430)을 포함하는 프로세서 코어(490)를 도시하며, 이 둘은 메모리 유닛(470)에 연결된다.
코어(490)는 축약형(reduced) 명령어 집합 컴퓨팅(RISC) 코어, 복합 명령어 집합 컴퓨팅(CISC) 코어, 매우 긴 명령어(VLIW) 코어, 또는 하이브리드 또는 대안의 코어 형태일 수 있다. 또 다른 옵션으로, 코어(490)는, 예를 들면, 네트워크 또는 통신 코어, 압축 엔진, 또는 그래픽 코어 등과 같은 특수 목적의 코어일 수 있다.
프론트 엔드 유닛(430)은 디코드 유닛(440)에 연결된 명령어 페치 유닛(438)에 연결된 명령어 변환 룩어사이드(lookaside) 버퍼(TLB)(436)에 연결된 명령어 캐시 유닛(434)에 연결된 분기(branch) 예측 유닛(432)을 포함한다. 디코드 유닛 또는 디코더는 명령어를 디코드할 수 있으며, 하나 이상의 마이크로 연산, 마이크로 코드 엔트리점, 마이크로명령어, 다른 명령어, 또는 원래 명령어로부터 디코드된, 또는 그와 달리 그를 반영한, 또는 그로부터 도출된 다른 제어 신호를 출력으로 생성한다. 디코더는 다양한 다른 메커니즘을 이용하여 구현될 수 있다. 적절한 메커니즘의 예는, 다음으로 한정되지 않지만, 룩업 테이블, 하드웨어 구현, 프로그램가능 로직 어레이(PLAs), 마이크로코드 판독 전용 메모리(ROMs) 등을 포함한다. 명령어 캐시 유닛(434)은 메모리 유닛(470) 내의 레벨 2(L2) 캐시 유닛(476)에 더 연결된다. 디코드 유닛(440)은 실행 엔진 유닛(450) 내의 리네임/할당기 유닛(452)에 연결된다.
실행 엔진 유닛(450)은 회수 유닛(454)에 연결된 리네임/할당기 유닛(452) 및 하나 이상의 스케줄러 유닛(들)의 집합(456)을 포함한다. 스케줄러 유닛(들)(456)은 예약 스테이션(reservations stations), 중앙 명령어 윈도우 등을 포함하여 임의 수의 다른 스케줄러를 나타낸다. 스케줄러 유닛(들)(456)은 물리적 레지스터 파일(들)(458)에 연결된다. 각각의 물리적 레지스터 파일(들)(458)은 하나 이상의 물리적 레지스터 파일을 나타내며, 그 별개의 물리적 레지스터 파일에는 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점 등과 같은 하나 이상의 다른 데이터 형태, 상태(예를 들면, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등이 저장된다. 물리적 레지스터 파일(들) 유닛(들)(458)은 회수 유닛(454)에 의해 중첩되어 레지스터 리네이밍 및 비순차적 실행을 (예를 들면, 재배열 버퍼(들) 및 회수 레지스터 파일(들)을 이용하여, 미래(future)의 파일(들), 이력(history) 버퍼(들), 및 회수 레지스터 파일(들)을 이용하여, 레지스터 맵 및 레지스터 풀(pool) 등을 이용하여) 구현할 수 있는 다양한 방식을 예시한다. 일반적으로, 아키텍처 레지스터는 프로세서의 외부에서, 또는 프로그래머의 관점에서 가시적이다. 레지스터는 어떤 공지의 특정 형태의 회로로 한정되지 않는다. 본 명세서에서 기술된 바와 같은 데이터를 저장하고 제공할 수 있는 한, 다양한 다른 형태의 레지스터도 적합하다. 적합한 레지스터의 예는, 다음으로 한정되지 않지만, 전용 물리적 레지스터, 레지스터 리네이밍을 이용한 동적으로 할당된 물리적 레지스터, 전용 및 동적으로 할당된 물리적 레지스터의 조합 등을 포함한다. 회수 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 실행 클러스터(들)(460)에 연결된다. 실행 클러스터(들)(460)는 하나 이상의 실행 유닛의 집합(462) 및 하나 이상의 메모리 접근 유닛의 집합(464)을 포함한다. 실행 유닛(462)은 다양한 연산(예를 들면, 시프트, 가산, 감산, 곱셈)을 수행하고, 다양한 형태의 데이터(예를 들면, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 수행할 수 있다. 일부 실시예가 특정 함수 또는 함수들의 집합에 전용된 많은 실행 유닛을 포함할 수 있지만, 다른 실시예는 단지 하나의 실행 유닛 또는 모두가 모든 함수를 수행하는 다중 실행 유닛을 포함할 수 있다. 스케줄러 유닛(들)(456), 물리적 레지스터 파일(들) 유닛(들)(458), 및 실행 클러스터(들)(460)는 특정 실시예가 소정 형태의 데이터/연산용의 개별 파이프라인(예를 들면, 각각이 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 접근 파이프라인, 및 개별 메모리 접근 파이프라인의 경우, 이 파이프라인의 실행 클러스터만이 메모리 접근 유닛(들)(464)을 갖는 특정 실시예가 구현됨)을 생성하기 때문에 아마도 복수로 도시된다. 또한, 개별 파이프라인이 이용된 경우, 이들 파이프라인 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적임을 알아야 한다.
메모리 접근 유닛 집합(464)은 레벨 2(L2) 캐시 유닛(476)에 연결된 데이터 캐시 유닛(474)에 연결된 데이터 TLB 유닛(472)을 포함하는 메모리 유닛(470)에 연결된다. 예시적인 일 실시예에서, 메모리 접근 유닛(464)은 로드 유닛, 저장 접근 유닛, 및 저장 데이터 유닛을 포함할 수 있으며, 그 각각은 메모리 유닛(470) 내의 데이터 TLB 유닛(472)에 연결된다. L2 캐시 유닛(476)은 하나 이상의 다른 레벨의캐시 및, 결국 메인 메모리에 연결된다.
예를 들면, 예시적인 레지스터 리네이밍, 비순차적 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(400)을 구현할 수 있다. 즉, 1) 명령어 페치(438)는 페치 및 길이 디코딩단(402 및 404)을 수행하고, 2) 디코드 유닛(440)은 디코드단(406)을 수행하고, 3) 리네임/할당기 유닛(452)은 할당단(408) 및 리네이밍단(410)을 수행하고, 4) 스케줄러 유닛(들)(456)은 스케줄러단(412)을 수행하고, 5) 물리적 레지스터 파일(들) 유닛(들)(458) 및 메모리 유닛(470)은 레지스터 판독/메모리 판독단(414)을 수행하고, 실행 클러스터(460)는 실행단(416)을 수행하고, 6) 메모리 유닛(470) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 재기록/메모리 기록단(418)을 수행하고, 7) 다양한 유닛은 예외 처리단(422)에 관련될 수 있고, 8) 회수 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 커밋 단(424)을 수행한다.
코어(490)는 하나 이상의 명령어 집합(예를 들면, x86 명령어 집합(일부 확장에는 새로운 버전이 추가됨), 캘리포니아주 서니베일(Sunnyvale, CA) 소재의 MIPS 테크놀러지스(MIPS Technologies)의 MIPS 명령어 집합, 캘리포니아주 서니베일 소재의 ARM 홀딩스(ARM Holdings)의 ARM 명령어 집합(NEON과 같은 옵션의 추가 확장을 가짐)을 지원할 수 있다.
코어는 (연산 또는 스레드(threads)의 2개 이상의 병렬 집합을 실행하는) 다중스레딩을 지원할 수 있고, 타임 슬라이스된(sliced) 다중스레딩, (단일 물리적 코어에서 물리적 코어가 동시에 다중스레드하는 스레드 각각마다 논리 코어를 제공하는 경우) 동시적 다중스레딩, 또는 이들의 조합(예를 들면, 타임 슬라이스된 페칭 및 디코딩 및 그 후 Intel® 하이퍼스레딩(Hyperthreading) 기술에서와 같은 동시적 다중스레딩)을 포함하여 다양한 방식으로 그와 같이 수행할 수 있음을 알아야 한다.
레지스터 리네이밍은 비순차적 실행의 문맥 내에서 기술되지만, 레지스터 리네이밍은 순차적 아키텍처에서도 이용될 수 있음을 알아야 한다. 예시된 프로세서의 실시예가 또한 개별 명령어 및 데이터 캐시 유닛(434/474) 및 공유 L2 캐시 유닛(476)을 포함하지만, 대안의 실시예는, 예를 들면, 레벨 1(L1) 내부 캐시, 또는 다중 레벨의 내부 캐시와 같은, 명령어 및 데이터용 단일 내부 캐시를 구비할 수 있다. 일부 실시예에서, 시스템은 내부 캐시 및 코어 및/또는 프로세서의 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안으로, 캐시는 모두 코어 및/또는 프로세서 외부에 있을 수 있다.
도 5는 본 발명의 실시예에 따른 메모리 제어기 및 그래픽을 통합한 단일 코어 프로세서 및 다중 코어 프로세서(500)의 블록도이다. 도 5에서 실선 박스는 단일 코어(502A), 시스템 에이전트(510), 하나 이상의 제어기 유닛의 집합(516)을 갖는 프로세서(500)를 예시하지만, 점선 박스의 선택적 추가는 다중 코어(502A-N), 시스템 에이전트 유닛(510) 내의 하나 이상의 통합 메모리 제어기 유닛(들)의 집합(514), 및 통합 그래픽 로직(508)을 갖는 대안의 프로세서(500)를 예시한다.
메모리 계층은 코어 내에 하나 이상의 레벨의 캐시, 하나 이상의 공유 캐시 유닛의 집합(506), 및 통합 메모리 제어기 유닛 집합(514)에 연결된 외부 메모리(미도시)를 포함한다. 공유 캐시 유닛 집합(506)은 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 다른 레벨의 캐시와 같은 하나 이상의 중간 레벨의 캐시, 마지막 레벨의 캐시(LLC), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서, 링(ring) 기반 상호접속 유닛(512)은 통합 그래픽 로직(508), 공유 캐시 유닛 집합(506), 및 시스템 에이전트 유닛(510)을 상호접속하지만, 대안의 실시예는 그러한 유닛들을 상호접속하는 임의 수의 잘 알려진 기술을 이용할 수 있다.
일부 실시예에서, 코어(502A-N) 중 하나 이상은 다중스레딩이 가능하다. 시스템 에이전트(510)는 그러한 컴포넌트 조정 및 연산 코어(502A-N)를 포함한다. 시스템 에이전트 유닛(510)은 예를 들면 전력 제어 유닛(PCU) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어(502A-N) 및 통합 그래픽 로직(508)의 전력 상태를 조정하는데 필요한 로직 및 컴포넌트일 수 있거나 이들을 포함할 수 있다. 디스플레이 유닛은 외부에 접속된 하나 이상의 디스플레이를 구동하기 위한 것이다.
코어(502A-N)는 아키텍처 및/또는 명령어 집합 면에서 동종 또는 이종일 수 있다. 예를 들면, 코어(502A-N) 중 일부는 순차적일 수 있는 반면, 다른 코어는 비순차적일 수 있다. 다른 예로서, 코어(502A-N) 중 둘 이상은 동일한 명령어 집합을 실행할 수 있는 반면, 다른 코어는 단지 그 명령어 집합의 부분집합 또는 서로 다른 명령어 집합을 실행할 수 있다.
프로세서는 CoreTM i3, i5, i7, 2 듀오(Duo) 및 쿼드(Quad), XeonTM, ItaniumTM, XScaleTM 또는 StrongARMTM 프로세서와 같은 범용 프로세서일 수 있으며, 이는 캘리포니아주 산타클라라(Santa Clara, Calif.) 소재의 인텔 코퍼레이션(Intel Corporation)에서 입수가능하다. 대안으로, 프로세서는 ARM 홀딩스사(ARM Holdings, Ltd.), MIPS 등과 같은 다른 회사에서 입수할 수 있다. 프로세서는, 예를 들면, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, 코프로세서, 또는 임베디드 프로세서 등과 같은 특수 목적의 프로세서일 수 있다. 프로세서는 하나 이상의 칩 상에서 구현될 수 있다. 프로세서(500)는, 예를 들면, BiCMOS, CMOS, 또는 NMOS와 같은 많은 처리 기술 중 일부일 수 있고 및/또는 그 중 어떤 것을 이용하여 하나 이상의 기판 상에서 구현될 수 있다.
도 6 내지 도 8은 프로세서(500)를 포함하는데 적합한 예시적인 시스템인 반면, 도 9는 코어(502) 중 하나 이상을 포함할 수 있는 예시적인 시스템 온 칩(SoC)이다. 랩탑, 데스크탑, 핸드헬드 PC, 개인 휴대 정보 단말기, 엔지니어링 워크스테이션, 서버, 네트워크 장치, 네트워크 허브, 스위치, 임베디드 프로세서, 디지털 신호 프로세서(DSPs), 그래픽 장치, 비디오 게임 장치, 셋탑 박스, 마이크로컨트롤러, 셀폰, 휴대용 미디어 플레이어, 핸드헬드 장치, 및 다양한 다른 전자 장치의 기술에서 알려진 다른 시스템 설계 및 구성도 적합하다. 일반적으로, 본 명세서에서 기술된 바와 같은 프로세서 및/또는 다른 실행 로직을 포함할 수 있는 매우 다양한 시스템 또는 전자 장치도 일반적으로 적합하다.
이제 도 6을 참조하면, 본 발명의 일 실시예에 따른 시스템(600)의 블록도가 도시되어 있다. 시스템(600)은 그래픽 메모리 제어기 허브(GMCH)(620)에 연결된 하나 이상의 프로세서(610, 615)를 포함할 수 있다. 선택적인 추가 프로세서(615)의 특징은 도 6에서 파선으로 도시된다.
각 프로세서(610, 615)는 어떤 버전의 프로세서(500)일 수 있다. 그러나, 통합 그래픽 로직 및 통합 메모리 제어 유닛은 프로세서(610, 615)에 존재할 가능성이 없음을 주목해야 한다. 도 6은 GMCH(620)를, 예를 들면, 동적 랜덤 액세스 메모리(DRAM)일 수 있는 메모리(640)에 연결할 수 있는 것을 예시한다. DRAM은 적어도 일 실시예에서 비휘발성 캐시와 연관될 수 있다.
GMCH(620)는 칩셋, 또는 칩셋의 일부일 수 있다. GMCH(620)는 프로세서(들)(610, 615)와 통신할 수 있고 프로세서(들)(610, 615)와 메모리(640) 간의 상호작용을 제어할 수 있다. GMCH(620)는 또한 프로세서(들)(610, 615)와 시스템(600)의 다른 구성 요소 간에서 가속(accelerated) 버스 인터페이스로 작용할 수 있다. 적어도 일 실시예에서, GMCH(620)는 프론트사이드(frontside) 버스(FSB)(695)와 같은 다중 드롭(multi-drop) 버스를 통해 프로세서(들)(610, 615)와 통신한다.
또한, GMCH(620)는 디스플레이(645)(이를 테면, 평판 패널 디스플레이)에 연결된다. GMCH(620)는 통합 그래픽 가속기를 포함할 수 있다. GMCH(620)는 다양한 주변 장치를 시스템(600)에 연결하는데 이용될 수 있는 입/출력(I/O) 제어기 허브(ICH)(650)에 더 연결된다. 예를 들면, 도 6의 실시예에는 다른 주변 장치(670)와 함께 ICH(650)에 연결된 이산 그래픽 장치일 수 있는 외부 그래픽 장치(660)가 도시되어 있다.
대안으로, 시스템(600)에는 또한 추가 또는 다른 프로세서도 존재할 수 있다. 예를 들면, 추가 프로세서(들)(615)는 프로세서(610)와 동일한 추가 프로세서(들), 프로세서(610)와 이종이거나 비대칭적인 추가 프로세서(들), 가속기(이를 테면, 예를 들면 그래픽 가속기 또는 디지털 신호 처리(DSP) 유닛), 필드 프로그램가능 게이트 어레이, 또는 어떤 다른 프로세서를 포함할 수 있다. 아키텍처, 마이크로 아키텍처, 열, 및 전력 소비 특성 등을 포함하는 이점의 메트릭(metrics)의 범위 면에서, 물리적 자원(610, 615) 간에는 여러 차이점이 있을 수 있다. 이러한 차이점은 프로세서(610, 615) 간에서 효과적으로 비대칭성 및 이종성으로 보일 수 있다. 적어도 일 실시예에서, 다양한 프로세서(610, 615)는 동일한 다이 패키지에 상주할 수 있다.
이제 도 7을 참조하면, 본 발명의 일 실시예에 따른 제2 시스템(700)의 블록도가 도시되어 있다. 도 7에 도시된 바와 같이, 마이크로프로세서 시스템(700)은 점대점(point-to-point) 상호접속 시스템이고, 점대점 상호접속(750)을 통해 연결된 제1 프로세서(770) 및 제2 프로세서(780)를 포함한다. 각 프로세서(770 및 780)는 프로세서(610, 615) 중 하나 이상인 어떤 버전의 프로세서(500)일 수 있다.
단지 2개의 프로세서(770, 780)만을 포함하여 도시되지만, 본 발명의 범주는 이것으로 한정되지 않음을 알아야 한다. 다른 실시예에서, 소정의 프로세서에는 하나 이상의 추가 프로세서가 존재할 수 있다.
프로세서(770 및 780)는 각각 통합 메모리 제어기 유닛(772 및 782)을 포함하는 것으로 도시된다. 프로세서(770)는 또한 그의 버스 제어기 유닛의 일부로 점대점(P-P) 인터페이스(776 및 778)를 포함하고, 마찬가지로, 제2 프로세서(780)는 P-P 인터페이스(786 및 788)를 포함한다. 프로세서(770 및 780)는 P-P 인터페이스 회로(778, 788)를 이용하여 점대점(P-P) 인터페이스(750)를 통해 정보를 교환할 수 있다. 도 7에 도시된 바와 같이, IMC(772 및 782)는 프로세서를 각 메모리, 다시 말하면 각 프로세서에 국부적으로 부착된 메인 메모리의 일부일 수 있는 메모리(732) 및 메모리(734)에 연결한다.
프로세서(770, 780)는 각각 점대점 인터페이스 회로(776, 794, 786, 798)를 이용하여 개별 P-P 인터페이스(752, 754)를 통해 칩셋(790)과 정보를 교환할 수 있다. 칩셋(790)은 또한 고성능 그래픽 인터페이스(739)를 통해 고성능 그래픽 회로(738)와 정보를 교환할 수 있다.
공유 캐시(미도시)는 어느 하나의 프로세서 또는 여전히 P-P 상호접속을 통해 프로세서와 접속된 두 프로세서의 외부에 포함될 수 있어, 만일 프로세서가 저전력 모드로 설정된 경우 어느 하나 또는 둘 다의 프로세서의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(790)은 인터페이스(796)를 통해 제1 버스(716)에 연결될 수 있다. 일 실시예에서, 제1 버스(716)는 주변 컴포넌트 상호접속(PCI) 버스, 또는 PCI 고속 버스 또는 다른 제3의 생성 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범주는 이것으로 한정되지 않는다.
도 7에 도시된 바와 같이, 제1 버스(716)에는 제1 버스(716)를 제2 버스(720)에 연결하는 버스 브리지(718)와 함께 다양한 I/O 장치(714)가 연결될 수 있다. 일 실시예에서, 제2 버스(720)는 핀 수가 적은 카운트(LPC:low pin count) 버스일 수 있다. 제2 버스(720)에는, 예를 들면, 키보드 및/또는 마우스(722), 통신 장치(727) 및 일 실시예에서 명령어/코드 및 데이터(730)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 장치와 같은 저장 유닛(728)을 포함하여 다양한 장치가 연결될 수 있다. 또한, 제2 버스(720)에는 오디오 I/O(724)가 연결될 수 있다. 다른 아키텍처도 가능하다는 것을 주목하자. 예를 들면, 도 7의 점대점 아키텍처 대신에, 시스템은 다중 드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
이제 도 8을 참조하면, 본 발명의 일 실시예에 따른 제3 시스템(800)의 블록도가 도시되어 있다. 도 7 및 도 8의 같은 구성 요소는 같은 참조 부호를 유지하고, 도 7의 소정의 특징은 도 8의 다른 특징을 불명확하게 하지 않도록 하기 위해 도 8에서 생략되었다.
도 8은 프로세서(870, 880)가 각각 통합 메모리 및 I/O 제어 로직("CL")(872 및 882)을 포함하는 것을 예시한다. 적어도 일 실시예에서, CL(872, 882)은 도 5 및 도 7과 관련하여 전술한 바와 같은 통합 메모리 제어기 유닛을 포함할 수 있다. 또한, CL(872, 882)은 또한 I/O 제어 로직을 포함할 수 있다. 도 8은 CL(872, 882)에 메모리(832, 834)를 연결할 뿐만 아니라 제어 로직(872, 882)에 그 I/O 장치(814)도 연결하는 것을 예시한다. 레거시 I/O 장치(815)는 칩셋(890)에 연결된다.
이제 도 9를 참조하면, 본 발명의 일 실시예에 따른 SoC(900)의 블록도가 도시되어 있다. 도 5에서 유사 구성 요소는 같은 참조 부호를 유지한다. 또한, 점선 박스는 더 진보된 SoC에 대한 선택적인 특징이다. 도 9에서, 상호접속 유닛(들)(902)은 하나 이상의 코어의 집합(502A-N) 및 공유 캐시 유닛(들)(506)을 포함하는 애플리케이션 프로세서(910), 시스템 에이전트 유닛(510), 버스 제어기 유닛(들)(516), 통합 메모리 제어기 유닛(들)(514), 통합 그래픽 로직(508)을 포함할 수 있는 하나 이상의 미디어 프로세서의 집합(920), 정지 및/또는 비디오 카메라 기능을 제공하는 이미지 프로세서(924), 하드웨어 오디오 가속을 제공하는 오디오 프로세서(926), 및 비디오 인코드/디코드 가속을 제공하는 비디오 프로세서(928), 정적 랜덤 액세스 메모리(SRAM) 유닛(930), 직접 메모리 접근(DMA) 유닛(932), 및 하나 이상의 외부 디스플레이에 연결하는 디스플레이 유닛(940)에 연결된다.
도 10은 일 실시예에 따른 적어도 하나의 명령어를 수행할 수 있는 중앙 처리 유닛(CPU) 및 그래픽 처리 유닛(GPU)을 포함하는 프로세서를 예시한다. 일 실시예에서, 적어도 일 실시예에 따른 연산을 수행하는 명령어는 CPU에 의해 수행될 수 있다. 다른 실시예에서, 해당 명령어는 GPU에 의해 수행될 수 있다. 또 다른 실시예에서, 해당 명령어는 GPU 및 CPU에 의해 수행되는 연산의 조합을 통해 수행될 수 있다. 예를 들면, 일 실시예에서, 일 실시예에 따른 명령어는 GPU에서 실행을 위해 수신되고 디코드될 수 있다. 그러나, 디코드된 명령어 내의 하나 이상의 연산은 CPU에 의해 수행될 수 있고 그 결과는 명령어의 최종 회수를 위해 GPU로 리턴된다. 반대로, 일부 실시예에서, CPU는 주 프로세서 및 GPU를 코프로세서로 작용시킬 수 있다.
일부 실시예에서, 고속 병렬 처리율의 프로세서에서 이익을 얻는 명령어는 GPU에 의해 수행될 수 있는 반면, 깊은 파이프라인 아키텍처에서 이익을 얻는 프로세서의 성능에서 이익을 얻는 명령어는 CPU에 의해 수행될 수 있다. 예를 들면, 그래픽, 과학 애플리케이션, 금융 애플리케이션 및 다른 병렬의 작업량은 GPU의 성능에서 이익을 얻고 적절히 실행될 수 있는 반면, 오퍼레이팅 시스템 커널(kernel) 또는 애플리케이션 코드와 같은 더 많은 순차적 애플리케이션은 CPU에 더 잘 적합할 수 있다.
도 10에서, 프로세서(1000)는 CPU(1005), GPU(1010), 이미지 프로세서(1015), 비디오 프로세서(1020), USB 제어기(1025), UART 제어기(1030), SPI/SDIO 제어기(1035), 디스플레이 장치(1040), 고선명 멀티미디어 인터페이스(HDMI) 제어기(1045), MIPI 제어기(1050), 플래시 메모리 제어기(1055), 듀얼 데이터 레이트(DDR) 제어기(1060), 보안 엔진(1065), I2S/I2C(집적 칩간 사운드/집적 회로 간) 인터페이스(1070)를 포함한다. 도 10의 프로세서에는 더 많은 CPU 또는 GPU 및 다른 주변장치 인터페이스 제어기를 포함하여 다른 로직 및 회로도 포함될 수 있다.
적어도 일 실시예의 하나 이상의 특징은 기계 판독가능한 매체에 저장되어, 기계에 의해 판독될 때 그 기계가 본 명세서에서 기술된 기술을 수행하는 로직을 제조하게 하는 프로세서 내의 다양한 로직을 표현하는 표현(representative) 데이터로 구현될 수 있다. "IP 코어"로 알려진 이러한 표현은 유형의 기계 판독가능한 매체("테이프")에 저장되고 다양한 고객 또는 제조 설비로 공급되어 실제로 로직 또는 프로세서를 제조하는 제조 기계에 로드될 수 있다. 예를 들면, ARM 홀딩스사(ARM Holdings, Ltd.)에서 개발한 CortexTM 프로세서 패밀리와 같은 IP 코어, 및 중국 과학원(Chinese Academy of Sciences)의 컴퓨팅 기술 연구소(ICT)에서 개발한 룽신(Loongson) IP 코어는 텍사스 인스트루먼트(Texas Instruments), 퀄컴(Qualcomm), 애플(Apple), 또는 삼성(Samsung)과 같은 다양한 고객 또는 라이센시(licensees)에 라이센스되거나 판매되고 이들 고객 또는 라이센시에 의해 생산된 프로세서에서 구현될 수 있다.
도 11은 일 실시예에 따른 IP 코어의 개발을 예시하는 블록도를 도시한다. 저장장치(1130)는 시뮬레이션 소프트웨어(1120) 및/또는 하드웨어 또는 소프트웨어 모델(1110)을 포함한다. 일 실시예에서, IP 코어 설계를 표현하는 데이터는 메모리(1140)(예를 들면, 하드디스크), 유선 접속(예를 들면, 인터넷)(1150) 또는 무선 접속(1160)을 통해 저장장치(1130)로 제공될 수 있다. 다음에, 시뮬레이션 툴 및 모델에 의해 생성된 IP 코어 정보는 제3자에 의해 제조될 수 있는 제조 설비로 전송되어 적어도 일 실시예에 따라 적어도 하나의 명령어를 수행할 수 있다.
일부 실시예에서, 하나 이상의 명령어는 제1 형태 또는 아키텍처(예를 들면, x86)에 해당할 수 있고, 다른 형태 또는 아키텍처(예를 들면, ARM)의 프로세서에서 변환되거나 에뮬레이트될 수 있다. 따라서, 일 실시예에 따르면, 명령어는 ARM, x86, MIPS, GPU, 또는 다른 프로세서 형태 또는 아키텍처를 포함하여 어떤 프로세서 또는 프로세서 형태에서도 수행될 수 있다.
도 12는 일 실시예에 따라, 제1 형태의 명령어가 다른 형태의 프로세서에 의해 어떻게 에뮬레이트되는지를 예시한다. 도 12에서, 프로그램(1205)은 일 실시예에 따른 명령어와 같거나 실질적으로 동일한 기능을 수행할 수 있는 몇 가지 명령어를 포함한다. 그러나, 프로그램(1205)의 명령어는 프로세서(1215)와 다르거나 호환성이 없는 형태 및/또는 포맷을 가질 수 있으며, 이는 프로그램(1205) 형태의 명령어가 프로세서(1215)에 의해 기본적으로 실행될 수 없음을 의미한다. 그러나, 에뮬레이션 로직(1210)의 도움을 받아, 프로그램(1205)의 명령어는 프로세서(1215)에 의해 기본적으로 실행될 수 있는 명령어로 변환된다. 일 실시예에서, 에뮬레이션 로직은 하드웨어로 구현된다. 다른 실시예에서, 에뮬레이션 로직은 프로그램(1205) 형태의 명령어를 프로세서(1215)에 의해 기본적으로 실행가능한 형태로 변환하는 소프트웨어를 포함하는 유형의 기계 판독가능한 매체로 구현된다. 다른 실시예에서, 에뮬레이션 로직은 고정 함수 또는 프로그램가능 하드웨어 및 유형의 기계 판독가능한 매체에 저장된 프로그램의 조합이다. 일 실시예에서, 프로세서는 에뮬레이션 로직을 포함하지만, 다른 실시예에서 에뮬레이션 로직은 프로세서의 외부에 존재하고 제3자에 의해 제공된다. 일 실시예에서, 프로세서는 그 프로세서에 포함되거나 그 프로세서와 연관된 마이크로코드 또는 펌웨어를 실행하여 소프트웨어를 포함하는 유형의 기계 판독가능한 매체로 구현된 에뮬레이션 로직을 로딩할 수 있다.
도 13은 본 발명의 실시예에 따른 소스 명령어 집합 내의 이진 명령어를 목표 명령어 집합 내의 이진 명령어로 변환하는 소프트웨어 명령어 변환기의 이용을 대비한 블록도이다. 예시된 실시예에서, 비록 대안으로 명령어 변환기가 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합으로 구현될 수 있지만, 명령어 변환기는 소프트웨어 명령어 변환기이다. 도 13은 고레벨 언어(1302)의 프로그램을 x86 컴파일러(1304)를 이용하여 컴파일하여 적어도 하나의 x86 명령어 집합 코어(1316)를 갖는 프로세서에 의해 기본적으로 실행될 수 있는 x86 이진 코드(1306)를 생성할 수 있는 것을 도시한다. 적어도 하나의 x86 명령어 집합 코어를 갖는 프로세서(1316)는 적어도 하나의 x86 명령어 집합 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 얻기 위해, (1) 인텔 x86 명령어 집합 코어의 명령어 집합의 상당 부분 또는 (2) 적어도 하나의 x86 명령어 집합 코어를 갖는 인텔 프로세서를 실행하는 것을 목표로 한 애플리케이션 또는 다른 소프트웨어의 객체 코드 버전을 호환성 있게 실행하거나 그와 달리 처리하여 적어도 하나의 x86 명령어 집합 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1304)는 추가 연동(linkage) 처리를 이용하여 또는 그러한 처리 없이 적어도 하나의 x86 명령어 집합 코어(1316)를 갖는 프로세서에서 실행될 수 있는 x86 이진 코드(1306)(예를 들면, 객체(object) 코드)를 생성하도록 동작가능한 컴파일러를 나타낸다. 마찬가지로, 도 13은 고레벨 언어(1302)의 프로그램을 대안의 명령어 집합 컴파일러(1308)를 이용하여 컴파일하여 적어도 하나의 x86 명령어 집합 코어(1314)를 갖지 않는 프로세서(예를 들면, 캘리포니아주 서니베일(Sunnyvale, CA) 소재의 MIPS 테크놀로지스(MIPS Technologies)의 MIPS 명령어 집합을 실행하고 및/또는 캘리포니아주 서니베일(Sunnyvale, CA) 소재의 ARM 홀딩스(ARM Holdings)의 ARM 명령어 집합을 실행하는 코어를 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안의 명령어 집합 이진 코드(1310)를 생성할 수 있는 것을 도시한다. 명령어 변환기(1312)는 x86 이진 코드(1306)를 x86 명령어 집합 코어를 갖지 않는 프로세서(1314)에 의해 기본적으로 실행될 수 있는 코드로 변환하는데 이용된다. 이와 같이 변환된 코드는 이를 가능하게 하는 명령어 변환기가 그렇게 하기 어렵기 때문에 대안의 명령어 집합 이진 코드(1310)와 동일할 가능성이 없지만, 그러나, 변환된 코드는 일반적인 연산을 성취하고 대안의 명령어 집합으로부터의 명령어로 구성될 것이다. 따라서, 명령어 변환기(1312)는 에뮬레이션, 시뮬레이션 또는 어떤 다른 프로세스를 통해 x86 명령어 집합 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 장치가 x86 이진 코드(1306)를 실행하게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
도 14a는 벡터 압축 및 회전 기능을 제공하는 명령어(1401)의 일 실시예의 흐름도를 예시한다. 명령어(1401)의 실시예는 벡터 소스 오퍼랜드(1420), 마스크 레지스터(1410), 벡터 목적지 오퍼랜드(1440) 및 벡터 목적지 오프셋(offset)(1430)을 지정할 수 있다. 마스크 레지스터(1410)는 복수의 데이터 필드(data fields)를 포함할 수 있으며, 마스크 레지스터(1410) 내 복수의 데이터 필드 각각은 벡터, 예를 들면, 벡터 소스 오퍼랜드(1420) 내의 요소 위치(element location)에 대응한다. 일부 실시예에서, 디코드단, 예를 들면, 406은 명령어(1401)를 디코드할 수 있으며, 디코드된 명령어(1401)에 응답하여, 하나 이상의 실행 유닛, 예를 들면, 450은 마스크 레지스터(1410) 내의 복수의 데이터 필드의 값을 판독하고 마스크 레지스터(1410) 내의 마스크되지 않은 값(unmasked value)(예를 들면, 1)을 갖는 복수의 데이터 필드 각각마다, 대응하는 벡터 요소를 벡터 목적지 오프셋(1430) 위치(예를 들면, 요소 위치 4)에서 시작하여 벡터 소스 오퍼랜드(1420)에서 벡터 목적지(1440) 내의 인접한 순차적인 요소 위치로 복사(copy)한다. 일부 실시예에서, 벡터 소스 오퍼랜드(1420)로부터의 대응하는 벡터 요소는 벡터 목적지(1440) 내의 총 요소 위치 수(예를 들면, 8)를 모듈로(modulo)로 하여 인접한 순차적인 요소 위치, 예를 들면, x86 프로세서의 256비트 Ymm 레지스터 내의 8개의 32비트 요소 위치로 복사된다.
벡터 목적지(1440)는 단지 2개의 64비트 요소 위치, 또는 대안으로 16개의 32비트 요소 위치, 또는 32개의 16비트 비트 요소 위치 등만 가질 수 있음을 인식할 것이다.
도 14b는 벡터 압축 및 회전 기능을 제공하는 명령어(1402)의 다른 실시예의 흐름도를 예시한다. 명령어(1402)의 실시예는 또한 벡터 소스 오퍼랜드(1420), 마스크(1410), 벡터 목적지 오퍼랜드(1440) 및 벡터 목적지 오프셋(1430)을 지정할 수 있다. 마스크(1410)는 또한 복수의 데이터 필드를 포함할 수 있으며, 마스크(1410) 내 복수의 데이터 필드 각각은 벡터, 예를 들면, 벡터 소스 오퍼랜드(1420) 내의 요소 위치에 대응한다. 일부 실시예에서, 디코드단, 예를 들면, 406은 명령어(1402)를 디코드할 수 있으며, 디코드된 명령어(1402)에 응답하여, 하나 이상의 실행 유닛, 예를 들면, 450은 마스크(1410) 내의 복수의 데이터 필드의 값을 판독하고 마스크(1410) 내의 마스크되지 않은 값(예를 들면, 1)을 갖는 복수의 데이터 필드 각각마다, 하나 이상의 실행 유닛은 대응하는 벡터 요소를 벡터 목적지 오프셋(1430) 위치(예를 들면, 요소 위치 4)에서 시작하여 벡터 소스 오퍼랜드(1420)에서 벡터 목적지(1440) 내의 인접한 순차적인 요소 위치로 복사한다. 일부 실시예에서, 대응하는 벡터 요소는 최상위(most significant) 벡터 목적지(1440) 요소 위치가 채워질 때까지만 벡터 목적지 오프셋(1430) 위치에서 시작하여 벡터 소스 오퍼랜드(1420)에서 인접한 순차적인 요소 위치로 복사된다.
일부 실시예에서, 각 대응하는 벡터 요소를 벡터 소스 오퍼랜드(1420)에서 벡터 목적지(1440) 내의 인접한 순차적인 요소 위치로 복사할 때, 마스크 레지스터(1410) 내의 대응하는 데이터 필드의 값은 마스크되지 않은 값에서 마스크된 값으로 변경되며, 예를 들면, 이 예에서 마스크 레지스터(1410) 내의 최상위 비트(most bit)만 변경되지 않는다. 이러한 실시예에서, 회전 기능은 해당 명령어를 수정된 마스크 및 오프셋 0으로 다시 실행하여 제공될 수 있음을 인식할 것이다.
도 15a는 벡터 압축 및 회전 기능을 제공하는 명령어를 이용하는 프로세스(1501)의 일 실시예의 흐름도를 예시한다. 프로세스(1501) 및 본 명세서에서 기술된 다른 프로세스는 범용 기계에 의해 또는 특수 목적의 기계에 의해 또는 이들 둘의 조합에 의해 실행가능한 전용 하드웨어 또는 소프트웨어 또는 펌웨어 연산 코드를 포함할 수 있는 처리 블록에 의해 수행된다.
프로세스(1501)에서, 벡터(1510)의 각 요소에서 상위 값(top value) v를 벡터의, 예를 들면, 벡터 레지스터(1515) 내의 각 요소 B[3:0]와 비교하여 B의 요소들이 상위 값 v보다 작은지를 판단하고, 마스크, 예를 들면, 마스크0(1520)를 생성하고 그 결과를 저장한다. 마스크 내의 마스크되지 않은 값으로 설정된 비트 수의 계수(count)는 count(1530)에 저장된다. 벡터의 요소 A[3:0]는 마스크0(1520) 내의 마스크되지 않은 설정치(settings)에 따라 압축되고 초기 오프셋 R0(1535), 예를 들면, 초기에 0에서 시작하여 벡터 레지스터(1575)에 저장된다. count(1530)의 값은 오프셋 R0(1535)의 값에 가산되어 오프셋 R1(1545)를 생성한다.
다음에, 마찬가지로, 벡터 TopVal의 요소에서, 예를 들면, 벡터 레지스터(1550) 내의 상위 값 v를 벡터의, 예를 들면, 벡터 레지스터(1555) 내의 각 요소 B[7:4]와 비교하여 이들 B의 요소들이 상위 값 v보다 작은지를 판단하고, 다른 마스크, 예를 들면, 마스크1(1560)를 생성하고 그 결과를 저장한다. 벡터의 요소 A[7:4]는 마스크1(1560) 내의 마스크되지 않은 설정치에 따라 압축되고 오프셋 R1(1545)에서 시작하여 벡터 레지스터(1585)에 저장된다.
일부 실시예에서, 벡터 요소 A[7:4]는 벡터 목적지 오프셋(1545) 위치에서 시작하여 벡터 소스(1565)에서 벡터 목적지(1585) 내의 총 요소 위치 수를 모듈로로 하여 인접한 순차적인 요소 위치로 압축된다. count(1530)는 모두가 1인 마스크(1540)를 좌측으로 시프트하여 마스크(1570)를 생성하는데 이용되고, 이는 벡터 레지스터(1575) 및 벡터 레지스터(1585) 내의 압축된 결과를, 예를 들면, 마스크 연산에서 이동을 이용하여 벡터 레지스터(1590)로 결합하는데 이용될 수 있다.
다음에 벡터 레지스터(1590)는 메모리에 저장될 수 있고, 초기 오프셋 R1(1445)과 마스크(1560) 내의 마스크되지 않은 값으로 설정된 비트 수를 더한 것 마이너스 벡터 목적지(1585) 내의 총 요소 위치 수(즉, 이 예에서, 새로운 초기 오프셋 1)에서 또 다른 반복(미도시)이 시작할 수 있음을 인식할 것이다.
도 15b는 벡터 압축 및 회전 기능을 제공하는 명령어를 이용하는 프로세스(1502)의 다른 실시예의 흐름도를 예시한다. 프로세스(1502)에서, 벡터 TopVal의, 예를 들면, 벡터 레지스터(1510) 내의 각 요소에서 상위 값 v를 벡터의, 예를 들면, 벡터 레지스터(1515) 내의 각 요소 B[3:0]와 비교하여 B의 요소들이 상위 값 v보다 작은지를 판단하고, 마스크, 예를 들면, 마스크0(1520)를 생성하고 그 결과를 저장한다. 마스크 내의 마스크되지 않은 값으로 설정된 비트 수의 계수는 count(1530)에 저장된다. 벡터의 요소 A[3:0]는 마스크0(1520) 내의 마스크되지 않은 설정치에 따라 압축되고 초기 오프셋 R0(1535), 예를 들면, 초기에 0에서 시작하여 벡터 레지스터(1590)에 저장된다. count(1530)의 값은 오프셋 R0(1535)의 값에 가산되어 오프셋 R1(1545)를 생성한다.
다음에, 마찬가지로, 벡터 TopVal의 요소에서, 예를 들면, 벡터 레지스터(1550) 또는 벡터 레지스터(1510) 내의 상위 값 v를 벡터의, 예를 들면, 벡터 레지스터(1555) 내의 각 요소 B[7:4]와 비교하여 이들 B의 요소들이 상위 값 v보다 작은지를 판단하고, 다른 마스크, 예를 들면, 마스크1(1560)를 생성하고 그 결과를 저장한다. 벡터의 요소 A[7:4]는 마스크1(1560) 내의 마스크되지 않은 설정치에 따라 압축되고 오프셋 R1(1545)에서 시작하여 벡터 레지스터(1590)에 저장된다.
일부 실시예에서, 벡터 요소 A[7:4]는 최상위 벡터 목적지(1590) 요소 위치가 채워질 때까지만 벡터 목적지 오프셋(1545) 위치에서 시작하여 벡터 소스(1565)에서 인접한 순차적인 요소 위치로 압축된다. 일부 실시예에서, 각 대응하는 벡터 요소를 벡터 소스(1565)에서 벡터 목적지(1590) 내의 인접한 순차적인 요소 위치로 복사할 때, 마스크 레지스터(1560) 내 대응하는 데이터 필드의 값은 마스크되지 않은 값에서 마스크된 값으로 변경되며, 예를 들면, 마스크 레지스터(1560) 내 최상위 비트(들)만 변경되지 않는다. 이러한 실시예에서, 회전 기능은 해당 명령어를 수정된 마스크 및 다른 오프셋 0으로 다시 실행하여 제공될 수 있음을 인식할 것이다.
도 16a는 벡터 압축 및 회전 기능을 제공하는 프로세스(1601)의 일 실시예의 흐름도를 예시한다. 프로세스(1601) 및 본 명세서에서 기술된 다른 프로세스는 범용 기계에 의해 또는 특수 목적의 기계에 의해 또는 이들 둘의 조합에 의해 실행가능한 전용 하드웨어 또는 소프트웨어 또는 펌웨어 연산 코드를 포함할 수 있는 처리 블록에 의해 수행된다.
프로세스(1601)의 처리 블록(1610)에서, 압축 회전 명령어를 디코드한다. 처리 블록(1615)에서, 내부 변수 i를 제로(0)로 설정하고, 내부 변수 j를 제로(0)로 설정한다. 처리 블록(1630)에서, 마스크 레지스터 내의 제1 복수의 데이터 필드의 값들을 판독하고, 각 데이터 필드, 즉 마스크[i]마다, 그 데이터 필드의 값이 일(1)로 설정되었는지를 판단한다. 제로(0) 또는 음의 일(-1) 등을 포함하여 어떤 대안의 값도 마스크[i] 내의 마스크되지 않은 값을 표현하는데 이용될 수 있음을 인식할 것이다. 만일 데이터 필드, 즉 마스크[i]가 일(1)로 설정되지 않은 것으로 판단되면, 처리는 처리 블록(1655)으로 진행하여 내부 변수 i를 증분한다. 그렇지 않다면, 처리 블록(1645)에서, 마스크 레지스터 내에서 일(1)의 값을 갖는 각 데이터 필드마다 대응하는 i번째 벡터 요소를 벡터 소스에서 복사하고, 벡터 목적지 Dest의 총 요소 위치 수 length를 모듈로로 하여 내부 변수j와 벡터 목적지 오프셋 위치 rotate를 더한 것에서 시작하여 벡터 목적지 Dest 내의 인접한 순차적인 요소 위치에 저장한다. 다음에, 처리 블록(1650)에서, 내부 변수 j를 증분하고, 처리 블록(1655)에서 내부 변수 i를 증분한다. 처리 블록(1660)에서, 압축 회전 명령어의 실행이 완료되었는지 판단한다. 만일 그렇지 않다면, 프로세스(1601)는 처리 블록(1630)에서 시작을 반복한다. 그렇지 않다면, 처리는 처리 블록(1665)에서 종료한다.
프로세스(1601) 및 본 명세서에서 기술된 다른 프로세스는 반복적인 프로세스로 예시되었지만, 순차적으로 예시된 이들의 처리 블록들은 다양한 실시예에서 가능한 경우마다 다른 순서로, 또는 동시에, 또는 병렬로 수행될 수 있음을 인식할 것이다.
대안의 일부 실시예에서, 복사는 벡터 목적지가 충만 상태일 때마다 중단된다. 마스크되지 않은 벡터 요소를 벡터 소스에서 벡터 목적지 Dest 내의 인접한 순차적인 요소 위치로 복사할 때, 마스크 내 대응하는 필드의 값은 또한 마스크된 값으로 변경될 수 있다. 따라서, 마스크 값은 진행 및/또는 완료를 추적하는데 이용될 수 있고, 해당 명령어는 충만 상태가 된 목적지가 메모리에 저장된 후에 재실행될 수 있다. 다음에, 해당 명령어는 수정된 마스크 및 벡터 목적지 오프셋 0을 이용하여 벡터 압축 및 회전 명령어의 실행을 여전히 필요로 하는 요소들만 압축함으로써, 명령어 처리율을 향상시키도록 재실행될 수 있다.
도 16b는 벡터 압축 및 회전 기능을 제공하는 프로세스(1602)의 대안의 실시예의 흐름도를 예시한다. 프로세스(1602)의 처리 블록(1610)에서, 압축 회전 명령어를 디코드한다. 처리 블록(1615)에서, 내부 변수 i를 제로(0)로 설정하고, 내부 변수 j를 제로(0)로 설정한다. 처리 블록(1630)에서, 마스크 레지스터 내의 제1 복수의 데이터 필드의 값들을 판독하고, 각 데이터 필드, 즉 마스크[i]마다, 그 데이터 필드의 값이 일(1)로 설정되었는지 판단한다. 또한, 제로(0) 또는 음의 일(-1) 등을 포함하여 어떤 대안의 값도 마스크[i] 내의 마스크되지 않은 값을 표현하는데 이용될 수 있음을 인식할 것이다. 만일 데이터 필드, 즉 마스크[i]가 일(1)로 설정되지 않은 것으로 판단되면, 처리는 처리 블록(1655)으로 진행하여 내부 변수 i를 증분한다. 그렇지 않다면, 처리 블록(1635)에서, 내부 변수 j와 오프셋 값 rotate을 더한 것이 벡터 목적지 Dest의 총 요소 위치 수 length보다 작은지를 판단한다. 만일 그렇지 않다면, 처리는 처리 블록(1655)으로 진행하여 내부 변수 i를 증분한다.
그렇지 않다면, 처리 블록(1640)에서, 데이터 필드, 즉 마스크[i]를 제로(0)로 설정한다. 처리 블록(1646)에서, 마스크 레지스터 내에서 일(1)의 값을 갖는 각 데이터 필드마다 대응하는 i번째 벡터 요소를 벡터 소스에서 복사하고 벡터 목적지 Dest의 최상위 요소 위치가 채워질 때까지 내부 변수 j와 벡터 목적지 오프셋 위치 rotate를 더한 것에서 시작하여 벡터 목적지 Dest 내의 인접한 순차적인 요소 위치에 저장한다. 처리 블록(1650)에서, 내부 변수 j를 증분하고, 처리 블록(1655)에서 내부 변수 i를 증분한다. 처리 블록(1660)에서, 압축 회전 명령어의 실행이 완료되었는지 여부를 판단한다. 만일 그렇지 않다면, 프로세스(1602)는 처리 블록(1630)에서 시작을 반복한다. 그렇지 않다면, 처리는 처리 블록(1665)에서 종료한다.
도 17은 벡터 압축 및 회전 기능을 제공하는 프로세스(1701)의 또 다른 실시예의 흐름도를 예시한다. 프로세스(1701)의 처리 블록(1710)에서, 압축 회전 명령어를 디코드한다. 처리 블록(1715)에서, 내부 변수 i를 제로(0)로 설정하고, 내부 변수 j를 제로(0)로 설정한다. 처리 블록(1720)에서, 벡터 목적지 Dest의 제로화(zeroing)를 적용할 것인지 여부를 판단한다. 만일 그렇다면, 벡터 목적지 Dest 내의 모든 요소 위치에 0들을 저장한다. 대안의 일부 실시예에서, 벡터 목적지 위치에만 제로 요소가 저장되고, 벡터 소스에서 어떤 요소도 복사되지 않는다. 그렇지 않고 만일 벡터 목적지 Dest의 제로화를 적용하지 않을 경우, 처리는 바로 처리 블록(1730)으로 진행한다.
처리 블록(1730)에서, 마스크 레지스터 내의 제1 복수의 데이터 필드의 값들을 판독하고 각 데이터 필드, 즉 마스크[i]마다, 그 데이터 필드의 값이 일(1)로 설정되었는지를 판단한다. 또한, 제로(0) 또는 음의 일(-1) 등을 포함하여 어떤 대안의 값도 마스크[i] 내의 마스크되지 않은 값을 표현하는데 이용될 수 있음을 다시 인식할 것이다. 만일 데이터 필드, 즉 마스크[i]가 일(1)로 설정되지 않은 것으로 판단되면, 처리는 처리 블록(1745)으로 진행하여 내부 변수 i를 증분한다. 그렇지 않다면, 처리 블록(1735)에서, 마스크 레지스터 내에서 일(1)의 값을 갖는 각 데이터 필드마다 대응하는 i번째 벡터 요소를 벡터 소스에서 복사하고 벡터 목적지 Dest 내의 총 요소 위치 수 length를 모듈로로 하여 내부 변수 j와 벡터 목적지 오프셋 위치 rotate를 더한 것에서 시작하여 벡터 목적지 Dest 내의 인접한 순차적인 요소 위치에 저장한다. 다음에, 처리 블록(1740)에서 내부 변수 j를 증분하고, 처리 블록(1745)에서 내부 변수 i를 증분한다. 처리 블록(1750)에서, 압축 회전 명령어의 실행이 완료되었는지 여부를 판단한다. 만일 그렇지 않다면, 프로세스(1701)는 처리 블록(1730)에서 시작을 반복한다. 그렇지 않다면, 처리는 처리 블록(1755)에서 종료한다.
프로세스(1601 및 1701)는 애플리케이션, 예를 들면, 그렇지 않고 쉽게 벡터화되지 않는 SPEC 벤치마크 슈트의 444.NAMD의 내부 루프에서와 같은 벤치마크 애플리케이션에서 벡터 압축 기능을 제공하여, 외부 메모리로의 고가의 순차적인 저장의 횟수를 감소시키고, 성능을 증가시키고, 전력 사용을 감소시키는데 이용될 수 있음을 인식할 것이다.
도 18은 벤치마크 애플리케이션에서 벡터 압축 기능을 제공하는 프로세스(1801)의 일 실시예의 흐름도를 예시한다. 프로세스(1801)의 처리 블록(1810)에서, 변수 i를 제로(0)로 설정하고, last-i를 last에서 벡터 레지스터의 length를 뺀 것으로 설정한다. 처리 블록(1815)에서, 벡터 TopVal[length:0]의, 예를 들면, 벡터 레지스터(1510)의 각 요소에서 상위 값 v를 벡터 B[length+i:i]의 각 요소와 비교하여 B의 요소들이 상위 값 v보다 작은지를 판단하고, 예를 들면, 마스크 레지스터(1520) 내에 마스크를 생성하고 그 결과를 저장한다. 처리 블록(1820)에서, 마스크 내의 마스크되지 않은 값으로 설정된 비트 수의 계수를 count에 저장한다. 처리 블록(1830)에서, count가 0보다 큰지를 판단한다. 만일 그렇지 않다면, 처리는 처리 블록(1870)으로 진행하여 i에 length 값을 더한다.
그렇지 않다면, 처리는 처리 블록(1835)으로 진행하고 이 블록에서 벡터 A[length+i:i]의 요소들을 벡터 레지스터 DestA[length:0]에 로드한다. 다음에, 처리는 처리 블록(1845)으로 진행하고 이 블록에서 DestA[length:0]를 패킹하고 마스크에 설정된 마스크되지 않은 필드에 따라 메모리 포인터 오퍼랜드에 의해 표시된 메모리 위치에서 시작하여 메모리 내의 인접한 순차적인 요소 위치에 저장한다. 처리 블록(1860)에서, 메모리 포인터를 count만큼 증가시키고, 즉 만일 벡터 요소 길이가 8 바이트이면, 메모리 포인터의 값을 count 값의 8배만큼 증가시킨다. 다음에, 처리는 처리 블록(1870)으로 진행하고 이 블록에서 i에 length 값을 더한다. 다음에, 처리 블록(1875)에서, i가 last-i보다 큰지를 판단한다. 만일 그렇다면 프로세스의 완료를 위해 단지 몇 개의 나머지 요소만 처리하면 되고, 이러한 처리는 처리 블록(1880)에서 일어난다. 그렇지 않다면, 처리는 처리 블록(1815)에서 시작을 반복한다.
도 19a는 벤치마크 애플리케이션에서 벡터 압축 및 회전 기능을 제공하는 프로세스(1901)의 일 실시예의 흐름도를 예시한다. 프로세스(1902)의 처리 블록(1911)에서, 변수 i를 제로(0)로 설정하고, offset을 제로(0)로 설정하고, last-i를 last에서 벡터 레지스터의 length를 뺀 것으로 설정한다. 처리 블록(1915)에서, 벡터 TopVal[length:0]의, 예를 들면, 벡터 레지스터(1510)의 각 요소에서 상위 값 v를 벡터 B[length+i:i]의 각 요소와 비교하여 B의 요소들이 상위 값 v보다 작은지를 판단하고, 마스크, 예를 들면, 마스크(1520)를 생성하고 그 결과를 저장한다. 처리 블록(1920)에서, 마스크 내의 마스크되지 않은 값으로 설정된 비트 수의 계수를 count에 저장한다. 처리 블록(1926)에서, 벡터 A[length+i:i]의 요소들을 마스크 내의 마스크되지 않은 설정치에 따라 압축 채우고(compress filled) DestA[length:offset]에 저장한다. 다음에, 프로세스(1931)에서 offset의 값에 count의 값을 더한다.
처리 블록(1941)에서, offset이 길이 length, 즉 벡터 레지스터 내에서 DestA를 유지하는 요소들의 수보다 커졌는지 판단한다. 만일 그렇지 않다면, 처리는 처리 블록(1970)으로 진행하여 i에 length 값을 더한다. 그렇지 않다면, 처리는 처리 블록(1945)으로 진행하고 이 블록에서 DestA[length:0]를 메모리 포인터에 저장한다. 처리 블록(1951)에서, offset의 값에서 length의 값을 뺀다. 처리 블록(1956)에서, 벡터 A[length+i:i]의 요소를 갱신된 마스크 내의 마스크되지 않은 설정치에 따라 압축 채우고 DestA[length:0]에 저장한다. 처리 블록(1960)에서, 메모리 포인터를 length만큼 증가시키고, 즉 만일 벡터 요소 길이가 4 바이트이면, 메모리 포인터의 값을 length 값의 4배만큼 증가시킨다. 다음에, 처리는 처리 블록(1970)으로 진행하고 이 블록에서 i에 length 값을 더한다. 다음에, 처리 블록(1975)에서, i가 last-i보다 큰지를 판단한다. 만일 그렇다면, 프로세스의 완료를 위해 단지 몇 개의 나머지 요소만 처리하면 되고, 이러한 처리는 처리 블록(1980)에서 일어난다. 그렇지 않다면, 처리는 처리 블록(1915)에서 시작을 반복한다.
전술한 바와 같이, 대안의 일부 실시예에서, 복사는 벡터 목적지가 충만 상태일 때마다 중단될 수 있다. 마스크되지 않은 벡터 요소를 벡터 소스에서 벡터 목적지 Dest 내의 인접한 순차적인 요소 위치로 복사할 때, 마스크 내 대응하는 필드의 값은 또한 마스크된 값으로 변경될 수 있다. 따라서, 마스크 값은 진행 및/또는 완료를 추적하는데 이용될 수 있고, 해당 명령어는 충만 상태가 된 목적지가 메모리에 저장된 후에 재실행될 수 있다. 다음에, 해당 명령어는 수정된 마스크 및 벡터 목적지 오프셋 0을 이용하여 벡터 압축 및 회전 명령어의 실행을 여전히 필요로 하는 요소들만 압축하도록 재실행될 수 있다.
도 19b는 벤치마크 애플리케이션에서 벡터 압축 및 회전 기능을 제공하는 프로세스(1902)의 대안의 실시예의 흐름도를 예시한다. 프로세스(1902)의 처리 블록(1911)에서, 변수 i를 제로(0)로 설정하고, offset을 제로(0)로 설정하고, last-i를 last에서 벡터 레지스터의 length를 뺀 것으로 설정한다. 처리 블록(1915)에서, 벡터 TopVal[length:0]의, 예를 들면, 벡터 레지스터(1510)의 각 요소에서 상위 값 v를 벡터 B[length+i:i]의 각 요소와 비교하여 B의 요소들이 상위 값 v보다 작은지를 판단하고, 마스크, 예를 들면, 마스크(1520)를 생성하고 그 결과를 저장한다. 처리 블록(1920)에서, 마스크 내의 마스크되지 않은 값으로 설정된 비트 수의 계수를 count에 저장한다. 처리 블록(1926)에서, 벡터 A[length+i:i]의 요소들을 마스크 내의 마스크되지 않은 설정치에 따라 압축 채워 DestA[length:offset]에 저장한다. 다음에, 프로세스(1931)에서 offset의 값에 count의 값을 더한다.
처리 블록(1941)에서, offset이 길이 length, 즉 벡터 레지스터 내에서 DestA를 유지하는 요소들의 수보다 커졌는지 판단한다. 만일 그렇지 않다면, 처리는 처리 블록(1970)으로 진행하여 i에 length 값을 더한다. 그렇지 않다면, 처리는 처리 블록(1945)으로 진행하고 이 블록에서 DestA[length:0]를 메모리 포인터에 저장한다. 처리 블록(1951)에서, offset의 값에서 length의 값을 뺀다. 처리 블록(1956)에서, 벡터 A[length+i:i]의 요소를 갱신된 마스크 내의 마스크되지 않은 설정치에 따라 압축 채우고 DestA[length:0]에 저장한다. 처리 블록(1960)에서, 메모리 포인터를 length만큼 증가시키고, 즉 만일 벡터 요소 길이가 4바이트이면, 메모리 포인터의 값을 length 값의 4배만큼 증가시킨다. 다음에, 처리는 처리 블록(1970)으로 진행하여 i에 length 값을 더한다. 다음에, 처리 블록(1975)에서, i가 last-i보다 큰지를 판단한다. 만일 그렇다면, 프로세스의 완료를 위해 단지 몇 개의 나머지 요소만 처리하면 되고, 이러한 처리는 처리 블록(1980)에서 일어난다. 그렇지 않다면, 처리는 처리 블록(1915)에서 시작을 반복한다.
본 발명의 실시예는 애플리케이션, 예를 들면 그렇지 않고 쉽게 벡터화되지 않는 SPEC 벤치마크 슈트의 444.NAMD의 내부 루프에서와 같은 벤치마크 애플리케이션에서 벡터 압축 기능을 제공하여, 외부 메모리로의 고가의 순차적인 저장의 횟수를 감소시키고, 성능을 증가시키고, 전력 사용을 감소시키는데 이용될 수 있는 SIMD 벡터 압축 및 회전 명령어와 관련된다. 일부 실시예에서, 마스크 값은 진행 및/또는 완료를 추적하는데 이용될 수 있고, 해당 명령어는 충만 상태가 된 목적지가 메모리에 저장된 후에 재실행될 수 있다. 재실행된 명령어는 수정된 마스크 및 오프셋 0를 이용하여 벡터 압축 및 회전 명령어에 의해 여전히 압축될 필요가 있는 요소들만 압축한다. 대안의 실시예는 벡터 목적지의 요소들을 제로화하고, 벡터 소스에서 어떠한 요소도 복사되지 않는다.
본 명세서에서 기술된 메커니즘의 실시예는 하드웨어, 소프트웨어, 펌웨어, 또는 그러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예는 적어도 하나의 프로세서, (휘발성 및 비휘발성 메모리 및/또는 저장 소자를 포함하는) 저장 시스템, 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함하는 프로그램가능 시스템에서 컴퓨터 프로그램 또는 프로그램 코드로 구현될 수 있다.
프로그램 코드는 입력 명령어에 적용되어 본 명세서에서 기술된 기능들을 수행하고 출력 정보를 생성할 수 있다. 출력 정보는 하나 이상의 출력 장치에 공지의 방식으로 적용될 수 있다. 이러한 적용 목적상, 처리 시스템은, 예를 들면, 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 응용 주문형 집적 회로(ASIC:application specific integrated circuit), 또는 마이크로프로세서와 같은 프로세서를 갖는 어떤 시스템이라도 포함한다.
프로그램 코드는 고레벨 절차 또는 객체 지향 프로그래밍 언어로 구현되어 처리 시스템과 통신할 수 있다. 프로그램 코드는 또한 원할 경우 어셈블리어 또는 기계어로도 구현될 수 있다. 실제로, 본 명세서에서 기술된 메커니즘의 범주는 어떤 특정한 프로그래밍 언어로 한정되지 않는다. 어쨌든, 언어는 컴파일형 또는 해석형 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양태는 기계 판독가능한 매체에 저장되어 기계에 의해 판독될 때 그 기계가 본 명세서에서 설명된 기술들을 수행하는 로직을 제조하게 하는 프로세서 내의 다양한 로직을 표현하는 표현 명령어로 구현될 수 있다. "IP 코어"로 알려진 이러한 표현은 유형의 기계 판독가능한 매체에 저장되고 다양한 고객 또는 제조 설비로 공급되어 실제로 로직 또는 프로세서를 제조하는 제조 기계에 로드할 수 있다.
이러한 기계 판독가능한 저장 매체는 제한 없이 하드디스크와 같은 저장 매체, 플로피 디스크, 광학 디스크, 콤팩트 디스크 판독 전용 메모리(CD-ROMs), 재기록가능 콤팩트 디스크 (CD-RWs), 및 광자기 디스크를 포함하는 다른 형태의 디스크, 판독 전용 메모리(ROMs), 동적 랜덤 액세스 메모리(DRAMs), 정적 랜덤 액세스 메모리(SRAMs)와 같은 랜덤 액세스 메모리(RAMs), 소거 및 프로그램가능 판독 전용 메모리(EPROMs), 플래시 메모리, 전기적 소거 및 프로그램가능 판독 전용 메모리(EEPROMs), 자기 또는 광학 카드와 같은 반도체 장치, 또는 전자 명령어를 저장하는데 적합한 어떤 다른 형태의 매체를 포함하는 기계 또는 장치에 의해 제조되거나 형성된 물품의 비일시적인 유형의 배치를 포함할 수 있다.
따라서, 본 발명의 실시예는 또한 명령어를 포함하거나 하드웨어 기술 언어(HDL:Hardware Description Language)와 같이, 본 명세서에서 기술된 구조, 회로, 장치, 프로세서 및/또는 시스템 특징을 규정하는 설계 데이터를 포함하는 비일시적인 유형의 기계 판독가능한 매체를 포함한다. 이러한 실시예는 또한 프로그램 제품과도 관련될 수 있다.
어떤 경우에, 명령어 변환기는 소스 명령어 집합으로부터의 명령어를 목표 명령어 집합으로 변환하는데 이용될 수 있다. 예를 들면, 명령어 변환기는 명령어를 (예를 들면, 정적 이진 변환, 동적 컴파일레이션을 포함하는 동적 이진 변환을 이용하여) 변환하고, 모프(morph)하고, 에뮬레이트하고, 또는 그렇지 않고 코어에 의해 처리될 하나 이상의 다른 명령어로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 프로세서, 오프(off) 프로세서, 또는 파트 온(part on) 및 파트 오프(part off) 프로세서에 존재할 수 있다.
따라서, 적어도 일 실시예에 따른 하나 이상의 명령어를 수행하는 기술이 개시되었다. 첨부 도면에는 특정한 예시적인 실시예가 기술되고 도시되었지만, 이러한 실시예는 단지 예시적인 것에 불과하고 넓은 발명에 제한되지 않으며, 본 발명은 당업자가 본 발명을 검토할 때 다양한 다른 수정이 있을 수 있기 때문에 도시되고 설명된 구체적인 구성 및 배치에 한정되지 않는다는 것을 알아야 한다. 이와 같은 기술 분야에서, 성장이 빠르고 추가 발전이 쉽게 예상되지 않는 경우, 기술된 실시예는 본 발명의 원리 또는 첨부의 특허청구범위의 범주를 벗어남이 없이 기술적 발전을 용이하게 가능하게 하도록 배치 및 상세 내용이 쉽게 수정될 수 있다.
Claims (40)
- 프로세서로서,
제1 복수의 데이터 필드(data fields)를 포함하는 마스크 레지스터(mask register) - 상기 마스크 레지스터 내의 상기 제1 복수의 데이터 필드 각각은 벡터의 요소 위치(element location in a vector)에 대응함 -;
벡터 소스 오퍼랜드(vector source operand), 상기 마스크 레지스터, 벡터 목적지 오퍼랜드(vector destination operand) 및 벡터 목적지 오프셋(vector destination offset)을 지정하는 제1 명령어(instruction)를 디코드하는 디코드단; 및
상기 디코드된 제1 명령어에 응답하여,
상기 마스크 레지스터 내의 상기 제1 복수의 데이터 필드의 값들을 판독하고;
상기 마스크 레지스터 내에서 제1 값을 갖는 상기 제1 복수의 데이터 필드 각각마다, 대응하는 벡터 요소들을 벡터 목적지 오프셋 위치에서 시작하여 상기 벡터 소스 오퍼랜드에서 벡터 목적지 내의 인접한 순차적인 요소 위치들로 복사(copy)하는 하나 이상의 실행 유닛
을 포함하는 프로세서. - 제1항에 있어서, 상기 벡터 소스 오퍼랜드로부터의 상기 대응하는 벡터 요소들은 상기 벡터 목적지 내의 총 요소 위치의 수를 모듈로(modulo)로 하여 인접한 순차적인 요소 위치로 복사되는 프로세서.
- 제2항에 있어서, 상기 제1 명령어는 벡터 압축(vector compress) 및 회전(rotate) 명령어인 프로세서.
- 제1항에 있어서, 상기 대응하는 벡터 요소들은 최상위(most significant) 벡터 목적지 요소 위치가 채워질 때까지만 상기 벡터 목적지 오프셋 위치에서 시작하여 상기 벡터 소스 오퍼랜드에서 인접한 순차적인 요소 위치들로 복사되는 프로세서.
- 제4항에 있어서, 상기 제1 명령어는 벡터 압축, 채움(fill) 및 회전 명령어인 프로세서.
- 제1항에 있어서, 상기 제1 값은 1인 프로세서.
- 제1항에 있어서, 각각의 대응하는 벡터 요소를 상기 벡터 소스 오퍼랜드에서 상기 벡터 목적지 내의 인접한 순차적인 요소 위치들로 복사할 때, 상기 마스크 레지스터 내의 대응하는 데이터 필드의 값은 상기 제1 값에서 제2 값으로 변경되는 프로세서.
- 제7항에 있어서, 상기 제2 값은 0인 프로세서.
- 제1항에 있어서, 상기 벡터 목적지 오퍼랜드에 복사된 데이터 요소들은 32비트 데이터 요소인 프로세서.
- 제1항에 있어서, 상기 벡터 목적지 오퍼랜드에 복사된 데이터 요소들은 64비트 데이터 요소인 프로세서.
- 제1항에 있어서, 상기 벡터 목적지 오퍼랜드는 128비트 벡터 레지스터인 프로세서.
- 제1항에 있어서, 상기 벡터 목적지 오퍼랜드는 256비트 벡터 레지스터인 프로세서.
- 제1항에 있어서, 상기 벡터 목적지 오퍼랜드는 512비트 벡터 레지스터인 프로세서.
- 제1 실행가능한 명령어를 포함하는 기능적 기술적 자료(functional descriptive material)를 기록하는 기계 판독가능한 매체로서, 상기 제1 실행가능한 명령어는 기계에 의해 실행된 경우 상기 기계가,
마스크 레지스터(mask register) 내의 제1 복수의 데이터 필드(data fields)의 값들을 판독하고;
상기 마스크 레지스터 내에서 제1 값을 갖는 상기 제1 복수의 데이터 필드 각각마다, 대응하는 벡터 요소(vector element)를 벡터 목적지 오프셋(vector destination offset) 위치에서 시작하여 벡터 소스 오퍼랜드(vector source operand)에서 벡터 목적지 내의 인접한 순차적인 요소 위치들로 복사(copy)하게 하는
기계 판독가능한 매체. - 제14항에 있어서, 상기 벡터 소스 오퍼랜드로부터의 상기 대응하는 벡터 요소들은 상기 벡터 목적지 내의 총 요소 위치의 수를 모듈로(modulo)로 하여 인접한 순차적인 요소 위치들로 복사되는 기계 판독가능한 매체.
- 제14항에 있어서, 상기 벡터 소스 오퍼랜드로부터의 상기 대응하는 벡터 요소들은 최상위(most significant) 벡터 목적지 요소 위치가 채워질 때까지만 상기 벡터 목적지 오프셋 위치에서 시작하여 인접한 순차적인 요소 위치들로 복사되는 기계 판독가능한 매체.
- 제16항에 있어서, 상기 제1 실행가능한 명령어는 상기 기계에 의해 실행된 경우 상기 기계가,
상기 벡터 소스 오퍼랜드에서 상기 벡터 목적지 내의 인접한 순차적인 요소 위치로 복사되는 각각의 대응하는 벡터 요소에 대해, 상기 마스크 레지스터 내의 대응하는 데이터 필드의 값을 상기 제1 값에서 제2 값으로 변경하게 하는 기계 판독가능한 매체. - 제14항에 있어서, 상기 벡터 목적지에 저장된 데이터 요소들은 32비트 데이터 요소인 기계 판독가능한 매체.
- 제14항에 있어서, 상기 벡터 목적지에 저장된 데이터 요소들은 64비트 데이터 요소인 기계 판독가능한 매체.
- 제14항에 있어서, 상기 벡터 목적지는 128비트 벡터 레지스터인 기계 판독가능한 매체.
- 제14항에 있어서, 상기 벡터 목적지는 256비트 벡터 레지스터인 기계 판독가능한 매체.
- 제14항에 있어서, 상기 벡터 목적지는 512비트 벡터 레지스터인 기계 판독가능한 매체.
- 프로세서로서,
벡터 소스 오퍼랜드(vector source operand), 마스크 레지스터(mask register), 벡터 목적지 오퍼랜드(vector destination operand) 및 벡터 목적지 오프셋(vector destination offset)을 지정하는 제1 단일 명령어 다중 데이터(SIMD:single-instruction-multiple-data) 명령어를 디코드하는 디코드단; 및
상기 디코드된 제1 SIMD 명령어에 응답하여,
상기 마스크 레지스터 내의 제1 복수의 데이터 필드(data fields)의 값들을 판독하고;
상기 마스크 레지스터 내에서 제1 값을 갖는 상기 제1 복수의 데이터 필드 각각마다, 대응하는 벡터 요소를 상기 벡터 목적지 오프셋 위치에서 시작하여 벡터 소스에서 벡터 목적지 내의 총 요소 위치의 수를 모듈로(modulo)로 하여 상기 벡터 목적지 내의 인접한 순차적인 요소 위치로 복사(copy)하는 하나 이상의 실행 유닛
을 포함하는 프로세서. - 제23항에 있어서, 상기 벡터 목적지는 128비트 벡터 레지스터인 프로세서.
- 제23항에 있어서, 상기 벡터 목적지는 256비트 벡터 레지스터인 프로세서.
- 제23항에 있어서, 상기 벡터 목적지는 512비트 벡터 레지스터인 프로세서.
- 프로세서로서,
벡터 소스 오퍼랜드(vector source operand), 마스크 레지스터(mask register), 벡터 목적지 오퍼랜드(vector destination operand) 및 벡터 목적지 오프셋(vector destination offset)을 지정하는 제1 단일 명령어 다중 데이터(SIMD) 명령어를 디코드하는 디코드단; 및
상기 디코드된 제1 SIMD 명령어에 응답하여,
상기 마스크 레지스터 내의 제1 복수의 데이터 필드(data fields)의 값들을 판독하고;
상기 마스크 레지스터 내에서 마스크되지 않은 값(unmasked value)을 갖는 상기 제1 복수의 데이터 필드 각각마다, 대응하는 벡터 요소를 벡터 목적지 오프셋 위치에서 시작하여, 최상위(most significant) 벡터 목적지 요소 위치가 채워질 때까지만 벡터 소스에서 벡터 목적지 내의 인접한 순차적인 요소 위치들로 복사(copy)하는 하나 이상의 실행 유닛
을 포함하는 프로세서. - 제27항에 있어서, 상기 하나 이상의 실행 유닛은 상기 디코드된 제1 SIMD 명령어에 응답하여,
각각의 대응하는 벡터 요소가 상기 벡터 소스에서 상기 벡터 목적지 내의 인접한 순차적인 요소 위치들로 복사된 경우 상기 마스크 레지스터 내의 대응하는 데이터 필드의 값을 상기 마스크되지 않은 값에서 마스크된 값으로 변경하는 프로세서. - 제28항에 있어서, 상기 마스크된 값은 0인 프로세서.
- 처리 시스템으로서,
메모리; 및
복수의 프로세서를 포함하고, 각 프로세서는,
벡터 소스 오퍼랜드(vector source operand), 마스크 오퍼랜드(mask operand), 벡터 목적지 오퍼랜드(vector destination operand) 및 벡터 목적지 오프셋(vector destination offset)을 지정하는 제1 SIMD 명령어를 디코드하는 디코드단; 및
상기 디코드된 제1 SIMD 명령어에 응답하여,
마스크 레지스터 내의 제1 복수의 데이터 필드(data fields)의 값들을 판독하고;
상기 마스크 레지스터 내에서 마스크되지 않은 값(unmasked value)을 갖는 상기 제1 복수의 데이터 필드 각각마다, 대응하는 벡터 요소를 벡터 목적지 오프셋 위치에서 시작하여 벡터 소스에서 벡터 목적지 내의 인접한 순차적인 요소 위치로 복사(copy)하는 하나 이상의 실행 유닛
을 포함하는 처리 시스템. - 제30항에 있어서, 상기 벡터 소스로부터의 상기 대응하는 벡터 요소들은 상기 벡터 목적지 내의 총 요소 위치의 수를 모듈로(modulo)로 하여 인접한 순차적인 요소 위치들로 복사되는 처리 시스템.
- 제30항에 있어서, 상기 하나 이상의 실행 유닛은 또한 상기 제1 SIMD 명령어에 응답하여,
상기 벡터 소스에서 복사된 벡터 요소에 대응하지 않는 각 벡터 목적지 요소에 대해 상기 벡터 목적지 요소들의 값들을 제로화(zero)하는 처리 시스템. - 제30항에 있어서, 상기 벡터 소스로부터의 상기 대응하는 벡터 요소들은 상기 벡터 목적지 오프셋 위치에서 시작하여, 최상위(most significant) 벡터 목적지 요소 위치가 채워질 때까지만 인접한 순차적인 요소 위치들로 복사되는 처리 시스템.
- 제33항에 있어서, 상기 하나 이상의 실행 유닛은 또한 상기 제1 SIMD 명령어에 응답하여,
상기 벡터 소스에서 상기 벡터 목적지 내의 인접한 순차적인 요소 위치들로 복사된 각 대응하는 벡터 요소에 대해 상기 마스크 레지스터 내의 상기 대응하는 데이터 필드의 값을 상기 마스크되지 않은 값에서 마스크된 값으로 변경하는 처리 시스템. - 제34항에 있어서, 상기 마스크된 값은 0인 처리 시스템.
- 제30항에 있어서, 상기 벡터 목적지에 저장된 데이터 요소들은 32비트 데이터 요소인 처리 시스템.
- 제30항에 있어서, 상기 벡터 목적지에 저장된 데이터 요소들은 64비트 데이터 요소인 처리 시스템.
- 제30항에 있어서, 상기 벡터 목적지는 128비트 벡터 레지스터인 처리 시스템.
- 제30항에 있어서, 상기 벡터 목적지는 256비트 벡터 레지스터인 처리 시스템.
- 제30항에 있어서, 상기 벡터 목적지는 512비트 벡터 레지스터인 처리 시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/664,401 US9606961B2 (en) | 2012-10-30 | 2012-10-30 | Instruction and logic to provide vector compress and rotate functionality |
US13/664,401 | 2012-10-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140056082A KR20140056082A (ko) | 2014-05-09 |
KR101555412B1 true KR101555412B1 (ko) | 2015-10-06 |
Family
ID=49680020
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020130130028A KR101555412B1 (ko) | 2012-10-30 | 2013-10-30 | 벡터 압축 및 회전 기능 제공 명령어 및 로직 |
Country Status (7)
Country | Link |
---|---|
US (2) | US9606961B2 (ko) |
JP (1) | JP5739961B2 (ko) |
KR (1) | KR101555412B1 (ko) |
CN (2) | CN103793201B (ko) |
DE (1) | DE102013018238A1 (ko) |
GB (1) | GB2507655B (ko) |
TW (1) | TWI610236B (ko) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8515052B2 (en) | 2007-12-17 | 2013-08-20 | Wai Wu | Parallel signal processing system and method |
US9378560B2 (en) | 2011-06-17 | 2016-06-28 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
US9513906B2 (en) | 2013-01-23 | 2016-12-06 | International Business Machines Corporation | Vector checksum instruction |
US9715385B2 (en) | 2013-01-23 | 2017-07-25 | International Business Machines Corporation | Vector exception code |
US9778932B2 (en) | 2013-01-23 | 2017-10-03 | International Business Machines Corporation | Vector generate mask instruction |
US9823924B2 (en) | 2013-01-23 | 2017-11-21 | International Business Machines Corporation | Vector element rotate and insert under mask instruction |
US9471308B2 (en) | 2013-01-23 | 2016-10-18 | International Business Machines Corporation | Vector floating point test data class immediate instruction |
US9804840B2 (en) | 2013-01-23 | 2017-10-31 | International Business Machines Corporation | Vector Galois Field Multiply Sum and Accumulate instruction |
US10133570B2 (en) * | 2014-09-19 | 2018-11-20 | Intel Corporation | Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated |
KR102106889B1 (ko) * | 2014-12-11 | 2020-05-07 | 한화디펜스 주식회사 | 소형통합제어장치 |
US20160188333A1 (en) * | 2014-12-27 | 2016-06-30 | Intel Coporation | Method and apparatus for compressing a mask value |
US20170177348A1 (en) * | 2015-12-21 | 2017-06-22 | Intel Corporation | Instruction and Logic for Compression and Rotation |
US10177782B2 (en) * | 2015-12-26 | 2019-01-08 | Intel Corporation | Hardware apparatuses and methods for data decompression |
GB2552153B (en) * | 2016-07-08 | 2019-07-24 | Advanced Risc Mach Ltd | An apparatus and method for performing a rearrangement operation |
US10162752B2 (en) * | 2016-09-22 | 2018-12-25 | Qualcomm Incorporated | Data storage at contiguous memory addresses |
US10891131B2 (en) | 2016-09-22 | 2021-01-12 | Intel Corporation | Processors, methods, systems, and instructions to consolidate data elements and generate index updates |
EP3336692B1 (en) | 2016-12-13 | 2020-04-29 | Arm Ltd | Replicate partition instruction |
EP3336691B1 (en) | 2016-12-13 | 2022-04-06 | ARM Limited | Replicate elements instruction |
US10908898B2 (en) | 2017-02-17 | 2021-02-02 | Intel Corporation | Vector instruction for accumulating and compressing values based on input mask |
KR102343652B1 (ko) * | 2017-05-25 | 2021-12-24 | 삼성전자주식회사 | 벡터 프로세서의 서열 정렬 방법 |
CN107748674B (zh) * | 2017-09-07 | 2021-08-31 | 中国科学院微电子研究所 | 面向比特粒度的信息处理系统 |
JP7004905B2 (ja) | 2018-03-26 | 2022-01-21 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US11277455B2 (en) | 2018-06-07 | 2022-03-15 | Mellanox Technologies, Ltd. | Streaming system |
US20200106828A1 (en) * | 2018-10-02 | 2020-04-02 | Mellanox Technologies, Ltd. | Parallel Computation Network Device |
GB2580068B (en) * | 2018-12-20 | 2021-02-24 | Advanced Risc Mach Ltd | Generating a vector predicate summary |
US10831497B2 (en) * | 2019-01-31 | 2020-11-10 | International Business Machines Corporation | Compression/decompression instruction specifying a history buffer to be used in the compression/decompression of data |
US11625393B2 (en) | 2019-02-19 | 2023-04-11 | Mellanox Technologies, Ltd. | High performance computing system |
EP3699770A1 (en) | 2019-02-25 | 2020-08-26 | Mellanox Technologies TLV Ltd. | Collective communication system and methods |
US11604853B2 (en) * | 2019-10-18 | 2023-03-14 | Stmicroelectronics S.R.L. | System and method for performing vector rotation |
US11750699B2 (en) | 2020-01-15 | 2023-09-05 | Mellanox Technologies, Ltd. | Small message aggregation |
US11252027B2 (en) | 2020-01-23 | 2022-02-15 | Mellanox Technologies, Ltd. | Network element supporting flexible data reduction operations |
US11876885B2 (en) | 2020-07-02 | 2024-01-16 | Mellanox Technologies, Ltd. | Clock queue with arming and/or self-arming features |
US11556378B2 (en) | 2020-12-14 | 2023-01-17 | Mellanox Technologies, Ltd. | Offloading execution of a multi-task parameter-dependent operation to a network device |
US12106104B2 (en) * | 2020-12-23 | 2024-10-01 | Intel Corporation | Processor instructions for data compression and decompression |
US11922237B1 (en) | 2022-09-12 | 2024-03-05 | Mellanox Technologies, Ltd. | Single-step collective operations |
CN116578343B (zh) * | 2023-07-10 | 2023-11-21 | 南京砺算科技有限公司 | 指令编译方法及装置、图形处理装置、存储介质、终端设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000510268A (ja) | 1996-11-22 | 2000-08-08 | エス・スリー,インコーポレイテッド | 3次元グラフィックス補間を実行するための乗算器 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS57209570A (en) * | 1981-06-19 | 1982-12-22 | Fujitsu Ltd | Vector processing device |
JPH0731669B2 (ja) * | 1986-04-04 | 1995-04-10 | 株式会社日立製作所 | ベクトル・プロセツサ |
JPH01284972A (ja) | 1988-05-11 | 1989-11-16 | Nec Corp | ベクトル処理装置 |
JPH02190968A (ja) | 1989-01-19 | 1990-07-26 | Nec Corp | ベクトル処理装置 |
JP2665111B2 (ja) * | 1992-06-18 | 1997-10-22 | 日本電気株式会社 | ベクトル処理装置 |
US5832290A (en) * | 1994-06-13 | 1998-11-03 | Hewlett-Packard Co. | Apparatus, systems and method for improving memory bandwidth utilization in vector processing systems |
US6091768A (en) * | 1996-02-21 | 2000-07-18 | Bru; Bernard | Device for decoding signals of the MPEG2 type |
US6052769A (en) * | 1998-03-31 | 2000-04-18 | Intel Corporation | Method and apparatus for moving select non-contiguous bytes of packed data in a single instruction |
US6621428B1 (en) * | 2000-05-04 | 2003-09-16 | Hewlett-Packard Development Company, L.P. | Entropy codec for fast data compression and decompression |
US7054330B1 (en) * | 2001-09-07 | 2006-05-30 | Chou Norman C | Mask-based round robin arbitration |
JP2004302647A (ja) * | 2003-03-28 | 2004-10-28 | Seiko Epson Corp | ベクトルプロセッサおよびレジスタのアドレス指定方法 |
US8595394B1 (en) * | 2003-06-26 | 2013-11-26 | Nvidia Corporation | Method and system for dynamic buffering of disk I/O command chains |
US20050289329A1 (en) * | 2004-06-29 | 2005-12-29 | Dwyer Michael K | Conditional instruction for a single instruction, multiple data execution engine |
US20090172348A1 (en) | 2007-12-26 | 2009-07-02 | Robert Cavin | Methods, apparatus, and instructions for processing vector data |
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 |
US9940138B2 (en) * | 2009-04-08 | 2018-04-10 | Intel Corporation | Utilization of register checkpointing mechanism with pointer swapping to resolve multithreading mis-speculations |
US20120216011A1 (en) * | 2011-02-18 | 2012-08-23 | Darryl Gove | Apparatus and method of single-instruction, multiple-data vector operation masking |
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 |
US20120254589A1 (en) * | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | System, apparatus, and method for aligning registers |
US20130151822A1 (en) * | 2011-12-09 | 2013-06-13 | International Business Machines Corporation | Efficient Enqueuing of Values in SIMD Engines with Permute Unit |
CN104126172B (zh) * | 2011-12-22 | 2018-03-20 | 英特尔公司 | 用于掩码寄存器扩充操作的装置和方法 |
CN107220027A (zh) * | 2011-12-23 | 2017-09-29 | 英特尔公司 | 用于执行掩码位压缩的系统、装置以及方法 |
WO2013101124A1 (en) * | 2011-12-29 | 2013-07-04 | Intel Corporation | Packed data operation mask comparison processors, methods, systems, and instructions |
US8972697B2 (en) * | 2012-06-02 | 2015-03-03 | Intel Corporation | Gather using index array and finite state machine |
US8959275B2 (en) * | 2012-10-08 | 2015-02-17 | International Business Machines Corporation | Byte selection and steering logic for combined byte shift and byte permute vector unit |
US9411593B2 (en) * | 2013-03-15 | 2016-08-09 | Intel Corporation | Processors, methods, systems, and instructions to consolidate unmasked elements of operation masks |
US20150186136A1 (en) * | 2013-12-27 | 2015-07-02 | Tal Uliel | Systems, apparatuses, and methods for expand and compress |
US10133570B2 (en) * | 2014-09-19 | 2018-11-20 | Intel Corporation | Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated |
-
2012
- 2012-10-30 US US13/664,401 patent/US9606961B2/en active Active
-
2013
- 2013-09-26 JP JP2013199971A patent/JP5739961B2/ja not_active Expired - Fee Related
- 2013-09-30 TW TW102135339A patent/TWI610236B/zh not_active IP Right Cessation
- 2013-10-14 GB GB1318167.2A patent/GB2507655B/en active Active
- 2013-10-30 DE DE102013018238.7A patent/DE102013018238A1/de active Pending
- 2013-10-30 CN CN201310524909.2A patent/CN103793201B/zh not_active Expired - Fee Related
- 2013-10-30 CN CN201710568910.3A patent/CN107729048B/zh not_active Expired - Fee Related
- 2013-10-30 KR KR1020130130028A patent/KR101555412B1/ko active IP Right Grant
-
2017
- 2017-03-17 US US15/462,392 patent/US10459877B2/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000510268A (ja) | 1996-11-22 | 2000-08-08 | エス・スリー,インコーポレイテッド | 3次元グラフィックス補間を実行するための乗算器 |
Also Published As
Publication number | Publication date |
---|---|
CN107729048B (zh) | 2021-09-28 |
DE102013018238A1 (de) | 2014-04-30 |
US9606961B2 (en) | 2017-03-28 |
CN107729048A (zh) | 2018-02-23 |
GB2507655B (en) | 2015-06-24 |
JP2014089699A (ja) | 2014-05-15 |
US20140122831A1 (en) | 2014-05-01 |
GB201318167D0 (en) | 2013-11-27 |
TWI610236B (zh) | 2018-01-01 |
CN103793201B (zh) | 2017-08-11 |
JP5739961B2 (ja) | 2015-06-24 |
TW201435733A (zh) | 2014-09-16 |
GB2507655A (en) | 2014-05-07 |
KR20140056082A (ko) | 2014-05-09 |
US10459877B2 (en) | 2019-10-29 |
US20170192785A1 (en) | 2017-07-06 |
CN103793201A (zh) | 2014-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101555412B1 (ko) | 벡터 압축 및 회전 기능 제공 명령어 및 로직 | |
KR101790428B1 (ko) | 조건부 루프들을 벡터화하기 위한 명령어들 및 로직 | |
KR101572770B1 (ko) | 벡터 로드-op/저장-op에 스트라이드 기능을 제공하는 명령어 및 로직 | |
KR101842058B1 (ko) | 푸싱형 버퍼 복사 및 저장 기능성을 제공하기 위한 명령어 및 논리 | |
KR101804008B1 (ko) | 벡터 산개-op 및 집결-op 기능을 제공하는 명령어 및 로직 | |
KR101714133B1 (ko) | 벡터 로드 및 저장에 스트라이드 및 마스킹 기능을 제공하는 명령어 및 로직 | |
TWI610233B (zh) | 用於提供向量分組元組交叉比較功能的方法、處理器和處理系統 | |
WO2013095657A1 (en) | Instruction and logic to provide vector blend and permute functionality | |
KR20170131379A (ko) | 원자적 범위 연산들을 제공하기 위한 명령어들 및 로직 | |
US9189240B2 (en) | Split-word memory | |
CN106293631B (zh) | 用于提供向量分散操作和聚集操作功能的指令和逻辑 | |
JP6222859B2 (ja) | ストライド機能及びマスク機能を有するベクトルロード及びベクトルストアを提供する命令及びロジック | |
JP6231155B2 (ja) | ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20180903 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20190829 Year of fee payment: 5 |