Actualizado a: 22 de enero de 2024
El rendimiento de una CPU, o microprocesador, no solo depende de tener más o menos núcleos, o de tener más o menos frecuencia de reloj. Además, este rendimiento se puede medir de muchas formas posibles, y no todos los modelos de procesador son igual de buenos usando una métrica u otra. Por eso, en este artículo te mostraré todo lo que debes saber sobre el rendimiento de la CPU y las unidades de medición empeladas.
Rendimiento y Tiempo de ejecución
El rendimiento y el tiempo de ejecución de una CPU están relacionados y se utilizan para evaluar y comparar el desempeño de un procesador en diversas tareas y cargas de trabajo.
- Rendimiento: se refiere a la cantidad de trabajo que puede realizar en un período de tiempo determinado. Se puede medir en diferentes unidades, como veremos más adelante. En términos generales, el rendimiento se relaciona con la cantidad de tareas que la CPU puede realizar en un segundo. Cuanto mayor sea el rendimiento, más rápido y eficiente será el procesador al ejecutar instrucciones y realizar operaciones.
- Tiempo de ejecución: El tiempo de ejecución de una CPU se refiere al tiempo que le toma completar una tarea o un conjunto de tareas. Es el tiempo que pasa desde que se inicia la tarea hasta que se completa. El tiempo de ejecución se mide en segundos y puede variar según la complejidad de las operaciones y el rendimiento del procesador.
La relación entre el rendimiento y el tiempo de ejecución se puede expresar mediante la fórmula:
Rendimiento = 1 / Tiempo de ejecución
Rendimiento = Frecuencia de reloj · IPC / Recuento de instrucciones
El rendimiento también es denominado throughput
Esta fórmula indica que el rendimiento es inversamente proporcional al tiempo de ejecución. Es decir, a medida que el tiempo de ejecución disminuye (la CPU realiza las tareas más rápido), el rendimiento aumenta. Por otro lado, si el tiempo de ejecución aumenta, el rendimiento disminuye. Dicho de otra manera, lo que buscan los diseñadores de CPUs es encontrar microarquitecturas donde se procesen las tareas de forma más rápida (más IPC y más frecuencia de reloj), bajando el tiempo de ejecución e incrementando el rendimiento…
Por otro lado, el tiempo de ejecución también se puede calcular con la fórmula:
Tiempo de ejecución = RI · CPI · t
Tiempo de ejecución = RI/P · 1/IPC · t
Es decir, que el tiempo de ejecución es igual al recuento de instrucciones por la cantidad de ciclos por instrucción que se necesitan, y multiplicado por el tiempo que tarda un ciclo de reloj en concluir. O, también se puede expresar como el recuento de instrucciones entre el número de núcleos o procesadores instalados en el sistema, multiplicado por la inversa del IPC y por el tiempo de ciclo.
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).
Si se desea comparar el rendimiento entre dos sistemas o máquinas diferentes, lo único que hay que hacer es aplicar esta fórmula:
n = Rendimiento de A / Rendimiento de B
n = Tiempo de ejecución de A / Tiempo de ejecución de B
Frecuencia de reloj, ciclo y periodo
La frecuencia de reloj de una CPU, el ciclo y el período están estrechamente relacionados y se utilizan para medir y describir el funcionamiento de una unidad central de procesamiento. Veamos qué significan y cómo se relacionan:
- Frecuencia de reloj (Clock Frequency): se refiere a la velocidad a la que el reloj interno de la CPU genera pulsos eléctricos. Estos pulsos actúan como señales de sincronización para coordinar y controlar las operaciones internas de la CPU. Se mide en Hertz (Hz) y representa la cantidad de ciclos de reloj que la CPU puede realizar en un segundo. Una frecuencia de reloj más alta significa que la CPU puede realizar más operaciones en un período de tiempo dado.
- Ciclo (Clock Cycle): es el tiempo que le toma a la CPU completar una operación básica. Es la duración de un pulso eléctrico del reloj. En términos simples, cada ciclo de reloj representa una unidad básica de tiempo durante la cual la CPU realiza una acción específica, como leer una instrucción o ejecutar una operación aritmética. La frecuencia de reloj está directamente relacionada con la duración del ciclo; cuanto más corto sea el ciclo, mayor será la frecuencia de reloj.
- Período (Clock Period): es el inverso de la frecuencia de reloj. Representa el tiempo que toma para que un ciclo de reloj completo se complete. El período se mide en segundos y se calcula como la inversa de la frecuencia de reloj. Por ejemplo, si la frecuencia de reloj es de 2 GHz (2 mil millones de ciclos por segundo), entonces el período será de 1/2 GHz o 0.5 nanosegundos.
Relación y cálculo:
Frecuencia de reloj (Hz) = 1 / Período (segundos)
Ciclo (segundos) = Período (segundos)
IPS
El IPS o «Instructions Per Second» (Instrucciones por segundo) es una medida que indica la cantidad de instrucciones que una CPU puede ejecutar en un segundo. Representa la capacidad de procesamiento y rendimiento de la CPU al realizar operaciones y tareas, generalmente, se mide en millones de ellas, es decir, en MIPS.
Para calcularlo, se tiene que usar la fórmula:
MIPS = RI / Tiempo de ejecución · 10⁶
MIPS = 1/CPI · 10⁶ · t
MIPS = Frecuencia / CPI · 10⁶
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.
La medición del IPS se realiza a través de pruebas y benchmarks específicos que evalúan el rendimiento de la CPU en condiciones controladas. Estos benchmarks ejecutan una serie de tareas y operaciones que simulan situaciones de uso comunes en aplicaciones y programas del mundo real.
Es importante tener en cuenta que el IPS puede variar según el tipo de instrucciones y la complejidad de las operaciones que la CPU está ejecutando, al igual que ocurre con el IPC. Además, el rendimiento real de una CPU en aplicaciones reales también puede depender de otros factores, como la frecuencia de reloj, la cantidad y la velocidad de la memoria caché, el número de núcleos y el tipo de arquitectura utilizada.
Al igual que el IPC, también es una métrica para comparar rendimiento entre CPUs.
IPC
El IPC o «Instructions Per Cycle» (Instrucciones por Ciclo) es una medida que indica cuántas instrucciones puede ejecutar una CPU en un solo ciclo de reloj. Representa la eficiencia de la CPU en términos de cuántas operaciones o instrucciones puede procesar en una unidad de tiempo determinada.
Para medir el IPC de una CPU, se realizan pruebas y análisis en condiciones controladas, utilizando software específico diseñado para evaluar el rendimiento del procesador. Estos benchmarks o pruebas sintéticas ejecutan una serie de tareas y operaciones que simulan situaciones de uso comunes en aplicaciones y programas del mundo real.
El resultado del IPC se expresa como un número, generalmente en unidades de instrucciones por ciclo o instrucciones por segundo. Por ejemplo, si el IPC de una CPU es de 2, significa que la CPU puede ejecutar dos instrucciones en cada ciclo de reloj. Por ejemplo, la fórmula en este caso sería:
C = Instrucciones del programa de prueba · Media de ciclos por instrucción
Es importante tener en cuenta que el IPC puede variar según el tipo de instrucción y la complejidad de las operaciones que la CPU está ejecutando. Por ejemplo, las instrucciones más complejas, como las de coma flotante o SIMD, suelen tardar más ciclos en completarse que una instrucción de enteros, etc. Además, el rendimiento real de una CPU en aplicaciones reales también puede depender de otros factores, como la frecuencia de reloj, la cantidad y la velocidad de la memoria caché, el número de núcleos y el tipo de arquitectura utilizada.
El IPC es una métrica relevante para comparar el rendimiento de diferentes CPUs, especialmente si pertenecen a la misma familia o arquitectura. Sin embargo, no es la única medida que determina el rendimiento general de un procesador, y es importante considerar otras especificaciones y características para obtener una imagen completa del rendimiento de una CPU en diversas cargas de trabajo.
CPI
Cycles Per Instruction (CPI) o Ciclos por Instrucción es una métrica utilizada para medir el rendimiento y la eficiencia de una CPU (Unidad Central de Procesamiento). Representa el número promedio de ciclos de reloj que la CPU necesita para ejecutar una instrucción específica.
CPI = Ciclos de reloj de la CPU / Recuento de instrucciones
En términos simples, cada instrucción que se ejecuta en una CPU lleva un cierto número de ciclos de reloj para completarse. El CPI indica cuántos ciclos de reloj, en promedio, se necesitan para completar una instrucción determinada.
Una CPI más bajo es deseable, ya que indica que la CPU puede ejecutar las instrucciones de manera más eficiente y en menos ciclos de reloj. Por otro lado, un CPI más alto implica que la CPU necesita más ciclos de reloj para realizar una instrucción, lo que puede significar que la CPU es menos eficiente y que la ejecución de programas y tareas tomará más tiempo.
El CPI puede variar según la arquitectura de la CPU, la complejidad de las instrucciones y el conjunto de instrucciones que admite la CPU. Una CPU con una arquitectura más avanzada y un conjunto de instrucciones más eficiente puede tener un CPI más bajo, lo que se traduce en un mejor rendimiento general.
En general, al comparar diferentes CPUs, se busca aquella con un CPI más bajo, ya que esto indica que es capaz de ejecutar las instrucciones de manera más rápida y eficiente, lo que se traduce en un mejor rendimiento y una mayor capacidad de procesamiento de datos.
FLOPS
Los FLOPS (Floating Point Operations Per Second) son una medida de rendimiento utilizada para cuantificar la capacidad de cálculo en punto flotante de una CPU o procesador. Representan la cantidad de operaciones aritméticas de punto flotante que la CPU puede realizar en un segundo. Las operaciones en punto flotante involucran números con decimales, como números reales o fracciones, y son comunes en aplicaciones que requieren cálculos matemáticos intensivos, como simulaciones científicas, gráficos 3D, inteligencia artificial y aplicaciones de procesamiento de imágenes.
Para calcular los FLOPS de una CPU, se necesita conocer su arquitectura y la frecuencia de reloj. Los FLOPS se pueden calcular utilizando la siguiente fórmula:
FLOPS = Operaciones en coma flotante / Tiempo de CPU
Y en un sistema paralelo, con varios procesadores y varios núcleos, como es el caso de los sistemas HPC, la fórmula se puede adaptar de la siguiente manera:
FLOPS = nº sockets · núcleos/socket · ciclos/segundo · FLOPS/ciclo
BOPS
Los BOPs (Basic Operations Per Second) o «Operaciones Básicas por Segundo» son una medida de rendimiento utilizada para cuantificar la capacidad de una CPU o procesador de realizar operaciones básicas o elementales en un segundo. Estas operaciones básicas suelen ser cálculos aritméticos simples, como sumas, restas, multiplicaciones y divisiones. Los BOPs son relevantes para aplicaciones que requieren un alto rendimiento en cálculos básicos, como procesamiento numérico, cálculos matriciales y otras operaciones aritméticas.
Para calcular los BOPs de una CPU, se necesita conocer su arquitectura y la frecuencia de reloj. Los BOPs se pueden calcular utilizando la siguiente fórmula:
BOPs = Número de núcleos x Frecuencia de reloj x Número de instrucciones básicas por ciclo x Operaciones básicas por instrucción
- Número de núcleos: Representa la cantidad de núcleos físicos o unidades de procesamiento en la CPU. Si la CPU tiene múltiples núcleos, se pueden realizar cálculos en paralelo, lo que aumenta el rendimiento en operaciones básicas.
- Frecuencia de reloj: Es la velocidad a la que la CPU ejecuta sus ciclos de reloj, medida en Hertz (Hz). Cuanto mayor sea la frecuencia de reloj, más operaciones básicas se pueden realizar en un segundo.
- Número de instrucciones básicas por ciclo: Representa la cantidad de instrucciones básicas que la CPU puede realizar en un solo ciclo de reloj. Las arquitecturas modernas suelen ser capaces de ejecutar múltiples instrucciones en paralelo en un solo ciclo.
- Operaciones básicas por instrucción: Es el número de operaciones básicas que se realizan en una sola instrucción. Por ejemplo, una instrucción SIMD (Single Instruction, Multiple Data) puede realizar múltiples operaciones básicas en paralelo en un solo ciclo de reloj.
Una vez que se conocen estos valores, simplemente multiplicamos todos los factores para obtener los BOPs totales de la CPU. Los BOPs proporcionan una visión más específica del rendimiento en operaciones básicas, lo que puede ser relevante para ciertas aplicaciones y cargas de trabajo que dependen en gran medida de cálculos aritméticos simples. Sin embargo, es importante tener en cuenta que los BOPs son solo una medida de rendimiento en operaciones básicas y no reflejan completamente el rendimiento general de la CPU en todas las tareas y aplicaciones.
Ancho de banda
El ancho de banda de la CPU se refiere a la cantidad máxima de datos que la CPU puede transferir o procesar en un período de tiempo determinado, generalmente medido en bytes por segundo. Es una medida importante del rendimiento de la CPU, especialmente cuando se trata de aplicaciones que requieren un alto flujo de datos, como aplicaciones de procesamiento de gráficos, cálculos científicos y tareas de computación intensiva.
Por ejemplo, en una CPU con soporte para módulos DDR4 que tiene un bus de 64-bit, con 2 transferencias por ciclo de reloj del controlador de memoria (MMU), ya que es DDR, frente a SDR. Es decir, si fuese DDR4-3200, sería 1600 Mhz (memclk) y un ancho de banda de 3200 Gbps. Por tanto, para calcular el ancho de banda máximo teórico de esta RAM, se puede usar:
Ciclos por segundo · 2 · 64 · Nº de canales
1.600.000.000 · 2 · 64 · 2 = 409.600.000.00 bits por segundo
Es decir, serían 51.2 GB/s de ancho de banda. Esa sería la interfaz con la memoria RAM que esta CPU del ejemplo tendría. Por tanto, ese sería el ancho de banda disponible por los núcleos para obtener datos e instrucciones desde la memoria principal.
Latencia
La latencia entre la CPU y la memoria RAM se refiere al tiempo que tarda la CPU en acceder a la memoria para leer o escribir datos. Es un factor crítico en el rendimiento del sistema, ya que afecta directamente la velocidad con la que la CPU puede obtener los datos necesarios para realizar sus operaciones. Por tanto, en parte, muchas de las medidas de rendimiento anteriormente vistas también dependerán de esta latencia, ya que la velocidad en la que las instrucciones son recuperadas desde la memoria va a afectar a la cantidad de ciclos necesarios…
Cuando la CPU necesita acceder a la memoria RAM, se produce un retraso debido a la velocidad a la que pueden ocurrir las transferencias de datos entre la CPU y la memoria. Esta latencia puede medirse en unidades de tiempo, como nanosegundos (ns). Cuanto menor sea la latencia, más rápidamente la CPU puede obtener los datos necesarios, lo que mejora el rendimiento general del sistema.
En general, una menor latencia entre la CPU y la memoria RAM es lo que se quiere para mejorar el rendimiento del sistema, especialmente en tareas que involucran un alto volumen de acceso a la memoria, como juegos, aplicaciones de edición de video y tareas de cálculo intensivo. Sin embargo, es importante tener en cuenta que la latencia de la memoria RAM no es el único factor que afecta el rendimiento general del sistema, y debe considerarse en conjunto con otros componentes del sistema, como la velocidad del procesador, la cantidad de memoria instalada y la velocidad del bus de datos.
BogoMIPS
bogoMIPS es una medida de rendimiento muy simple y rudimentaria, además de ficticia (ideada por Linus Torvalds), utilizada en el kernel de Linux para calibrar la velocidad de la CPU. El término «bogoMIPS» significa «Bogus (bogo) Million Instructions Per Second» (Millones de Instrucciones Por Segundo Falsas).
El valor de bogoMIPS se determina en el arranque del sistema por el kernel de Linux mediante la ejecución de una serie de bucles de instrucciones vacías durante un breve período de tiempo. La velocidad a la que se pueden completar estos bucles se utiliza para calcular el valor de bogoMIPS. Sin embargo, es importante destacar que bogoMIPS no mide realmente el rendimiento real de la CPU en términos de instrucciones por segundo; es solo una medida de referencia relativa.
El propósito principal de bogoMIPS es proporcionar al kernel de Linux una estimación básica de la velocidad de la CPU que se utiliza para algunas funciones internas, como la planificación de tareas y ajustes del temporizador. No tiene ninguna utilidad real para evaluar el rendimiento de la CPU en comparación con otras métricas más precisas, como MIPS (Millones de Instrucciones Por Segundo) o FLOPS (Operaciones de Punto Flotante Por Segundo).
Speedup (aceleración)
La Ley de Amdahl es un principio fundamental en el diseño y la mejora del rendimiento de sistemas informáticos, especialmente en relación con la paralelización de tareas. Fue propuesta por el ingeniero informático Gene Amdahl en 1967 y se aplica en diversos campos de la informática, como el diseño de CPUs, el desarrollo de software y la optimización de sistemas en general.
La Ley de Amdahl establece que el rendimiento máximo que puede lograrse al mejorar una parte de un sistema está limitado por la fracción de tiempo que dicha parte representa del tiempo total de ejecución. Es decir, si una parte del sistema representa una fracción «f» del tiempo total de ejecución, entonces el rendimiento máximo que se puede obtener al mejorar esa parte está limitado a 1/f veces el rendimiento original.
La fórmula para la Ley de Amdahl es la siguiente:
Speedup o aceleración = 1 / [(1 – f) + (f / P)]
Donde:
- «Speedup o aceleración» es el aumento en el rendimiento que se logra con la mejora.
- «f» es la fracción del tiempo total de ejecución que se ve afectada por la mejora (es decir, la parte paralelizable).
- «P» es la cantidad de veces que se mejora el rendimiento de la parte paralelizable. Por ejemplo, si se mejora el rendimiento de esa parte en 2 veces, P sería igual a 2.
La Ley de Amdahl destaca la importancia de identificar las partes del sistema que pueden ser paralelizadas y mejorar su rendimiento para lograr un mayor aumento global en el rendimiento del sistema. Sin embargo, también pone de manifiesto que siempre habrá limitaciones en el rendimiento debido a las partes no paralelizables (1 – f) que no pueden ser mejoradas significativamente.
En el contexto de una CPU, la Ley de Amdahl se aplica al diseñar arquitecturas y optimizar el rendimiento de los procesadores. Se busca identificar y mejorar las partes paralelizables en el diseño para obtener el máximo rendimiento posible. No obstante, siempre habrá componentes o tareas que no pueden ser paralelizadas y que limitarán el rendimiento general de la CPU, según la fracción de tiempo que representen en el tiempo total de ejecución.
Ley de Gustafson
La Ley de Gustafson, también conocida como la Ley de Aceleración de Gustafson, es un principio relacionado con el rendimiento de sistemas paralelos. Fue propuesta por el científico informático John Gustafson en 1988, como una alternativa a la Ley de Amdahl, que se centra en sistemas con carga fija y tiempo de ejecución fijo.
La Ley de Gustafson se aplica a sistemas paralelos que permiten escalar el tamaño del problema junto con la cantidad de recursos computacionales disponibles, como la cantidad de procesadores en un clúster o supercomputadora. A diferencia de la Ley de Amdahl, que asume que el tamaño del problema y el tiempo de ejecución son fijos, la Ley de Gustafson se centra en cómo el rendimiento puede mejorar a medida que se aumentan los recursos y el tamaño del problema.
La Ley de Gustafson se formula de la siguiente manera:
Aceleración = T_secuencial + (T_paralelo – T_secuencial) / P
Donde:
- «Aceleración» es el tiempo total de ejecución mejorado cuando se utilizan P procesadores en paralelo.
- «T_secuencial» es el tiempo de ejecución para resolver el problema en una única secuencia de ejecución (un solo procesador).
- «T_paralelo» es el tiempo de ejecución para resolver el problema en paralelo utilizando P procesadores.
- «P» es el número de procesadores utilizados en el sistema paralelo.
La Ley de Gustafson sugiere que, a medida que se aumenta el número de procesadores (P), el tiempo de ejecución del problema disminuirá, siempre y cuando el tamaño del problema también se incremente proporcionalmente. Esto implica que el rendimiento mejorado se puede lograr mediante la distribución del trabajo entre múltiples procesadores y aumentando el tamaño del problema en consecuencia.