KR102121866B1 - 와이드 데이터 엘리먼트들에 대한 레지스터 쌍을 사용하는 짝수-엘리먼트 및 홀수-엘리먼트 연산들을 가지는 혼합-폭 simd 연산들 - Google Patents
와이드 데이터 엘리먼트들에 대한 레지스터 쌍을 사용하는 짝수-엘리먼트 및 홀수-엘리먼트 연산들을 가지는 혼합-폭 simd 연산들 Download PDFInfo
- Publication number
- KR102121866B1 KR102121866B1 KR1020187001696A KR20187001696A KR102121866B1 KR 102121866 B1 KR102121866 B1 KR 102121866B1 KR 1020187001696 A KR1020187001696 A KR 1020187001696A KR 20187001696 A KR20187001696 A KR 20187001696A KR 102121866 B1 KR102121866 B1 KR 102121866B1
- Authority
- KR
- South Korea
- Prior art keywords
- data elements
- simd
- destination
- source
- width
- Prior art date
Links
- 239000013598 vector Substances 0.000 claims abstract description 141
- 238000000034 method Methods 0.000 claims abstract description 43
- 230000006870 function Effects 0.000 description 14
- 230000009471 action Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000006249 magnetic particle Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000007480 spreading Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/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/30098—Register arrangements
-
- 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/30109—Register structure having multiple operands in a single register
-
- 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
- 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/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
-
- 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]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
Abstract
시스템들 및 방법들은, 제1 비트-폭의 데이터 엘리먼트들을 포함하는 소스 벡터 오퍼랜드 및 제2 비트-폭 ― 제2 비트-폭은 제1 비트-폭의 절반 또는 2배임 ― 의 데이터 엘리먼트들을 포함하는 목적지 벡터 오퍼랜드를 적어도 가지는 혼합-폭 SIMD(single instruction multiple data) 명령에 관한 것이다. 대응적으로, 소스 또는 목적지 벡터 오퍼랜드들 중 하나는 한 쌍의 레지스터들, 즉, 제1 레지스터 및 제2 레지스터로서 표현된다. 다른 벡터 오퍼랜드는 단일 레지스터로서 표현된다. 제1 레지스터의 데이터 엘리먼트들은 단일 레지스터로서 표현되는 다른 벡터 오퍼랜드의 짝수로-넘버링된 데이터 엘리먼트들에 대응하고, 제2 레지스터의 데이터 엘리먼트들은 단일 레지스터로서 표현되는 다른 벡터 오퍼랜드의 데이터 엘리먼트들에 대응한다.
Description
[0001] 본 개시내용의 양상들은 적어도 하나의 벡터의 데이터 엘리먼트들이 적어도 하나의 다른 벡터의 데이터 엘리먼트들과 상이한 비트-폭을 가지는 2개 또는 그 초과의 벡터들을 수반하는 연산들과 관련된다. 그러한 연산들은 혼합-폭 연산들로 지칭된다. 더 구체적으로, 일부 양상들은 적어도 제1 벡터 오퍼랜드 및 제2 벡터 오퍼랜드를 포함하는 혼합-폭 SIMD(single instruction multiple data) 연산들에 관한 것이며, 여기서 제1 또는 제2 벡터 오퍼랜드들 중 적어도 하나는 짝수 또는 홀수 레지스터 쌍들에 저장될 수 있는 데이터 엘리먼트들을 가진다.
[0002] SIMD(Single instruction multiple data) 명령들은 데이터 병렬성(parallelism)을 이용하기 위한 프로세싱 시스템들에서 사용될 수 있다. 데이터 병렬성은, 예컨대, 동일한 또는 공통 태스크가 데이터 벡터의 2개 또는 그 초과의 데이터 엘리먼트들에 대해 수행될 필요가 있을 때 존재한다. 다수의 명령들을 사용하기보다는, 대응하는 다수의 SIMD 레인들에서 다수의 데이터 엘리먼트들에 대해 수행될 동일한 명령을 정의하는 단일 SIMD 명령을 사용함으로써, 공통 태스크가 2개 또는 그 초과의 데이터 엘리먼트들에 대해 병렬로 수행될 수 있다.
[0003] SIMD 명령들은 소스 및 목적지 벡터 오퍼랜드들과 같은 하나 또는 그 초과의 벡터 오퍼랜드들을 포함할 수 있다. 각각의 벡터 오퍼랜드는 2개 또는 그 초과의 데이터 엘리먼트들을 포함할 것이다. SIMD 명령들에 대해, 동일한 벡터 오퍼랜드에 속하는 모든 데이터 엘리먼트들은 일반적으로 동일한 비트-폭을 가질 수 있다. 그러나, 일부 SIMD 명령들은 혼합-폭 오퍼랜드들을 특정할 수 있으며, 여기서, 제1 벡터 오퍼랜드의 데이터 엘리먼트들은 제1 비트-폭을 가질 수 있고, 제2 벡터 오퍼랜드의 데이터 엘리먼트들은 제2 비트-폭을 가질 수 있으며, 여기서, 제1 및 제2 비트-폭들은 서로 상이하다. 혼합-폭 오퍼랜드들로의 SIMD 명령들의 실행은 몇몇 문제들을 수반할 수 있다.
[0004] 도 1a-c는 혼합-폭 오퍼랜드들로 SIMD 명령들을 실행하기 위한 종래의 구현들에서 수반되는 문제들의 예들을 예시한다. 도 1a를 참조하면, SIMD 명령(100)을 실행하기 위한 제1 종래의 구현이 예시된다. SIMD 명령(100)은 64-비트 ISA(instruction set architecture)를 지원하는 종래의 프로세서(도시되지 않음)에 의해 실행될 수 있다고 가정된다. 이것은, 명령들, 이를테면, SIMD 명령(100)이 최대 64-비트들의 비트-폭들을 가지는 오퍼랜드들을 특정할 수 있다는 것을 의미한다. 64-비트 오퍼랜드들은 64-비트 레지스터들 또는 한 쌍의 32-비트 레지스터들에 관해 특정될 수 있다.
[0005] SIMD 명령(100)의 목적은 소스 오퍼랜드(102)의 각각의 데이터 엘리먼트에 대해 동일한 명령을 실행하는 것이다. 소스 오퍼랜드(102)는 0-7로 라벨링된 8개의 8-비트 데이터 엘리먼트들을 포함하는 64-비트 벡터이다. 소스 오퍼랜드(102)는 단일의 64-비트 레지스터 또는 한 쌍의 32-비트 레지스터들에 저장될 수 있다. 8개의 데이터 엘리먼트들 0-7 각각에 대해 실행될 동일한 명령 또는 공통 연산은, 예컨대, 곱셈, 제곱 함수, 좌측-시프트 함수, 증분 함수, 가산(예컨대, 명령 내의 즉각적 필드(immediate field)들 또는 상수 값을 이용함 또는 다른 벡터 오퍼랜드에 의해 제공된 값을 이용함) 등일 수 있는데, 이들의 결과는 8-비트 초과를 소비하고, 8개의 결과적 데이터 엘리먼트들 각각에 대한 저장을 위해 최대 16-비트를 소비할 수 있다. 이것은, 소스 오퍼랜드(102)가 소비할 수 있는 저장 공간의 2배, 즉, 2개의 64-비트 레지스터들 또는 2쌍의 32-비트 레지스터들을 SIMD 명령(100)의 결과가 소비할 수 있다는 것을 의미한다.
[0006] SIMD 명령(100)을 구현하도록 구성된 종래의 프로세서가 64-비트보다 큰 비트-폭들의 오퍼랜드들을 특정하는 명령들을 포함하지 않기 때문에, SIMD 명령(100)은 2개의 컴포넌트 SIMD 명령들(100X 및 100Y)로 분할될 수 있다. SIMD 명령(100X)은 소스 오퍼랜드(102)의 짝수-번호들(또는 "짝수-넘버링된(even-numbered) 데이터 엘리먼트들") 0, 2, 4 및 6으로 라벨링된 데이터 엘리먼트들에 대해 수행될 공통 연산을 특정한다. SIMD 명령(100X)은 폭이 64-비트이고 A, C, E 및 G로 라벨링된 16-비트 데이터 엘리먼트들을 포함하는 목적지 오퍼랜드(104x)를 특정하는데, 이들 각각은 하이(H) 8-비트 및 로우(L) 8-비트로 구성된다. 소스 오퍼랜드(102)의 짝수-넘버링된 8-비트 데이터 엘리먼트들 0, 2, 4 및 6에 대한 공통 연산의 결과들은 목적지 오퍼랜드(104x)의 16-비트 데이터 엘리먼트들 A, C, E 및 G에 대응하게 기록된다. SIMD 명령(100Y)은 SIMD 명령(100X)과 유사한데, SIMD 명령(100Y)이 소스 오퍼랜드(102)의 홀수-번호들(또는 "홀수-넘버링된(odd-numbered) 데이터 엘리먼트들") 1, 3, 5 및 7로 라벨링된 데이터 엘리먼트들에 대한 공통 연산을 특정하고 결과들이 목적지 오퍼랜드(104y)(이 목적지 오퍼랜드(104y)는 또한 SIMD 명령(100X)의 목적지 오퍼랜드(104x)와 유사한 64-비트 오퍼랜드임)의 16-비트 데이터 엘리먼트들 B, D, F, H에 기록된다는 점에서 차이가 있다. 이러한 방식으로, SIMD 명령들(100X 및 100Y) 각각은 하나의 64-비트 목적지 오퍼랜드를 특정할 수 있고, SIMD 명령들(100X 및 100Y)은 함께, 소스 오퍼랜드(102)의 데이터 엘리먼트들 0-7 각각에 대한 공통 연산의 실행을 달성할 수 있다. 그러나, SIMD 명령(100)을 구현하기 위해 필요한 2개의 개별 명령으로 인해, 코드 공간이 증가한다.
[0007] 도 1b는 컴포넌트 SIMD 명령들(120X 및 120Y)의 상이한 세트를 사용하는 SIMD 명령(100)의 제2 종래의 구현을 예시한다. SIMD 명령들(120X 및 120Y)은 각각, 소스 오퍼랜드(102)의 8-비트 데이터 엘리먼트들 0-7 각각에 대한 공통 연산을 특정한다. SIMD 명령(120X)은 그 결과들의 로우(L) 8-비트가 기록될 목적지 오퍼랜드(124x)를 목적지 오퍼랜드(124x)의 대응하는 8-비트 결과 데이터 엘리먼트들 A-H로 특정한다(반면, 그 결과들의 하이(H) 8-비트는 폐기됨). 유사하게, 명령(120Y)은 그 결과들의 하이(H) 8-비트가 기록될 목적지 오퍼랜드(124y)를 목적지 오퍼랜드(124y)의 대응하는 8-비트 데이터 엘리먼트들 A-H로 특정한다(반면, 그 결과들의 로우(L) 8-비트는 폐기됨). SIMD 명령(100)의 이러한 제2 종래의 구현은 또한, 2개의 컴포넌트 SIMD 명령들(120X 및 120Y)에 대한 증가된 코드 공간을 겪는다. 더욱이, 인식될 바와 같이, 제2 종래의 구현은 또한, 소스 오퍼랜드(102)의 데이터 엘리먼트들 0-7 각각에 대한 하이(H) 8-비트(예컨대, 명령(120X)을 실행할 시) 또는 로우(L) 8-비트(예컨대, 명령(120Y)을 실행할 시)를 계산 및 폐기할 때 전력의 낭비가 발생한다.
[0008] 도 1c는 도 1a의 SIMD 명령들(100X 및 100Y)과 일부 방식들이 유사한 컴포넌트 SIMD 명령들(140X 및 140Y)의 다른 세트를 사용하는 SIMD 명령(100)의 제3 종래의 구현을 예시한다. 그 차이는 소스 오퍼랜드(102)의 데이터 엘리먼트들 중 어느 것들이 각각의 SIMD 명령에 의해 연산되는지에 있다. 더 상세하게, 짝수-넘버링된 8-비트 데이터 엘리먼트들보다는, SIMD 명령(140X)은 소스 오퍼랜드(102)의 하위 4개의 데이터 엘리먼트들 0-3에 대해 수행될 공통 연산을 특정한다. 그 결과들은 목적지 오퍼랜드(144x)의 16-비트 데이터 엘리먼트들 A, B, C, D에 기록된다. 그러나, SIMD 명령(140X)의 실행은 목적지 오퍼랜드(140X)의 모든 64-비트들에 걸친 하위 4개의 8-비트 데이터 엘리먼트들(32 비트에 걸쳐 있음)에 대한 연산의 결과들의 확산을 수반한다. SIMD 명령(144y)은 유사하며, 64-비트 목적지 오퍼랜드(144y)의 16-비트 데이터 엘리먼트들 E, F, G, H에 걸친 소스 오퍼랜드(102)의 상위 4개의 8-비트 데이터 엘리먼트들 4-7에 대한 연산의 결과들의 확산을 특정한다. 제1 및 제2 종래의 구현들에서와 같이 증가된 코드 사이즈 외에도, 제3 종래의 구현에서 보여진 바와 같은 이러한 데이터 이동들의 확산은 크로스바와 같은 추가적 하드웨어를 필요로 할 수 있다.
[0009] 따라서, 종래의 구현들의 전술된 단점들을 회피하는 혼합-폭 SIMD 명령들의 개선된 구현들에 대한 필요성이 존재한다.
[0010] 예시적 양상들은 제1 비트-폭의 데이터 엘리먼트들을 포함하는 소스 벡터 오퍼랜드 및 제2 비트-폭 ― 제2 비트-폭은 제1 비트-폭의 절반 또는 2배임 ― 의 데이터 엘리먼트들을 포함하는 목적지 벡터 오퍼랜드를 적어도 가지는 혼합-폭 SIMD(single instruction multiple data) 명령과 관련된 시스템들 및 방법들을 포함한다. 대응적으로, 소스 또는 목적지 벡터 오퍼랜드들 중 하나는 한 쌍의 레지스터들, 즉, 제1 레지스터 및 제2 레지스터로서 표현된다. 다른 벡터 오퍼랜드는 단일 레지스터로서 표현된다. 제1 레지스터의 데이터 엘리먼트들은 단일 레지스터로서 표현되는 다른 벡터 오퍼랜드의 짝수-넘버링된 데이터 엘리먼트들에 대응하고, 제2 레지스터의 데이터 엘리먼트들은 단일 레지스터로서 표현되는 다른 벡터 오퍼랜드의 데이터 엘리먼트들에 대응한다.
[0011] 예컨대, 예시적 양상은 혼합-폭 SIMD(single instruction multiple data) 연산을 수행하는 방법에 관한 것이며, 방법은, 제1 비트-폭의 제1 세트의 소스 데이터 엘리먼트들을 포함하는 적어도 제1 소스 벡터 오퍼랜드, 및 제2 비트-폭의 목적지 데이터 엘리먼트들을 포함하는 적어도 목적지 벡터 오퍼랜드를 포함하는 SIMD 명령을 프로세서가 수신하는 단계를 포함하고, 제2 비트-폭은 제1 비트-폭의 2배이다. 목적지 벡터 오퍼랜드는, 제1 서브세트의 목적지 데이터 엘리먼트들을 포함하는 제1 레지스터 및 제2 서브세트의 목적지 데이터 엘리먼트들을 포함하는 제2 레지스터를 포함하는 한 쌍의 레지스터들을 포함한다. 제1 세트의 소스 데이터 엘리먼트들의 순차적 순서에 기반하여, 방법은 프로세서에서 SIMD 명령을 실행하는 단계를 포함하고, 프로세서에서 SIMD 명령을 실행하는 단계는, 제1 세트의 짝수-넘버링된 소스 데이터 엘리먼트들로부터, 제1 레지스터의 제1 서브세트의 목적지 데이터 엘리먼트들을 생성하는 단계, 및 제1 세트의 홀수-넘버링된 소스 데이터 엘리먼트들로부터, 제2 레지스터의 제2 서브세트의 목적지 데이터 엘리먼트들을 생성하는 단계를 포함한다.
[0012] 다른 예시적 양상은 혼합-폭 SIMD(single instruction multiple data) 연산을 수행하는 방법에 관한 것이며, 방법은, 제1 비트-폭의 소스 데이터 엘리먼트들을 포함하는 적어도 소스 벡터 오퍼랜드, 및 제2 비트-폭의 목적지 데이터 엘리먼트들을 포함하는 적어도 목적지 벡터 오퍼랜드를 포함하는 SIMD 명령을 프로세서가 수신하는 단계를 포함하고, 제2 비트-폭은 제1 비트-폭의 절반이다. 소스 벡터 오퍼랜드는, 제1 서브세트의 소스 데이터 엘리먼트들을 포함하는 제1 레지스터 및 제2 서브세트의 소스 데이터 엘리먼트들을 포함하는 제2 레지스터를 포함하는 한 쌍의 레지스터들을 포함한다. 목적지 데이터 엘리먼트들의 순차적 순서에 기반하여, 방법은 프로세서에서 SIMD 명령을 실행하는 단계를 포함하고, 프로세서에서 SIMD 명령을 실행하는 단계는, 제1 레지스터의 대응하는 제1 서브세트의 소스 데이터 엘리먼트들로부터, 짝수-넘버링된 목적지 데이터 엘리먼트들을 생성하는 단계, 및 제2 레지스터의 대응하는 제2 서브세트의 소스 데이터 엘리먼트들로부터, 홀수-넘버링된 목적지 데이터 엘리먼트들을 생성하는 단계를 포함한다.
[0013] 또 다른 예시적 양상은, 프로세서에 의해 실행될 때, 프로세서로 하여금, 혼합-폭 SIMD(single instruction multiple data) 연산을 수행하게 하는, 프로세서에 의해 실행가능한 명령들을 포함하는 비-일시적 컴퓨터-판독가능한 저장 매체에 관한 것이다. 비-일시적 컴퓨터-판독가능한 저장 매체는, 제1 비트-폭의 제1 세트의 소스 데이터 엘리먼트들을 포함하는 적어도 제1 소스 벡터 오퍼랜드, 및 제2 비트-폭의 목적지 데이터 엘리먼트들을 포함하는 적어도 목적지 벡터 오퍼랜드를 포함하는 SIMD 명령을 포함하고, 제2 비트-폭은 제1 비트-폭의 2배이다. 목적지 벡터 오퍼랜드는, 제1 서브세트의 목적지 데이터 엘리먼트들을 포함하는 제1 레지스터 및 제2 서브세트의 목적지 데이터 엘리먼트들을 포함하는 제2 레지스터를 포함하는 한 쌍의 레지스터들을 포함한다. 제1 세트의 소스 데이터 엘리먼트들의 순차적 순서에 기반하여, 비-일시적 컴퓨터-판독가능한 저장 매체는, 제1 세트의 짝수-넘버링된 소스 데이터 엘리먼트들로부터, 제1 레지스터의 제1 서브세트의 목적지 데이터 엘리먼트들을 생성하기 위한 코드, 및 제1 세트의 홀수-넘버링된 소스 데이터 엘리먼트들로부터, 제2 레지스터의 제2 서브세트의 목적지 데이터 엘리먼트들을 생성하기 위한 코드를 포함한다.
[0014] 또 다른 예시적 양상은, 프로세서에 의해 실행될 때, 프로세서로 하여금, 혼합-폭 SIMD(single instruction multiple data) 연산을 수행하게 하는, 프로세서에 의해 실행가능한 명령들을 포함하는 비-일시적 컴퓨터-판독가능한 저장 매체에 관한 것이며, 비-일시적 컴퓨터-판독가능한 저장 매체는 SIMD 명령을 포함한다. SIMD 명령은, 제1 비트-폭의 소스 데이터 엘리먼트들을 포함하는 적어도 소스 벡터 오퍼랜드, 및 제2 비트-폭의 목적지 데이터 엘리먼트들을 포함하는 적어도 목적지 벡터 오퍼랜드를 포함하고, 제2 비트-폭은 제1 비트-폭의 절반이다. 소스 벡터 오퍼랜드는, 제1 서브세트의 소스 데이터 엘리먼트들을 포함하는 제1 레지스터 및 제2 서브세트의 소스 데이터 엘리먼트들을 포함하는 제2 레지스터를 포함하는 한 쌍의 레지스터들을 포함한다. 목적지 데이터 엘리먼트들의 순차적 순서에 기반하여, 비-일시적 컴퓨터-판독가능한 저장 매체는, 제1 레지스터의 대응하는 제1 서브세트의 소스 데이터 엘리먼트들로부터, 짝수-넘버링된 목적지 데이터 엘리먼트들을 생성하기 위한 코드, 및 제2 레지스터의 대응하는 제2 서브세트의 소스 데이터 엘리먼트들로부터, 홀수-넘버링된 목적지 데이터 엘리먼트들을 생성하기 위한 코드를 포함한다.
[0015] 첨부한 도면들은 본 발명의 양상들의 설명을 돕기 위해 제시되며, 양상들의 제한이 아니라 단지 양상들의 예시를 위해 제공된다.
[0016] 도 1a-c는 혼합-폭 SIMD 명령들의 종래의 구현들을 예시한다.
[0017] 도 2a-c는 본 개시내용의 양상들에 따른 혼합-폭 SIMD 명령들의 예시적 구현들을 예시한다.
[0018] 도 3a-b는 혼합-폭 SIMD(single instruction multiple data) 연산들을 수행하는 방법들을 예시한다.
[0019] 도 4는 본 개시내용의 양상이 유리하게 사용될 수 있는 예시적 무선 디바이스(400)를 예시한다.
[0016] 도 1a-c는 혼합-폭 SIMD 명령들의 종래의 구현들을 예시한다.
[0017] 도 2a-c는 본 개시내용의 양상들에 따른 혼합-폭 SIMD 명령들의 예시적 구현들을 예시한다.
[0018] 도 3a-b는 혼합-폭 SIMD(single instruction multiple data) 연산들을 수행하는 방법들을 예시한다.
[0019] 도 4는 본 개시내용의 양상이 유리하게 사용될 수 있는 예시적 무선 디바이스(400)를 예시한다.
[0020] 본 발명의 양상들은 본 발명의 특정 양상들과 관련된 다음의 설명 및 관련 도면들에서 개시된다. 대안적 양상들은 본 발명의 범위로부터 벗어나지 않으면서 고안될 수 있다. 추가적으로, 본 발명의 잘-알려진 엘리먼트들은 본 발명의 관련된 세부사항들을 모호하게 하지 않도록 상세하게 설명되지 않을 것이거나 또는 생략될 것이다.
[0021] "예시적"이라는 용어는, "예, 사례 또는 예시로서 제공되는"을 의미하는 것으로 본원에서 사용된다. "예시적"으로서 본원에서 설명되는 임의의 양상은 반드시 다른 양상들에 비해 바람직하거나 또는 유리한 것으로서 해석되는 것은 아니다. 마찬가지로, "본 발명의 양상들"이라는 용어는 본 발명의 모든 양상들이 논의되는 특징, 이점, 또는 동작 모드를 포함할 것을 요구하지 않는다.
[0022] 본원에서 사용되는 용어는 특정 양상들만을 설명하기 위한 것이며, 본 발명의 양상들을 제한하도록 의도되는 것은 아니다. 본원에서 사용되는 바와 같이, 단수 형태들의 표현은 문맥상 달리 명백하게 표시되지 않는 한, 복수 형태들 역시 포함하도록 의도된다. "포함하다(comprises)", "포함하는(comprising)", "포함하다(includes)" 및/또는 "포함하는(including)"이라는 용어들은, 본원에서 사용될 때, 서술된 특징들, 정수들, 단계들, 동작들, 엘리먼트들 및/또는 컴포넌트들의 존재를 특정하지만, 하나 또는 그 초과의 다른 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 컴포넌트들 및/또는 이들의 그룹들의 존재 또는 추가를 배제하지 않는다는 것이 추가로 이해될 것이다.
[0023] 추가로, 많은 양상들이, 예컨대, 컴퓨팅 디바이스의 엘리먼트들에 의해 수행될 액션(action)들의 시퀀스들에 관해 설명된다. 본원에서 설명되는 다양한 액션들이 특정 회로들(예컨대, ASIC(application specific integrated circuit)들)에 의해, 하나 또는 그 초과의 프로세서들에 의해 실행되는 프로그램 명령들에 의해 또는 이 둘의 조합에 의해 수행될 수 있다는 것이 인식될 것이다. 추가적으로, 본원에서 설명되는 이러한 액션들의 시퀀스는, 실행 시에, 연관된 프로세서로 하여금 본원에서 설명되는 기능을 수행하게 할 컴퓨터 명령들의 대응하는 세트가 저장된 임의의 형태의 컴퓨터 판독가능한 저장 매체 내에서 전적으로 구현되는 것으로 고려될 수 있다. 따라서, 본 발명의 다양한 양상들은 다수의 상이한 형태들로 구현될 수 있으며, 이들 모두는 청구되는 청구 대상의 범위 내에 있는 것으로 고려된다. 또한, 본원에서 설명되는 양상들 각각에 대해, 임의의 그러한 양상들의 대응하는 형태는 예컨대, 설명되는 액션을 수행하도록 "구성되는 로직"으로서 본원에서 설명될 수 있다.
[0024] 본 개시내용의 예시적 양상들은, SIMD 레인들에 걸친 데이터 이동을 회피하고 코드 사이즈를 감소시키는 혼합-폭 SIMD 연산들의 구현에 관한 것이다. 예컨대, SIMD 연산을 2개 또는 그 초과의 컴포넌트 SIMD 명령들로 분해하기(예컨대, 도 1a-c의 SIMD 명령(100)의 종래의 실행)보다는, 예시적 양상들은, 한 쌍의 레지스터들에 관해 표현될 수 있는 한 쌍의 오퍼랜드들로서 하나 또는 그 초과의 벡터 오퍼랜드들을 특정하는 단일 SIMD 명령을 포함한다. 적어도 하나의 벡터 오퍼랜드(소스 또는 목적지 오퍼랜드 중 어느 하나)를 한 쌍의 레지스터들 또는 레지스터 쌍으로서 특정함으로써, 단일의 예시적 SIMD 명령이 2개 또는 그 초과의 컴포넌트의 종래 SIMD 명령들 대신에 사용될 수 있다. 그에 따라서, 혼합-폭 SIMD 연산들의 경우, 코드 사이즈가 감소된다.
[0025] 본 개시내용에서, 명령이 하나 또는 그 초과의 레지스터들에 대해 수행될 연산을 특정하는 관례적(customary) 명령 포맷들을 따르기 위해, 레지스터들에 관해 오퍼랜드들을 표현하는 것에 대한 참조가 이루어진다는 점이 주목된다. 따라서, SIMD 명령은 레지스터들에 관해 표현되는 하나 또는 그 초과의 오퍼랜드들에 대해 공통 연산이 특정되는 포맷일 수 있다. 따라서, 본 개시내용에 따른 예시적 혼합-폭 SIMD 명령은, 단일 레지스터에 관해 표현되는 적어도 하나의 벡터 오퍼랜드 및 한 쌍의 레지스터들에 관해 표현되는 적어도 하나의 다른 벡터 오퍼랜드를 포함한다. 레지스터들에 대한 이러한 참조들은 예시적 SIMD 명령들을 포함하는 프로그램에 의해 사용되는 논리적 또는 아키텍처 레지스터들과 관련될 수 있다. 그들은 또한, 제한 없이, 물리적 레지스터 파일의 물리적 레지스터들과 관련될 수 있다. 일반적으로, 레지스터들에 대한 참조들은 소정의 사이즈의 저장 엘리먼트들을 전달하도록 의도된다.
[0026] 따라서, 레지스터 파일에 커플링된 프로세서에서 혼합-폭 SIMD(single instruction multiple data) 연산을 실행하는 예시적 방법은, 제1 비트-폭의 데이터 엘리먼트들을 포함하는 적어도 제1 벡터 오퍼랜드, 및 제2 비트-폭의 데이터 엘리먼트들을 포함하는 적어도 제2 벡터 오퍼랜드를 가지는 SIMD 명령을 특정하는 단계를 포함할 수 있다. 제1 벡터 오퍼랜드는 소스 벡터 오퍼랜드일 수 있고, 제2 벡터 오퍼랜드는 목적지 벡터 오퍼랜드일 수 있다. 대응적으로, 소스 벡터 오퍼랜드의 데이터 엘리먼트들은 소스 데이터 엘리먼트들로 지칭될 수 있고, 목적지 벡터 오퍼랜드의 데이터 엘리먼트들은 목적지 데이터 엘리먼트들로 지칭될 수 있다.
[0027] 일-대-일 대응성은 예시적 혼합-폭 SIMD 명령에서 소스 데이터 엘리먼트들과 목적지 데이터 엘리먼트들 사이에 존재한다. 일반적으로, 혼합-폭 SIMD 명령에 특정되는 연산이 소스 데이터 엘리먼트에 대해 수행될 때, 특정 대응하는 목적지 데이터 엘리먼트가 생성된다. 예컨대, 목적지 벡터 오퍼랜드를 형성하기 위해 소스 벡터 오퍼랜드를 좌측-시프트하기 위한 혼합-폭 SIMD 연산을 고려해보기로 한다. 이 예에서, 소스 데이터 엘리먼트의 좌측-시프트가 수행될 때, 각각의 소스 데이터 엘리먼트는 특정 목적지 데이터 엘리먼트를 생성한다.
[0028] 본 개시내용의 일 예시적 양상에서, 목적지 데이터 엘리먼트들의 제2 비트-폭은 소스 데이터 엘리먼트들의 제1 비트-폭보다 작고, 구체적으로는, 그 크기의 절반일 수 있다. 이 양상에서, 목적지 벡터 오퍼랜드는 한 쌍의 레지스터들로서 표현될 수 있고, 소스 벡터 오퍼랜드는 단일 레지스터로서 표현될 수 있다.
[0029] 본 개시내용의 다른 예시적 양상에서, 목적지 데이터 엘리먼트들의 제2 비트-폭은 소스 데이터 엘리먼트들의 제1 비트-폭보다 크고, 구체적으로는, 그 크기의 2배일 수 있다. 이 양상에서, 소스 벡터 오퍼랜드는 단일 레지스터로서 표현될 수 있고, 목적지 벡터 오퍼랜드는 한 쌍의 레지스터들로서 표현될 수 있다.
[0030] 소스 및 목적지 벡터 오퍼랜드들의 소스 및 벡터 데이터 엘리먼트들 사이의 특정 맵핑을 각각 예시하기 위해, 데이터 엘리먼트들이 더 작은 비트 폭을 가지는 벡터 오퍼랜드의 데이터 엘리먼트들에 순차적 순서가 할당된다. 예컨대, 단일 레지스터로서 표현되는 벡터 오퍼랜드의 데이터 엘리먼트들에 순차적 순서가 할당된다. 순차적 순서에 기반하여, 짝수-넘버링된 데이터 엘리먼트들(예컨대, 번호들 0, 2, 4, 6 등에 대응함) 및 홀수-넘버링된 데이터 엘리먼트들(예컨대, 번호들 1, 3, 5, 7 등에 대응함)이 단일 레지스터로서 표현되는 벡터 오퍼랜드에 대해 식별된다. 다른 벡터 오퍼랜드의 한 쌍의 레지스터들은, 제1 서브세트 및 제2 서브세트의 데이터 엘리먼트들을 각각 포함하는, 제1 레지스터 및 제2 레지스터로 지칭된다. 따라서, 그런 다음, 단일 레지스터로서 표현되는 벡터 오퍼랜드의 짝수-넘버링된 데이터 엘리먼트들에, 제1 레지스터 또는 제1 서브세트의 데이터 엘리먼트들과의 대응성이 할당되고, 홀수-넘버링된 데이터 엘리먼트들에, 제2 레지스터 또는 제2 서브세트의 데이터 엘리먼트들과의 대응성이 할당된다. 이러한 방식으로, 대응하는 목적지 데이터 엘리먼트들을 생성하기 위해, 특정된 SIMD 연산의 실행 동안 소스 데이터 엘리먼트에 대해 SIMD 레인들에 걸친 큰 데이터 이동들이 회피된다.
[0031] 예시적 양상들은 또한, 2개 초과의 벡터 오퍼랜드들을 특정하는, 이를테면, 제3 비트-폭의 제3 오퍼랜드 및 그 이후의 것들을 포함하는 SIMD 연산들에 관한 것일 수 있다. 한 쌍의 레지스터로서 표현되는 목적지 벡터 오퍼랜드를 생성하기 위해 혼합-폭 SIMD 명령에 대해 단일 레지스터로서 각각 표현되는 2개의 소스 벡터 오퍼랜드들이 특정되는 일 예가 개시된다. 본 개시내용의 범위 내에서 다수의 다른 그러한 명령 포맷들이 가능하다. 간략함을 위해, 혼합-폭 SIMD 연산들을 구현하기 위한 예시적 양상들이 일부 예시적 SIMD 명령들 및 오퍼랜드들의 비트-폭들과 관련하여 논의될 것이지만, 이들은 단지 설명을 위한 것임을 유념해야 한다. 이로써, 본원에서 논의되는 특징들은 혼합-폭 벡터 연산들에 대한 임의의 수의 오퍼랜드들 및 데이터 엘리먼트들의 비트-폭들로 확장될 수 있다.
[0032] 도 2a-c에서, SIMD 명령들(200, 220 및 240)과 관련된 예시적 양상들이 도시된다. 이러한 SIMD 명령들(200, 220 및 240) 각각은 SIMD 명령들을 실행하도록 구성된 프로세서(예컨대, 도 4-5에 도시되는 프로세서(402))에 의해 실행될 수 있다. 더 구체적으로, 이러한 SIMD 명령들(200, 220 및 240) 각각은 하나 또는 그 초과의 소스 벡터 오퍼랜드들 및 하나 또는 그 초과의 목적지 벡터 오퍼랜드들을 특정할 수 있는데, 여기서, 소스 및 목적지 벡터 오퍼랜드들이 레지스터들(예컨대, 64-비트 레지스터들)에 관해 표현될 수 있다. SIMD 명령들(200, 220 및 240)의 소스 및 목적지 벡터 오퍼랜드들은 대응하는 소스 및 목적지 데이터 엘리먼트들을 포함하는데, 이들 각각은 하나 또는 그 초과의 SIMD 레인들에 속한다. SIMD 명령의 실행에서의 SIMD 레인의 수는 SIMD 명령의 실행에서 수행되는 병렬 연산들의 수에 대응한다. 따라서, 예시적 SIMD 명령들(200, 220 및 240)을 구현하도록 구성된 프로세서 또는 실행 로직은, SIMD 명령들(200, 220 및 240)에 의해 특정된 병렬 연산들을 구현하는데 요구되는 하드웨어(예컨대, 다수의 좌측/우측 시프터들, 가산기들, 곱셈기들 등을 포함하는 ALU(arithmetic and logic unit))를 포함할 수 있다.
[0033] 따라서, 도 2a를 참조하면, SIMD 명령(200)의 실행에 대한 제1 예시적 양상이 예시된다. 일 예에서, 프로세서는 64-비트 ISA(instruction set architecture)를 지원할 수 있는 것으로 가정된다. SIMD 명령(200)은 단일 64-비트 레지스터에 관해 표현되는 소스 벡터 오퍼랜드들의 소스 데이터 엘리먼트들에 대해 수행될 동일한 연산 또는 공통 명령을 특정할 수 있다.
[0034] SIMD 명령(200)에서 특정된 동일한 연산 또는 공통 명령은, 예컨대, 8개의 8-비트 소스 데이터 엘리먼트들에 대한 제곱 함수, 좌측-시프트 함수, 증분 함수, 상수 값에 의한 가산 등(이들은 로직 엘리먼트들, 이를테면, 8개의 8-비트 좌측-시프터들, 8개의 8-비트 가산기들 등으로 구현될 수 있음)일 수 있는데, 이는 저장 용량 중 최대 16-비트를 소비할 수 있는 대응하는 8개의 결과적 목적지 데이터 엘리먼트들을 생성한다. 도시되는 바와 같이, SIMD 명령(200)은 8개의 8-비트 데이터 엘리먼트들을 포함하는 소스 벡터 오퍼랜드(202)를 특정할 수 있다. 번호 순서는 소스 벡터 오퍼랜드(202)의 이러한 8개의 8-비트 데이터 엘리먼트들에 할당될 수 있는데, 이는 참조 번호들 0-7로 도시된다. SIMD 명령(200)의 결과는 8개의 16-비트 목적지 데이터 엘리먼트들 또는 128-비트 모두를 사용하여 표현될 수 있는데, 이는 단일 64-비트 레지스터에 저장될 수 없다. (예컨대, 도 1a-c에 도시되는 SIMD 명령(100)의 종래의 구현들에서와 같이) 이 문제를 핸들링하기 위해 SIMD 명령(200)을 2개 또는 그 초과의 명령들로 분해하기보다는, 목적지 벡터 오퍼랜드는 한 쌍의 컴포넌트 벡터 오퍼랜드들로서 특정된다. 한 쌍의 컴포넌트 목적지 벡터 오퍼랜드들은 레지스터들의 대응하는 쌍(204x, 204y)으로서 표현될 수 있다. 한 쌍의 레지스터들은 레지스터 파일의 연속적인 물리적 위치들에 저장되거나, 또는 심지어 연속적인 논리적 레지스터 번호들을 가질 필요가 없다는 점이 주목된다. 이로써, SIMD 명령(200)은 한 쌍의 컴포넌트 벡터 오퍼랜드들 또는 레지스터들(204x, 204y)(예컨대, 한 쌍의 64-비트 레지스터들)에 관해 표현되는 목적지 벡터 오퍼랜드, 및 단일 레지스터(202)로서 표현되는 소스 벡터 오퍼랜드(202)를 특정한다.
[0035] 추가로, 이 쌍의 제1 레지스터(204x)로서 표현되는 제1 컴포넌트 목적지 벡터 오퍼랜드는 소스 벡터 오퍼랜드(202)의 짝수-넘버링된 소스 데이터 엘리먼트들 0, 2, 4 및 6에 대해 수행되는 SIMD 명령(200)의 결과들의 제1 서브세트를 포함한다. 이러한 결과들은 짝수-넘버링된 소스 데이터 엘리먼트들 0, 2, 4 및 6에 대해 1-대-1 대응성을 가지는 목적지 데이터 엘리먼트들 A, C, E 및 G로 예시되는데, 이는 SIMD 레인들에 걸친 큰 이동들이 목적지 데이터 엘리먼트들 A, C, E 및 G의 이러한 예시적 어레인지먼트(arrangement)에서의 결과들에 대해 회피된다는 것을 의미한다. 유사하게, 이 쌍의 제2 레지스터(204y)로서 표현되는 제2 컴포넌트 목적지 벡터 오퍼랜드는 소스 벡터 오퍼랜드(202)의 홀수-넘버링된 소스 데이터 엘리먼트들 1, 3, 5 및 7에 대해 수행되는 SIMD 명령(200)의 결과들의 제2 서브세트를 포함한다. 이러한 결과들은 홀수-넘버링된 소스 데이터 엘리먼트들 1, 3, 5 및 7에 대해 1-대-1 대응성을 가지는 목적지 데이터 엘리먼트들 B, D, F 및 H로 예시되는데, 이는 다시 한번, SIMD 레인들에 걸친 큰 이동들이 목적지 데이터 엘리먼트들 B, D, F 및 H의 이러한 예시적 어레인지먼트에서의 결과들에 대해 회피된다는 것을 의미한다. 따라서, 이러한 경우, 소스 벡터 오퍼랜드(202)의 짝수-넘버링된 소스 데이터 엘리먼트들 0, 2, 4 및 6은 제1 레지스터(204x)의 목적지 데이터 엘리먼트들 A, C, E 및 G에 대응하거나 또는 이들을 생성하고; 그리고 소스 벡터 오퍼랜드(202)의 홀수-넘버링된 소스 데이터 엘리먼트들 1, 3, 5 및 7은 제2 레지스터(204y)의 목적지 데이터 엘리먼트들 B, D, F 및 H에 대응하거나 또는 이들을 생성한다.
[0036] 각각의 레인이 개개의 소스 데이터 엘리먼트 0-7을 포함하는 8개의 8-비트 SIMD 레인들(예컨대, SIMD 레인들 0-7로 지칭됨)을 고려하면, 대응하는 목적지 데이터 엘리먼트 A-H를 생성하기 위해 수반되는 이동량이 동일한 SIMD 레인 또는 인접한 SIMD 레인 내에 포함된다는 것이 이해된다. 다시 말해서, 제1 세트의 소스 데이터 엘리먼트들(예컨대, 소스 데이터 엘리먼트 0-7)은 개개의 SIMD 레인들에 있고, 소스 데이터 엘리먼트들 중 각각의 소스 데이터 엘리먼트로부터, 목적지 데이터 엘리먼트(예컨대, 대응하는 목적지 데이터 엘리먼트 A-H)가 개개의 SIMD 레인 또는 개개의 SIMD 레인에 인접한 SIMD 레인에서 생성된다. 예컨대, SIMD 레인들 0, 2, 4 및 6에서의 짝수-넘버링된 소스 데이터 엘리먼트들 0, 2, 4 및 6은 각각, 목적지 데이터 엘리먼트들 A, C, E 및 G를 생성하는데, 이들은 SIMD 레인들 0-1, 2-3, 4-5 및 6-7 내에 각각 포함된다. 유사하게, SIMD 레인들 0, 2, 4 및 6에서의 홀수-넘버링된 소스 데이터 엘리먼트들 1, 3, 5 및 7은 각각, 목적지 데이터 엘리먼트들 B, D, F 및 H를 생성하는데, 이들은 또한, SIMD 레인들 0-1, 2-3, 4-5 및 6-7 내에 각각 포함된다.
[0037] 따라서, 도 2a의 제1 예시적 양상에서, (2개 또는 그 초과의 컴포넌트 SIMD 명령들보다는, 단지 하나의 SIMD 명령만이 사용되기 때문에) 혼합-폭 SIMD 명령(200)은 명령 공간 또는 코드 공간의 효율적 사용을 수반하는데, 혼합-폭 SIMD 명령(200)의 구현 또는 실행은 SIMD 레인들에 걸친 큰 데이터 이동들을 회피한다.
[0038] 이제, 도 2b를 참조하면, 다른 예시적 양상이 혼합-폭 SIMD 명령(220)과 관련하여 예시된다. SIMD 명령(220)은 2개의 소스 벡터 오퍼랜드들: 단일 레지스터로서 표현되는 제1 소스 벡터 오퍼랜드(222) 및 단일 레지스터로서 표현되는 제2 소스 벡터 오퍼랜드(223)를 수반하는데, 이들은 각각, 제1 세트 및 제2 세트의 4개의 16-비트 소스 데이터 엘리먼트들을 가진다. SIMD 명령(220)은 2개의 소스 벡터 오퍼랜드들에 대한 동일한 또는 공통 연산, 이를테면, (예컨대, 반올림에 의한) 곱셈을 특정할 수 있고, (레지스터(222)의) 제1 세트의 4개의 16-비트 소스 데이터 엘리먼트들은 4개의 32-비트 결과들을 생성하기 위해 (레지스터(223)의) 제2 세트의 대응하는 4개의 16-비트 소스 데이터 엘리먼트들과 곱해진다(여기서, SIMD 명령(220)의 구현은 로직 엘리먼트들, 이를테면, 4개의 16x16 곱셈기들을 수반할 수 있음). 이러한 4개의 32-비트 결과들을 저장가능하기 위해 128-비트가 필요하기 때문에, 목적지 벡터 오퍼랜드가 한 쌍의 컴포넌트 벡터 오퍼랜드들: 제1 컴포넌트 목적지 벡터 오퍼랜드 및 제2 컴포넌트 목적지 벡터 오퍼랜드에 관해 특정된다(이들은 대응적으로, 제1 64-비트 레지스터(224x) 및 제2 64-비트 레지스터(224y)로서 표현될 수 있음). SIMD 명령(220)은 또한, 제1 세트의 소스 데이터 엘리먼트들과 제2 세트의 대응하는 소스 데이터 엘리먼트들의 가산에 적용가능할 수 있다는 점이 주목되며, 여기서, 대응하는 결과들은 각각의 목적지 데이터 엘리먼트에 대해 (32-비트 모두는 아니더라도) 16-비트 초과를 소비할 수 있다.
[0039] 도 2b에서, 제1 및 제2 세트들의 소스 데이터 엘리먼트들에, 각각, 0, 1, 2, 3 및 0', 1', 2', 3'으로서 대표적으로 도시되는 순차적 순서가 할당된다. 제1 레지스터(224x)의 제1 컴포넌트 목적지 벡터 오퍼랜드는 소스 오퍼랜드들(222 및 223)의 짝수-넘버링된 소스 데이터 엘리먼트들에 대응하는, (32-비트 목적지 데이터 엘리먼트들 A 및 C로서 도시되는) SIMD 명령(220)의 결과들의 제1 서브세트를 홀딩하고; 그리고 유사하게, 제2 레지스터(224y)의 제2 컴포넌트 목적지 벡터 오퍼랜드는 소스 오퍼랜드들(222 및 223)의 홀수-넘버링된 소스 데이터 엘리먼트들에 대응하는, (32-비트 데이터 엘리먼트들 B 및 D로 도시되는) SIMD 명령(220)의 결과들의 제2 서브세트를 홀딩한다. 이러한 경우, 제1 소스 벡터 오퍼랜드(222)와 제2 소스 벡터 오퍼랜드(223) 각각의 짝수-넘버링된 소스 데이터 엘리먼트들(0, 0') 및 (2, 2')은 제1 목적지 벡터 오퍼랜드(224x)의 데이터 엘리먼트들 A 및 C를 생성하고; 그리고 제1 소스 벡터 오퍼랜드(222)와 제2 소스 벡터 오퍼랜드(223) 각각의 홀수-넘버링된 데이터 엘리먼트들(1, 1') 및 (3, 3')은 제2 목적지 벡터 오퍼랜드(224y)의 데이터 엘리먼트들 B 및 D를 생성한다는 것이 이해된다.
[0040] 다시 한번, 도 2b의 제2 예시적 양상에서, 혼합-폭 SIMD 명령(220)은 2개 또는 그 초과의 컴포넌트 SIMD 명령들보다는 단일 혼합-폭 SIMD 명령을 활용함으로써 코드 공간 효율성을 달성한다는 것이 이해된다. 더욱이, 이러한 양상에서 SIMD 레인들에 걸친 이동들이 역시 최소화된다는 것이 또한 이해된다. 일반적으로, 제1 세트의 소스 데이터 엘리먼트들 및 제2 세트의 소스 데이터 엘리먼트들은, 개개의 SIMD 레인들에 있고, 제1 세트의 소스 데이터 엘리먼트들 중 각각의 소스 데이터 엘리먼트 및 제2 세트의 소스 데이터 엘리먼트들 중 대응하는 소스 데이터 엘리먼트로부터, 개개의 SIMD 레인 또는 개개의 SIMD 레인에 인접한 SIMD 레인에서 목적지 데이터 엘리먼트가 생성된다. 예컨대, 제1 세트의 소스 데이터 엘리먼트들 0-3(또는 제2 세트의 소스 데이터 엘리먼트들 0'-3') 각각을 포함하는 4개의 16-비트 SIMD 레인들 0-3을 고려하면, 대응하는 목적지 데이터 엘리먼트들 A-D를 생성하기 위한 제1 및 제2의 소스 데이터 엘리먼트에 대한 데이터 이동은 동일한 SIMD 레인 및 최대 인접한 SIMD 레인 내에 포함된다(예컨대, SIMD 레인들 0 및 2 각각에서 짝수-넘버링된 소스 데이터 엘리먼트들(0, 0') 및 (2, 2')는 SIMD 레인들 0-1 및 2-4에서 목적지 데이터 엘리먼트들 A 및 C를 생성하고, 유사하게, SIMD 레인들 1 및 3 각각에서 홀수-넘버링된 소스 데이터 엘리먼트들(1, 1') 및 (3, 3')은 SIMD 레인들 0-1 및 2-4에서 목적지 데이터 엘리먼트들 B 및 D를 생성함).
[0041] 도 2c는 혼합-폭 SIMD 명령(240)과 관련된 제3 예시적 양상을 나타낸다. 혼합-폭 SIMD 명령들(200 및 220)과는 달리, 혼합-폭 SIMD 명령(240)의 소스 벡터 오퍼랜드는 한 쌍의 컴포넌트 벡터 오퍼랜드들로서 특정되거나 또는 레지스터 쌍으로서 표현된다. 혼합-폭 SIMD 명령(220)이 2개의 별개의 소스 벡터 오퍼랜드들을 포함하기 때문에, 혼합-폭 SIMD 명령(240)은 혼합-폭 SIMD 명령(220)과 상이하며, 하나의 소스 벡터 오퍼랜드의 데이터 엘리먼트들이 다른 소스 벡터 오퍼랜드의 데이터 엘리먼트들과 상호작용하도록(예컨대, 곱해지도록) 특정된다는 점이 주목된다. 다른 한편으로는, 혼합-폭 SIMD 명령(240)에서, 한 쌍의 컴포넌트 소스 벡터 오퍼랜드들이 특정되는데, 그 이유는, 그렇게 하지 않으면, 2개의 별개의 명령을 소비하게 될 것이기 때문이다. 예컨대, SIMD 명령(240)은 8개의 8-비트 목적지 데이터 엘리먼트들의 결과를 획득하기 위해 8개의 16-비트 소스 데이터 엘리먼트들에 대해 수행될 16-비트들로부터 8-비트들로의 우측-시프트 함수의 공통 연산을 수반할 수 있다(여기서, SIMD 명령(240)의 구현은 로직 엘리먼트들, 이를테면, 8개의 8-비트 우측-시프터들을 수반할 수 있음). 그러나, 8개의 16-비트 소스 데이터 엘리먼트들이 128-비트를 소비하기 때문에, 종래의 구현들은 2개의 컴포넌트 SIMD 명령들을 사용하여 수행되도록 이 연산을 분할할 것이다. 다른 한편으로는, 도 2c의 예시적 양상에서, 제1 레지스터(242x)의 제1 컴포넌트 소스 벡터 오퍼랜드 및 제2 레지스터(242y)의 제2 컴포넌트 소스 벡터 오퍼랜드를 포함하는 소스 벡터 오퍼랜드 쌍이 SIMD 명령(240)에 의해 특정된다. 따라서, 코드 공간이 효율적으로 사용된다.
[0042] 목적지 벡터 오퍼랜드는 이 경우 단일 64-비트 레지스터(244)로서 표현되며, SIMD 명령(240)의 결과들인 8개의 8-비트 목적지 데이터 엘리먼트들을 포함한다. 따라서, 순차적 순서가, 참조 번호들 0-7로 도시되는, 레지스터(244)의 목적지 벡터 오퍼랜드의 목적지 데이터 엘리먼트들에 할당된다. 제1 서브세트의 소스 데이터 엘리먼트들 A, C, E 및 G를 포함하는 제1 레지스터(242x)가 레지스터(244)의 목적지 벡터 오퍼랜드의 짝수-넘버링된 목적지 데이터 엘리먼트들 0, 2, 4 및 6 각각에 대응하는 결과들을 생성하고; 그리고 제2 서브세트의 소스 데이터 엘리먼트들 B, D, F 및 H를 포함하는 제2 레지스터(242y)는, 레지스터(244)의 목적지 벡터 오퍼랜드의 홀수-넘버링된 목적지 데이터 엘리먼트들 1, 3, 5 및 7 각각에 대응하는 결과들을 생성하도록, 한 쌍의 컴포넌트 소스 벡터 오퍼랜드들(한 쌍의 레지스터들(242x, 242y)로서 표현됨)의 소스 데이터 엘리먼트들이 배열될 것이다.
[0043] 따라서, 심지어 소스 벡터 오퍼랜드들이 목적지 벡터 오퍼랜드들보다 와이드한 경우들에서도, 한 쌍의 컴포넌트 소스 벡터 오퍼랜드들을 특정하거나 또는 한 쌍의 레지스터들로서 소스 벡터 오퍼랜드를 표현함으로써, 코드 공간이 효율적으로 활용되고, SIMD 레인들에 걸친 데이터 이동이 최소화될 수 있다. SIMD 명령(240)의 실행에서의 SIMD 레인들에 걸친 이동이 또한 최소화된다. 일반적으로, 목적지 데이터 엘리먼트들은 개개의 SIMD 레인들에 있고, 개개의 SIMD 레인 또는 개개의 SIMD 레인에 인접한 SIMD 레인에서 소스 데이터 엘리먼트로부터, 목적지 데이터 엘리먼트들 중 각각의 목적지 데이터 엘리먼트가 생성된다는 것이 이해된다. 예컨대, 8개의 목적지 데이터 엘리먼트들 0-7에 대응하는 8개의 8-비트 SIMD 레인들을 고려하면, 소스 데이터 엘리먼트들 A, C, E 및 G가 SIMD 레인들 0, 2, 4 및 6에서 짝수-넘버링된 목적지 데이터 엘리먼트들에 대응하는 결과들을 생성하기 위해 SIMD 레인들 0-1, 2-3, 4-5, 및 6-7 각각으로부터 이동할 것이고; 그리고 소스 데이터 엘리먼트들 B, D, F 및 H가, SIMD 레인들 1, 3, 5 및 7에서 짝수-넘버링된 목적지 데이터 엘리먼트들에 대응하는 결과들을 생성하기 위해 SIMD 레인들 0-1, 2-3, 4-5, 및 6-7 각각으로부터 이동할 것이 이해된다. 어느 경우든, 이동은 2개의 SIMD 레인들 내에 포함된다.
[0044] 따라서, 양상들은 본원에서 개시되는 프로세스들, 함수들 및/또는 알고리즘들을 수행하기 위한 다양한 방법들을 포함한다는 것이 인식될 것이다. 예컨대, 도 3a에서 예시되는 바와 같이, 양상은, 예컨대, 도 2a-b에 따라, 혼합-폭 SIMD(single instruction multiple data) 연산을 수행하는 방법(300)을 포함할 수 있다.
[0045] 블록(302)에서, 방법(300)은 프로세서(예컨대, 아래에서 설명될 도 4의 프로세서(402))가 그리고 예컨대, 도 2a를 참조하여, SIMD 명령(예컨대, SIMD 명령(200))을 수신하는 단계를 포함하고, SIMD 명령(예컨대, SIMD 명령(200))은, 제1 비트-폭(예컨대, 8-비트)의 제1 세트의 소스 데이터 엘리먼트들(예컨대, 소스 데이터 엘리먼트들 0-7)을 포함하는 적어도 (예컨대, 레지스터(202)의) 제1 소스 벡터 오퍼랜드; 및 제2 비트-폭(예컨대, 16-비트)의 목적지 데이터 엘리먼트들(예컨대, 목적지 데이터 엘리먼트들 A-H)을 포함하는 적어도 (예컨대, 레지스터 쌍(204x, 204y)의) 목적지 벡터 오퍼랜드를 포함하고, 제2 비트-폭은 제1 비트-폭의 2배이고, 목적지 벡터 오퍼랜드는, 제1 서브세트의 목적지 데이터 엘리먼트들(예컨대, 목적지 데이터 엘리먼트들 A, C, E, G)을 포함하는 제1 레지스터(예컨대, 204x) 및 제2 서브세트의 목적지 데이터 엘리먼트들(예컨대, 목적지 데이터 엘리먼트들 B, D, F, H)을 포함하는 제2 레지스터를 포함하는 한 쌍의 레지스터들을 포함한다.
[0046] (블록들(304 및 306)을 포함하는 것으로 도시되는) 블록(303)에서, 방법(300)은, 프로세서에서 혼합-폭 SIMD 명령을 실행하는 단계를 더 포함한다. 구체적으로, 블록(304)에서 소스 데이터 엘리먼트들에 할당된 순차적 순서(예컨대, 0-7)를 고려하면, 블록(306)은 프로세서에서 SIMD 명령을 실행하는 단계를 포함한다. 더 상세하게, 블록(306)은 병렬로 수행될 수 있는 컴포넌트 블록들(306a 및 306b)로 이루어진다.
[0047] 블록(306a)은, 제1 세트의 짝수-넘버링된 소스 데이터 엘리먼트들(예컨대, 소스 데이터 엘리먼트들 0, 2, 4, 6)로부터, 제1 레지스터(예컨대, 제1 레지스터(204x))의 제1 서브세트의 목적지 데이터 엘리먼트들(예컨대, 목적지 데이터 엘리먼트들 A, C, E, G)을 생성하는 단계를 포함한다.
[0048] 블록(306b)은, 제1 세트의 홀수-넘버링된 소스 데이터 엘리먼트들(예컨대, 소스 데이터 엘리먼트들 1, 3, 5, 7)로부터, 제2 레지스터(예컨대, 제2 레지스터(204y))의 제2 서브세트의 목적지 데이터 엘리먼트들(예컨대, 목적지 데이터 엘리먼트들 B, D, F, H)을 생성하는 단계를 포함한다.
[0049] 일반적으로, 방법(300)의 SIMD 명령은 제1 세트의 소스 데이터 엘리먼트들에 대한 제곱 함수, 좌측-시프트 함수, 증분 또는 상수 값에 의한 가산 중 하나일 수 있다. 방법(300)에서 단일 SIMD 명령을 활용함으로써 코드 공간 효율성이 달성된다. SIMD 레인들에 걸친 이동은 또한 방법(300)에서 최소화되는데, 여기서, 제1 세트의 소스 데이터 엘리먼트들은 개개의 SIMD 레인들에 있고, 방법(300)은, 소스 데이터 엘리먼트들 중 각각의 소스 데이터 엘리먼트(예컨대, SIMD 레인 0에서 소스 데이터 엘리먼트 0)로부터, 개개의 SIMD 레인(예컨대, SIMD 레인 0) 또는 개개의 SIMD 레인에 인접한 SIMD 레인(예컨대, SIMD 레인 1)에서 목적지 데이터 엘리먼트(예컨대, 목적지 데이터 엘리먼트 A)를 생성하는 단계를 포함한다.
[0050] 별개로 도시되지 않았지만, 방법(300)은 또한, 도 2b의 SIMD 명령(220)을 구현하기 위한 방법을 포함할 수 있고, 이는, 예컨대, 블록(302)에서, 제1 비트-폭의 제2 세트의 소스 데이터 엘리먼트들을 포함하는 제2 소스 벡터 오퍼랜드(예컨대, 레지스터들의 제1 및 제2 소스 벡터 오퍼랜드들(222 및 223))를 수신하는 단계를 더 포함하고, 제1 세트의 소스 데이터 엘리먼트들의 순차적 순서는 제2 세트의 소스 데이터 엘리먼트들의 순차적 순서에 대응한다는 점이 또한 주목될 것이다. 이러한 경우, 블록(304)에서 할당된 순차적 순서에 기반하여, 블록(306)은, 제1 세트의 짝수-넘버링된 소스 데이터 엘리먼트들 및 제2 세트의 짝수-넘버링된 소스 데이터 엘리먼트들로부터, 제1 레지스터의 제1 서브세트의 목적지 데이터 엘리먼트들을 생성하기 위한 블록(306a); 및 제1 세트의 홀수-넘버링된 소스 데이터 엘리먼트들 및 제2 세트의 홀수-넘버링된 소스 데이터 엘리먼트들로부터, 제2 레지스터의 제2 서브세트의 목적지 데이터 엘리먼트들을 생성하기 위한 블록(306b)을 포함하는, 프로세서에서 SIMD 명령을 실행하는 단계를 포함한다. 이러한 경우, SIMD 명령은 제1 세트의 소스 데이터 엘리먼트들과 제2 세트의 대응하는 소스 데이터 엘리먼트들의 가산 또는 곱셈일 수 있고, 제1 세트의 소스 데이터 엘리먼트들 및 제2 세트의 소스 데이터 엘리먼트들은, 개개의 SIMD 레인들에 있고, 제1 세트의 소스 데이터 엘리먼트들 중 각각의 소스 데이터 엘리먼트 및 제2 세트의 소스 데이터 엘리먼트들 중 대응하는 소스 데이터 엘리먼트로부터, 개개의 SIMD 레인 또는 개개의 SIMD 레인에 인접한 SIMD 레인에서 목적지 데이터 엘리먼트가 생성된다.
[0051] 도 3b를 참조하면, 본원에서 개시되는 프로세스들, 기능들 및/또는 알고리즘들을 수행하기 위한 다른 방법이 예시된다. 예컨대, 도 3b에서 예시되는 바와 같이, 방법(300)은, 예컨대, 도 2c에 따라, 혼합-폭 SIMD(single instruction multiple data) 연산을 수행하는 다른 방법을 포함한다.
[0052] 블록(352)에서, 방법(350)은 프로세서(예컨대, 프로세서(402))가 SIMD 명령(예컨대, SIMD 명령(240))을 수신하는 단계를 포함하고, SIMD 명령(예컨대, SIMD 명령(240))은, 제1 비트-폭(예컨대, 16-비트)의 소스 데이터 엘리먼트들(예컨대, 소스 데이터 엘리먼트들 A-H)을 포함하는 적어도 (예컨대, 레지스터들(242x, 242y)의) 소스 벡터 오퍼랜드; 및 제2 비트-폭(예컨대, 8-비트)의 목적지 데이터 엘리먼트들(예컨대, 목적지 데이터 엘리먼트들 0-7)을 포함하는 적어도 (예컨대, 레지스터(244)의) 목적지 벡터 오퍼랜드를 포함하고, 제2 비트-폭은 제1 비트-폭의 절반이고, 소스 벡터 오퍼랜드는, 제1 서브세트의 소스 데이터 엘리먼트들(예컨대, 목적지 데이터 엘리먼트들 0, 2, 4, 6)을 포함하는 제1 레지스터(예컨대, 제1 레지스터(242x)) 및 제2 서브세트의 소스 데이터 엘리먼트들(예컨대, 목적지 데이터 엘리먼트들 1, 3, 5, 7)을 포함하는 제2 레지스터(예컨대, 제2 레지스터(242y))를 포함하는 한 쌍의 레지스터들을 포함한다.
[0053] 블록(354)에서, 순차적 순서는 목적지 데이터 엘리먼트들에 할당되고, 블록(356)에서, SIMD 명령이 실행된다. 블록(356)은 병렬로 또한 수행될 수 있는 서브 블록들(356a 및 356b)을 포함한다.
[0054] 블록(356a)은, 제1 레지스터의 대응하는 제1 서브세트의 소스 데이터 엘리먼트들(예컨대, 소스 데이터 엘리먼트들 A, C, E, G)로부터, 짝수-넘버링된 목적지 데이터 엘리먼트들(예컨대, 목적지 데이터 엘리먼트들 0, 2, 4, 6)을 생성하는 단계를 포함한다.
[0055] 블록(356b)은, 제2 레지스터의 대응하는 제2 서브세트의 소스 데이터 엘리먼트들(예컨대, 소스 데이터 엘리먼트들 B, D, F, H)로부터, 홀수-넘버링된 목적지 데이터 엘리먼트들(예컨대, 목적지 데이터 엘리먼트들 1, 3, 5, 7)을 생성하는 단계를 포함한다.
[0056] 예시적 양상들에서, 방법(350)의 SIMD 명령은 소스 데이터 엘리먼트들의 우측-시프트 함수일 수 있고, 목적지 데이터 엘리먼트들은 개개의 SIMD 레인들(예컨대, SIMD 레인들 0-7)에 있고, 목적지 데이터 엘리먼트들 중 각각의 목적지 데이터 엘리먼트(예컨대, 목적지 데이터 엘리먼트 0)가, 개개의 SIMD 레인(예컨대, SIMD 레인 0) 또는 개개의 SIMD 레인에 인접한 SIMD 레인(예컨대, SIMD 레인 1)에서 소스 데이터 엘리먼트(예컨대, 소스 데이터 엘리먼트 A)로부터 생성된다.
[0057] 도 4를 참조하면, 예시적 양상들에 따른 무선 디바이스(400)의 특정 예시적 양상의 블록 다이어그램이 도시된다. 무선 디바이스(400)는, 예컨대, 도 3a 및 도 3b의 방법들(300 및 350) 각각에 따라, 예시적 혼합-폭 SIMD 명령들의 실행을 지원 및 구현하도록 구성될(예컨대, 실행 로직을 포함할) 수 있는 프로세서(402)를 포함한다. 도 4에 도시되는 바와 같이, 프로세서(402)는 메모리(432)와 통신할 수 있다. 프로세서(402)는, 레지스터들(예컨대, 논리적 레지스터들)(이 레지스터들에 관해, 예시적 SIMD 명령들의 오퍼랜드들이 표현됨)에 대응하는 물리적 레지스터들을 홀딩하는 레지스터 파일(도시되지 않음)을 포함할 수 있다. 일부 양상들에서는, 레지스터 파일에, 메모리(432)로부터 데이터가 공급될 수 있다. 도시되지 않았지만, 하나 또는 그 초과의 캐시들 또는 다른 메모리 구조들이 또한 무선 디바이스(400)에 포함될 수 있다.
[0058] 도 4는 또한, 프로세서(402) 및 디스플레이(428)에 커플링된 디스플레이 제어기(426)를 도시한다. CODEC(coder/decoder)(434)(예컨대, 오디오 및/또는 음성 CODEC)은 프로세서(402)에 커플링될 수 있다. 다른 컴포넌트들, 이를테면, 무선 제어기(440)(이는 모뎀을 포함할 수 있음)가 또한 예시된다. 스피커(436) 및 마이크로폰(438)은 CODEC(434)에 커플링될 수 있다. 도 4는 또한, 무선 제어기(440)가 무선 안테나(442)에 커플링될 수 있음을 표시한다. 특정 양상에서, 프로세서(402), 디스플레이 제어기(426), 메모리(432), CODEC(434) 및 무선 제어기(440)는 시스템-인-패키지 또는 시스템-온-칩 디바이스(422)에 포함된다.
[0059] 특정 양상에서, 입력 디바이스(430) 및 파워 서플라이(444)는 시스템-온-칩 디바이스(422)에 커플링된다. 더욱이, 특정 양상에서, 도 4에서 예시되는 바와 같이, 디스플레이(428), 입력 디바이스(430), 스피커(436), 마이크로폰(438), 무선 안테나(442) 및 파워 서플라이(444)가 시스템-온-칩 디바이스(422) 외부에 있다. 그러나, 디스플레이(428), 입력 디바이스(430), 스피커(436), 마이크로폰(438), 무선 안테나(442) 및 파워 서플라이(444) 각각은, 인터페이스 또는 제어기와 같은, 시스템-온-칩 디바이스(422)의 컴포넌트에 커플링될 수 있다.
[0060] 도 4는 무선 통신 디바이스를 도시하지만, 프로세서(402) 및 메모리(432)는 또한, 셋탑 박스, 뮤직 플레이어, 비디오 플레이어, 엔터테인먼트 유닛, 네비게이션 디바이스, PDA(personal digital assistant), 고정 위치 데이터 유닛, 통신 디바이스, 또는 컴퓨터에 통합될 수 있다는 점이 주목되어야 한다. 추가로, 무선 디바이스(400)의 적어도 하나 또는 그 초과의 예시적 양상들은 적어도 하나의 반도체 다이에 통합될 수 있다.
[0061] 당업자는 정보 및 신호들이 다양한 상이한 기술들 및 기법들 중 임의의 것을 사용하여 표현될 수 있다는 것을 인식할 것이다. 예컨대, 위의 설명 전반에 걸쳐 참조될 수 있는 데이터, 명령들, 커맨드들, 정보, 신호들, 비트들, 심볼들 및 칩들은 전압들, 전류들, 전자기파들, 자기장들 또는 자기 입자들, 광 필드들 또는 광 입자들, 또는 이들의 임의의 조합에 의해 표현될 수 있다.
[0062] 추가로, 당업자들은 본원에서 개시되는 양상들과 관련하여 설명되는 다양한 예시적인 논리적 블록들, 모듈들, 회로들, 및 알고리즘 단계들이 전자 하드웨어, 컴퓨터 소프트웨어 또는 둘 모두의 조합들로서 구현될 수 있다는 것을 인식할 것이다. 하드웨어 및 소프트웨어의 이러한 교환가능성을 명확하게 예시하기 위해, 다양한 예시적 컴포넌트들, 블록들, 모듈들, 회로들, 및 단계들은 일반적으로 그 기능성의 측면에서 위에서 설명되었다. 그러한 기능성이 하드웨어로서 구현되는지 또는 소프트웨어로서 구현되는지는 전체 시스템 상에 부과되는 설계 제약들 및 특정 애플리케이션에 의존한다. 당업자들은 설명되는 기능성을 각각의 특정 애플리케이션에 대해 다양한 방식들로 구현할 수 있지만, 그러한 구현 판정들이 본 발명의 범위로부터의 이탈을 야기하는 것으로 해석되어서는 안된다.
[0063] 본원에서 개시되는 양상들과 관련하여 설명되는 방법들, 시퀀스들 및/또는 알고리즘들은 하드웨어로, 프로세서에 의해 실행되는 소프트웨어 모듈로, 또는 이 둘의 조합으로 직접적으로 구현될 수 있다. 소프트웨어 모듈은 RAM 메모리, 플래시 메모리, ROM 메모리, EPROM 메모리, EEPROM 메모리, 레지스터들, 하드 디스크, 탈착가능한(removable) 디스크, CD-ROM, 또는 당해 기술 분야에서 알려진 임의의 다른 형태의 저장 매체 내에 상주할 수 있다. 예시적 저장 매체는, 프로세서가 저장 매체로부터 정보를 판독하고 저장 매체에 정보를 기록할 수 있도록 프로세서에 커플링된다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다.
[0064] 따라서, 본 발명의 양상은, (예컨대, 도 2a-c의 SIMD 명령들을 구현하기 위한 위에서 설명된 방법들(300 및 350)에 따라) 혼합-폭 SIMD 명령들을 구현하기 위한 방법을 구현하는 컴퓨터 판독가능한 매체들(예컨대, 비-일시적 컴퓨터 판독가능한 저장 매체)를 포함할 수 있다. 따라서, 본 발명은 예시되는 예들로 제한되지 않고, 본원에서 설명되는 기능성을 수행하기 위한 임의의 수단은 본 발명의 양상들에 포함된다.
[0065] 위의 개시내용은 본 발명의 예시적 양상들을 나타내는 반면, 다양한 변화들 및 수정들이 첨부된 청구항들에 의해 정의되는 바와 같은 본 발명의 범위로부터 벗어나지 않으면서 본원에서 이루어질 수 있다는 점이 주목되어야 한다. 본원에서 설명되는 본 발명의 양상들에 따른 방법 청구항들의 기능들, 단계들 및/또는 액션들은 임의의 특정 순서로 수행되지 않아도 된다. 게다가, 본 발명의 엘리먼트들은 단수 형태로 설명되거나 또는 청구될 수 있지만, 단수에 대한 제한이 명시적으로 서술되지 않는 한 복수가 고려된다.
Claims (12)
- 혼합-폭 SIMD(single instruction multiple data) 연산을 수행하는 방법으로서,
프로세서에 의해 SIMD 명령을 수신하는 단계 ― 상기 SIMD 명령은,
제1 비트-폭의 제1 세트의 소스 데이터 엘리먼트들을 포함하는 제1 소스 레지스터를 포함하는, 제1 소스 벡터 오퍼랜드; 및
제2 비트-폭의 목적지 데이터 엘리먼트들을 포함하는 목적지 벡터 오퍼랜드를 포함하고,
상기 제2 비트-폭은 상기 제1 비트-폭의 2배이고,
상기 목적지 벡터 오퍼랜드는, 제1 서브세트의 목적지 데이터 엘리먼트들을 포함하는 제1 목적지 레지스터 및 제2 서브세트의 목적지 데이터 엘리먼트들을 포함하는 제2 목적지 레지스터를 포함하는 한 쌍의 목적지 레지스터들을 포함하며, 상기 소스 레지스터는 상기 한 쌍의 목적지 레지스터들에 대응하는 단일 레지스터임 ― ; 및
상기 제1 세트의 소스 데이터 엘리먼트들의 순차적 순서에 기반하여, 상기 프로세서에서 상기 SIMD 명령을 실행하는 단계를 포함하고,
상기 프로세서에서 상기 SIMD 명령을 실행하는 단계는,
상기 제1 세트의 짝수-넘버링된(even-numbered) 소스 데이터 엘리먼트들로부터, 상기 제1 목적지 레지스터의 상기 제1 서브세트의 목적지 데이터 엘리먼트들을 생성하는 단계; 및
상기 제1 세트의 홀수-넘버링된(odd-numbered) 소스 데이터 엘리먼트들로부터, 상기 제2 목적지 레지스터의 상기 제2 서브세트의 목적지 데이터 엘리먼트들을 생성하는 단계를 포함하는, 혼합-폭 SIMD 연산을 수행하는 방법. - 제1 항에 있어서,
상기 제1 세트의 소스 데이터 엘리먼트들은 개개의 SIMD 레인들에 있고,
상기 소스 데이터 엘리먼트들 각각으로부터, 개개의 SIMD 레인 또는 상기 개개의 SIMD 레인에 인접한 SIMD 레인에서 개개의 목적지 데이터 엘리먼트를 생성하는, 혼합-폭 SIMD 연산을 수행하는 방법. - 제1 항에 있어서,
상기 SIMD 명령은 상기 제1 세트의 소스 데이터 엘리먼트들의 제곱 함수, 좌측-시프트 함수, 증분 또는 상수 값에 의한 가산 중 하나인, 혼합-폭 SIMD 연산을 수행하는 방법. - 혼합-폭 SIMD(single instruction multiple data) 연산을 수행하는 방법으로서,
프로세서에 의해 SIMD 명령을 수신하는 단계 ― 상기 SIMD 명령은,
제1 비트-폭의 소스 데이터 엘리먼트들을 포함하는 소스 벡터 오퍼랜드; 및
제2 비트-폭의 목적지 데이터 엘리먼트들을 포함하는 목적지 레지스터를 포함하는, 목적지 벡터 오퍼랜드를 포함하고,
상기 제2 비트-폭은 상기 제1 비트-폭의 절반이고,
상기 소스 벡터 오퍼랜드는, 제1 서브세트의 소스 데이터 엘리먼트들을 포함하는 제1 소스 레지스터 및 제2 서브세트의 소스 데이터 엘리먼트들을 포함하는 제2 소스 레지스터를 포함하는 한 쌍의 소스 레지스터들을 포함하며, 상기 목적지 레지스터는 상기 한 쌍의 소스 레지스터들에 대응하는 단일 레지스터임 ― ; 및
상기 목적지 데이터 엘리먼트들의 순차적 순서에 기반하여, 상기 프로세서에서 상기 SIMD 명령을 실행하는 단계를 포함하고,
상기 프로세서에서 상기 SIMD 명령을 실행하는 단계는,
상기 제1 서브세트의 소스 데이터 엘리먼트들로부터, 짝수-넘버링된(even-numbered) 목적지 데이터 엘리먼트들을 생성하는 단계; 및
상기 제2 서브세트의 소스 데이터 엘리먼트들로부터, 홀수-넘버링된(odd-numbered) 목적지 데이터 엘리먼트들을 생성하는 단계를 포함하는, 혼합-폭 SIMD 연산을 수행하는 방법. - 제4 항에 있어서,
상기 SIMD 명령은 상기 소스 데이터 엘리먼트들의 우측-시프트 함수인, 혼합-폭 SIMD 연산을 수행하는 방법. - 제4 항에 있어서,
상기 목적지 데이터 엘리먼트들은 개개의 SIMD 레인들에 있고,
소스 데이터 엘리먼트로부터, 개개의 SIMD 레인 또는 상기 개개의 SIMD 레인에 인접한 SIMD 레인에서 각각의 목적지 데이터 엘리먼트들을 생성하는, 혼합-폭 SIMD 연산을 수행하는 방법. - 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 혼합-폭 SIMD(single instruction multiple data) 연산을 수행하게 하는, 상기 프로세서에 의해 실행가능한 명령들을 포함하는 비-일시적 컴퓨터-판독가능한 저장 매체로서, 상기 비-일시적 컴퓨터-판독가능한 저장 매체는
SIMD 명령 ― 상기 SIMD 명령은,
제1 비트-폭의 제1 세트의 소스 데이터 엘리먼트들을 포함하는 제1 소스 레지스터를 포함하는, 제1 소스 벡터 오퍼랜드; 및
제2 비트-폭의 목적지 데이터 엘리먼트들을 포함하는 목적지 벡터 오퍼랜드를 포함하고,
상기 제2 비트-폭은 상기 제1 비트-폭의 2배이고,
상기 목적지 벡터 오퍼랜드는, 제1 서브세트의 목적지 데이터 엘리먼트들을 포함하는 제1 목적지 레지스터 및 제2 서브세트의 목적지 데이터 엘리먼트들을 포함하는 제2 목적지 레지스터를 포함하는 한 쌍의 목적지 레지스터들을 포함하며, 상기 소스 레지스터는 상기 한 쌍의 목적지 레지스터들에 대응하는 단일 레지스터임 ― ; 및
상기 제1 세트의 소스 데이터 엘리먼트들의 순차적 순서에 기반하여,
상기 제1 세트의 짝수-넘버링된(even-numbered) 소스 데이터 엘리먼트들로부터, 상기 제1 목적지 레지스터의 상기 제1 서브세트의 목적지 데이터 엘리먼트들을 생성하기 위한 코드; 및
상기 제1 세트의 홀수-넘버링된(odd-numbered) 소스 데이터 엘리먼트들로부터, 상기 제2 목적지 레지스터의 상기 제2 서브세트의 목적지 데이터 엘리먼트들을 생성하기 위한 코드를 포함하는, 비-일시적 컴퓨터-판독가능한 저장 매체. - 제7 항에 있어서,
상기 제1 세트의 소스 데이터 엘리먼트들은 개개의 SIMD 레인들에 있고,
상기 소스 데이터 엘리먼트들 각각으로부터, 개개의 SIMD 레인 또는 상기 개개의 SIMD 레인에 인접한 SIMD 레인에서 개개의 목적지 데이터 엘리먼트를 생성하기 위한 코드를 포함하는, 비-일시적 컴퓨터-판독가능한 저장 매체. - 제7 항에 있어서,
상기 SIMD 명령은 상기 제1 세트의 소스 데이터 엘리먼트들의 제곱 함수, 좌측-시프트 함수, 증분 또는 상수 값에 의한 가산 중 하나인, 비-일시적 컴퓨터-판독가능한 저장 매체. - 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 혼합-폭 SIMD(single instruction multiple data) 연산을 수행하게 하는, 상기 프로세서에 의해 실행가능한 명령들을 포함하는 비-일시적 컴퓨터-판독가능한 저장 매체로서, 상기 비-일시적 컴퓨터-판독가능한 저장 매체는
SIMD 명령 ― 상기 SIMD 명령은,
제1 비트-폭의 소스 데이터 엘리먼트들을 포함하는 소스 벡터 오퍼랜드; 및
제2 비트-폭의 목적지 데이터 엘리먼트들을 포함하는 목적지 레지스터를 포함하는, 목적지 벡터 오퍼랜드를 포함하고,
상기 제2 비트-폭은 상기 제1 비트-폭의 절반이고,
상기 소스 벡터 오퍼랜드는, 제1 서브세트의 소스 데이터 엘리먼트들을 포함하는 제1 소스 레지스터 및 제2 서브세트의 소스 데이터 엘리먼트들을 포함하는 제2 소스 레지스터를 포함하는 한 쌍의 소스 레지스터들을 포함하며, 상기 목적지 레지스터는 상기 한 쌍의 소스 레지스터들에 대응하는 단일 레지스터임 ― ; 및
상기 목적지 데이터 엘리먼트들의 순차적 순서에 기반하여,
상기 제1 서브세트의 소스 데이터 엘리먼트들로부터, 짝수-넘버링된(even-numbered) 목적지 데이터 엘리먼트들을 생성하기 위한 코드; 및
상기 제2 서브세트의 소스 데이터 엘리먼트들로부터, 홀수-넘버링된(odd-numbered) 목적지 데이터 엘리먼트들을 생성하기 위한 코드를 포함하는, 비-일시적 컴퓨터-판독가능한 저장 매체. - 제10 항에 있어서,
상기 SIMD 명령은 상기 소스 데이터 엘리먼트들의 우측-시프트 함수인, 비-일시적 컴퓨터-판독가능한 저장 매체. - 제10 항에 있어서,
상기 목적지 데이터 엘리먼트들은 개개의 SIMD 레인들에 있고,
소스 데이터 엘리먼트로부터, 개개의 SIMD 레인 또는 상기 개개의 SIMD 레인에 인접한 SIMD 레인에서 각각의 목적지 데이터 엘리먼트들을 생성하기 위한 코드를 포함하는, 비-일시적 컴퓨터-판독가능한 저장 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/805,456 | 2015-07-21 | ||
US14/805,456 US10489155B2 (en) | 2015-07-21 | 2015-07-21 | Mixed-width SIMD operations using even/odd register pairs for wide data elements |
PCT/US2016/038487 WO2017014892A1 (en) | 2015-07-21 | 2016-06-21 | Mixed-width simd operations having even-element and odd-element operations using register pair for wide data elements |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180030986A KR20180030986A (ko) | 2018-03-27 |
KR102121866B1 true KR102121866B1 (ko) | 2020-06-11 |
Family
ID=56204087
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187001696A KR102121866B1 (ko) | 2015-07-21 | 2016-06-21 | 와이드 데이터 엘리먼트들에 대한 레지스터 쌍을 사용하는 짝수-엘리먼트 및 홀수-엘리먼트 연산들을 가지는 혼합-폭 simd 연산들 |
Country Status (9)
Country | Link |
---|---|
US (1) | US10489155B2 (ko) |
EP (1) | EP3326060B1 (ko) |
JP (1) | JP6920277B2 (ko) |
KR (1) | KR102121866B1 (ko) |
CN (1) | CN107851010B (ko) |
BR (1) | BR112018001208B1 (ko) |
ES (1) | ES2795832T3 (ko) |
HU (1) | HUE049260T2 (ko) |
WO (1) | WO2017014892A1 (ko) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2540943B (en) * | 2015-07-31 | 2018-04-11 | Advanced Risc Mach Ltd | Vector arithmetic instruction |
US10698685B2 (en) * | 2017-05-03 | 2020-06-30 | Intel Corporation | Instructions for dual destination type conversion, mixed precision accumulation, and mixed precision atomic memory operations |
CN109298886A (zh) * | 2017-07-25 | 2019-02-01 | 合肥君正科技有限公司 | Simd指令执行方法、装置及处理器 |
US20190272175A1 (en) * | 2018-03-01 | 2019-09-05 | Qualcomm Incorporated | Single pack & unpack network and method for variable bit width data formats for computational machines |
US10528346B2 (en) * | 2018-03-29 | 2020-01-07 | Intel Corporation | Instructions for fused multiply-add operations with variable precision input operands |
CN111324354B (zh) * | 2019-12-27 | 2023-04-18 | 湖南科技大学 | 一种融合寄存器对需求的寄存器选择方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050125476A1 (en) | 2003-12-09 | 2005-06-09 | Arm Limited | Data processing apparatus and method for performing arithmetic operations in SIMD data processing |
US20070033381A1 (en) | 2001-06-11 | 2007-02-08 | Broadcom Corporation | Conditional execution with multiple destination stores |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5673321A (en) | 1995-06-29 | 1997-09-30 | Hewlett-Packard Company | Efficient selection and mixing of multiple sub-word items packed into two or more computer words |
US6202141B1 (en) | 1998-06-16 | 2001-03-13 | International Business Machines Corporation | Method and apparatus for performing vector operation using separate multiplication on odd and even data elements of source vectors |
US6922716B2 (en) | 2001-07-13 | 2005-07-26 | Motorola, Inc. | Method and apparatus for vector processing |
US7107305B2 (en) | 2001-10-05 | 2006-09-12 | Intel Corporation | Multiply-accumulate (MAC) unit for single-instruction/multiple-data (SIMD) instructions |
KR100553252B1 (ko) * | 2002-02-01 | 2006-02-20 | 아바고테크놀로지스코리아 주식회사 | 휴대용 단말기의 전력 증폭 장치 |
US7376812B1 (en) | 2002-05-13 | 2008-05-20 | Tensilica, Inc. | Vector co-processor for configurable and extensible processor architecture |
US7668897B2 (en) | 2003-06-16 | 2010-02-23 | Arm Limited | Result partitioning within SIMD data processing systems |
US7275148B2 (en) * | 2003-09-08 | 2007-09-25 | Freescale Semiconductor, Inc. | Data processing system using multiple addressing modes for SIMD operations and method thereof |
GB2409068A (en) * | 2003-12-09 | 2005-06-15 | Advanced Risc Mach Ltd | Data element size control within parallel lanes of processing |
US7353244B2 (en) * | 2004-04-16 | 2008-04-01 | Marvell International Ltd. | Dual-multiply-accumulator operation optimized for even and odd multisample calculations |
US7400271B2 (en) * | 2005-06-21 | 2008-07-15 | International Characters, Inc. | Method and apparatus for processing character streams |
CN1964490A (zh) * | 2005-11-09 | 2007-05-16 | 松下电器产业株式会社 | 一种滤波器及滤波方法 |
CN104115115B (zh) | 2011-12-19 | 2017-06-13 | 英特尔公司 | 用于多精度算术的simd整数乘法累加指令 |
CN104011644B (zh) * | 2011-12-22 | 2017-12-08 | 英特尔公司 | 用于产生按照数值顺序的相差恒定跨度的整数的序列的处理器、方法、***和指令 |
US10628156B2 (en) | 2013-07-09 | 2020-04-21 | Texas Instruments Incorporated | Vector SIMD VLIW data path architecture |
-
2015
- 2015-07-21 US US14/805,456 patent/US10489155B2/en active Active
-
2016
- 2016-06-21 CN CN201680041468.2A patent/CN107851010B/zh active Active
- 2016-06-21 ES ES16732213T patent/ES2795832T3/es active Active
- 2016-06-21 BR BR112018001208-4A patent/BR112018001208B1/pt active IP Right Grant
- 2016-06-21 WO PCT/US2016/038487 patent/WO2017014892A1/en active Application Filing
- 2016-06-21 KR KR1020187001696A patent/KR102121866B1/ko active IP Right Grant
- 2016-06-21 HU HUE16732213A patent/HUE049260T2/hu unknown
- 2016-06-21 JP JP2018502231A patent/JP6920277B2/ja active Active
- 2016-06-21 EP EP16732213.0A patent/EP3326060B1/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070033381A1 (en) | 2001-06-11 | 2007-02-08 | Broadcom Corporation | Conditional execution with multiple destination stores |
US20050125476A1 (en) | 2003-12-09 | 2005-06-09 | Arm Limited | Data processing apparatus and method for performing arithmetic operations in SIMD data processing |
Also Published As
Publication number | Publication date |
---|---|
BR112018001208B1 (pt) | 2023-12-26 |
JP6920277B2 (ja) | 2021-08-18 |
WO2017014892A1 (en) | 2017-01-26 |
HUE049260T2 (hu) | 2020-09-28 |
CN107851010B (zh) | 2021-11-12 |
BR112018001208A2 (pt) | 2018-09-11 |
US10489155B2 (en) | 2019-11-26 |
JP2018525731A (ja) | 2018-09-06 |
KR20180030986A (ko) | 2018-03-27 |
EP3326060B1 (en) | 2020-03-25 |
ES2795832T3 (es) | 2020-11-24 |
US20170024209A1 (en) | 2017-01-26 |
EP3326060A1 (en) | 2018-05-30 |
CN107851010A (zh) | 2018-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102121866B1 (ko) | 와이드 데이터 엘리먼트들에 대한 레지스터 쌍을 사용하는 짝수-엘리먼트 및 홀수-엘리먼트 연산들을 가지는 혼합-폭 simd 연산들 | |
CN111213125B (zh) | 使用simd指令进行高效的直接卷积 | |
CN107229463B (zh) | 计算设备和相应计算方法 | |
US9424045B2 (en) | Data processing apparatus and method for controlling use of an issue queue to represent an instruction suitable for execution by a wide operand execution unit | |
US10678540B2 (en) | Arithmetic operation with shift | |
US20180121386A1 (en) | Super single instruction multiple data (super-simd) for graphics processing unit (gpu) computing | |
CN107533460B (zh) | 紧缩有限冲激响应(fir)滤波处理器、方法、***和指令 | |
CN107851013B (zh) | 数据处理装置和方法 | |
US20220206796A1 (en) | Multi-functional execution lane for image processor | |
EP3623940A2 (en) | Systems and methods for performing horizontal tile operations | |
US8707013B2 (en) | On-demand predicate registers | |
US8832412B2 (en) | Scalable processing unit | |
KR20180039078A (ko) | Simd 명령들을 사용하는 테이블 룩업 | |
KR102092049B1 (ko) | Simd 슬라이딩 윈도우 연산 | |
US8140608B1 (en) | Pipelined integer division using floating-point reciprocal | |
CN109416635B (zh) | 针对使用多个架构寄存器的指令的架构寄存器替换 | |
WO2022191859A1 (en) | Vector processing using vector-specific data type |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
E701 | Decision to grant or registration of patent right |