Articulo de referencia

Instrucción lógica ternaria bit a bit

Las instrucciones de lógica ternaria bit a bit pueden implementar lógicamente todas las operaciones bit a bit posibles entre tres entradas (256 permutaciones). Toman tres regist...

Las instrucciones de lógica ternaria bit a bit pueden implementar lógicamente todas las operaciones bit a bit posibles entre tres entradas (256 permutaciones). Toman tres registros como entrada y un campo inmediato de 8 bits. Cada bit en la salida se genera utilizando una tabla de búsqueda de 8 bits de los tres bits correspondientes en las entradas para seleccionar una de las 8 posiciones en el inmediato de 8 bits. Dado que solo son posibles 8 combinaciones utilizando tres bits, esto permite realizar todas las operaciones bit a bit posibles de 3 entradas. En terminología matemática: cada bit correspondiente de las tres entradas es una función booleana ternaria con un diagrama de Hasse de orden n=8. [ 1 ] También conocidos como minterms .

Una tabla completa que muestra las 256 posibles instrucciones lógicas bit a bit de 3 operandos se puede encontrar en la descripción de Power ISA de xxeval. [ 2 ] Una observación adicional es que si el inmediato de 8 bits fuera un operando (registro), entonces en la terminología de FPGA , las instrucciones lógicas ternarias bit a bit implementarían una matriz de LUT3 de hardware .

Una de las aplicaciones típicas es la manipulación de bits de implementación para los cifrados simétricos . [ 3 ] [ 4 ] [ 5 ] [ 6 ]

Descripción

En pseudocódigo, la salida de tres entradas de un solo bit se ilustra utilizando r2, r1 y r0 como tres dígitos binarios de un índice de 3 bits, para tratar el valor inmediato de 8 bits como una tabla de búsqueda y simplemente devolver el bit indexado:

resultado := imm8 (r2<<2 + r1<<1 + r0)

A continuación se muestra una implementación legible en Python de tres entradas de un solo bit (r0, r1 y r2):

def ternlut8 ( r0 , r1 , r2 , imm8 ): """Implementación de una LUT3 (búsqueda ternaria)""" # el índice estará en el rango de 0 a 7 lut_index = 0 # r0 establece el bit 0, r1 el bit 1 y r2 el bit 2 if r0 : lut_index |= 1 << 0 if r1 : lut_index |= 1 << 1 if r2 : lut_index |= 1 << 2 # devuelve el bit indexado solicitado de imm8 return imm8 & ( 1 << lut_index ) != 0

Si los registros de entrada son de 64 bits, la salida también será de 64 bits y se construirá seleccionando cada bit indexado de las tres entradas para crear el bit indexado correspondiente de la salida:

def ternlut8_64bit ( R0 , R1 , R2 , imm8 ): """Implementación de una instrucción de búsqueda ternaria de 64 bits""" result = 0 for i in range ( 64 ): m = 1 << i # bit de máscara único de las entradas r0 , r1 , r2 = ( R0 & m ), ( R1 & m ), ( R2 & m ) result |= ternlut8 ( r0 , r1 , r2 , imm8 ) << i return result

A continuación se muestra una tabla de ejemplo con solo tres permutaciones posibles de las 256 totales para el valor inmediato de 8 bits: doble AND, doble OR y combinación de bits. El valor inmediato (la tabla de búsqueda de 8 bits ) se denomina imm8 , como se muestra a continuación. Tenga en cuenta que la columna contiene el valor binario de su encabezado correspondiente: imm8:0xCA es el valor binario 11001010 en la columna "Combinación de bits".

Usos

El número de usos es significativo: en cualquier lugar donde se utilicen tres operaciones lógicas a nivel de bits en algoritmos. Ahorro de acarreo, SHA-1, SHA-2, MD5 y conteo de bits de exactamente uno y exactamente dos utilizados en Harley-Seal Popcount. [ 7 ]vpternlog acelera MD5 en un 20 % [ 8 ]

Implementaciones

Aunque es inusual debido al alto coste en hardware, esta instrucción se encuentra en varias arquitecturas de conjuntos de instrucciones.

  • La capacidad de blitter de Amiga de 1985 en Agnus: el inmediato de 8 bits se denominó "minterm" y la operación fue de memoria a memoria. [ 9 ]
  • La extensión AVX-512 lo llama vpternlog[ 10 ]
  • Power ISA v3.1 llama a la instrucción xxeval. [ 11 ]
  • Intel Larrabee también implementó esta instrucción como vpternlog: Tom Forsyth explica, de forma divertida, que los ingenieros de pruebas de Intel estaban contentos de tener una instrucción para probar en lugar de 256. [ 12 ] [ 13 ] [ 14 ]

Véase también

Referencias

  1. «Diagrama de Hasse» . Wolframio .
  2. power3.1 , pp. Power ISA Libro I Capítulo 7. Instalación de extensión vectorial-escalar p968, Tabla 145.
  3. Mercadier y Dagand 2019 .
  4. Sovyn, Khoma y Podporá 2023 .
  5. Xu 2017 .
  6. Biham 1997 .
  7. Muła, Wojciech (2020-01-11). "AVX512: Evaluación de funciones ternarias" .
  8. "Animetosho/Md5-optimisation" . GitHub .
  9. "¡Se ha detectado una vulnerabilidad en la instrucción lógica ternaria bit a bit de AVX!" 6 de octubre de 2024.
  10. "Intel Architecture Instruction Set Extensions Programming Reference" (PDF) . Intel . Consultado el 29 de enero de 2014 .
  11. power3.1 , pp. Power ISA Libro I Capítulo 7. Instalación de extensión vectorial-escalar p967.
  12. "Charlas y artículos de TomF" .
  13. Forsyth, Tom (noviembre de 2019). "SMACNI a AVX512: el ciclo de vida de un conjunto de instrucciones" (PDF) .
  14. "Tom Forsyth: el ciclo de vida de un conjunto de instrucciones" . 22 de agosto de 2020.

Fuentes

  • Biham, Eli (1997). "Una nueva implementación rápida de DES en software" (PDF) . Cifrado rápido de software . Notas de clase en ciencias de la computación. Vol.  1267. Berlín, Heidelberg: Springer. págs. 260–272 . doi : 10.1007/BFb0052352 . 
  • Mercadier, Darius; Dagand, Pierre-Évariste (junio de 2019). «Usuba: cifrados de alto rendimiento y tiempo constante, por construcción». Actas de la 40.ª Conferencia ACM SIGPLAN sobre Diseño e Implementación de Lenguajes de Programación (PLDI 2019) . Phoenix, AZ, EE. UU.: Association for Computing Machinery. págs. 157-173 . doi : 10.1145/3314221.3314636 . ISBN  978-1-4503-6712-7.
  • Power ISA™ Versión 3.1 (PDF)  ( ed.v3.1 ). IBM . 1 de mayo de 2020. SA22-7832-14 . Recuperado el 7 de agosto de 2025 .
  • Sovyn, Yaroslav; Khoma, Volodymyr; Podpora, Michal (2023). "Implementación en bits de cajas S criptográficas no algebraicas de 8 × 8 utilizando instrucciones SIMD del procesador x86-64" . IEEE Transactions on Information Forensics and Security . 18 : 491–500 . doi : 10.1109/TIFS.2022.3223782 .
  • Xu, Shixiong (septiembre de 2017). Técnicas de compilación orientadas al diseño de datos en la vectorización para procesadores multinúcleo (tesis doctoral). Trinity College Dublin.
  • Funciones ternarias AVX-512
  • Instrucciones de Libre-SOC : incluye variantes booleanas y ternarias.
  • Función ternaria implementada en Python
Obtenido de " https://en.wikipedia.org/w/index.php?title=Bitwise_ternary_logic_instruction&oldid=1359771279 "