eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand...

32
PRÀCTICA 1 SIMULADORS D’ARQUITECTURES 1. INTRODUCCIÓ AL SIMULADOR WINDLX WinDLX (Windows De LuXe simulator) és un simulador del pipeline del procesador DLX. És un software que permet el processament de programes escrits en ensamblador de DLX, mostrant la informació més important de la CPU (estat del pipeline, banc de registres, entrada/sortida, memoria, estadístiques…) També és posible modificar la seva estructura i els temps de latència del pipeline de la CPU, com també el tamany de la memoria. 2. ESTRUCTURA DEL PIPELINE DE DLX Abans de parlar del simulador en sí, s’ha cregut oportú de parlar una mica de l’arquitectura del processador DLX. D’aquesta manera facilitarem la comprensió de les utilitats i opcions del simulador. L’estructura del pipeline del processador DLX està compost per 5 etapes. 1

Transcript of eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand...

Page 1: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

PRÀCTICA 1

SIMULADORS D’ARQUITECTURES

1. INTRODUCCIÓ AL SIMULADOR WINDLX

WinDLX (Windows De LuXe simulator) és un simulador del pipeline del procesador DLX.

És un software que permet el processament de programes escrits en ensamblador de DLX, mostrant la informació més important de la CPU (estat del pipeline, banc de registres, entrada/sortida, memoria, estadístiques…) També és posible modificar la seva estructura i els temps de latència del pipeline de la CPU, com també el tamany de la memoria.

2. ESTRUCTURA DEL PIPELINE DE DLX

Abans de parlar del simulador en sí, s’ha cregut oportú de parlar una mica de l’arquitectura del processador DLX. D’aquesta manera facilitarem la comprensió de les utilitats i opcions del simulador.

L’estructura del pipeline del processador DLX està compost per 5 etapes.

1

Page 2: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

2.1 Etapa IF (Instruction Fetch)

Es llegeix una instrucció de memòria i es guarda en en el registre d’instruccions. També s’avança el PC, apuntant a la següent instrucció.

2.2 Etapa ID (Instruction Decode)

Es decodifica la instrucció, i es busquen els operadors implicats en l’acció. Es guarden el valors en els registres A i B. En aquesta etapa també es calculen els salts condicionals per tal de reduir els riscos de control.

2.3 Etapa EX

Executa la instrucció i fa el càlcul de les adreces efectives si cal.

S’opera amb els operands aconseguits anteriorment. Es poden fer diverses operacions:

- intEX (1 enter). Fa operacions aritmètiques enteres (no multiplica ni divideix) i calcula les direccions efectives de salt.

- faddEX (fins a 8 unitats). Sumes i restes en coma flotant en rang simple i de doble precissió.

- fmulEX( fins a 8 unitats). Multiplicacions amb enters amb signe i sense i coma flotant en simple i doble precissió.

- fdivEX (fins a 8 unitats). Té les mateixes possibilitats que fmulEx, però divideix en comptes de multiplicar.

2.4 Etapa MEM

Escriptura o lectura de la memòria. Les adreces necessàries ja s’han calculat en l’etapa EX.

2.5 Etapa WB

El resultat de les operacions realitzades és escrita als registres. Aquesta escriptura es realitza en la primera meitat del cicle, amb el que una instrucció que estigui en la etapa ID pot llegir el registre en la segona meitat del cicle. D’aquesta evitem l’avançament de les instruccions en aquest cas.

2

Page 3: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

3. DESCRIPCIÓ DE L’ENTORN DE SIMULACIÓ

Al obrir el programa trobem 6 subfinestres:

- Registres (Register)- Codi (Code)- Pipeline- Diagrama de Cicles de Rellotge (Clock Cycle Diagram)- Estadístiques (Statistics)- Punts de ruptura (Breakpoints)

A part d’una sèrie d’opcions en la barra d’eines.

3

Page 4: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

2.1. FINESTRA I MENÚ REGISTER

Tenim el contingut de tots els registres del processador.Hi ha varis tipus de registres

- Especials. 16 registres.- Enters o de propòsit general. 32 registres(R0 a R31) de 32 bits.- Coma flotant. 32 registres de simple precissió (F0 a F31) (32 bits) o doble

precissió (D0, D2, D4,… D30)(64 bits).

Els registres es poden modificar senzillament fent doble clic en ells. Només es poden modificar els registres de propòsit general, coma flotant i els especials PC i FPSR.Els registres enters només permeten expressions enteres (també es poden anomenar anomenar registres), i les de coma flotant només valors constants ( no permeten l’ús de registres).

La funció de cadascun dels registres és la següent:

FPSR ( Floating-Point Status Register). Registre d’estat d’1 bit de longitud que s’usa per les comparacions i excepcions en coma flotant.

PC (Program Counter). Marca la direcció de la següent instrucció a executar.

IMAR (Instruction Memory Adress Register). Se li asigna el valor de PC a l’etapa de IF. Això és degut a que està connectat amb el sistema de memoria

4

Page 5: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

IR (Instruction Register). A l’etapa de IF, es carrega amb la pròxima instrucció a executar-se.

A,B. Són carregats a l’etapa ID, i els seus valors són enviats a la ALU en la següent etapa (EX). Contenen els paràmetres de la instrucció que volem executar.

BTA (Branco Target Adress). En l’etapa ID, la direció de salt/bifurcació es calcula i s’escriu a aquest registre.

ALU (Aritmethic Logical Unit). Registre que conté el resultat d’una operació feta per la ALU.

DMAR (Data Memory Adress Register). És la direcció de memoria a la que es vol accedir. És inicialitzada en la etapa de EX, i s’usa en la de MEM per escriure o llegir informació de la Memoria.

SDR (Store Data Register). Guarda el que escriurem a la memoria.

LDR (Load Data Register). Al llegir informació de la memoria, queda emmagatzemada en aquest registre.

A partir de la barra d’eines, i del menú Register, podem veure tots o varis registres, escollir si volem veure el seu contingut en decimal o hexadecimal. Hem de tenir en compte que els registre en punt flotant sempre es representen en forma decimal.

2.2. FINESTRA I MENÚ CODE

Hi podem veure les instruccions de la memoria en forma hexadecimal i desensamblades, juntament amb les seves direccions. També s’hi poden veure els punts de ruptura (breakpoints), indicats amb Bxx, on xx és el tipus de punt de ruptura.

Quan s’executa una instrucció determinada, és il.luminada per el color de l’etapa que s’estigui executant en aquell moment. També s’indica el nom de l’etapa en qüestió.

5

Page 6: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

Tenim com a informació l’adreça, el codi i la instrucció en ensamblador.

Podem obtenir informació més detallada de les instruccions que estan al pipeline, fent doble click amb el mouse directament sobre la instrucció en qüestió. Amb això visualitzarem la finestra d’informació de la instrucció.

Un exemple de la la informació de la instrucció sw SaveR3(r0) seria el següent:

6

Page 7: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

Com podem veure, tenim informació de diferents aspectes:

- Informació general de la instrució- Detalls de les diferents etapes(IF, ID, intEX, MEM, WB).

Hi ha opcions suplementàries per treballar amb instrucions:

- From Address. Especifiquem la direcció de memòria que nosaltres volem començar a visualitzar en la finestra Code.

- Set BreakPoint. Punt de ruptura en la instrucció que nosaltres elegim.

2.3. FINESTRA I MENÚ PIPELINE

Podem visualitzar les etapes per les que passen les intruccions en l’estructura del pipeline del processador. Com podem veure hi ha una sèrie de capses de colors, que contenen la instrucció que estan executant en aquell cicle.

Si fem doble click sobre alguna etapa obtenim informació detallada de l’evolució d’aquella instrucció.

En el menú Pipeline tenim l’opció Display Floating point stages. Si la tenim activa, a més a més de les etapes bàsiques del pipeline de DLX, també veurem les etapes en coma flotant que ens podem trobar.

7

Page 8: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

2.4. FINESTRA I MENÚ CLOCK CICLE DIAGRAM

En aquesta etapa veiem l’evolució del sistema de segmentació. Hi podem veure les operacions que es realitzen en cada cicle de rellotge i en cada etapa. Cada columna representa l’estat del pipeline en un cicle de rellotge.

El cicle pel que passa el pipeline està en color gris i és el de més a la dreta. També podem obtenir més informació de cada instrucció fent doble click sobre elles.

En aquest punt és important parlar de les detencions (stalls). Vé representat per una capsa del mateix color que l’etapa on ha succeït, i conté el tipus de detenció.

Hi ha diferents tipus de detencions:

- R-Stall (Read After Write Stall). Vé representada per una fletxa de color vermell i apunta a la instrucció que la provoca.(RAW, s’explicarà més endavant…)

- T-Stall (Trap Stall). Es produeix en una instrucció de trap. Aquesta es manté en l’etapa IF fins que no quedin més instruccions en el pipeline.(WAW, s’explicarà més endavant…)

- W-Stall (Write After Write Stall). Com en el cas de R-Stall, també vé indicat per una fletxa vermella que assenyala la instrucció que la provoca. Aquest risc només es presenta en els pipelines que escriuren als registres o a memòria en varies etapes. En el cas del DLX, només escrivim en l’etapa WB, amb el que no tindrem aquests riscos per valors enters, però sí que els tindrem per les operacions de coma flotant.

8

Page 9: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

- S-Stall (Stiructural Stall). No tenim suficients recursos hardware per executar la instrucció. (Riscos estructurals, s’explicarà més endavant…)

- Stall. Passa quan una instrucció de coma flotant està en l’etapa MEM, i hem d’aturar la següent instrucció en l’etapa intEx. Això és degut a que per poder manipular un valor en coma flotant no ho podem fer en un sol cicle.

En el menú Clock Cycle Diagram tenim diferents opcions:

- Display Forwarding. D’aquesta manera visualitzem els forwardings que ens trobem. L’etapa origen i l’etapa destí són unides amb una fletxa verda.

- Display Cause of Stalls. Es marca la instrucció que provoca el risc de dades (RAW o WAW) amb una fletxa vermella.

- Delete History. Inicialitzem les instruccions visualitzades en el diagrama de cicles de rellotge.

- Set History Length. Personalitzar el nº d’instruccions consecutives que volem visualitzar en el diagrama de cicles de rellotge.

9

Page 10: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

2.5. FINESTRA I MENÚ STATÍSTICS

En tot moment hi ha un seguiment de les estadístiques de la simulació. Hi podem visualitzar diferents aspectes:

- Total. Número de cicles processats, nº d’instruccions executades que han passat per la etapa ID, i el total d’instruccions que s’estan executant en el pipeline en aquell instant.

- Hardware Configuration. Tamany de la memòria, total d’unitats de procés en coma flotant i el nº de cicles que consumeixen, habilitació del forwarding.

- Stalls. Ens dona diversa informació:

i. Número de riscos RAW. Si està habilitada l’opció de forwarding, i també l’opció Detail Info, tindrem la següent informació:

1. Número de riscos RAW provocats per una lectura2. Número de riscos RAW provocats per una instrucció de salt o

bifurcació.3. Número de riscos RAW provocats per una instrucció en coma

flotant.

ii. Número de riscos WAW.

iii. Número de detencions de control. És el número de salts condicionals efectius, ja que el DLX aplica una política de predir-no-efectiu. D’aquesta manera, els salts no efectius no provoquen detencions, mentre que els efectius provoquen la detenció de 1 cicle.

iv. Número de detencions provocades per una instrucció trap.

- Conditional Branches. Mostra amb més detall els salts condicionals.

- Load/Store-Instructions. Total d’instruccions de lectura i escriptura.

10

Page 11: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

- Floating point stages instructions. Total d’instruccions executades en les etapes coma flotant (faddEx, fmulEX, fdivEX). Si tenim activa l’opció Detail Info, tenim la informació divida en el total de les intruccions de cadascuna de les etapes anomenades anteriorment.

- Traps. Total de traps.

En el menú Statistics tenim diverses opcions per extendre la informació estadística. Trobem: Hardware, Stalls, Conditional Branches, Load/Store-Instruccions, Floating point stages instructions.

11

Page 12: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

També tenim l’opció de Detail Info (ja comentada) i Reset, que inicialitza tots els valors que apareixen en la finestra Statistics.

2.6. FINESTRA I MENÚ BREAKPOINTS

En ella tenim el conjunt d’instruccions que tenen un punt de ruptura. Com a màxim podem tenir 20 punts de ruptura. Podem manipular els punt de ruptura fent doble click directament sobre la instrucció o bé a partir del menú. Les opcions que hi podem trobar són les següents:

- Set… Nou punt de ruptura.i. Adress. Pot estar formada per valors, operadors i símbols. La solució

ha de ser múltiple de 4.ii. Type. En quina etapa activarem el punt de ruptura. Al fer un Read o

Write, també tenim un punt de ruptura.

2.7. BARRA DE MENÚS

Tenim diferents opcions: File, Window, Execution, Memory, Configuration i help.

2.7.1. MENÚ FILE

Té diferents opcions:

- Reset DLX.i. Neteja el pipeline

ii. Inicialització de les estadístiquesiii. Inicialització dels registres (PC amb el valor $TEXT)iv. Eliminació de l’historial de les instruccions executadesv. Tancament dels arxius oberts

12

Page 13: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

vi. Cancel.lació de la redirecció DLX-I/Ovii. Eliminacio del contingut de la finestra DLX-I/O

La memòria i els símbols definits es mantenen.

- Reset All. Fa el mateix que ResetDLX, però a més a més, esborra tota la informació de la memòria i els símbols. Els símbols $TEXT i $DATA estan fixats pel simulador i es mantenen inalterables.

- Load Code or Data.Podem carregar diferents fitxers al pipeline. La finestra que visualitzem és la següent.

Podem escollir varis fitxers, i els que anem seleccionant s’aniran copiant a la sub-finestra de la part inferior.

- Quit WinDLX. Sortim de l’aplicació.

2.7.1. MENÚ WINDOWS

Són les típiques de qualsevol aplicació Windows.

13

Page 14: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

2.7.2. MENÚ EXECUTE

Bàsicament té les opcions necessàries per poder anar executant les instruccoins i veure les finestres de e/s:

- Single Cycle. Avancem un cicle en el procés. Ens podem trobar en 2 casos, hi pot haver una operació de E/S, amb el que visualitzarem la finestra DLX-I/O i també podem trobar un trap indefinit o un punt de ruptura, amb el que el simulador ja s’encarregarà de redireccionar-nos on calgui.

- Multiple Cycles. Avancem varis cicles. Es pot abortar l’execució de diferents maneres:

i. Simulem un nº de cicles determinatsii. Premem Cancel en la finestra DLX-I/O

iii. Erroriv. Punt de rupturav. Trap indefinit

- Run. S’aniran executant les instruccions fins que ens trobem amb les mateixes condicions comentades anteriorment (evidentment, tret que s’atura quan simulem el nº de cicles seleccionats).

- Run to… Podem escollir un punt de ruptura enmig del codi, amb el que s’anrian executant totes les instruccions i quan arribi al punt que li hem marcat s’aturarà.

- Display DLX-I/O. Visualitzem al finestra d’entrada/sortida.

14

Page 15: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

2.7.3.1. FINESTRA DLX-I/O

La visualtizarem en diferents casos:

- L’usuari ha activat la funció Display DLX-I/O en el menú Execute.- Errors que no estan redireccionats a un fitxer.- Entrada de valors (per mitjà del teclat).

A partir de prémer el botó dret, accedim al menú DLX-Standard-I/IO. Té diferents opcions:

- Delete Windows. Inicialitza la finestra DLX-I/O.

- Redirect to File. Té diferents possibilitats:

i. Standard Input. Entrada de dadesii. Standard Output. Sortida de dades.

iii. Standard error. Sortida d’errors.

El que aconseguim és redireccionar la informació generada per aquestes entrades i sortides al fitxer que nosaltres escollim. Les extensions per defecte d’aquests arxius són:

1. IN -> entrada de dades2. OUT -> sortida de dades3. ERR -> sortida d’errors

15

Page 16: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

- Redirect to Window. Amb aquesta opció obliguem que les entrades i sortides es visualitzin en una finestra. Té diferents opcions:

i. Standard inputii. Standard output

iii. Standard error

Al reinicialitzar el processador, totes les redireccions quedaran anulades.

2.7.4. MENÚ MEMORY

Bàsicament permet crear finestres de memòria, canviar el contingut de les posicions de memòria i manipular els símbols. Les seves opcions són:

- Display… Visualització de les posicions de memòria en el format que elegim. Podem escollir el tipus, el format i l’adreça de memòria de la que volem veure el contingut.

Tenim diferents tipus de dades:

Tipus FormatByte (8 bits) hexadecimal, decimal o caràcterHalf-word (16 bits) hexadecimal o decimalWord hexadecimal o decimalSingle floating point (32 bits) decimalDouble floating point (64 bits) decimal

Totes aquestes opcions estan contingudes en la següent finestra:

16

Page 17: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

- Change… podem canviar o visualitzar el contingut d’una posició de memòria. Podem escollir el tipus i l’adreça amb la que volem interactuar. A partir de la opció Set canviem la posició de memòria. A partir de les opcions Next i Previous avancem o retrocedim en la memòria.

- Symbols… manipulació de símbols. Tenim una sub-finestra (Symbol List), on tenim tots els símbols classificats per el nom i el valor. Podem introduir-ne un de nou(New), canviar el valor (Change) o eliminar-ne un (Delete).

17

Page 18: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

2.7.5. MENÚ CONFIGURATION

Té diferents opcions:

- Floating point stages… podem escollir el nº d’unitats en punt flotant (1..8) i el seu retard (1..50 cicles). Algun canvi provoca l’automàtica reinicialització del processador.

- Memory size… canviem el tamany de la memòria del processador. En teoria, pot estar entre 512 bytes i 16 Mb. Ara bé, en la pràctica, està limitada per la configuració de l’entorn Windows. Algun canvi provoca l’automàtica reinicialització del processador.

18

Page 19: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

- Symbolic Adresses. Si aquesta opció està activa, veurem les adreces de memòria com “símbol + desplaçament”, altrament, veurem el seu valor en hexadecimal.

- Absolute Cycle Count. Els cicles de rellotge van de 0 en endavant, si aquesta opció no està activa, el cicle actual serà el 0, l’anterior -1, el d’abans -2… i així consecutivament.

- Enable Forwarding. Activar o desactivar el forwarding.

- Load… permet recuperar un fitxer de configuració del processador. Es reinicialitza tot el processador, tret dels valors de la memòria i els símbols.

- Save… guardem la configuració actual del processador en un arxiu .WDC. Al inicialitzar l’aplicació, automàticament es carregarà la configuració de l’arxiu WINDLX.WDC.

19

Page 20: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

4. RISCOS I EXEMPLES

4.1. RISCOS ESTRUCTURALS

Es produeixen quan no tinc prou recursos per executar una acció, en aquests casos, podem augmentar els recursos o bé aturar la segmentació. (S-Stall)

IF ID EX MM WB IF ID EX MM WB IF ID EX MM WB

sw 0(R1),R1 ; canvia la paraula per R1add R2, R4, R5lw R4,0(R2) ;llegeix una paraula a R4

Hi ha una retenció de 2 cicles. Ha d’esperar que les dues instruccions anteriors acabin de fer el seu accés a MEM perquè ella la pugui fer.

20

Page 21: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

4.2. RISCOS DE DADES

Si tenim 2 instruccions seqüencials: i, j

Tenim 3 tipus de riscos:

- RAW: j intenta llegir un operand abans que l’escrigui i (R-Stall)- WAW: j intenta escriure un operand abans que l’escrigui i (W-Stall)- WAR: j intenta escriure un operand abans que el llegeixi i

Ara bé, en el cas del simulador DLX, no trobarem ni Waw ni War. Això és degut al fet que es permet que en un mateix cicle, es pugui escriure en la primer meitat d’aquest i llegir en la seva segona meitat.

En les RAW ens podem trobar en 2 casos, que sigui aritmético-lògica (relacionat amb la ALU), o bé que hi hagi un problema d’accés a memòria.

Per solucionar l’aritmético lògica podem usar el Forwarding o “By Pass”.En l’accés a Memòria millorarem l’aturada produïda, però no solucionem el problema. En l’etapa EX es carrega el valor obtingut en un registre de la ALU, i una altra instrucció hi pot accedir abans que aquesta arribi a l’etapa de MEM.

Ex.

add R1,R2,R3sub R4,R1,R5sub R5,R6,R7lw R8,0add R6,R7,R8add R2,R3,R2add R2,R1,R3sub R3,R4,R5

21

RAW – aritmético-lògica

RAW – accés a MEM

Page 22: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

Diagrama Sense Forwarding

Retenció de 3 cicles en la RAW arimético-lògica i d’accés a MEM.

Diagrama Amb Forwarding

El cas de la RAW aritmético-lògica ho solucionem amb el Forwarding, però no solucionem “totalment” el d’accés a MEM.

22

Page 23: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

L’ altra opció per solucionar els problemes de RAW és la Planificació d’instruccions. On s’ordenen les intruccions de tal manera que aprofitem el màxim l’ús de la segmentació. O, dit d’una altra manera, reordenem les operacions per solucionar l’interbloqueig.

Amb aquesta solució sí que podem solucionar la RAW d’accés a MEM, i també l’aritmético-lògica.

En el cas anterior , si reordenem les operacions obtindriem el següent resultat:

add R1,R2,R3sub R5,R6,R7lw R8,0add R2,R3,R2sub R4,R1,R5add R6,R7,R8add R2,R1,R3sub R3,R4,R5

Diagrama Amb Planificació d’instruccions

Com podem veure, s’han solucionat les retencions.

23

Page 24: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

4.3. RISCOS DE CONTROL

Són els que portem més problemes en la segmentació, i són produïts per els salts en el programa.

Hi ha 2 tipus de salts:- salt efectiu (1r calculo l’@ i després salto)- salt no efectiu (següent instrucció)

DLX usa una tècnica predictiva, ja que suposa que la majoria dels salts són no efectius i executa la segmentació de forma normal.

Fa una comparació en la fase de decodificació per saber si hi ha un salt efectiu.Si el salt no és efectiu no s’atura cap cicle, i si és efectiu s’atura 1 cicle. Si no es fes d’aquesta manera, i trobessim un salt efectiu ens hauríem d’aturar 3 cicles.

IF ID EX MM WB (salt efectiu!!) IF -- ---- ----

IF EX MM

Ex:

main: add R3,R1,1sub R5,R4,R1add R5,R1,1sge R4,R2,R3 ;si (R2 >= R3) llavors R4 = 1 altrament R4 = 0sub R5,R1,R2add R6,R7,R1beqz R4,main ;salt si R4 = 0sub R5,R4,R1

24

Page 25: eia.udg.eseia.udg.es/~eusebi/manualswindlx/2.doc · Web viewWAW: j intenta escriure un operand abans que l’escrigui i (W-Stall) WAR: j intenta escriure un operand abans que el llegeixi

Diagrama Amb Riscos de Control

En l’etapa de decodificació de la instr: beqz R4,main, veu que s’ha de fer un salt efectiu. El que fa a continuació és abortat la instrucció que hi havia després d’aquesta, i començar a executar la primera instrucció que hi ha després de fer el salt.

25