Física del CPU y ciclos de reloj: borrador de libro sobre C++ eficiente

Fuentes: On CPU Physics and CPU Cycles: Draft Chapter from Efficient C++ Programming for Modern 64-bit CPUs

Este documento es el borrador de la primera parte del capítulo 4 del libro "Efficient C++ Programming for Modern 64-bit CPUs", escrito por Sherry Ignatchenko y Dmytro Ivanchykhin. El texto explica conceptos fundamentales sobre el funcionamiento interno de los procesadores modernos y cómo entenderlos puede ayudar a los desarrolladores a escribir código más eficiente. Se analiza la relación entre la distancia física que recorren las señales eléctricas y la velocidad de acceso, subrayando que a mayor distancia, mayor latencia debido a capacitancias parásitas. Se describen los componentes clave de un núcleo de CPU: registros, ALU, unidades SIMD y la jerarquía de caché L1 y L2, con tiempos de acceso típicos (3 ciclos para L1D, 10-15 para L2). Se aborda la ejecución superescalar, que permite completar múltiples operaciones por ciclo, y la predicción de saltos, donde el hardware adivina el resultado de una bifurcación para evitar paradas. El texto discute el impacto de las malas predicciones (15-25 ciclos de penalización) y la utilidad limitada de los atributos [[likely]]/[[unlikely]] de C++, recomendando usarlos solo cuando se está seguro de que una rama es muy improbable, como en el manejo de errores o casos extremos. Finalmente, se mencionan las TLB (Translation Lookaside Buffers) como un aspecto relevante que no aparece en el diagrama. El tono es técnico y didáctico, con referencias a otros trabajos y notas al pie para profundizar.