Analiză de flux de date 29 octombrie 2012

Documente similare
Analiză statică Analiza fluxului de date 23 octombrie 2014

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Microsoft Word - cap1p4.doc

E_d_Informatica_sp_MI_2015_bar_02_LRO

Limbaje de Programare Curs 6 – Functii de intrare-iesire

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Limbaje de ordinul I LOGICA DE ORDINUL I Un limbaj L de ordinul I este format din: o mulţime numărabilă V = {v n n N} de variabile; conectorii şi ; pa

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

PowerPoint-Präsentation

Facultatea de Matematică Anul II Master, Geometrie Algebrică Mulţimi algebrice ireductibile. Dimensiune 1 Mulţimi ireductibile Propoziţia 1.1. Fie X u

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Paradigme de programare

Cursul 8 Funcţii analitice Vom studia acum comportarea şirurilor şi seriilor de funcţii olomorfe, cu scopul de a dezvălui o proprietate esenţială a ac

Dorel LUCHIAN Gabriel POPA Adrian ZANOSCHI Gheorghe IUREA algebră geometrie clasa a VIII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Limbaje Formale, Automate si Compilatoare

Prelegerea 3 În această prelegere vom învăţa despre: Clase speciale de latici: complementate. modulare, metrice, distributive şi 3.1 Semi-distributivi

Microsoft Word - Curs_09.doc

Paradigme de Programare

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft Word - CarteC.doc

Elemente de aritmetica

Slide 1

E_d_Informatica_sp_SN_2014_bar_10_LRO

Grafuri - Concepte de baza. Tipuri de grafuri. Modalitati de reprezentare

1

Programarea şi utilizarea calculatoarelor

Slide 1

CURBE BÉZIER În CAGD se utilizează adesea curbele polinomiale, adică acele curbe definite de o parametrizare polinomială: C : [a, b] R 3 C(t) = (x(t),

Microsoft Word - Algoritmi genetici.docx

ALGORITHMICS

PowerPoint Presentation

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Cursul 12 (plan de curs) Integrale prime 1 Sisteme diferenţiale autonome. Spaţiul fazelor. Fie Ω R n o mulţime deschisă şi f : Ω R n R n o funcţie de

Retele Petri si Aplicatii

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

PowerPoint Presentation

Microsoft Word - 2 ES RO.doc

Şcoala ………

Limbaje de Programare Curs 8 – Fisiere

Microsoft Word - CarteC.doc

Logică și structuri discrete Mulțimi Casandra Holotescu

Microsoft Word - _arbori.docx

D.Rusu, Teoria măsurii şi integrala Lebesgue 6 MĂSURA LEBESGUE Cursul 5 Teorema 6.26 Există submulţimi ale lui R care nu sunt măsurabile Lebesgue. Dem

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Slide 1

Curs7

Metode de programare Proiectarea algoritmilor

Top

Ministerul Educatiei, Cercetarii si Tineretului Grup Scolar Gh. Asachi Galati Proiect pentru obtinerea certificatului de competente profesionale Speci

Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor

METODE NUMERICE ÎN INGINERIE

Ecuatii si sisteme de ecuatii neliniare 1 Metoda lui Newton Algorithm 1 Metoda lui Newton pentru ecuaţia f(x) = 0. Date de intrare: - Funcţia f - Apro

Probleme date la examenul de logică matematică şi computaţională. Partea a II-a Claudia MUREŞAN Universitatea din Bucureşti Facultatea de Matematică ş

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

Grafuri neorinetate Aplicatii 1 Care este numărul maxim de componente conexe pe care le poate avea un graf neorientat cu 20 noduri şi 12 muchii? a. 6

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Microsoft Word - Lucrarea_10_t.doc

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

tehnologii web

PAS cap. 2: Reprezentări rare p. 1/35 Prelucrarea avansată a semnalelor Capitolul 2: Reprezentări rare Bogdan Dumitrescu Facultatea de Automatică şi C

B

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

1. Găsiți k numerele cele mai apropiate într-un şir nesortat Dându-se un şir nesortat și două numere x și k, găsiți k cele mai apropiate valori de x.

Distanţa euclidiană (indusă de norma euclidiană) (în R k ). Introducem în continuare o altă aplicaţie, de această dată pe produsul cartezian R k XR k,

Microsoft Word - Pocatilu_IE3_2006.doc

Microsoft Word - Curs_08.doc

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

MergedFile

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Subiectul 1

Gheorghe IUREA Adrian ZANOSCHI algebră geometrie clasa a VII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA 45 Matematică. Clasa a VII-

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Ingineria Sistemelor de Programare

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Microsoft Word - O problema cu bits.doc

FIŞA DISCIPLINEI

Modelarea si Simularea Sistemelor de Calcul

I

Curs8

Microsoft Word - TIC5

Cursul 7 Formula integrală a lui Cauchy Am demonstrat în cursul precedent că, dacă D C un domeniu simplu conex şi f : D C o funcţie olomorfă cu f cont

PROGRAMARE ORIENTATA PE OBIECTE

Microsoft Word - Tema 06 - Convertoare analog-numerice.doc

PPSD

Microsoft Word - CarteC.doc

Şiruri de numere reale Facultatea de Hidrotehnică Universitatea Tehnică Gheorghe Asachi Iaşi, 2015 Analiză Matematică Lucian Maticiuc 1 / 29

ExamView Pro - Untitled.tst

ALGORITHMICS

SUBPROGRAME

Aero-BCD, , Prof. L. Costache & M. Olteanu Notițe de Adrian Manea Seminar 5 Șiruri și serii de funcții. Serii de puteri 1 Șiruri de funcții D

COMENTARII FAZA JUDEŢEANĂ, 9 MARTIE 2013 Abstract. Personal comments on some of the problems presented at the District Round of the National Mathemati

TEORIA MĂSURII Liviu C. Florescu Universitatea Al.I.Cuza, Facultatea de Matematică, Bd. Carol I, 11, R Iaşi, ROMANIA, e mail:

Examenul de bacalaureat 2012

Transcriere:

Analiză de flux de date 29 octombrie 2012

Analiză statică: definiţie O analiză a codului sursă (fără a executa programul), cu scopul de a determina proprietăţi ale programului sursă. (in principal corectitudinea, dar şi performanţă, etc.) Complementare analizelor dinamice (prin rularea codului) Exemple de proprietăţi: variabile neiniţializate (particular: pointeri nuli) atribuiri nefolosite vulnerabilităţi de cod (excepţii, depăşiri de indici), etc. De obicei, analizele statice sunt legate de semantica programului uneori: şi analize limitate la structura (sintactică) a codului Istoric: (sub)domeniu legat de compilatoare: în special pentru optimizare mai recent: în proiectarea limbajelor; pentru detectarea de erori

Structura generală a unei analize O analiză statică stabileşte o afirmaţie (proprietate, rezultat) valabilă pentru toate căile de executie dar: numărul de căi de execuţie într-un program e potenţial infinit nu putem scrie un algoritm care să parcurgă toate căile trebuie algoritmi cu altă structură (şi uneori aproximări) Exemplu / analogie: drumuri minime într-un graf. Pt. drumul minim între v 0 şi v 1 putem încerca: v 0 v 1, v 0 v 2 v 1,... v 0 v n 1 v 1, v 0 v 2 v 3 v 1, v 0 v 2 v 4 v 1,... v 0 v n 2 v n 1 v 1, v 0 v 2 v 3 v 4 v 1,...

Analogie: drumuri minime într-un graf for (k = 0; k < n; ++k) for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) if (d[i][k] + d[k][j] < d[i][j]) d[i][j] = d[i][k] + d[k][j] sau, generic: calculează o valoare (aici: lungimea unui drum) cât timp există o schimbare (punct intermediar cu drum mai scurt) ciclul se opreşte când o iteraţie nu mai produce vreo schimbare

Analiza fluxului de date Tehnici cu originea în domeniul compilatoarelor folosite pentru generarea de cod (alocarea de regiştri) şi optimizarea de cod (propagarea constantelor, factorizarea expresiilor comune, detectarea variabilelor nefolosite, etc.) Aceleaşi tehnici pot fi aplicate şi la probleme de analiză de cod (într-un cadru foarte general) Ideea de bază: construirea grafului de flux de control al programului urmărirea modului în care proprietăţile de interes se modifică pe parcursul programului (la traversarea nodurilor / muchiilor grafului)

Graful de flux de control al programului Reprezentare în care: nodurile sunt instrucţiuni muchiile indică secvenţierea instrucţiunilor (inclusiv salturi) putem avea: noduri cu: un singur succesor (ex. atribuiri), mai mulţi succesori (instrucţiuni de ramificaţie) mai mulţi predecesori (reunirea după ramificaţie) Obs.: Alternativ, dar mai puţin folosit: nodurile sunt puncte din program (valori pentru PC) muchiile sunt instrucţiuni cu efectele lor

Notaţii G = (N, E) : graful de flux de control (N : noduri; E : muchii) s : o instrucţiune de program (nod în graful de flux de control) entry, exit : punctele de intrare şi de ieşire din program in(s) : mulţimea muchiilor care au s ca destinaţie out(s) : mulţimea muchiilor care au s ca sursă src(e), dest(e) : instrucţiunea sursă şi destinaţie a muchiei e pred(s) : mulţimea predecesorilor instrucţiunii s succ(s) : mulţimea predecesorilor instrucţiunii s Scriem ecuaţii de flux de date: descriu cum se modifică valorile analizate (dataflow facts) de la o instrucţiune la alta. Avem nevoie de valoarea analizată la intrarea instrucţiunii s (indice in ) şi la ieşirea instrucţiunii (indice out )

Exemplu: Reaching definitions Care sunt toate atribuirile (definiţiile) care pot atinge punctul curent (înainte ca valorile atribuite să fie suprascrise)? Elementele de interes sunt perechi: (variabilă, linie de definiţie). Pentru fiecare instrucţiune (identificată cu eticheta ei l) ne interesează valoarea dinainte RD in (s) şi de după RD out (s) Nodul iniţial din graf nu e atins de nici o definiţie: RD out (entry) = {(v,?) v V } O atribuire l : v e şterge toate definiţiile anterioare (pt. variabila v, nu alte variabile) şi introduce ca definiţie instrucţiunea curentă RD out (l : v e) = (RD in (s) \ {(v, s )}) {(v, l)} Definiţiile de la intrarea unei instrucţiuni sunt reuniunea definiţiilor de la ieşirea instrucţiunilor precedente: RD in (s) = s pred(s) RD out(s )

Exemplu: Live variables analysis În fiecare punct de program, ce variabile vor avea valoarea folosită pe cel puţin una din căile posibile din acel punct? (analiză utilă în compilatoare pentru alocarea regiştrilor) Funcţia de transfer: LV in (s) = (LV out (s) \ write(s)) read(s) O variabilă e live înainte de s dacă e citită de s sau elive după s fără a fi scrisă de s sensul analizei e înapoi Operaţia de combinare (meet): { LV out (s) = s succ(s) LV in(s ) dacă succ(s) = altfel combinarea făcută prin uniune (may, pe cel puţin o cale) Calculul: algoritm de tip worklist care face modificări pornind de la valorile iniţiale până nu mai apar schimbări se atinge un punct fix

Exemplu: Available expressions În fiecare punct de program, care sunt expresiile a căror valoare a fost calculată anterior, fără să se modificat, pe toate căile spre acel punct? (dacă valoarea se ţine minte într-un registru, nu trebuie recalculată) Funcţia de transfer: AE out (s) = (AE in (s) \ {e V (e) write(s) }) {e Subexp(s) V (e) write(s) = } (expresiile de la intrarea în s care nu au variabile modificate de s, şi orice expresii calculate în s fără a li se modifica variabilele) Operaţia de combinare (meet): { AE in (s) = s pred(s) AE out(s ) dacă pred(s) = altfel combinarea e făcută prin intersecţie (must, pe toate căile); analiza e înainte

Exemplu: Very busy expressions Care sunt expresiile care trebuie evaluate pe orice cale din punctul curent înainte ca valoarea vreunei variabile din ele să se modifice? evaluarea se poate muta în punctul curent, înainte de ramificaţii o analiză înapoi, şi de tip universal (must) VBE in (s) = (VBE out (s) \ {e V (e) write(s) }) Subexp(s) { VBE out (s) = s succ(s) VBE in(s ) dacă succ(s) = altfel

Proprietăţi analizate (dataflow facts) Concret: analizăm diverse proprietăţi, de ex. valoarea unei variabile într-un punct de program sau intervalul de valori pentru o variabilă sau mulţimi de variabile (live), expresii (available, very busy), definiţii posibile pentru o valoare (reaching definitions), etc. Abstract: o mulţime D de valori pentru o proprietate (dataflow facts) Restricţie: D e o mulţime finită

Funcţii de transfer Concret: instrucţiunile determină modificări ale stării programului. Valoarea unei variabile după o instrucţiune e o funcţie a valorii de la începutul instrucţiunii. Abstract: Fiecare instrucţiune s are asociată o funcţie de transfer F (s) : L L care determină modul în care valoarea proprietăţii la începutul instrucţiunii e modificată de instrucţiune: Prop out (s) = F (s)(prop in (s)) (pentru analize înainte), sau invers (pentru analize înapoi) Restricţie: punem condiţia ca funcţiile de transfer să fie monotone: x y f (x) f (y) (dacă ştim mai multe despre argument, atunci şi despre rezultat) Caz particular: bitvector frameworks: laticea e o mulţime de părţi P(D), funcţii de transfer monotone şi de forma: F (s)(v) = (v \ kill(s)) gen(s) (v = dataflow fact, gen/kill(s) = informaţia generată/eliminată în s)

Ecuaţii de flux de date Exemplu: pentru analize înainte: Prop out (s) = F (s)(prop in (s)) Prop in (s) = s pred(s) Prop out (s ) unde prin am reprezentat efectul combinării informaţiilor (meet) pe mai multe căi (ar putea fi sau ) Iniţial, e cunoscută valoarea Prop out (entry). Pentru analize înapoi, se schimbă rolul între in şi out, şi e cunoscută valoarea lui Prop in (exit).

Soluţia: Algoritm de tip worklist Pentru calculul soluţiei la sistemul de ecuaţii de mai sus: algoritmi iterativ care propagă modificările în sensul analizei foreach s N do Prop in (s) = /* no info */ Prop in (entry) = init /* in functie de analiza */ W = {entry} while W choose s W W = W \ {s} Prop in (s) = s pred(s) Prop out (s ) Prop out (s) = F (s)(prop in (s)) if change then forall s succ(s) do W = W {s }

Terminare: condiţia de punct fix Terminarea analizei e garantată dacă funcţia de transfer e monotonă: x y f (x) f (y), ceea ce implică faptul că proprietăţile calculate se modifică în mod monoton. Def: Punct fix pentru o funcţie f : o valoare x pt. care f (x) = x Teorema lui Tarski garantează că o funcţie monotonă pe o latice completă are un punct fix minimal şi un punct fix maximal. Algoritmul worklist calculează punctul fix minimal dat fiind sistemul de funcţii de transfer.

Meet over all paths Dorim să calculăm efectul combinat al instrucţiunilor programului: pentru p = s 1 s 2... s n şir de instrucţiuni definim F (p) = F (s n )... F (s 2 ) F (s 1 ) şi dorim să calculăm: p Path(Prog) F p (entry) Dar algoritmul iterativ combină efectele la fiecare punct de întălnire înainte de a calcula mai departe. Funcţiile f fiind monotone, avem: f (x y) f (x) f (y) deci analiza pierde din precizie Pentru funcţiile de transfer distributive avem chiar: f (x) f (y) = f (x y) Se demonstrează că în acest caz algoritmul iterativ (care generează o soluţie de punct fix) e echivalent cu calculul soluţiei prin combinarea valorilor pe toate căile posibile (meet over all paths). combinarea diverselor căi de execuţie nu pierde informaţie Cele 4 exemple date (live variables, etc.) sunt distributive.

Clasificare a analizelor înainte sau înapoi must sau may dependente sau independente de fluxul de control (flow (in)sensitive): Trebuie luată în considerare ordinea instrucţiunilor în program nu: ce variabile sunt folosite/modificate, funcţii apelate, etc. da: proprietăţi legate de valorile calculate efective de program dependente sau independente de context în cazul programelor ce conţin proceduri: e specializată analiza fiecărei proceduri în funcţie de locul de apel, sau se poate face un sumar (o analiză comună)? dependente sau nu de cale (path-(in)sensitive) (ţine cont de corelările pe căile individuale de execuţie?)