CLMUL 명령어 집합

무자리수 곱셈(Carry-less Multiplication, CLMUL)은 인텔과 AMD의 마이크로프로세서에 사용되는 X86 명령어 집합의 확장으로, 2008년 3월 인텔이 제안했고 2010년 초에 발표된 인텔 웨스트미어 프로세서에서 사용할 수 있게 되었다. 수학적으로 이 명령어는 비트열 이 다항식 을 나타내는 유한체 GF(2)에 대한 다항식 곱셈을 구현한다. CLMUL 명령어는 또한 전통적인 명령어 집합보다 훨씬 더 효율적으로 밀접하게 관련된 더 큰 유한체 GF(2k)의 곱셈을 구현할 수 있게 해준다.

이 명령어들의 한 가지 용도는 유한체 GF(2k) 곱셈에 의존하는 갈루와/카운터 모드에서 블록 암호화 애플리케이션의 속도를 향상시키는 것이다. 또 다른 적용 분야는 CRC 값의 빠른 계산인데, 여기에는 Zlib 및 pngcrush에서 LZ77 슬라이딩 윈도우 DEFLATE 알고리즘을 구현하는 데 사용되는 CRC 값도 포함된다.

ARMv8에도 CLMUL 버전이 있다. SPARC는 그들의 버전을 "XOR 곱셈"을 의미하는 XMULX라고 부른다.

새로운 명령어

이 명령어는 두 개의 64비트 값에 대한 128비트 무자리수 곱셈을 계산한다. 대상은 128비트 XMM 레지스터이다. 소스는 다른 XMM 레지스터 또는 메모리일 수 있다. 즉시 피연산자는 128비트 피연산자의 어느 절반이 곱해지는지를 지정한다. 즉시 피연산자의 특정 값을 지정하는 니모닉도 정의되어 있다.

명령어 옵코드 설명
PCLMULQDQ xmmreg,xmmrm,imm[rmi: 66 0f 3a 44 /r ib] 유한체 GF(2)[X]에 대한 두 개의 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] 두 레지스터의 상위 절반을 곱한다.

EVEX 벡터화 버전(VPCLMULQDQ)은 AVX-512에서 볼 수 있다.

CLMUL 명령어 집합을 갖춘 CPU

CLMUL 명령어 집합의 존재 여부는 CPU 기능 비트 중 하나를 테스트하여 확인할 수 있다.

같이 보기

각주

  1. ↑ “Intel Software Network”. Intel. 2008년 4월 7일에 원본 문서에서 보존된 문서. 2008년 4월 5일에 확인함.
  2. ↑ Shay Gueron; Michael E. Kounavis (2014년 4월 20일). “Intel Carry-Less Multiplication Instruction and its Usage for Computing the GCM Mode – Rev 2.02” (PDF). Intel. 2019년 8월 6일에 원본 문서에서 보존된 문서.
  3. ↑ “Fast CRC Computation for Generic Polynomials Using PCLMULQDQ” (PDF).
  4. ↑ Vlad Krasnov (2015년 7월 8일). “Fighting Cancer: The Unexpected Benefit Of Open Sourcing Our Code”. CloudFlare. 2016년 9월 4일에 확인함.
  5. ↑ Johan De Gelas (2017년 3월 31일). “The Intel Xeon E5 v4 Review: Testing Broadwell-EP With Demanding Server Workloads”. 《Anandtech》. 3쪽. 2019년 2월 9일에 원본 문서에서 보존된 문서. 2025년 8월 16일에 확인함.
  6. ↑ “Slide detailing improvements of Jaguar over Bobcat”. AMD. 2012년 8월 29일. 2013년 8월 3일에 확인함.
  7. ↑ Dave Christie (2009년 5월 6일). “Striking a balance”. AMD Developer blogs. 2011년 3월 11일에 확인함.