Analisi Interprocedurale

Slides:



Advertisements
Presentazioni simili
Capitolo 4 Logica sequenziale
Advertisements

Punti Fissi.
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Algoritmi e Strutture Dati (Mod. B)
Procedure In assembler.
Le funzioni UD. 8 – Lorganizzazione dei programmi p. 309 LS Tron 4TC 06/07.
Traduzione guidata dalla sintassi
STRUTTURE DATI AVANZATE Abstract Data Types Presentazione realizzata da: Mario Capurso – Altamura Michele Doronzo Aldo Lamacchia.
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Metodologie di Programmazione = decomposizione basata su astrazioni
Esempi di progetto di circuiti seq. asincroni
Introduzione al linguaggio C
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Generazione di Piani attraverso Grafi di Pianificazione
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Ordini Parziali - Reticoli
Dataflow Analysis. Tino CortesiTecniche di Analisi di Programmi 2 Dataflow Analysis Il punto di partenza per una dataflow analysis è una rappresentazione.
General Framework. Tino CortesiTecniche di Analisi di Programmi 2 Framework Nonostante le differenze tra le analisi viste finora (Reaching Definitions,
Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.
Model Checking.
Semantica Denotazionale
A TAXONOMY OF OBFUSCATING TRASFORMATIONS Funes Daniel Salvador Carlo Corso di Analisi e Verifica dei Programmi 2006/2007.
Tino CortesiTecniche di Analisi di Programmi 1 Ricorsione Aggiungiamo funzioni ricorsive (in una sola variabile, per semplicità). La funzione semantica.
Funzioni definite dall’utente
Informatica B Allievi Elettrici AA La progettazione per raffinamenti successivi.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 15 Marzo 2013.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Eliana minicozzi linguaggi L1 Lezione3.
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Soluzione Esercizio - Classe Vettore
Semantica denotazionale algebrica di LW Idea intuitiva: i valori che vogliamo denotare sono: gli statements sono funzioni di trasformazioni di stato (interno)
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
nome: sequenza di caratteri usata per denotare un oggetto
mosaic manipola oggetti primitivi (ruota e unisci) regole:
FUNZIONI: IL MODELLO APPLICATIVO 1) Valutazione, nellenvironment corrente, del simbolo che denota il nome della funzione; 2) Valutazione, nellenvironment.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
1 Premessa In questo progetto sono stati implementati tutti gli esercizi di Complementi di esercizi di Reti logiche. Elenco degli esercizi svolti: 1.Registro.
(Laboratorio di ) Sistemi Informatici Avanzati
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
Algoritmo Ordinamento di 3 Numeri
- prof. V. Riboldi - SOTTOPROGRAMMI IN TPASCAL METODO TOP DOWN.
Il linguaggio Fortran 90: 3. Procedure e Funzioni
1 Implementazione di (ambiente e) memoria nel linguaggio imperativo.
FUNZIONI Dichiarazione: Definizione:
La ricorsione.
Informatica 3 V anno.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Allievi Elettrici - AA Le funzioni ricorsive in C
Sottoprogrammi e funzioni
Olimpiadi di Informatica 2010 Giornate preparatorie
Lez.6 (13/14)Elementi di Programmazione1 Lezione 6 Funzioni Passaggio di parametri.
Lo stato  I domini della semantica restano invariati: Ide, Val (Int  { ,  }) Loc (locazioni di memoria), FunctDecl. ma definiamo 2 funzioni: Loc :
Flusso Massimo Applicazione di algoritmi
Esercitazione 4 Chiamate di procedure Claudia Raibulet
Esercizio 14 – chiamata di una procedura Il codice deve: Passare due parametri alla procedura ‘salva’ Questa procedura deve salvare i due parametri nel.
Flusso di Costo Minimo Trasformazioni Equivalenti e Trasformazioni Inverse Viene data la seguente rete di flusso, in cui i valori riportati vicino agli.
Convenzioni chiamate a procedure Riassunto Pratico.
Flusso di Costo Minimo Applicazione di algoritmi: Cammini Minimi Successivi (SSP) Esercizio 1 Sia data la seguente rete di flusso, in cui i valori riportati.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2014.
STRUMENTI UTILIZZATI PASSAGGI ESEGUITI Per prima cosa abbiamo disegnato con un filo da spago e del gesso il cerchio segnando il centro. Successivamente.
Transcript della presentazione:

Analisi Interprocedurale

Tecniche di Analisi di Programmi Chiamata di procedura Le tecniche di analisi dataflow viste finora non consideravano chiamate di funzioni o procedura: sono analisi intraprocedurali. Si parla di analisi interprocedurale quando si tengono in considerazione anche chiamate di procedure e funzioni Consideriamo chiamate di procedura del tipo: [call p(a,z)]lclr dove: a è un parametro di ingresso z è un parametro di output lc è l’etichetta che segna l’ingresso della procedura p lr è l’etichetta che segna l’uscita dalla procedura p Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Flusso Nell’analisi intraprocedurale abbiamo usato il termine “flusso” per denotare insiemi di coppie di etichette (archi del grafo). Consideriamo la chiamata [call p(a,z)]lclr dove la procedura p è definita da proc p(val x, res y) islin S endlout; Nel grafo di flusso interprocedurale bisognerà considerare due archi particolari: (lc; lin) è il flusso che corrisponde alla chiamata di una procedura in lc, dove lin è il punto di entrata nel corpo della procedura chiamata (lout; lr) è il flusso che corrisponde all’uscita dal corpo della procedura in lout, ed al ritorno del controllo alla procedura chiamante (nel punto lr). Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Esempio La dichiarazione di una procedura è del tipo proc p(val x, res y) islin S endlout; proc fib(val: z,u; res: v) is1 if [z<3]2 then [v:=u+1]3 else [call fib(z-1,u,v)]45 ; [call fib(z-2,v,v)]67 end8; [call fib(x,0,y)]910 Tino Cortesi Tecniche di Analisi di Programmi

Grafo di flusso (animazione) is 1 [call fib(x,0,y)]910 [z<3]2 [call fib(z-1,u,v)]45 [v:=u+1]3 [call fib(z-2,v,v)]67 end8 Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Grafo di flusso is 1 [call fib(x,0,y)]910 [z<3]2 [call fib(z-1,u,v)]45 [v:=u+1]3 [call fib(z-2,v,v)]67 end8 Tino Cortesi Tecniche di Analisi di Programmi

Equazioni dell’analisi (naif) Una formulazione naif delle equazioni di analisi dataflow potrebbe essere una semplice estensione di quella formulata per l’analisi intraprocedurale: i se l Î E GA(l)= lub { GAœ(l’) | (l’, l) Î F o (l’; l) Î F} altrimenti GAœ(l)= fl ( GA(l) ) Tino Cortesi Tecniche di Analisi di Programmi

Cammini non percorribili Poiché consideriamo tutti i possibili flussi (l’, l) Î F o (l’; l) Î F l’analisi risulta essere corretta. Ma niente ci impedisce nell’analisi di considerare il cammino [9, 1, 2, 4, 1, 2, 3, 8, 10] che non corrisponde a nessuna esecuzione del programma. L’analisi risulterebbe poco precisa! Tino Cortesi Tecniche di Analisi di Programmi

Cammini non percorribili is 1 [call fib(x,0,y)]910 [z<3]2 [call fib(z-1,u,v)]45 [v:=u+1]3 [call fib(z-2,v,v)]67 end8 Il cammino [9, 1, 2, 4, 1, 2, 3, 8, 10] non corrisponde a nessuna esecuzione del programma Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Inter-flusso Definiamo il concetto di flusso interprocedurale: inter-flusso = {(lc, lin ,lout ,lr) | il programma P contiene sia [call p(a,z)]lclr che proc p(val x, res y) islin S endlout } Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Flusso e inter-flusso [call fib(x,0,y)]910 [call fib(z-2,v,v)]67 [call fib(z-1,u,v)]45 end8 [v:=u+1]3 [z<3]2 is 1 flusso = {(1,2), (2,3), (2,4), (3,8), (4;1), (5,6), (6;1), (7,8), (8;5), (8;7), (8;10), (9;1)} inter-flusso= {(9,1,8,10), (4,1,8,5), (6,1,8,7)} Tino Cortesi Tecniche di Analisi di Programmi

Rendere esplicito il contesto Per estendere il Framework Generale all’analisi interprocedurale dovremo: codificare l’informazione sui cammini (contesto) estendere lo spazio delle proprietà al contesto estendere le funzioni di transfer introducendo in particolare due funzioni di trasfer in corrispondenza di ogni flusso interprocedurale (lc, lin ,lout ,lr) Tino Cortesi Tecniche di Analisi di Programmi

Rendere esplicito il contesto Data un’istanza (L, F, F, E, i, f) del framework monotono, costruiamo una istanza del framework monotono arricchito che tiene in considerazione il contesto: (L, F, F, E, i, f ), dove L = D ® L ( ad es. D= codifica dei cammini) le funzioni di transfer in F sono monotone la funzione f mappa etichette in F e E in funzioni di transfer in F : per ogni l in E o F, d in L e ogni d in D, la funzione di trasfer fl è definita da: fl (d)(d) = fl (d(d)) Tino Cortesi Tecniche di Analisi di Programmi

Il frammento intraprocedurale EAœ(l)= fl ( EA(l) ) per tutte le etichette l che non sono etichette di una chiamata di procedura, ovvero che non compaiono come primo o quarto elemento di una tupla EA(l)= { EAœ(l’) | (l’, l) Î F o (l’; l)Î F} ilE per tutte le etichette l, incluse quelle che sono etichette di una chiamata di procedura Tino Cortesi Tecniche di Analisi di Programmi

Il frammento interprocedurale Restano da formulare le equazioni relative alle chiamate di procedura. In corrispondenza di ogni dichiarazione di procedura del tipo proc p(val x, res y) islin S endlout abbiamo due funzioni di transfer: flin , flout: (D ® L) ® (D ® L) che possono essere ad es. l’identità: flin(d) = flout(d) = d Tino Cortesi Tecniche di Analisi di Programmi

Il frammento interprocedurale In corrispondenza ad ogni chiamata di procedura (interflusso) (lc, lin ,lout ,lr) abbiamo due funzione di transfer: flc(d): (D ® L) ® (D ® L) flc,lr(d,d’): (D ® L) ´ (D ® L) ® (D ® L) E per ogni inter-flusso (lc, lin ,lout ,lr) avremo in più le equazioni EAœ(lc)= flc( EA(lc) ) EAœ(lr)= flc,lr( EA(lc), EA(lr) ) Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Chiamata di procedura proc p(val x, res y) islin flc(d) d [call p(a,z)]lclr d d’ endlout flc,lr(d,d’) Tino Cortesi Tecniche di Analisi di Programmi

Peephole Optimizations

guardando dallo spioncino... Un modo relativamente semplice per migliorare la qualità del codice nativo prodotto da un compilatore semplice è quello di far girare un peephole optimizer. Un peephole optimizer lavora considerando una finestrella di alcune istruzioni alla ricerca di istruzioni subottimali equivalenti. L’insieme dei patterns da osservare sono in gran parte frutto di euristiche Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Esercizio ognuno dei seguenti frammenti di codice può essere ottimizzato. in quale codice lo trasformereste? che nome dareste a queste trasformazioni? (ce ne sono di 6 tipi!) quali analisi dataflow potrebbero supportarle? r2:= 3 * 2 r2:= 4 r3:= r1 + 2 r2:= 2 * r3 r2:= 4 r3:= r1 + r2 r3:= *r3 (assumendo r2 dead) r1:=3 r2:= r1*2 r2:= r1 * 5 r2:= r2 + r3 r3:= r1 * 5 r2:= r1 r3:= r1 + r2 r2:= 5 r1:= r2 * 2 r3:= r4 / 2 r1:= r1 + 0 r2 := r2 * 1 r2:= r1 + 5 i := r2 r3:= i r4:=r3 * 3 Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Constant Folding il peephole optimizer può spesso accorgersi che alcuni calcoli richiesti a tempo di esecuzione possono essere realizzati a tempo di compilazione r2:= 3 * 2 diventa r2:=6 Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Constant Propagation A volte possiamo dire che una variabile in un certo punto del programma avrà sempre un certo valore costante. Possiamo quindi sostituire le occorrenze della variabile con occorrenze di tale costante r2:= 4 r2:=4 r3:= r1 + r2 diventa r3:=r1+4 diventa r3:=r1+4 r2:= 2 * r3 r2:= 2*r3 r2:= 2*r3 Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Constant Propagation r2:= 4 r3:= r1 + 4 r3:= r1 + r2 diventa r3:= *r3 diventa r3:= *(r1+4) r3:= *r3 (assumendo che r2 sia dead) r1:=3 diventa r1:= 3 diventa r1:= 3 r2:= r1*2 r2:= 3*2 r2:= 6 Tino Cortesi Tecniche di Analisi di Programmi

Common Subexpression Elimination Quando la stessa espressione viene calcolata più di una volta nello spioncino dell’ottimizzatore, si può spesso eliminare la seconda computazione r2:= r1 * 5 r4:= r1*5 r2:= r2 + r3 diventa r2:= r4 + r3 r3:= r1 * 5 r3:= r4 Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Copy Propagation Anche quando non si può dire che il contenuto di una variabile sarà costante, si può osservare talvolta che la variabile b contiene sempre lo stesso valore della variabile a. In questo caso si può rimpiazzare l’uso di b con la variabile a fino a che né a né b vengono modificate r2:= r1 r2:= r1 r3:= r1 + r2 diventa r3:= r1+r1 diventa r3:= r1+r1 r2:= 5 r2:= 5 r2:= 5 Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Strenght Reduction Alcune istruzioni aritmetiche sono più “costose” di altre (ad esempio la moltiplicazione o la potenza rispetto all’addizione), e possono essere sostituite da operazioni meno costose. In particolare, la moltiplicazione e la divisione per potenze di 2 possono essere rimpiazzate, rispettivamente, con addizioni e shifts: r1:= r2 * 2 diventa r1:= r2 + r2 r3:= r4 / 2 diventa r3 >> 1 Tino Cortesi Tecniche di Analisi di Programmi

Eliminazione di codice inutile Istruzioni come le seguenti possono essere tout court eliminate: r1:= r1 + 0 diventa Æ r2 := r2 * 1 Tino Cortesi Tecniche di Analisi di Programmi

Loads e stores ridondanti il peephole optimizer può spesso accorgersi che il valore prodotto da una istruzione di load è già disponibile in un registro r2:= r1 + 5 r2:=r1+5 i := r2 diventa i:= r2 r3:= i r4:= r2 * 3 r4:=r3 * 3 Tino Cortesi Tecniche di Analisi di Programmi

D = Stringhe di chiamata Per completare l’analisi di un programma rimane da specificare l’insieme D che contiene l’informazione di contesto, ed il valore iniziale i. Ad esempio, possiamo prendere D = Lab* i cui valori sono sequenze di etichette. Per ogni tupla di inter-flusso (lc, lin ,lout ,lr) flc(d)([d, lc])= flc(d(d)) dove [d,lc] denota il cammino ottenuto appendendo lc a d e flc : L® L specifica come la proprietà viene modificata. flc,lr(d,d’)(d)= flc,lr(d(d), d’([d, lc])) e flc,lr : L´L® L permette di combinare l’informazione d di contesto con d’ . Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Analisi dei segni Consideriamo un’analisi volta a determinare il segno delle variabili intere. Possiamo considerare il seguente dominio Sign:{-,0,+} Possiamo considerare il reticolo L = Ã(Var ® Sign) che descrive insiemi di stati astratti s che mappano variabili nei loro segni possibili Ad esempio, se Var={x,y}, un elemento di L può essere s = { {x®+, y®+}, {x®-, y®-}} che dice “le variabili x e y sono entrambe positive oppure entrambe negative” Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Funzioni di transfer La funzione di transfer fl quando l è un comando di assegnamento del tipo [x:= a]l può essere scritta come: fl (Y) = È{ fl (s) | s Î Y} dove Y Í (Var ® Sign) fl (s) = {s[x/s] | s ÎA[a](s)} A: AExp ® (Var ® Sign) ® Ã(Sign) A specifica l’analisi di espressioni aritmetiche Per esercizio, specificare completamente l’analisi dei segni (intraprocedurale e interprocedurale) Tino Cortesi Tecniche di Analisi di Programmi

Tecniche di Analisi di Programmi Esercizio Specificare nei dettagli l’analisi dei segni, a partire dagli esempi 2.36 e 2.38 del libro Nielson - Nielson - Hankin (pag. 89-95), modificando in modo opportuno le equazioni della Constant Propagation Analysis Analizzare l’esempio di analisi interprocedurale di Constant Propagation dell’analizzatore PAG/WWW Tino Cortesi Tecniche di Analisi di Programmi