SSSE3
1. 개요
SSSE3는 2006년 인텔 코어 마이크로아키텍처 기반 프로세서에 처음 도입된 CPU 명령어 집합으로, HD 오디오/비디오 디코딩/인코딩 성능을 향상시킨다. 16개의 새로운 개별 명령어를 포함하며, 수평 덧셈/뺄셈, 절대값 계산, 곱셈-덧셈, 셔플, 데이터 정렬 등 다양한 기능을 수행한다. SSSE3는 인텔, AMD, VIA 등 다양한 제조사의 CPU에서 지원되며, 인텔의 제온, 코어 2, 코어 i 시리즈, AMD의 젠(Zen) 아키텍처 기반 프로세서, VIA의 나노 프로세서 등이 해당된다.
-
SIMD 컴퓨팅 -
SSE2
SSE2는 인텔이 개발한 x86 아키텍처의 SIMD 명령어 집합 확장으로, MMX 명령어의 정수 벡터 연산을 확장하고 XMM 레지스터를 사용하여 부동 소수점 연산 성능을 향상시키며, AMD64 아키텍처에서도 지원된다. -
SIMD 컴퓨팅 -
SSE3
SSE3는 인텔에서 개발한 스트리밍 SIMD 확장 3 명령어 세트로, 부동 소수점 연산, 디지털 신호 처리, 3차원 컴퓨터 그래픽 처리 성능 향상을 위해 기존 SSE2 명령어 세트에 몇 가지 새로운 명령어를 추가한 것이다. -
X86 아키텍처 -
물리 주소 확장
물리 주소 확장(PAE)은 x86 아키텍처에서 32비트 주소를 36비트 이상으로 확장하여 CPU가 4GB 초과 물리 메모리에 접근하도록 하는 기술로, 페이지 테이블 확장 및 추가 페이지 테이블을 통해 최대 64GB 메모리를 지원하며 AMD64 아키텍처에서 가상 주소 공간 확장에 사용되고 운영 체제, 칩셋, 마더보드의 지원이 필요하며 CPUID 플래그로 지원 여부를 확인한다. -
X86 아키텍처 -
X86 가상화
X86 가상화는 x86 아키텍처 기반 시스템에서 가상 머신을 구현하는 기술로, 소프트웨어 기반 가상화와 하드웨어 지원 가상화로 나뉘며, CPU 제조사의 가상화 확장 기술을 활용하여 가상 머신의 성능을 향상시킨다. -
X86 명령어 -
스트리밍 SIMD 확장
스트리밍 SIMD 확장(SSE)은 x86 아키텍처의 SIMD 명령어 집합으로, 128비트 XMM 레지스터를 사용하여 데이터 병렬 처리를 통해 성능을 향상시키며, 인텔 펜티엄 III 프로세서에 처음 도입되어 여러 후속 버전으로 발전했다. -
X86 명령어 -
SSE2
SSE2는 인텔이 개발한 x86 아키텍처의 SIMD 명령어 집합 확장으로, MMX 명령어의 정수 벡터 연산을 확장하고 XMM 레지스터를 사용하여 부동 소수점 연산 성능을 향상시키며, AMD64 아키텍처에서도 지원된다.
2. 역사
SSSE3는 2006년 6월 26일, "우드크레스트" 제온을 탑재한 코어 마이크로아키텍처 기반의 인텔 프로세서와 함께 처음 도입되었다.
SSSE3를 지원하기 위해 처음 설계된 프로세서의 코드명으로 테자스 신규 명령어(TNI) 또는 메롬 신규 명령어(MNI)라고 불리기도 했다.
SSSE3는 AAC와 같은 HD 오디오/비디오 디코딩/인코딩을 향상시켰다.
3. 기능
SSSE3는 16개의 새로운 개별 명령어를 포함하고 있다. 각 명령어는 64비트 MMX 또는 128비트 XMM 레지스터에서 작동할 수 있다. 따라서 인텔의 자료에서는 32개의 새로운 명령어를 언급하고 있다.
SSSE3에 포함된 명령어는 다음과 같다.
* 수평 덧셈 또는 뺄셈 연산을 수행하는 12개의 명령어.
* 절대값을 계산하는 6개의 명령어.
* 내적의 계산 속도를 높이는 곱셈-덧셈 연산을 수행하는 2개의 명령어.
* 팩 처리된 정수 곱셈 연산을 가속화하고 스케일링된 정수 값을 생성하는 2개의 명령어.
* 두 번째 셔플 제어 피연산자에 따라 바이트 단위의 제자리 셔플을 수행하는 2개의 명령어.
* 소스 피연산자의 해당 요소가 음수이면 대상 피연산자의 팩 처리된 정수를 부정하는 6개의 명령어.
* 두 피연산자의 조합에서 데이터를 정렬하는 2개의 명령어.
4. 새 함수
SSSE3에는 여러 가지 새로운 함수들이 추가되었다. 각 함수의 기능은 아래 표와 같다.
| 함수명 | 전체 이름 |
|---|---|
| PSIGNB, PSIGNW, PSIGND | Packed Sign |
| PABSB, PABSW, PABSD | Packed Absolute Value |
| PALIGNR | Packed Align Right |
| PSHUFB | Packed Shuffle Bytes |
| PMULHRSW | Packed Multiply High with Round and Scale |
| PMADDUBSW | Multiply and Add Packed Signed and Unsigned Bytes |
| PHSUBW, PHSUBD | Packed Horizontal Subtract (Words or Doublewords) |
| PHSUBSW | Packed Horizontal Subtract and Saturate Words |
| PHADDW, PHADDD | Packed Horizontal Add (Words or Doublewords) |
| PHADDSW | Packed Horizontal Add and Saturate Words |
각 함수에 대한 자세한 설명은 다음과 같다.
| 명령어 | 정의 | 설명 |
|---|---|---|
PSIGNB, PSIGNW, PSIGND | 팩 처리된 부호 | 다른 레지스터의 해당 요소의 부호가 음수이면 바이트, 워드 또는 더블워드의 레지스터 요소를 반전한다. |
PABSB, PABSW, PABSD | 팩 처리된 절대값 | 바이트, 워드 또는 더블워드의 레지스터 요소를 다른 레지스터 요소의 절대값으로 채운다. |
PALIGNR | 팩 처리된 오른쪽 정렬 | 두 개의 레지스터를 가져와서 값을 연결하고, 명령어에 인코딩된 즉시 값에 의해 주어진 오프셋에서 레지스터 길이의 섹션을 추출한다. |
PSHUFB | 팩 처리된 바이트 섞기 | 바이트 레지스터 A = [a0 a1 a2 ...] 및 B = [b0 b1 b2 ...]를 가져와 A를 [ab0 ab1 ab2 ...]로 바꾼다. 단, bi의 최상위 비트가 설정된 경우 i번째 항목을 0으로 바꾼다. |
PMULHRSW | 반올림 및 스케일로 팩 처리된 곱셈 상위 | 레지스터 A 및 B의 16비트 워드를 −1.00000000과 +0.99996948... 사이의 부호 있는 16비트 고정 소수점 숫자(예: 0x4000은 +0.5로, 0xA000은 −0.75로 처리됨)로 처리하고, 올바른 반올림으로 함께 곱한다. |
PMADDUBSW | 팩 처리된 부호 있는 및 부호 없는 바이트 곱셈 및 덧셈 | 레지스터 A와 B의 바이트를 가져와서 함께 곱하고 쌍을 더하고, 부호 있는 포화 처리하여 저장한다. |
PHSUBW, PHSUBD | 팩 처리된 수평 뺄셈 (워드 또는 더블워드) | 레지스터 A = [a0 a1 a2 ...] 및 B = [b0 b1 b2 ...]를 가져와 [a0−a1 a2−a3 ... b0−b1 b2−b3 ...]를 출력한다. |
PHSUBSW | 팩 처리된 수평 뺄셈 및 포화 워드 | PHSUBW와 유사하다. |
PHADDW, PHADDD | 팩 처리된 수평 덧셈 (워드 또는 더블워드) | 레지스터 A = [a0 a1 a2 ...] 및 B = [b0 b1 b2 ...]를 가져와 [a0+a1 a2+a3 ... b0+b1 b2+b3 ...]를 출력한다. |
PHADDSW | 팩 처리된 수평 덧셈 및 포화 워드 | PHADDW와 유사하다. |
4.1. satsw(X) 함수
satsw영어(X)('saturate to signed word'로 읽음)는 부호가 있는 정수 X를 -32768보다 작으면 -32768로, 32767보다 크면 +32767로 바꾸고, 그 외에는 바꾸지 않는 함수이다. 일반적인 인텔 아키텍처에서 8비트는 한 바이트, 16비트는 워드, 32비트는 이중 워드이다. 여기서 레지스터는 MMX나 XMM 벡터 레지스터를 의미한다.
5.1. 인텔 (Intel)
다음은 SSSE3를 지원하는 인텔 프로세서 목록이다.
5.2. AMD
* AMD:
"Cat" 저전력 프로세서
* Bobcat 기반 프로세서
* Jaguar 기반 프로세서 및 그 이후
* Puma 기반 프로세서 및 그 이후
"Heavy Equipment" 프로세서
* Bulldozer 기반 프로세서
* Piledriver 기반 프로세서
* Steamroller 기반 프로세서
* Excavator 기반 프로세서 및 그 이후
Zen 기반 프로세서
Zen+ 기반 프로세서
Zen 2 기반 프로세서
Zen 3 기반 프로세서
Zen 4 기반 프로세서
** Zen 5 기반 프로세서