Optimizing Programs with Intended Semantics

Podobne dokumenty
Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Programowanie obiektowe

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Programowanie obiektowe

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

PyPy's Approach to Virtual Machine Construction

OpenAI Gym. Adam Szczepaniak, Kamil Walkowiak

Bloki anonimowe w PL/SQL

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Politechnika Wrocławska, Katedra Inżynierii Biomedycznej Systemy Pomiarowo-Diagnostyczne, laboratorium

Programowanie poprzez testy z wykorzystaniem JUnit

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Operatory logiczne. Podstawowe operatory logiczne, składanie wyrażeń z użyciem operatorów logicznych

Wyrażenie wewnątrz nawiasów jest atomem (rozpatrujemy je jako całość).

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

Programowanie obiektowe

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Co jeszcze mogą nam dać adnotacje? Adam Warski

Wyjątki (exceptions)

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

1 Podstawy c++ w pigułce.

Liczby losowe i pętla while w języku Python

Algorytmy i struktury danych

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Lingwistyczny system definicyjny wykorzystujący korpusy tekstów oraz zasoby internetowe.

Zasady programowania Dokumentacja

SOLIDnie śmierdzący kod.

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Zaawansowane aplikacje internetowe

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

ECDL Podstawy programowania Sylabus - wersja 1.0

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

6. Zagadnienie parkowania ciężarówki.

Sexy unit testy. czyli o kilku praktykach w testach jednostkowych

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Konkurs z przedmiotu eksploracja i analiza danych: problem regresji i klasyfikacji

Programowanie, algorytmy i struktury danych

Programowanie wielowarstwowe i komponentowe

JAX-RS czyli REST w Javie. Adam Kędziora

Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1

Wprowadzenie do programu RapidMiner Studio 7.6, część 4 Michał Bereta

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Wprowadzenie do języka Java

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Zaawansowany kurs języka Python

Programowanie obiektowe

Testy automatyczne. Korzystające z junit

Spis treści. O autorce. O recenzentach. Wprowadzenie

Delphi Laboratorium 3

B jest globalnym pokryciem zbioru {d} wtedy i tylko wtedy, gdy {d} zależy od B i nie istnieje B T takie, że {d} zależy od B ;

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

Oracle PL/SQL. Paweł Rajba.

Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński

Techniki animacji komputerowej

Informatyka 1. Przetwarzanie tekstów

Multi-wyszukiwarki. Mediacyjne Systemy Zapytań wprowadzenie. Architektury i technologie integracji danych Systemy Mediacyjne

Aplikacje w środowisku Java

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Implementacja schematów i statycznej kontroli typów w systemie JLoXiM

Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright Spis treści

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski -

Zaawansowane aplikacje WWW - laboratorium

I. WSTĘP. Przykład 1. Przykład 2. Programowanie czyli tworzenie programów komputerowych (aplikacji komputerowych)

Automatyczne generowanie testów z modeli. Bogdan Bereza Automatyczne generowanie testów z modeli

Aproksymacja funkcji a regresja symboliczna

Inteligencja obliczeniowa

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI 2016 ROK

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Systemy uczące się Lab 4

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Programowanie w języku C++ Grażyna Koba

Instrukcja pobierania informacji o Masowych Płatnościach Przychodzących w systemie BOŚBank24 iboss

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Materiały do zajęć III

XII. Warunek wielokrotnego wyboru switch... case

Maciej Piotr Jankowski

Redis, skrypty w języku Lua

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT

Aplikacje WWW - laboratorium

Metody optymalizacji soft-procesorów NIOS

Poprawność semantyczna

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

DEBT COLLECTION OPTIMIZATION

JavaScript - korzenie

Programowanie obiektowe

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

PL/SQL. Zaawansowane tematy PL/SQL

Maciej Oleksy Zenon Matuszyk

Kiedy i czy konieczne?

Transkrypt:

Interaktywna optymalizacja programów 26 kwietnia 2010

Spis treści Spis treści Wstęp Omówienie zaproponowanego algorytmu na przykładzie Wewnętrzna reprezentacja reguł dotyczących optymalizacji Wybrane szczegóły algorytmu wyboru propozycji Wyniki optymalizacji na dwóch wybranych programach Podsumowanie

Problemy z optymalizacją Problemy z optymalizacją - prosty przykład i = 0; new EmptyConstructor(); j = i * i; Problemy z optymalizacją - przykład ciekawszy String format; for (String s : stringlist){ this.printprefix(); format = formatfield; this.printwithformat(s,format); };

Problemy z optymalizacją Problemy z optymalizacją - prosty przykład i = 0; new EmptyConstructor(); j = i * i; Problemy z optymalizacją - przykład ciekawszy String format; for (String s : stringlist){ this.printprefix(); format = formatfield; this.printwithformat(s,format); };

Rozwiązanie - adnotacje Nie będzie wyjątku i = 0; @neverthrows(outofmemoryerror) new EmptyConstructor(); j = i * i; Uważny czytelnik pewnie zauważył adnotacja na pojedynczej linii kodu!! JSR 308?

Rozwiązanie - adnotacje Nie będzie wyjątku i = 0; @neverthrows(outofmemoryerror) new EmptyConstructor(); j = i * i; Uważny czytelnik pewnie zauważył adnotacja na pojedynczej linii kodu!! JSR 308?

Rozwiązanie - adnotacje Nie będzie wyjątku i = 0; @neverthrows(outofmemoryerror) new EmptyConstructor(); j = i * i; Uważny czytelnik pewnie zauważył adnotacja na pojedynczej linii kodu!! JSR 308?

Kolejne kroki alogrytmu

Kolejny przykład Zagadka dla optymalizatora boolean func(a, b){ Object x, temp1, temp2; x = new Object(); int counter = 0; while ( counter < b.length ) { temp1 = b[ counter ]; temp2 = a.field ; if (temp1 == temp2){ return true ; } counter++; } }

Uruchamiamy IOpt Przykładowe propozycje loop-invariant code motion (LICM) dla temp2 = a.field ; dead-store elimination dla x = new Object(); Przyczyny niepowodzenia optymalizacji temp2 = a. field may not be executed Explanation : b[ counter ] may be executed and b[ counter ] may throw an exception new Object() may exit the method Explanation : new Object() may throw an exception and new Object() may change some state Explanation : new Object() is non-analyzed code and non-analyzed code may modify any field

Uruchamiamy IOpt Przykładowe propozycje loop-invariant code motion (LICM) dla temp2 = a.field ; dead-store elimination dla x = new Object(); Przyczyny niepowodzenia optymalizacji temp2 = a. field may not be executed Explanation : b[ counter ] may be executed and b[ counter ] may throw an exception new Object() may exit the method Explanation : new Object() may throw an exception and new Object() may change some state Explanation : new Object() is non-analyzed code and non-analyzed code may modify any field

Kolejne kroki Kolejne kroki wybór jednej z propozycji, w tym przypadku np. LICM generowanie propozycji założeń/adnotacji walidacja propozycji wybranych przez programistę Przykładowe założenia temp2 = a. field may not be executed -> Assume temp2 = a.field is always executed b[ counter ] may be executed -> Assume b[counter] is never executed b[ counter ] may throw an exception -> Assume b[counter] never throws an exception Dodatkowo, przez uogólnienie: Assume any statement never throws an exception

Kolejne kroki Kolejne kroki wybór jednej z propozycji, w tym przypadku np. LICM generowanie propozycji założeń/adnotacji walidacja propozycji wybranych przez programistę Przykładowe założenia temp2 = a. field may not be executed -> Assume temp2 = a.field is always executed b[ counter ] may be executed -> Assume b[counter] is never executed b[ counter ] may throw an exception -> Assume b[counter] never throws an exception Dodatkowo, przez uogólnienie: Assume any statement never throws an exception

Wewnętrzny język zdefiniowany przez autorów Język w którym wyrażane są warunki na zastosowanie optymalizacji property(a, x1,, xn) operatory and, or operator forall x in y z Przyczyny niepowodzeń analiz przyczyny podstawowe - failed(analysis, x1,, xn) analogiczne operatory - and, or Przykładowa reguła isdeadstore(s = e) := (forall x in property ( usesfordefinition, s = e) property (isdeadcode, x)) and property ( isstraightlinecode, s = e) and property (doesnotchangestate, e)

Wewnętrzny język zdefiniowany przez autorów Język w którym wyrażane są warunki na zastosowanie optymalizacji property(a, x1,, xn) operatory and, or operator forall x in y z Przyczyny niepowodzeń analiz przyczyny podstawowe - failed(analysis, x1,, xn) analogiczne operatory - and, or Przykładowa reguła isdeadstore(s = e) := (forall x in property ( usesfordefinition, s = e) property (isdeadcode, x)) and property ( isstraightlinecode, s = e) and property (doesnotchangestate, e)

Wewnętrzny język zdefiniowany przez autorów Język w którym wyrażane są warunki na zastosowanie optymalizacji property(a, x1,, xn) operatory and, or operator forall x in y z Przyczyny niepowodzeń analiz przyczyny podstawowe - failed(analysis, x1,, xn) analogiczne operatory - and, or Przykładowa reguła isdeadstore(s = e) := (forall x in property ( usesfordefinition, s = e) property (isdeadcode, x)) and property ( isstraightlinecode, s = e) and property (doesnotchangestate, e)

Inne elementy programu Wyszukiwanie okazji do optymalizacji na podstawie wzorców dopasowywane są konstrukcje języka, elementy zmienne (np. dowolny typ) oraz ich ciągi wydaje się, że takie podejście generuje b. wiele propozycji i może być dość wolne Zbiór reguł można go rozszerzać korzystając ze zdefiniowanych języków ważne jest, żeby z reguły dało się wygenerować określony powód uniemożliwiający optymalizację i propozycję adnotacji propozycje i przyczyny muszą być czytelne dla programisty

Wybór propozycji optymalizacji Według ryzyka Koszt określa liczba przyczyn, które uniemożliwiają optymalizację. Dodatkowo przyczyny szczegółowe są bardziej ryzykowne. Według powszechności Reguły o dużej liczbie wspólnych przyczyn są mniej ryzykowne, a usuwanie przyczyn jest bardziej opłacalne. Według oczekiwanego przyspieszenia Uwzględniane jest oczekiwane przyspieszenie podzielone przez liczbę wymaganych założeń.

Wybór propozycji założeń / adnotacji Założenia Po wybraniu optymalizacji programista powinien wybrać założenia, które je umożliwiają lub ją odrzucić Podobnie jak w przypadku samych optymalizacji, chcemy zmaksymalizować efektywność programisty Musimy wybrać założenia na tyle ogólne, by umożliwiały wiele optymalizacji, ale jednocześnie na tyle szczegółowe, aby zachodziły Parametry uwzględniane przy wyborze według użyteczności danego założenia (liczba optymalizacji które umożliwia) według ryzyka (odwrotnie niż dla optymalizacji, bardziej szczegółowe są wybierane)

Wybór propozycji założeń / adnotacji Założenia Po wybraniu optymalizacji programista powinien wybrać założenia, które je umożliwiają lub ją odrzucić Podobnie jak w przypadku samych optymalizacji, chcemy zmaksymalizować efektywność programisty Musimy wybrać założenia na tyle ogólne, by umożliwiały wiele optymalizacji, ale jednocześnie na tyle szczegółowe, aby zachodziły Parametry uwzględniane przy wyborze według użyteczności danego założenia (liczba optymalizacji które umożliwia) według ryzyka (odwrotnie niż dla optymalizacji, bardziej szczegółowe są wybierane)

Testowanie wybranych założeń Testowanie Istnieje możliwość wyboru błędnego założenia Efektem będzie najprawdopodobniej nieprawidłowo działający program Abyt tego uniknąć, IOpt ma wbudowaną możliwość przetestowania założeń Opcja ta działa w oparciu o AspektJ i JUnit

Badanie efektywności IOpt-a Dwa rodzaje testów Najpierw przetestowane zostały wybrane heurystyki wyboru optymalizacji Dodatkowo przetestowano całą procedurę optymalizacji na dwóch wybranych programach Testy heurystyk Publikacja zawiera dane dotyczące optymalizacji LICM Wykazano, że wybór optymalizacji według ryzyka dobrze rozdziela propozycje Wybór według liczby wspólnych przyczyn również został uzasadniony przez dane

Badanie efektywności IOpt-a Dwa rodzaje testów Najpierw przetestowane zostały wybrane heurystyki wyboru optymalizacji Dodatkowo przetestowano całą procedurę optymalizacji na dwóch wybranych programach Testy heurystyk Publikacja zawiera dane dotyczące optymalizacji LICM Wykazano, że wybór optymalizacji według ryzyka dobrze rozdziela propozycje Wybór według liczby wspólnych przyczyn również został uzasadniony przez dane

Testy IOpt na prawdziwych aplikacjach Symulator inteligetnych sieci radiowych Wyniki Początkowo aplikacja była niezdolna do symulacji dużych sieci Użyto optymalizacji: Strength Reduction(zastąpienie metod przez prostsze obliczenia), Method Part Precomputation oraz LICM Początkowo autorzy nie znali kodu, całość pracy zajęła około 30 min Optymalizacja Brak SR MPP LICM Razem Czas 100% 72-90% 40-45% 80-86% 23-35%

Testy IOpt na prawdziwych aplikacjach Symulator inteligetnych sieci radiowych Wyniki Początkowo aplikacja była niezdolna do symulacji dużych sieci Użyto optymalizacji: Strength Reduction(zastąpienie metod przez prostsze obliczenia), Method Part Precomputation oraz LICM Początkowo autorzy nie znali kodu, całość pracy zajęła około 30 min Optymalizacja Brak SR MPP LICM Razem Czas 100% 72-90% 40-45% 80-86% 23-35%

Testy IOpt na prawdziwych aplikacjach jess - zaawansowany silnik do przetwarzania reguł Wyniki Najbardziej realistyczny z dostarczonych przykładów Użyto optymalizacji: Partial Redundancy Elimination(usunięcie niektórych operacji new), Remove Rewriting(dotyczy metody Collection.remove() ) oraz LICM całość pracy zajęła około 15 min, autorzy znali kod Optymalizacja Brak PRE RR LICM Razem Czas 100% 38-51% 94-97% 96-98% 36-47%

Testy IOpt na prawdziwych aplikacjach jess - zaawansowany silnik do przetwarzania reguł Wyniki Najbardziej realistyczny z dostarczonych przykładów Użyto optymalizacji: Partial Redundancy Elimination(usunięcie niektórych operacji new), Remove Rewriting(dotyczy metody Collection.remove() ) oraz LICM całość pracy zajęła około 15 min, autorzy znali kod Optymalizacja Brak PRE RR LICM Razem Czas 100% 38-51% 94-97% 96-98% 36-47%

Podsumowanie Według autorów publikacji Niektóre możliwości języka, w szczególności dynamiczne ładowanie klas i wyjątki, bardzo utrudniają pracę standardowych optymalizatorów Praca opisuje nowe rozwiązanie oparte na znajomości zamierzonej semantyki programu Został przedstawiony program umożliwiający interaktywne dospecyfikowanie semantyki programu i optymalizację Program został z powodzeniem przetestowany na powszechnie dostępnych przykładowych programach

Podsumowanie Według autora prezentacji Bardzo ciekawy pomysł Niestety program nie jest dostępny w Internecie i jego przetestowanie nie jest możliwe Wydawałoby się, że przy podanym sposobie wyboru, programowi/programiście znacznie dłużej zajmie znalezienie efektywnych optymalizacji Właściwie programista mógłby samodzielnie poprawić program zamiast wstawiać założenia