Programación Paralela y Distribuida
Maricela Ocaña
Procesamiento Pipeline, Ley de Amdahl y Ley de
Gustafson
Procesamiento Pipeline
En computación, se le llama pipeline a una
serie de elementos de procesamiento de datos ordenados de tal modo que la
salida de cada uno es la entrada del siguiente, como quien dice una cadena de
montaje pero en vez de orientada a la manufactura, orientada al procesamiento
de datos e instrucciones.
Ciclo
de vida de una instrucción
La acción básica de cualquier
microprocesador, en tanto se mueve a través de la corriente de instrucciones,
se puede descomponer en una serie de cuatro pasos simples, que cada instrucción
en la corriente de código debe atravesar para ser ejecutada:
1. Fetch: "traer" la
instrucción que se va a ejecutar, de la dirección almacenada en el contador de
programa.
2. Store: "almacenar" la
instrucción en el registro de instrucciones y "descifrarla",
incrementando la dirección en el contador de programa.
3. Execute: "Ejecutar" la
instrucción almacenada en el registro de instrucciones. Si la instrucción no es
una instrucción de rama sino una instrucción aritmética, este proceso la envía
a la ALU apropiada (ALU: Arithmetic Logic Unit en español: Unidad
Aritmético-Lógica),
donde el microprocesador: a. "Lee" el contenido de los registros de
entrada. b. "Agrega" el contenido de los registros de entrada.
4. Write: "Escribir" los
resultados de esa instrucción de la ALU nuevamente dentro del registro de
destinación.
En un procesador moderno, los cuatro
pasos arriba descritos son repetidos una y otra vez hasta que el programa
termine de ejecutarse. Éstas son, en hecho, las cuatro etapas en un
"pipe" clásico del RISC.
El pipelining hace
su truco con la optimización total de los recursos existentes.
Los diseñadores de
microprocesadores siempre están buscando formas de incrementar el número de
instrucciones que un CPU puede completar en un período de tiempo dado. Cuando
recordamos que un programa es una secuencia ordenada de instrucciones, se hace
claro que incrementar el número de instrucciones ejecutadas por unidad de
tiempo es una forma de disminuir el tiempo total de ejecución de un programa. Incrementar la tasa de proceso de instrucciones de nuestro procesador (esto es, el numero de instrucciones completadas por unidad de tiempo) nos permite correr programas más rápidos.
Haciendo
"pipelining" al procesador, podemos poner a trabajar más de ese
hardware en cada nanosegundo, incrementando de esa manera la eficiencia del
procesador y su performance en la ejecución de programas.
Ley de Amdahl
La mejora obtenida en el rendimiento de un
sistema debido a la alteración de uno de sus componentes está limitada por la
fracción de tiempo que se utiliza dicho componente.
¿Cuál es la
aceleración A (speedup) del sistema completo después de acelerar k veces un
componente?
Casos particulares de la ley
aSi f = 0 Þ A = 1:
no hay ninguna mejora en el sistema.
bSi f = 1 Þ A = k
: el sistema mejora igual que el componente.
Casos
particulares de la ley
–
Si f
= 0 Þ A = 1: no hay ninguna
mejora en el sistema.
–
Si f
= 1 Þ A = k : el
sistema mejora igual que el componente.
Ley de Gustafson
La ley de
Gustafson establece que cualquier problema suficientemente grande puede ser
eficientemente paralelizado. La ley de Gustafson está muy ligada a la Ley de Amdahl, Gustafson enunció por
primera vez la ley que lleva su nombre en 1988.
donde P es
el número de procesadores
S es el speedup
La ley de Gustafson propone que los programadores establezcan
el tamaño de los problemas para utilizar el equipamiento disponible en su
solución en un tiempo práctico. Por consiguiente, si existe equipamiento más
rápido disponible, mayores problemas se pondrán resolver en el mismo tiempo.
La ley redefine la eficiencia como una necesidad para
minimizar la parte secuencial de un programa, incluso si esto incrementa la
cantidad total de cálculos.
Para más información puedes
consultar “Cómo funcionan los pipelines de un CPU”.