Esercitazione 1 Simulazione di DLX Ottimizzazione di codice

Transcript

Esercitazione 1 Simulazione di DLX Ottimizzazione di codice
Architetture dei sistemi integrati digitali
© Alessandro Bogliolo
Esercitazione 1
Simulazione di DLX
Ottimizzazione di codice assembler per DLX
Facoltà di Ingegneria – Università di Ferrara – A.A. 2000/01
1
Architetture dei sistemi integrati digitali
© Alessandro Bogliolo
1 Dettagli pratici
1.1
Strumenti utilizzati
•
•
•
1.2
Simulatore WinDLX distribuito gratuitamente (una copia della distribuzione è disponibile sul sito
http://ele2.ing.unife.it/notes/arch/)
PC con sistema operativo della famiglia MS Windows
Sui PC del laboratorio di informatica è disponibile l’account
Username: archdig
Password: vlsi
Riferimenti
•
•
Help on-line di WinDLX (contiene anche la sintassi dell’assembler del DLX)
Tutorial wdlxtut.doc distribuito assieme al simulatore
2 Ipotesi sull’architettura
2.1
Pipelining
•
•
•
•
2.2
Gradi di libertà
•
•
2.3
Pipeline a 5 stadi
4 tipi di unità di elaborazione in parallelo:
• interi/memoria
• somme FP
• moltiplicazioni FP
• divisioni
Unità di elaborazione non pipelined
Politica di gestione dei salti: Predict Untaken
Il menu di configurazione consente di abilitare o disabilitare il forwarding dei risultati
Il menu di configurazione consente di specificare, per ogni tipo di risorsa FP:
• il numero di unità disponibili (count)
• la latenza intesa come numero di cicli di clock necessari a svolgere l’elaborazione (delay)
Configurazione iniziale adottata
•
•
Forwarding abilitato
1 unità per la somma FP, con delay 3
3 Esperienza
3.1
Scopo
•
3.2
Minimizzare il CPUT di esecuzione di un ciclo per l’aggiornamento di un vettore di numeri FP che ad
ogni elemento somma il contenuto di un registro interno
for(i=N; i>0; i++)
a[i] = a[i]+b;
Prima implementazione
•
File Loop1.s
.global
main
main:
Loop:
•
LD
f0, 0(r1)
ADDD f4, f0, f2
SD
0(r1), f4
SUBI r1, r1, #8
BNEZ r1, Loop
trap 0
Caricare il file (file->Load)
Facoltà di Ingegneria – Università di Ferrara – A.A. 2000/01
2
Architetture dei sistemi integrati digitali
•
•
•
•
•
3.3
•
•
Resettare il simulatore (File->Reset all)
File Loop2.s
Loop:
LD
f0, 0(r1)
SUBI r1, r1, #8
ADDD f4, f0, f2
SD
8(r1), f4
BNEZ r1, Loop
trap 0
Caricare il nuovo file e ripetere i passi precedenti
CPUT = 68
Terza implementazione (loop unrolling)
•
•
•
•
•
3.5
Inizializzare il registro R1 al valore 64, corrispondente a 8 numeri FP di 8 byte ciascuno (finestra
Register, doppio click sul registro R1, digitare 64, premere invio)
Inizializzare il registro F2 al valore b da sommare agli elementi dell’array
Aprire le finestre Pipeline, Code, Clock cycle diagram
Premere F7 per far avanzare la simulazione ciclo per ciclo
CPUT = 85
Seconda implementazione (instruction reordering)
•
•
3.4
© Alessandro Bogliolo
File Loop3.s
Loop:
LD
f0, 0(r1)
LD
f6, -8(r1)
LD
f10, -16(r1)
LD
f14, -24(r1)
SUBI r1, r1, #32
ADDD f4, f0, f2
ADDD f8, f6, f2
ADDD f12,f10,f2
ADDD f16,f14,f2
SD
32(r1), f4
SD
24(r1), f8
SD
16(r1), f12
SD
8(r1), f16
BNEZ r1, Loop
trap 0
CPUT = 48. Si notino gli stalli introdotti su alcune istruzioni di SD per evitare conflitti con le precedenti
istruzioni ADD nella fase di accesso alla memoria. Nelle ipotesi di lavoro tali conflitti si verificano anche
se le istrzoni di ADDD non accedono alla memoria, poichè la pipeline è unica e non possono esserci due
istruzioni contemporaneamente nello stesso stadio della pipeline (a meno che questo non sia un EX che
impegna risorse diverse). Quindi due istruzioni a latenza diversa non possono terminare
contemporaneamente!
Con 2 addizionatori FP: CPUT = 40
Con 3 addizionatori FP: CPUT = 38
Con 4 addizionatori FP: CPUT = 38. Avere più di 3 risorse è inutile poichè il repetition time è 3.
Quarta implementazione (instruction reordering)
•
File Loop4.s
Loop:
LD
LD
ADDD
LD
LD
ADDD
SD
SUBI
ADDD
SD
ADDD
SD
SD
BNEZ
f0, 0(r1)
f6, -8(r1)
f4, f0, f2
f10, -16(r1)
f14, -24(r1)
f8, f6, f2
0(r1), f4
r1, r1, #32
f12,f10,f2
24(r1), f8
f16,f14,f2
16(r1), f12
8(r1), f16
r1, Loop
Facoltà di Ingegneria – Università di Ferrara – A.A. 2000/01
3
Architetture dei sistemi integrati digitali
•
© Alessandro Bogliolo
trap 0
Con 1 solo addizionatore FP: CPUT = 38. Si noti che riordinando le istruzioni si è ottenuto con un solo
addizionatore la stessa prestazione che prima ottenevamo con 3!
Facoltà di Ingegneria – Università di Ferrara – A.A. 2000/01
4