스트리밍 SIMD 확장: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
잔글편집 요약 없음
Klutzy (토론 | 기여)
이상한 문장들 다듬음
1번째 줄:
'''스트리밍 SIMD 확장''' (SSE)은 [[x86]] 아키텍처에 대한 [[SIMD]] (단일 명령, 다중 데이터) [[명령어 집합]] 확장이며, [[인텔]]이 개발하여 1999년에 [[펜티엄 III]] 시리즈 프로세서에 도입하였다. 이 기능은 1998년 등장한 [[AMD]]사의 [[3D나우!]] 기술에 대응한 것이며,대응한다. SSE는 70가지의 새로운 명령어를명령어와 포함하고추가적인 레지스터로 구성되며, 명령어의 대부분은 [[부동 소수점]]에 대한 있다연산이다.
 
SSE는 [[펜티엄 III]] 코드코드명 이름Katmai로 Katmai에서알려져 비롯하여,있을 원래시기에는 '''KNI ('''(Katmai New Instructions'')로도 알려져 있었다. Katmai 프로젝트를 진행하는 동안 인텔은 이 프로젝트를 초기의 제품 라인(특히 [[펜티엄 II]])과 구별할 방도를 찾고 있었다. AMD는 [[애슬론 XP]] 프로세서를 시작으로 마침내 SSE 명령어에 대한 지원을 추가하였다불렸다. 나중에이후 이 이름은 '''ISSE'''(Internet Streaming SIMD Extensions)로 바뀌었다.정해졌었으며, 그 뒤에이후 SSE로 이름이 바뀌었다변경되었다.
 
== 레지스터 ==
인텔은 일반적으로 최초의 [[IA-32]] SIMD의 결과인 [[MMX]]에 실망하였다. MMX는 기본적으로 두 가지 문제가 있었다. 기존의 [[부동 소수점]] 레지스터를 다시 사용하여 [[중앙 처리 장치|CPU]]가 [[부동 소수점]]과 SIMD 데이터를 동시에 활용하지 못하게 만들었으며, 또 [[정수]]에서만 동작하였다.
 
SSE는 x86 아키텍처에서 XMM0~XMM7의 8개의 128비트 레지스터를 추가한다. 또한 [[x86-64]]에서는 XMM8~XMM15의 8개의 레지스터가 추가되었다(단, 이 레지스터는 64비트 모드에서만 사용가능하다). 추가적으로, 32비트 레지스터 MXCSR는 SSE 명령어의 상태 및 제어에 사용된다.
== 레지스터 ==
SSE는 처음에 XMM0부터 XMM7까지 여덟개의 새로운 128비트 레지스터를 추가하였다. 이후 AMD의 [[x86-64]] 확장과 인텔은 XMM8부터 XMM15까지 8개의 레지스터를 추가하였다. 여기에 새로운 32비트 제어/상태 레지스터인 MXCSR이 있다. 모든 16개의 128비트 XMM 레지스터는 64비트 동작 모드에서만 접근 가능하다.
[[그림:XMM registers.png|right|220px]]
 
SSE는 XMM 레지스터의 자료구조로 4개의 32비트 단정도 부동 소수점을 사용했다. 즉, 하나의 레지스터에 4개의 값이 들어가는 형태였다. SSE에서는 정수 계산을 지원하지 않는다. 이것은 [[MMX]] 명령어를 사용하는 방식으로 극복이 가능했다. 또한, SSE2부터는 SSE를 확장하여 다음의 자료구조를 지원한다.
각각의 레지스터는 4개의 32비트 [[단밀도]](Single precision) 부동소수점 수, 두개의 64비트 [[배밀도]](Double precision) 부동소수점 수, 4개의 32비트 정수, 8개의 16비트 단 정수, 16개의 8비트 바이트나 글자로 구성된다. 정수 처리를 위해서는 부호가 있거나 없는 정수용 명령어가 있다. 정수 [[SIMD]] 처리는 8개의 64비트 MMX레지스터로 여전히 실행될 수 있다.
* 2개의 64비트 배정도 부동 소수점
 
* 2개의 64비트 정수
이러한 128비트 레지스터들은 운영 체제가 반드시 테스크 스위치 간에 보호를 해야하는 추가적인 프로그램 상태이기 때문에 [[운영 체제]]가 명시적으로 활성화시키지 전까지는 기본적으로 비활성화된다. 이말은 모든 [[x87]]과 SSE 레지스터 상태들은 한번에 저장할 수 있는 확장 명령어쌍인 FXSAVE와 FXSTOR 명령어를 OS가 어떻게 사용해야하는지 알아야 한다는 것이다. 이러한 사항은 모든 주요 IA-32 운영 체제에서 바로 지원되었다.
* 4개의 32비트 정수
* 8개의 16비트 정수
* 16개의 8비트 정수
 
SSE를 처음 지원한 [[펜티엄 III]]는 SSE와 [[부동 소수점 장치|FPU]]를 동시에 사용할 수 없도록 만들어졌다. 이러한 구조는 [[명령어 파이프라인]] 효율성을 떨어뜨렸다.
SSE는 부동소수점을 지원하기때문에 MMX보다 더 유용성이 크다. SSE2의 정수 지원은 SSE를 더 유연하게 만든다. 반면에 MMX가 부가적인면은 있지만 SSE처리와 함께 병렬로 처리되는 것은 경우에 따라서는 성능의 향상을 가져온다.
 
XMM 레지스터는 태스크 스위치 시에 값을 보존해야 하는 대상이기 때문에, [[운영 체제]]가 이 레지스터를 사용하도록 명시적으로 활성화하기 전까지는 사용이 불가능하다. 다시 말하면, 운영 체제가 SSE 레지스터를 보존하는 명령어인 FXSAVE와 FXSTOR를 사용할 수 있어야 한다는 의미이다. 이러한 지원은 주요 IA-32 운영 체제에서 빠르게 추가되었다.
[[펜티엄 III]]에서부터 SSE를 지원하였으며 SSE와 FPU과 실행 자원을 공유하였다. 컴파일된 애플리케이션은 차례 차례로 [[부동 소수점 장치|FPU]]과 SSE명령어를 번갈아 가며 사용할 수 있었지만 FPU과 SSE 명령어를 동시에 처리하지는 않았다. 이 제한은 [[명령어 파이프라인|파이프라인]]의 효율성을 감소시켰으나 독립된 XMM 레지스터는 명시적으로 MMX와 부동소수점 모드 전환시에 성능에 타격없이 SIMD와 스칼라 부동소수점 처리를 혼합하여 처리하는 것을 가능하게 하였다.
 
== SSE 명령어 ==