Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałWitold Zakrzewski Został zmieniony 8 lat temu
1
Deforestacja Metody optymalizacji dla języka SBQL Marta J. Burzańska quintria@mat.umk.pl 15 października 2009
2
Plan prezentacji Ogólne definicje i reguły Deforestacja – odrobina teorii Początki Tania deforestacja Lightweight fusion – Zastosowania dla SBQLa Rozdzielność operatorów algebraicznych względem kropki Optymalizacja close by
3
Plan prezentacji Ogólne definicje i reguły Deforestacja – odrobina teorii Zastosowanie dla SBQLa Rozdzielność operatorów algebraicznych względem kropki Optymalizacja close by
4
Haskell Przykład notacji map :: (a → b) → [a] → [b] map f [ ] = [ ] map f (x:xs) = f x : map f xs Funkcja foldr foldr :: (a → b → b) → b → [a] → b foldr f z [ ] = z foldr f z (x:xs) = f x (foldr f z xs)
5
Lambda-rachunek
6
Plan Ogólne definicje i reguły Deforestacja – odrobina teorii Początki Tania deforestacja Lightweight fusion Rozdzielność operatorów algebraicznych względem kropki Optymalizacja close by
7
Problematyka Struktury pośrednie automatycznie generowane i niszczone podczas wykonywania programu W językach funkcyjnych używane często jako „klej” łączący różne elementy programu W językach zapytań wyniki podzapytań wykorzystywane do obliczeń wyniku końcowego Zwykle listy, struktury, bagi Pochłaniają zasoby Czy naprawdę są nam potrzebne?
8
Przykłady Haskell sum (map square [1..100] ) Generuje 2 listy pośrednie: Listę liczb naturalnych od 1 do 100 Listę kwadratów liczb naturalnych Wynikiem jest pojedyncza liczba SBQL (Emp where Child.birthday >'01-01-1995').(fname,sname)
9
Deforestacja W rzeczywistości jest to grupa algorytmów zajmujących się eliminacją struktur pośrednich Popularne nazwy: program fusion, fusion, deforestation Główna idea - „skleić” definicje dwóch funkcji jeżeli jedna generuje struktury pośrednie i przekazuje je jako argument do drugiej Pierwsza praca: Philip Wadler, 1990, „Deforestation: transforming programs to eliminate trees”
10
Odmiany deforestacji Pierwszy pomysł był bardzo dobry koncepcyjnie, ale implementacyjnie niedopracowany Eliminacja drzew pośrednich w interpreterach języka Haskell Wiele odmian dla wielu problemów i języków Uwzględniające zapytania rekurencyjne i nie, Typowanie Najlepszy pomysł jest zwykle najprostszy
11
Tania deforestacja Inne nazwy: „shortcut fusion”, „foldr\build rule” Obserwacja – te funkcje które mogą podlegać „wylesianiu” można również zapisać przy użyciu foldr Wprowadzając funkcję build służącą do „generowania” struktur pośrednich dostajemy za pół-darmo mechanizm ich eliminacji
12
Lekka fuzja rekurencji „Lightweight fusion by fixed - point promotion” Tania deforestacja nie radzi sobie z rekurencją Łącząc dwie funkcje rekurencyjne, których definicje można zapisać z użyciem operatora stałego punktu można je „wylesić” Metoda stosowana raczej do powtarzalnych złączeń dwóch funkcji
13
Plan Ogólne definicje i reguły Deforestacja – odrobina teorii Początki Tania deforestacja Lightweight fusion Rozdzielność operatorów algebraicznych względem kropki Optymalizacja close by
14
Tania deforestacja Algorytm:
15
Kilka przykładowych definicji
16
Przykład taniej deforestacji
20
Postać końcowa Jak to rozumieć? Przeszukując informacje o obiektach, po znalezieniu Pracownika sprawdź czy to Smith i dalej przeszukuj kolekcję pracowników
21
Tania deforestacja Przemyślenia końcowe Eliminacja konieczności „składowania” obiektów pośrednich sama w sobie zmniejszy zużycie zasobów Bonus: solidna platforma do zrównoleglania (w trakcie badań)
22
Plan Ogólne definicje i reguły Deforestacja – odrobina teorii Początki Tania deforestacja Lightweight fusion - Zastosowanie dla SBQLa Rozdzielność operatorów algebraicznych względem kropki Optymalizacja close by
23
Lekka fuzja Założenie: mamy dwie funkcje skonstruowane przy użyciu operatora punktu stałego 3 proste kroki: Rozpisać definicję obu funkcji i „wyciągnąć” operator stałego punktu funkcji wewnętrznej „przed nawias” Uprościć definicję wyliczając w miejscu co się da Wygenerować nową definicję funkcji
24
Propozycja dla SBQLa
28
Plan Ogólne definicje i reguły Deforestacja – odrobina teorii Zastosowanie dla SBQLa Rozdzielność operatorów algebraicznych względem kropki Optymalizacja rekurencji
29
Rozdzielność względem kropki Pomysł na zmniejszenie zużycia pamięci przez struktury pośrednie Składnia SBQLa, a konkretnie kropki pozwala na znacznie większą swobodę podczas optymalizacji Prosta obserwacja: sum ( Dept.employees.Emp.Salary) = sum ( Dept.sum ( employees. sum ( Emp.sum ( Salary ) ) ) )
30
Rozdzielność a średnia W podstawowej formie nie podlega rozdzielności... Ale mając: avg_p x = (sum(x),count(x)) avg_p_sum plist = (sum(first(plist)), sum(second(plist))) avg_div (x,y) = if y!=0: x/y else: 0 Poniższą definicje już można „rozdzielić”: avg x = avg_div(avg_p_sum(avg_p(x)))
31
Plan Ogólne definicje i reguły Deforestacja – odrobina teorii Zastosowanie dla SBQLa Rozdzielność operatorów algebraicznych względem kropki Optymalizacja rekurencji
32
Nie wszystkie wersje obliczeń rekurencyjnych podlegają optymalizacji przez „wylesianie” Close by zawierający cykle Close unique by Lekka fuzja Usprawnienie: w przypadku rekurencyjnego generowania dużej kolekcji danych, którą następnie poddamy filtracji używając „niezmiennika” - warunek filtrowania można wrzucić do pierwszego kroku rekurencji
33
Literatura Gill, A.; Launchbury, J.; Peyton Jones, S. (1993). ”A short cut to deforestation”, Grust, T.; Scholl, M. H. (1998). ”Query Deforestation”. Technical Report Wadler, P. (1990). ”Deforestation: transforming programs to eliminate trees”. Ohori, A.; Sasano, I. (2007). ”Lightweight fusion by fixed point promotion”. Burzańska, M., Stencel, K., Wiśniewski, P. (2009). „Pushing predicates into recursive SQL Common Table Expressions”
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.