CLMUL 명령 집합
CLMUL instruction setCLMUL(Carre-less Multipplication)은 인텔과 AMD의 마이크로프로세서가 사용하는 x86 명령어 세트의 확장으로, 인텔이 2008년[1] 3월 제안해 2010년 초 발표한 인텔 웨스트미어 프로세서에서 사용할 수 있게 했다.Mathematically, the instruction implements multiplication of polynomials over the finite field GF(2) where the bitstring represents the polynomial .CLMUL 지시는 또한 전통적인 명령어 집합보다 더 큰 유한장 GF(2k)의 밀접하게 관련된 곱셈을 보다 효율적으로 수행할 수 있도록 한다.[2]
이러한 지침의 한 가지 용도는 한정된 필드 GF(2k) 곱셈에 의존하는 Galois/Counter Mode에서 블록 암호화를 수행하는 애플리케이션의 속도를 향상시키는 것이다.또 다른 애플리케이션은 LZ77 슬라이딩 윈도우 DEFLAT 알고리즘을 zlib와 pngcrush로 구현하는 데 사용되는 값을 포함하여 [3]CRC 값의 빠른 계산이다.[4]
ARMv8은 또한 CLMUL의 버전을 가지고 있다. SPARC는 그들의 버전을 XOR 곱셈이라고 부른다.
새 지시사항
이 지침은 두 64비트 값의 128비트 무반주 제품을 계산한다.목적지는 128비트 XMM 레지스터다.소스는 다른 XMM 레지스터 또는 메모리일 수 있다.즉시 피연산자는 128비트 피연산자 중 어느 반을 곱할지를 지정한다.즉시 피연산자의 특정 값을 지정하는 연상키도 정의된다.
지시 | opcode | 설명 |
---|---|---|
PCLMULQDQ xmmreg,xmmrm,imm | [rmi: 66 0f 3a 44 /r ib] | 유한 필드 GF(2k)에 대해 두 개의 64비트 다항식 곱셈을 수행한다. |
PCLMULLQLQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 00] | 두 레지스터의 낮은 반쪽을 곱하십시오. |
PCLMULHQLQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 01] | 목적지 레지스터의 상위 절반에 소스 레지스터의 하위 절반을 곱하십시오. |
PCLMULLQHQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 10] | 목적지 레지스터의 낮은 절반에 소스 레지스터의 높은 절반을 곱하십시오. |
PCLMULHQHQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 11] | 두 레지스터의 높은 반쪽을 곱하십시오. |
EBX 벡터화된 버전(VPCLMULQDQ)은 AVX-512에서 볼 수 있다.
CLMUL 명령 집합이 있는 CPU
CLMUL 명령 집합의 존재는 CPU 기능 비트 중 하나를 테스트하여 확인할 수 있다.
참고 항목
참조
- ^ "Intel Software Network". Intel. Archived from the original on 2008-04-07. Retrieved 2008-04-05.
- ^ Shay Gueron (2011-04-13). "Intel Carry-Less Multiplication Instruction and its Usage for Computing the GCM Mode – Rev 2". Intel.
- ^ "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ" (PDF).
- ^ Vlad Krasnov (2015-07-08). "Fighting Cancer: The Unexpected Benefit Of Open Sourcing Our Code". CloudFlare. Retrieved 2016-09-04.
- ^ Johan De Gelas (2017-03-31). "The Intel Xeon E5 v4 Review: Testing Broadwell-EP With Demanding Server Workloads". Anandtech. p. 3.
- ^ "Slide detailing improvements of Jaguar over Bobcat". AMD. Retrieved August 3, 2013.
- ^ Dave Christie (6 May 2009). "Striking a balance". AMD Developer blogs. Archived from the original on 9 November 2013. Retrieved 2011-03-11.