Skip to content

Instantly share code, notes, and snippets.

@thinkphp
Created January 19, 2025 03:29
Show Gist options
  • Save thinkphp/685bcea0d1dd500300cecb5cd624dceb to your computer and use it in GitHub Desktop.
Save thinkphp/685bcea0d1dd500300cecb5cd624dceb to your computer and use it in GitHub Desktop.
Exercitiul 7 punctul c) Pipeline IF ID LD EX WB
Folosind timpul pipiline de 130 ps determinat anterior.
Instrucțiunile sunt:
- ADD R3, R2, R1 (R3 ← R2 + R1)
- SUB R4, R1, R3 (R4 ← R1 - R3)
Identificarea dependenței:
Avem o dependență de tip RAW (Read After Write) deoarece:
- Prima instrucțiune (ADD) scrie în R3
- A doua instructiune (SUB) citește R3
Execuția în pipeline fără forwarding:
```
Cicluri 1 2 3 4 5 6 7
ADD: IF ID LD EX WB
SUB: IF ID stall LD EX WB
```
Calculul timpului:
- Timpul unei instrucțiuni în pipeline: 130 ps
- Pentru ambele instrucțiuni fără stall: 6 × 130 ps = 780 ps
- Cu un stall: 7 × 130 ps = 910 ps
Diferenta este: 910 ps - 780 ps = 130 ps (un ciclu)
In practica solutia => Forwarding:
- Rezultatul instructiunii ADD poate fi transmis direct din etapa EX către instrucțiunea SUB
- Eliminam stall-ul si timpul revine la 780 ps
Stall-ul apare pentru că:
Instrucțiunea SUB are nevoie să citească valoarea din R3
Dar R3 nu este inca disponibil deoarece ADD nu a terminat de calculat si scris aceasta valoare
Astfel, SUB trebuie să "stea pe loc" (stall) un ciclu pana cand rezultatul din ADD devine disponibil
Raspunsul punctul c):
- Problema: dependenta RAW între instructiuni
- Solutie: tehnica de forwarding
- Modificarea timpului fata de execuția normala pipeline:
* Cu forwarding: fara modificare (780 ps)
* Fara forwarding: creste cu 130 ps (un ciclu de stall)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment