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비트 피연산자의 어느 절반이 곱해지는지를 지정한다. 즉시 피연산자의 특정 값을 지정하는 니모닉도 정의되어 있다.
 명령어 옵코드 설명    유한체 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
 인텔
 웨스트미어 프로세서 (2010년 3월).
 샌디브리지 프로세서
 아이비브리지 프로세서
 하스웰 프로세서
 브로드웰 프로세서 (향상된 처리량과 낮은 지연 시간)
 스카이레이크 (및 이후) 프로세서
 골드몬트 프로세서
 AMD:
 재규어 기반 프로세서 및 이후
 푸마 기반 프로세서 및 이후
 "Heavy Equipment" 프로세서
 불도저 기반 프로세서
 파일드라이버 기반 프로세서
 스팀롤러 기반 프로세서
 엑스카베이터 기반 프로세서 및 이후
 젠 프로세서
 젠+ 프로세서
 젠 2 (및 이후) 프로세서

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

 같이 보기 
 유한체 연산
 AES-NI
 FMA3 명령어 집합
 FMA4 명령어 집합
 AVX 명령어 집합

 각주 

분류:X86 아키텍처
분류:X86 명령어