SSE3
1. 개요
SSE3는 인텔의 프로세서에 도입된 명령어 집합으로, 레지스터 내에서 수평 데이터 처리를 가능하게 하여 DSP 및 3D 그래픽스 연산의 효율성을 높인다. 부동 소수점-정수 변환 명령어 추가 및 LDDQU 명령어 개선을 통해 파이프라인 지연을 줄이고 성능을 향상시켰다. AMD, 인텔, VIA/Centaur 등 다양한 CPU에서 지원되며, ADDSUBPD, HADDPD, HADDPS, HSUBPD, HSUBPS, LDDQU, MOVDDUP, MOVSHDUP, MOVSLDUP, FISTTP, MONITOR, MWAIT 등의 새로운 명령어를 포함한다.
| 유형 | SIMD |
|---|---|
| 개발자 | 인텔 |
| 데뷔 | 펜티엄 4 "프레스콧" (2004년 2월 1일) |
| 명령어 | 54개 새로운 SSE 명령어 |
|---|---|
| 아키텍처 | x86 |
| 비트 너비 | 128비트 |
| 데이터 유형 | 8비트 정수 16비트 정수 32비트 정수 단정밀도 부동소수점 |
| 추가된 명령어 | PSIGNB, PSIGNW, PSIGND PABSB, PABSW, PABSD PMULHRSW PALIGNR PSHUFB PMADDUBSW |
-
SIMD 컴퓨팅 -
SSE2
SSE2는 인텔이 개발한 x86 아키텍처의 SIMD 명령어 집합 확장으로, MMX 명령어의 정수 벡터 연산을 확장하고 XMM 레지스터를 사용하여 부동 소수점 연산 성능을 향상시키며, AMD64 아키텍처에서도 지원된다. -
SIMD 컴퓨팅 -
MMX (명령어 집합)
MMX는 인텔이 개발한 명령어 집합으로, 64비트 레지스터를 사용하여 여러 개의 작은 정수를 동시에 처리하며, x87 부동 소수점 레지스터를 사용해 정수 연산을 수행하도록 설계되었다. -
X86 명령어 -
스트리밍 SIMD 확장
스트리밍 SIMD 확장(SSE)은 x86 아키텍처의 SIMD 명령어 집합으로, 128비트 XMM 레지스터를 사용하여 데이터 병렬 처리를 통해 성능을 향상시키며, 인텔 펜티엄 III 프로세서에 처음 도입되어 여러 후속 버전으로 발전했다. -
X86 명령어 -
SSE2
SSE2는 인텔이 개발한 x86 아키텍처의 SIMD 명령어 집합 확장으로, MMX 명령어의 정수 벡터 연산을 확장하고 XMM 레지스터를 사용하여 부동 소수점 연산 성능을 향상시키며, AMD64 아키텍처에서도 지원된다. -
병렬 컴퓨팅 -
슈퍼컴퓨터
슈퍼컴퓨터는 일반 컴퓨터보다 훨씬 높은 성능을 가진 컴퓨터로, 복잡한 계산과 시뮬레이션을 수행하며, 프로세서, 메모리, 스토리지, 네트워크 등으로 구성되어 병렬 처리를 통해 높은 성능을 구현하고, 군사, 기상 예측, 과학 기술 분야, 인공지능 등 다양한 분야에서 활용되고 있다. -
병렬 컴퓨팅 -
컴퓨터 클러스터
2. 변경 사항
SSE3의 가장 주목할 만한 변경 사항은 레지스터 내에서 수평적으로 데이터를 처리할 수 있는 기능이 추가되었다는 점이다. 이전 SSE 명령어들이 수직적인 연산에 초점을 맞췄던 것과 달리, SSE3는 단일 레지스터에 저장된 여러 값들에 대해 동시에 덧셈, 뺄셈 등의 연산을 수행할 수 있다. 이러한 수평 연산 기능은 DSP 및 3D 연산과 같이 복잡한 연산을 효율적으로 처리하는 데 기여한다.
또한, 전역 반올림 모드를 변경하지 않고도 부동 소수점 값을 정수로 변환하는 새로운 명령어가 추가되어, 파이프라인 지연을 줄이고 성능을 향상시켰다.
LDDQU 명령어는 정렬되지 않은 정수 벡터 로드를 대체하여 넷버스트 기반 플랫폼에서 비디오 압축과 같은 작업에서 더 나은 성능을 제공한다.
3. SSE3를 지원하는 CPU
SSE3 명령어 집합은 여러 CPU에서 지원된다. 주요 지원 CPU는 다음과 같다.
| 제조사 | CPU 제품군 |
|---|---|
| AMD | 애슬론 64 (베니스 스테핑 E3, 샌디에이고 스테핑 E4 이후), 애슬론 64 X2, 애슬론 64 FX (샌디에이고 스테핑 E4), 옵테론 (스테핑 E4 이후), 셈프론 (Palermo 스테핑 E3 이후), 페넘, 페넘 II, 튜리온 64, 튜리온 64 X2, 페넘 X2, K10 제품군, APU 제품군 (GPU 미포함), FX 시리즈, 젠 제품군 |
| 인텔 | 셀러론 D, 셀러론 420, 430, 440, 펜티엄 4 (프레스캇 이후), 펜티엄 D, 펜티엄 듀얼 코어, 펜티엄 익스트림 에디션 (펜티엄 4 익스트림 에디션은 아님), 인텔 코어 듀오, 인텔 코어 솔로, 인텔 코어 2 듀오, 인텔 코어 2 익스트림, 인텔 코어 2 쿼드, 인텔 코어 i7, 제온 (노코나 이후), 아톰, 셀러론 (코어 마이크로아키텍처부터), 펜티엄 (코어 마이크로아키텍처부터) |
| VIA/켄타우어 | C7, Nano |
| 트랜스메타 | 이피션 TM88xx (모델 번호 TM86xx는 제외) |
3.1. AMD
다음은 SSE3를 지원하는 AMD 프로세서 목록이다.
* 애슬론 64 (베니스 스테핑 E3, 샌디에이고 스테핑 E4 이후)
* 애슬론 64 X2
* 애슬론 64 FX (샌디에이고 스테핑 E4)
* 옵테론 (스테핑 E4 이후)
* 셈프론 (Palermo 스테핑 E3 이후)
* 페넘
* 페넘 II
* 튜리온 64
* 튜리온 64 X2
* 페넘 X2
* K10 제품군
* APU 제품군 (GPU 미포함)
* FX 시리즈
* 젠 제품군
3.2. 인텔
* 셀러론 D
* 셀러론 420, 430, 440
* 펜티엄 4 (프레스캇 이후)
* 펜티엄 D
* 펜티엄 듀얼 코어
* 펜티엄 익스트림 에디션 (펜티엄 4 익스트림 에디션은 아님)
* 인텔 코어 듀오
* 인텔 코어 솔로
* 인텔 코어 2 듀오
* 인텔 코어 2 익스트림
* 인텔 코어 2 쿼드
* 인텔 코어 i7
* 제온 (노코나 이후)
* 아톰
* 셀러론 (코어 마이크로아키텍처부터)
* 펜티엄 (코어 마이크로아키텍처부터)
4. 신규 명령어
SSE3는 이전 SSE 명령어와 달리 레지스터 내에서 수평적인 연산이 가능하도록 설계되었다. 이는 디지털 신호 처리(DSP) 및 3D 그래픽 연산 속도를 높이는 데 기여한다.
특히, 단일 레지스터에 저장된 여러 값들을 더하고 빼는 명령어들이 추가되었다. 또한, 전역 반올림 모드를 변경하지 않고도 부동 소수점 값을 정수로 변환하는 명령어가 추가되어 명령어 파이프라인 정지를 줄일 수 있게 되었다.
이 외에도, 캐시 라인 경계를 넘어 데이터를 읽을 때 넷버스트 기반 플랫폼에서 더 나은 성능을 제공하는 `LDDQU` 명령어가 추가되었다.
4.1. 공통 명령어
SSE3는 한 번에 여러 값을 처리하는 SIMD(Single Instruction, Multiple Data) 명령어 집합으로, 다음과 같은 공통 명령어들을 포함한다.
* 산술 연산:
* `ADDSUBPD`: 두 128비트 레지스터에 있는 값들을 쌍으로 묶어 덧셈과 뺄셈을 번갈아 수행한다. (예: { A0, A1 }, { B0, B1 } → { A0 - B0, A1 + B1 })
* `ADDSUBPS`: `ADDSUBPD`와 유사하지만, 단정밀도 부동소수점 값에 대해 연산을 수행한다.
* AOS (Array Of Structures) 연산:
* `HADDPD`, `HADDPS`: 레지스터 내의 값들을 가로로 더한다. 예를 들어, `HADDPD`는 { A0, A1 }, { B0, B1 }를 입력받아 { A0 + A1, B0 + B1 }를 출력한다.
* `HSUBPD`, `HSUBPS`: `HADDPD`, `HADDPS`와 유사하지만, 가로로 뺄셈을 수행한다.
* 기타:
* `LDDQU`: 정렬되지 않은 메모리에서 128비트 정수 벡터를 빠르게 읽어올 수 있게 해준다.
* `MOVDDUP`, `MOVSHDUP`, `MOVSLDUP`: 복소수 연산이나 음성 신호 처리와 같은 파형 계산에 유용하다.
* `FISTTP`: 부동소수점 값을 정수로 변환할 때, 일반적으로 사용되는 반올림 대신 소수점 이하를 버리는 절단(truncation) 방식을 사용한다.
4.1.1. 산술 연산
;`ADDSUBPD`
: Add-Subtract-Packed-Double (덧셈-뺄셈-팩-더블)
:* 입력: { A0, A1 }, { B0, B1 }
:* 출력: { A0 - B0, A1 + B1 }
;`ADDSUBPS`
: Add-Subtract-Packed-Single (덧셈-뺄셈-팩-싱글)
:* 입력: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
:* 출력: { A0 - B0, A1 + B1, A2 - B2, A3 + B3 }
4.1.2. AOS (Array Of Structures) 연산
SSE3는 레지스터에서 수평적으로 작동하는 기능을 추가하여, 디지털 신호 처리 및 3D 처리를 단순화한다. 특히, 단일 레지스터에 저장된 여러 값들을 더하고 빼는 명령어들이 추가되었다.