Contamos con tu ayuda para compartir nuestros enunciados en referencia a las ciencias de la computación.
Solución:
Creo que tienes tu terminología confundida.
El procesador inyecta una parada en la canalización para resolver los riesgos de datos (situaciones en las que los datos necesarios para procesar una instrucción aún no están disponibles). NOP
es solo una instrucción sin efectos secundarios.
Establos
Recuerde la canalización RISC clásica de 5 etapas de canalización:
- IF: obtención de instrucciones (obtiene la siguiente instrucción de la memoria)
- ID – Decodificación de instrucción (Averigüe qué instrucción es esta y cuáles son los operandos)
- EX – Ejecutar (Realizar la acción)
- MEM – Acceso a la memoria (almacenar o leer de la memoria)
- WB – Write back (escribe un resultado de nuevo en un registro)
Considere el fragmento de código:
add $t0, $t1, $t1
sub $t2, $t0, $t0
A partir de aquí, es obvio que la segunda instrucción se basa en el resultado de la primera. Este es un riesgo de datos: Leer después de escribir (RAW); a true dependencia.
los sub
requiere el valor de la add
durante su fase EX, pero el add
solo estará en su fase MEM – el valor no estará disponible hasta la fase WB:
+------------------------------+----+----+----+-----+----+---+---+---+---+
| | CPU Cycles |
+------------------------------+----+----+----+-----+----+---+---+---+---+
| Instruction | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
+------------------------------------------------------------------------+
| 0 | add $t0, $t1, $t1 | IF | ID | EX | MEM | WB | | | | |
| 1 | sub $t2, $t0, $t0 | | IF | ID | EX | | | | | |
+---------+--------------------+----+----+----+-----+----+---+---+---+---+
Una solución a este problema es que el procesador inserte paradas o burbuja la canalización hasta que los datos estén disponibles.
+------------------------------+----+----+----+-----+----+----+-----+---+----+
| | CPU Cycles |
+------------------------------+----+----+----+-----+----+----+-----+----+---+
| Instruction | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
+----------------------------------------------------------------------------+
| 0 | add $t0, $t1, $t1 | IF | ID | EX | MEM | WB | | | | |
| 1 | sub $t2, $t0, $t0 | | IF | ID | S | S | EX | MEM | WB | |
+----------+-------------------+----+----+----+-----+----+---+---+---+-------+
NOP
A NOP
es una instrucción que no hace nada (no tiene efectos secundarios). El ensamblador MIPS a menudo admite un nop
instrucción pero en MIPS esto es equivalente a sll $zero $zero 0
.
Esta instrucción ocupará las 5 etapas de la canalización. Se usa más comúnmente para llenar la ranura de retardo de bifurcación de saltos o bifurcaciones cuando no hay nada más útil que se pueda hacer en esa ranura.
j label
nop # nothing useful to put here
Si está utilizando un simulador MIPS, es posible que deba habilitar la simulación de intervalos de demora de bifurcación para ver esto. (Por ejemplo, en spim
utilizar el -delayed_branches
argumento)
Sección de Reseñas y Valoraciones
Si conservas alguna desconfianza y disposición de progresar nuestro crónica puedes escribir un informe y con placer lo observaremos.