Articulo de referencia

Conjunto de instrucciones de manipulación de bits x86

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 A...

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 objetivo de estos conjuntos de instrucciones es mejorar la velocidad de manipulación de bits . Todas las instrucciones de estos conjuntos no son SIMD y operan únicamente en registros de propósito general .

Intel publicó dos conjuntos: BMI (ahora conocido como BMI1) y BMI2; ambos se introdujeron con la microarquitectura Haswell , con BMI1 ofreciendo características similares a las del conjunto de instrucciones ABM de AMD y BMI2 extendiéndolas. AMD publicó otros dos conjuntos: ABM ( Manipulación avanzada de bits , que también es un subconjunto de SSE4a implementado por Intel como parte de SSE4.2 y BMI1) y TBM ( Manipulación de bits de seguimiento , una extensión introducida con los procesadores basados ​​en Piledriver como una extensión de BMI1, pero descartada nuevamente en los procesadores basados ​​en Zen ). [ 1 ]

ABM (Manipulación Avanzada de Bits)

AMD fue la primera en introducir las instrucciones que ahora forman parte de BMI1 de Intel como parte de su conjunto de instrucciones ABM ( Manipulación Avanzada de Bits ), y posteriormente añadió soporte para las nuevas instrucciones BMI2 de Intel. Actualmente, AMD anuncia la disponibilidad de estas características a través de las cpuflags BMI1 y BMI2 de Intel e indica a los programadores que las utilicen como objetivo. [ 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. tiene una bandera CPUIDPOPCNT separada con el mismo nombre, e Intel y AMD usan la bandera de AMD para indicar soporte (ya que combinada con BMI1 y BMI2 completa el conjunto de instrucciones ABM ampliado). [ 2 ] [ 3 ]ABMLZCNTLZCNT

LZCNTestá relacionada 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 establecer 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 LZCNTlos BSRresultados 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 LZCNTes tal que si ABM no es compatible, entonces BSRse ejecuta la instrucción en su lugar. [ 4 ] : 227

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

Las instrucciones que aparecen a continuación son las que habilita el BMIbit en CPUID. Intel lo considera oficialmente LZCNTcomo parte de BMI, pero anuncia LZCNTcompatibilidad mediante la ABMbandera de características de CPUID. [ 3 ] BMI1 está disponible en los procesadores Jaguar , [ 5 ] Piledriver [ 6 ] y posteriores de AMD , y en los procesadores Haswell [ 7 ] y posteriores de Intel .

TZCNTes casi idéntico 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 establecer 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 en su lugar. [ 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. Solo AMD ha producido procesadores que admiten BMI1 sin BMI2; BMI2 es compatible con la arquitectura Excavator de AMD y posteriores. [ 11 ]

Depósito y extracción de bits en paralelo

Las instrucciones PDEPy PEXTson nuevas instrucciones generalizadas de compresión y expansión a nivel de bits. Reciben dos entradas: una fuente y un selector. El selector es un mapa de bits que selecciona los bits que se van a empaquetar o desempaquetar. PEXTcopia los bits seleccionados de la fuente a los bits de orden inferior contiguos del destino; los bits de destino de orden superior se borran. PDEPhace lo contrario para los bits seleccionados: los bits de orden inferior contiguos se copian a los bits seleccionados del destino; los demás bits de destino se borran. Esto se puede usar para extraer cualquier campo de bits de la entrada e incluso realizar una gran cantidad de reordenamiento a nivel de bits que antes habría sido costoso. Si bien lo que hacen estas instrucciones es similar a las instrucciones SIMD de recolección-dispersión a nivel de bits , las instrucciones PDEPy PEXT(al igual que el resto de los conjuntos de instrucciones BMI) operan en registros de propósito general. [ 12 ]

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 [ 13 ] que implementan PDEP y PEXT lo hacen en microcódigo, con una latencia de 18 ciclos [ 14 ] en lugar de los 3 ciclos de Zen 3. [ 15 ] Como resultado, suele ser más rápido usar otras instrucciones en estos procesadores. [ 16 ]

TBM (Manipulación de la broca de arrastre)

TBM consiste en instrucciones complementarias al conjunto de instrucciones iniciado por BMI1; su naturaleza complementaria significa que no necesariamente deben usarse directamente, sino que pueden ser generadas por un compilador optimizador cuando sea compatible. AMD introdujo TBM junto con BMI1 en su línea de procesadores Piledriver [ 6 ] ; los procesadores AMD Jaguar y Zen posteriores no son compatibles con TBM. [ 5 ] Ningún procesador Intel (al menos hasta Alder Lake ) es compatible con TBM.

CPU compatibles

Tenga en cuenta que la compatibilidad con extensiones de instrucciones significa que el procesador es capaz de ejecutar las instrucciones compatibles para fines de compatibilidad de software. Es posible que el procesador no tenga un buen rendimiento al hacerlo. Por ejemplo, los procesadores Excavator a Zen 2 implementan las instrucciones PEXT y PDEP usando microcódigo, lo que resulta en que las instrucciones se ejecuten significativamente más lento que el mismo comportamiento recreado usando otras instrucciones. [ 20 ] (Un método de software llamado "zp7" es, de hecho, más rápido en estas máquinas). [ 21 ] Para un rendimiento óptimo, se recomienda que los desarrolladores de compiladores elijan usar instrucciones individuales en las extensiones basándose en perfiles de rendimiento específicos de la arquitectura en lugar de en la disponibilidad de la extensión.

Véase también

Referencias

  1. 1 2 "Nuevas instrucciones para "Bulldozer" y "Piledriver"" (PDF) . Consultado el 3 de enero de 2014 .
  2. 1 2 "Manual del programador de la arquitectura AMD64 Volumen 3: Instrucciones de propósito general y del sistema" (PDF) . Consultado el 20 de julio de 2022 .
  3. 1 2 3 "Intel Advanced Vector Extensions Programming Reference" (PDF) . intel.com . Intel . Junio ​​de 2011. Consultado el 3 de enero de 2014 .
  4. 1 2 3 4 "Manual del programador de la arquitectura AMD64, volumen 3: instrucciones de propósito general y del sistema" (PDF) . Revisión 3.32. AMD . Marzo de 2021. Archivado (PDF) del original el 8 de abril de 2021. Recuperado el 8 de abril de 2021 .
  5. 1 2 3 4 "Hoja de datos de la familia 16h AMD Serie A" (PDF) . amd.com . AMD . Octubre de 2013. Consultado el 2 de enero de 2014 .
  6. 1 2 Hollingsworth, Brent. "Nuevas instrucciones para "Bulldozer" y "Piledriver" (PDF) . Advanced Micro Devices, Inc. Archivado del original (PDF) el 26 de julio de 2014. Recuperado el 11 de diciembre de 2014 .
  7. 1 2 Locktyukhin, Max. "Cómo detectar la 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" . Archivado del original el 23 de febrero de 2017. Consultado el 17 de marzo de 2014 .
  9. 1 2 "sandpile.org -- arquitectura x86 -- bits" . Consultado el 17 de marzo de 2014 .
  10. "Abseil - Bibliotecas comunes de C++" . GitHub . 4 de noviembre de 2021.
  11. 1 2 "El núcleo de la excavadora AMD podría traer aumentos drásticos en el rendimiento" . X-bit labs. 18 de octubre de 2013. Archivado del original el 23 de octubre de 2013. Recuperado el 24 de noviembre de 2013 .
  12. Yedidya Hilewitz; Ruby B. Lee (agosto de 2009). "Una nueva base para desplazadores en procesadores de propósito general para manipulaciones de bits existentes y avanzadas" (PDF) . palms.princeton.edu . IEEE Transactions on Computers. págs. 1035–1048 . Archivado del original (PDF) el 17 de junio de 2013. Recuperado el 10 de febrero de 2014 . 
  13. "Zen 3 - Microarquitecturas - AMD - WikiChip" . Archivado del original el 12/11/2020 . Consultado el 15/11/2020 .
  14. "Tablas de instrucciones" (PDF) . Consultado el 09/09/2023 .
  15. "Guía de optimización de software para procesadores AMD de la familia 19h" . AMD Developer Central . Consultado el 22 de julio de 2022 .
  16. "Salvando Ryzen privado: funciones de reemplazo PEXT/PDEP de 32/64 bits para CPU #AMD (BR/#Zen/Zen+/#Zen2) basadas en el zp7 de @zwegner" . Twitter . Consultado el 21 de febrero de 2022 .
  17. "tbmintrin.h de GCC 4.8" . Archivado del original el 23 de febrero de 2017. Consultado el 17 de marzo de 2014 .
  18. "Guía para desarrolladores de BIOS y kernel para la familia AMD 14h" (PDF) . Consultado el 3 de enero de 2014 .
  19. "Análisis a fondo de AMD Zen 3 Ryzen: Pruebas de los procesadores 5950X, 5900X, 5800X y 5600X" . Archivado del original el 5 de noviembre de 2020. Consultado el 26 de diciembre de 2021 .
  20. "Informe de progreso de Dolphin: diciembre de 2019 y enero de 2020" . Dolphin Emulator . 7 de febrero de 2020. Consultado el 7 de febrero de 2020 .
  21. ^ Wegner, Zach (4 de noviembre de 2020). "zwegner/zp7" . GitHub .

Lecturas adicionales

  • Guía de Intel Intrinsics