stringtranslate.com

Conjunto de instrucciones de manipulación de x86 bits

Los conjuntos de instrucciones de manipulación de bits ( conjuntos BMI ) son extensiones de la arquitectura del conjunto de instrucciones x86 para microprocesadores de Intel y AMD . El propósito de estos conjuntos de instrucciones es mejorar la velocidad de manipulación de bits . Todas las instrucciones de estos conjuntos no son SIMD y funcionan únicamente en registros de uso general .

Hay dos conjuntos publicados por Intel: BMI (ahora denominado BMI1) y BMI2; Ambos fueron presentados con la microarquitectura Haswell con funciones de coincidencia BMI1 ofrecidas por el conjunto de instrucciones ABM de AMD y BMI2 extendiéndolas. AMD publicó otros dos conjuntos: ABM ( Advanced Bit Manipulation , que también es un subconjunto de SSE4a implementado por Intel como parte de SSE4.2 y BMI1) y TBM ( Traling Bit Manipulation , una extensión introducida con los procesadores basados ​​en Piledriver como una extensión de BMI1, pero cayó nuevamente en los procesadores basados ​​en Zen ). [1]

ABM (manipulación avanzada de bits)

AMD fue el primero en introducir las instrucciones que ahora forman BMI1 de Intel como parte de su conjunto de instrucciones ABM ( Advanced Bit Manipulation ), y luego agregó soporte para las nuevas instrucciones BMI2 de Intel. AMD anuncia hoy la disponibilidad de estas funciones a través de las cpuflags BMI1 y BMI2 de Intel e instruye a los programadores a orientarlas en consecuencia. [2]

Si bien Intel considera POPCNTcomo parte de SSE4.2 y LZCNTcomo parte de BMI1, tanto Intel como AMD anuncian la presencia de estas dos instrucciones individualmente. POPCNTtiene un indicador CPUID separado con el mismo nombre, e Intel y AMD usan ABMel indicador de AMD para indicar LZCNTsoporte (ya que LZCNTcombinado con BMI1 y BMI2 completa el conjunto de instrucciones ABM ampliado). [2] [3]

LZCNTestá relacionado con la BSRinstrucción Bit Scan Reverse ( ), pero establece los indicadores ZF (si el resultado es cero) y CF (si la fuente es cero) en lugar de configurar ZF (si la fuente es cero). Además, produce un resultado definido (el tamaño del operando fuente en bits) si el operando fuente es cero. Para un argumento distinto de cero, la suma de LZCNTy BSRlos resultados es el ancho de bits del argumento menos 1 (por ejemplo, si el argumento de 32 bits es 0x000f0000, LZCNT da 12 y BSR da 19).

La codificación de LZCNTes tal que si no se admite ABM, la BSRinstrucción se ejecuta en su lugar. [4] : 227 

BMI1 (Conjunto de instrucciones de manipulación de bits 1)

Las instrucciones siguientes son las habilitadas por el BMIbit en CPUID. Intel lo considera oficialmente LZCNTparte de BMI, pero anuncia LZCNTsoporte utilizando el ABMindicador de función CPUID. [3] BMI1 está disponible en Jaguar de AMD , [5] Piledriver [6] y procesadores más nuevos, y en Haswell de Intel [7] y procesadores más nuevos.

TZCNTes casi idéntica a la BSFinstrucción Bit Scan Forward ( ), pero establece los indicadores ZF (si el resultado es cero) y CF (si la fuente es cero) en lugar de configurar ZF (si la fuente es cero). Para un argumento distinto de cero, el resultado de TZCNTy BSFes igual.

Al igual que con LZCNT, la codificación de TZCNTes tal que si BMI1 no es compatible, entonces BSFse ejecuta la instrucción. [4] : 352 

BMI2 (Conjunto de instrucciones de manipulación de bits 2)

Intel introdujo BMI2 junto con BMI1 en su línea de procesadores Haswell. Sólo AMD ha producido procesadores compatibles con BMI1 sin BMI2; BMI2 es compatible con la arquitectura Excavator de AMD y versiones más recientes. [10]

Depósito y extracción de brocas en paralelo

Las instrucciones PDEPy PEXTson nuevas instrucciones generalizadas de compresión y expansión a nivel de bits. Toman dos entradas; uno es una fuente y el otro es un selector. El selector es un mapa de bits que selecciona los bits que se van a empaquetar o desempaquetar. PEXTcopia bits seleccionados del origen a bits contiguos de orden inferior del destino; Los bits de destino de orden superior se borran. PDEPhace lo contrario para los bits seleccionados: los bits contiguos de orden inferior se copian en los bits seleccionados del destino; se borran otros bits de destino. Esto se puede utilizar para extraer cualquier campo de bits de la entrada, e incluso realizar una gran cantidad de mezclas a nivel de bits que antes habrían sido costosas. Si bien lo que hacen estas instrucciones es similar a las instrucciones SIMD de recopilación y dispersión a nivel de bits , PDEPlas PEXTinstrucciones (como el resto de los conjuntos de instrucciones de BMI) operan en registros de propósito general. [11]

Las instrucciones están disponibles en versiones de 32 y 64 bits. Un ejemplo que utiliza una fuente y un selector arbitrarios en modo de 32 bits es:

Los procesadores AMD anteriores a Zen 3 [12] que implementan PDEP y PEXT lo hacen en microcódigo, con una latencia de 18 ciclos [13] en lugar de 3 ciclos (Zen 3). [14] Como resultado, suele ser más rápido utilizar otras instrucciones en estos procesadores. [15]

TBM (manipulación de bit final)

TBM consta de instrucciones complementarias al conjunto de instrucciones iniciado por BMI1; su naturaleza complementaria significa que no necesariamente deben usarse directamente, sino que pueden generarse mediante un compilador de optimización cuando sean compatibles. AMD introdujo TBM junto con BMI1 en su línea de procesadores Piledriver [6] ; Los procesadores posteriores AMD Jaguar y Zen no son compatibles con TBM. [5] Ningún procesador Intel (al menos a través de Alder Lake ) admite TBM.

CPU compatibles

Tenga en cuenta que la compatibilidad con la extensión de instrucciones significa que el procesador es capaz de ejecutar las instrucciones admitidas por motivos de compatibilidad de software. Es posible que el procesador no funcione bien al hacerlo. Por ejemplo, los procesadores Excavator a través de Zen 2 implementan instrucciones PEXT y PDEP usando microcódigo, lo que hace que las instrucciones se ejecuten significativamente más lentamente que el mismo comportamiento recreado usando otras instrucciones. [19] (Un método de software llamado "zp7" es, de hecho, más rápido en estas máquinas). [20] Para un rendimiento óptimo, se recomienda que los desarrolladores de compiladores opten por utilizar instrucciones individuales en las extensiones basadas en perfiles de rendimiento específicos de la arquitectura en lugar de sobre la disponibilidad de extensiones.

Ver también

Referencias

  1. ^ ab "Nuevas instrucciones de" Bulldozer "y" Piledriver "" (PDF) . Consultado el 3 de enero de 2014 .
  2. ^ ab "Manual del programador de arquitectura AMD64, volumen 3: instrucciones del sistema y de uso general" (PDF) . Consultado el 20 de julio de 2022 .
  3. ^ abc "Referencia de programación de extensiones vectoriales avanzadas de Intel" (PDF) . intel.com . Intel . Junio ​​de 2011 . Consultado el 3 de enero de 2014 .
  4. ^ abcd "Manual del programador de arquitectura AMD64, volumen 3: instrucciones del sistema y de uso general" (PDF) . Revisión 3.32. AMD . Marzo de 2021. Archivado (PDF) desde el original el 8 de abril de 2021 . Consultado el 8 de abril de 2021 .
  5. ^ abcd "Hoja de datos de la serie A de AMD de 16 horas de la familia" (PDF) . amd.com . AMD . Octubre 2013 . Consultado el 2 de enero de 2014 .
  6. ^ ab Hollingsworth, Brent. "Nuevas instrucciones de" Bulldozer "y" Piledriver "" (PDF) . Microdispositivos avanzados, Inc. Consultado el 11 de diciembre de 2014 .
  7. ^ ab Locktyukhin, Max. "Cómo detectar compatibilidad con nuevas instrucciones en la familia de procesadores Intel® Core™ de cuarta generación". www.intel.com . Intel . Consultado el 11 de diciembre de 2014 .
  8. ^ "bmiintrin.h de GCC 4.8" . Consultado el 17 de marzo de 2014 .
  9. ^ "Rappel - Bibliotecas comunes de C++". GitHub . 4 de noviembre de 2021.
  10. ^ ab "AMD Excavator Core puede generar aumentos espectaculares en el rendimiento". Laboratorios X-bit. 18 de octubre de 2013. Archivado desde el original el 23 de octubre de 2013 . Consultado el 24 de noviembre de 2013 .
  11. ^ Yedidya Hilewitz; Ruby B. Lee (agosto de 2009). "Una nueva base para los cambiadores en procesadores de uso general para manipulaciones de bits avanzadas y existentes" (PDF) . palms.princeton.edu . Transacciones IEEE en computadoras. págs. 1035-1048 . Consultado el 10 de febrero de 2014 .
  12. ^ "Zen 3 - Microarquitecturas - AMD - WikiChip".
  13. ^ "Tablas de instrucciones" (PDF) . Consultado el 9 de septiembre de 2023 .
  14. ^ "Guía de optimización de software para procesadores 19h de la familia AMD". Central de desarrolladores de AMD . Consultado el 22 de julio de 2022 .
  15. ^ "Guardar Ryzen privado: funciones de reemplazo PEXT/PDEP 32/64b para CPU #AMD (BR/#Zen/Zen+/#Zen2) basadas en zp7 de @zwegner". Gorjeo . Consultado el 21 de febrero de 2022 .
  16. ^ "tbmintrin.h de GCC 4.8" . Consultado el 17 de marzo de 2014 .
  17. ^ "Guía para desarrolladores de BIOS y kernel para la familia AMD 14h" (PDF) . Consultado el 3 de enero de 2014 .
  18. ^ "Revisión profunda de AMD Zen 3 Ryzen: 5950X, 5900X, 5800X y 5600X probados" . Consultado el 26 de diciembre de 2021 .
  19. ^ "Informe de progreso de Dolphin: diciembre de 2019 y enero de 2020". Emulador de delfines . 7 de febrero de 2020 . Consultado el 7 de febrero de 2020 .
  20. ^ Wegner, Zach (4 de noviembre de 2020). "zwegner/zp7". GitHub .

Otras lecturas

enlaces externos