CLMUL 명령 집합

CLMUL instruction set

CLMUL(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 알고리즘을 zlibpngcrush로 구현하는 데 사용되는 값을 포함하여 [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 기능 비트 중 하나를 테스트하여 확인할 수 있다.

참고 항목

참조

  1. ^ "Intel Software Network". Intel. Archived from the original on 2008-04-07. Retrieved 2008-04-05.
  2. ^ Shay Gueron (2011-04-13). "Intel Carry-Less Multiplication Instruction and its Usage for Computing the GCM Mode – Rev 2". Intel.
  3. ^ "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ" (PDF).
  4. ^ Vlad Krasnov (2015-07-08). "Fighting Cancer: The Unexpected Benefit Of Open Sourcing Our Code". CloudFlare. Retrieved 2016-09-04.
  5. ^ Johan De Gelas (2017-03-31). "The Intel Xeon E5 v4 Review: Testing Broadwell-EP With Demanding Server Workloads". Anandtech. p. 3.
  6. ^ "Slide detailing improvements of Jaguar over Bobcat". AMD. Retrieved August 3, 2013.
  7. ^ Dave Christie (6 May 2009). "Striking a balance". AMD Developer blogs. Archived from the original on 9 November 2013. Retrieved 2011-03-11.