Camino de datos y segmentación del procesador

Descubre cómo ejecuta instrucciones un procesador. Construye un camino de datos RISC-V de un solo ciclo a partir de registros, una ALU, memorias y multiplexores, diseña las señales de control que lo dirigen y sigue el recorrido de instrucciones reales con valores concretos. Después, segmenta el camino en cinco etapas, calcula el factor de aceleración y aprende cómo el adelantamiento de datos, las paradas, la planificación de instrucciones y la predicción de saltos mantienen ocupado el cauce a pesar de los riesgos de datos y de control.

IntermedioUnidad 4 de 6 del curso Curso de Organización y arquitectura de computadores

Lo que aprenderás

  1. 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 reloj
      Distingue 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 condicional
      Determina 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 ciclo
      Sigue 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.
  2. 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ón
      Explica 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ón
      Usa 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.
  3. 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 procesador
      Determina 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ón
      Explica 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ón
      Dibuja 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.
  4. 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 causan
      Clasifica 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 paradas
      Explica 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 evitarlas
      Detecta 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.
  5. 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ón
      Explica 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 historial
      Sigue 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 riesgos
      Combina 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.

Guía de estudio de Camino de datos y segmentación

5 capítulos

1

Construye 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ónEntradas y operación de la ALUMemoria de datosResultado guardado
add x5, x6, x7x6 + x7Sin accesoSuma en x5
ld x5, 16(x6)x6 + 16Lectura en la dirección efectivaDatos de memoria en x5
sd x5, 24(x6)x6 + 24Escritura de x5 en la dirección efectivaCambia la memoria
beq x8, x9, offsetx8 − x9Sin accesoSelecció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
  1. Busca desde el PC actual e identifica los campos de la instrucción.
  2. Lee los registros fuente y forma el inmediato con signo.
  3. Selecciona los operandos de la ALU y calcula el resultado.
  4. Realiza el acceso solicitado a la memoria de datos.
  5. Selecciona los datos de escritura del registro y el siguiente PC.
  6. 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.
2

Diseñ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
ClaseALUSrcMemtoRegRegWriteMemReadMemWriteBranchALUOp
Tipo R00100010
ld11110000
sd1X001000
beq0X000101

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.

ALUOpInformación adicionalControl de la ALUOperación
00Bits de función ignorados0010Suma
01Bits de función ignorados0110Resta
10funct3 000, bit 30 = 00010Suma
10funct3 000, bit 30 = 10110Resta
10funct3 1110000AND
10funct3 1100001OR

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:

a−b=a+b‾+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.
3

Segmenta 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ónRetardo del camino
Tipo R250 + 150 + 200 + 150 = 750 ps
ld250 + 150 + 200 + 250 + 150 = 1000 ps
sd250 + 150 + 200 + 250 = 850 ps
beq250 + 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
RegistroInformación transportada hacia delante
IF/IDInstrucción y su PC
ID/EXValores fuente, inmediato, PC, rs1, rs2, rd, bits de función, controles EX/MEM/WB
EX/MEMResultado de la ALU, Zero, destino del salto, valor de almacenamiento, rd, controles MEM/WB
MEM/WBDatos 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ón123456789
I1IFIDEXMEMWB
I2IFIDEXMEMWB
I3IFIDEXMEMWB
I4IFIDEXMEMWB
I5IFIDEXMEMWB

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.
4

Detecta 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
TipoConflictoEjemplo
EstructuralDemanda simultánea de un recursoIF y MEM necesitan una memoria de un solo puerto
DatosUn valor necesario no está listoUna resta necesita el resultado de la suma anterior
ControlLa dirección siguiente correcta aún no se conoceLa 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ónFuente del valor
00Valor de registro transportado en ID/EX
10Resultado de la ALU transportado en EX/MEM
01Valor 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, x1 llega a EX en el ciclo 5. ForwardB = 01 toma x1 de MEM/WB.
  • or x8, x1, x9 lee 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:

  1. Establece en cero los controles que entran en ID/EX, insertando una burbuja.
  2. Establece PCWrite = 0 para mantener sin cambios la dirección de búsqueda.
  3. 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.
5

Gestiona 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.

EstadoNombrePredicción
0Fuertemente no tomadoNo tomado
1Débilmente no tomadoNo tomado
2Débilmente tomadoTomado
3Fuertemente tomadoTomado

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:

  1. El estado 1 predice no tomado: incorrecto. Incrementa a 2.
  2. El estado 2 predice tomado: correcto. Incrementa a 3.
  3. El estado 3 predice tomado: incorrecto. Decrementa a 2.
  4. 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 saltoCoste de saltoCPI efectivo
Esperar en cada salto0,15 × 2 = 0,301,40
Predecir no tomado, 60 % tomados0,15 × 0,60 × 2 = 0,181,28
Dinámica, 90 % de precisión0,15 × 0,10 × 2 = 0,031,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

5 Lecciones Interactivas

1

Sigue una instrucción desde su búsqueda hasta el resultado guardado

14 pasos
Construye los caminos compartidos de un solo ciclo y sigue operaciones aritméticas, una carga, un almacenamiento y un salto condicional con valores concretos.
  1. 1
    Introducció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.

  2. 2
    Explicació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.

  3. 3
    Explicació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.

  4. 4
    Idea 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.

  5. 5
    Desafí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.

  6. 6
    Explicació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.

  7. 7
    Explicació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.

  8. 8
    ConsejoCalcula 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.

  9. 9
    Desafí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.

  10. 10
    EjemploSigue una suma hasta el flanco de reloj

    En PC 400, add x5, x6, x7 lee 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.

  11. 11
    EjemploSigue 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.

  12. 12
    EjemploDecide la dirección de la siguiente instrucción

    En PC 412, beq x8, x9, 12 lee 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.

  13. 13
    Desafí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.

  14. 14
    RepasoRelaciona 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.

2

Obtén el control a partir del trabajo que necesita una instrucción

11 pasos
Construye una fila de control para una carga, justifica los valores indiferentes y decodifica la aritmética de tipo R mediante ALUOp y los bits de función.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónHaz que el camino de datos compartido obedezca la instrucción
  2. 2
    EjemploObtén una fila de carga a partir de su ruta de datos
  3. 3
    ExplicaciónProtege el estado con habilitaciones de escritura definidas
  4. 4
    Idea claveDeja que los datos completen la decisión de salto
  5. 5
    DesafíoElige el ajuste no especificado que no causa efectos
  6. 6
    ExplicaciónUsa ALUOp para seleccionar una clase de operación
  7. 7
    EjemploSigue los bits de función de la resta
  8. 8
    ConexiónReutiliza el sumador para la resta
  9. 9
    DesafíoMantén los bits de una carga en su función correspondiente
  10. 10
    DesafíoAmplía el control sin añadir un camino de dirección
  11. 11
    RepasoRelaciona los permisos con la decodificación
3

Observa cómo se superponen instrucciones independientes

15 pasos
Calcula el periodo de reloj de un cauce, sigue los valores a través de los registros de etapa y lee los tiempos de finalización en la secuencia de cinco etapas.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónDistingue una instrucción del flujo de instrucciones
  2. 2
    EjemploEncuentra la instrucción completa más lenta
  3. 3
    EjemploFija el reloj del cauce según la etapa más lenta
  4. 4
    AnalogíaCompara productividad y latencia
  5. 5
    DesafíoCalcula una secuencia corta
  6. 6
    ExplicaciónTransporta la instrucción, no solo su resultado
  7. 7
    EjemploMantén el destino junto a una carga
  8. 8
    ExplicaciónTransporta los controles hasta que su etapa los use
  9. 9
    Desafío¿Por qué conservar la posición MEM no utilizada?
  10. 10
    EjemploConstruye una escalera de etapas
  11. 11
    ConsejoLocaliza una etapa sin dibujar cada celda
  12. 12
    EjemploInserta una espera sin repetir el trabajo anterior
  13. 13
    DesafíoLee la finalización retrasada
  14. 14
    DesafíoCombina el almacenamiento con una instantánea de un ciclo
  15. 15
    RepasoDetermina el rendimiento a partir de la secuencia
4

Sigue el valor más reciente por un cauce con paradas

17 pasos
Identifica las instrucciones productoras, selecciona fuentes de adelantamiento, inserta una burbuja por carga y uso y comprueba un movimiento de planificación.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónEncuentra dónde existe el valor necesario
  2. 2
    ExplicaciónDistingue los conflictos por su causa
  3. 3
    EjemploIdentifica la instrucción productora para cada lectura
  4. 4
    Desafío¿La reutilización de registros crea un riesgo de hardware?
  5. 5
    ExplicaciónEntrega un resultado de la ALU antes de escribirlo en el registro
  6. 6
    ConsejoComprueba cada coincidencia para el adelantamiento
  7. 7
    EjemploResuelve dos escrituras coincidentes
  8. 8
    DesafíoAdelanta dos operandos de forma independiente
  9. 9
    ConexiónConserva la ruta separada de datos de almacenamiento
  10. 10
    ExplicaciónObserva el límite temporal del adelantamiento
  11. 11
    ExplicaciónDetén la instrucción consumidora e inserta una burbuja
  12. 12
    EjemploSigue la espera durante tres ciclos
  13. 13
    ConsejoHaz que el detector lea las fuentes reales
  14. 14
    EjemploMueve trabajo útil al intervalo
  15. 15
    DesafíoComprueba el movimiento antes de contar la ganancia
  16. 16
    DesafíoCombina la burbuja con el adelantamiento posterior
  17. 17
    RepasoElige la ayuda según el momento de producción
5

Recupera el flujo de instrucciones y mide el coste

19 pasos
Sigue un salto tomado, compara estados de predicción y combina tasas de riesgos con el periodo de reloj para estimar el tiempo de ejecución.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónMantén el trabajo útil en el camino correcto
  2. 2
    ExplicaciónCuenta las posiciones de búsqueda posteriores
  3. 3
    EjemploSigue un salto tomado con predicción de salto no tomado
  4. 4
    ConsejoDescarta trabajo sin ejecutar una instrucción ilegal
  5. 5
    ExplicaciónIntercambia resolución anticipada por operandos anticipados
  6. 6
    DesafíoProtege el estado después de una predicción incorrecta
  7. 7
    ConexiónConserva el límite de excepción
  8. 8
    ExplicaciónUsa el historial para predecir la dirección
  9. 9
    ExplicaciónDeja que dos bits mantengan la confianza
  10. 10
    EjemploSigue la predicción antes de la actualización
  11. 11
    DesafíoComprueba un par de resultados contrarios
  12. 12
    ExplicaciónDistingue la dirección del destino
  13. 13
    Idea claveReconoce la interferencia y los límites de los patrones
  14. 14
    EjemploConvierte tasas condicionales en coste por instrucción
  15. 15
    EjemploIncluye la duración de un ciclo
  16. 16
    EjemploCompara estrategias de predicción
  17. 17
    DesafíoRecupera la fracción de saltos que falta
  18. 18
    DesafíoEvalúa un cauce con más etapas
  19. 19
    RepasoMide la superposición útil después de los costes de recuperación

Ejercicios de Camino de datos y segmentación

50 Preguntas de Práctica en 5 sets

Set 1: Sigue los valores y las señales de control10 Preguntas de Práctica

Pregunta 1 de 10

¿Qué circuito conserva la dirección de la instrucción entre ciclos de reloj?
  1. El generador de inmediatos
  2. El sumador de destino de salto
  3. El contador de programa
  4. El multiplexor de la ALU
Mostrar respuestaOcultar respuesta
Respuesta: C
El contador de programa es un elemento de estado, por lo que conserva la dirección de la instrucción entre ciclos. Un sumador de destino de salto puede calcular una posible dirección siguiente, pero no almacena esa dirección. El PC captura el siguiente valor seleccionado en el flanco activo del reloj.

Pregunta 2 de 10

Para sd x14, 40(x9), ¿de dónde procede el valor que se escribe en memoria?
  1. El valor de x14
  2. El valor de x9
  3. El inmediato 40
  4. La dirección de salida de la ALU
Mostrar respuestaOcultar respuesta
Respuesta: A
El almacenamiento escribe el valor leído de rs2, que es x14. El registro x9 proporciona la base para el cálculo de la dirección y 40 es el desplazamiento en bytes. La ALU suma la base y el desplazamiento para localizar el destino; esa dirección es distinta del valor enviado a memoria.

Pregunta 3 de 10

En PC 640, se ejecuta 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?
  1. x12 = 2064; PC = 644
  2. x12 = −6; PC = 624
  3. x12 = 2080; PC = 644
  4. x12 = −6; PC = 644
Mostrar respuestaOcultar respuesta
Respuesta: D
La ALU forma la dirección 2064 sumando −16 a 2080. La carga escribe el valor de memoria, −6, en x12 y avanza el PC de la instrucción 4 posiciones hasta 644. Escribir 2064 en x12 confundiría la dirección calculada con los datos devueltos desde esa dirección.

Pregunta 4 de 10

Una instrucción beq x16, x17, -24 en la dirección 880 compara dos registros que contienen 11. ¿Qué dirección se busca a continuación?
  1. 860
  2. 856
  3. 884
  4. 904
Mostrar respuestaOcultar respuesta
Respuesta: B
Los valores de registro coinciden, por lo que se toma el salto. Suma el desplazamiento en bytes con signo al PC del salto: 880 − 24 da 856. Partir de PC + 4 daría 860, pero el desplazamiento del salto se mide desde la propia instrucción de salto.

Pregunta 5 de 10

¿Por qué puede ser MemtoReg un valor indiferente para beq?
  1. MemRead es 0, así que se ignoran todos los valores de control.
  2. RegWrite es 0, así que se ignora el valor que selecciona.
  3. Branch es 1, así que se sobrescribe el banco de registros.
  4. Zero es 1, así que ambas entradas de escritura son idénticas.
Mostrar respuestaOcultar respuesta
Respuesta: B
MemtoReg solo selecciona los datos de escritura del registro y RegWrite = 0 impide que un salto condicional escriba un registro. Por tanto, su selección no tiene efecto. MemRead = 0 no hace que todos los controles sean irrelevantes: una habilitación de escritura errónea aún podría cambiar el estado almacenado.

Pregunta 6 de 10

Una instrucción tiene el código de operación de tipo R, funct3 000 y bit 30 = 1. ¿Qué ALUOp y control de la ALU produce este diseño?
  1. ALUOp 01; control de la ALU 0110
  2. ALUOp 10; control de la ALU 0010
  3. ALUOp 00; control de la ALU 0010
  4. ALUOp 10; control de la ALU 0110
Mostrar respuestaOcultar respuesta
Respuesta: D
El código de operación de tipo R da primero ALUOp 10. Después, la decodificación de función usa funct3 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

Un inmediato de 12 bits contiene 1111 1111 0000. ¿Qué valor con signo debe proporcionar ImmGen al camino de datos de 64 bits?
  1. −16
  2. 4080
  3. −15
  4. 240
Mostrar respuestaOcultar respuesta
Respuesta: A
El bit de signo inicial es 1, por lo que este es un inmediato negativo en complemento a dos. Su valor sin signo de 12 bits es 4080; restar 4096 da −16, que la extensión de signo conserva. La extensión con ceros conservaría incorrectamente el valor sin signo 4080.

Pregunta 8 de 10

Una instrucción de un solo ciclo 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?
  1. 77 en la dirección 3048
  2. 3032 en la dirección 3032
  3. 3032 en la dirección 3048
  4. 77 en la dirección 3080
Mostrar respuestaOcultar respuesta
Respuesta: C
La carga defectuosa selecciona su dirección de la ALU, 3032, como dato de escritura, por lo que x15 pasa a valer 3032. El siguiente almacenamiento calcula su propia dirección como 3000 + 48 = 3048 y escribe allí ese valor de x15. Almacenar 77 requeriría que la carga seleccionara correctamente los datos de memoria.

Pregunta 9 de 10

Un salto en PC 1200 compara registros iguales. Su desplazamiento reconstruido en bytes con signo es −32, pero un camino de salto defectuoso desplaza ese desplazamiento completo una vez más a la izquierda antes de sumar. ¿Qué PC siguiente resulta y cuál debería haber sido?
  1. 1168 en lugar de 1136
  2. 1136 en lugar de 1168
  3. 1140 en lugar de 1172
  4. 1264 en lugar de 1232
Mostrar respuestaOcultar respuesta
Respuesta: B
El desplazamiento reconstruido ya incluye el bit inferior cero implícito. El desplazamiento adicional duplica incorrectamente −32 a −64 y produce 1136; el destino correcto es 1200 − 32 = 1168. Sumar desde PC + 4 introduciría un error distinto que el enunciado no describe.

Pregunta 10 de 10

Una persona que diseña añade una operación bit a bit de tipo R admitida bajo el código de operación de tipo R existente. Sus rutas de datos y escrituras de estado coinciden con las de otras operaciones de tipo R y la ALU ya la implementa. ¿Qué cambio de decodificación se necesita?
  1. Ampliar la decodificación de función de la ALU.
  2. Añadir una fila de control de código.
  3. Reutilizar la fila de control de carga.
  4. Establecer MemtoReg para seleccionar memoria.
Mostrar respuestaOcultar respuesta
Respuesta: A
La nueva operación comparte la fila de control principal de tipo R existente, ya que sigue leyendo registros y escribiendo un resultado de la ALU. Sus bits de función necesitan una entrada de decodificación que seleccione la operación existente de la ALU. Una nueva fila de código de operación sería necesaria para una nueva clase de instrucción, que esta ampliación no introduce.
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

¿Qué magnitud de rendimiento cuenta las instrucciones completadas por unidad de tiempo?
  1. Latencia de instrucción
  2. Productividad
  3. Latencia de ciclo de reloj
  4. Profundidad del cauce
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Por qué debe transportarse el campo rd de una carga hasta MEM/WB?
  1. WB debe decodificar el inmediato del siguiente salto.
  2. MEM debe volver a leer el registro base de la carga.
  3. IF debe seleccionar el operando fuente de la carga.
  4. WB debe identificar el destino de esa carga.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

En un cauce de cinco etapas sin riesgos, la instrucción I6 comienza IF en el ciclo 6. ¿En qué ciclo llega a MEM?
  1. 9
  2. 8
  3. 10
  4. 11
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Los retardos de la lógica de las etapas son 180, 120, 210, 160 y 130 ps. El sobrecoste temporal de los registros de segmentación es 15 ps. ¿Qué periodo de reloj se requiere?
  1. 800 ps
  2. 210 ps
  3. 225 ps
  4. 175 ps
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

La instrucción en EX es una operación de tipo R con ALUOp 10. ID/EX no transporta sus bits de función ni un código de operación decodificado previamente. ¿Qué información falta?
  1. La identidad de la operación específica de tipo R de la ALU.
  2. La indicación de que su clase de instrucción es de tipo R.
  3. El número de etapas del cauce de segmentación del diseño.
  4. La dirección de la siguiente instrucción secuencial.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Un cauce de cinco etapas ejecuta ocho instrucciones con tres ciclos de parada insertados y sin pérdidas por saltos. ¿Al final de qué ciclo termina WB la última instrucción?
  1. 11
  2. 15
  3. 12
  4. 19
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un cauce de cinco etapas no tiene adelantamiento de datos y escribe el banco de registros antes de leerlo en cada ciclo. Ejecuta 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?
  1. 2 paradas; 9 ciclos
  2. 0 paradas; 7 ciclos
  3. 1 parada; 9 ciclos
  4. 1 parada; 8 ciclos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Un procesador de un solo ciclo tarda 900 ps por instrucción. Una versión de cinco etapas tiene retardos lógicos de 180, 120, 210, 160 y 130 ps y un sobrecoste de registro de 15 ps. Ambos ejecutan seis instrucciones independientes. ¿Cuál es el factor de aceleración del cauce?
  1. 4,00 veces
  2. 2,57 veces
  3. 2,40 veces
  4. 5,00 veces
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Una carga entra en IF un ciclo antes que una instrucción de tipo R. Si solo la instrucción de tipo R omitiera MEM y entrara en WB directamente desde EX, ¿qué conflicto ocurriría?
  1. Ambas necesitarían la memoria de datos en el mismo ciclo.
  2. La carga llegaría a EX después de la instrucción de tipo R.
  3. La de tipo R leería registros antes de la decodificación.
  4. Ambas instrucciones usarían WB en el mismo ciclo.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Con adelantamiento completo hacia EX, ejecuta 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?
  1. 6
  2. 7
  3. 8
  4. 9
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

¿Qué dependencia conecta sub x11, x2, x3 con la instrucción posterior and x12, x11, x4?
  1. WAR a través de x11
  2. WAW a través de x11
  3. RAW a través de x12
  4. RAW a través de x11
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Tanto EX/MEM como MEM/WB contienen resultados listos para escribir en un mismo registro fuente distinto de cero. ¿Qué resultado debe seleccionar la unidad de adelantamiento de datos?
  1. MEM/WB
  2. EX/MEM
  3. El valor anterior de ID/EX
  4. El valor del generador de inmediatos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Una carga en EX produce x19 y la instrucción en ID lee x19. ¿Qué acciones implementan la parada necesaria por carga y uso?
  1. Mantener PC e IF/ID; poner a cero los controles que entran en ID/EX.
  2. Mantener ID/EX y EX/MEM; avanzar PC e IF/ID.
  3. Borrar IF/ID y mantener todos los registros de segmentación anteriores.
  4. Avanzar PC; duplicar los controles de la carga en ID/EX.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Una instrucción escribiría en x0 y va seguida inmediatamente de add x18, x0, x7. El resultado anterior de la ALU es distinto de cero. ¿Qué valor debe usar la suma como primer operando?
  1. El resultado de la ALU
  2. El número 18
  3. El cero de x0
  4. Datos antiguos de x18
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Con adelantamiento completo, ejecuta 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?
  1. 8; x9 de MEM/WB
  2. 17; x9 de MEM/WB
  3. 17; x9 de EX/MEM
  4. 26; x9 de EX/MEM
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Una instrucción 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?
  1. ForwardB proporciona el resultado de la suma; ALUSrc sigue seleccionando 56.
  2. ALUSrc debe seleccionar x16, por lo que la dirección omite el desplazamiento.
  3. El almacenamiento debe esperar hasta que x16 se haya escrito en el registro.
  4. ForwardA proporciona x16 como base de la dirección en lugar de x20.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Considera 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?
  1. add x7; ld x6; ld x9; sub x10
  2. ld x6; ld x9; add x7; sub x10
  3. ld x6; add x7; sub x10; ld x9
  4. ld x9; sub x10; ld x6; add x7
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

La secuencia es 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?
  1. Crearía un riesgo WAR de hardware sobre x8.
  2. Haría que ambas cargas escribieran el mismo registro.
  3. Cambiaría el desplazamiento en bytes de la primera carga.
  4. Leería la memoria antes de que el almacenamiento la actualizara.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

En add x5, x6, x7; sub x6, x8, x9, ¿qué dependencia de registro limita el intercambio de las instrucciones?
  1. WAR a través de x6
  2. RAW a través de x6
  3. WAW a través de x5
  4. RAW a través de x8
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Con adelantamiento completo, ejecuta 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?
  1. 9
  2. 10
  3. 11
  4. 12
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

¿Por qué una instrucción RISC-V de solo ceros no sirve como nop de reemplazo?
  1. Es una codificación de instrucción ilegal.
  2. Es la codificación de un salto tomado.
  3. Es la codificación de un almacenamiento en la dirección cero.
  4. Es una instrucción legal que escribe un valor distinto de cero en x0.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un contador de saturación de saltos de 2 bits está en el estado 0. ¿Qué estado sigue a otro resultado no tomado?
  1. 1
  2. 2
  3. 0
  4. 3
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Un salto tomado en PC 960 tiene un desplazamiento de −40 bytes. Se busca en el ciclo 1 y se resuelve al final de EX, con predicción de salto no tomado. ¿Qué direcciones se descartan antes de buscar el destino?
  1. 920 y 924
  2. 964 y 968
  3. 960 y 964
  4. 968 y 972
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Un contador de saturación de 2 bits comienza en el estado 2 y observa los resultados no tomado, no tomado, tomado, tomado, no tomado. ¿Cuántas predicciones son incorrectas y cuál es el estado final?
  1. 3 incorrectas; estado final 1
  2. 4 incorrectas; estado final 2
  3. 2 incorrectas; estado final 0
  4. 4 incorrectas; estado final 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

La búsqueda predice que se tomará un salto, pero no hay una dirección de destino disponible hasta la decodificación. ¿Qué estructura adicional puede proporcionar durante IF un destino observado anteriormente?
  1. Un bit del historial de dirección
  2. Una unidad de detección de riesgos
  3. Un búfer de destinos de salto
  4. Un multiplexor de escritura
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Con adelantamiento adecuado hacia ID, 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é?
  1. 1 ciclo; el adelantamiento normal hacia EX llega a tiempo a la comparación.
  2. 2 ciclos; los datos cargados deben llegar a la comparación anticipada en ID.
  3. 0 ciclos; leer registros en ID evita el acceso a memoria.
  4. 3 ciclos; una carga debe terminar un ciclo separado después de WB.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un salto de bucle ejecutado repetidamente tiene cinco resultados tomados seguidos de una salida no tomada por ejecución. Sin interferencia por entradas compartidas y con entrenamiento en régimen estable, ¿cómo se comparan las precisiones de los predictores de uno y dos bits?
  1. Un bit: 4/6; dos bits: 5/6
  2. Un bit: 5/6; dos bits: 5/6
  3. Un bit: 4/6; dos bits: 4/6
  4. Un bit: 5/6; dos bits: 6/6
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Una instrucción ilegal va seguida de un almacenamiento posterior mientras dos instrucciones aritméticas anteriores aún están terminando. ¿Qué estado debe presentar al gestor una excepción precisa?
  1. Ningún resultado anterior presente; almacenamiento posterior ausente.
  2. Ambos resultados anteriores presentes; almacenamiento posterior presente.
  3. Solo almacenamiento posterior presente; resultados anteriores ausentes.
  4. Ambos resultados anteriores presentes; almacenamiento posterior ausente.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un contador de 2 bits comienza en el estado 1 antes de un patrón que alterna estrictamente entre tomado y no tomado. ¿Qué precisión de predicción alcanza durante los primeros seis resultados?
  1. 50%
  2. 0%
  3. 67%
  4. 100%
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Dos saltos comparten un contador de 2 bits inicialmente en el estado 3. El salto A se toma, B no se toma, A se toma y B no se toma. ¿Cuántos fallos ocurren y qué salto los causa?
  1. 2 fallos, ambos en B
  2. 1 fallo, solo en B
  3. 2 fallos, uno en cada salto
  4. 3 fallos, dos en B
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

Para el mismo número de instrucciones, ¿qué magnitud permite comparar el tiempo de ejecución por instrucción entre procesadores con distintos relojes?
  1. CPI ÷ periodo de reloj
  2. CPI × periodo de reloj
  3. Frecuencia de reloj × CPI
  4. Número de instrucciones ÷ CPI
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

En una secuencia larga de instrucciones, el 30 % son cargas y el 20 % de estas tiene una instrucción consumidora inmediata que necesita una parada. ¿Cuál es la contribución de carga y uso al CPI?
  1. 0,06
  2. 0,20
  3. 0,30
  4. 0,50
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Una secuencia larga tiene un 30 % de cargas, con instrucciones consumidoras inmediatas después del 20 % de las cargas, y un 20 % de saltos, de los que el 15 % se predice incorrectamente. Cada suceso de carga y uso cuesta un ciclo y cada fallo cuesta tres. Los costes no se solapan. A 2 GHz, ¿cuánto tardan 400 millones de instrucciones?
  1. 0,212 s
  2. 0,290 s
  3. 0,460 s
  4. 0,230 s
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Dos procesadores ejecutan el mismo programa largo. A tiene un periodo de 300 ps, un coste de carga y uso de 0,08 ciclos/instrucción, una fracción de saltos de 0,20, un 10 % de errores de salto y una recuperación de dos ciclos. B tiene un periodo de 240 ps, el mismo coste de carga y uso y la misma fracción de saltos, un 20 % de errores de salto y una recuperación de cuatro ciclos. Los costes no se solapan. ¿Cuál es más rápido y aproximadamente cuánto?
  1. A, aproximadamente 1,13 veces
  2. B, aproximadamente 1,25 veces
  3. B, aproximadamente 1,13 veces
  4. A, aproximadamente 1,11 veces
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Un diseño de un solo ciclo usa 800 ps por instrucción. Una versión de cinco etapas usa 200 ps por ciclo y ejecuta una secuencia corta con dos paradas y sin pérdidas por saltos. ¿Cuál es el menor número positivo de instrucciones para el que el cauce es estrictamente más rápido?
  1. 3 instrucciones
  2. 2 instrucciones
  3. 4 instrucciones
  4. 6 instrucciones
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Una secuencia larga tiene un 25 % de saltos y un coste de parada no relacionado de 0,05 ciclos/instrucción. Un nuevo predictor aumenta la precisión de saltos del 80 % al 92 %, con la misma recuperación de tres ciclos y el mismo periodo de reloj. ¿Cuál es el factor de aceleración de la ejecución?
  1. 1,120 veces
  2. 1,136 veces
  3. 1,081 veces
  4. 1,250 veces
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un cambio válido de planificación elimina dos paradas por carga y uso de una secuencia de seis instrucciones en cinco etapas sin otras pérdidas. ¿Cómo cambia el tiempo total con un periodo de 250 ps?
  1. 2000 ps pasan a 1500 ps
  2. 2500 ps pasan a 2000 ps
  3. 3500 ps pasan a 3000 ps
  4. 3000 ps pasan a 2500 ps
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Dos diseños ejecutan una secuencia larga con muchos saltos, un 30 % de saltos y ningún otro riesgo. La predicción de salto no tomado tiene una precisión del 60 %. X resuelve al final de EX con un periodo de 200 ps; Y resuelve al final de ID con un periodo de 220 ps y sin paradas por operandos. ¿Cuál tiene un menor tiempo por instrucción?
  1. X con 248 ps
  2. Y con 246,4 ps
  3. X con 224 ps
  4. Y con 272,8 ps
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un procesador de emisión múltiple mantiene un IPC de 2. ¿Qué CPI medio corresponde a esa tasa?
  1. 1
  2. 2
  3. 0,5
  4. 4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un procesador de cinco etapas tiene un coste base de carga y uso de 0,09 ciclos/instrucción y un 18 % de saltos. Su CPI medido a largo plazo es 1,18. Todos los ciclos perdidos restantes se deben a fallos de predicción de salto con una recuperación de tres ciclos. ¿Qué precisión de predicción de saltos se deduce?
  1. Aproximadamente 95,0 %
  2. Aproximadamente 66,7 %
  3. Aproximadamente 50,0 %
  4. Aproximadamente 83,3 %
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

¿Te atascas con una pregunta tuya? Ayuda con Tareas

Términos Clave

72 Términos Clave, cada uno con su definición

A

Adelantamiento de datos
El adelantamiento de datos dirige un valor producido desde un registro de segmentación directamente a la entrada de una instrucción posterior antes de escribirlo en el registro arquitectónico.
Una resta adyacente puede recibir el nuevo resultado de una suma desde EX/MEM sin detenerse.
ALUOp
ALUOp es una señal de clase de instrucción de dos bits que indica al control de la ALU si debe sumar, restar o decodificar los campos de función de tipo R.
ALUOp 00 selecciona la suma para obtener la dirección aunque el funct3 de una carga describa el tamaño de su acceso a memoria.
ALUSrc
ALUSrc es la señal de control que selecciona el segundo operando de la ALU: elige un valor de registro con 0 o un inmediato con 1 en este diseño.
Un almacenamiento establece ALUSrc en 1 mientras su valor de rs2 viaja por separado hacia la memoria.
Anulación de instrucciones del cauce
Una anulación de instrucciones del cauce invalida trabajo del cauce para que las instrucciones del camino equivocado o descartadas por otro motivo no puedan cambiar el estado arquitectónico ni provocar excepciones.
Un almacenamiento anulado no puede realizar su escritura en memoria después de que un salto tomado redirija la búsqueda.

B

Banco de registros
Un banco de registros es el conjunto de registros arquitectónicos, con puertos de lectura y escritura que acceden a los registros por sus números.
Los dos puertos de lectura pueden proporcionar los valores de x6 y x7 a una instrucción aritmética.
Búfer de destinos de salto
Un búfer de destinos de salto almacena direcciones de destino y proporciona un destino predicho durante la búsqueda antes de que se decodifique el salto.
Una predicción de dirección tomada puede usar un acierto del BTB para buscar desde el destino predicho en el siguiente ciclo.
Burbuja
Una burbuja es una posición inactiva del cauce que avanza sin realizar el trabajo de una instrucción que cambia el estado.
Una parada por carga y uso coloca una burbuja en EX mientras la carga avanza por MEM.

C

Camino crítico
Un camino crítico es el camino combinacional necesario más largo entre límites de estado y limita cuánto puede acortarse el periodo de reloj.
En un diseño de un solo ciclo, el camino de carga determina el reloj incluso cuando se ejecuta una suma más corta.
Camino de datos
El camino de datos es el hardware que conserva y transforma valores durante la búsqueda de instrucciones, el acceso a registros, los cálculos y el acceso a memoria.
Una instrucción aritmética envía dos valores de registro por el camino de datos y devuelve un resultado de la ALU.
Campo de función
Un campo de función proporciona bits de instrucción que distinguen operaciones que comparten un código de operación, como funct3 y funct7 para instrucciones de tipo R.
Para add y sub con funct3 000, el bit 30 de la instrucción selecciona qué operación aritmética se ejecuta.
Contador de programa
El contador de programa es un registro de estado que contiene la dirección usada para buscar la instrucción actual en la memoria de instrucciones.
Después de una instrucción normal de 4 bytes en la dirección 720, el contador de programa avanza a 724.
Contador de saturación
Un contador de saturación cambia hacia su límite superior o inferior sin volver al extremo opuesto, lo que proporciona una confianza de predicción persistente.
Un resultado tomado deja un contador de 2 bits en 3 cuando ya está fuertemente tomado.
Control cableado
El control cableado es una implementación con lógica combinacional que traduce los bits de instrucción en selecciones del camino de datos y habilitaciones de escritura.
El código de operación de carga produce una fila de control que selecciona un inmediato y habilita la lectura de memoria y la escritura de registro.
Control de la ALU
El control de la ALU es el código de cuatro bits que selecciona la operación aritmética o bit a bit específica realizada por la ALU en esta implementación.
El código 0110 selecciona la resta, mientras que el código relacionado 0010 selecciona la suma.
CPI efectivo
El CPI efectivo es el promedio de ciclos por instrucción que incluye los ciclos adicionales perdidos por riesgos y recuperación de saltos.
Una secuencia larga de emisión simple con 0,12 ciclos perdidos por instrucción tiene un CPI efectivo de 1,12.

D

Decodificación en dos niveles
La decodificación en dos niveles separa el control principal de la clase de instrucción del decodificador más pequeño que selecciona la operación específica de la ALU.
El control principal asigna ALUOp 10 a add y sub; después, la decodificación de los bits de función los distingue.
Dependencia de escritura después de escritura
Una dependencia de escritura después de escritura ocurre cuando dos instrucciones escriben el mismo registro, lo que hace que el orden de sus escrituras en el programa sea significativo.
Intercambiar dos escrituras en x12 puede cambiar el valor que observan las instrucciones posteriores.
Dependencia de escritura después de lectura
Una dependencia de escritura después de lectura ocurre cuando una instrucción posterior escribe un registro que una instrucción anterior debe leer primero.
Mover la instrucción que escribe después por encima de la que lee puede cambiar el programa aunque el cauce ejecute las instrucciones en orden.
Dependencia de lectura después de escritura
Una dependencia de lectura después de escritura vincula una lectura posterior de registro con una escritura anterior que produce el valor requerido por esa lectura.
En una suma seguida de una resta que lee su resultado, la resta depende de la suma.
Dependencia de memoria
Una dependencia de memoria vincula accesos cuyo orden importa porque pueden acceder a bytes que se solapan y al menos uno de los accesos los escribe.
Una carga no puede moverse antes de un almacenamiento que pueda proporcionar los bytes que debe leer.
Destino del salto
Un destino del salto es la dirección de instrucción a la que se llega cuando se toma un salto, calculada a partir del PC del salto y el desplazamiento en bytes con signo.
Un salto tomado en la dirección 600 con desplazamiento −20 transfiere la búsqueda de instrucciones a la dirección 580.
Diagrama de segmentación de varios ciclos
Un diagrama de segmentación de varios ciclos muestra instrucciones como filas y ciclos como columnas, indicando la etapa de cada instrucción a lo largo del tiempo.
Leer la columna del ciclo 5 puede mostrar una instrucción en cada una de las cinco etapas del cauce.
Dirección efectiva
Una dirección efectiva es la dirección de memoria calculada para una carga o un almacenamiento al sumar el valor del registro base y el desplazamiento en bytes con signo.
Para ld x4, 24(x8) con x8 = 2000, la dirección efectiva es 2024.

E

Elemento combinacional
Un elemento combinacional es un circuito cuya salida depende de sus entradas actuales sin conservar un valor entre ciclos de reloj.
Un sumador vuelve a calcular su salida cuando cambia una entrada, antes de que un registro capture la suma.
Elemento de estado
Un elemento de estado es un componente de hardware que conserva un valor entre ciclos y lo actualiza mediante una escritura controlada.
El PC conserva la dirección de la instrucción actual mientras se calcula la siguiente dirección.
Emisión múltiple
La emisión múltiple inicia más de una instrucción en un ciclo de reloj y usa elecciones del compilador o del hardware para encontrar trabajo que pueda superponerse.
La emisión múltiple estática depende de grupos del compilador; la emisión dinámica deja que el hardware seleccione las instrucciones.
Escritura del resultado en el registro
La escritura del resultado en el registro es la transferencia del resultado seleccionado de una instrucción a su registro destino cuando la escritura de registro está habilitada.
Una carga escribe el valor de memoria en el registro, mientras que una suma escribe su resultado de la ALU.
EX/MEM
EX/MEM es el registro de segmentación que transporta el resultado de ejecución, los datos de almacenamiento, el número de destino y los controles pendientes de memoria y de escritura en el registro.
Un resultado aritmético en EX/MEM puede adelantarse a las entradas de EX de la siguiente instrucción.
Excepción precisa
Una excepción precisa deja completas todas las instrucciones anteriores y excluye los efectos normales de la instrucción causante y todos los efectos posteriores.
El gestor recibe el PC guardado de la instrucción causante y la causa junto con el límite de estado en el orden del programa.
Extensión de signo
La extensión de signo amplía un valor binario con signo copiando su bit de signo en las posiciones superiores añadidas, conservando su valor.
Un desplazamiento de carga negativo de 12 bits sigue siendo negativo después de que ImmGen lo extienda al ancho de registro de RV64.

F

Flanco de reloj
Un flanco de reloj es la transición activa del reloj en la que un elemento de estado activado por flanco captura un siguiente valor habilitado.
En el flanco final de una suma, rd recibe la suma y el PC recibe su siguiente dirección.
ForwardA
ForwardA controla el multiplexor de adelantamiento de rs1: 00 elige ID/EX, 10 elige EX/MEM y 01 elige MEM/WB en este diseño.
Una actualización reciente del registro base de una carga puede adelantarse para el cálculo de su dirección.
ForwardB
ForwardB controla el multiplexor de adelantamiento de rs2, que proporciona un operando de registro y alimenta el camino de datos de almacenamiento antes de la selección de ALUSrc.
Un almacenamiento puede recibir sus datos por adelantamiento aunque ALUSrc seleccione un inmediato para calcular la dirección.

G

Generador de inmediatos
Un generador de inmediatos reconstruye los bits del inmediato de un formato de instrucción y extiende el valor con signo hasta el ancho del registro.
Para un almacenamiento, ImmGen combina bits de dos partes de la instrucción para recuperar su desplazamiento.

I

ID/EX
ID/EX es el registro que transporta a ejecución los operandos decodificados, números de registro, inmediato, información de función y controles.
EX combina el ALUOp transportado con los bits de función transportados para seleccionar una operación de tipo R.
IF/ID
IF/ID es el registro de segmentación entre la búsqueda y la decodificación de instrucciones, que conserva la instrucción buscada y su PC asociado.
Durante una parada por carga y uso, mantener IF/ID permite volver a decodificar la instrucción consumidora que espera.
Indicador de cero
El indicador de cero es una salida de la ALU que vale 1 cuando el resultado calculado es cero, lo que permite usar la resta para comprobar la igualdad de registros.
Los operandos iguales hacen que una resta de salto produzca Zero = 1, por lo que Branch puede seleccionar el destino.
Interferencia por entradas compartidas
La interferencia por entradas compartidas ocurre cuando distintas direcciones de salto seleccionan la misma entrada de la tabla de predicción y sus actualizaciones interfieren entre sí.
Un salto que se toma la mayoría de las veces puede perturbar la entrada compartida que usa otro que no se toma la mayoría de las veces.
IPC
El IPC, o instrucciones por ciclo, mide el promedio de instrucciones completadas por ciclo de reloj y es el recíproco del CPI medio.
La emisión múltiple puede completar suficiente trabajo independiente para lograr un IPC mayor que uno.

L

Latencia
La latencia es el tiempo transcurrido para que una instrucción pase desde su entrada hasta su finalización, incluidas todas las etapas que atraviesa.
Cinco intervalos de etapa de 270 ps dan a una instrucción una latencia de segmentación de 1350 ps.
Llenado del cauce de segmentación
El llenado del cauce de segmentación es el intervalo inicial durante el que entran instrucciones sucesivas y aún no todas las etapas contienen trabajo útil.
La primera instrucción llega a WB en el ciclo 5, después de que se hayan llenado las etapas iniciales.

M

MEM/WB
MEM/WB es el registro de segmentación que contiene datos de memoria, el resultado de la ALU, el número de destino y los controles necesarios para escribir en el registro.
Una instrucción consumidora de una carga que se ha detenido puede tomar su operando del valor cargado contenido en MEM/WB.
MemRead
MemRead es la señal de control que solicita un acceso de lectura a la memoria de datos, lo que permite a una carga recuperar datos de su dirección efectiva.
La búsqueda en la memoria de instrucciones es independiente del acceso a la memoria de datos controlado por MemRead.
MemtoReg
MemtoReg selecciona el valor enviado para escribir en el registro: el resultado de la ALU con 0 o la salida de la memoria de datos con 1 en este diseño.
Una carga con MemtoReg establecido por error en 0 escribiría su dirección en lugar de los datos cargados.
MemWrite
MemWrite es la señal de control que habilita una escritura en la memoria de datos, de modo que el valor de almacenamiento se guarda en la dirección efectiva en el flanco de reloj.
Una instrucción aritmética debe mantener MemWrite en 0 para impedir cambios involuntarios en memoria.
Multiplexor
Un multiplexor es un circuito que transmite una de varias entradas de datos a una salida según una señal de selección.
El multiplexor de escritura en el registro selecciona datos de memoria para una carga y el resultado de la ALU para una operación aritmética.

P

Palabra doble
Una palabra doble es una cantidad de datos de 64 bits que ocupa 8 bytes y se transfiere mediante las instrucciones RV64 ld y sd.
Las palabras dobles en direcciones alineadas consecutivas podrían comenzar en 2048, 2056 y 2064.
Parada del cauce
Una parada del cauce retrasa durante un ciclo el trabajo seleccionado para que una instrucción pueda esperar un operando u otra condición necesaria.
Durante una parada por carga y uso, el trabajo posterior espera mientras la carga avanza para producir el valor.
PCSrc
PCSrc selecciona el siguiente PC; para el diseño de salto por igualdad de un solo ciclo es el AND lógico de Branch y el indicador Zero de la ALU.
Una suma que produce cero sigue tomando el camino secuencial porque su señal Branch es 0.
Penalización por salto
Una penalización por salto es el coste en ciclos perdidos por esperar un salto o recuperarse de él, determinado por el momento en que puede reanudarse la búsqueda correcta.
En un cauce de cinco etapas, la resolución al final de EX pierde dos posiciones de búsqueda ante una predicción incorrecta.
Pila de direcciones de retorno
Una pila de direcciones de retorno mantiene las direcciones de retorno de procedimientos para que la búsqueda pueda predecir el destino de un retorno antes de que la ejecución normal lo determine.
Las llamadas anidadas emparejan naturalmente los destinos de retorno con el orden inverso de las llamadas.
Planificación de instrucciones
La planificación de instrucciones reordena instrucciones conservando los resultados del programa y sitúa trabajo independiente en intervalos que de otro modo causarían paradas.
Mover una carga independiente entre otra carga y su instrucción consumidora puede eliminar un retraso por carga y uso.
Predicción dinámica de saltos
La predicción dinámica de saltos usa los resultados de saltos observados durante la ejecución para actualizar el estado utilizado en futuras predicciones de dirección.
Los resultados tomados repetidos de un bucle entrenan al predictor antes de la salida poco habitual no tomada.
Predicción estática
La predicción estática predice la dirección de un salto mediante una regla fija que no aprende de los resultados durante la ejecución del programa.
La regla de salto hacia atrás tomado y salto hacia delante no tomado usa la dirección del desplazamiento del salto como pista.
Predictor con correlación
Un predictor con correlación usa resultados de saltos recientes, además del historial local de un salto, para ayudar a predecir una dirección.
Una decisión puede ser más fácil de predecir cuando el resultado de un salto anterior revela qué camino se tomó.
Predictor de torneo
Un predictor de torneo elige entre mecanismos de predicción y usa el éxito observado de cada uno para decidir en cuál confiar para un salto.
Un predictor puede adaptarse a un patrón de salto mientras otro funciona mejor con un patrón diferente.
Procesador superescalar
Un procesador superescalar usa hardware para seleccionar y emitir varias instrucciones en un ciclo, sujeto a los recursos y dependencias disponibles.
Los fallos de predicción de saltos y las cadenas de valores dependientes limitan cuánto trabajo paralelo de instrucciones sigue siendo útil.
Productividad
La productividad es el número de instrucciones completadas por unidad de tiempo, que aumenta cuando se superpone trabajo útil de instrucciones.
Un cauce lleno y sin riesgos puede completar una instrucción en cada ciclo después de su llenado inicial.

R

Registro de segmentación
Un registro de segmentación captura los datos y el control que una instrucción necesita después de una etapa, manteniéndolos disponibles durante el siguiente ciclo.
ID/EX conserva los operandos de una instrucción decodificada mientras IF/ID recibe una instrucción posterior.
RegWrite
RegWrite es la señal de habilitación que permite almacenar el resultado seleccionado de una instrucción en el banco de registros en el flanco de reloj.
Un almacenamiento mantiene RegWrite en 0, aunque lee valores de registro para su dirección y sus datos.
Riesgo de carga y uso
Un riesgo de carga y uso ocurre cuando una instrucción inmediatamente posterior a una carga necesita su resultado antes de que la carga termine de leer la memoria de datos.
La instrucción consumidora espera un ciclo cuando hay adelantamiento hacia EX y después toma los datos de MEM/WB.
Riesgo de control
Un riesgo de control surge cuando la búsqueda necesita la dirección de la siguiente instrucción antes de que un salto u otra transferencia de control la haya determinado.
La predicción de salto no tomado continúa la búsqueda secuencial mientras la comparación del salto aún está en una etapa posterior.
Riesgo de datos
Un riesgo de datos ocurre cuando una instrucción llega a un punto que necesita un valor antes de que una instrucción anterior lo haya puesto a disposición.
Sin adelantamiento de datos, una instrucción consumidora en ID puede leer un valor desactualizado antes de que su productora llegue a WB.
Riesgo estructural
Un riesgo estructural ocurre cuando varias instrucciones necesitan el mismo recurso limitado de hardware durante el mismo ciclo de reloj.
Una memoria de un solo puerto no puede atender simultáneamente el acceso MEM de una carga y la búsqueda de otra instrucción.

S

Segmentación
La segmentación superpone instrucciones al dividir su ejecución en etapas, lo que permite que distintas instrucciones ocupen distintas etapas a la vez.
Mientras una instrucción accede a la memoria de datos, una instrucción posterior puede calcular en la ALU.
Sobrecoste temporal de los registros de segmentación
El sobrecoste temporal de los registros de segmentación es el coste temporal de almacenar y entregar los valores de las etapas, añadido al retardo lógico de la etapa más lenta.
Una etapa limitante de 250 ps con un sobrecoste de registro de 20 ps requiere un periodo de 270 ps.

T

Tabla de historial de saltos
Una tabla de historial de saltos almacena pequeñas entradas de estado de predicción seleccionadas mediante bits de la dirección del salto, lo que permite que el comportamiento reciente guíe la búsqueda.
Dos direcciones de salto pueden seleccionar una misma entrada, por lo que el estado almacenado no tiene por qué pertenecer a un solo salto.
Tiempo de ejecución
El tiempo de ejecución es el tiempo transcurrido de un programa calculado a partir del número de instrucciones ejecutadas, el CPI medio y el periodo de reloj del procesador.
El mismo número de instrucciones puede terminar antes con un CPI mayor si el periodo de reloj es lo suficientemente corto.

U

Unidad de adelantamiento de datos
Una unidad de adelantamiento de datos compara los números de fuente y destino y comprueba la habilitación de escritura para seleccionar la fuente correcta del operando disponible.
Excluye rd = x0 porque un resultado calculado no puede cambiar el valor cero de ese registro.
Unidad de detección de riesgos
Una unidad de detección de riesgos identifica los casos que necesitan una parada, incluida una carga en EX cuyo destino lee la instrucción en ID.
Una comprobación precisa del uso de las fuentes evita tratar los bits de inmediato de tipo I como un segundo registro fuente.

V

Vaciado del cauce de segmentación
El vaciado del cauce de segmentación es el intervalo final en el que terminan las instrucciones buscadas anteriormente después de que entre la última instrucción de la secuencia.
La última instrucción aún necesita ID, EX, MEM y WB después de su ciclo de búsqueda.
Valor indiferente
Un valor indiferente es un valor de la tabla de control que puede ser 0 o 1 porque el ajuste seleccionado no puede afectar al comportamiento de la instrucción.
MemtoReg puede ser un valor indiferente para beq porque no se escribe ningún registro.

Sobre esta unidad

Por StudeliInformar de un error

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.

Comenzar