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