Arch. Elab. - S. Orlando 1 Esercitazione su Instruction Level Parallelism Salvatore Orlando.

Slides:



Advertisements
Presentazioni simili
Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante
Advertisements

Università degli Studi di Napoli Federico II Facoltà di Ingegneria Dipartimento di Informatica e Sistemistica Corso di Sistemi ad elevate prestazioni –
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
Ottimizzazione statica del codice per processori pipelined Canella Matteo & Miglioli Filippo.
Chiamate a Procedure. Per lesecuzione di una procedura, un programma deve eseguire i seguenti sei passi: mettere i parametri in un posto dove la procedura.
SPIM Esercizi. Esercizio 1 – il comando li Il codice deve eseguire una singola operazione: mettere il valore immediato 1023 nel registro s3.
SPIM Esercizi. Esercizio 7 – load/store Il codice deve: Inserire in memoria la word 0x a Leggere questo dato e inserirlo in s0 Sommarci 5 Salvare.
Di Libero Sellaro Procedura di svolgimento dei problemi Per lo schermo intero, clic su tasto destro e scegli. Per avanzare con la presentazione, frecce.
Esercizi sulle architetture
Architetture dei Calcolatori (Lettere j-z) Il Processore (2)
Tipo Documento: unità didattica 0 Modulo 0 Compilatore: ??? Supervisore: Data emissione: Release: Indice: A.Scheda informativa B.Introduzione C.Corpo D.Riepilogo.
Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Funzioni.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Caratteristiche principali dell’architettura del processore MIPS
Caratteristiche principali dell’architettura del processore MIPS
Evoluzione del MIPS: superpipeline e superscalari
Criticità sui dati Consideriamo una sequenza di 5 istruzioni
Il pipelining E’ una tecnica Analogia con la catena di montaggio
Il pipelining E’ una tecnica Analogia con la catena di montaggio
Criticità sui dati (1° esempio)
Caratteristiche principali dell’architettura del processore MIPS
Criticità sul controllo
Il pipelining: tecniche di base Lucidi fatti in collaborazione con lIng. Valeria Cardellini.
Criticità sui dati (esempio da fare on line)
Criticità sul controllo
Criticità sul controllo
Introduzione alla programmazione ll
Corso di Informatica Applicata - Lezione 3 - © 2005 Saverio De Vito Corso di Informatica Applicata Lezione 3 Università degli studi di Cassino Corso di.
Corso di Informatica A.A Corso di Informatica Laurea Triennale - Comunicazione&Dams Dott.ssa Adriana Pietramala Dott.ssa.
GENERAZIONE CODICE MACCHINA
3. Architettura Vengono descritte le principali componenti hardware di un calcolatore.
Estensioni allarchitettura di Von Neumann Vito Perrone Corso di Informatica A per Gestionali.
Fondamenti di Informatica1 Software di base Tra il linguaggio macchina (basso livello) e i linguaggi evoluti (alto livello) esiste uno strato di software.
Le funzioni.
Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli
Lezione 6 Strutture di controllo Il condizionale
Architetture dei Calcolatori (Lettere j-z ) Il Processore
Architettura del calcolatore
Architettura degli Elaboratori II (canale P-Z) Istruzioni di controllo Dott. Franco Liberati.
Università degli Studi di Salerno Corso di Calcolatori Elettronici
Calcolatori Elettronici Introduzione al Pipelining Francesco Lo Presti Rielaborate da Salvatore Tucci.
Università degli Studi di Napoli “Federico II” Facoltà di Ingegneria Dipartimento di Informatica e Sistemistica Corso di Sistemi ad elevate prestazioni.
Complessità di un algoritmo
1 Università di Pavia - corso di Calcolatori Elettronici C code: L1:g = g + A[i]; i = i + j; if (i != h) goto L1; MIPS code: L1:add $t1, $s3, $s3# $t1.
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
1 Introduzione Sistema di calcolo + applicazioni Possibilità di effettuare confronti e stime dei tempi di esecuzione Metriche di misura delle prestazioni.
Architettura di una CPU
Arch. Elab. - S. Orlando 1 Progetto del processore e supporto del processore al SO (interruzioni – eccezioni) Salvatore Orlando.
CEFRIEL Consorzio per la Formazione e la Ricerca in Ingegneria dell’Informazione Politecnico di Milano introduzione alle architetture superscalari Come.
Migliorare le prestazioni delle cache
Bus Interface Unit L1 I-CacheL1 D-Cache Fetch/Decode unit Dispatch/Execute unit Retire unit Instruction Pool System Bus L2 Cache 256 KB integrata 4 cicli.
Calcolatori Elettronici Introduzione al Pipelining
Calcolatori Elettronici Assemblatore, Linker e Loader
Calcolatori Elettronici Il Processore
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Calcolatori Elettronici Il Processore (2)
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
Calcolatori Elettronici Valutazione delle Prestazioni Francesco Lo Presti Rielaborate da Salvatore Tucci.
Architettura di un calcolatore e linguaggio macchina.
L’esecuzione dei programmi
SPIM Esercizi. Esercizio 1 – il comando ‘li’ Il codice deve eseguire una singola operazione: mettere il valore immediato 1023 nel registro s3.
Informatica Generale Marzia Buscemi
Diagrammi a blocchi.
Il Processore Il processore è la componente dell’unità centrale che elabora le informazioni contenute nella memoria principale L’elaborazione avviene eseguedo.
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata (3) Istruzioni J-type Istruzioni di salto Istruzioni.
I Microprocessori Unità 3 del libro Internet Working Sistemi e reti.
Cammino dei Dati (Datapath)
Instruction Level Parallelism
Esercitazione su Instruction Level Parallelism
Transcript della presentazione:

Arch. Elab. - S. Orlando 1 Esercitazione su Instruction Level Parallelism Salvatore Orlando

Arch. Elab. - S. Orlando 2 Pipeline con e senza forwarding Si considerino due processori MIPS (processore A e B) –entrambi con pipeline a 5 stadi –il processore A adotta il forwarding, e quello B no –entrambi scrivono sul register file durante la prima parte del ciclo di clock, e leggono durante la seconda parte dello stesso ciclo –entrambi sono dotati di hazard detection unit per bloccare la pipeline Rispetto alla seguente porzione di codice determinare –quali sono le dipendenza RAW –i relativi diagrammi temporali di esecuzione, indicando con una freccia gli eventuali forwarding Cosa succede al ciclo 6 di clock rispetto nei due processori? add $5, $6, $7 and $2, $5, $8 lw $3, a($0) or $2, $3, $4 sub $10, $11, $12

Arch. Elab. - S. Orlando 3 Pipeline con forwarding (A) Al ciclo 6: IF in stallo (ripete sub ), ID in stallo (ripete or ), in EXE passa bolla ( nop ), MEM esegue lw, WB esegue and add $5, $6, $7 and $2, $5, $8 lw $3, a($0) or $2, $3, $4 sub $10, $11, $12 Tempo IFEXEMEMWBID add $5, $6, $7 and $2, $5, $8 lw $3, a($0) or $2, $3, $4 sub $10, $11, $12 IFEXEMEMWBID IFEXEMEMWBID IFEXEMEMWBID IFEXEMEMWBID CC 6

Arch. Elab. - S. Orlando 4 Pipeline senza forwarding (B) Al ciclo 6: IF esegue or, ID esegue lw, EXE esegue and, in MEM passa bolla ( nop ), in WB passa bolla ( nop ) add $5, $6, $7 and $2, $5, $8 lw $3, a($0) or $2, $3, $4 sub $10, $11, $12 Tempo IFEXEMEMWBID add and lw or sub IFEXEMEMWB CC 6 ID IF EXEMEMWBID IFEXEMEMWBID IF EXEMEMWBID

Arch. Elab. - S. Orlando 5 Pipeline, CPI, e stalli di accesso alla memoria Considerando che $s3 = 1024, $t0 = 0, e $s0 contiene un indirizzo di memoria (vettore), stabilire cosa calcola questa porzione di codice MIPS Il loop viene eseguito per 1024/4 = 256 volte Il programma incrementa di $t3 tutti gli elementi di un vettore di 256 interi (puntato da $s0) add $t1, $s0, $t0 lw $t2, 0($t1) add $t2, $t2, $t3 sw $t2, 0($t1) addi $t0, $t0, 4 Start: bne $t0, $s3, start

Arch. Elab. - S. Orlando 6 Pipeline, CPI, e stalli di accesso alla memoria Determinare le dipendenze sui dati tra le istruzioni del loop add $t1, $s0, $t0 lw $t2, 0($t1) add $t2, $t2, $t3 sw $t2, 0($t1) addi $t0, $t0, 4 Start: bne $t0, $s3, start

Arch. Elab. - S. Orlando 7 Pipeline, CPI, e stalli di accesso alla memoria Determinare le dipendenze sui dati tra le istruzioni del loop add $t1, $s0, $t0 lw $t2, 0($t1) add $t2, $t2, $t3 sw $t2, 0($t1) addi $t0, $t0, 4 Start: bne $t0, $s3, start Le dipendenze in rosso sono di tipo RAW Le dipendenze in verde sono di tipo WAR

Arch. Elab. - S. Orlando 8 Pipeline, CPI, e stalli di accesso alla memoria Considerando che la pipeline a 5 stadi è fornita di forwarding, mentre la tecnica per risolvere le criticità sul controllo è il salto ritardato (delay slot = 1) –inserire il nop nel branch delay slot –inserire i nop per forzare gli stalli dovuti alle dipendenze sui dati –calcolare il CPI senza considerare i tempi di riempimento/svuotamento della pipeline add $t1, $s0, $t0 lw $t2, 0($t1) add $t2, $t2, $t3 sw $t2, 0($t1) addi $t0, $t0, 4 Start: bne $t0, $s3, start 9 cicli di clock per ogni ciclo del loop, costituito da 6 istruzioni loop eseguito per 256 volte CPI = num_cicli / IC = (9 * 256) / (6 * 256) = 9/6 = 1.5 nop

Arch. Elab. - S. Orlando 9 Pipeline, CPI, e stalli di accesso alla memoria Spostare istruzioni significative al posto delle nop, ovvero nel load delay slot, e nel branch delay slot –per il load delay slot, scegliere un’istruzione indipendente e successiva nel corpo del loop –per il branch delay slot, scegliere un’istruzione indipendente e precedente nel corpo del loop Qual è il numero di cicli totali per eseguire il loop ? E il nuovo CPI? add $t1, $s0, $t0 lw $t2, 0($t1) add $t2, $t2, $t3 sw $t2, 0($t1) addi $t0, $t0, 4 Start: bne $t0, $s3, start –Cicli totali = 6 * 256 = 1536 CPI = 1

Arch. Elab. - S. Orlando 10 Loop unrolling Si assuma la semplice pipeline a 5 stadi, con delay branch, forwarding e hazard detection unit Si consideri il loop seguente: Senza considerare gli stalli dovuti alla memoria, e quelli di riempimento della pipeline, determinare il numero di cicli totali per l’esecuzione del loop se all’inizio: $s1 = 8X Verificare se sono possibili ottimizzazioni ri-schedulando le istruzioni lw $t0, 0($s1) add $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -4 bne $s1, $0, loop loop:

Arch. Elab. - S. Orlando 11 Loop unrolling Inseriamo le nop opportune (nel branch delay slot, e per forzare gli eventuali stalli dovuti alle lw e al bne ): 8 cicli per ogni iterazione del loop Poiché $s1 viene decrementato di 4 in 4 ad ogni ciclo, fino a diventare uguale a zero all’uscita del loop –2X iterazioni, per un totale di 8*2X = 16X cicli totali A causa delle dipendenze sopra illustrate, l’ordine di esecuzione delle istruzioni non può essere modificato, e quindi non è possibile ottimizzare il codice lw $t0, 0($s1) add $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -4 bne $s1, $0, loop loop: nop Le dipendenze in rosso sono di tipo RAW Le dipendenze in verde sono di tipo WAR nop

Arch. Elab. - S. Orlando 12 Loop unrolling Consideriamo la seguente ottimizzazione, nota come loop unrolling: –poiché il ciclo viene eseguito per un numero pari di volte (2X), possiamo srotolare il loop originale –il corpo del nuovo loop dovrà eseguire 2 iterazioni del vecchio loop –verranno usati registri temporanei diversi per accedere gli elementi del vettore puntati da $s1 lw $t0, 0($s1) add $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -8 bne $s1, $0, loop loop: lw $t1, -4($s1) add $t1, $t1, $s2 sw $t1, -4($s1)

Arch. Elab. - S. Orlando 13 Loop unrolling Consideriamo dipendenze le data flow tra le istruzioni del body del loop, e vediamo quali sono gli ordinamenti imposte da tali dipendenze: lw $t0, 0($s1) add $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -8 bne $s1, $0, loop lw $t1, -4($s1) add $t1, $t1, $s2 sw $t1, -4($s1) Le dipendenze in rosso sono di tipo RAW Le dipendenze in verde sono di tipo WAR

Arch. Elab. - S. Orlando 14 Loop unrolling Considerando le dipendenze, effettuare il ri-schedulazione delle istruzioni per tentare di riempire i delay slot dovuti alle istruzioni bne e lw Ricalcolare il numero di cicli totali per ogni iterazione del loop, e lo speedup rispetto al caso senza loop unrolling lw $t0, 0($s1) add $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -8 bne $s1, $0, loop loop: lw $t1, -4($s1) add $t1, $t1, $s2 sw $t1, -4($s1) lw $t0, 0($s1) add $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -8 bne $s1, $0, loop loop: lw $t1, -4($s1) add $t1, $t1, $s2 sw $t1, -4($s1) nop Vecchio loop eseguito per 2X volte - Nuovo loop eseguito per X volte Ogni iterazione del nuovo loop eseguita in 10 cicli, per un totale di 10X cicli Speedup = cicli senza loop unrolling / cicli con loop unrolling = 16X/10X  1.6 nop