Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.

Slides:



Advertisements
Presentazioni simili
- le Medie la Moda la Mediana
Advertisements

Strutture dati per insiemi disgiunti
Ricorrenze Il metodo di sostituzione Il metodo iterativo
Master Bioinformatica 2002: Grafi Problema: cammini minimi da tutti i vertici a tutti i vertici Dato un grafo pesato G =(V,E,w), trovare un cammino minimo.
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
Sistema di riferimento sulla retta
Algoritmi e Programmazione
Frontespizio Economia Monetaria Anno Accademico
La scelta del paniere preferito
1 la competenza alfabetica della popolazione italiana CEDE distribuzione percentuale per livelli.
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
Meccanica 8 31 marzo 2011 Teorema del momento angolare. 2° eq. Cardinale Conservazione del momento angolare Sistema del centro di massa. Teoremi di Koenig.
I sistemi di riferimento
1 Tavolo del Patto per la crescita intelligente, sostenibile e inclusiva Il ricorso agli ammortizzatori sociali nei territori colpiti dagli eventi sismici.
Definizione e caratteristiche
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.
Cammini minimi con sorgente singola
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,
Analisi e Verifica di Programmi Laboratorio di AVP Corso di Laurea in Informatica AA Tino Cortesi.
Semantica Denotazionale
Semantiche dei linguaggi di programmazione
Semantica Denotazionale
Ordini Parziali - Reticoli
Esercitazioni su circuiti combinatori
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Algebra di Boole ed elementi di logica
1 Capitolo 2: Semplificazione, Ottimizzazione e Implicazione.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Algoritmo di Ford-Fulkerson
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Programmazione 1 9CFU – TANTE ore
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Algoritmi e Strutture Dati (Mod. A)
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
1 Implementazione di Linguaggi 2 Implementazione di Linguaggi 2 Federico Bernardi Type checking 2° parte Type checking 2° parte - Equivalenza di type expressions.
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Algoritmi.
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
Strutture di controllo in C -- Flow Chart --
Num / 36 Lezione 9 Numerosità del campione.
Analisi di Immagini e Dati Biologici
19 Lezione 21/5/04 Composizione dell'immagine 1 COMPOSIZIONE DELLIMMAGINE.
Equazioni differenziali Applicazioni Economiche
1ROL - Richieste On Line Ente pubblico 5ROL - Richieste On Line.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
CODIFICA Da flow-chart a C++.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
Passo 3: calcolo del costo minimo
RB-insert(T, z) // z.left = z.right = T.nil Insert(T, z) z.color = RED // z è rosso. Lunica violazione // possibile delle proprietà degli alberi // rosso-neri.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
14 marzo 2002 Avvisi:.
Bando di Residenza Cap Scheda ENTE 3ROL - Richieste On Line.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Cammini minimi da un sorgente
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Equazioni differenziali e applicazioni economiche
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Transcript della presentazione:

Reaching Definitions

Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento (definizioni) che sono attuali quando la computazione raggiunge quel punto? Un punto del programma può uccidere una definizione: se il comando associato è un assegnamento, vengono uccisi gli altri assegnamenti alla stessa variabile Un punto del programma può generare nuove definizioni.

Tino CortesiTecniche di Analisi di Programmi 3 Formalizzazione La proprietà di interesse può essere rappresentata da insiemi di coppie {(x,p) | x è una variabile del programma p è un punto del programma} Il significato della coppia (x,p) nellinsieme associato al punto q è che lassegnamento di x nel punto p raggiunge il punto q.

Tino CortesiTecniche di Analisi di Programmi 4 Si tratta di unanalisi in avanti (forward analysis) Il valore iniziale è = {(x,?) | x è una variabile del programma} Percorrendo il grafo di flusso, ad ogni punto dovremo togliere le definizioni uccise e aggiungere quelle generate.

Tino CortesiTecniche di Analisi di Programmi 5 Specifica Lanalisi può essere specificata dalle seguenti equazioni: Per ogni punto p del programma... se p è il punto iniziale RD entry (p)= U { RD exit (q) | q precede p} RD exit (p)= (RD entry ( p ) \ kill RD (p) ) U gen RD (p)

Tino CortesiTecniche di Analisi di Programmi 6 RD entry (1)= {(n,?),(m,?)} RD exit (1) = {(n,?),(m,?)} RD entry (2)= {(n,?),(m,?)} RD exit (2)= {(n,?),(m,2)} RD entry (3)= RD exit (2) U RD exit (5) ={(n,?),(n,5),(m,2),(m,4)} RD exit (3)= {(n,?),(n,5),(m,2),(m,4)} RD entry (4)= {(n,?),(n,5),(m,2),(m,4)} RD exit (4)= {(n,?),(n,5),(m,4)} RD entry (5)= {(n,?),(n,5),(m,4)} RD exit (5)= {(n,5),(m,4)} RD entry (6)= {(n,?),(n,5),(m,2),(m,4)} RD exit (6)= {(n,?),(n,5),(m,2),(m,4)} input n; m:= 1; n>1; m:= m*n; n:= n-1; output m;

Tino CortesiTecniche di Analisi di Programmi 7 Algoritmo Input: grafo di controllo del programma Output : RD Strategia: Passo 1 (inizializzazione): assegna linsieme vuoto a RD entry (p) per ogni p RD entry (1) = = {(x,?) | x è una variabile del programma}

Tino CortesiTecniche di Analisi di Programmi 8 Passo 2 (iterazione) novità=TRUE; while novità novità = FALSE; per ogni punto p del programma new= U{f(RD,q) | (q,p) è un arco del grafo} if RD entry (p) != new novità = TRUE; RD entry (p) = new; dove f(RD,q)= (RD entry (q) \ kill RD (q) ) U gen RD (q)

Tino CortesiTecniche di Analisi di Programmi 9 Esempio RD entry (1)= {(n,?), (m,?)} RD entry (2)= {(n,?), (m,?)} RD entry (3)= {(n,?), (n,5), (m,2), (m,4)} RD entry (4)= {(n,?), (n,5), (m,4)} RD entry (5)= {(n,5), (m,4)} RD entry (6)= {(n,?), (n,5), (m,2), (m,4)} [ input n; ] 1 [ m:= 1; ] 2 [ while n>1 do ] 3 [ m:= m * n; ] 4 [ n:= n - 1; ] 5 [ output m; ] 6

Constant Folding

Tino CortesiTecniche di Analisi di Programmi 11 Constant Folding Constant Folding è una tecnica di trasformazione source-to-source: sulla base dellinformazione disponibile dallanalisi, il programma viene modificato in un programma più efficiente. Ci sono due ingredienti fondamentali: Sostituire luso di una variabile in certe espressioni con una costante se è noto che il valore di quella variabile assumerà sempre quel valore costante Semplificare le espressioni valutandole parzialmente: si possono valutare (a tempo di compilazione) sottoespressioni che non contengono variabili

Tino CortesiTecniche di Analisi di Programmi 12 Trasformazioni Trasformazioni di tipo Constant Folding possono essere realizzate sulla base di una Reaching Definitions Analysis. Dato un programma S*, consideriamo la minima soluzione RD della Reaching Definition Analysis per S*. Ogni comando S di S* può essere sostituito da un comando migliore S. Esprimiamo questo con la notazione: RD | S S

Tino CortesiTecniche di Analisi di Programmi 13 Regola 1 1. RD | [x := a] [x := a[y n]] se y FV(a) (y,?) RD entry ( ) per ogni (z, ) RD entry ( ): ( z=y [...] è [y:=n] ) Questa regola dice che una variabile può essere sostituita da una costante se si sa che la variabile avrà sempre quel valore. a[y n] significa che nellespressione a la variabile y è sostituita con il valore n FV(a) sono le variabili libere nellespressione a.

Tino CortesiTecniche di Analisi di Programmi 14 Regola 2 2. RD | [x := a] [x := n] se FV(a)= a Num il valore di a è n Questa regola dice che una espressione può essere valutata parzialmente se non contiene nessuna variabile libera, in quanto in questo caso assumerà sempre lo stesso valore

Tino CortesiTecniche di Analisi di Programmi 15 Regole di composizione 3. RD | S S RD | S ; S S ; S 4. RD | S S RD | S ; S S ; S Queste regole dicono come la trasformazione di un sottocomando (in questo caso di un comando sequenziale) può essere estesa allintero comando

Tino CortesiTecniche di Analisi di Programmi 16 Regole di composizione 5. RD | S S RD | if [b] then S else S if [b] then S else S 6. RD | S S RD | if [b] then S else S if [b] then S else S 7. RD | S S RD | while [b] do S while [b] do S

Tino CortesiTecniche di Analisi di Programmi 17 Esempio Il programma [x:=10] 1 ; [y:=x+10] 2 ; [z:=y+10] 3 ; La minima soluzione della Reaching Definition Analysis di questo programma è: RD entry (1) = {(x,?),(y,?),(z,?)} RD exit (1) = {(x,1),(y,?),(z,?)} RD entry (2) = {(x,1),(y,?),(z,?)} RD exit (2) = {(x,1),(y,2),(z,?)} RD entry (3) = {(x,1),(y,2),(z,?)} RD exit (3) = {(x,1),(y,2),(z,3)}

Tino CortesiTecniche di Analisi di Programmi 18 Utilizzando RD così calcolato, possiamo applicare le regole di trasformazione ed ottenere: RD | [x:=10] 1 ; [y:=x+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=10+10] 2 ; [z:=y+10] 3 qui si applica la regola 1, con a=(x+10) RD entry (2) = {(x,1),(y,?),(z,?)} RD exit (2) = {(x,1),(y,2),(z,?)} RD | [y := a] [y := a[x 10]] se x FV(a) (x,?) RD entry ( ) per ogni (z, ) RD entry ( ): ( z=x [...] è [x:=10] )

Tino CortesiTecniche di Analisi di Programmi 19 RD | [x:=10] 1 ; [y:=x+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=10+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=y+10] 3 qui si applica la regola 2, con a=(10+10) RD | [y := a] [y := n] se FV(a)= a Num il valore di a è n

Tino CortesiTecniche di Analisi di Programmi 20 RD | [x:=10] 1 ; [y:=x+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=10+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=20+10] 3 qui si riapplica la regola 1, con a=(y+10) RD | [z := a] [z := a[y 20]] se y FV(a) (y,?) RD entry ( ) per ogni (w, ) RD entry ( ): ( w=y [...] è [y:=20] )

Tino CortesiTecniche di Analisi di Programmi 21 RD | [x:=10] 1 ; [y:=x+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=10+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=20+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=30] 3 qui si riapplica la regola 2 con a=(20+10) RD | [z := a] [z := n] se FV(a)= a Num il valore di a è n

Tino CortesiTecniche di Analisi di Programmi 22 Questo esempio mostra che in realtà si è interessati a realizzare una serie di trasformazioni: RD | S S S... S k In teoria, una volta calcolato S bisognerebbe rieseguire la Reaching Definition Analysis su S, e così via. Ma siamo fortunati: se RD è una soluzione della Reaching Def. Analysis per S i e RD | S i S i+1, allora RD è anche una soluzione della Reaching Def. Analysis per S i+1. Infatti, la trasformazione si applica a elementi che non sono osservati dalla Reaching Def. Analysis.

Available Expressions

Tino CortesiTecniche di Analisi di Programmi 24 Avaliable Expressions Analysis Vogliamo determinare, per ogni punto del programma, quali espressioni sono sicuramente già state valutate, e non sono state successivamente modificate. Ad esempio [x:=a+b] 1 ; [y:=a*b] 2 ; while [y>a+b] 3 do ([a:=a+1] 4 ; [x:=a+b] 5 ) Quando la computazione raggiunge il punto 3, lespressione a+b è già available, in quanto è già stata valutata precedentemente (in 1 prima della prima chiamata di while, ed in 5 per le chiamate successive) e non ha bisogno di essere valutata di nuovo.

Tino CortesiTecniche di Analisi di Programmi 25 Espressioni uccise e generate Diciamo che unespressione è uccisa (kill AE ) in un punto del programma se una qualsiasi delle variabili che vi compaiono viene modificata Diciamo che una espressione è generata (gen AE ) in un punto del programma se viene valutata in quel punto e nessuna delle variabili che vi compaiono viene modificata nello stesso punto. [x:=a+b] 1 ; [y:=a*b] 2 ; while [y>a+b] 3 do ([a:=a+1] 4 ; [x:=a+b] 5 ) nkill AE (n)gen AE (n) 1 {a+b} 2 {a*b} 3 {a+b} 4{a+b, a*b,a+1} 5 {a+b}

Tino CortesiTecniche di Analisi di Programmi 26 Specifica Lanalisi può essere specificata dalle seguenti equazioni: Per ogni punto p del programma... se p è il punto iniziale AE entry (p)= { AE exit (q) | (q,p) è un arco del grafo} AE exit (p)= (AE entry ( p ) \ kill AE (p)) U gen AE (p)

Tino CortesiTecniche di Analisi di Programmi 27 se p è il punto iniziale AE entry (p)= { AE exit (q) | (q,p) arco } AE exit (p)= (AE entry ( p ) \ kill AE (p)) U gen AE (p) nkill AE (n)gen AE (n) 1 {a+b} 2 {a*b} 3 {a+b} 4{a+b, a*b,a+1} 5 {a+b} AE entry (1)= AE entry (2)=AE exit (1) AE entry (3)=AE exit (2) AE exit (5) AE entry (4)=AE exit (3) AE entry (5)=AE exit (4) AE exit (1)= AE entry (1) U {a+b} AE exit (2)= AE entry (2) U {a*b} AE exit (3)= AE entry (3) U {a+b} AE exit (4)= AE entry (4) - {a+b, a*b, a+1} AE exit (5)= AE entry (5) U {a+b} Equazioni

Tino CortesiTecniche di Analisi di Programmi 28 Soluzione nAE entry (n)AE exit (n) 1 {a+b} 2 {a+b, a*b} 3{a+b} 4 5 {a+b} AE entry (1)= AE entry (2)=AE exit (1) AE entry (3)=AE exit (2) AE exit (5) AE entry (4)=AE exit (3) AE entry (5)=AE exit (4) AE exit (1)= AE entry (1) U {a+b} AE exit (2)= AE entry (2) U {a*b} AE exit (3)= AE entry (3) U {a+b} AE exit (4)= AE entry (4) - {a+b, a*b, a+1} AE exit (5)= AE entry (5) U {a+b}

Tino CortesiTecniche di Analisi di Programmi 29 Risultato [x:=a+b] 1 ; [y:=a*b] 2 ; while [y>a+b] 3 do ([a:=a+1] 4 ; [x:=a+b] 5 ) Anche se lespressione a è ridefinita allinterno del ciclo (in 4), lespressione a+b è sempre disponibile allentrata del ciclo (in 3). Viceversa, lespressione a*b è disponibile alla prima entrata nel ciclo, ma viene uccisa prima della successiva iterazione (in 4). nAE entry (n)AE exit (n) 1 {a+b} 2 {a+b, a*b} 3{a+b} 4 5 {a+b}

Very Busy Expressions

Tino CortesiTecniche di Analisi di Programmi 31 Very Busy Expressions Analysis Diciamo che una espressione è very busy alluscita da un certo punto del grafo di flusso di un programma se in qualsiasi cammino che parte da quel punto lespressione viene usata prima che una qualsiasi variabile che occorra in essa sia stata ridefinita Ad esempio if [a>b] 1 then ([x:=b-a] 2 ; [y:=a-b] 3 ) else ([y:=b-a] 4 ; [x:=a-b] 5 ) Le espressioni a-b e b-a sono entrambe very busy nel punto 1.

Tino CortesiTecniche di Analisi di Programmi 32 A cosa serve? Linformazione derivata da una very busy expression analysis può essere utilizzata per valutare lespressione ad un certo punto del grafo e memorizzarne il valore per un uso successivo. Questa ottimizzazione è anche chiamata hoisting di una espressione Ad esempio if [a>b] 1 then ([x:=b-a] 2 ; [y:=a-b] 3 ) else ([y:=b-a] 4 ; [x:=a-b] 5 ) Le espressioni a-b e b-a possono essere hoisted prima del comando condizionale: a questo punto il test non è più necessario e il programma può essere trasformato in uno più efficiente.

Tino CortesiTecniche di Analisi di Programmi 33 Espressioni uccise e generate Diciamo che unespressione è uccisa (kill VB ) in un punto del programma se una qualsiasi delle variabili che vi compaiono viene modificata (kill VB =kill AE ) Diciamo che una espressione è generata (gen VB ) in un punto del programma se appare in quel punto (gen VB !=gen AE ). if [a>b] 1 then ([x:=b-a] 2 ; [y:=a-b] 3 ) else ([y:=b-a] 4 ; [x:=a-b] 5 ) nkill VB (n)gen VB (n) 1 2 {b-a} 3 {a-b} 4 {b-a} 5 {a-b}

Tino CortesiTecniche di Analisi di Programmi 34 Specifica Lanalisi può essere specificata dalle seguenti equazioni: Per ogni punto p del programma... se p è un punto finale VB exit (p)= { VB entry (q) | (p,q) è un arco del grafo} VB entry (p)= (VB exit ( p ) \ kill VB (p)) U gen VB (p)

Tino CortesiTecniche di Analisi di Programmi 35 se p è il punto finale VB exit (p)= { VB entry (q) | (p,q) arco } VB entry (p)= (VB exit ( p ) \ kill VB (p)) U gen VB (p) VB entry (1)=VB exit (1) VB entry (2)=VB exit (2) U {b-a} VB entry (3)={a-b} VB entry (4)=VB exit (4) U {b-a} VB entry (5)={a-b} VB exit (1)= VB entry (2) VB entry (4) VB exit (2)= VB entry (3) VB exit (3)= VB exit (4)= VB entry (5) VB exit (5)= Equazioni nkill VB (n)gen VB (n) 1 2 {b-a} 3 {a-b} 4 {b-a} 5 {a-b} a>b x:=b-a y:=a-b y:=b-a x:=a-b

Tino CortesiTecniche di Analisi di Programmi 36 Risultato if [a>b] 1 then ([x:=b-a] 2 ; [y:=a-b] 3 ) else ([y:=b-a] 4 ; [x:=a-b] 5 ) Lanalisi è backward: segue il grafo di flusso dalle foglie alla radice: una espressione è very busy alluscita di un punto del grafo se è very busy allentrata di ogni punto immediatamente successivo Nessuna espressione è very busy alluscita di un punto finale del grafo. nVB entry (n)VB exit (n) 1{a-b, b-a} 2 {a-b} 3 4{a-b, b-a}{a-b} 5 a>b x:=b-a y:=a-b y:=b-a x:=a-b