SSE2
SSE2SSE2(Streaming SIMD Extensions 2)는 인텔이 2000년에 Pentium 4의 초기 버전과 함께 처음 선보인 인텔 SIMD(Single Instruction, Multiple Data) 프로세서 보조 명령 세트 중 하나입니다.이전 SSE 명령 세트를 확장하여 MMX를 완전히 대체하는 것을 목적으로 하고 있습니다.인텔은 2004년에 SSE3를 작성하기 위해 SSE2를 확장했습니다.SSE2는 SSE에 144개의 새로운 명령을 추가했는데, SSE는 70개의 명령어를 가지고 있다.경쟁 칩 제조사인 AMD는 2003년 Opteron 및 Athlon 64 범위의 AMD64 64비트 CPU를 출시하면서 SSE2 지원을 추가했습니다.
특징들
대부분의 SSE2 명령어는 MMX에서도 볼 수 있는 정수 벡터 연산을 구현합니다.MMX 레지스터 대신 XMM 레지스터를 사용합니다.XM 레지스터는 폭이 넓어 특수한 애플리케이션에서 성능을 대폭 향상시킵니다.MMX를 SSE2로 대체하는 또 다른 장점은 x87 FPU와 레지스터 공간을 공유하기 때문에 MMX에 있는 x87 명령을 발행할 때 모드 전환 패널티를 피할 수 있다는 것입니다.또한 SSE2는 배 정밀도 데이터 타입에 대한 지원을 추가하여 SSE 명령 세트의 부동소수점 벡터 연산을 보완합니다.
기타 SSE2 확장 기능에는 무한한 정보 스트림을 처리할 때 주로 캐시 오염을 최소화하기 위한 캐시 제어 명령 집합과 정교한 숫자 형식 변환 명령 보완 기능이 있습니다.
AMD는 AMD64(x86-64) 플랫폼에 SSE2를 구현하기 위해 8개의 레지스터를 추가하여 총 16개의 레지스터를 구현합니다(XMM0~XMM15).이러한 추가 레지스터는 64비트모드로 동작하고 있는 경우에만 표시됩니다.인텔은 2004년에 x86-64 아키텍처(인텔의 용어로는 「인텔 64」)의 서포트의 일환으로서 이러한 추가 레지스터를 채용했습니다.
x87 FPU와 SSE2의 차이점
FPU(x87) 명령은 수치적으로 불안정한 알고리즘의 반올림 오류를 최소화하기 위해 기본적으로 80비트의 정밀도로 중간 결과를 계산함으로써 더 높은 정밀도를 제공합니다(IEE 754 설계 근거 및 참조 참조 참조).단, x87 FPU는 스칼라 유닛에 불과하지만 SSE2는 오퍼랜드의 작은 벡터를 병렬로 처리할 수 있습니다.
x87용으로 설계된 코드가 낮은 정밀도 2배 정밀도 SSE2 부동 소수점에 이식된 경우, 산술 연산 또는 입력 데이터셋의 특정 조합은 측정 가능한 수치 편차를 초래할 수 있으며, 이는 예를 들어 계산 결과를 차이에서 생성된 결과와 비교해야 하는 경우 재현 가능한 과학적 계산에서 문제가 될 수 있습니다.기계 아키텍처를 대여합니다.이와 관련된 문제는 SSE2에서 구현된 이중 및 단일 정밀도 형식과 비교하여 언어 표준 및 컴파일러가 x87 80비트 레지스터의 처리에 일관성이 없었다는 것입니다.즉, 확장 정밀도 중간값을 이중 정밀도 변수로 반올림하는 것입니다.는 완전히 정의되지 않았으며 레지스터가 메모리에 유출된 경우 등 구현 세부사항에 따라 달라집니다.
MMX와 SSE2의 차이점
SSE2는 XMM 레지스터에서 작동하도록 MMX 명령을 확장합니다.따라서 기존의 모든 MMX 코드를 동등한 SSE2로 변환할 수 있습니다.SSE2 레지스터의 길이는 MMX 레지스터의 2배이므로 이를 위해 루프 카운터 및 메모리액세스를 변경해야 할 수 있습니다.단, XMM에 대한 8바이트 로드 및 저장을 사용할 수 있으므로 이는 엄밀하게 필요하지 않습니다.
1개의 SSE2 명령어는 MMX 명령의 2배의 데이터로 동작할 수 있지만 퍼포먼스는 크게 향상되지 않을 수 있습니다.두 가지 주요 이유는 16바이트 경계에 맞지 않는 메모리 내의 SSE2 데이터에 액세스하면 큰 패널티가 발생할 수 있으며, 이전 x86 구현에서의 SSE2 명령의 throughput은 MMX 명령의 절반이었습니다.인텔은 SSE3에 미정렬 데이터에 대한 액세스의 오버헤드를 경감하고 부하의 전체적인 퍼포먼스를 향상시키는 명령을 추가하여 첫 번째 문제를 해결했습니다.또한 Core 2 Duo 이후의 제품에서는 코어 마이크로아키텍처의 실행 엔진을 확장함으로써 마지막 문제를 해결했습니다.
MMX 및 x87 레지스터 파일은 서로 별칭이므로 MMX를 사용하면 x87 명령이 원하는 대로 작동하지 않습니다.MMX가 사용되면 프로그래머는 emms 명령(C: _mm_empty())을 사용하여 x87 레지스터 파일로 작업을 복원해야 합니다.일부 운영 체제에서는 x87이 그다지 많이 사용되지 않지만 pow()와 같이 매우 정밀도가 필요한 일부 중요한 영역에서 여전히 사용될 수 있습니다.이 경우 에밀리 방출에 실패하여 파손된 부동소수점 상태가 수백만 개의 명령에서 검출되지 않고 최종적으로 부동소수점 루틴이 실패하여 NaN이 반환될 수 있습니다.이 문제는 MMX 코드에 로컬로 나타나 있지 않기 때문에 버그를 검출하고 수정하는 데 시간이 많이 걸릴 수 있습니다.SSE2는 이 문제가 없고 보통 스루풋이 훨씬 향상되고 64비트코드로 더 많은 레지스터를 제공하기 때문에 거의 모든 벡터화 작업에 적합합니다.
컴파일러 사용 현황
2000년에 처음 도입되었을 때 SSE2는 소프트웨어 개발 툴에서는 지원되지 않았습니다.예를 들어, Microsoft Visual Studio 프로젝트에서 SSE2를 사용하려면 프로그래머가 수동으로 인라인 어셈블리를 작성하거나 외부 소스에서 객체 코드를 가져와야 했습니다.이후 Visual C++ 프로세서 팩은 Visual C++ 및 MASM에 SSE2 지원을 추가했습니다.
인텔 C++ 컴파일러는 수동으로 코드화된 어셈블리를 사용하지 않고 SSE4, SSE3, SSE2, SSE 코드를 자동으로 생성할 수 있습니다.
GCC 3 이후 타깃이 SSE/SSE2 스칼라 코드를 자동으로 생성할 수 있습니다.SSE/SSE2의 자동 벡터화는 GCC 4 이후 추가되었습니다.
Sun Studio Compiler Suite는 컴파일러 플래그 -xvector=simd를 사용하는 경우에도 SSE2 명령을 생성할 수 있습니다.
Microsoft Visual C++ 2012 이후 SSE2 명령을 생성하는 컴파일러 옵션은 기본적으로 켜져 있습니다.
CPU 지원
SSE2는 x86 명령어세트에 기반한 IA-32 아키텍처의 확장입니다.따라서 SSE2를 포함할 수 있는 것은 x86 프로세서뿐입니다.AMD64 아키텍처는 IA-32를 호환성 모드로 지원하며 SSE2를 [1][2]사양에 포함합니다.또한 XMM 레지스터의 수를 2배로 늘려 성능을 향상시킵니다.SSE2는 Windows[3] 8([4]및 그 이후) 또는 Microsoft Office 2013(및 그 이후)을 인스톨 하기 위한 요건이기도 합니다.
SSE2를 지원하는 IA-32 CPU는 다음과 같습니다.
- Intel NetBurst 기반 CPU (Pentium 4, Xeon, Celeron, Pentium D, Celeron D)
- 인텔 Pentium M 및 Celeron M
- 인텔 ATOM
- AMD Athlon 64
- 트랜스메타 에피세온
- VIA C7
다음 IA-32 CPU는 SSE2가 개발된 후 출시되었지만 구현되지 않았습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ Matz, Michael; Hubicka, Jan; Jaeger, Andreas; Mitchell, Mark (January 2010). "System V Application Binary Interface - AMD64 Architecture Processor Supplement - Draft Version 0.99.4" (PDF). Retrieved April 26, 2013.[영구 데드링크]
- ^ Fog, Agner. "Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms" (PDF). Archived (PDF) from the original on April 8, 2013. Retrieved April 26, 2013.
- ^ "DirectXMath Programming Guide/Library Internals". Archived from the original on July 2, 2019. Retrieved July 2, 2019.
- ^ Microsoft Corporation. "What is PAE, NX, and SSE2 and why does my PC need to support them to run Windows 8 ?". Archived from the original on April 11, 2013. Retrieved March 19, 2013.