Carry-less Multiplication ( CLMUL ) es una extensión del conjunto de instrucciones x86 utilizado por microprocesadores de Intel y AMD que fue propuesto por Intel en marzo de 2008 [1] y disponible en los procesadores Intel Westmere anunciados a principios de 2010. Matemáticamente, la instrucción implementa la multiplicación de polinomios sobre el campo finito GF (2) donde la cadena de bits representa el polinomio . La instrucción CLMUL también permite una implementación más eficiente de la multiplicación estrechamente relacionada de campos finitos más grandes GF (2 k ) que el conjunto de instrucciones tradicional. [2]
Uno de los usos de estas instrucciones es mejorar la velocidad de las aplicaciones que realizan el cifrado de bloques en el modo Galois / Contador , que depende de la multiplicación de campos finitos GF (2 k ). Otra aplicación es el cálculo rápido de los valores CRC , [3] incluidos los utilizados para implementar el algoritmo DEFLATE de la ventana deslizante LZ77 en zlib y pngcrush . [4]
ARMv8 también tiene una versión de CLMUL. SPARC llama a su versión XMULX, por "multiplicación XOR".
Nuevas instrucciones
La instrucción calcula el producto sin acarreo de 128 bits de dos valores de 64 bits. El destino es un registro XMM de 128 bits . La fuente puede ser otro registro o memoria XMM. Un operando inmediato especifica qué mitades de los operandos de 128 bits se multiplican. También se definen los mnemónicos que especifican valores específicos del operando inmediato:
Instrucción | Código de operación | Descripción |
---|---|---|
PCLMULQDQ xmmreg,xmmrm,imm | [rmi: 66 0f 3a 44 /r ib] | Realice una multiplicación sin acarreo de dos polinomios de 64 bits sobre el campo finito GF (2 k ). |
PCLMULLQLQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 00] | Multiplica las mitades bajas de los dos registros. |
PCLMULHQLQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 01] | Multiplique la mitad alta del registro de destino por la mitad baja del registro de origen. |
PCLMULLQHQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 10] | Multiplique la mitad inferior del registro de destino por la mitad superior del registro de origen. |
PCLMULHQHQDQ xmmreg,xmmrm | [rm: 66 0f 3a 44 /r 11] | Multiplica las mitades altas de los dos registros. |
Se ve una versión EVEX vectorizada (VPCLMULQDQ) en AVX-512 .
CPU con juego de instrucciones CLMUL
- Intel
- Procesador Westmere (marzo de 2010).
- Procesador Sandy Bridge
- Procesador Ivy Bridge
- Procesador Haswell
- Procesador Broadwell (con mayor rendimiento y menor latencia [5] )
- Procesador Skylake (y posterior)
- Procesador Goldmont
- AMD :
- Procesadores basados en Jaguar y más nuevos [6]
- Procesadores basados en Puma y más nuevos
- Procesadores de "equipo pesado"
- Procesadores basados en bulldozer [7]
- Procesadores basados en Piledriver
- Procesadores basados en apisonadora
- Procesadores basados en excavadoras y más nuevos
- Procesadores Zen
- Procesadores Zen +
- Procesadores Zen2 (y posteriores)
La presencia del conjunto de instrucciones CLMUL se puede verificar probando uno de los bits de funciones de la CPU .
Ver también
- Aritmética de campos finitos
- Conjunto de instrucciones AES
- Conjunto de instrucciones FMA3
- Conjunto de instrucciones FMA4
- Conjunto de instrucciones AVX
Referencias
- ^ "Red de software Intel" . Intel. Archivado desde el original el 7 de abril de 2008 . Consultado el 5 de abril de 2008 . CS1 maint: parámetro desalentado ( enlace )
- ^ Shay Gueron (13 de abril de 2011). "Instrucción de multiplicación sin transporte de Intel y su uso para calcular el modo GCM - Rev 2" . Intel .
- ^ "Cálculo rápido de CRC para polinomios genéricos utilizando PCLMULQDQ" (PDF) .
- ^ Vlad Krasnov (8 de julio de 2015). "Lucha contra el cáncer: el beneficio inesperado de Open Sourcing Our Code" . CloudFlare . Consultado el 4 de septiembre de 2016 . CS1 maint: parámetro desalentado ( enlace )
- ^ Johan De Gelas (31 de marzo de 2017). "La revisión de Intel Xeon E5 v4: prueba de Broadwell-EP con cargas de trabajo de servidor exigentes" . Anandtech . pag. 3.
- ^ "Deslice que detalla las mejoras de Jaguar sobre Bobcat" . AMD . Consultado el 3 de agosto de 2013 . CS1 maint: parámetro desalentado ( enlace )
- ^ Dave Christie (6 de mayo de 2009). "Lograr un equilibrio" . Blogs de desarrolladores de AMD. Archivado desde el original el 9 de noviembre de 2013 . Consultado el 11 de marzo de 2011 . CS1 maint: parámetro desalentado ( enlace )