Cada vez que tu código hace un if, tu CPU toma una apuesta: adivina qué rama va a ejecutar antes de saberlo con certeza. Si acierta, el pipeline sigue sin interrupciones. Si falla, paga entre 10 y 20 ciclos de penalización. Daniel Lemire, investigador en informática de la Universidad de Quebec, publicó esta semana un benchmark que mide exactamente hasta dónde llega esa capacidad de predicción en los tres procesadores más relevantes del momento —y los resultados dicen algo que te importa si escribes código con lógica ramificada.
¿Cuántas ramas puede aprender tu procesador?
Lemire diseñó un experimento simple: un bucle que genera valores aleatorios y hace una decisión condicional sobre cada uno. Con un conjunto de datos pequeño que se repite, el procesador puede aprender la secuencia de ramas y predecirlas perfectamente. El límite es cuántas ramas únicas puede memorizar antes de que el Branch Target Buffer (BTB) se sature.
Los resultados:
Claude Desbloqueado
Mi curso avanzado para aprender a sacarle mucho más provecho a Claude en el trabajo y en el día a día, con funciones y usos más potentes. Comienza el 23 de marzo.
→ Inscríbete hoy 🚀- AMD Zen 5: predice perfectamente hasta 30.000 ramas
- Apple M4: llega a 10.000 ramas
- Intel Emerald Rapids: se queda en 5.000 ramas
“Una vez más, Intel me decepciona. AMD lo está haciendo maravillosamente bien en este benchmark”, escribe Lemire. La brecha entre AMD y Intel es de 6x. No es una diferencia marginal de arquitectura: es una señal de dónde están poniendo las fichas los dos grandes fabricantes de CPUs x86.
¿Por qué esto importa para código real?
La respuesta corta: depende de cuánta lógica condicional tenga tu código y de qué tan predecibles sean los patrones.
Cuando el predictor de ramas funciona bien, los procesadores modernos pueden ejecutar instrucciones de forma especulativa antes de saber el resultado de una condición. Eso es lo que hace posible alcanzar decenas de instrucciones por ciclo. Cuando falla, el pipeline se vacía y se reconstruye desde cero —una penalización que Lemire mide en torno a 10,5 ciclos por misfired branch.
El impacto práctico aparece en:
- Motores de inferencia locales: los modelos de IA como los que corren en Apple Silicon localmente dependen de loops con condicionales intensivos. La arquitectura M4 tiene 10.000 ramas de BTB —menos que AMD, pero con un pipeline altamente optimizado para cargas uniformes.
- Compiladores y parsers: herramientas como compiladores de TypeScript o de Go tienen flujos de decisión densos. La migración de TypeScript a Go, por ejemplo, busca en parte aprovechar compilación nativa donde el predictor de ramas puede ser determinante.
- Bases de datos y motores de consulta: DuckDB, SQLite y similares generan árboles de decisión complejos al ejecutar queries. Un procesador con BTB más grande puede beneficiarse sin cambiar una línea de código.
Lo que el benchmark no te dice
El experimento de Lemire mide la capacidad del BTB en un escenario sintético: patrones repetibles con distribución aleatoria conocida. En producción, los patrones rara vez son completamente aleatorios ni perfectamente repetibles, así que los números reales se ubican en algún punto entre el caso ideal y el peor caso.
Tampoco mide la penalización en ciclos reales bajo condiciones de contención de caché, acceso a memoria o ejecución fuera de orden. Un AMD Zen 5 con 30.000 ramas de BTB en condiciones ideales puede comportarse de forma diferente bajo carga real si hay presión sobre L3 o contención en el bus de memoria.
Lo que sí es útil tener presente: si estás eligiendo hardware para un servidor de inferencia local, un build server de alta frecuencia, o cualquier carga con lógica condicional intensiva, el BTB es un parámetro concreto que ahora tienes en números. AMD Zen 5 gana por amplísimo margen en esta métrica específica.
El código fuente del benchmark está disponible en GitHub si quieres reproducirlo en tu propia máquina.

