Optymalizacja oprogramowania - wprowadzenie



Podobne dokumenty
POZNA SUPERCOMPUTING AND NETWORKING. Podstawy optymalizacji kodu ródłowego

Metody Kompilacji Wykład 1 Wstęp

Wprowadzenie do kompilatorów

Proces tworzenia programu:

KONSTRUKCJA KOMPILATORÓW

Plan wykładu. Kompilatory. Literatura. Translatory. Literatura Translatory. Paweł J. Matuszyk

Podstawy programowania.

Matematyczne Podstawy Informatyki

POZNA SUPERCOMPUTING AND NETWORKING. Zwikszanie efektywnoci programów optymalizacja pamici cz2

Programowanie C# mgr in. Dariusz Ku. p. 119A

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Translacja wprowadzenie

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

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

Gramatyki regularne i automaty skoczone

Podstawy Informatyki Języki programowania c.d.

Programowanie komputerów

PODSTAWY PROGRAMOWANIA STRUKTURALNEGO (C) SYLABUS A. Informacje ogólne

1. Wprowadzenie do C/C++

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

.! $ Stos jest list z trzema operacjami: dodawanie elementów na wierzch stosu, zdejmowanie elementu z wierzchu stosu, sprawdzanie czy stos jest pusty.

POZNAŃ SUPERCOMPUTING AND NETWORKING. Zwiększanie efektywności programów optymalizacja pamięci część 1

Bazy danych. Plan wykładu. Podzapytania - wskazówki. Podzapytania po FROM. Wykład 5: Zalenoci wielowartociowe. Sprowadzanie do postaci normalnych.

Bazy danych Podstawy teoretyczne

1. Wprowadzenie do C/C++

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

Języki programowania zasady ich tworzenia

KARTA KURSU. Wstęp do programowania

Podstawy programowania

Klonowanie MAC adresu oraz TTL

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Bieżący sylabus w semestrze zimowym roku 2016/17

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Podstawy programowania skrót z wykładów:

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Programowanie Obiektowe

Technologie informacyjne - wykład 12 -

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Informatyka I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Programowanie w języku Python. Grażyna Koba

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

Sposoby przekazywania parametrów w metodach.

Wstęp do programowania

Przyczyny dwustopniowego tłumaczenia

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Multipro GbE. Testy RFC2544. Wszystko na jednej platformie

NAZWA PRZEDMIOTU/MODUŁU KSZTAŁCENIA:

Wstęp do programowania. Wykład 1

Języki i metodyka programowania

Bazy danych. Plan wykładu. Metody organizacji pliku rekordów. Pojcie indeksu. Wykład 11: Indeksy. Pojcie indeksu - rodzaje indeksów

Informatyka I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)

Program do konwersji obrazu na cig zero-jedynkowy

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

WYKŁAD 9. Wzorce projektowe czynnociowe Observer Visitor

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

Temat: Problem najkrótszych cieek w grafach waonych, cz. I: Algorytmy typu label - setting.

Architektura komputerów

PRZYDZIAŁ PAMIĘCI OPERACYJNEJ

Bazy danych. Plan wykładu. Podstawy modeli relacyjnych. Diagramy ER. Wykład 3: Relacyjny model danych. SQL

PROTOKOŁY TRANSPORTU PORTY krótki przegld

Bazy danych. Plan wykładu. Przetwarzanie zapyta. Etapy przetwarzania zapytania. Wykład 12: Optymalizacja zapyta. Etapy przetwarzanie zapytania

Bazy danych. Plan wykładu. Zalenoci funkcyjne. Wykład 4: Relacyjny model danych - zalenoci funkcyjne. SQL - podzapytania A B

Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym

Modelowanie procesów współbieżnych

Typy bazy danych Textract

Kompilacja image z CVS

Wprowadzenie. Teoria automatów i języków formalnych. Literatura (1)

Podstawy Programowania

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Program We Kompilator Wy Źródłowy

Mikrokontroler ATmega32. Język symboliczny

Gramatyki atrybutywne

Syntactic Pattern Recognition. Anna Kuchna Maciej arnowski

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

1. Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C, WNT, Warszawa 1998.

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

. Podstawy Programowania 1. Wstęp. Arkadiusz Chrobot. 15 października 2015

Algorytmy od problemu do wyniku

Wykład 9: Polimorfizm i klasy wirtualne

Zasady doboru zaworów regulacyjnych przelotowych - powtórka

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Algorytmy i struktury danych.

Algorytm. a programowanie -

Rok akademicki: 2013/2014 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

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

Podstawy programowania. Wprowadzenie

Podstawy programowania C. dr. Krystyna Łapin

Podstawy programowania wykład

Metody Kompilacji Wykład 3

Podstawy programowania (1)

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Ryszard Myhan. Wykład 1: Języki programowania

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

Szukanie najkrótszych dróg z jednym ródłem

WYKŁAD 1 - KONSPEKT. Program wykładu:

Analiza semantyczna. Gramatyka atrybutywna

Bash i algorytmy. Elwira Wachowicz. 20 lutego

UML cz. III. UML cz. III 1/36

Transkrypt:

Optymalizacja oprogramowania - wprowadzenie Poznaskie Centrum Superkomputerowo Sieciowe

Projekt jest współfinansowany ze rodków Europejskiego Funduszu Rozwoju Regionalnego w ramach Programu Operacyjnego Innowacyjna Gospodarka. Instytucj Zarzdzajc Programu Operacyjnego Innowacyjna Gospodarka jest Ministerstwo Rozwoju Regionalnego. Instytucj Poredniczc w realizacji priorytetu 2. Infrastruktura sfery B+R jest Ministerstwo Nauki i Szkolnictwa Wyszego.

literatura podstawowa [Aho2002] Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman, Kompilatory. Reguły, metody i narzdzia, WNT 2002 (tłum. pierwszego wydania amerykaskiego, 1986). [Aho2001] A.V. Aho, R. Sethi, J.D. Ullman, Compilers: Principles, Techniques, and Tools, Pearson Education 2001. 3

literatura uzupełniajca [Bentley2000] Jon Bentley, Perełki oprogramowania, wyd. trzecie, WNT, 2008 (tłum. drugiego wydania amerykaskiego, Pearson Education 2000). [Bentley2007] Jon Bentley, Wicej perełek oprogramowania. Wyznania programisty, WNT 2007 (tłum. pierwszego wydania amerykaskiego, Pearson Education 1988) 4

literatura uzupełniajca [Kernigham2002] Brian W. Kernigham, Rob Pike, Lekcja programowania, WNT 2002, (tłum. pierwszego wydania amerykaskiego, Pearson Education 1999). [Oram2008] Andy Oram, Greg Wilson (red.), Pikny kod. Tajemnice mistrzów programowania, Helion 2008, (tłum. wydania amerykaskiego, O Reilly Media Inc. 2007). 5

literatura uzupełniajca [Barr2005] Adam Barr, Znajd błd. Sztuka analizowania kodu, Helion 2005 (tłum. wydania amerykaskiego, Pearson Education 2005). 6

Plan wprowadzenie (typowa kompilacja) podstawowe ródła optymalizacji optymalizacja bloków bazowych ptle w grafach przepływu globalna analiza przepływu danych iteracyjne rozwizywanie równa przepływu danych 7

Plan przekształcenia poprawiajce kod obsługa synonimów analiza przepływu danych w strukturalnych grafach przepływu efektywne algorytmy przepływu danych narzdzia do analizy przepływu danych wykrywanie typów 8

Plan symboliczny program uruchomieniowy dla zoptymalizowanego kodu uwagi bibliograficzne 9

kompilator czyta kod w jzyku ródłowym i tłumaczy na kod w jzyku wynikowym [Aho2002] 10

typowa kompilacja [Aho2002] 11

typowa kompilacja program ródłowy w oddzielnych plikach jest składany w cało przez preprocesor, kompilator tworzy kod wynikowy w j. asemblera, tłumaczony nastpnie przez asembler na kod maszynowy i łczony z funkcjami bibliotecznymi 12

typowa kompilacja [Aho2002] 13

fazy kompilatora [Aho2002] 14

fazy kompilatora analiza programu ródłowego generacja kodu poredniego optymalizacja kodu generacja kodu 15

analiza programu ródłowego obejmuje trzy fazy: analiz leksykaln (liniow, skanowanie): strumie znaków grupowany w symbole leksykalne (cigi znaków majce znaczenie) analiz składniow (hierarchiczna, syntaktyczna): symbole leksykalne grupowane w wyraenia gramatyczne (drzewa wyprowadzenia) analiz semantyczn: testy dopasowania składników programu co do znaczenia 16

analiza programu ródłowego analiza programu ródłowego ma na celu wykrycie błdów w programie ródłowym słu do tego pierwsze trzy fazy kompilatora, wymienione przed chwil po analizie programu ródłowego, nastpuje zazwyczaj faza generacji kodu poredniego 17

translacja instrukcji (1) [Aho2002] 18

generacja kodu poredniego kod poredni jest to reprezentacja porednia kodu ródłowego, widziana jako program dla pewnej maszyny abstrakcyjnej reprezentacj t daje si łatwo utworzy i przetłumaczy na program wynikowy 19

generacja kodu poredniego najprostszy algorytm generuje kod poredni, stosujc jeden rozkaz na kady operator w drzewie składniowym [Aho2002] 20

generacja kodu poredniego kod poredni moe mie posta kodu trójadresowego kod trójadresowy to sekwencja rozkazów, z których kady ma co najwyej trzy argumenty 21

generacja kodu poredniego własnoci kodu trójadresowego: kady rozkaz oprócz przypisania moe mie co najwyej jeden operator, dlatego kompilator musi ustali kolejno operacji kompilator musi wygenerowa tymczasowe identyfikatory do zapisu wartoci porednich rozkaz moe mie mniej ni trzy argumenty 22

generacja kodu poredniego przykład kodu trójadresowego [Aho2002]: 23

optymalizacja kodu w fazie tej poprawiamy kod poredni aby stworzy działajcy szybciej kod maszynowy stosuje si tu dwie zasady: konwersja z wartoci całkowitej liczby (np. 60) do rzeczywistej jest wykonana jednorazowo w czasie kompilacji zmienna uywana jednokrotnie w przypisaniu (np. temp3) moe by usunita 24

optymalizacja kodu [Aho2002] z postaci: na posta: 25

optymalizacja kodu w metodach optymalizacji kodu s due rónice w kompilatorach optymalizujcych, znaczna cz czasu kompilacji powicona jest optymalizacji kodu istniej jednak proste metody optymalizacji, niewiele wydłuajce czas optymalizacji 26

generacja kodu ostatni faz kompilacji jest generacja kodu jest to przemieszczalny kod maszynowy albo kod asemblera 27

generacja kodu [Aho2002] z postaci: na posta: 28

generacja kodu w rozkazach tych wystpuj dwa rejestry R1 i R2 pierwszy argument tych rozkazów to ródło, a drugi to przeznaczenie F w nazwie rozkazu oznacza operacje na wartociach zmiennopozycyjnych znak # oznacza, e 60.0 to stała 29

translacja instrukcji (2) [Aho2002] 30

optymalizacja kodu byłoby idealnie, gdyby kompilator wytwarzał kod wynikowy tak dobry, jakby był pisany rcznie ale tak nie jest, kompilator moe jedynie optymalizowa kod w trzech kierunkach: aby działał on szybciej, albo aby zajmował mniej miejsca, albo jedno i drugie 31

optymalizacja kodu kompilatory optymalizujce = poprawiajce kod optymalizacje niezalene od maszyny (nie uwzgldniajce właciwoci maszyny docelowej), na tym si koncentrujemy 32

optymalizacja kodu optymalizacje zalene od maszyny (uwzgldniajce właciwoci maszyny docelowej), to np. alokacja rejestrów i stosowanie specjalnych sekwencji instrukcji maszyny tym zajmiemy si póniej 33

optymalizacja kodu maksymalny efekt uzyskuje si, gdy poprawia si efektywno czsto wykonywanych fragmentów programu czsto zachodzi sytuacja, e mały fragment programu jest odpowiedzialny za istotn cz czasu wykonania programu takie fragmenty naley zidentyfikowa 34

optymalizacja kodu nie jest to trywialne zadanie, kompilator musi to odgadn (nie majc dostpu do przykładowych danych i programu profilujcego) dobrym fragmentem do poprawienia jest wewntrzna ptla w programie, mona j rozpozna po składni programu albo w wyniku analizy przepływu sterowania 35

optymalizacja kodu aby stworzy wydajny program wynikowy, musi istnie współpraca programisty i autora kompilatora opiszemy teraz przekształcenia kodu, poprawiajce wydajno programu obowizuje zasada: najwiksze zyski najmniejszym kosztem 36

kryteria stosowania przekształce poprawiajcych kod cechy przekształce obsługiwanych przez kompilator optymalizujcy: przekształcenie powinno zachowa znaczenie programu przekształcenie powinno przyspiesza program przekształcenie musi si opłaca 37

zachowanie znaczenia programu przekształcenie nie moe zmienia wyjcia programu dla danego wejcia przekształcenie nie moe wprowadza błdu, tam gdzie go nie było - np. dzielenia przez zero zawsze preferowany jest wybór bezpiecznego podejcia 38

przyspieszenie programu dla redniego przypadku nastpuje wymierne przyspieszenie zmniejszenie objtoci generowanego kodu nie dla kadych danych jest przyspieszenie, moe te wystpi spowolnienie 39

opłacalno nie ma sensu poprawianie kodu, jeeli wysiłek ten nie jest doceniony podczas wykonywania programu wynikowego nie ma sensu poprawianie kodu, jeeli dany program zostanie uruchomiony jedynie kilka razy 40