Streaming SIMD Extensions.
목차
1 개요
IA-32/x86 SIMD 확장 명령어 세트로, 인텔이 AMD의 3DNow!에 대응하기 위해 만든 명령어 세트이다.
인텔의 IA-32의 MMX 명령어 세트에는 두 가지 큰 문제점이 있었는데 그것은 기존 부동 소수점 레지스터 재사용은 부동 소수점과 SIMD 데이터를 동시에 작동할 수 없게 만든다는 것과 오직 정수만 연산 가능하다는 것이었다. 그 문제를 해결한 것이 SSE이다.
1999년 펜티엄 III 시리즈 프로세서를 통해 도입을 시작하였으며 이후 AMD는 애슬론 XP 시리즈와 듀론 시리즈에서부터 채택하기 시작하였다.
펜티엄 III의 코드명이 Katmai로 알려져 있을 시기에는 KNI(Katmai New Instructions)라고 불리기도 했다. 이후 ISSE(IntelStreaming SIMD Extentions)로 정해졌고, 이후 SSE로 변경되었다.
이 SSE를 확장한 후속 명령어는 AVX이다.
2 특징
2.1 SSE
XMM으로 알려진 128비트 레지스터를 추가했다. x86에서는 8개, x86-64에서는 16개의 레지스터가 사용 가능하다. 그리고 4개의 32비트 단정밀도 부동 소수점[1]을 사용했으며, 정수 계산을 지원하지 않는다. 다만 이것은 MMX 명령어를 지원해 해결했다.
첫 번째 SSE 지원 CPU인 펜티엄 III 시리즈는 SSE와 FPU 사이에 리소스 공유가 가능했지만, 동시에 작동하지는 않는다는 문제점이 있었다.
참고로 이 명령어 세트를 완벽하게 지원할 경우, SSE를 지원하지 않는 것과 비교하여 최대 4배 까지의 성능 향상이 가능하다.
2.2 SSE2
2001년에 출시된 펜티엄 4에 처음 탑재되었고, AMD는 2004년 옵테론 시리즈와 애슬론 64 시리즈에 처음 도입했다.
SSE2는 MMX의 정수 벡터 연산을 구현했고, x87 FPU 레지스터를 공유해 x87 명령어와 모드 스위칭 페널티를 회피하였다. 또 무한 정보 스트림을 처리할 때 발생하는 캐시 오염을 최소화하기 위해 캐시 제어 명령어 집합과 정교한 숫자형 변환 명령어를 포함하는 등의 개선으로 MMX를 완전히 대체하게 되었다.
2.3 SSE3
PNI(Prescott New Instructions)라고 부르기도 한다. 인텔에선 2004년에 출시된 프레스캇에 처음 탑재되었고, AMD는 애슬론 64 시리즈의 베이스, 샌디에고 등의 E 스테핑 리버전부터 처음 탑재되었다.
SSE2에서 13개의 새로운 명령어가 추가되었고, 엄격했던 이전의 수직적 SSE 명령어 처리에서 벗어나 수평적으로 동작할 수 있게 되었다. 또한 전역 반올림 모드의 변경없이 부동 소수점을 정수형으로 변환하는 명령어의 추가로 파이프라인의 스톨을 피하는 등의 개선이 있었다.
2.4 SSE4
2006년 9월 27일 인텔 개발자 포럼에서 소개되었고, 2007년 인텔 개발자 포럼에서 자세히 설명되었고, 인텔의 코어 마이크로아키텍처와 AMD의 K10 마이크로아키텍처부터 지원하기 시작했다.
SSE4는 총 54개의 명령어로 구성되어 있다.
참고로 SSSE3(Supplemental Streaming SIMD Extension 3)과 혼동하지 말자.
2.4.1 SSE4.1
47개의 명령어 집합이며, 인텔의 펜린에서부터 지원을 시작하였다.
2.4.2 SSE4.2
SSE4.1에서 명령어 7개가 추가되었으며 인텔의 네할렘 마이크로아키텍처부터 지원을 시작하였다.
추가된 명령어는 STTNI(String and Text New Instructions)라고 불리는 문자열 및 텍스트 비교 명령어와 데이터 전송 프로토콜에서 사용되는 순환 중복 검사(CRC) 계산 명령어 등이 추가되었다.
2.4.3 SSE4a
AMD의 바르셀로나 프로세서에 처음 소개되었으며 총 4개의 명령어가 추가되었다. 다만 POPCNT와 LZCNT 명령어는 별로의 확장 명령어로 작성하며, 인텔 프로세서에서 SSE4a 명령어 세트는 POPCNT를 제외하고 지원되지 않는다.
2.5 SSE5
원래 AMD의 K10 마이크로아키텍처 다음 세대에 적용될 명령어 세트였으나, 개발이 지연됨에 따라 인텔의 제안에 따라 AVX로 이동하게 된다. 현재 AMD의 불도저 마이크로아키텍처부터 지원하기 시작한 XOP, FMA4, CVT16(F16C)이 바로 이것.
SSE5 명령어 세트는 46개의 기본 명령어를 포함해 총 170개의 명령어로 구성되어 있으며, 대부분의 명령어들이 단일 스레드 성능 개선을 목적으로 설계되었다. 일부 SSE5 명령어는 3 피연산자 명령어로, x86 코드의 명령어 수 증가로 가능한 것들도 있다.
AMD의 주장에 따르면 고성능 컴퓨팅(HPC), 멀티미디어, 컴퓨터 보안에서의 극적인 성능 향상과 고급 암호화 표준(AES)에서 5배의 성능 향상, 비디오 스트림 프로세서가 사용된 이산 코사인 변환(DCT)에서 30%의 성능 향상이 있다고 한다.
3 지원 프로세서
3.1 SSE
인텔
- 펜티엄 III 시리즈 이후 프로세서
AMD
- 애슬론 XP 시리즈
- 듀론 시리즈
- K8 마이크로아키텍처 이후 마이크로아키텍처
3.2 SSE2
인텔
- 넷버스트 마이크로아키텍처 이후 마이크로아키텍처
- 아톰 시리즈
AMD
- K8 마이크로아키텍처 이후 마이크로아키텍처
트랜스메타
- 트랜스메타 에피션
VIA
3.3 SSE3
인텔
- 프레스캇
- 코어 마이크로아키텍처 이후 마이크로아키텍처
- 아톰 시리즈
AMD
- 애슬론 64 시리즈 E 스테핑
- K10 마이크로아키텍처 이후 마이크로아키텍처
VIA/Centaur
트랜스메타
- 트랜스메타 에피션 TM88xx
3.4 SSE4
인텔
- 코어 마이크로아키텍처 - SSE4.1 지원
- 네할렘 마이크로아키텍처 - SSE4.1, SSE4.2, POPCNT 명령어 지원
- 인텔 실버몬트 마이크로아키텍처 - SSE4.1, SSE4.2, POPCNT 명령어 지원
- 하스웰 마이크로아키텍처 이상 - SSE4.1, SSE4.2, POPCNT, LZCNT 명령어 지원
AMD
- 바르셀로나 프로세서 - SSE4a, POPCNT, LZCNT 명령어 지원
- 불도저 마이크로아키텍처 이상 - SSE4.1, SSE4.2, SSE4a, POPCNT, LZCNT 명령어 지원
- 밥캣 마이크로아키텍처 - SSE4a, POPCNT, LZCNT 명령어 지원
- 재규어 마이크로아키텍처 이상 - SSE4.1, SSE4.2, SSE4a, POPCNT, LZCNT 명령어 지원
VIA
- Nano (SSE4.1)
4 관련 항목
- ↑ 단정밀도 부동 소수점은 32비트이다. 고로 32비트 x 4 = 128비트.