SSE3
인텔 코드이름 프레스콧 신규 명령어(Prescott New Instructions)로 알려진 SSE3는 IA-32용 3번째 SSE명령어 집합이다. 인텔은 SSE3를 펜티엄 4 CPU인 프레스콧과 함께 2004년 초에 발표를 하였다. 2005년 4월에 AMD는 애슬론 64 CPU의 버전 E(베니스와 샌 디에고)에서 SSE3의 일부를 발표하였다. x86 플랫폼에서의 이전 SIMD 명령어 집합은 시간순으로 MMX, 3DNow! (AMD에 의해 개발), SSE 그리고 SSE2이다.
SSE3는 SSE2 대비 13개의 새로운 명령어가 포함되어 있다.
변경 사항
편집가장 주목할 만한 변경은 모든 이전 SSE명령어들이 다소 엄격히 수직적인 동작인 것에 대비해 레지스터에서 수평적으로 동작할 수 있는 기능이다. 좀 더 구체적으로, 단일 레지스터에 저장되어 있는 여러 값들을 더하고 빼기 위한 명령어들이 추가되었다. 이러한 명령어들은 여러 디지털 신호 처리와 3D처리를 단순화한다. 전역 Rounding 모드의 변경없이 부동소수점 값을 정수로 바꾸는 명령어도 포함되었다. 이것으로 파이프라인에서의 처리지연을 피할 수 있게 되었다. 마지막으로 LDDQU를 포함한다. 이것은 캐시라인 경계를 넘는 Load가 넷버스트 아키텍처에서 더 뛰어난 성능을 발휘하도록 하는 정렬되지 않은 정수 벡터 로드(misaligned integer vector load)의 대체이다.
SSE3를 지원하는 CPU
편집신규 명령어
편집공통 명령어
편집산술
- 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 }
AOS ( Array Of Structures )
- HADDPD - (Horizontal-Add-Packed-Double)
- 입력: { A0, A1 }, { B0, B1 }
- 출력: { A0 + A1, B0 + B1 }
- HADDPS (Horizontal-Add-Packed-Single)
- 입력: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
- 출력: { A0 + A1, A2 + A3, B0 + B1, B2 + B3 }
- HSUBPD - (Horizontal-Subtract-Packed-Double)
- 입력: { A0, A1 }, { B0, B1 }
- 출력: { A0 - A1, B0 - B1 }
- HSUBPS - (Horizontal-Subtract-Packed-Single)
- 입력: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
- 출력: { A0 - A1, A2 - A3, B0 - B1, B2 - B3 }
- LDDQU – 위에 언급되었듯이, 이것은 정렬되지 않는 정수 벡터 로드의 대체이며 비디오 압축에 유용함.
- MOVDDUP, MOVSHDUP, MOVSLDUP – 복소수에 사용되며 소리와 같은 파형 계산에 유용함.
- FISTTP – 옛 x87 FISTP 명령어와 같지만 부동소수점 제어 레지스터의 라운딩 모드 설정을 무시하며 대신 "chop" (절단) 모드를 사용한다. C언어와 같은 곳에서는 부동소수점을 정수로 변환시 일반적으로 절단을 한다. 이때 많은 시간이 소요되는 제어 레지스터의 로딩과 리로딩을 생략해준다.
인텔 명령어
편집- MONITOR, MWAIT – 하이퍼 스레딩을 지원하는 프로세서가 더 빠르게 실행하도록 멀티 스레드 애플리케이션을 최적화 시켜준다.
같이 보기
편집외부 링크
편집- (영어) SSE3 Overview by Intel
- (영어) X-bit Labs