Ottimizzazione statica del codice per processori pipelined Canella Matteo & Miglioli Filippo.

Slides:



Advertisements
Presentazioni simili
Dalla scrittura all’esecuzione
Advertisements

Università degli Studi di Napoli Federico II Facoltà di Ingegneria Dipartimento di Informatica e Sistemistica Corso di Sistemi ad elevate prestazioni –
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
Il Linguaggio Macchina
Architetture dei Calcolatori (Lettere j-z) Il Processore (2)
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 17/03/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Funzioni.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
File.
Alcuni esercizi e domande per il compitino quali sono le parti principali dellarchitettura di von Neumann? citare le caratteristiche salienti della RAM.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Caratteristiche principali dell’architettura del processore MIPS
Caratteristiche principali dell’architettura del processore MIPS
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Il processore PD32 Set Istruzioni.
Gestione delle subroutine
Criticità sui dati Consideriamo una sequenza di 5 istruzioni
Criticità sui dati (1° esempio)
Criticità sul controllo
Criticità sui dati (esempio da fare on line)
Criticità sul controllo
Criticità sul controllo
Introduzione alla programmazione lll
Il livello Microarchitetturale
Il Linguaggio Macchina
1 Generazione codice Daniela Briola Lorena Bellino.
Codifica di algoritmi linguaggio macchina vs programmazione strutturata Lab Programmazione - turno /2006.
Calcolo di resistenze viste da vari punti
EasyDLX Università degli Studi di Bologna Facoltà di Ingegneria Un linguaggio che realizza un sottoinsieme dellInstruction Set Architecture del DLX Realizzato.
Sistemi Complessi di reti sequenziali Pipeline
Architetture dei Calcolatori (Lettere j-z ) Il Processore
PROBLEMA ALGORITMO PROGRAMMA LINGUAGGI di PROGRAMMAZIONE
Architettura del calcolatore
Architettura degli Elaboratori II (canale P-Z) Istruzioni di controllo Dott. Franco Liberati.
Strutture di Controllo
Calcolatori Elettronici Introduzione al Pipelining Francesco Lo Presti Rielaborate da Salvatore Tucci.
Introduzione al linguaggio assembly del microprocessore a parte
ARCHITETTURA DI UN ELABORATORE
Sistemi di elaborazione e trasmissione delle informazioni
Università degli Studi di Napoli “Federico II” Facoltà di Ingegneria Dipartimento di Informatica e Sistemistica Corso di Sistemi ad elevate prestazioni.
Il linguaggio Fortran 90: 3. Procedure e Funzioni
Arch. Elab. - S. Orlando 1 Esercitazione su Instruction Level Parallelism 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
Calcolatori Elettronici Introduzione al Pipelining
Vettori (a una dimensione)
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)
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
Calcolatori Elettronici Valutazione delle Prestazioni Francesco Lo Presti Rielaborate da Salvatore Tucci.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
UNIVERSITÀ DEGLI STUDI DI BOLOGNA
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
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Struttura Fondamentale degli Elaboratori Elaboratore –È un sistema numerico –È un sistema automatico –È un sistema a programamzione registrabile –Ha una.
Come esegue le istruzioni il microprocessore Un’istruzione è sempre composta da più operazioni elementari.
Il Processore Il processore è la componente dell’unità centrale che elabora le informazioni contenute nella memoria principale L’elaborazione avviene eseguedo.
Click to add text L’ Unità di Elaborazione. Struttura : Unità di controllo: coordina attività CPU ALU: unità aritmetico-logica, esegue operazioni tra.
I Microprocessori Unità 3 del libro Internet Working Sistemi e reti.
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi Simulazione di lettura e scrittura concorrente Tecnica dell’accelerated cascading Lezione.
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi Interconnessione tramite reti Lezione n°6.
Transcript della presentazione:

Ottimizzazione statica del codice per processori pipelined Canella Matteo & Miglioli Filippo

Lo scopo Scopo dellesperienza è quello di ottimizzare staticamente il codice di un programma in linguaggio assembly DLX. Per fare questo si è utilizzato il simulatore WinDLX, che permette la visualizzazione della pipeline, dei registri interni, della memoria e dello stato di esecuzione delle singole istruzioni.

I programmi test Per lesercitazione sono stati implementati due programmi. Il primo, più semplice, esegue una moltiplicazione di due numeri mediante somme parziali. Il secondo realizza lordinamento di un vettore di interi in memoria.

Il primo programma È riportata a fianco la schematizzazione in metalinguaggio del primo programma. Le variabili A e B sono i due moltiplicandi. C viene utilizzata come variabile di supporto nella quale viene memorizzato il risultato parziale. Viene sommato A a se stesso B volte. C = 0; WHILE B > 0 DO C = C + A; B = B – 1; END_WHILE END. r

Il primo programma Vediamo ora come è stato realizzato in assembly. I due operandi vengono memorizzati in due locazioni di memoria successive, la prima delle quali puntata dal registro R1. Il risultato delloperazione viene riscritto sulla locazione puntata da R1. LB R2, 0(R1) ;LEGGI A LB R3, -15(R1) ;LEGGI B LB R4,#0 BEQZ R3, FINE LOOP:ADD R4,R2,R4 SUBUI R3,R3,#1 BNEZ R3,LOOP SB 0(R1),R4 FINE:TRAP 0

Simulazione primo programma In figura vediamo il clock cycle diagram della parte del programma interessata da stalli. Si notano due stalli. 1° Stallo: Il branch è condizionato dal valore del registro R3. Tale valore è caricato nel registro dalla memoria mediante listruzione LB. Il processore ritarda il decode del branch (stallando la pipeline) perché il valore di R3 è disponibile solo dopo laccesso in memoria dellistruzione LB. Non è necessario attendere il Write Back perché è presente un feedback che rende il dato subito disponibile. 2° Stallo: il branch necessita del valore di R3, che però è disponibile solo dopo la fase di Execute dellistruzione precedente (SUBUI). Il processore quindi introduce un ciclo di stallo. Anche in questo caso viene utilizzato il meccanismo del feedback, non occorre attendere il WB sui registri. Si nota inoltre un ciclo perso dopo il branch, questo perché il simulatore usa una politica Predict Untaken, cioè esegue il fetch dellistruzione successiva prima di sapere se il salto verrà fatto.

Simulazione primo programma Sono stati inseriti nelle locazioni di memorie 0x000000ff e 0x000000f0 gli operandi, nellesempio 3 e 4. Come si vede, il risultato (0x0c) viene memorizzato nella locazione 0x000000ff. Lesecuzione di questo codice richiede 25 Clock Cycles.

Ottimizzazione primo programma 1° Stallo: il primo conflitto è stato risolto invertendo le due istruzioni di lettura in memoria (LB) in modo tale che il registro R3 sia pronto per listruzione di branch. LB R3, -15(R1) LB R2, 0(R1) LB R4,#0 BEQZ R3, FINE LOOP:SUBUI R3,R3,#1 ADD R4,R2,R4 BNEZ R3,LOOP SB 0(R1),R4 FINE:TRAP 0 2° Stallo: è stato risolto spostando il decremento di R3 sopra lADD.

Ottimizzazione primo programma Vediamo che sono stati risolti tutti i conflitti. Lunico ciclo perso rimane quello dopo il branch. Questo problema non si può risolvere se non utilizzando una politica branch delayed, non supportata dal simulatore WinDLX. Lesecuzione di questo codice richiede 21 Clock Cycles.

Il secondo programma FOR I = INIZ TO (INIZ + LUNG - 1) FOR J = I + 1 TO (INIZ + LUNG) IF A[I] > A[J] THEN SOS = A[J]; A[J] = A[I]; A[I] = SOS; END_IF; A lato è riportata la schematizzazione in metalinguaggio. Scopo del programma è ordinare un vettore di interi (A) contenuto in memoria a partire dalla locazione INIZ e di lunghezza LUNG.

Il secondo programma LOOP:LB R8,0(R1) ;R1 PUNTATORE ALLA PRIMA LOCAZIONE SUBI R4,R1,#15 ;R4 PUNTA ALLA LOCAZIONE SUCCESSIVA R1 SUBI R7,R2,#1 ;R7 È IL CONTATORE DEL LOOP SECONDARIO LOOP1:LB R9,0(R4) SLEU R5,R8,R9 ;R8 E MINORE UGUALE DI R9? BNEZ R5,DOPO ;SE SI SALTA A DOPO SB 0(R10),R8 ;SCAMBIO R8 CON R9 SE R8 È MAGGIORE DI R9 SB 8(R10),R9 ;LA LOCAZIONE PUNTATA DA R10 E LA SUCCESSIVA LB R9,0(R10) ;SERVONO COME SUPPORTI PER LO SCAMBIO LB R8,8(R10) SB 0(R1),R8 ;SCRITTURA IN MEMORIA DEI DATI SCAMBIATI. SB 0(R4),R9 DOPO:SUBI R4,R4,#15 SUBI R7,R7,#1 BNEZ R7,LOOP1 SUBI R1,R1,#15 SUBI R2,R2,#1 ;R2 È LA DIMENSIONE DELL'ARRAY, SERVE COME SUBI R11,R2,#1 ;CONTATORE BNEZ R11,LOOP TRAP 0 R1 punta alla prima locazione di memoria (corrispondente alla variabile INIZ in metalinguaggio). R4 punta alla locazione di memoria successiva. R2 contiene la lunghezza del vettore (LUNG). Il programma esegue dei confronti (SLEU) e degli scambi (utilizzando due locazioni di supporto) fino ad ordinare lintero vettore.

Simulazione secondo programma 1° Stallo: Listruzione di confronto SLEU aspetta che venga caricata nel registro R9 il contenuto della locazione puntata da R4. Questo causa uno stallo nella pipeline. 2° Stallo: Il branch condizionato aspetta R5, contenente il risultato del confronto. Notiamo due cicli di stallo: il primo è causato dallistruzione precedente (SLEU), il secondo è quello relativo allistruzione branch. Senza lottimizzazione, il programma viene eseguito in 188 cicli di clock

Ottimizzazione secondo programma LOOP:LB R8,0(R1) SUBI R4,R1,#15 SUBI R7,R2,#1 LOOP1:LB R9,0(R4) SLEU R5,R8,R9 BNEZ R5,DOPO SB 0(R10),R8 SB 8(R10),R9 LB R9,0(R10) LB R8,8(R10) SB 0(R1),R8 SB 0(R4),R9 DOPO:SUBI R4,R4,#15 BNEZ R7,LOOP1 SUBI R1,R1,#15 SUBI R2,R2,#1 SUBI R11,R2,#1 BNEZ R11,LOOP TRAP 0 SUBI R7,R7,#1 Soluzione 1° stallo: listruzione SUBI R7,R7,#1 che veniva eseguita alla fine ciclo interno LOOP1, appena prima del branch, viene spostata allinizio del ciclo, in modo da porsi tra le due istruzioni che provocavano lo stallo. E possibile fare questo spostamento in quanto è indifferente eseguire il decremento del contatore allinizio o alla fine del loop. Lesecuzione richiede così 168 clock cycle.

Ottimizzazione secondo programma LOOP:LB R8,0(R1) SUBI R4,R1,#15 SUBI R7,R2,#1 LOOP1:LB R9,0(R4) SUBI R7,R7,#1 SLEU R5,R8,R9 BNEZ R5,DOPO SB 0(R10),R8 SB 8(R10),R9 LB R9,0(R10) LB R8,8(R10) SB 0(R1),R8 SB 15(R4),R9 DOPO: BNEZ R7,LOOP1 SUBI R1,R1,#15 SUBI R2,R2,#1 SUBI R11,R2,#1 BNEZ R11,LOOP TRAP 0 SUBI R4,R4,#15 Soluzione 2° stallo: lo spostamento del puntatore alla memoria R4 verso la cella successiva che veniva fatto alla fine del ciclo interno, può essere spostato allinizio di esso. Viene cioè messo tra le due istruzioni che provocavano lo stallo. E necessario modificare loffset di accesso alla cella puntata dal registro R4 nellistruzione che riscrive in memoria i dati cambiati. Questo perché ho decrementato R4 prima di usarlo. Lesecuzione richiede così 158 clock cycle

Simulazione secondo programma 3° Stallo: nello scambio delle due celle di memoria, listruzione di scrittura SB che venga scritto il contenuto del registro R8 dallistruzione precedente. Questo provoca uno stallo. 4° Stallo: il branch aspetta la fine dellistruzione di decremento del registro R8, provocando uno stallo nella pipeline

Ottimizzazione secondo programma LOOP:LB R8,0(R1) SUBI R4,R1,#15 SUBI R7,R2,#1 LOOP1:LB R9,0(R4) SUBI R7,R7,#1 SLEU R5,R8,R9 SUBI R4,R4,#15 BNEZ R5,DOPO SB 0(R10),R8 SB 8(R10),R9 LB R9,0(R10) LB R8,8(R10) SB 0(R1),R8 SB 15(R4),R9 DOPO:BNEZ R7,LOOP1 SUBI R1,R1,#15 SUBI R2,R2,#1 SUBI R11,R2,#1 BNEZ R11,LOOP TRAP 0 SB 15(R4),R9 SB 0(R1),R8 Soluzione 3° stallo: Vengono scambiate le due istruzioni di scrittura in memoria (SB) dei registri scambiati (R8, R9). Il programma impiega così 151 cicli di clock

Ottimizzazione secondo programma LOOP:LB R8,0(R1) SUBI R4,R1,#15 SUBI R7,R2,#1 LOOP1:LB R9,0(R4) SUBI R7,R7,#1 SLEU R5,R8,R9 SUBI R4,R4,#15 BNEZ R5,DOPO SB 8(R10),R9 SB 0(R10),R8 LB R9,0(R10) LB R8,8(R10) SB 15(R4),R9 SB 0(R1),R8 DOPO:BNEZ R7,LOOP1 SUBI R1,R1,#15 SUBI R2,R2,#1 SUBI R11,R2,#1 BNEZ R11,LOOP TRAP 0 SUBI R1,R1,#15 Soluzione 4° stallo: sposto il decremento del puntatore R1 prima del branch. Ho risolto così tutti gli stalli. Il programma ottimizzato viene eseguito in 147 cicli di clock, cioè 41 cicli in meno della versione non ottimizzata.

Simulazione secondo programmma Vediamo a lato leffetto dellordinamento in memoria. Il vettore parte dallindirizzo 0xff e occupa 5 posizioni. Vediamo che il vettore [7,1,5,3,2] diventa [1,2,3,5,7], ordinato.