Esercitazione su Instruction Level Parallelism

Slides:



Advertisements
Presentazioni simili
Università degli Studi di Napoli Federico II Facoltà di Ingegneria Dipartimento di Informatica e Sistemistica Corso di Sistemi ad elevate prestazioni –
Advertisements

RICERCA IN UN VETTORE.
RICERCA IN UN VETTORE. Metodi basati sul confronto di chiavi Si confrontano gli elementi del vettore V con lelemento (chiave K) che si vuole ricercare.
Ottimizzazione statica del codice per processori pipelined Canella Matteo & Miglioli Filippo.
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.
Architetture dei Calcolatori (Lettere j-z) Il Processore (2)
Caratteristiche principali dell’architettura del processore MIPS
Caratteristiche principali dell’architettura del processore MIPS
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
Architetture dei Calcolatori (Lettere j-z ) Il Processore
Calcolatori Elettronici Introduzione al Pipelining Francesco Lo Presti Rielaborate da Salvatore Tucci.
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.
Arch. Elab. - S. Orlando 1 Esercitazione su Instruction Level Parallelism Salvatore Orlando.
Arch. Elab. - S. Orlando 1 Progetto del processore e supporto del processore al SO (interruzioni – eccezioni) Salvatore Orlando.
Calcolatori Elettronici Introduzione al Pipelining
Calcolatori Elettronici Il Processore
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.
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.
I Microprocessori Unità 3 del libro Internet Working Sistemi e reti.
7. Strutture di controllo Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
IL PROCESSORE I MICROPROCESSORI INTEL Il microprocessore è un circuito integrato dotato di una struttura circuitale in grado di effettuare un determinato.
Programmazione: Iterazione Esistono tre tipi di iterazione fondamentali e vedremo la corrispondenza dei relativi diagrammi a blocchi e la loro traduzione.
Parte 2 Programmare in Matlab – I Sommario: Introduzione: m-file Strutture condizionali e cicli –Istruzione “if” + Operatori logici in MatlabIstruzione.
Elementi fondamentali dell’ Architettura di di un elaboratore elettronico.
CONTROLLO DELLA CONCORRENZA
© 2007 SEI-Società Editrice Internazionale, Apogeo
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Il Sistema Operativo Gestione dei Processi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
PROGRAMMAZIONE SHELL -
LE ARCHITETTURE NON VON NEUMANN
7. Strutture di controllo Ing. Simona Colucci
Script Marco D. Santambrogio –
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Cammino dei Dati (Datapath)
Architetture non Von Neumann
CICLO DO – WHILE LINGUAGGIO C.
Usi (meno scontati) della visita DFS
ALU (Arithmetic Logic Unit)
Controllo e microprogrammazione
Il CLOCK Il funzionamento della CPU è regolato da un clock di sistema, questo perché la CPU è una macchina sequenziale, quindi è necessario la presenza.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Instruction Level Parallelism
Strutture di Controllo
Azione delle istruzioni
I numeri relativi DEFINIZIONE. Si dicono numeri relativi tutti i numeri interi, razionali e irrazionali dotati di segno (positivo o negativo). ESEMPI Numeri.
Vari e semplici programmi.
A = InputBox("Immetti un numero")
Azione delle istruzioni
Esercizio.
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Fondamenti di Informatica
APPUNTI SUL LINGUAGGIO C
Lezione Terza Primi passi di programmazione
Informatica CdL Scienze e Tecniche Psicologiche a.a
La programmazione strutturata
Progetto del processore e supporto del processore al SO (interruzioni – eccezioni) Salvatore Orlando.
Transcript della presentazione:

Esercitazione su Instruction Level Parallelism Salvatore Orlando

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

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

Pipeline senza forwarding (B) add $5, $6, $7 and $2, $5, $8 lw $3, a($0) or $2, $3, $4 sub $10, $11, $12 CC 6 Tempo add IF ID EXE MEM WB and IF ID <ID> <ID> EXE MEM WB lw IF <IF> <IF> ID EXE MEM WB or IF ID <ID> <ID> EXE MEM WB sub IF <IF> <IF> ID EXE MEM WB Al ciclo 6: IF esegue or, ID esegue lw, EXE esegue and, in MEM passa bolla (nop), in WB passa bolla (nop)

Pipeline, CPI e stalli Considerando che $s3 = 1024, $t0 = 0, e $s0 contiene un indirizzo di memoria (vettore), stabilire cosa calcola questa porzione di codice MIPS Start: add $t1, $s0, $t0 lw $t2, 0($t1) add $t2, $t2, $t3 sw $t2, 0($t1) addi $t0, $t0, 4 bne $t0, $s3, Start 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)

Pipeline, CPI e stalli Determinare le dipendenze sui dati tra le istruzioni del loop Start: add $t1, $s0, $t0 lw $t2, 0($t1) add $t2, $t2, $t3 sw $t2, 0($t1) addi $t0, $t0, 4 bne $t0, $s3, start

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

Pipeline, CPI e stalli 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 Start: add $t1, $s0, $t0 lw $t2, 0($t1) nop add $t2, $t2, $t3 sw $t2, 0($t1) addi $t0, $t0, 4 nop bne $t0, $s3, start nop 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

Pipeline, CPI e stalli 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

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 loop: lw $t0, 0($s1) add $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -4 bne $s1, $0, loop

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 loop: lw $t0, 0($s1) Le dipendenze in rosso sono di tipo RAW Le dipendenze in verde sono di tipo WAR nop add $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -4 nop bne $s1, $0, loop nop

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 loop: lw $t0, 0($s1) add $t0, $t0, $s2 sw $t0, 0($s1) lw $t1, -4($s1) add $t1, $t1, $s2 sw $t1, -4($s1) addi $s1, $s1, -8 bne $s1, $0, loop

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) lw $t1, -4($s1) add $t1, $t1, $s2 add $t0, $t0, $s2 sw $t0, 0($s1) sw $t1, -4($s1) Le dipendenze in rosso sono di tipo RAW Le dipendenze in verde sono di tipo WAR addi $s1, $s1, -8 bne $s1, $0, loop

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 loop: loop: lw $t0, 0($s1) nop lw $t0, 0($s1) add $t0, $t0, $s2 lw $t1, -4($s1) sw $t0, 0($s1) add $t0, $t0, $s2 lw $t1, -4($s1) nop add $t1, $t1, $s2 add $t1, $t1, $s2 sw $t0, 0($s1) sw $t1, -4($s1) sw $t1, -4($s1) addi $s1, $s1, -8 addi $s1, $s1, -8 nop nop bne $s1, $0, loop nop bne $s1, $0, loop 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