Segmentación: Mejora del rendimiento IEC – UTM Moisés E. Ramírez G. 1 Segmentación La segmentación (pipelining) es una técnica de implementación por la cual se solapa la ejecución de múltiples instrucciones. Es la técnica de implementación clave utilizada para hacer CPU rápidas. 2 1 Ejemplo: lavanderia 1. 2. 3. 4. Colocar la carga de ropa sucia en la lavadora. Sacar la ropa de la lavadora para pasarla a la secadora. Doblar la ropa seca. Acomodar la ropa limpia y seca en su lugar correspondiente. 3 Lavado usando segmentación Cada uno de los pasos en los que se dividió el proceso se conoce como una etapa de la segmentación o un segmento. La segmentación no disminuye el tiempo de ejecución pero si aumenta la productividad, y de esta manera se aumenta el rendimiento. 4 2 Para la ejecución de instrucciones MIPS 1. 2. 3. 4. 5. Atrapar las instrucciones de la memoria. Leer los registro mientras se decodifica la instrucción. Ejecutar la instrucción o calcular una dirección. Accesar un operando en memoriade datos. Escribir el resultado en un registro. 5 Riesgos en la segmentación Riesgos de Estructura: Significa que el hardware no puede soportar la combinación de instrucciones que se quiere ejecutar en el mismo ciclo. Ejemplo: Si contamos con una sola memoria, para datos y código, no será posible escribir o leer un dato, mientras se atrapa una instrucción. Riesgos por dependencias de datos: Una instrucción depende del resultado de una instrucción previa que aún está en la segmentación. Riesgos de Control: Surgen de la necesidad de hacer una decisión basada en los resultados de una instrucción, mientras otras se están ejecutando. Ejemplo: en un brinco condicional, mientras se determina si el brinco se hará o no, otras instrucciones ingresarán al procesador. Si se determina que el brinco no se llevará a cabo, esas instrucciones prosiguen su ejecución. 6 3 Implementación multiciclos vs segmentación Se desean analizar dos implementaciones: multiciclo y segmentado, en la siguiente tabla se muestra el tiempo requerido para cada etapa y tipo de instrucción. La ejecución de 3 instrucciones de carga en la implementación multiciclos, ocupara 800 x 3 = 2,400 ps, la implementación segmentada usa 1,400 ps. 7 Para la segmentación, hay etapas que requieren solo 100 ps, pero todas comparten el mismo ciclo de reloj, entonces cada etapa debe considerar el peor de los casos, que es 200 ps. Para poder calcular el tiempo entre el fin de una y otra instrucción segmentada, (suponiendo condiciones ideales) y compararlo con la versión no segmentada, se tiene que: Tiempo entre instrucciones Tiempo entre instrucciones (segmentadas) (no segmentadas) = Número de etapas de segmentación 8 4 9 Trabajando en condiciones ideales y con un número grande de instrucciones, ¿cuál es el aumento del rendimiento? Supongamos 1,000,000 instrucciones 1e6 * 800ps / 1e6 * 200ps ̴ 4 La segmentación aumenta el throughput (rendimiento) de la implementación, y no necesariamente el tiempo de ejecución de las instrucciones. 10 5 Camino de datos segmentado Previamente se analizaron las implementaciones de un solo ciclo y multiciclos. Las etapas requeridas por cada instrucción son: 1. 2. 3. 4. 5. IF: (Instruction fetch) Captura de la instrucción. ID: (Instruction decode) Decodificación de la instrucción y lectura de registros. EX: (Execution) Ejecución o cálculo de una dirección. MEM: (Memory Access) Acceso a memoria. WB: (Write Back) Retro escritura. 11 Camino de datos de un solo ciclo segmentado 12 6 En la etapa WB se realiza la escritura del resultado en el archivo de registros, el cual está ubicado en la segunda etapa del camino de los datos – Riesgo por dependencia de datos La selección del siguiente valor del PC, seleccionado entre el PC incrementado en cuatro y la dirección destino de un brinco toma lugar en la etapa MEM – Riesgo de control El flujo de datos de derecha a izquierda no afecta a la instrucción actual, pero puede tener influencia sobre las instrucciones siguientes, que ya están en alguna etapa de la segmentación. 13 Formato estilizado para mostrar el camino de datos de instrucciones 14 7 Agregando registros Para no tener que replicar las unidades funcionales, es necesario agregar registros que almacenen temporalmente los datos para las siguientes etapas. 15 Captura de la Instrucción Durante esta etapa la instrucción LW utilizará las unidades funcionales resaltadas en la figura siguiente de la memoria de código sólo se resalta la mitad derecha puesto que ésta será accesada solo para lectura. Al mismo tiempo, en esta etapa se calculará el valor de PC + 4 y se escribirá en el PC para introducir a la siguiente instrucción a la segmentación (aún no se considerarán los riesgos). En el registro IF/ID se escribirá la instrucción, y el valor de PC + 4. Cabe aclarar que en esta etapa, el hardware desconoce el tipo de instrucción. 16 8 Instruction fetch 17 Decodificación de la instrucción y lectura del archivo de registro Para esta etapa los datos que se evalúan se toman del registro IF/ID y los resultados al final de la misma se escribirán en el registro ID/EX. Los aspectos de interés particular para la instrucción LW son: la lectura del registro 1 y la extensión del signo de la constante para que utilice32 bits. También se lee el registro 2, pero este no es importante para la instrucción bajo consideración. 18 9 Instruction decode 19 Ejecución o Cálculo de una dirección Los datos se tomarán del registro ID/EX y los resultados se escribirán en el registro EX/MEM. Lo importante para la instrucción LW es el cálculo de la dirección del dato que se leerá en memoria. En esta etapa ya se tiene identificado el tipo de instrucción por lo que el control deberá colocar como segundo operando de la ALU a la constante extendida en signo. El primer operando, por default corresponde al registro base. 20 10 Execution 21 Acceso a memoria En esta etapa se leerá un dato de memoria, la dirección a leer se toma del registro EX/MEM y el dato leído se escribirá en el registro MEM/WB. En la figura siguiente se resalta solo la mitad derecha de la memoria por que solo se está haciendo una lectura. 22 11 Memory 23 Retro escritura El último paso de la instrucción LW consiste en la escritura del dato que está en el registro MEM/WB en el registro correspondiente, el nombre de retroescritura es por que aunque se esta ejecutando el paso 5, el archivo de registros esta ubicado en la etapa 2. Esto no afecta en la ejecución, puesto que el archivo de registros puede leerse y escribirse en el mismo ciclo de reloj; y en el caso de esta implementación segmentada, la lectura y escritura se harán por diferentes instrucciones. 24 12 Write back 25 Corrección al camino de datos para la instrucción LW 26 13 Se analizará la siguiente secuencia de instrucciones: lw $10, 20 ($1) sub $11, $2, $3 27 28 14 29 30 15 31 32 16 33 34 17 35 36 18 37 38 19 39 Proceso de ejecución de SW IF: la instrucción es capturada de memoria y almacenada en IF/ID ID: IF/ID proporciona los números de registros que se leerán y se realiza la extensión de signo de 16 a 32 bits, dichos valores se almacenan en ID/EX EX: Se suma el 1er registro y el la constante extendida a 32 bits, se almacenan en EX/MEM MEM: El segundo registro previamente almacenado en ID/EX y posteriormente en EX/MEM se almacena en la dirección de memoria calculada en la etapa anterior. WB: No se hace nada 40 20 Proceso de ejecución de SW 41 Ejecución de SW 42 21 Ejecución de una secuencia de instrucciones 43 Ejecución de las 5 instrucciones a la vez 44 22 El control segmentado 45 Señales de control en cada etapa 1. Captura de la Instrucción. Las señales de control para 2. Decodificación de la instrucción y lectura del archivo de registro. Sucede una situación similar a la la lectura de memoria de código y escritura del PC están siempre acertadas, por que cambiarán su valor en cada ciclo de reloj, por lo que no hay líneas de control especiales. etapa anterior, no hay líneas de control para un ajuste opcional. 3. Ejecución o Cálculo de una dirección. En esta etapa, dependiendo del tipo de instrucción debe seleccionarse: El segundo operando de la ALU (ALUSrc). La operación que realizará la ALU (ALUOp). El registro destino (RegDst). 46 23 4. Acceso a memoria. Aquí se determina si: 5. Se trata de un brinco (branch). Se escribirá en memoria (MemWrite). Se leerá de memoria (MemRead). Retro escritura. Son dos señales que se deben definir: La que determina si se escribirá el resultado de la ALU o el dato de memoria (MemtoReg). La que habilita la escritura en el archivo de registros (RegWrite). 47 Las señales de control 48 24 Valores para el control Las señales de control deben tener los valores correctos en la etapa correcta, dependiendo del tipo de instrucción a ejecutar. Los valores son los mismos que en la implementación de un solo ciclo, la diferencia es que se requieren en diferentes etapas. 49 En la etapa 1 se atrapa la instrucción y se almacena en IF/ID. En la 2ª etapa se toma del registro IF/ID el opcode que determina el tipo de instrucción que se está ejecutando, mismas que entran al circuito de control. 50 25 51 Ejemplo de Ejecución segmentada. Evaluar la ejecución de las cinco instrucciones siguientes a través de la segmentación: ¾ lw $10, 20 ($1) ¾ sub $11, $2, $3 ¾ and $12, $4, $5 ¾ or $13, $6, $7 ¾ add $14, $8, $9 52 26 53 54 27 55 56 28 57 58 29 59 60 30 61 Ejemplo Ejecución de la secuencia de instrucciones: Lw $10, 9( $1) Sub $11, $2, $3 And $12, $4, $5 Or $13, $6, $7 Add $14, $8, $9 62 31 63 64 32 65 66 33 67 68 34 69 70 35 71 Segmentación en el procesador Alpha 21264 72 36 73 37