Guía Hardware

¿Qué es el IPC? ¿Cómo saber el IPC de un procesador? ¿Es importante?

Actualizado a: 22 de enero de 2024

El IPC es una medida muy popular para medir el rendimiento de una CPU o procesador. Los fabricantes y diseñadores de estos chips la suelen usar mucho para comparar con la competencia o para mostrar los incrementos que han obtenido con la implementación de una nueva microarquitectura frente a la generación anterior usando tantos por ciento de incrementos en el IPC. Pero ¿realmente es importante? ¿qué describe exactamente? ¿cómo se puede saber? Todo eso lo vamos a ver aquí…

¿Qué es el IPC?

CPU IPC

Las instrucciones por ciclo (IPC o Instruction Per Cycle) son una medida del rendimiento de un procesador que representa la media de instrucciones ejecutadas en cada ciclo de reloj. Es el inverso de los ciclos por instrucción, además es importante destacar que es una media, no algo exacto, y que dependerá del software que se esté ejecutando.

Factores como el IPC y la velocidad de reloj influyen en el rendimiento de la CPU y la elección entre ellos se basa en diversas consideraciones como la historia, las limitaciones técnicas y las estrategias de marketing.

El cálculo del IPC implica ejecutar un código específico, contar las instrucciones necesarias y medir los ciclos de reloj reales con temporizadores de alto rendimiento. El resultado se obtiene dividiendo el número de instrucciones entre los ciclos de reloj de la CPU. Para estimar el rendimiento de la CPU, se puede multiplicar el IPC por la frecuencia de reloj del procesador, ya que como es la cantidad de instrucciones por ciclo de reloj, así podrás determinar cuántas instrucciones en total puede ejecutar el procesador en cada segundo.

Como he comentado anteriormente, el IPC no es constante y depende de cómo interactúa el software con la CPU y la jerarquía de memoria. Al comparar diferentes conjuntos de instrucciones, un conjunto más simple puede tener un IPC más alto que uno más complejo, es decir, por lo general un RISC tiene un IPC superior a un CISC. Sin embargo, es muy subjetivo, ya que por ejemplo, una instrucción que opera con enteros se puede ejecutar de forma más rápida que una instrucción de coma flotante, especialmente si son SIMD o vectoriales. Por ejemplo, una instrucción AVX-512 podría demorarse más ciclos de reloj para completarse. Por eso no es una medida fiable, sino una medida media.

No hay que confundir el IPC con el concepto de la Intercomunicación entre Procesos, también conocido por sus siglas en inglés IPC (Inter-Process Communication). Sin embargo, son dos cosas diferentes. En este caso, el IPC es una función esencial en los sistemas operativos. Los procesos tienen la capacidad de intercambiar información y datos entre sí de diversas maneras. Esto puede lograrse compartiendo áreas de memoria, como variables compartidas o buffers, o mediante otros métodos ofrecidos por el kernel del sistema operativo.

Por tanto, el rendimiento no depende solo de la velocidad del procesador, sino también de otros factores como la ISA, la microarquitectura del procesador, la organización del sistema informático, y la eficiencia del software que se ejecuta. Por lo tanto, las pruebas comparativas de aplicaciones suelen ser más útiles que el IPC para evaluar el rendimiento del sistema en términos prácticos.

Diferencia con el IPS

Las instrucciones por segundo (IPS o Instruction Per Second) no deben confundirse con el IPC, aunque está relacionado. IPS es una métrica que evalúa la velocidad de procesamiento de un procesador. En el caso de procesadores tipo CISC, el tiempo necesario para ejecutar diferentes instrucciones puede variar, lo que hace que el valor de IPS dependa de la combinación de instrucciones utilizada. Incluso al comparar procesadores de la misma familia, medir IPS puede ser complicado, y no siempre se puede usar como una referencia de rendimiento, como también ocurría con el IPC.

Frecuentemente, las mediciones de IPS han representado tasas de ejecución máxima en secuencias de instrucciones artificiales con pocas ramas (branch) y sin contención de caché, lo cual no refleja el rendimiento realista en cargas de trabajo típicas. Además, la jerarquía de memoria juega un papel significativo en el rendimiento del procesador, aunque a menudo se pasa por alto en los cálculos de IPS. Debido a estas limitaciones, se utilizan bancos de rendimiento sintéticos, o benchmarks, como Dhrystone para estimar el rendimiento en aplicaciones cotidianas.

Por otro lado, hay que decir que se puede usar el IPS y los vatios (W) consumidos para medir la eficiencia energética de un procesador, usando los MIPS/w. También es posible hacerlo con FLOPS/w, cuando se miden en máquinas HPC donde los cálculos en coma flotante son más importantes.

El término IPS se utiliza comúnmente con múltiplos como el kIPS, MIPS, GIPS, etc., para formar unidades como kilo-instrucciones por segundo (kIPS), mega-instrucciones por segundo (MIPS), giga-instrucciones por segundo (GIPS), y así sucesivamente. De todas ellas, MIPS es la más popular de todas, una unidad que se ha venido utilizando durante mucho tiempo para medir el rendimiento de una CPU.

Más métricas para medir el rendimiento de la CPU

Cómo saber el IPC de una CPU

El cálculo del IPC implica la ejecución de varios códigos, determinar la cantidad de instrucciones de nivel de máquina necesarias para ejecutar dichos códigos y el uso de temporizadores de alto rendimiento para contar la cantidad de ciclos de reloj necesarios para completar la tarea en el hardware principal.

Para simplificar, se divide el número de instrucciones ejecutadas entre el número de ciclos de reloj durante un período de tiempo específico. Entonces, la fórmula básica para calcular el IPC es:

IPC = Número de instrucciones ejecutadas / Número de ciclos de reloj

Es importante destacar que los contadores de rendimiento de la CPU registran la cantidad de instrucciones ejecutadas, mientras que la frecuencia del reloj de la CPU determina la cantidad de ciclos de reloj.

El objetivo principal de este cálculo del IPC es evaluar la eficiencia con la que una CPU ejecuta instrucciones. Por lo tanto, el valor del IPC no es constante para un procesador específico, lo vuelvo a repetir, ya que es importante como veremos más adelante.

Antes de finalizar este apartado, también me gustaría decir que el IPC está relacionado con el tiempo de ejecución de la CPU, siendo la fórmula para calcular el tiempo que se tarda en ejecutar un programa la siguiente:

Tiempo de CPU = NI * CPI / Frecuencia de reloj

Siendo NI el recuento de instrucciones del programa probado, CPI los ciclos por instrucción necesarios, y la frecuencia de reloj medida en Mhz.

Fiabilidad de las benchmarks

El IPC no es una característica tan importante como pueda parecer, sino que es algo más relativo. El IPC es una medida que depende del software y cómo utiliza un núcleo de CPU específico. Por lo tanto, elegir una CPU por el IPC en términos generales puede ser inapropiado. Si se emplea el mismo software para la compatativa, sí que puede ser interesante para comparar el salto en rendimiento de una generación o microarquitectura frente a otra. Sin embargo, nos podemos encontrar dos procesadores con diferente IPC y que el que tiene mayor IPC no sea el que ofrece mayor rendimiento…

En lugar de buscar un valor absoluto de IPC para una CPU, es más útil recurrir a las comparativas de rendimiento, a los benchmarks. A lo largo de los años, se han publicado numerosos resultados de pruebas de referencia en sitios web y revistas. Sin embargo, la utilidad de estos puntos de referencia puede ser también dudosa, ya que podrían tener un código optimizado para ciertos procesadores o perjudicar a otros.

En la mayoría de los casos, la búsqueda de un IPC específico carece de relevancia. Lo más importante es identificar las necesidades específicas de su uso, y el presupuesto, y buscar puntos de referencia relevantes para tomar decisiones informadas. Por ejemplo, si vas a utilizar un equipo para edición de vídeo, busca benchmarks que midan el rendimiento en codificación y decodificación de vídeo y así podrás encontrar la CPU más adecuada…

IPC vs frecuencia de reloj

partes microprocesador

La velocidad de una CPU, o frecuencia de reloj, es un factor importante cuando se comparan dos CPUs con la misma microarquitectura, pero deja de ser relevante al comparar CPUs con diferentes microarquitecturas. Por ejemplo los procesadores AMD Zen 3 lograron una mejora de casi un 19% en el IPC en comparación con su predecesor Zen 2, mientras que Zen 4 vio una mejora del 13% respecto a Zen 3.

Si nos quedamos con el caso de Zen 2 vs Zen 3, por ejemplo, hay que decir que Zen 3 se fabricó usando un nodo de 7nm, pudiendo aumentar más le frecuencia de reloj, mientras que Zen 2 se fabricó con 12nm, por tanto, con una frecuencia de reloj algo más baja. Además, también se trabajó en la microarquitectura para mejorar:

  • Una mejor captura previa de caché.
  • Unidades de ejecución mejoradas.
  • Mejoras en la predicción de ramas (branch prediction).
  • Optimizaciones en la caché de microoperaciones.
  • Mejoras en la interfaz de comunicación entre núcleos.
  • Optimizaciones en las operaciones de carga y almacenamiento (L/S o Load/Store).

Un ejemplo concreto es el procesador Ryzen 5 5600X basado en Zen 3 de AMD, que supera al Ryzen 5 3600X basado en Zen 2 gracias a su mayor IPC, incluso cuando ambos funcionan a la misma velocidad de reloj. Esto demuestra que el IPC es un factor más importante que la frecuencia de reloj al comparar rendimiento, pero no del todo fiable, al tratarse de una media y depender del software como he venido repitiendo anteriormente.

En cambio, si comparamos dos CPUs de la misma generación, como puede ser el Ryzen 5 5600X y el Ryzen 5 5800X, ambos basados en Zen 3, el 5800X supera en rendimiento al 5600X, y esto se debe a que, aunque se basen en la misma microarquitectura Zen 3 con un IPC idéntico, el 5800X trabaja a 3.8Ghz y el 5600X trabaja a 3.7Ghz, lo que supone 100 Mhz de diferencia, por lo que con igual IPC, podría ejecutar 100.000.000 instrucciones más en cada segundo (IPS)…

Ventajas y desventajas de usar el IPC como medida de rendimiento

microprocesadores del futuro

De todo lo anterior se puede deducir que el IPC es una métrica importante para evaluar el rendimiento de una CPU, ya que mide la eficiencia con la que dos procesos distintos pueden comunicarse en el mismo procesador. Una CPU con un IPC más alto tiende a tener un rendimiento de comunicación más efectivo, por lo general, aunque no en todos los casos.

El IPC también es útil para medir la cantidad de trabajo que un proceso puede realizar en una CPU y desempeña un papel en la optimización de instrucciones y la identificación de posibles cuellos de botella. Es decir, puede ser una buena herramienta para los diseñadores de la microarquitectura, pudiendo saber los puntos en los que se puede mejorar. Sin embargo, como cualquier métrica, tiene sus ventajas y desventajas que debemos considerar.

Entre las ventajas del uso de IPC en una CPU, encontramos las siguientes:

  • El IPC más alto indica una mejora la eficiencia en la ejecución de código.
  • Una CPU con un IPC más alto tiende a tener un rendimiento superior, por lo que es ideal para comparar entre generaciones.
  • Además de la velocidad, el IPC contribuye a la estabilidad de las aplicaciones.

No obstante, también existen desventajas en el uso de IPC:

  • En ciertas ocasiones, el IPC puede afectar negativamente el rendimiento general.
  • Sin una implementación adecuada, el IPC puede dar lugar a vulnerabilidades en el código. Lo hemos visto con algunas tácticas de diseñadores para incrementar el IPC en sus microarquitecturas, dando lugar a side-channel attacks, como las famosas vulnerabilidades Meltdown, Spectre, etc., que afectaron a diversos microprocesadores, especialmente los de Intel.
  • Desarrollar bibliotecas de códigos personalizados para optimizar el IPC puede requerir tiempo y recursos significativos. Es decir, para crear un compilador que genere código optimizado para una microarquitectura particular.
  • El IPC puede generar problemas de comunicación entre subprocesos y causar inestabilidad.
  • La depuración de errores relacionados con implementaciones complejas para aumentar el IPC puede ser complicada.

En definitiva, el IPC es una métrica que puede mejorar el rendimiento de una CPU, pero también debemos tener en cuenta la velocidad del reloj (GHz) ya que ambos factores son importantes para lograr un rendimiento óptimo.

Cómo mejorar el IPC de un procesador

refrigeracion CPU overclocking

Cada nueva generación de procesador representa una mejora con respecto a la anterior, aunque existen algunas excepciones destacadas. Para aumentar el IPC de una CPU usando una misma ISA se debe mejorar la microarquitectura del procesador. Y esto puede incluir la mejora en factores como:

  • Caché: una mejora en la arquitectura de la memoria caché en todos sus niveles, además de una mayor cantidad de esta memoria, también puede suponer un incremento del IPC, ya que las instrucciones y datos almacenados en estos niveles de memoria se podrían recuperar más rápidamente que si hay que acceder a ellas desde la memria RAM.
  • Motor de ejecución: este componente que realmente ejecuta las operaciones implícitas en las instrucciones del código del programa que se está ejecutando. Mejorando las unidades funcionales de cálculo, tanto para enteros como para coma flotante, también implicaría un aumento del rendimiento. Esto puede hacerse mediante pipeline, mediante unidades superescalares, etc.
  • Predicción de bifurcación: conseguir una buena unidad de predicción de saltos (instrucciones de salto o branch) acelera el procesamiento de instrucciones de bifurcación mediante canalización, lo que mejora la eficiencia de la ejecución. Al mejorar la tasa de aciertos, se mejora el IPC, y no se tienen que desperdiciar tantos ciclos de reloj para vaciar el cauce en caso de fallo en la predicción y ejecución del salto adecuado.
  • Load/Store: una unidad especializada que se encarga de ejecutar todas las instrucciones relacionadas con la carga y el almacenamiento de datos. Esto es fundamental para las operaciones de lectura y escritura de datos en la CPU.
  • Front End: esta parte del procesador se encarga de las operaciones en orden, como las búsquedas y la decodificación de instrucciones. Un buen front-end permitiría traer más instrucciones y su procesamiento de forma más rápida, para indicarle al back-end, o unidades de ejecución, lo que deben hacer con los datos para obtener los resultados necesarios para el programa en ejecución. Además, es importante destacar que si se producen actualizaciones del microcódigo, también podría afectar al rendimiento del IPC, tanto para bien si son optimizaciones, como para mal. Por ejemplo, cuando se hicieron algunas correcciones del microcódigo para paliar algunas vulnerabilidades que aprovechaban ciertos atajos de la microarquitectura para ganar rendimiento, esto supuso una merma en el rendimiento.

En conjunto, estas mejoras y ajustes en varios aspectos de una CPU moderna contribuyen a un incremento en el IPC, lo que se traduce en un mejor rendimiento general de la CPU.

Jaime Herrera

Jaime Herrera

Técnico electrónico y experto en el sector de los semiconductores y el hardware. Con una amplia y sólida trayectoria en el campo de la electrónica, he acumulado una extensa experiencia. Mi pasión por la tecnología y la informática me ha impulsado a dedicar décadas de mi vida al estudio y desarrollo de soluciones en este fascinante sector. Como técnico electrónico, he tenido el privilegio de trabajar en una variedad de proyectos y desafíos, lo que me ha permitido adquirir un profundo conocimiento y experiencia en la creación, diseño y mantenimiento de dispositivos electrónicos.

>
Guía Hardware
Logo