CPI vs IPC, falacias de estas dos medidas de rendimiento en CPUs y GPUs

A la hora de medir el rendimiento de un procesador, se suelen utilizar muchas métricas pero las más comunes son el CPI y el IPC. ¿A que hacen referencias esta siglas y como afectan al diseño de nuevos

Cuando decimos que un procesador tiene un mejor rendimiento que otro procesador, ¿a qué nos referimos exactamente? Pues a que un procesador ejecuta un programa a una mayor velocidad que otro, pero, ¿Cuáles son los parámetros y condicionantes que se utilizan para mejorar el rendimiento de un procesador respecto a su sucesor?

Los departamentos de marketing a la hora de vender una tecnología tan compleja como pueden ser una CPU o una GPU tienen que tirar de simplificaciones en el rendimiento, ya que estas tienen una complejidad cada vez más grande y precisamente una de las falacias que han creado ha sido el termino IPC como termino para medir el rendimiento de un procesador.

CPI o Ciclos por instrucción, la verdadera medida de rendimiento

CPU comunicaciónLa realidad en los procesadores es que no todas las instrucciones tardan la misma cantidad de ciclos en resolverse, es decir, el ciclo de instrucción de cada instrucción varia según la complejidad de la misma y la cantidad de pasos por el que ha de pasar.

Una manera en que los arquitectos mejoran el rendimiento de los procesadores es reduciendo la cantidad de pasos que necesita una CPU para resolver ciertas instrucciones concretas, de tal manera que en lo que es el rendimiento a la hora de ejecutar un hilo de ejecución o un programa se acaba aumentando la velocidad de ejecución del programa al acelerar esas instrucciones.

Este fenómeno ocurre tanto en CPUs como en GPUs, y es la forma más común para aumentar el rendimiento de un procesador, ya que el set de registros e instrucciones lo que marca es lo que hace la instrucción, el direccionamiento de memoria que utiliza y los registros, pero no indica como.

GCN vs RDNA 2 CPI

Por ejemplo. en este tabla comparativa se puede ver la evolución de la arquitectura de GPUs GCN de AMD a RDNA de la misma compañía, como se puede ver el mismo programa shader tarda menos ciclos en la arquitectura RDNA, ya que una buena parte de sus instrucciones tienen un CPI menor.

IPC o instrucciones por ciclo

Pila CPUs

En arquitectura de computadores, el concepto instrucciones por ciclo hace referencia a la cantidad de instrucciones que un procesador ejecuta de manera simultánea por lo que esta principalmente limitado a la cantidad de unidades de ejecución que hay en el procesador, pero no es el único factor limitante ya que pueden haber instrucciones que utilizen elementos del procesador en común y que en conjunto den peor rendimiento.

Pero dicho termino tiene una variante confusa, basada en coger el tiempo en que dos procesadores tardan en ejecutar un mismo programa, para luego medir la diferencia en tiempo, pasarla a ciclos de reloj y medir la variación entre ambos. Lo que sale es una media de instrucciones por ciclo, pero no es lo que en arquitectura de computadores se le llama habitualmente IPC.

El IPC como hemos dicho al principio es la cantidad de instrucciones simultáneas que el procesador esta ejecutando, y cuando decimos ejecutando nos referimos a que esta resolviendo en ese momento. No es la cantidad de instrucciones resueltas ya que muy pocas instrucciones por no decir casi ninguna se resuelven a día de hoy en un solo ciclo de reloj.

Los benchmarks solo explican una parte de la historia

CPU Bemchmark

Una forma de medir el rendimiento de un procesador es a través de los benchmarks, los cuales no son más que programas que ejecutan una serie de instrucciones y es en la selección de las instrucciones utilizadas donde esta la clave de todo. Los fabricantes dependen mucho de las pruebas de rendimiento para vender el producto y necesitan saber que instrucciones van a utilizar más las nuevas versiones de estos.

Es por ello que existen benchmarks que están más orientados a aprovechar las instrucciones cuyo CPI se ha mejorado en un procesador o para darle ventaja a una marca concreta sobre los demás, al mismo tiempo los fabricantes también le dan preferencia a mejorar el CPI y el IPC de las instrucciones más utilizadas por las pruebas de rendimiento.

El software es el que manda al fin y al cabo

Software Sells Systems CPI IPC

Un procesador lo que hace es ejecutar un programa y lo importante es que los programas más utilizados del mercado acaben ganando cada vez más rendimiento, es por ello que no solamente se optimizan las instrucciones de los procesadores para sacar más rendimiento en los benchmarks sino también para que en los programas y funciones más utilizados marquen la diferencia.

En algunos casos llegan a crearse nuevas variantes de los conjuntos de instrucciones y de unidades de ejecución como ocurrió con el advenimiento de las unidades SIMD a finales de los 90 para el contenido multimedio o esta ocurriendo con las instrucciones para acelerar los algoritmos de inteligencia artificial.

La mejora de rendimiento no tiene porque venir siempre con la reducción en la cantidad de ciclos por instrucción, puede venir en forma de nuevas unidades de ejecución e incluso co-procesadores de apoyo.

Arquitectura contra arquitectura en los que a CPI e IPC se refiere

i9 vs ryzen 7Una de las falacias más comunes es comparar dos arquitecturas bajo la misma ISA pero de fabricantes distintos, lo cual es una comparación errónea si se hace sin tener en cuenta una serie de condicionantes.

Dado que desconocemos por completo los cambios históricos que cada fabricante ha hecho en el CPI e IPC de las instrucciones, a la hora de medir un programa incluso bajo la misma ISA nos vamos a encontrar resultados dispares si comparamos el rendimiento con el de otro programa. ¿El motivo? Ambos utilizan las mismas instrucciones pero el tiempo por instrucción varia.

Pero si hablamos de implementaciones de un mismo fabricante, entonces nos encontramos que tanto CPUs como GPUs evolucionan de manera progresiva, de una iteración a otra se mantienen una buena parte de las instrucciones de la anterior y se cambia el CPI de unas pocas seleccionadas en el periodo de diseño del procesador.

¿Qué relación tienen los FLOPS con el CPI y el IPC?

Sistema binario

Los FLOPS es la cantidad de operaciones en coma o punto flotante que puede hacer una unidad de ejecución, una operación solo dura un ciclo y no se ha de confundir con una instrucción. Estos son también utilizados en el marketing en vez del CPI y el IPC, especialmente en lo que a GPUs se refiere.

Por ejemplo podemos tener un procesador que tenga una tasa en FLOPS mucho más baja que otro y sacar mejor rendimiento por el hecho que la cantidad de ciclos por instrucción es más corto en una arquitectura que otra. A la hora de medir el rendimiento en FLOPS los departamentos de marketing cogen la instrucción con el CPI más bajo de todos, con tal de presentar números muy altos. Pero en la realidad todos sabemos que un programa se compone por multitud de instrucciones dispares.

De la misma manera que es un error comparar arquitecturas distintas con un CPI dispar, es aún más un error comparar arquitecturas distintas en lo que a la tasa de FLOPS se refiere.

¡Sé el primero en comentar!