---
# System prepended metadata

title: Week 7- Question

---

## Week-7 Questions

### Topic : Superscalar
#### Question : The example shows RAW dependency. Explain the software and hardware techniques to solve the problem.
![image](https://hackmd.io/_uploads/r182hT_Tkl.png)

**RAW (Read After Write):**
* A type of data hazard that occurs when an instruction needs to read a register or memory location before a previous instruction has finished writing to it.
* During pipeline execution, if the previous instruction has not yet completed the write operation, the subsequent instruction will read incorrect or incomplete data, leading to a hazard.

**Solving this issue:**
1. Software techniques: **Reordering the code sequence by inserting nop**
2. Hardware techniques: **Data forwarding** 
---

#### Question : Identify the load-to-use harzards? And reorder the instruction to eliminate it.
![image](https://hackmd.io/_uploads/SkWZ87FXlx.png)
1. Load-use hazard
* r1: `add r3, r1, r2` after `lw r1, b`
* r2: `add r3, r1, r2` after `lw r2, e`
* r4: `add r5, r1, r4` after `lw r4, f`

2. Reorder the instructions
Assume with hazard detection units and forwarding units. Previous `load` instructions can forward from `MEM` stage to the `EX` stage in the later instructions.
```RISCV=
lw r1, b
lw r2, e
lw r4, f
add r3, r1, r2
add r5, r1, r4
sw r3, a
sw r5, c
```
---
#### Question : Identify RAW, WAW, WAR dependency. Use Register renaming to eliminate WAW, WAR dependency
![image](https://hackmd.io/_uploads/ryd4dmtXle.png)

1. Data dependencies
* RAW
    * r1: `sub r3, r2, r1` after `add r1, r2, r3`
    * r1: `div r2, r1, r3` after `add r1, r2, r3`
    * r1: `div r2, r1, r3` after `mul r1, r2, r3`
    * r3: `mul r1, r2, r3` after `sub r3, r2, r1`
    * r3: `div r2, r1, r3` after `sub r3, r2, r1`
* WAW
    * r1: `mul r1, r2, r3` after `add r1, r2, r3`
* WAR
    * r3: `sub r3, r2, r1` after `add r1, r2, r3`
    * r1: `mul r1, r2, r3` after `sub r3, r2, r1` 
    * r2: `div r2, r1, r3` after `mul r1, r2, r3`

2. Register renaming

| Instruction | Original           | Renamed Instruction | Register Renaming                |
| ----------- | ------------------ | ------------------- | -------------------------------- |
| 1           | `add r1, r2, r3`   | `add r14, r2, r3`   | r1 → 14                          |
| 2           | `sub r3, r2, r1`   | `sub r15, r2, r14`  | r3 → 15, r1 → 14 (read)          |
| 3           | `mul r1, r2, r3`   | `mul r16, r2, r15`  | r1 → 16, r3 → 15 (read)          |
| 4           | `div r2, r1, r3` | `div r17, r16, r15` | r2 → 17, r1 → 16, r3 → 15 (read) |

| Instruction      | r1 | r2 | r3 |
| ---------------- | -- | -- | -- |
| Initial Mapping  | 11 | 12 | 13 |
| `add r1, r2, r3` | 14 | 12 | 13 |
| `sub r3, r2, r1` | 14 | 12 | 15 |
| `mul r1, r2, r3` | 16 | 12 | 15 |
| `div r2, r1, r3` | 16 | 17 | 15 |

