- Aprender
- Informática
- Ciencias de la computación
- Organización y arquitectura de computadores
- Camino de datos y segmentación
Camino de datos y segmentación del procesador
IntermedioUnidad 4 de 6 del curso Curso de Organización y arquitectura de computadores
Lo que aprenderás
- Identifica las unidades de hardware que necesita un procesador RISC-V, conéctalas para que las instrucciones aritméticas, de memoria y de salto condicional terminen cada una en un ciclo de reloj y sigue el recorrido de instrucciones reales por el camino resultante.
- Identifica los componentes de un camino de datos y cómo se sincronizan con el relojDistingue los elementos combinacionales de los elementos de estado y describe qué hacen el contador de programa, las memorias, el banco de registros, la ALU, el generador de inmediatos, los sumadores y los multiplexores.
- Conecta el camino de datos para instrucciones aritméticas, de memoria y de salto condicionalDetermina qué unidades y conexiones usa cada clase de instrucción y une los caminos separados en un solo camino de datos con multiplexores donde se encuentran.
- Sigue el recorrido de las instrucciones por el camino de datos de un solo cicloSigue instrucciones concretas con valores reales de registros y memoria a través de cada unidad, indica los valores en los cables principales y señala qué cambia en el flanco de reloj.
- Identifica los componentes de un camino de datos y cómo se sincronizan con el reloj
- Determina las señales de control que hacen que el camino de datos ejecute cada instrucción, mediante una unidad de control principal dirigida por el código de operación y una pequeña unidad de control de la ALU dirigida por los campos de función.
- Establece las señales principales de control de cada instrucciónExplica qué hace cada señal principal de control, construye la tabla de control para instrucciones de tipo R, carga, almacenamiento y salto condicional, y usa correctamente los valores indiferentes.
- Genera el control de la ALU a partir de ALUOp y los campos de funciónUsa la decodificación en dos niveles para convertir ALUOp de 2 bits y los campos funct7 y funct3 de la instrucción en el código de 4 bits que selecciona la operación de la ALU.
- Establece las señales principales de control de cada instrucción
- Explica cómo la superposición de instrucciones aumenta la productividad, describe el camino de datos segmentado en cinco etapas con sus registros de segmentación y su control, y sigue las instrucciones mediante diagramas de segmentación.
- Explica por qué la segmentación acelera un procesadorDetermina el periodo de reloj de un diseño de un solo ciclo a partir de su camino crítico y después calcula la productividad, la latencia y el factor de aceleración de una versión segmentada.
- Describe el camino de datos segmentado en cinco etapas y sus registros de segmentaciónExplica qué contienen los registros de segmentación, cómo viajan las señales de control con cada instrucción y por qué cada instrucción pasa por las cinco etapas.
- Sigue las instrucciones mediante diagramas de segmentaciónDibuja y lee diagramas de segmentación de varios ciclos, determina qué instrucción está en cada etapa en un ciclo dado y cuenta los ciclos totales con y sin paradas.
- Explica por qué la segmentación acelera un procesador
- Reconoce cuándo entran en conflicto las instrucciones del cauce de segmentación y resuelve los riesgos de datos mediante adelantamiento de datos, paradas y planificación de instrucciones.
- Identifica los riesgos y las dependencias de datos que los causanClasifica los riesgos como estructurales, de datos o de control, encuentra las dependencias entre instrucciones y determina cuáles causan paradas en un cauce sin adelantamiento de datos.
- Adelanta resultados para evitar paradasExplica los caminos de adelantamiento de datos y las condiciones de la unidad de adelantamiento, y determina de dónde viene cada operando de la ALU en una secuencia de instrucciones dada.
- Introduce paradas ante riesgos de carga y uso y planifica las instrucciones para evitarlasDetecta riesgos de carga y uso, explica cómo el cauce inserta una burbuja y reordena las instrucciones para eliminar paradas sin cambiar el resultado del programa.
- Identifica los riesgos y las dependencias de datos que los causan
- Reduce el coste de los saltos mediante resolución anticipada, anulación de instrucciones y predicción estática o dinámica de saltos, y estima cómo afectan conjuntamente todos los riesgos al rendimiento del cauce de segmentación.
- Reduce el coste de los saltos en el cauce de segmentaciónExplica por qué los saltos causan riesgos de control, compara las paradas, la predicción de salto no tomado y la resolución anticipada de saltos, y trata las excepciones como un cambio relacionado en el flujo de control.
- Predice los saltos dinámicamente mediante su historialSigue la evolución de predictores de saltos de 1 y 2 bits, explica la tabla de historial de saltos y el búfer de destinos de salto, y reconoce dónde fallan los predictores sencillos.
- Estima el rendimiento del cauce de segmentación teniendo en cuenta los riesgosCombina las paradas por carga y uso y las penalizaciones por salto en un CPI efectivo, calcula tiempos de ejecución y compara estrategias de gestión de saltos y diseños de procesadores.
- Reduce el coste de los saltos en el cauce de segmentación
Guía de estudio de Camino de datos y segmentación
1Construye un camino de datos de un solo ciclo
Un procesador convierte los bits de las instrucciones en cambios en los registros, la memoria y la dirección de la siguiente instrucción. Sigue los componentes que realizan este trabajo y después conéctalos en caminos para operaciones aritméticas, cargas, almacenamientos y saltos condicionales. Los seguimientos concretos muestran los valores en los cables y los cambios guardados en cada flanco de reloj. El diseño usa registros RV64 y un pequeño conjunto de instrucciones RISC-V de 4 bytes, por lo que cada conexión tiene un propósito claro.
1.1 Identifica el hardware y el límite entre ciclos de reloj
Un camino de datos conserva y transforma los valores que necesita una instrucción. La unidad de control dirige esos valores y habilita las escrituras. Juntos ejecutan instrucciones como add, sub, and, or, ld, sd y beq.
Sigue los valores entre flancos de reloj
Un elemento de estado recuerda un valor: el contador de programa, el banco de registros y la memoria de datos son ejemplos. Un elemento combinacional produce una salida a partir de sus entradas actuales. Los sumadores, multiplexores, la ALU y el generador de inmediatos realizan este trabajo sin almacenar el resultado de una instrucción entre ciclos.
En el flanco activo del reloj, los elementos de estado capturan sus siguientes valores. Entre flancos, sus salidas alimentan la lógica combinacional. El PC puede, por tanto, proporcionar la dirección actual durante todo un ciclo y capturar la siguiente dirección al final. Leer un elemento de estado no lo sobrescribe por sí mismo.
Búsqueda y acceso a registros
El contador de programa (PC) contiene la dirección de la instrucción. La memoria de instrucciones devuelve la instrucción de 32 bits situada en esa dirección. En este modelo es de solo lectura mientras se ejecuta el programa y funciona como una consulta que asigna una instrucción a cada dirección. Un sumador separado forma PC + 4 porque las instrucciones de este subconjunto ocupan 4 bytes.
El banco de registros contiene x0–x31. Dos puertos de lectura reciben los números de fuente rs1 y rs2 y devuelven sus valores. Un puerto de escritura recibe el destino rd, los datos de escritura y RegWrite. Las lecturas son combinacionales; una escritura habilitada se guarda en el flanco de reloj. El registro x0 siempre se lee como cero y descarta las escrituras. Los registros RV64 contienen 64 bits. Una versión RV32 usa registros de 32 bits y lw/sw, con las mismas conexiones básicas.
Calcula, selecciona y accede a memoria
La unidad aritmético-lógica (ALU) suma, resta o realiza una operación bit a bit. Un código de control de 4 bits selecciona la operación. Su salida Zero es 1 cuando el resultado es cero; por tanto, la resta puede comprobar si dos valores son iguales.
El generador de inmediatos, ImmGen, reconstruye el inmediato de una instrucción y lo extiende con signo a 64 bits. Copiar el bit de signo conserva un valor negativo. El patrón de 12 bits 1111 1111 1000 representa −8; la extensión con ceros lo convertiría en 4088 y enviaría una operación de memoria a la dirección equivocada.
Un multiplexor, o mux, selecciona una entrada. Los multiplexores eligen el segundo operando de la ALU, los datos de escritura del registro y el siguiente PC. Un multiplexor cambia la ruta; una habilitación de escritura decide si cambia un valor almacenado.
La memoria de datos tiene entradas de dirección y de datos de escritura, una salida de datos de lectura y controles MemRead y MemWrite. Una carga necesita buscar la instrucción y acceder a los datos durante el mismo ciclo único. Las memorias de instrucciones y de datos separadas proporcionan ambos accesos. Los sumadores separados también permiten calcular PC + 4 y el destino del salto mientras la ALU realiza otro trabajo.
Las salidas no utilizadas aún pueden cambiar durante un ciclo. Un control correcto hace que solo las salidas seleccionadas lleguen a escrituras de estado habilitadas. Un valor calculado en un cable no seleccionado no afecta al programa.
Puntos clave
- El camino de datos procesa valores; las señales de control seleccionan rutas y habilitan escrituras.
- Los elementos de estado conservan valores entre flancos de reloj; los elementos combinacionales transforman las entradas actuales.
- El banco de registros tiene dos puertos de lectura y uno de escritura, y x0 siempre se lee como cero.
- La extensión de signo conserva el valor con signo de un inmediato.
- Las memorias y los sumadores separados permiten realizar trabajos necesarios simultáneamente en un solo ciclo.
1.2 Conecta los caminos para cada clase de instrucción
Comienza por lo que debe leer y cambiar cada instrucción. El camino de datos compartido combina estas rutas, con un multiplexor allí donde valores alternativos llegan a una misma entrada.
Busca la instrucción y decodifica los campos
La búsqueda usa el PC para leer la memoria de instrucciones y calcula PC + 4 en paralelo. El código de operación ocupa los bits 6–0. Cuando están presentes, rd está en los bits 11–7, funct3 en 14–12, rs1 en 19–15 y rs2 en 24–20; funct7 de tipo R ocupa los bits 31–25. Las posiciones fijas de los campos fuente permiten que las lecturas de registros comiencen mientras se decodifica el control de la instrucción. Un almacenamiento o un salto condicional no tiene campo rd: los bits 11–7 contribuyen a su inmediato.
Compara los caminos de ejecución
| Instrucción | Entradas y operación de la ALU | Memoria de datos | Resultado guardado |
|---|---|---|---|
add x5, x6, x7 | x6 + x7 | Sin acceso | Suma en x5 |
ld x5, 16(x6) | x6 + 16 | Lectura en la dirección efectiva | Datos de memoria en x5 |
sd x5, 24(x6) | x6 + 24 | Escritura de x5 en la dirección efectiva | Cambia la memoria |
beq x8, x9, offset | x8 − x9 | Sin acceso | Selección del siguiente PC |
Para una carga, el resultado de la ALU es una dirección efectiva, la dirección de los datos que se van a leer. La salida de memoria vuelve después al banco de registros. Un almacenamiento también forma una dirección con la ALU, pero su segundo valor fuente viaja por separado hasta la entrada de datos de escritura de la memoria. Seleccionar un inmediato como operando de la ALU no debe descartar ese valor de almacenamiento. ImmGen reconstruye el desplazamiento de formato S a partir de sus dos grupos de bits.
Un salto condicional realiza dos operaciones en paralelo. La ALU resta los valores de registro comparados; Zero indica si coinciden. El sumador de saltos suma el desplazamiento en bytes con signo al propio PC del salto. La codificación de formato B omite el bit inferior, que siempre es cero. ImmGen puede reconstruir el desplazamiento completo en bytes, incluido ese cero; un diagrama que genere el desplazamiento en unidades de media palabra necesita un desplazamiento a la izquierda de un bit. El desplazamiento debe aparecer en el camino exactamente una vez.
Une los caminos con multiplexores
ALUSrc selecciona el valor de rs2 o el inmediato para la segunda entrada de la ALU. MemtoReg selecciona el resultado de la ALU o la salida de la memoria de datos para escribir en el registro. PCSrc selecciona PC + 4 o el destino del salto. Dos resultados que compiten necesitan un selector, no un cable que una directamente sus salidas.
Estos caminos explican por qué la carga tiene la cadena más larga: búsqueda, lectura de registros, cálculo de dirección, lectura de memoria y escritura de registros contribuyen al tiempo total. Una instrucción aritmética no pasa por la memoria de datos; un almacenamiento no escribe el resultado en un registro.
Amplía las rutas existentes
addi x5, x6, 3 reutiliza el camino del inmediato hacia la ALU y el camino de escritura del resultado de la ALU en el registro. Necesita el control adecuado, pero ninguna unidad nueva en el camino de datos. jal tiene un requisito adicional: escribe PC + 4 en rd mientras redirige el PC sin una prueba de igualdad. Por tanto, su selector de escritura necesita una entrada PC + 4 y su lógica del siguiente PC debe permitir un salto incondicional.
Puntos clave
- Una carga escribe datos de memoria en rd; su salida de la ALU es la dirección.
- Un almacenamiento envía rs2 a memoria mientras la ALU suma la base y el desplazamiento.
- Un salto condicional compara valores de registro y calcula PC + desplazamiento en paralelo.
- ALUSrc, MemtoReg y PCSrc seleccionan rutas compartidas.
- La reconstrucción del desplazamiento en bytes de formato B incluye el bit cero implícito exactamente una vez.
- La suma con inmediato reutiliza el hardware existente; el salto con enlace también necesita una ruta para escribir PC + 4 en el registro.
1.3 Sigue los valores y los cambios de estado
El seguimiento de una instrucción conecta la operación en lenguaje ensamblador con los valores reales de los cables. Distingue los valores calculados durante el ciclo de los valores guardados en el flanco de reloj final.
Usa un orden de seguimiento uniforme
- Busca desde el PC actual e identifica los campos de la instrucción.
- Lee los registros fuente y forma el inmediato con signo.
- Selecciona los operandos de la ALU y calcula el resultado.
- Realiza el acceso solicitado a la memoria de datos.
- Selecciona los datos de escritura del registro y el siguiente PC.
- Enumera las escrituras de estado en el flanco de reloj.
Suma dos valores de registro
En PC 400, add x5, x6, x7 tiene la codificación 0x007302B3. Sus campos son código de operación 0110011, rd 5, funct3 000, rs1 6, rs2 7 y funct7 0000000. Con x6 = 25 y x7 = −9, los puertos de lectura proporcionan 25 y −9. ALUSrc selecciona el segundo valor de registro y la ALU produce 16. MemtoReg selecciona 16 para escribirlo en el registro. En el flanco, x5 pasa a valer 16 y el PC pasa a 404. MemRead y MemWrite son ambos cero.
Carga y después almacena una palabra doble
En PC 404, considera ld x5, 16(x6) con x6 = 1000 y la memoria en 1016 con el valor 42. ImmGen proporciona 16. La ALU calcula la dirección 1016 y la memoria de datos devuelve 42. MemtoReg selecciona ese valor de memoria, por lo que x5 pasa a valer 42 y el PC pasa a 408 en el flanco. Escribir 1016 en x5 confundiría la dirección con el valor almacenado en ella.
En PC 408, sd x5, 24(x6) lee x5 = 42 y x6 = 1000. La ALU calcula 1024 mientras el camino de rs2 proporciona 42 a la memoria. MemWrite habilita el almacenamiento; RegWrite es cero. En el flanco, la palabra doble en 1024 pasa a valer 42 y el PC pasa a 412. La dirección de memoria y el valor que se almacena viajan por cables diferentes.
Los desplazamientos se miden en bytes. Las palabras dobles adyacentes de RV64 comienzan a 8 bytes de distancia: después de la palabra doble en 1016, la siguiente comienza en 1024. Avanzar un byte no llegaría a la siguiente palabra doble.
Decide un salto condicional
En PC 412, beq x8, x9, 12 compara x8 = 7 con x9 = 7. La ALU resta y obtiene cero. Branch es 1, por lo que Branch AND Zero es 1 y PCSrc selecciona el destino del salto. El sumador de saltos produce 424 al sumar 12 a 412. Solo cambia el PC.
Si, en cambio, x9 es 8, la resta produce −1 y Zero es 0. El siguiente PC es entonces 416. El desplazamiento codificado está en unidades de 2 bytes, por lo que la cantidad con signo almacenada para este desplazamiento de 12 bytes es 6; el desplazamiento completo que usa el sumador sigue siendo 12.
Lee el estado de la siguiente instrucción
Cada instrucción de un solo ciclo completa su trabajo entre flancos de reloj consecutivos. La siguiente instrucción lee el estado guardado por el flanco anterior. Así, el almacenamiento puede leer el nuevo valor de x5 de la carga en el ciclo siguiente sin adelantamiento de datos en el cauce. Cada instrucción tarda un ciclo de reloj, lo que da un CPI de 1 para el diseño de un solo ciclo, independientemente de cuántas unidades de hardware use su camino.
Puntos clave
- Un seguimiento indica los valores numéricos de los cables e identifica por separado los cambios de estado en el flanco de reloj.
- Una instrucción aritmética escribe un resultado de la ALU; una carga escribe la salida de memoria.
- Un almacenamiento cambia la memoria y el PC, sin escribir en el banco de registros.
- Para beq, la igualdad selecciona el destino medido desde el PC del salto.
2Diseña la unidad de control del procesador de un solo ciclo
El mismo hardware puede sumar dos registros, calcular una dirección de memoria o comparar valores para un salto condicional. Las señales de control deciden qué acción importa en cada ciclo. Determina esas señales a partir del trabajo que debe hacer una instrucción, incluidas las habilitaciones de escritura que protegen el estado almacenado. Después, sigue los dos niveles de decodificación que convierten un código de operación y bits de función en una operación específica de la ALU y amplía el diseño para la suma con inmediato.
2.1 Obtén la tabla de control principal
La unidad de control principal traduce un código de operación en señales de selección y permisos de escritura. Es una tabla de verdad combinacional implementada con puertas lógicas: control cableado.
Asigna una función a cada señal
RegWrite habilita una escritura en rd. ALUSrc selecciona la segunda entrada de la ALU: 0 para rs2, 1 para un inmediato. MemRead y MemWrite solicitan el acceso correspondiente a la memoria de datos. MemtoReg selecciona los datos de escritura del registro: 0 para el resultado de la ALU, 1 para los datos de memoria. Branch indica un salto por igualdad. ALUOp de 2 bits indica a la unidad de control de la ALU independiente qué clase de operación se necesita.
PCSrc es diferente: depende de la instrucción y de los valores comparados. El control principal activa Branch y la ALU proporciona Zero. La operación AND de ambos forma PCSrc, por lo que un resultado aritmético normal de cero no puede por sí solo provocar un salto.
Construye la tabla a partir de las acciones necesarias
| Clase | ALUSrc | MemtoReg | RegWrite | MemRead | MemWrite | Branch | ALUOp |
|---|---|---|---|---|---|---|---|
| Tipo R | 0 | 0 | 1 | 0 | 0 | 0 | 10 |
ld | 1 | 1 | 1 | 1 | 0 | 0 | 00 |
sd | 1 | X | 0 | 0 | 1 | 0 | 00 |
beq | 0 | X | 0 | 0 | 0 | 1 | 01 |
Para ld, la ALU necesita un desplazamiento inmediato, por lo que ALUSrc es 1. Los datos cargados van a rd, lo que hace que MemtoReg y RegWrite sean ambos 1. La memoria se lee, no se escribe, lo que da MemRead = 1 y MemWrite = 0. Branch es 0 y ALUOp = 00 solicita la suma para obtener la dirección.
Para sd, la ALU también suma un desplazamiento, pero el destino es la memoria. Establece MemWrite = 1 y RegWrite = 0. MemRead permanece en cero: usar memoria no significa leerla. Para beq, la ALU usa ambos valores de registro y resta, mientras que la única actualización posible del estado arquitectónico es el PC.
Usa valores indiferentes solo cuando los resultados se ignoran
X es un valor indiferente, lo que significa que cualquiera de los valores de selección produce el mismo comportamiento. MemtoReg puede ser X para un almacenamiento o un salto condicional porque RegWrite es cero. La entrada de datos de escritura del banco de registros se ignora, por lo que quien diseña puede elegir el valor de selección que simplifique el circuito.
Una habilitación de escritura de estado no puede tratarse así cuando una escritura está prohibida. Una señal MemWrite accidental durante una operación aritmética puede alterar la memoria, aunque la instrucción aritmética no necesite de otro modo esa salida de memoria. Por tanto, RegWrite y MemWrite deben ser explícitamente cero para las instrucciones que no realizan esas escrituras.
Añade una fila para aritmética con inmediato
addi x5, x6, 3 toma su segundo operando de ImmGen y escribe la suma de la ALU. Su fila es ALUSrc 1, MemtoReg 0, RegWrite 1, MemRead 0, MemWrite 0, Branch 0, ALUOp 00. Su código de operación 0010011 difiere del código de operación de tipo R 0110011, por lo que el control principal necesita esta fila adicional. Admitir andi y ori también requiere decodificar sus valores funct3 para seleccionar la operación.
Los nombres de las señales dependen del diseño. RegWEn, BSel y WBSel en diagramas de otros cursos describen funciones relacionadas de habilitación de escritura y selección de entradas. Sigue la definición de una señal y las entradas de su multiplexor al leer un diagrama nuevo.
Puntos clave
- El control principal obtiene las selecciones de ruta y las habilitaciones de escritura a partir del código de operación.
- PCSrc combina Branch con el indicador Zero de la ALU.
- Un almacenamiento habilita MemWrite y deshabilita RegWrite y MemRead.
- Un selector solo es un valor indiferente cuando el valor seleccionado no puede afectar al comportamiento.
- addi necesita una nueva fila de código de operación, pero reutiliza el camino de datos existente para la suma con inmediato.
2.2 Decodifica la operación de la ALU en dos niveles
El código de operación por sí solo no puede distinguir add de sub: ambos pertenecen a la clase de tipo R. El control en dos niveles primero identifica la clase y después usa los bits de función cuando son necesarios.
De ALUOp a la operación
El control principal proporciona ALUOp de 2 bits entre sus otras salidas. El control de la ALU lo combina con funct3 y el bit 30 de la instrucción, parte de funct7, para producir cuatro bits de control de operación.
| ALUOp | Información adicional | Control de la ALU | Operación |
|---|---|---|---|
| 00 | Bits de función ignorados | 0010 | Suma |
| 01 | Bits de función ignorados | 0110 | Resta |
| 10 | funct3 000, bit 30 = 0 | 0010 | Suma |
| 10 | funct3 000, bit 30 = 1 | 0110 | Resta |
| 10 | funct3 111 | 0000 | AND |
| 10 | funct3 110 | 0001 | OR |
Estos códigos describen esta implementación de la ALU, no codificaciones de instrucciones RISC-V. Las cargas y los almacenamientos usan ALUOp 00 porque suman una base y un desplazamiento. Los saltos por igualdad usan ALUOp 01 porque la resta produce Zero cuando los operandos coinciden. Las instrucciones de tipo R usan ALUOp 10 y necesitan más decodificación.
Sigue una resta codificada
sub x5, x6, x7 tiene la codificación 0x407302B3. El código de operación 0110011 identifica el tipo R y selecciona ALUOp 10. Su funct3 es 000, lo que deja la suma y la resta como posibilidades. El bit 30 es 1, procedente de funct7 0100000, por lo que el control de la ALU proporciona 0110 para la resta.
Cambiar ese bit de función a cero produce la codificación de suma correspondiente 0x007302B3, con funct7 0000000 y control de la ALU 0010. La fila del control principal sigue siendo la misma porque ambas instrucciones usan dos entradas de registro, escriben un resultado de la ALU y no acceden a la memoria de datos.
Reutiliza el sumador para la resta
En la ALU clásica, las líneas de control representan Ainvert, Bnegate y un selector de operación de 2 bits. La resta usa el sumador después de invertir el segundo operando y proporcionar un acarreo de entrada de 1:
Esta identidad del complemento a dos permite que la suma y la resta compartan hardware. La diferencia en Bnegate explica los códigos 0010 y 0110; no requiere un camino aritmético independiente para cada instrucción.
Decodifica los bits solo en su formato correspondiente
Para ALUOp 00 o 01, las posiciones del campo de función no seleccionan la operación de la ALU. El funct3 011 de una carga describe un acceso a palabra doble. Los bits superiores de almacenamiento y salto condicional incluyen bits de inmediato. Tratar esas posiciones como campos de función de tipo R confundiría la formación de direcciones con la decodificación aritmética.
Para una comprobación rápida de tipo R, ALUOp 10 con funct3 110 selecciona 0001, la operación OR. Añadir otra operación bajo el mismo código de operación puede requerir solo un cambio en el control de la ALU si esta ya la admite. Una nueva clase de instrucción también puede requerir cambios en el control principal, como ocurre con la aritmética con inmediato.
Puntos clave
- ALUOp selecciona una clase de operación; los bits de función de tipo R completan la decodificación.
- ALUOp 00 solicita suma y 01 solicita resta sin decodificación de función.
- En este diseño, 0010 selecciona suma y 0110 selecciona resta.
- El bit 30 distingue add de sub cuando funct3 es 000.
- Los significados de los campos de función dependen del formato de instrucción.
- La resta en complemento a dos reutiliza la suma con el segundo operando invertido y un acarreo de entrada de 1.
3Segmenta el camino de datos
Un periodo de reloj largo de un solo ciclo debe dar cabida a una carga incluso cuando la instrucción actual necesita menos trabajo. La segmentación divide ese trabajo en etapas y superpone las instrucciones. Compara el periodo de reloj, la productividad y la latencia resultantes, y después sigue los datos y el control almacenados entre etapas. Los diagramas de segmentación hacen visible la superposición y ofrecen una forma directa de contar el llenado, la operación estable y la finalización de una secuencia corta de instrucciones.
3.1 Calcula el periodo de reloj, la latencia y la productividad
Un procesador de un solo ciclo debe terminar su instrucción más lenta antes del siguiente flanco. Las instrucciones más rápidas siguen esperando el mismo periodo fijo de reloj. La segmentación cambia cuánto trabajo debe contener cada periodo de reloj.
Determina el límite de un solo ciclo
Usa estos retardos de componentes, sin tener en cuenta los multiplexores ni los sumadores pequeños: búsqueda 250 ps, lectura de registros 150 ps, ALU 200 ps, memoria de datos 250 ps y escritura de registros 150 ps.
| Instrucción | Retardo del camino |
|---|---|
| Tipo R | 250 + 150 + 200 + 150 = 750 ps |
ld | 250 + 150 + 200 + 250 + 150 = 1000 ps |
sd | 250 + 150 + 200 + 250 = 850 ps |
beq | 250 + 150 + 200 = 600 ps |
La carga es el camino crítico, que fija el periodo en 1000 ps, o 1 ns. Eso corresponde a una frecuencia de reloj de 1 GHz. Una mezcla de 25 % de cargas, 10 % de almacenamientos, 50 % de instrucciones de tipo R y 15 % de saltos condicionales tiene un retardo ponderado del camino de 800 ps. Sin embargo, cada instrucción dispone de 1000 ps, que es 1,25 veces esa media. Un retardo medio no puede fijar un periodo de reloj que también debe dar cabida a la instrucción más larga.
Superpón cinco etapas
El cauce divide la ejecución en IF (búsqueda), ID (decodificación y lectura de registros), EX (ejecución o cálculo de una dirección), MEM (acceso a la memoria de datos) y WB (escritura de un registro). Diferentes instrucciones ocupan diferentes etapas simultáneamente.
La productividad cuenta las instrucciones completadas por unidad de tiempo. La latencia mide el tiempo que una instrucción pasa desde su entrada hasta su finalización. Una línea de montaje puede terminar un artículo por intervalo aunque cada artículo necesite varios intervalos para recorrerla. La misma distinción se aplica aquí.
La etapa más lenta tarda 250 ps. Con 20 ps de sobrecoste temporal de los registros de segmentación, el periodo de reloj es 270 ps, aproximadamente 3,70 GHz. Una instrucción pasa por cinco periodos y tarda 1350 ps. Esto supera su latencia de un solo ciclo, pero un cauce lleno puede completar una instrucción cada 270 ps.
Incluye el tiempo de llenado y finalización
Sin paradas, un cauce de k etapas ejecuta n instrucciones en k + n − 1 ciclos. Para cinco etapas son n + 4. Cuatro instrucciones necesitan ocho ciclos y tardan 2160 ps, frente a 4000 ps en el procesador de un solo ciclo. El factor de aceleración es de aproximadamente 1,85.
Para 1 000 000 de instrucciones, el cauce necesita 1 000 004 ciclos, aproximadamente 270,0 μs. El diseño de un solo ciclo necesita 1000 μs. El factor de aceleración se aproxima a la razón 1000/270, aproximadamente 3,70, a medida que el coste fijo de llenado y vaciado se vuelve pequeño.
Un factor de aceleración perfecto de cinco requeriría cinco etapas igual de lentas de 200 ps sin sobrecoste de registro ni retrasos por riesgos. Las etapas desiguales hacen que las etapas más rápidas esperen a la más lenta. Más etapas también añaden sobrecoste y pueden aumentar los costes de los riesgos.
Las instrucciones de 32 bits de longitud fija en este subconjunto simplifican la búsqueda. Los campos de registro fijos ayudan a ID, y restringir el acceso a la memoria de datos a cargas y almacenamientos encaja con el cálculo de dirección en EX seguido de MEM. Estas propiedades de la ISA hacen viables los límites entre etapas.
Puntos clave
- La instrucción completa más lenta determina el periodo de reloj de un solo ciclo.
- La etapa más lenta más el sobrecoste de registro determina el periodo del diseño segmentado.
- La segmentación aumenta la productividad; la latencia de una instrucción puede aumentar.
- Una secuencia sin riesgos de n instrucciones en cinco etapas tarda n + 4 ciclos.
- Las etapas desiguales, el sobrecoste de registro, las secuencias cortas y los riesgos reducen el factor de aceleración.
3.2 Transporta cada instrucción mediante los registros de segmentación
Varias instrucciones comparten el camino de datos a la vez, por lo que cada etapa necesita los valores de su propia instrucción. Los registros de segmentación conservan esos valores y sus señales de control en cada flanco de reloj.
Relaciona el contenido con el trabajo posterior
| Registro | Información transportada hacia delante |
|---|---|
| IF/ID | Instrucción y su PC |
| ID/EX | Valores fuente, inmediato, PC, rs1, rs2, rd, bits de función, controles EX/MEM/WB |
| EX/MEM | Resultado de la ALU, Zero, destino del salto, valor de almacenamiento, rd, controles MEM/WB |
| MEM/WB | Datos de memoria, resultado de la ALU, rd, controles WB |
Cada registro se nombra por sus etapas adyacentes. Captura las salidas de la primera etapa para usarlas en la segunda. No hay un registro de segmentación adicional después de WB; WB escribe el estado arquitectónico. El PC proporciona el estado al comienzo de la búsqueda.
El contenido de EX/MEM anterior permite un diseño que actúa sobre la información de salto en MEM. Un diseño que resuelve los saltos en EX devuelve esa información antes a la búsqueda. La etapa de resolución determina la penalización por riesgo de control.
Mantén juntos el destino y los datos
Una carga se decodifica en ID, pero escribe rd tres ciclos después en WB. En ese momento IF/ID contiene una instrucción posterior. Si el puerto de escritura usara el rd de esa instrucción posterior, el valor cargado iría al registro equivocado. Por tanto, el número de destino de la carga debe viajar por ID/EX, EX/MEM y MEM/WB junto a su resultado.
Un almacenamiento transporta de forma similar su valor de rs2 por ID/EX y EX/MEM. Su dirección y sus datos deben describir el mismo almacenamiento cuando llegan a la memoria de datos. Los registros de segmentación conservan la identidad de una instrucción mediante estos valores asociados, aunque varias instrucciones estén activas al mismo tiempo.
Mueve el control con la instrucción
El control se genera en ID. EX usa ALUSrc y ALUOp; MEM usa Branch, MemRead y MemWrite; WB usa MemtoReg y RegWrite. Cada etapa transmite los controles que se necesitan después junto con los datos.
Si el control de la ALU se decodifica en EX, ID/EX debe transportar el bit 30 y funct3 además de ALUOp. Las operaciones de tipo R comparten ALUOp 10, por lo que ese valor por sí solo no puede distinguir add, sub, AND y OR. Otro diseño válido decodifica la operación completa de 4 bits en ID y transporta ese código.
Mantén regular la secuencia de etapas
Una instrucción de tipo R pasa por MEM sin usar la memoria de datos. Un almacenamiento pasa por WB sin escribir un registro. Mantener todas las instrucciones en la misma secuencia de cinco etapas conserva el orden de las escrituras de registros. Si una instrucción de tipo R omitiera MEM, podría llegar al único puerto de escritura de registros en el mismo ciclo que la carga situada justo delante.
El banco de registros atiende a WB e ID en un ciclo escribiendo en la primera mitad y leyendo en la segunda. ID puede entonces ver un valor escrito por una instrucción anterior en ese ciclo. Las memorias de instrucciones y de datos separadas permiten que IF y MEM funcionen simultáneamente.
La mayor parte de la información avanza por el cauce. La escritura del resultado devuelve un valor al banco de registros y el control de saltos devuelve una decisión sobre el siguiente PC a la búsqueda. Estos largos caminos de retorno explican por qué las instrucciones posteriores pueden necesitar ayuda antes de que una instrucción anterior haya terminado.
Puntos clave
- Los registros de segmentación conservan los datos y los controles pendientes de cada instrucción.
- rd viaja hasta WB junto al resultado que le corresponde.
- EX necesita los bits de función o un código de control de la ALU ya decodificado.
- Todas las instrucciones mantienen la secuencia de cinco etapas incluso cuando una etapa no realiza trabajo.
- La escritura en la primera mitad y la lectura en la segunda permiten que WB suministre datos a ID en el mismo ciclo.
- Las memorias separadas permiten buscar instrucciones y acceder a datos simultáneamente.
3.3 Lee diagramas de segmentación y cuenta ciclos
Un diagrama de segmentación muestra explícitamente la superposición. Las filas muestran las instrucciones en orden de programa y las columnas muestran los ciclos de reloj. Cada celda indica la etapa que ocupa esa instrucción durante ese ciclo.
Construye una escalera
Para cinco instrucciones independientes, escribe IF para I1 en el ciclo 1 y después ID, EX, MEM y WB en los ciclos 2–5. Comienza I2 un ciclo después y repite. Los nombres de las etapas forman una escalera diagonal.
| Instrucción | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|
| I1 | IF | ID | EX | MEM | WB | ||||
| I2 | IF | ID | EX | MEM | WB | ||||
| I3 | IF | ID | EX | MEM | WB | ||||
| I4 | IF | ID | EX | MEM | WB | ||||
| I5 | IF | ID | EX | MEM | WB |
En el ciclo 5, I1 está en WB, I2 en MEM, I3 en EX, I4 en ID e I5 en IF. Leer una columna de arriba abajo proporciona una instantánea de un solo ciclo. Seguir una fila muestra el historial de una instrucción.
Numera las etapas desde IF = 1 hasta WB = 5. Sin paradas, la instrucción i llega a la etapa s en el ciclo i + s − 1. Por tanto, I3 llega a MEM en el ciclo 6. La última celda de WB indica el ciclo de finalización: cinco instrucciones terminan en el ciclo 9.
Añade valores a una instantánea
Sea I1 ld x5, 16(x6), con x6 = 1000 y la memoria en 1016 con el valor 42. Sea I2 una suma independiente, I3 una resta independiente e I4 una operación OR independiente. En el ciclo 4, la carga lee la memoria en 1016, I2 usa la ALU, I3 lee registros e I4 se busca. En el ciclo 5 la carga escribe 42 en x5. Una columna contiene trabajo de varias instrucciones, no varias etapas de la carga.
Muestra una parada sin detener el trabajo anterior
Usa ahora ld x10, 0(x20) seguida de add x11, x10, x12 y después una instrucción independiente. Con adelantamiento de datos, la instrucción consumidora inmediata aún necesita una parada:
- La carga ocupa IF 1, ID 2, EX 3, MEM 4, WB 5.
- La instrucción add ocupa IF 2, ID 3, de nuevo ID 4, EX 5, MEM 6, WB 7.
- La tercera instrucción ocupa IF 3, de nuevo IF 4, ID 5, EX 6, MEM 7, WB 8.
La instrucción add espera en ID mientras una burbuja avanza por EX. La carga continúa con normalidad; detenerla retrasaría precisamente el valor que add necesita. Todas las instrucciones posteriores se retrasan junto con add.
Cuenta la secuencia una sola vez
Un cauce de cinco etapas necesita n + 4 ciclos sin paradas. Cada parada insertada añade un ciclo más, lo que da n + 4 + paradas cuando no hay otras pérdidas. El ejemplo de tres instrucciones termina en el ciclo 8: tres instrucciones, cuatro intervalos adicionales de etapa y una parada.
Los primeros cuatro ciclos llenan el cauce y los últimos cuatro lo vacían. Son dos perspectivas de la misma secuencia de n + 4 ciclos, no dos cargos separados de cuatro ciclos. Para una secuencia larga su contribución fija es pequeña; para una secuencia corta puede dominar el factor de aceleración.
Puntos clave
- Las filas siguen una instrucción; las columnas muestran el trabajo simultáneo.
- Sin paradas, la instrucción i ocupa la etapa s en el ciclo i + s − 1.
- Una parada repite ID y mantiene detenida la búsqueda de instrucciones posteriores mientras avanzan las anteriores.
- El total de ciclos es n + 4 + paradas para la secuencia de cinco etapas sin otras pérdidas.
4Detecta y resuelve riesgos de datos
La superposición de instrucciones puede requerir un valor antes de que la instrucción que lo produce lo haya escrito en el banco de registros. Identifica la instrucción que realmente produce cada operando fuente y después sigue los caminos de adelantamiento que llevan los nuevos resultados a instrucciones posteriores. Las cargas revelan el límite temporal del adelantamiento: sus datos llegan demasiado tarde para una instrucción consumidora inmediata. Sigue la parada necesaria y observa cómo mover trabajo independiente puede eliminar el retraso sin cambiar el resultado del programa.
4.1 Encuentra las dependencias que pueden retrasar la ejecución
Un riesgo impide que la siguiente instrucción se ejecute en el ciclo previsto. Para diagnosticarlo, identifica el recurso o valor necesario, el ciclo en que se necesita y el ciclo en que está disponible.
Distingue tres tipos de riesgos
| Tipo | Conflicto | Ejemplo |
|---|---|---|
| Estructural | Demanda simultánea de un recurso | IF y MEM necesitan una memoria de un solo puerto |
| Datos | Un valor necesario no está listo | Una resta necesita el resultado de la suma anterior |
| Control | La dirección siguiente correcta aún no se conoce | La búsqueda continúa antes de que se decida un salto |
Las memorias de instrucciones y de datos separadas eliminan el conflicto estructural entre IF y MEM. Escribir el banco de registros en la primera mitad de un ciclo y leerlo en la segunda también permite que WB e ID lo compartan. Estas disposiciones eliminan los riesgos estructurales en este modelo de cinco etapas.
Identifica la instrucción que produce el valor
Una dependencia de lectura después de escritura (RAW) existe cuando una instrucción posterior lee un valor escrito por una anterior. En add x1, x2, x3 seguida de sub x4, x1, x5, add produce x1 y la resta lo consume. Sin ayuda, la resta lee x1 en ID durante el ciclo 3, antes de que add lo escriba en WB durante el ciclo 5.
Una dependencia de escritura después de lectura (WAR) reutiliza un registro después de que una instrucción anterior lo haya leído. Una dependencia de escritura después de escritura (WAW) asigna el mismo destino a dos instrucciones. Estas dependencias de nombre no causan riesgos en el diseño de cinco etapas con ejecución en orden: las lecturas ocurren en ID y las escrituras en WB en orden de programa. Son importantes al decidir si el software puede reordenar instrucciones.
Sigue una secuencia con destinos repetidos
Considera:
ld x5, 0(x10)
add x6, x5, x7
sub x5, x8, x9
or x9, x6, x5
Las relaciones RAW son carga → suma a través de x5, suma → OR a través de x6 y resta → OR a través de x5. La operación OR necesita el nuevo x5 de la resta, no el valor cargado anteriormente. Buscar solo nombres de registro iguales puede hacer que pases por alto este cambio de productor.
La resta escribe x5 después de que la suma lea x5, una dependencia WAR. La carga y la resta también tienen una dependencia WAW sobre x5. La operación OR escribe x9 después de que la resta lo lea, otra dependencia WAR. Ninguna de ellas crea un riesgo de hardware WAR o WAW en este cauce con ejecución en orden.
Cuenta las esperas sin adelantamiento de datos
Si solo se cuenta con un banco de registros que escribe antes de leer, una instrucción consumidora inmediata necesita dos ciclos de parada. Debe retrasar su lectura en ID del ciclo 3 al ciclo 5. Una instrucción independiente entre la productora y la consumidora reduce la espera a una parada. Dos instrucciones independientes permiten que la consumidora llegue a ID en el ciclo WB de la productora, sin necesitar ninguna parada.
Una dependencia es una propiedad del programa; que cause una parada depende del momento y de los caminos disponibles. Una dependencia RAW distante puede no requerir ninguna acción. El registro x0 nunca proporciona un resultado pendiente porque siempre se lee como cero e ignora las escrituras.
El software puede insertar instrucciones nop o mover trabajo independiente a los intervalos de espera. El hardware puede adelantar resultados o insertar paradas automáticamente. Ambos enfoques deben mantener conectada cada instrucción consumidora al valor que escribe su productora en el orden del programa.
Puntos clave
- Los riesgos estructurales, de datos y de control implican distintos tipos de conflicto.
- RAW identifica una instrucción productora cuyo valor lee una instrucción posterior.
- Solo las dependencias RAW crean riesgos de datos en este diseño de cinco etapas con ejecución en orden.
- La escritura anterior más cercana de un registro fuente proporciona el valor necesario.
- Sin adelantamiento de datos, una instrucción consumidora adyacente espera dos ciclos; una instrucción intermedia reduce la espera a uno.
- Las dependencias WAR y WAW siguen limitando las reordenaciones válidas del software.
4.2 Selecciona el valor disponible más reciente mediante adelantamiento de datos
Un resultado de la ALU existe antes de llegar a la escritura en el registro. El adelantamiento de datos, también llamado cortocircuito de datos, dirige ese resultado directamente a la entrada de una instrucción posterior, evitando esperar al banco de registros.
Selecciona la fuente de cada operando
Dos multiplexores alimentan los caminos de ejecución. ForwardA sirve a rs1 y ForwardB sirve a rs2. Cada operando se comprueba de forma independiente.
| Código de selección | Fuente del valor |
|---|---|
| 00 | Valor de registro transportado en ID/EX |
| 10 | Resultado de la ALU transportado en EX/MEM |
| 01 | Valor de escritura en el registro transportado en MEM/WB |
El camino EX/MEM llega a la instrucción inmediatamente posterior. El camino MEM/WB llega a una instrucción situada dos posiciones después y puede transportar un resultado de la ALU o datos cargados. ForwardB también alimenta el camino de datos de almacenamiento antes de que ALUSrc elija entre ese valor y un inmediato.
Comprueba la habilitación, el destino y la coincidencia
Para ForwardA = 10, la instrucción en EX/MEM debe tener RegWrite = 1, un rd distinto de cero y un rd igual a ID/EX.rs1. Sustituye rs1 por rs2 para la comprobación de ForwardB. Un almacenamiento o un salto condicional no debe tratarse como productor solo porque sus bits de instrucción se parezcan a un número de destino. Las escrituras en x0 tampoco deben convertirse en valores adelantados.
Para ForwardA = 01, realiza las comprobaciones correspondientes de RegWrite, rd distinto de cero y coincidencia de registros en MEM/WB. Usa este resultado anterior solo cuando EX/MEM no proporcione ya el operando necesario. ForwardB sigue la misma regla de prioridad de forma independiente.
Sigue un resultado por las instrucciones consumidoras posteriores
Comienza con add x1, x2, x3, donde x2 = 10 y x3 = 5. Produce 15 al final de EX en el ciclo 3.
- La siguiente instrucción,
sub x4, x1, x5, llega a EX en el ciclo 4. Con x5 = 3, ForwardA = 10 proporciona 15 y la resta da 12. and x6, x7, x1llega a EX en el ciclo 5. ForwardB = 01 toma x1 de MEM/WB.or x8, x1, x9lee registros en ID durante el ciclo 5, después de la escritura de add en la primera mitad. No necesita adelantamiento en EX.
No se necesita ninguna parada para estas dependencias de resultados de la ALU. La instrucción consumidora recibe el valor cuando usa la ALU, aunque su lectura anterior en ID haya obtenido un valor desactualizado.
Resuelve dos escrituras coincidentes
En tres instrucciones consecutivas add x1, x1, x2, add x1, x1, x3 y add x1, x1, x4, tanto EX/MEM como MEM/WB coinciden con el rs1 de la tercera instrucción. EX/MEM contiene el resultado de la segunda instrucción add, el x1 más reciente. MEM/WB contiene el resultado de la primera instrucción add y debe perder la prioridad.
Los mismos caminos permiten que add x5, x6, x7 proporcione un valor a sd x5, 0(x8) sin una parada. El x5 adelantado llega al camino de datos de escritura de la memoria mientras la ALU del almacenamiento usa el desplazamiento inmediato.
El adelantamiento de datos no puede proporcionar datos antes de que existan. EX/MEM para una carga contiene su dirección, no el valor cargado. La instrucción consumidora inmediata debe esperar hasta que la carga termine MEM; adelantar la dirección haría que se calculara con una cantidad incorrecta sin que se detectara.
Puntos clave
- El adelantamiento de datos entrega un resultado directamente a una instrucción posterior antes de escribirlo en el registro.
- 00 selecciona ID/EX, 10 selecciona EX/MEM y 01 selecciona MEM/WB.
- Cada coincidencia para el adelantamiento requiere RegWrite, un rd distinto de cero y un número de fuente coincidente.
- EX/MEM tiene prioridad sobre MEM/WB para el mismo operando.
- ForwardB puede proporcionar tanto datos de almacenamiento como un operando de registro de la ALU.
- Una instrucción consumidora inmediatamente posterior a una carga sigue necesitando una parada porque los datos aún no están listos.
4.3 Inserta una burbuja o llena el intervalo con trabajo útil
Una carga produce datos al final de MEM. La instrucción inmediatamente posterior necesitaría esos datos al comienzo de EX en el mismo ciclo. Una parada mueve la etapa EX de la instrucción consumidora al siguiente ciclo, cuando MEM/WB puede proporcionar el valor.
Detecta el valor que falta en ID
La unidad de detección de riesgos examina la instrucción en EX y la instrucción que se está decodificando. La prueba básica es ID/EX.MemRead = 1 y una coincidencia entre ID/EX.rd y cualquiera de los campos de número de fuente en IF/ID. Una prueba refinada excluye rd = x0 y comprueba qué campos fuente lee realmente la instrucción decodificada.
Esta última comprobación evita una parada falsa en una instrucción de tipo I cuyos bits de inmediato ocupan la posición habitual de rs2. Comparar las posiciones de los campos sin interpretarlas es seguro, pero puede retrasar una instrucción que en realidad no lee el registro.
Detén el trabajo posterior y deja avanzar la carga
La parada realiza tres acciones coordinadas:
- Establece en cero los controles que entran en ID/EX, insertando una burbuja.
- Establece PCWrite = 0 para mantener sin cambios la dirección de búsqueda.
- Establece IF/IDWrite = 0 para conservar la instrucción que espera en ID.
La carga y las instrucciones anteriores siguen avanzando. La burbuja pasa por las etapas posteriores sin escribir registros ni memoria. Congelar ID/EX con la carga aún dentro repetiría la carga en lugar de insertar una operación vacía.
Para ld x10, 0(x20) seguida de add x11, x10, x12, la carga está en EX y add en ID durante el ciclo 3. En el ciclo 4, la carga está en MEM, la burbuja en EX y add sigue en ID. En el ciclo 5, la carga está en WB y add llega a EX con ForwardA = 01.
Planifica instrucciones independientes
Considera:
ld x10, 0(x20)
ld x11, 8(x20)
add x12, x10, x11
sd x12, 24(x20)
ld x13, 16(x20)
add x14, x10, x13
sd x14, 32(x20)
Los usos de x11 y x13 siguen inmediatamente a sus cargas. Con adelantamiento de datos, estos causan dos paradas, lo que da 7 + 4 + 2 = 13 ciclos. Mueve ld x13, 16(x20) al tercer lugar, antes de la primera suma. Esto separa la carga de x11 de su instrucción consumidora y sitúa x13 suficientemente lejos de la suya. La secuencia tarda ahora 7 + 4 = 11 ciclos.
El movimiento es válido porque la carga lee x20, que las instrucciones sobrepasadas no cambian. Su destino x13 no afecta a esas instrucciones. Su dirección x20 + 16 es distinta de x20 + 24, la del almacenamiento sobrepasado. Una carga no puede moverse por encima de un almacenamiento que pueda escribir los bytes que lee. La reordenación debe conservar las dependencias RAW, WAR, WAW y de memoria.
Combina paradas y adelantamiento de datos
Para ld x5, 0(x10), add x6, x5, x7, sub x5, x8, x9 y or x9, x6, x5, solo se detiene el par inmediato de carga y uso. Cuando OR llega a EX, ForwardA = 01 proporciona el x6 de la suma y ForwardB = 10 proporciona el x5 de la resta. El total es 4 + 4 + 1 = 9 ciclos.
Puntos clave
- Un par de carga y uso necesita una parada cuando hay adelantamiento de datos.
- Una parada pone a cero los controles que entran en ID/EX y congela el PC e IF/ID.
- La carga continúa por MEM mientras la instrucción consumidora espera en ID.
- Planificar trabajo independiente puede separar las cargas de sus instrucciones consumidoras.
- Una reordenación válida conserva las dependencias de registros y de memoria.
- Después de una parada, selecciona cada operando adelantado de su propia instrucción productora.
- Los ciclos son instrucciones + 4 + paradas para estas secuencias de cinco etapas.
5Gestiona los riesgos de control y predice los saltos
Un salto hace que la dirección de la siguiente instrucción dependa de trabajo que aún está en el cauce. Sigue lo que ocurre cuando la búsqueda espera, predice la siguiente dirección o se recupera de una predicción incorrecta. Sigue la evolución de predictores basados en el historial y distingue sus predicciones de dirección de los destinos de salto almacenados. Por último, combina los retrasos por carga y uso y las penalizaciones por salto con el periodo de reloj para comparar tiempos de ejecución, incluidos los compromisos que introducen los cauces con más etapas.
5.1 Recupérate de saltos y excepciones
La búsqueda necesita una dirección nueva en cada ciclo. Un salto condicional proporciona la elección correcta solo después de su comparación y del cálculo del destino. Este intervalo crea un riesgo de control.
Relaciona la etapa de resolución con la penalización
En un cauce de cinco etapas con redirección después de la etapa de resolución, un resultado conocido al final de ID pierde una posición de búsqueda ante una predicción incorrecta. La resolución al final de EX pierde dos; al final de MEM pierde tres. Las instrucciones posteriores ya han entrado durante esas posiciones.
Una estrategia detiene la búsqueda hasta que se decida cada salto. Es sencilla, pero tanto los saltos tomados como los no tomados pagan la espera completa. Predecir salto no tomado continúa, en cambio, en PC + 4. Una predicción correcta no necesita recuperación. Un salto tomado redirige la búsqueda y descarta las instrucciones posteriores del camino secuencial.
Sigue un salto tomado
Busca beq x1, x2, 16 en la dirección 100 en el ciclo 1 y resuélvelo al final de EX en el ciclo 3. La predicción de salto no tomado busca las direcciones 104 y 108 en los ciclos 2 y 3. Si se toma el salto, ambas son instrucciones del camino equivocado. La búsqueda comienza en 116 en el ciclo 4, después de una penalización de dos ciclos.
Una anulación de instrucciones del cauce (flush) impide que esas entradas posteriores cambien el estado arquitectónico o provoquen excepciones. La implementación puede invalidar las entradas o suprimir sus controles y los efectos de excepciones. Un almacenamiento del camino equivocado nunca debe llegar a realizar una escritura efectiva en memoria.
Una burbuja no es lo mismo que una instrucción RISC-V de solo ceros. La codificación de solo ceros es ilegal. Si se inserta una codificación de instrucción real, el nop canónico es addi x0, x0, 0, codificado como 0x00000013. Una entrada anulada del cauce representa, en cambio, que no se ejecuta ninguna instrucción.
Resuelve antes, pero obtén antes los operandos
Mover el comparador y el sumador de destino del salto a ID reduce la penalización por redirección a un ciclo. La comparación necesita ahora los valores fuente en ID, por lo que el adelantamiento habitual solo hacia EX es insuficiente. Con un adelantamiento adecuado hacia ID, un salto inmediatamente posterior a la instrucción de ALU que produce su operando espera un ciclo. Inmediatamente después de una carga que produce su operando, espera dos. La resolución anticipada intercambia menos posiciones de búsqueda perdidas por una entrega de operandos más exigente.
La predicción estática fija una regla de antemano. Las reglas habituales son siempre no tomado, siempre tomado y salto hacia atrás tomado o salto hacia delante no tomado. Un salto hacia atrás al final de un bucle suele repetirlo, por lo que esa dirección es una pista útil.
RISC-V no tiene ranura de retardo de salto. Si se toma un salto, su sucesora secuencial no se ejecuta solo porque se haya buscado. Algunos diseños antiguos de MIPS hacían que esa sucesora se ejecutara como una instrucción definida de la ranura de retardo; esa es una regla diferente de la ISA.
Conserva un límite de excepción precisa
Una instrucción ilegal o ecall transfiere el control a un gestor. Las instrucciones anteriores terminan; la instrucción que causa la excepción y las posteriores no confirman sus efectos normales. El procesador registra el PC de la instrucción causante y la causa, mediante registros como sepc/scause en modo supervisor o mepc/mcause en modo máquina, y después busca desde el gestor. Esta excepción precisa presenta el estado como un límite entre las instrucciones anteriores completadas y el trabajo posterior no completado.
Puntos clave
- Una resolución de salto más tardía deja más instrucciones posteriores que descartar.
- La predicción de salto no tomado solo paga una penalización de recuperación cuando se equivoca.
- Una anulación suprime los cambios de estado y las excepciones del camino equivocado.
- Los bits de instrucción de solo ceros son ilegales; el nop canónico es 0x00000013.
- La resolución anticipada en ID también requiere operandos antes y un adelantamiento adecuado.
- RISC-V no tiene una ranura de retardo de salto arquitectónica.
- Las excepciones precisas conservan el trabajo anterior completado y descartan los efectos de la instrucción causante y las posteriores.
5.2 Sigue las predicciones de saltos basadas en el historial
La predicción dinámica aprende de los resultados observados mientras se ejecuta un programa. Una tabla de historial de saltos (BHT) almacena pequeñas entradas de estado seleccionadas mediante bits de una dirección de salto. Primero se predice, después se compara con el resultado real y luego se actualiza la entrada.
Descubre por qué un bit falla dos veces en un bucle
Un predictor de 1 bit almacena el resultado anterior. Si el último salto se tomó, predice tomado la próxima vez; de lo contrario, predice no tomado. Para un bucle ejecutado repetidamente cuyo salto se toma nueve veces y después no se toma una vez, la salida deja el bit en no tomado.
En la siguiente ejecución, el primer salto tomado se predice incorrectamente. Los saltos tomados intermedios ajustan el bit a tomado, por lo que la salida final no tomada también se predice incorrectamente. En régimen estable son dos errores en diez resultados, o una precisión del 80 %.
Añade un segundo bit para mantener la predicción
Un contador de saturación de 2 bits tiene estados del 0 al 3. Los estados 0 y 1 predicen no tomado; 2 y 3 predicen tomado. Un resultado tomado incrementa el contador y un resultado no tomado lo decrementa. Los valores se detienen en 0 y 3.
| Estado | Nombre | Predicción |
|---|---|---|
| 0 | Fuertemente no tomado | No tomado |
| 1 | Débilmente no tomado | No tomado |
| 2 | Débilmente tomado | Tomado |
| 3 | Fuertemente tomado | Tomado |
Desde el estado 3, una salida no tomada mueve el estado a 2, que sigue prediciendo tomado. Por tanto, la siguiente entrada al bucle se predice correctamente. El mismo bucle de diez resultados tiene un error por ejecución en régimen estable, o una precisión del 90 %. Se necesitan dos resultados contrarios consecutivos para invertir una predicción que parte de un estado fuerte.
Sigue el estado antes de actualizarlo
Comienza en el estado 1 y observa tomado, tomado, no tomado, tomado:
- El estado 1 predice no tomado: incorrecto. Incrementa a 2.
- El estado 2 predice tomado: correcto. Incrementa a 3.
- El estado 3 predice tomado: incorrecto. Decrementa a 2.
- El estado 2 predice tomado: correcto. Incrementa a 3.
Hay dos errores y el estado final es 3. Actualizar antes de predecir daría incorrectamente al predictor acceso al resultado que debe predecir.
Distingue dirección, destino e interferencia
Dos direcciones de salto pueden indexar la misma entrada de la BHT. Esta interferencia por entradas compartidas permite que sus resultados interfieran entre sí. Una predicción incorrecta cuesta ciclos, pero la recuperación comprueba el resultado real y conserva la corrección.
Un búfer de destinos de salto (BTB) proporciona una dirección, no solo un bit de dirección del salto. Consultado mediante el PC durante IF, puede proporcionar el destino predicho de un salto tomado para el siguiente ciclo de búsqueda antes de la decodificación. La predicción de dirección decide si se usa ese destino.
Un historial sencillo tiene límites. Para un patrón que alterna estrictamente entre tomado y no tomado, un predictor de 1 bit sigue equivocándose una vez que sigue el patrón. Un contador de 2 bits acierta como máximo la mitad de las veces; si comienza en el estado 1 antes de un resultado tomado, se equivoca siempre. Los predictores con correlación añaden el historial de saltos recientes, los predictores de torneo seleccionan entre predictores y una pila de direcciones de retorno predice los destinos de retorno de procedimientos. Los cauces con más etapas hacen que la recuperación sea más costosa porque se acumula más trabajo posterior antes de la resolución.
Puntos clave
- Un predictor de 1 bit repite el último resultado.
- Un contador de 2 bits predice tomado en los estados 2 y 3 y se satura en 0 y 3.
- La predicción usa el estado anterior; la actualización sigue al resultado real.
- Dos bits evitan el error de entrada al bucle causado por una sola salida.
- La interferencia por entradas compartidas de la BHT permite que distintos saltos perturben una misma entrada de historial.
- Un BTB proporciona un destino predicho; la predicción de dirección elige si se usa.
5.3 Convierte las tasas de riesgos en tiempo de ejecución
La velocidad del cauce depende tanto del periodo de reloj como de los ciclos dedicados a esperar o recuperarse. El CPI efectivo mide esos ciclos adicionales promediados entre todas las instrucciones.
Pondera cada coste según las instrucciones afectadas
Para una secuencia larga de emisión simple, comienza con un CPI ideal de 1. Añade cada fuente distinta de ciclos perdidos que no se solape con otras como la fracción de instrucciones afectadas multiplicada por los ciclos perdidos por suceso. Una tasa condicional también necesita la fracción de la que depende.
Supón que el 25 % de las instrucciones son cargas y que el 40 % de esas cargas tiene una instrucción consumidora inmediata. Cada uno de esos pares se detiene una vez, por lo que la contribución de carga y uso es 0,25 × 0,40 × 1 = 0,10 ciclos por instrucción. Supón que el 15 % son saltos, que el 10 % de ellos se predice incorrectamente y que la recuperación cuesta dos ciclos. La contribución de los saltos es 0,15 × 0,10 × 2 = 0,03.
Sumar los costes independientes da CPI = 1 + 0,10 + 0,03 = 1,13. Atribuir una parada a cada carga produciría 0,25 en lugar de 0,10. Aplicar la tasa de error de saltos del 10 % a cada instrucción también daría un recuento excesivo.
Incluye el periodo de reloj y el número de instrucciones
El tiempo de ejecución es igual al número de instrucciones ejecutadas × CPI × periodo de reloj. Un reloj de 4 GHz tiene un periodo de 0,25 ns. Para 10⁹ instrucciones con CPI 1,13, la ejecución tarda 10⁹ × 1,13 × 0,25 ns = 0,2825 s. El tiempo medio por instrucción es 0,2825 ns.
Para una secuencia corta, cuenta explícitamente los ciclos de llenado, vaciado y riesgos. El CPI base ideal de 1 describe la productividad en régimen estable; un cauce de cinco etapas que ejecuta solo unas pocas instrucciones también tiene su contribución de cuatro ciclos de llenado y finalización.
Compara las estrategias de salto en igualdad de condiciones
Mantén el coste de carga y uso de 0,10, la fracción de saltos de 0,15 y la penalización de dos ciclos:
| Estrategia de salto | Coste de salto | CPI efectivo |
|---|---|---|
| Esperar en cada salto | 0,15 × 2 = 0,30 | 1,40 |
| Predecir no tomado, 60 % tomados | 0,15 × 0,60 × 2 = 0,18 | 1,28 |
| Dinámica, 90 % de precisión | 0,15 × 0,10 × 2 = 0,03 | 1,13 |
Con el mismo periodo de reloj y número de instrucciones, la predicción dinámica es aproximadamente 1,24 veces más rápida que esperar, porque 1,40/1,13 ≈ 1,24.
Entre distintos procesadores, compara CPI × periodo. Un diseño de un solo ciclo con 1000 ps tarda 1000 ps por instrucción. Un cauce con 270 ps y CPI 1,13 tarda 305,1 ps por instrucción, un factor de aceleración de aproximadamente 3,28. Comparar solo el CPI favorecería el CPI de 1 del diseño de un solo ciclo y llevaría a una conclusión incorrecta.
Comprende el siguiente compromiso de diseño
Más etapas de segmentación pueden reducir el trabajo combinacional por ciclo. También introducen sobrecoste de registro y pueden aumentar las penalizaciones por carga y uso y por predicciones incorrectas. La frecuencia de reloj por sí sola no puede decidir si el diseño con más etapas es mejor.
La emisión múltiple inicia varias instrucciones por ciclo, lo que permite un CPI inferior a 1 e instrucciones por ciclo (IPC) superiores a 1. Los grupos de emisión estática son elegidos por el compilador; la emisión dinámica, o ejecución superescalar, es elegida por el hardware y suele usar especulación y ejecución fuera de orden. Las dependencias de datos y la predicción de saltos siguen limitando la superposición útil.
Puntos clave
- Promedia el coste de cada riesgo entre todas las instrucciones, incluida la fracción de la que dependen las tasas condicionales.
- Añade las distintas contribuciones de ciclos perdidos al CPI ideal de 1 para secuencias largas de emisión simple.
- El tiempo de ejecución es número de instrucciones ejecutadas × CPI × periodo de reloj.
- Compara distintos procesadores mediante CPI × periodo, no solo mediante CPI.
- Los cauces con más etapas intercambian etapas más cortas por mayor sobrecoste y coste de riesgos.
- La emisión múltiple puede lograr un IPC superior a 1 y un CPI inferior a 1.
Ejemplos de Camino de datos y segmentación
1Sigue una instrucción desde su búsqueda hasta el resultado guardado
14 pasos
- 1IntroducciónConvierte los bits de una instrucción en valores guardados
Una instrucción indica un trabajo, como sumar valores de registros o cargar datos. El procesador necesita hardware que realice ese trabajo y señales de control que seleccionen las rutas correctas.
Sigue el camino de datos de un solo ciclo desde sus elementos de almacenamiento hasta sus salidas. Después, sigue una secuencia corta e identifica exactamente qué cambia en cada flanco de reloj final. Cada instrucción de este subconjunto ocupa 4 bytes.
- 2ExplicaciónComienza con la dirección almacenada de la instrucción
El PC contiene la dirección de la instrucción actual. La memoria de instrucciones devuelve la instrucción en esa dirección y un sumador separado calcula PC + 4 al mismo tiempo.
El PC es un elemento de estado: conserva su valor durante el ciclo. El sumador es combinacional: su salida sigue a las entradas. En el flanco de reloj final, el PC captura la siguiente dirección que seleccione su multiplexor de entrada.
- 3ExplicaciónLee los operandos y forma el inmediato
El banco de registros lee rs1 y rs2 mediante dos puertos. Su puerto de escritura cambia rd solo cuando RegWrite habilita la escritura en el flanco de reloj; x0 siempre se lee como cero.
ImmGen reconstruye un inmediato y lo extiende con signo a 64 bits. Copiar el bit de signo mantiene negativo un desplazamiento negativo. Para el valor de 12 bits
1111 1111 1000, el resultado es −8, no el valor 4088 que se obtendría al extenderlo con ceros. - 4Idea claveDistingue un resultado calculado de uno almacenado
La ALU suma, resta o realiza AND u OR según su entrada de control. Su indicador Zero señala si el resultado es cero. Los multiplexores seleccionan entre posibles entradas y las habilitaciones de escritura determinan qué valores seleccionados pasan a formar parte del estado almacenado.
Una unidad puede calcular una salida no utilizada sin cambiar el programa. Una habilitación de escritura en memoria es diferente: activarla puede guardar un valor incluso cuando nunca se pretendió realizar esa escritura.
- 5Desafío¿Qué parte recuerda?
Un sumador de destino de salto calcula 740 mientras el PC sigue conteniendo 720. Antes del flanco activo, ¿qué unidad conserva la dirección de la instrucción actual y el destino calculado cambia por sí mismo esa dirección?
---reveal---
El PC conserva 720. El sumador solo calcula un posible destino. El PC cambia cuando el siguiente valor seleccionado se captura en el flanco; un valor candidato en una entrada no seleccionada no lo sobrescribe.
- 6ExplicaciónDirige las operaciones aritméticas y de memoria
Una operación de tipo R lee dos valores de registro, los envía por la ALU y devuelve el resultado a rd. Una carga, en cambio, necesita una dirección formada por base más desplazamiento y después el valor de memoria en esa dirección.
Un almacenamiento calcula una dirección de la misma forma, pero rs2 proporciona los datos que se van a escribir. El camino de datos hacia la memoria debe seguir disponible incluso mientras ALUSrc selecciona un inmediato para la segunda entrada de la ALU.
- 7ExplicaciónElige las conexiones compartidas
Tres selectores unen los caminos:
- ALUSrc elige rs2 o el inmediato para la ALU.
- MemtoReg elige el resultado de la ALU o los datos de memoria para rd.
- PCSrc elige PC + 4 o el destino del salto.
Una carga establece ALUSrc en 1 y MemtoReg en 1. Un almacenamiento también usa el camino de dirección con inmediato, pero deshabilita la escritura en el registro y habilita la escritura en memoria.
- 8ConsejoCalcula una sola vez el destino de un salto
Para
beq, la resta comprueba la igualdad mientras un sumador separado forma el PC del salto + el desplazamiento en bytes con signo. Estos cálculos pueden avanzar en paralelo.La codificación de formato B omite el bit inferior cero del desplazamiento. ImmGen puede reconstruir el desplazamiento completo en bytes o un desplazamiento externo de bits puede proporcionar ese bit. Una vez que existe el desplazamiento completo en bytes, volver a desplazarlo duplicaría la distancia.
- 9DesafíoDistingue la dirección de almacenamiento de los datos almacenados
Para
sd x11, 32(x18), x18 contiene 2400 y x11 contiene 55. ¿Cuáles son el resultado de la ALU y los datos de escritura en memoria?---reveal---
La ALU calcula la dirección 2432 a partir de 2400 + 32. Los datos de escritura en memoria son 55, proporcionados por x11. Enviar 55 a la ALU en lugar del desplazamiento calcularía una dirección que no corresponde; seleccionar el inmediato debe dejar intacta la ruta de datos de almacenamiento.
- 10EjemploSigue una suma hasta el flanco de reloj
En PC 400,
add x5, x6, x7lee x6 = 25 y x7 = −9. ALUSrc selecciona el segundo valor de registro, la ALU suma y MemtoReg selecciona el 16 resultante.En el flanco, RegWrite guarda 16 en x5 y el PC pasa a 404. La memoria de datos no se lee ni se escribe.
- 11EjemploSigue una carga y después un almacenamiento
En PC 404,
ld x5, 16(x6)usa x6 = 1000 y lee la dirección 1016, cuya palabra doble contiene 42. La ALU proporciona 1016; la memoria proporciona 42, que MemtoReg selecciona para x5. El PC avanza a 408.La siguiente instrucción
sd x5, 24(x6)calcula la dirección 1024 y escribe el valor actualizado de x5, 42. Avanza el PC a 412 sin escribir ningún registro. - 12EjemploDecide la dirección de la siguiente instrucción
En PC 412,
beq x8, x9, 12lee dos valores de 7. La resta da cero y el sumador de destino da 424. Branch AND Zero selecciona 424 como siguiente PC.Si x9 fuera 8, la resta daría −1 y el PC avanzaría a 416. Ninguno de los dos casos escribe un registro de propósito general ni la memoria de datos. La comparación controla qué dirección candidata se guarda.
- 13DesafíoDiagnostica el valor incorrecto del destino
Una instrucción correcta
ld x10, 8(x20)con x20 = 3200 lee la palabra doble 91 en 3208. Un multiplexor de escritura defectuoso deja, en cambio, x10 = 3208. ¿Qué seleccionó el multiplexor y qué debería seleccionar?---reveal---
Seleccionó el resultado de la ALU, la dirección 3208. Debería seleccionar la salida de la memoria de datos, 91. El cálculo de la dirección puede ser correcto mientras el estado final es incorrecto porque la escritura en el registro eligió la fuente equivocada.
- 14RepasoRelaciona cada escritura de estado con su ruta
Para un seguimiento completo de un solo ciclo, distingue el resultado aritmético, la dirección efectiva, los datos de memoria y el siguiente PC. Las cargas y las operaciones aritméticas escriben rd mediante distintas entradas del multiplexor; los almacenamientos usan un camino de datos separado; los saltos condicionales solo seleccionan la dirección de la siguiente instrucción.
Todos usan el mismo límite de flanco: el trabajo combinacional produce valores candidatos durante el ciclo y las escrituras de estado habilitadas capturan los valores seleccionados al final.
2Obtén el control a partir del trabajo que necesita una instrucción
11 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónHaz que el camino de datos compartido obedezca la instrucción
- 2EjemploObtén una fila de carga a partir de su ruta de datos
- 3ExplicaciónProtege el estado con habilitaciones de escritura definidas
- 4Idea claveDeja que los datos completen la decisión de salto
- 5DesafíoElige el ajuste no especificado que no causa efectos
- 6ExplicaciónUsa ALUOp para seleccionar una clase de operación
- 7EjemploSigue los bits de función de la resta
- 8ConexiónReutiliza el sumador para la resta
- 9DesafíoMantén los bits de una carga en su función correspondiente
- 10DesafíoAmplía el control sin añadir un camino de dirección
- 11RepasoRelaciona los permisos con la decodificación
3Observa cómo se superponen instrucciones independientes
15 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónDistingue una instrucción del flujo de instrucciones
- 2EjemploEncuentra la instrucción completa más lenta
- 3EjemploFija el reloj del cauce según la etapa más lenta
- 4AnalogíaCompara productividad y latencia
- 5DesafíoCalcula una secuencia corta
- 6ExplicaciónTransporta la instrucción, no solo su resultado
- 7EjemploMantén el destino junto a una carga
- 8ExplicaciónTransporta los controles hasta que su etapa los use
- 9Desafío¿Por qué conservar la posición MEM no utilizada?
- 10EjemploConstruye una escalera de etapas
- 11ConsejoLocaliza una etapa sin dibujar cada celda
- 12EjemploInserta una espera sin repetir el trabajo anterior
- 13DesafíoLee la finalización retrasada
- 14DesafíoCombina el almacenamiento con una instantánea de un ciclo
- 15RepasoDetermina el rendimiento a partir de la secuencia
4Sigue el valor más reciente por un cauce con paradas
17 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónEncuentra dónde existe el valor necesario
- 2ExplicaciónDistingue los conflictos por su causa
- 3EjemploIdentifica la instrucción productora para cada lectura
- 4Desafío¿La reutilización de registros crea un riesgo de hardware?
- 5ExplicaciónEntrega un resultado de la ALU antes de escribirlo en el registro
- 6ConsejoComprueba cada coincidencia para el adelantamiento
- 7EjemploResuelve dos escrituras coincidentes
- 8DesafíoAdelanta dos operandos de forma independiente
- 9ConexiónConserva la ruta separada de datos de almacenamiento
- 10ExplicaciónObserva el límite temporal del adelantamiento
- 11ExplicaciónDetén la instrucción consumidora e inserta una burbuja
- 12EjemploSigue la espera durante tres ciclos
- 13ConsejoHaz que el detector lea las fuentes reales
- 14EjemploMueve trabajo útil al intervalo
- 15DesafíoComprueba el movimiento antes de contar la ganancia
- 16DesafíoCombina la burbuja con el adelantamiento posterior
- 17RepasoElige la ayuda según el momento de producción
5Recupera el flujo de instrucciones y mide el coste
19 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónMantén el trabajo útil en el camino correcto
- 2ExplicaciónCuenta las posiciones de búsqueda posteriores
- 3EjemploSigue un salto tomado con predicción de salto no tomado
- 4ConsejoDescarta trabajo sin ejecutar una instrucción ilegal
- 5ExplicaciónIntercambia resolución anticipada por operandos anticipados
- 6DesafíoProtege el estado después de una predicción incorrecta
- 7ConexiónConserva el límite de excepción
- 8ExplicaciónUsa el historial para predecir la dirección
- 9ExplicaciónDeja que dos bits mantengan la confianza
- 10EjemploSigue la predicción antes de la actualización
- 11DesafíoComprueba un par de resultados contrarios
- 12ExplicaciónDistingue la dirección del destino
- 13Idea claveReconoce la interferencia y los límites de los patrones
- 14EjemploConvierte tasas condicionales en coste por instrucción
- 15EjemploIncluye la duración de un ciclo
- 16EjemploCompara estrategias de predicción
- 17DesafíoRecupera la fracción de saltos que falta
- 18DesafíoEvalúa un cauce con más etapas
- 19RepasoMide la superposición útil después de los costes de recuperación
Ejercicios de Camino de datos y segmentación
Set 1: Sigue los valores y las señales de control10 Preguntas de Práctica
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Pregunta 2 de 10
sd x14, 40(x9), ¿de dónde procede el valor que se escribe en memoria?Mostrar respuestaOcultar respuesta
Pregunta 3 de 10
ld x12, -16(x8) con x8 = 2080 y un valor de palabra doble de −6 en la dirección 2064. ¿Cuáles son x12 y el PC al terminar?Mostrar respuestaOcultar respuesta
Pregunta 4 de 10
beq x16, x17, -24 en la dirección 880 compara dos registros que contienen 11. ¿Qué dirección se busca a continuación?Mostrar respuestaOcultar respuesta
Pregunta 5 de 10
beq?Mostrar respuestaOcultar respuesta
Pregunta 6 de 10
000 y bit 30 = 1. ¿Qué ALUOp y control de la ALU produce este diseño?Mostrar respuestaOcultar respuesta
000 y bit 30 = 1 para seleccionar la resta, código 0110. ALUOp 01 también solicita resta, pero es el ajuste de la clase de salto condicional y este código de operación de tipo R no lo genera.Pregunta 7 de 10
1111 1111 0000. ¿Qué valor con signo debe proporcionar ImmGen al camino de datos de 64 bits?Mostrar respuestaOcultar respuesta
Pregunta 8 de 10
ld x15, 32(x18) tiene x18 = 3000 y la memoria en 3032 contiene 77. Un fallo de control cambia solo MemtoReg de 1 a 0. La siguiente instrucción es sd x15, 48(x18). ¿Qué valor escribe ese almacenamiento y dónde?Mostrar respuestaOcultar respuesta
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Set 2: Lee la secuencia de cinco etapas10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
add x13, x2, x3; or x20, x4, x5; sub x14, x13, x6. La instrucción intermedia es independiente. ¿Cuántas paradas y ciclos totales se necesitan?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
ld x21, 0(x25); add x22, x21, x3; or x24, x6, x7; sub x23, x22, x4. La instrucción OR es independiente y no hay riesgos de salto ni estructurales. ¿En qué ciclo entra la resta final en EX?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 3: Elige operandos y planifica las instrucciones en torno a las cargas10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
sub x11, x2, x3 con la instrucción posterior and x12, x11, x4?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
add x18, x0, x7. El resultado anterior de la ALU es distinto de cero. ¿Qué valor debe usar la suma como primer operando?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
add x9, x1, x2; add x9, x9, x3; sub x11, x9, x4 con x1 = 6, x2 = 7, x3 = 9 y x4 = 5. ¿Qué valor produce la resta y qué registro de segmentación proporciona su x9?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
add x16, x5, x6 va seguida inmediatamente de sd x16, 56(x20). El cauce adelanta los datos de almacenamiento antes de la selección de ALUSrc. ¿Cómo obtiene el almacenamiento sus datos?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
ld x6, 0(x20); add x7, x6, x8; ld x9, 16(x20); sub x10, x9, x11. Ninguna otra instrucción cambia x20, x8 o x11 y ambas lecturas son válidas. ¿Qué orden elimina ambas paradas por carga y uso sin cambiar los resultados?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
ld x5, 0(x20); add x6, x5, x7; sd x6, 8(x20); ld x8, 8(x20). ¿Por qué es inválido mover la última carga al segundo lugar aunque llene el intervalo de carga y uso?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
add x5, x6, x7; sub x6, x8, x9, ¿qué dependencia de registro limita el intercambio de las instrucciones?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
ld x12, 0(x26); add x13, x12, x2; ld x14, 8(x26); sub x15, x14, x13; sd x15, 24(x26). Los datos de almacenamiento se adelantan antes de ALUSrc y no hay otros riesgos. ¿Cuántos ciclos se necesitan hasta la última posición WB?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 4: Recupera la búsqueda y sigue el historial de saltos10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
ld x18, 0(x22) va seguida inmediatamente de un salto que compara x18. El salto se resuelve en ID. En comparación con no esperar operandos, ¿cuántos ciclos debe esperar la comparación y por qué?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 5: Combina los tiempos del cauce y los costes de los riesgos10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
¿Te atascas con una pregunta tuya? Ayuda con Tareas
Términos Clave
A
Adelantamiento de datos
ALUOp
ALUSrc
Anulación de instrucciones del cauce
B
Banco de registros
Búfer de destinos de salto
Burbuja
C
Camino crítico
Camino de datos
Campo de función
000, el bit 30 de la instrucción selecciona qué operación aritmética se ejecuta.Contador de programa
Contador de saturación
Control cableado
Control de la ALU
0110 selecciona la resta, mientras que el código relacionado 0010 selecciona la suma.CPI efectivo
D
Decodificación en dos niveles
Dependencia de escritura después de escritura
Dependencia de escritura después de lectura
Dependencia de lectura después de escritura
Dependencia de memoria
Destino del salto
Diagrama de segmentación de varios ciclos
Dirección efectiva
ld x4, 24(x8) con x8 = 2000, la dirección efectiva es 2024.E
Elemento combinacional
Elemento de estado
Emisión múltiple
Escritura del resultado en el registro
EX/MEM
Excepción precisa
Extensión de signo
F
Flanco de reloj
ForwardA
ForwardB
G
Generador de inmediatos
I
ID/EX
IF/ID
Indicador de cero
Interferencia por entradas compartidas
IPC
L
Latencia
Llenado del cauce de segmentación
M
MEM/WB
MemRead
MemtoReg
MemWrite
Multiplexor
P
Palabra doble
ld y sd.Parada del cauce
PCSrc
Penalización por salto
Pila de direcciones de retorno
Planificación de instrucciones
Predicción dinámica de saltos
Predicción estática
Predictor con correlación
Predictor de torneo
Procesador superescalar
Productividad
R
Registro de segmentación
RegWrite
Riesgo de carga y uso
Riesgo de control
Riesgo de datos
Riesgo estructural
S
Segmentación
Sobrecoste temporal de los registros de segmentación
T
Tabla de historial de saltos
Tiempo de ejecución
U
Unidad de adelantamiento de datos
Unidad de detección de riesgos
V
Vaciado del cauce de segmentación
Valor indiferente
beq porque no se escribe ningún registro.Sobre esta unidad
Crea tus propios Materiales de Estudio
Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.