CPU: introducción a las unidades de rendimiento y cálculos

Seguramente, cuando hayas estado ojeando benchmarks, o características de una CPU, habrás visto multitud de parámetros o unidades de rendimiento. Quizás conozcas lo que significan muchas de ellas, pero… ¿sabes cómo se calculan? Lo cierto es que no hay demasiadas webs donde muestren todo esto de una forma clara. Por eso me he decidido a publicar este tutorial sobre cálculos de rendimiento para procesadores.

Además de las fórmulas y cálculos habituales de rendimiento, también mostraré las diferencias de alguna que otra que veo que suele generar confusión, dadas las preguntas que me hacen a veces…

CPU: formulas y cálculos

AMD Am29k die shot

Seguramente estés leyendo mucho estos últimos días sobre el «heterogeneous multi-processing» o multiprocesamiento heterogéneo (mal llamado big.LITTLE, ya que ese es el término específico para ARM y no el genérico), que no es lo mismo que la computación heterogénea, en la que se usan diferentes procesadores a los que se les «encomiendan» aquella tarea que son capaces de procesar de forma más rápida o eficiente.

Próximamente me gustaría dedicar un artículo íntegro al multiprocesamiento heterogéneo.

Aquí surgen algunas cuestiones como ¿Por qué hacer que la CPU se encargue de ciertos cálculos si una GPGPU lo haría más rápido? ¿por qué no usar un DSP en ciertas tareas específicas en las que le ganaría a una CPU?

Por ejemplo, ¿sabías que una CPU suele consumir un 90% de la energía en mover datos de un lugar a otro y solo un 10% en procesarlos? En cambio, en una GPU el consumo para moverlos baja a un 70% y para procesarlos emplea el 30%. Por eso pueden ser más interesantes para ciertas aplicaciones, consiguiendo una mayor eficiencia FLOPS/w.

Pues bien, todo esto tiene mucho que ver con los cálculos que vamos a ver a continuación… (aunque yo me centraré en la CPU)

Algunas unidades

Brevemente, antes de continuar con los cálculos me gustaría dejar claro qué son los MIPS y FLOPS, para aquellos lectores que no lo conozcan aún:

  • IPS: es la unidad de referencia que se suele usar fuera del mundo HPC. Son las siglas de Instructions Per Second (generalmente se suele usar MIPS = Millions of IPS), es decir, las instrucciones por segundo que una unidad de procesamiento puede realizar. Cada modelo de procesador tendrá un rendimiento diferente, al igual que ocurre con los FLOPS. Por ejemplo, el AMD Threadripper 3990X puede desarrollar 2.356.230 MIPS @ 4.35 GHz, mientras un Zilog Z80 podía llegar a 1.16 MIPS @ 8 Mhz. Se entiende que con overclocking se puede llegar a incrementar.
  • IPC: son las siglas de Instructions Per Cycle, o instrucciones por ciclo de reloj que una unidad puede realizar. Es decir, en vez de tomar como referencia el tiempo, como en el IPS, se toma un ciclo de reloj.
  • CPI: suele confundirse con las anteriores, pero en esta ocasión se denomina Cycles Per Instruction, es decir, los ciclos de reloj que necesita una unidad para ejecutar una instrucción. Esta medida es muy dispar, ya que dependerá también del tipo de instrucción. No todas las instrucciones tardan los mismos ciclos, y cada procesador tendrá un tiempo de respuesta diferente. Algunas pueden realizarse en 1, otras en 3, etc. Por ejemplo, una instrucción de carga (load) puede demorarse 5 ciclos, mientras una de salto (jump) podría tardar 3.
  • FLOPS: es el acrónimo de Floating Point Operations Per Second. Es decir, las operaciones de coma flotante que un procesador puede realizar en un solo segundo. Esta unidad es especialmente importante en aplicaciones científicas, y no tanto en otro tipo de software donde priman los enteros. Por ejemplo, el IBM Summit alcanza 200 PFLOPS (PetaFLOPS), lo que quiere decir que puede realizar 200.000.000.000.000.000 cálculos de coma flotante en un segundo. Además, debes saber que se suele relacionar esta unidad con el vatio (FLOPS/w) para medir la eficiencia energética de una máquina.
  • Frecuencia de reloj (hercio): no hay que confundirlo con nada de lo anterior. Esta unidad determina la velocidad de conmutación de los transistores de un procesador. Si una CPU tiene 3.2 Ghz no quiere decir que pueda realizar 3.200.000.000 operaciones en un segundo, sino que trabajará a ese «ritmo». Ahora bien, si se hace trabajar un chip a mayor frecuencia, tanto los FLOPS como IPS se verían beneficiados.

Existen más, por ejemplo, SUPS (Synaptic Update Per Second) o CUPS (Connections Updates Per Second) usada para medir rendimiento en redes neuronales artificiales, etc.

Cálculos

Después de haber explicado lo básico, vamos con las fórmulas

Frecuencia

Deberías conocer las diferencias entre frecuencia (f), ciclo o periodo (T):

De aquí se pueden sacar algunas conclusiones, como la repercusión de la profundidad y la lógica en la frecuencia de una CPU:

frecuencia

Tiempo de ejecución

El tiempo que tarda en ejecutarse un programa se puede calcular así:

Tiempo ejecución

Es decir, el tiempo será igual al número de instrucciones necesarias para dicho programa (NI), por el número de ciclos necesarios  para ejecutar cada instrucción (CPI) partido por el tiempo que tarda en producirse un periodo de reloj. Como el número de instrucciones de un programa no se puede cambiar desde el lado del hardware, lo que se busca es reducir el CPI y aumentar la frecuencia para reducir el tiempo de ejecución.

Rendimiento y tiempo de ejecución

El rendimiento resulta de hacer la inversa del tiempo de ejecución:

rendimiento

Aunque se suele expresar en tiempo de CPU con la fórmula:

tiempo CPU

La primera fórmula para una CPU y la segunda para un sistema paralelo, siendo P el número de procesadores instalados en el sistema. En cuanto al término RI, es el recuento de instrucciones (es lo mismo que NI, solo que he empleado un término diferente en esta fórmula).

Por ejemplo, imagina un chip X que trabaja a 2 Ghz, con un IPC de 16 DP y 32 SP, y siendo un quadcore. Si se supone que va a ejecutar un programa compuesto por 800 instrucciones y que trabajará en doble precisión:

ejemplo

IPS

Para calcular las instrucciones por segundo de una CPU se puede aplicar la fórmula:

mips

Como la mayoría de microarquitecturas están segmentadas (pipeline) y surgen dependencias de instrucciones, predicción, etc., eso supone que se debe llevar el vaciado del cauce en caso de que haya algún problema. Por tanto, no es tan sencillo como aplicar la anterior fórmula.

FLOPS

Para los cálculos de coma flotante en un segundo:

flops

El primer caso para un sistema simple y el segundo para uno paralelo. Por cierto, habría que diferenciar si se hacen en precisión simple o doble… También hay que diferenciar entre FLOPS nativos y relativos (normalizados). Para esto también me gustaría dedicar un artículo, por el momento quédate con el cálculo. Así no se alargan tanto los artículos y se hacen tan pesados. Lo mismo digo para otros cálculos que me gustaría analizar como el parallel speedup, la ley de Amdahl, ley de Gustafson, etc.

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar