Para un mejor aprovechamiento de los recursos de un computador, la implementación de un sistema de pipelining es lo ideal para explotarlo al máximo. Con esto, se gana la ejecución de distintas instrucciones al mismo tiempo mientras se ejecuta el programa.
La idea principal de la introducción de un sistema de pipelining es para aprovechar completamente los recursos de un procesador y, de esta forma, se empieza un ciclo de ejecución de un conjunto de instrucciones, cada una en una distinta etapa.
Es importante conocer unos conceptos introductorios, entre ellos:
-
Program Counter: Registro que guarda la instrucción que se ejecuta a continuación.
-
Bus de instrucciones/datos: Transporta datos y se comunica con otros componentes del procesador para intercambiar información.
-
Banco de registros: Es la sección de memoria de datos.
-
Unidad de control: Está conectada a todos los componentes y envía señales de quien hace el trabajo en tal momento.
-
Banco de memoria: Es el que intercambia información con la memoria principal del sistema.
-
Etapas: Consiste en dividir la circuitería de Fetch - Decode - Execute. Trata de eliminar la dependencia entre estas tres etapas.
-
Prefetch: Lectura de información que se necesita de forma anticipada antes de que sean requeridos. De esta forma, el CPU no se detiene a estar en espera de la siguiente instrucción.
Al eliminar la dependencia entre las tres etapas principales del ciclo Fetch - Decode - Execute, el ciclo queda extendido de la siguiente forma:
-
Fetch instruction: Trae la instrucción a la unidad central de procesamiento.
-
Decode instruction: Decodifica la instrucción para saber lo que necesita.
-
Calculate operands: Cálculo, entre ellos, suma de registros, corrimiento en memoria, salto a alguna dirección...
-
Fetch operands: Trae los operadores que están en los registros o memoria principal.
-
Execute instruction: Realiza el trabajo específico de lo que se solicitó.
-
Write operands: Escritura de los resultados.
Existe, sin embargo, algunas reglas que se deben tomar en cuenta para el diseño de un sistema con pipelining:
-
En cada etapa hay un tipo de trabajo adicional que está involucrado en mover un dato de un buffer a otro y en realizar las diferentes funciones de preparación y entrega de estos datos. Por lo tanto, se extiende el tiempo en que las instrucciones son ejecutadas. Un sistema de pipeline siempre dura más a diferencia de uno sin pipeline. Es significativo cuando hay mucha dependencia lógicamente: se usa mucha ramificación o utilizan secciones de memoria altamente dependientes.
-
La cantidad de lógica de control que se necesita para manejar la dependencia de memoria y registros, además de optimizar el uso del pipeline, se incrementa enormemente mientras más sean las etapas que se tengan.
En esta imagen se puede apreciar como funciona un sistema sin pipeline. Cuando la primera instrucción (azul) termina su ejecución, empieza la ejecución de la segunda instrucción (rojo). Por el otro lado, en el sistema con pipeline, cuando la primera instrucción está en su segunda etapa, la segunda instrucción empieza a ser ejecutada. Cuando la primera instrucción está en su tercera etapa, la segunda instrucción se encontrará en su segunda etapa. Así, hasta hacer la ejecución de todas las instrucciones que forman un programa.
Cuando es cierto que la implementación de pipelining no mejora los tiempos de ejecución de un programa, sí se asegura el aprovechamiento de los recursos totales del computador, haciendo más trabajo por cada ciclo de ejecución del procesador. De esta forma, cumple su objetivo.
Referencias
Rauber, T., & Rünger, G. (2015). Parallel Programming: For Multicore and Cluster Systems (2nd 2013 ed.). Berlin, Germany: Springer.
GeeksforGeeks. (2019, 5 abril). Computer Organization and Architecture | Pipelining | Set 1 (Execution, Stages and Throughput). https://www.geeksforgeeks.org/computer-organization-and-architecture-pipelining-set-1-execution-stages-and-throughput/
Díaz, J. (s. f.). Pipeline (Segmentación). ciecfie. Recuperado 19 de diciembre de 2020, de http://ciecfie.epn.edu.ec/wss/VirtualDirectories/80/pag_personales/pchico/Materiales_Micros/pipeline-intro.pdf