Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Hoopl Higher-order optimization library
na podstawie: Hoopl: A Modular, Reusable Library for Dataflow Analysis and Transformation N. Ramsey, J. A. Dias, and S. Peyton Jones czyli funkcyjna opowieść o 20 typach :] parafraza z
2
Plan Prezentacji 2 przykłady motywujące Biblioteka
Opis interfejsu (API) Poprawność Wydajność Powiązane prace Próba wykorzystania Hoopl w pracy mgr
3
Przykłady motywujące: 1. propagacja i zwijanie stałych
$ cabal install hoopl $ git clone $ cd hoopl/testing/ $ runhaskell Main.hs Test:tests/if-test f() { L1: x = 3 + 4 z = x > 5 if z then goto L2 else goto L3 L2: ret (1) L3: ret (2) } L1: goto L2
4
Przykłady motywujące: 1. propagacja i zwijanie stałych
5
Przykłady motywujące: 2. eliminacja martwych zmiennych
Z przeplataniem analizy z transformacją: f() { f() { f() { --{y} {} y := y := 42 --{y} x := y + 2 --{} {} {} ret (7) ret (7) ret (7) } } } Tak robi Hoopl!
6
Przykłady motywujące: 2. eliminacja martwych zmiennych
Najpierw analiza, potem transformacja: f() { f() { --{} y := 42 x := y + 2 --{} {} ret (7) ret (7) } } Tak robią inne biblioteki
7
Plan Prezentacji 2 przykłady motywujące Biblioteka
Opis interfejsu (API) Poprawność Wydajność Powiązane prace Próba wykorzystania Hoopl w pracy mgr
8
Hoopl ~ duża funkcja Hoopl graf poprawiony graf porządek (dataflow
lattice) funkcja przepisywania węzłów (node rewrite function) funkcja przesyłania faktów (node transfer function)
9
Hoopl – duża funkcja f() { f() { f() {
--{y} {} y := y := 42 --{y} x := y + 2 --{} {} {} ret (7) ret (7) ret (7) } } }
10
Hoopl ~ duża funkcja
11
Hoopl ~ duża funkcja Implementacja fp_lattice, fp_transfer, fp_rewrite będzie dalej
12
Biblioteka vs Klient biblioteki
13
Wejście: Graf: węzły, krawędzie, bloki
14
Elementy grafów: Węzły = instrukcje Bloki (bloki proste) Grafy
Test:tests/if-test f() { L1: x = 3 + 4 z = x > 5 if z then goto L2 else goto L3 L2: ret (1) L3: ret (2) }
15
Kształt Elementy grafów są: Otwarte / zamknięte na wejściu
Otwarte / zamknięte na wyjściu L1: :: Node C O x = :: Node O O z = x > :: Node O O if z then goto L2 else goto L3 :: Node O C L2: :: Node C O ret (1) :: Node O C L3: :: Node C O ret (2) :: Node O C
16
Węzeł = instrukcja biblioteka: klient:
17
Krawędzie biblioteka: klient: Fakty (np. {x = 42}) na krawędziach
Statyczna kontrola – exhaustive patterns
18
Blok (blok prosty) biblioteka: Sekwencja węzłów (instrukcji)
Typ bloku mówi o kształcie Statyczna kontrola – Bcat
19
Graf biblioteka: MaybeO – statycznie wiemy czy argument nie jest pusty
20
Graf biblioteka (prywatna funkcja):
21
Przykład wykorzystania – propagacja i zwijanie stałych
22
Hoopl ~ duża funkcja
23
Hoopl ~ duża funkcja
24
Old New Joined x -> x -> 42 y -> False y -> y -> T z -> z -> z -> 5
25
Fact U (Map Label Fact)
26
--{x = 7}-------- --{x = 7}--------
z = x > z = 7 > 5
27
z = 7 > z = True
28
Przykłady motywujące: 1. propagacja i zwijanie stałych
$ cabal install hoopl $ git clone $ cd hoopl/testing/ $ runhaskell Main.hs Test:tests/if-test f() { L1: x = 3 + 4 z = x > 5 if z then goto L2 else goto L3 L2: ret (1) L3: ret (2) } L1: goto L2
29
Plan Prezentacji 2 przykłady motywujące Biblioteka
Opis interfejsu (API) Poprawność Wydajność Powiązane prace Próba wykorzystania Hoopl w pracy mgr
30
Warunki poprawności Porządek nie może mieć nieskończonych łańcuchów
Funkcja przesyłania faktów musi być monotoniczna – większy fakt → większy fakt Funkcja przepisywania węzłów musi być poprawna: rewrite (graf g) → węzeł n transfer g > transfer n Rekurencja funkcji przepisywania węzłów musi być skończona Poprawność udowodniona w pracy Lernera, Grove'a i Chambersa
31
Plan Prezentacji 2 przykłady motywujące Biblioteka
Opis interfejsu (API) Poprawność Wydajność Powiązane prace Próba wykorzystania Hoopl w pracy mgr
32
Wydajność „ciężko powiedzieć” Temat do zbadania / szukania usprawnień
Hoopl wykorzystany w GHC Szybkość spadła o ok. 15%
33
Plan Prezentacji 2 przykłady motywujące Biblioteka
Opis interfejsu (API) Poprawność Wydajność Powiązane prace Próba wykorzystania Hoopl w pracy mgr
34
Powiązane prace Podstawy teoretyczne – dobrze opracowane
Praktyka, Frameworki – dopiero się rozwijają Zwykle tylko analiza, bez transformacji Jeśli nawet, to zwykle sekwencyjnie bez przeplotu Do programów w Javie – Soot: tylko analiza Do programów w C – CIL: sekwencynie Kompilator Whirlwind: rozszerzenie kompilatora Vortex, podobne do Hoopl, mniej czytelna implementacja
35
Plan Prezentacji 2 przykłady motywujące Biblioteka
Opis interfejsu (API) Poprawność Wydajność Powiązane prace Próba wykorzystania Hoopl w pracy mgr
36
Próba wykorzystania Hoopl do pracy mgr
Abstrakcyjny język: Lukrecja Implementacja usuwania martwych przypisań Problemy Konwersja AST Lukrecji do AST (IR) w stylu Hoopl'a … i z powrotem
37
Próba wykorzystania Hoopl do pracy mgr
Kod w edytorze...
38
Próba wykorzystania Hoopl do pracy mgr
Wykorzystanie do reguł typowania: - konwersja AST - reguły typowania izomorficzne z tym co już mamy Wykorzystanie do wnioskowania o typach na podstawie przepływu sterowania (flowtyping) + mechanizm wyliczania punktu stałego (aczkolwiek to da się łatwo samemu napisać) - konwersja AST (jak wyżej) - największe problemy i tak są gdzie indziej (pętle)
39
Podsumowanie
40
Hoopl – podsumowanie Biblioteka do optymalizacji
Algorytm przeplatania analizy i transformacji Kontrola typów Abstrakcja Niezależny od analizowanego języka Funkcje pomagające pisać kod klienta Uproszczona implementacja
41
pytania?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.