| Artículos | 01 MAY 2001

La Unidad Central de Proceso (II): pipelining

Tags: Histórico
Conozca la técnica más citada del mundo de las CPU
Felix Torán.
Este artículo muestra todos los secretos sobre la técnica denominada pipelining. Es fácil encontrar dicho término en cualquier fuente de información sobre procesadores, ya que su impacto en las prestaciones de una CPU es importante. El conocimiento de esta técnica le permitirá hacer comparaciones más precisas y obtener una visión más realista de las prestaciones de las CPU.

Al leer cualquier comparativa actual entre procesadores, los términos “pipelining” o “pipeline” siempre están presentes. No es de extrañar, ya que se trata de una técnica para mejorar el rendimiento de una CPU. Su implementación supone un enfrentamiento con multitud de problemas que es importante conocer. El conocimiento de esta técnica permite comprender mejor cuáles son los factores que definen la potencia real de una CPU, y aporta un arma importante a la hora de evaluar procesadores. Como apreciará en este artículo, la comparación de procesadores en base a su velocidad de reloj está lejos de ser realista, en la mayoría de casos. Los siguientes apartados muestran con detalle esta interesante técnica, partiendo desde la base, y proporcionando información que cualquier comprador de un procesador debería tener en cuenta.

Introducción al pipelining
Como ya se apreció en la anterior entrega, la CPU realiza una sucesión de tareas para ejecutar cada instrucción. En principio, se puede entender que la CPU realiza toda la secuencia de tareas para cada instrucción, antes de pasar a repetir el proceso completo con la instrucción siguiente. Pero, ¿no sería posible la aplicación de cierto paralelismo (funcionamiento simultáneo de algunas o todas las etapas del sistema), de forma que aumente el rendimiento? En efecto, esto se aplica en las CPU mediante la técnica denominada pipelining.
El primer paso que aplica dicha técnica es justamente lo que se ha introducido: desglosar el funcionamiento de la CPU en diversas etapas, a las que se asignan unidades de procesamiento independientes. Dichas etapas se ejecutan de forma secuencial, y siguiendo un orden fijo. De esta forma, se obtiene lo que se denomina “pipeline” (tubería). En el fondo, este planteamiento no deja de ser una aplicación del famoso principio “divide y vencerás”, y por tanto sugiere que el rendimiento de la CPU se puede mejorar de esta forma.
Tras aplicar la última de las etapas, la instrucción en curso habrá sido ejecutada por completo. El paso de una etapa a la siguiente lo controla la señal de reloj de la CPU. La Figura 1 ilustra la estructura de una pipeline. Se aprecia la existencia de registros entre las distintas etapas. A través de estos, cada etapa puede enviar información a la siguiente.
Un símil interesante es una cadena de ensamblaje de vehículos, donde cada etapa realiza una tarea diferente (colocar ruedas, fijar el chasis, aplicar pintura, etc.), obteniendo un vehículo completo tras la última etapa.
Continuando con la cadena de ensamblaje, imagine que un vehículo no entra en la cadena hasta que el vehículo anterior ha abandonado la última etapa. En ese caso, el rendimiento no será óptimo en absoluto (piense que los operarios de cada etapa tendrán un generoso periodo de descanso hasta recibir el próximo vehículo, y por tanto no están trabajando todo lo que sería deseable). Este comportamiento no es más que el presentado hasta el momento, y es propio de los procesadores que no emplean pipelines.
El pipelining se alcanza aportando un ingrediente más a la cadena de ensamblaje: se introducirá un nuevo vehículo en la primera etapa cada vez que ésta quede libre. Lo mismo se hará en el resto de etapas: de forma simultánea, cada vehículo pasa de una etapa a la posterior. Por lo tanto, tras un llenado inicial, la cadena siempre contiene vehículos en todas las etapas, y se produce un desplazamiento continuo desde la entrada hacia la salida. Cada vez que entra un nuevo vehículo sin montar en la cadena, aparece un nuevo vehículo montado en la etapa de salida.
Suponga que hay N etapas en la cadena, y cada etapa toma 1 segundo en completarse. Si no se emplea la técnica de pipelining, se tarda N segundos en producir cada vehículo. En cambio, si se trabaja con pipelining, se tardará N-1 segundos en llenar las N etapas, pero a partir de ahí cada segundo se obtendrá un coche completo a la salida.
El caso de una CPU es totalmente análogo, teniendo en cuenta que las etapas de la cadena son las etapas de la ejecución de una instrucción. Las Figuras 2 y 3 ilustran el funcionamiento de un procesador con y sin pipelining, empleando 3 etapas de 1 segundo de duración (y, por tanto, trabajando con una frecuencia de reloj de 1 Hz).
Cuando no se emplea pipelining (Figura 2), se utilizan 3 ciclos de reloj para ejecutar cada instrucción. Si se emplea pipelining (Figura 3), se toman 2 ciclos de reloj para llenar la pipeline, pero a partir de ahí, se ejecuta una instrucción por ciclo de reloj, lo que convierte al procesador en 3 veces más rápido.
Pero, ¿si se implementa una pipeline de N etapas –y tras el llenado inicial- realmente obtendremos un procesador N veces más rápido? Como se apreciará en este artículo, esto no es cierto, ya que hay una serie de problemas que rodean al funcionamiento de toda pipeline.

La velocidad de la CPU y la frecuencia de reloj
Conviene hacer un inciso para aclarar un concepto muy importante: ¿cómo comparar la velocidad de dos CPU? La velocidad de ejecución de instrucciones, que se mide en MIPS (millones de instrucciones ejecutadas por segundo), es la cantidad con mayor significado.
Nótese que la velocidad de reloj no se ha nombrado para nada. La frecuencia de reloj relaciona las MIPS y otra cantidad auxiliar: las IPC (número de instrucciones por ciclo de reloj). La operación a efectuar es la siguiente: frecuencia_de_reloj (MHz)=MIPS/IPC. Por ejemplo, un procesador capaz de ofrecer 100 MIPS y 10 IPC, precisará de una frecuencia de reloj de 100/10=10 MHz. En resumen, debe recordar que la velocidad real del procesador la dan las MIPS, y no la frecuencia de reloj.
Para poner un ejemplo práctico (Figura 4), considere un procesador sin pipelining de tres etapas (procesador 1), donde cada etapa emplea 1/3 segundos en su ejecución. Dicho procesador emplearía 1 segundo (3 etapas x 1/3 segundos cada etapa) en ejecutar cada instrucción, lo que se traduce en 1 instrucción por segundo (1 IPS). Como cada instrucción toma 3 ciclos de reloj, se tiene 1/3 IPC. Por tanto, la frecuencia de reloj necesaria es f_reloj=1 IPS/(1/3 IPC)=3 Hz.
Ahora imagine que otro fabricante desglosa cada etapa de la pipeline en 2 nuevas etapas, obteniendo un total de 6 etapas, de 1/6 segundos de duración cada una (procesador 2). En este caso, se sigue teniendo 1 IPS pero, en cambio, se obtienen 1/6 IPC. Esto resulta en una frecuencia de reloj de 1 IPS/(1/6 IPC)=6 Hz.
La conclusión es la siguiente: los dos procesadores presentan la misma velocidad de procesamiento (1 IPS), pero ¡la frecuencia de reloj en el segundo caso vale el doble!
Por ello, siempre debe recordar la siguiente regla de oro: nunca evalúe ni compare procesadores por su frecuencia de reloj, la cantidad que debe tener en cuenta son las MIPS. Un procesador que trabaja a 200 MHz no tiene por qué ser más potente que otro que trabaja a 100 MHz. En el caso de emplear pipelining, las velocidades se incrementan, pero el concepto presentado es

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información