Hoopl Higher-order optimization library

1 Hoopl Higher-order optimization libraryna podstawie: Ho...
Author: Kamila Nawrocka
0 downloads 0 Views

1 Hoopl Higher-order optimization libraryna 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 BibliotekaOpis 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 zmiennychZ 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 zmiennychNajpierw 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 BibliotekaOpis 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 (dataflowlattice) 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) GrafyTest: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ściuOtwarte / 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ędziachStatyczna 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 BibliotekaOpis 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ówFunkcja 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 BibliotekaOpis 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 BibliotekaOpis interfejsu (API) Poprawność Wydajność Powiązane prace Próba wykorzystania Hoopl w pracy mgr

34 Powiązane prace Podstawy teoretyczne – dobrze opracowanePraktyka, 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 BibliotekaOpis interfejsu (API) Poprawność Wydajność Powiązane prace Próba wykorzystania Hoopl w pracy mgr

36 Próba wykorzystania Hoopl do pracy mgrAbstrakcyjny 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 mgrKod w edytorze...

38 Próba wykorzystania Hoopl do pracy mgrWykorzystanie 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 optymalizacjiAlgorytm przeplatania analizy i transformacji Kontrola typów Abstrakcja Niezależny od analizowanego języka Funkcje pomagające pisać kod klienta Uproszczona implementacja

41 pytania?