vulnerabilidad spectre son recientemente qué procesadores origen meltdown los hipertextual explicacion error descubierta arm cpu-architecture branch-prediction

arm - spectre - vulnerabilidad de los procesadores



¿Qué tan frecuente es la predicción de rama en las CPU actuales? (5)

La predicción de la rama es cada vez más importante y se enfatiza, mientras que la ARM se hace más complicada.

Por ejemplo, la nueva arquitectura ARM de 64 bits llamada ARMv8 elimina la mayoría del uso de la ejecución condicional (principalmente debido a las restricciones de espacio de codificación de la instrucción con mayor número de registros) y se basa en la predicción de bifurcaciones para mantener el rendimiento en niveles aceptables.

Incluso para los dispositivos ARMv7-a más nuevos, puede verificar casos terribles como preguntas de datos sin clasificar en SO , cuya mejora en la predicción de la rama es alrededor de 3x.

Debido al gran impacto en el rendimiento, nunca me pregunto si mi CPU de escritorio del día actual tiene predicción de bifurcación. Claro que lo hace. Pero ¿qué hay de las diversas ofertas de ARM? ¿Los teléfonos iPhone o Android tienen predicción de rama? ¿La mayor Nintendo DS? ¿Qué tal Wii basado en PowerPC? PS 3?

Si tienen una unidad de predicción compleja no es tan importante, pero si tienen al menos alguna predicción dinámica, y si hacen alguna ejecución de instrucciones siguiendo una rama esperada.

¿Cuál es el límite para las CPU con predicción de rama? Una calculadora de mano de hace décadas, obviamente, no tiene una, mientras que mi escritorio sí. Pero, ¿puede alguien delinear más claramente dónde se puede esperar una predicción de rama dinámica?

Si no está claro, estoy hablando del tipo de predicción en la que está cambiando la condición, variando la ruta esperada durante el tiempo de ejecución.


Las modernas CPU superescalares de gama alta con tuberías largas (lo que significa que casi todas las CPU que se encuentran comúnmente en los equipos de escritorio y servidores) tienen una predicción de rama bastante sofisticada en estos días.

La mayoría de las CPU ARM no tienen predicción de bifurcación, lo que ahorra el consumo de energía y de silicio, pero las CPU ARM generalmente tienen tuberías relativamente cortas. Además, el soporte para la ejecución condicional de la mayoría de las instrucciones en ARM ISA ayuda a reducir el número de sucursales requeridas (y por lo tanto mitiga el costo de los paros de predicción errónea de sucursales).


No tanto para el ARM Cortex-A8 (aunque tiene cierta predicción de rama), pero creo que el Cortex-A9 es superescalar fuera de orden, con una compleja predicción de rama.


Cualquier CPU con una tubería más allá de unas pocas etapas requiere al menos una predicción de rama primitiva, de lo contrario puede demorar la espera en los resultados de cómputo para decidir qué camino tomar. El Intel Atom es un núcleo en orden, pero con una tubería bastante profunda, y por lo tanto requiere un predictor de rama bastante decente.

Los viejos diseños de ARM 7 eran solo tres etapas. Combinar eso con cosas como ranuras de retardo de ramificación (requerido en MIPS, opcional en SPARC), y la predicción de ramificación no es tan útil.

Por cierto, cuando MIPS decidió obtener más rendimiento al ir más allá de las 4 etapas de la tubería, la ranura de demora de la rama se convirtió en una molestia. En el diseño original, era necesario, porque no había un predictor de rama. Por lo tanto, tuvo que secuenciar su instrucción de rama antes de la última instrucción que se ejecutará antes de la rama. Con la tubería más larga, necesitaban un predictor de bifurcación, obviando la necesidad de un intervalo de retardo de bifurcación, pero tenían que emularlo de todos modos para ejecutar el código más antiguo.

El problema con una ranura de retardo de derivación es que solo se puede completar con una instrucción útil aproximadamente el 50% del tiempo. El resto del tiempo, lo llena con una instrucción cuyo resultado es probable que se deseche, o usa un NO-OP.


Puede esperar un predictor de ramificación dinámica en cualquier procesador fuera de orden, estos procesadores no solo dependen de la canalización, sino que también obtienen múltiples instrucciones en el momento, y tienen unidades de ejecución múltiples (unidades de punto flotante, ALU), más registros; Para aumentar la ejecución de instrucciones, tiene varias instrucciones sobre la marcha en un momento dado, por supuesto, las sucursales son un problema si desea mantener alta la utilización de la maquinaria, por lo que este tipo de procesadores confían en la predicción de ramificación dinámica para mantener el rendimiento. y la utilización muy alta.

Usted puede esperar que cualquier servidor tenga una predicción de ramificación dinámica, también escritorios, en el pasado, los sistemas integrados como los chips ARM en los teléfonos inteligentes actuales no tenían predicciones de ramificación ya que tenían tuberías más pequeñas y no tenían ejecución fuera de orden, pero como Moore La ley nos da más transistores por área, usted comenzará a ver más y más procesadores aumentando su arquitectura. Así que para responder a su pregunta, además de la obvia búsqueda de las especificaciones de la CPU, puede esperar tener una predicción de bifurcaciones en chips de 32 bits, tuberías más grandes, y una desorden fuera de orden. Los chips más recientes de ARM se están moviendo en algún nivel hacia estas direcciones.