SSE4

SSE4

SSE4(Streaming SIMD Extensions 4)는 인텔 Core 마이크로아키텍처AMD K10(K8L)에서 사용되는 SIMD CPU 명령어 세트입니다.2006년 9월 27일, 2006년 가을 인텔 개발자 포럼에서 발표되었습니다.백서[1]기재되어 있는 불명확한 내용이 기재되어 있습니다.또한 47개의 명령어에 대한 자세한 내용은 2007년 봄 베이징에서 개최된 인텔 개발자 포럼에서 [2]발표되었습니다.SSE4는 이전 세대의 인텔 64 및 IA-32 아키텍처 마이크로프로세서용으로 작성된 소프트웨어와 완전히 호환됩니다.기존의 모든 소프트웨어는 SSE4를 내장한 마이크로프로세서와 [3]SSE4를 내장한 기존 및 새로운 애플리케이션이 존재하는 경우 수정 없이 계속 올바르게 실행됩니다.

SSE4 서브셋

인텔 SSE4는 54개의 명령으로 구성되어 있습니다.47개의 명령으로 구성된 서브셋(일부 인텔 문서에서는 SSE4.1)이 Penryn에서 제공됩니다.또한 SSE4.2Nehalem 기반의 Core i7에서 처음 사용할 수 있습니다.이 서브셋은 나머지 7개의 명령으로 구성됩니다.인텔은 명령어 세트의 개발에 있어서 개발자의 피드백이 중요한 역할을 하고 있다고 믿고 있습니다.

ACD는 바르셀로나 기반의 프로세서를 시작으로 SSE4a 명령 세트를 도입했습니다.SSE4 명령어 세트에는 4개의 SSE4 명령어와 4개의 새로운 SSE 명령어가 포함되어 있습니다.이러한 순서는 SSE4.1을 지원하는 인텔 프로세서에 포함되어 있지 않습니다.AMD 프로세서는, 불도저 베이스의 FX 프로세서에서 인텔의 SSE4.1 및 SSE4.2(완전 SSE4 명령 세트)만을 서포트하고 있습니다.SSE4a에서는 정렬되지 않은 SSE 기능도 도입되었습니다.즉, 정렬되지 않은 로드 명령은 정렬된 주소의 정렬된 버전만큼 빠릅니다.또,[4] 메모리에 액세스 하는 부하가 없는 SSE 동작의 얼라인먼트 체크를 무효로 할 수도 있습니다.인텔은 나중에 Nehalem 프로세서에 정렬되지 않은SSE에 대해서도 같은 속도 향상을 도입했습니다만, [5]AVX까지 부하가 없는 SSE 명령에 의한 잘못 정렬된 액세스는 도입하지 않았습니다.

이름 혼동

현재 인텔 Core 2 프로세서 라인에 도입된SSE3 (보충 스트리밍 SIMD 확장 3)는 인텔이 SSE3이라는 별명을 내놓을 때까지 일부 미디어에서는 SSE4로 불리고 있었습니다.내부적으로 Merom New Instructions라고 불리는 인텔은 당초 이 명령어에 특별한 이름을 붙일 계획이 없었지만 일부 [6]언론인들은 이를 비판했습니다.인텔은 최종적으로 혼란을 해소하고 SSE4의 이름을 다음 명령어 세트 [7]확장용으로 남겨두었습니다.

인텔에서는, SSE4를 나타내는 마케팅 용어로 HD부스트라고 부릅니다.Boost)를 사용하고 [8]있습니다.

새로운 순서

SSE의 모든 이전 반복과는 달리 SSE4에는 멀티미디어 애플리케이션에 고유하지 않은 작업을 실행하는 명령이 포함되어 있습니다.이 명령어에는 일정한 필드에 의해 액션이 결정되는 명령어와 XMM0을 암묵적인 세 번째 오퍼랜드로 사용하는 명령어 세트가 있습니다.

이러한 명령 중 일부는 Penryn의 싱글 사이클 셔플 엔진에 의해 활성화됩니다.(셔플 조작은 레지스터 내에서 바이트를 재정렬합니다.)

SSE 4.1

이 명령어는 인텔 Core 마이크로아키텍처의 45 nm 축소판인 Penryn 마이크로아키텍처(architecture)에서 도입되었습니다.지원은 CPUID.01H를 통해 표시됩니다.ECX.SSE41[비트 19]플래그

설명 묘사
MPSADBW 
절대차이의 오프셋 합계를 8개씩 계산한다.즉00, x-y11 + x-y22 + x-y3301 + x-y + x-y1223 + x-y34 , ..., x-y07 + x-y1829 + x-y310 ). 이 연산은 HD 코덱따라서는 중요하며, 7회보다 [9]적은 사이클로 8×8 블록의 차이를 계산할 수 있습니다.3비트 즉시 피연산자의 1비트는 y..y인지104 y인지 나타냅니다0.y는14 수신처 오퍼랜드에서 사용해야 합니다.다른 2개는 x..x03, x4..x7, x..x8..x11 또는12 x..x15 는 소스에서 사용해야 합니다.
피민포스 
수신처의 최하위 부호 없는 16비트 워드를 발신기지에서 가장 작은 부호 없는 16비트 워드로 설정하고, 그 다음부터는 발신기지에서 해당 워드의 인덱스로 설정합니다.
PMULDQ 
패킹된 32비트 부호 "롱" 곱셈. 패킹된 4개의 정수 중 2개(1번째와 3번째)가 곱되어 2개의 패킹된 64비트 결과를 얻을 수 있습니다.
문제 
패킹된 32비트 부호 "저" 곱셈, 패킹된 4개의 정수 세트 곱셈으로 패킹된 32비트 결과를 얻을 수 있습니다.
DPPS, DPPD 
AOS(Array of Structures) 데이터용 도트 제품.이를 위해서는 4비트(DPPD의 경우 2비트)로 구성된 즉시 오퍼랜드가 필요합니다.입력 중 어느 엔트리를 곱하여 축적할지를 선택하기 위해 4비트(DPPD의 경우 2비트)로 구성됩니다.또한 출력의 적절한 필드에 0 또는 닷 곱을 넣을지 선택하기 위해 4비트(DPPD의 경우 2비트)가 필요합니다.
블렌드, 블렌드, 블렌드, 블렌드 VPD, PBLENDVB, PBLENDW 
즉시 오퍼랜드의 비트와 레지스터 XMM0의 비트를 기반으로(V 형식이 아닌 경우) 한 위치에 있는 요소를 다른 위치로 조건부 복사합니다.
PMINSB, PMAXSB, PMINUW,  PMAXUW, PMINUD, PMAXUD,  PMINSD, PMAXSD 
서로 다른 정수 오퍼랜드 유형에 대해 패킹된 최소/최대
라운드, 라운드, 라운드 PD, 라운드 
즉시 피연산자에 의해 지정된 네 가지 반올림 모드 중 하나를 사용하여 부동 소수점의 반올림 값을 정수로 등록합니다.
삽입, 핀 RB, 핀스/핀 RQ, 추출, PEXTRB, PEXTRD/PEXTRQ 
INSERTPS 및 PINSR 명령은 x86 레지스터 또는 메모리 위치에서 8, 16 또는 32비트를 읽고 즉시 피연산자가 제공하는 수신처 레지스터의 필드에 삽입합니다.EXPLATPS 및 PEXTR은 소스 레지스터에서 필드를 읽고 x86 레지스터 또는 메모리 위치에 삽입합니다.예를 들어 PEXTRD eax, [xmm0], 1; EXCLETPS [addr+4*eax], xmm1, 1은 xmm1의 첫 번째 필드를 xmm0의 첫 번째 필드에 의해 주어진 주소로 기억한다.
PMOVSXBW, PMOVZXBW, PMOVSXBD,  PMOVZXBD, PMOVSXBQ, PMOVZXBQ,  PMOVSXWD, PMOVZXWD, PMOVSXWQ,  PMOVZXWQ, PMOVSXDQ, PMOVZXDQ 
더 넓은 유형으로 확장/확장된 신호/제로
PTEST 
이는 피연산자 사이의 AND 결과로 Z 플래그를 설정하는 TEST 명령과 유사합니다.DEST AND SRC가 0인 경우 ZF가 설정됩니다.또한 (NOT DEST) AND SRC가 0인 경우 C 플래그를 설정합니다.

이는 SRC에 의해 마스크된 비트가 모두 설정되지 않은 경우 Z 플래그를 설정하고 SRC에 의해 마스크된 모든 비트가 설정되는 경우 C 플래그를 설정하는 것과 동일합니다.

PCMPEQQ 
쿼드워드(64비트)의 동일성 비교
패키지 
서명된 DWORD를 채도를 사용하여 서명되지 않은 WORD로 변환합니다.
동작하지 않다 
쓰기 콤비네이션 메모리 영역에서 SSE 레지스터로의 효율적인 읽기.메모리 버스에 접속되어 있는 주변기기에서 결과를 취득할 때 편리합니다.

SSE4.2

SSE4.2에는 STTNI(String and Text New Instructions)[10]가 추가되어 있습니다.이 명령어는 16바이트의 2개의 오퍼랜드에서 동시에 문자 검색과 비교를 실행하는 몇 가지 새로운 명령입니다.XML [11]문서의 해석 속도를 높이기 위해 설계되었습니다.또한 특정 데이터 전송 프로토콜에 사용되는 주기적 중복성 검사를 계산하기 위한 CRC32 명령을 추가했습니다.이러한 순서는, Nehalem 베이스의 인텔 Core i7 제품 라인에서 최초로 실장되어 SSE4 명령 세트를 완성했습니다.지원은 CPUID.01H를 통해 표시됩니다.ECX.SSE42[비트 20]플래그

설명 묘사
CRC32 
다항식 0x11을 사용하여 CRC32C 값 누적EDC6F41(또는 상위 비트가 없는 경우 0x1EDC6F41).[12][13]
PCMPESTRI 
포장된 명시적 길이 문자열 비교, 반환 색인
PCMPESTRM 
포장된 명시적 길이 문자열 비교, 반환 마스크
PCMPISTRI 
패킹된 비교 암묵적 길이 문자열, 반환 색인
PCMPISTRM 
Packed Implicit Length 문자열, 리턴 마스크 비교
PCMPGTQ 
다음 값보다 큰 패킹된 서명된 64비트 데이터 비교

POPCNT 및 LZCNT

이러한 명령어는 SSE 레지스터가 아닌 정수로 동작합니다.이는 SIMD 명령어가 아니라 동시에 표시되기 때문입니다.또한 AMD에 의해 SSE4a 명령어세트와 함께 도입되었지만 지원을 나타내기 위해 전용 CPUID 비트와 함께 별도의 확장자로 계산됩니다.인텔은 POPCNT를 Nehalem 마이크로아키텍처부터, LZCNT는 Haswell 마이크로아키텍처부터 실장하고 있습니다.AMD는 Barcelona 마이크로아키텍처부터 양쪽 모두를 구현하고 있습니다.

AMD는 이 명령 을 ABM(Advanced Bit Manipulation)이라고 부릅니다.

설명 묘사
POPNT 
모집단 카운트(1로 설정된 비트 수).지원은 CPUID.01H를 통해 표시됩니다.ECX.POPCNT[[14]비트23] 플래그
LZCNT 
선두 제로 카운트지원은 CPUID.800001H를 통해 표시됩니다.ECX.ABM [[15]Bit 5]플래그

lzcnt의 부호화는 bsr(비트스캔 리버스)와 비슷합니다.이것은, Haswell 이전의 인텔 CPU 등, lzcnt 를 서포트하고 있지 않는 CPU 로 lzcnt 가 실행되고 있는 경우, lzcntbsr 의 결과치는 다르지만, 무효인 명령 에러가 발생하는 대신에 bsr 조작을 실행합니다.

후행 0은 bsf(비트스캔 포워드) 또는 tzcnt 명령을 사용하여 카운트할 수 있습니다.

SSE4a

SSE4a 명령 그룹은 AMD의 바르셀로나 마이크로아키텍처에 도입되었습니다.이러한 순서는, 인텔 프로세서에서는 이용할 수 없습니다.지원은 CPUID.800001H를 통해 표시됩니다.ECX.SSE4A [[15]Bit 6]플래그

설명 묘사
엑스트라/삽입 
복합 마스크 시프트 [16]명령.
동작/동작하다 
스칼라 스트리밍 스토어 명령.[17]

지원 CPU

  • 인텔(R)
    • Silvermont 프로세서(SSE4.1, SSE4.2 및 POPCNT 지원)
    • Goldmont 프로세서(SSE4.1, SSE4.2 및 POPCNT 지원)
    • Goldmont Plus 프로세서 (SSE4.1, SSE4.2 및 POPCNT 지원)
    • Tremont 프로세서(SSE4.1, SSE4.2 및 POPCNT 지원)
    • Penryn 프로세서 (SSE 4.1 지원, Pentium 듀얼코어Celeron 제외)
    • Nehalem 프로세서 Westmere 프로세서(SSE4.1, SSE4.2 및 POPCNT 지원, Pentium 및 Celeron 제외)
    • Sandy Bridge 프로세서 이후 (SSE4.1, SSE4.2 및 POPCNT 지원, Pentium 및 Celeron 포함)
    • Haswell 프로세서 이후 (SSE4.1, SSE4.2, POPCNT 및 LZCNT 지원)
  • AMD
    • K10 기반 프로세서(SSE4a, POPCNT 및 LZCNT 지원)
    • "Cat" 저전력 프로세서
      • Bobcat 기반 프로세서(SSE4a, POPCNT 및 LZCNT 지원)
      • Jaguar 기반 프로세서 이후 (SSE4a, SSE4.1, SSE4.2, POPCNT 및 LZCNT 지원)
      • Puma 기반 프로세서 이후 (SSE4a, SSE4.1, SSE4.2, POPCNT 및 LZCNT 지원)
    • '중장비' 프로세서(SSE4a, SSE4.1, SSE4.2, POPCNT 및 LZCNT 지원)
    • Zen 기반 프로세서(SSE4a, SSE4.1, SSE4.2, POPCNT 및 LZCNT 지원)
    • Zen+ 기반 프로세서(SSE4a, SSE4.1, SSE4.2, POPCNT 및 LZCNT 지원)
    • Zen2 기반 프로세서(SSE4a, SSE4.1, SSE4.2, POPCNT 및 LZCNT 지원)
    • Zen3 기반 프로세서(SSE4a, SSE4.1, SSE4.2, POPCNT 및 LZCNT 지원)
  • 비아
    • Nano 3000, X2, QuadCore 프로세서 (SSE 4.1 지원)
    • Nano QuadCore C4000 시리즈 프로세서 (SSE4.1, SSE4.2 지원)
    • Eden X4 프로세서 (SSE4.1, SSE4.2 지원)
  • 자옥신
    • ZX-C 프로세서 이후 (SSE4.1, SSE4.2 지원)

레퍼런스

  1. ^ 인텔 스트리밍 SIMD 확장 4 (SSE4) 명령 세트 이노베이션 2009년 5월 30일 인텔 Wayback Machine에서 아카이브되었습니다.
  2. ^ 인텔Wayback Machine에서 2021년 3월 8일에 아카이브된 45nm 차세대 인텔 Core Microarchitecture용 인텔 SSE4 튜닝.
  3. ^ "Intel SSE4 Programming Reference" (PDF). Archived (PDF) from the original on February 15, 2020. Retrieved December 26, 2014.
  4. ^ ""Barcelona" Processor Feature: SSE Misaligned Access". AMD. Archived from the original on August 9, 2016. Retrieved March 3, 2015.
  5. ^ "Inside Intel Nehalem Microarchitecture". Archived from the original on April 2, 2015. Retrieved March 3, 2015.
  6. ^ 2013년 10월 15일 Wayback Machine, Daily에서 아카이브된 "Conroe"에 대한 나의 경험기술
  7. ^ 2011년 11월 24일 인텔 웨이백 머신에서 아카이브된 세계에서 가장 인기 있는 프로세서 아키텍처 확장
  8. ^ "Intel - Data Center Solutions, IOT, and PC Innovation". Intel. Archived from the original on February 7, 2013. Retrieved September 17, 2009.
  9. ^ 인텔 스트리밍 SIMD Extensions 4 (인텔 SSE4)사용한 모션 견적 2018년 6월 16일 인텔 Wayback Machine에서 아카이브 완료.
  10. ^ "Schema Validation with Intel® Streaming SIMD Extensions 4 (Intel® SSE4)". Archived from the original on June 17, 2018. Retrieved February 6, 2012.
  11. ^ "XML Parsing Accelerator with Intel® Streaming SIMD Extensions 4 (Intel® SSE4)". Archived from the original on June 17, 2018. Retrieved February 6, 2012.
  12. ^ 인텔 SSE4 프로그래밍 레퍼런스 2020년 2월 15일 Wayback Machine 페이지 61에서 아카이브 완료.CRC32C 다항식에 대한 자세한 내용은 RFC 3385 Archived June 19 at the Wayback Machine을 참조하십시오.
  13. ^ Nehalem CRC32 명령을 사용한 고속 병렬 CRC 계산 - Dobbs 박사, 2011년 4월 12일
  14. ^ 인텔 ® 64IA-32 아키텍처 소프트웨어 개발자 매뉴얼, Volume 2B: Instruction Set Reference, N–Z Archived 2011년 3월 8일 Wayback Machine.
  15. ^ a b "AMD CPUID Specification" (PDF). Archived (PDF) from the original on November 1, 2013. Retrieved October 30, 2013.
  16. ^ Rahul Chaturvedi (17 September 2007). ""Barcelona" Processor Feature: SSE4a Instruction Set". Archived from the original on 25 October 2013.
  17. ^ Rahul Chaturvedi (2 October 2007). ""Barcelona" Processor Feature: SSE4a, part 2". Archived from the original on 25 October 2013.
  18. ^ "AMD FX-Series FX-6300 - FD6300WMW6KHK / FD6300WMHKBOX". Archived from the original on August 17, 2017. Retrieved October 9, 2015.

외부 링크