Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

27
Marco Vanadia [email protected] DEE Politecnico di Bari Esercitazione Calcolatori Elettronici 6 dicembre 2007 Esercitazione sul linguaggio Assembly del DLX Ambiente di simulazione di processori in architettura RISC WinDLX 1 1 2 2 http://www.slideshare.net/mova/esercitazione-calcolatori-elettronici-vanadia-2007-12-06/

description

Esercitazione sul linguaggio Assembly del DLX Ambiente di simulazione di processori in architettura RISC WinDLX

Transcript of Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Page 1: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercitazione Calcolatori Elettronici 6 dicembre 2007

Esercitazione sul linguaggio Assembly del DLX

Ambiente di simulazione di processori in architettura RISC WinDLX

11

22

http://www.slideshare.net/mova/esercitazione-calcolatori-elettronici-vanadia-2007-12-06/

Page 2: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Materiale da cercare in rete● WinDLX

pagina di Herbert Gruenbacher presso la Technische Universitat Wien

http://www.soc.tuwien.ac.at/intern/RA/http://cs.uns.edu.ar/~jechaiz/arquitectura/windlx/windlx.htmlhttp://cs.uns.edu.ar/~jechaiz/arquitectura/windlx/DLXinst.html

● Dinero IV Trace-Driven Uniprocessor Cache SimulatorMark Hill presso la University of Wisconsinhttp://www.cs.wisc.edu/~markhill/DineroIV/

● EduMIPS64porting italiano di WinMIPS64 da Visual C++ a Java Swing www.edumips.orghttp://www.opencores.org/projects.cgi/web/minimips/overview

Page 4: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Assembly● il linguaggio assembly è la rappresentazione simbolica che

descrive le istruzioni e i dati per un computer

● il linguaggio macchina è la codifica binaria presente nella memoria ed elaborata dal processore

● L'assembly è più leggibile del linguaggio macchina perchè utilizza simboli piuttosto che bit.

● I simboli rappresentano sequenze di bit comuni per

➔ gli opcode, i codici mnemonici per rappresentare le istruzioni

➔ i registri

➔ le label che identificano le locazioni in memoria di istruzioni o dati

Page 5: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Struttura base codice sorgente Assembly

; NomeProgramma.s commenti; autore; versione

.data direttiva inizio sezione dati

definizione di tuttii dati e delle variabili

.global main direttiva che definisceun etichetta globale

.code offset direttiva inizio sezione codice

istruzioni assembler

main: entry point del codice assemblyistruzioni assembler

trap 0 ferma il simulatore

Page 6: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Direttive

.ascii “string1”, “string2”, ...

.asciiz “string1”, “string2”, ...

.align nallineamento del codice e dei dati all'indirizzo successivo con i primi n bit meno significativi posti a zero

alloca le stringhe alfanumeriche nel codice oggetto che poi saranno caricate in memoria; le stringhe non sono terminate con il carattere zero

alloca le stringhe alfanumeriche nel codice oggetto che poi saranno caricate in memoria; le stringhe sono terminate con il carattere zero

.byte byte1, byte2,...alloca una sequenza di byte nel codice oggetto che poi saranno caricate in memoria

.double number1, number2,...alloca una sequenza di double, numeri floating point a doppia precisione di 64 bit nel codice oggetto che poi saranno caricate in memoria

.float number1, number2,...alloca una sequenza di float, numeri floating point a singola precisione di 32 bit nel codice oggetto che poi saranno caricate in memoria

.global labeldefinisce una etichetta come globale, un riferimento a questa locazione è disponibile ad altri codici oggetto linkato a questo sorgente

.space size lascia lo spazio per size bytes quando il codice sarà caricato in memoria

Page 7: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Assemblatore Linker Loader● Un programma in linguaggio assembly è codificato in un file oggetto

usando un programma assemblatore. Un assemblatore legge un singolo file sorgente e produce il file oggetto assemblando tutte le informazioni necessarie a descrivere il codice e i dati. Queste verranno poi messe assieme da un linker a formare un programma eseguibile o una libreria, caricati in memoria da un loader all'atto dell'esecuzione o invocazione.

Page 8: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Codice rilocabile

● Il file oggetto comincia con un'intestazione, un header, ed è formato da uno o più segmenti contenenti il codice macchina e la rappresentazione binaria dei dati. Vengono salvate le informazioni sulla rilocazione per le parole che dipendono dall'indirizzo assoluto in memoria in cui è caricato ogni segmento.

● Inoltre viene salvata la symbol table delle label che possono essere indirizzate da altri file sorgente e la lista di tutti i riferimenti esterni irrisolti. Per finire possono esservi informazioni di debugging.

Page 9: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Assembly #1

● Scrivere, nel linguaggio Assembly del DLX scalare, l’inizializzazione a valore nullo di un vettore composto da N elementi interi di una sola word.

for (i=0; i<N; i++) {x[i] = 0;

}

Page 10: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Assembly #1

● Sia R0 il registro nullo

● R1 il registro base (contenente il primo indirizzo di allocazione in memoria del vettore)

● R2 il registro contenente il numero di elementi del vettore da inizializzare

● R3 il registro indice che punta ai singoli elementi del vettore in memoria

SUB R0, R0, R0 ; 0 -> R0 ADD R3, R0, R0 ; 0 -> R3 ADD R2, R0, N ; N -> R2loop: SW R1, R3, F2 ; 0 -> M[R1+R3] ADD R3, R3, #4 ; R3 + 4 -> R3 SUB R2, R2, #1 ; R2 - 1 -> R2 JNZ loop ; se R2 > 0 salta a loop

Page 11: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Assembly #1

● R0 vale sempre zero

● per caricare il valore di una parola all'etichetta N si usa LW Rx, N

● la SW (I-type) ha un indirizzamento indirizzo base + spiazzamento 16bit

● il branch richiede un registro per una condizione di == o <> da zero

SUB R0, R0, R0 ADD R3, R0, R0 ADD R2, R0, N -> LW R2, Nloop: SW R1, R3, F2 -> SW vett(R3), R0 ADD R3, R3, #4 SUB R2, R2, #1 JNZ loop -> BNEZ R2, loop

Page 12: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Assembly #1; asm1_1.s

ADD R3, R0, R0 ; imposta a zero l'indice R3LW R2, N ; carica N in R2

loop: SW vettore(R3),R0 ; pone 0 alla locazione M[R3 + vettore]

ADDI R3, R3, #4 ; incrementa l'indice di 4 ogni wordSUBI R2, R2, #1 ; decrementa il contatoreBNEZ R2, loop ; salta a loop se non uguale a zero

trap 0 ; per fermare windlx

.dataN: .word 8vettore: .word 1,2,3,4,5,6,7,8

Page 13: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Assembly #1

8

vettore:

0x10000x10040x10080x100c0x10100x1014

x[0] = 1

x[1] = 2

x[2] = 3

x[3] = 4

x[4] = 5

x[5] = 6

x[6] = 7

0x10180x101c0x1020 x[7] = 8

N:

Page 14: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Assembly #1

; asm1_2.s

LW R2, N ; carica N in R2 SLLI R2, R2, #2 ; moltiplico per 4 shiftando a sx di 2loop: SW vettore-4(R2),R0 ; pone 0 alla M[R2 + (vettore-4)] SUBI R2, R2, #4 ; uso R2 come indice e decremento di 4 BNEZ R2, loop ; salta a loop se non uguale a zero trap 0 ; per fermare windlx .dataN: .word 8vettore:.word 1,2,3,4,5,6,7,8

Page 15: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Assembly #1

8

vettore:

0x10000x10040x10080x100c0x10100x1014

x[0] = 1

x[1] = 2

x[2] = 3

x[3] = 4

x[4] = 5

x[5] = 6

x[6] = 7

0x10180x101c0x1020 x[7] = 8

N: 8<<2 = 32

vettore + 0

vettore + 4

vettore + 8

vettore + 12

vettore + 16

vettore + 20

vettore + 24

vettore + 28

vettore + 32

Page 16: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Assembly #7● Scrivere nel linguaggio Assembly di una

architettura DLX-like scalare (non pipe), la procedura che esegue la somma di due vettori di n elementi interi, espressi su singola word, allocati in memoria a partire dagli indirizzi rispettivamente contenuti negli registri R1 ed R2, ponendo il risultato a partire dall'indirizzo contenuto nel registro R3.

for (i=0; i<N; i++) {z[i] = x[i] + y[i];

}

Page 17: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Assembly #7.text lw r4, length slli r4, r4, #2 add r1, r4, v1 add r2, r4, v2 add r3, r4, v3 loop: beqz r4, end lw r5, -4(r1) lw r6, -4(r2) add r5, r5, r6 sw -4(r3), r5 subi r1, r1, #4 subi r2, r2, #4 subi r3, r3, #4 subi r4, r4, #4 j loop end: trap 0 .datav1: .word 1,-1, 0,-1v2: .word 2, 0, 1, 1v3: .space 4*4length: .word 4

.text lw r4, length slli r4, r4, #2

loop: beqz r4, end lw r5, v1-4(r4) lw r6, v2-4(r4) subi r4, r4, #4 ; schedulata add r5, r5, r6 sw v3(r4), r5 ; (indirizzo-4)+4 subi r4, r4, #4

j loop end: trap 0 .datav1: .word 1,-1, 0,-1v2: .word 2, 0, 1, 1v3: .space 4*4length: .word 4

Page 18: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Architetture Avanzate #1

Dire quale è lo scopo del seguente programma:

loop: LD F0, 0(R1) ADDD F4, F0, F2 SD 0(R1), F4 ADDI R1, R1, #-8 BNEZ R1, loope fornire una sua versione srotolata per 6 volte schedulata in maniera opportuna.

vedi H&P pag.271 (par.6.8 pipelining avanzato ILP, srotolamento e schedulazione)

Page 19: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Pipelining avanzatoILP Instruction-level parallelism

● le pipeline sono state sviluppate per poter eseguire contemporaneamente più istruzioni indipendenti

● Pipeline CPI = Ideal pipeline CPI + Structural stalls +RAW stalls + WAR stalls + WAW stalls + Control stalls

● tecniche per ridurre gli stalli● Loop unrolling – per gli stalli di controllo● Pipeline scheduling – riduce gli stalli RAW● Register renaming – riduce gli stalli WAR e WAW● Dynamic branch prediction – per gli stalli di controllo● Superscalar pipeline – riduce CPI ideale

Page 20: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Esercizio Architetture Avanzate #1

loop: LD F0, 0(R1) ADDD F4, F0, F2 SD 0(R1),F4 ADDI R1, R1, #-8 BNEZ R1, loop

for(int i=1;i<=N;i++) { x[i]=x[i] + c;}

somma un valore scalare double agli elementi di un vettore di double in memoria

R1 contiene l'indirizzo dell'elemento del vettore con l'indirizzo più alto in memoria

F2 contiene il valore dello scalare c da sommare

N.B. non viene caricato l'elemento all'indirizzo zero...

Page 21: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Stalli della pipeline

loop: LD F0, 0(R1) stallo ADDD F4, F0, F2 stallo stallo SD 0(R1), F4 ADDI R1, R1, #-8 stallo BNEZ R1, loop stallo

5 ISTRUZIONI10 CICLICPI = 2

Page 22: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Schedulingloop: LD F0, 0(R1) stallo ADDD F4, F0, F2 stallo stallo SD 0(R1), F4 ADDI R1, R1, #-8 stallo BNEZ R1, loop stallo

loop: LD F0, 0(R1)ADDI R1, R1, #-8

ADDD F4, F0, F2 stallo BNEZ R1, loop SD 8(R1), F4

● la LD causa stallo strutturale nella fase MEM per la dipendenza con la EXE di ADDD● la ADDD causa un doppio stallo RAW per la dipendenza con SD● la ADDI causa uno stallo RAW per la dipendenza con la fase ID del branch● il branch quando salta indietro richiede uno stallo di controllo

● schedulo l'aggiornamento dell'indice nel delay slot della load● schedulo la store del risultato nel delay slot della branch (non previsto da WinDLX)● la store dipende da R1 ma sfruttare il campo immediato per avere l'indirizzo corretto

5 ISTRUZIONI6 CICLI

CPI = 1,2

Page 23: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Loop unrollingloop: LD F0, 0(R1) ADDD F4, F0, F2 SD 0(R1), F4 ADDI R1, R1, #-8 BNEZ R1, loop

loop: LD F0, 0(R1) ; 1 ADDD F4, F0, F2 SD 0(R1), F4

LD F6, -8(R1) ; 2 ADDD F8, F6, F2 SD -8(R1), F8

LD F10, -16(R1) ; 3 ADDD F12, F10, F2 SD -16(R1), F12

LD F14, -24(R1) ; 4 ADDD F16, F14, F2 SD -24(R1), F16

LD F18, -32(R1) ; 5 ADDD F20, F18, F2 SD -32(R1), F20

LD F22, -40(R1) ; 6 ADDD F24, F22, F2 SD -40(R1), F24

ADDI R1, R1, #-48 BNEZ R1, loop

20 ISTRUZIONI6*6+4 = 40 CICLI

CPI = 2

Page 24: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Unrolled & scheduledloop: LD F0, 0(R1) ; 1 ADDD F4, F0, F2 SD 0(R1), F4

LD F6, -8(R1) ; 2 ADDD F8, F6, F2 SD -8(R1), F8

LD F10, -16(R1) ; 3 ADDD F12, F10, F2 SD -16(R1), F12

LD F14, -24(R1) ; 4 ADDD F16, F14, F2 SD -24(R1), F16

LD F18, -32(R1) ; 5 ADDD F20, F18, F2 SD -32(R1), F20

LD F22, -40(R1) ; 6 ADDD F24, F22, F2 SD -40(R1), F24

ADDI R1, R1, #-48 BNEZ R1, loop;asm1_2

loop: LD F0, 0(R1) ; 1 LD F6, -8(R1) ; 2 LD F10, -16(R1) ; 3 LD F14, -24(R1) ; 4 LD F18, -32(R1) ; 5 LD F22, -40(R1) ; 6

ADDD F4, F0, F2 ; 1 ADDD F8, F6, F2 ; 2 ADDD F12, F10, F2 ; 3 ADDD F16, F14, F2 ; 4 ADDD F20, F18, F2 ; 5 ADDD F24, F22, F2 ; 6

SD 0(R1), F4 ; 1 SD -8(R1), F8 ; 2 SD -16(R1), F12 ; 3 SD -24(R1), F16 ; 4 SD -32(R1), F20 ; 5

ADDI R1, R1, #-48

BNEZ R1, loop SD 8(R1), F24 ; 6

;asm1_3

20 ISTRUZIONI6+3*6+6+1+1= 32 CICLI

CPI = 1,6

Page 25: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

arc1_0

arc1_1

arc1_2

arc1_3

arc1_4

0 50 100 150 200 250 300

246

198

166

134

106

Cicli

CYC

arc1_0

arc1_1

arc1_2

arc1_3

arc1_4

0,00% 20,00% 40,00% 60,00% 80,00% 100,00%

68%

74%

68%

76%

88%

26%

18%

31%

6%

9%

1%

2%

2%

23%

10%

istruzioni utili / stalli

CONTRSTRUTWAW TOTRAW TOTCYC

Win

DLX

st

ats

Page 26: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Architettura Superscalare

istruzione ALU istruzione FP1 loop: LD F0, 0(R1)2 LD F6, -8(R1)3 LD F10, -16(R1) ADDD F4, F0, F24 LD F14, -24(R1) ADDD F8, F6, F25 LD F18, -32(R1) ADDD F12, F10, F26 LD F22, -40(R1) ADDD F16, F14, F27 SD 0(R1), F4 ADDD F20, F18, F28 SD -8(R1), F8 ADDD F24, F22, F29 SD -16(R1), F1210 SD -24(R1), F1611 ADDI R1, R1, #-4812 SD 16(R1), F2013 BNEZ R1, loop14 SD 8(R1), F24

20 ISTRUZIONI14 CICLI

CPI = 0,7

Page 27: Esercitazione Calcolatori Elettronici Vanadia 2007 12 06

Marco Vanadia [email protected] DEE Politecnico di Bari

Architettura VLIWistruzione Rif M1 Rif M2 istruz FP1 istruz FP2 ALU/Branch 1 LD F0, 0(R1) LD F6, -8(R1)2 LD F10,-16(R1) LD F14,-24(R1) 3 LD F18,-32(R1) LD F22,-40(R1) ADDD F4, F0,F2 ADDD F8, F6, F24 ADDD F12,F10,F2 ADDD F16,F14, F25 SD 0(R1), F4 SD -8(R1), F8 ADDD F20,F18,F2 ADDD F24, F22, F26 SD -16(R1), F12SD -24(R1), F16 ADDI R1,R1,#-487 SD 16(R1), F20 SD 8(R1), F24 BNEZ R1, loop8 nop nop nop nop nop

istruzione Rif M1 Rif M2 istruz FP1 istruz FP2 ALU/Branch 1 LD F0, 0(R1) LD F6, -8(R1)2 LD F10,-16(R1) LD F14,-24(R1) 3 LD F18,-32(R1) LD F22,-40(R1) ADDD F4, F0,F2 ADDD F8, F6, F24 ADDD F12,F10,F2 ADDD F16,F14, F25 SD 0(R1), F4 SD -8(R1), F8 ADDD F20,F18,F2 ADDD F24, F22, F2 ADDI R1,R1,#-486 SD 32(R1), F12 SD 24(R1), F16 BNEZ R1, loop7 SD 16(R1), F20 SD 8(R1), F24 (delay slot) 20 ISTRUZIONI

7 CICLI

CPI = 0,35