Możliwości automatycznego zrównoleglania kodu w kompilatorze języka C Piotr Błaszyński Katedra Inżynierii Oprogramowania.

Slides:



Advertisements
Podobne prezentacje
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
Advertisements

Nauczanie na odległość Dr inż. Marlena Plebańska.
Tworzenie odwołania zewnętrznego (łącza) do zakresu komórek w innym skoroszycie Możliwości efektywnego stosowania odwołań zewnętrznych Odwołania zewnętrzne.
InMoST, Analiza architektury metodą ATAM Jerzy Nawrocki
Teoria gry organizacyjnej Każdy człowiek wciąż jest uczestnikiem wielu różnych gier. Teoria gier zajmuje się wyborami podejmowanymi przez ludzi w warunkach.
(c) Łukasz Olek. InMoST jest finansowany ze środków EFS. Plan dnia ▪ 10:00-10:15 Wprowadzenie ▪ 10:15-11:30 Innowacje w inżynierii wymagań ▪ 11:30–12:00.
Ryzyko a stopa zwrotu. Standardowe narzędzia inwestowania Analiza fundamentalna – ocena kondycji i perspektyw rozwoju podmiotu emitującego papiery wartościowe.
EWALUACJA PROJEKTU WSPÓŁFINANSOWANEGO ZE ŚRODKÓW UNII EUROPEJSKIE J „Wyrównywanie dysproporcji w dostępie do przedszkoli dzieci z terenów wiejskich, w.
Założenia dla poddziałania Efektywność energetyczna - mechanizm ZIT - wsparcie dotacyjne w ramach RPO WP Regionalny Program Operacyjny.
OPTYMALNY CEL I PODSTAWY ROZWOJU SZKOŁY. PRZEDE WSZYSTKIM DZISIEJSZA SZKOŁA POWINNA PRZYGOTOWYWAĆ DO ŻYCIA W DRUGIEJ POŁOWIE XXI WIEKU.
Porównywarki cen leków w Polsce i na świecie. Porównywarki w Polsce.
Algorytmy Informatyka Zakres rozszerzony
RAPORT Z BADAŃ opartych na analizie wyników testów kompetencyjnych przeprowadzonych wśród uczestników szkoleń w związku z realizacją.
MATURA 2007 podstawowe informacje o zmianach w egzaminie.
Python. Języki Programistyczne Microcode Machine code Assembly Language (symboliczna reprezentacja machine code) Low-level Programming Language (FORTRAN,
Wieloaspektowa analiza czasowo- kosztowa projektów ze szczególnym uwzględnieniem kryterium jakości rozwiązań projektowych AUTOR: ANNA MARCINKOWSKA PROMOTOR:
Dobre praktyki oraz najczęstsze błędy popełniane przez przedsiębiorców r. Piotr Nędzewicz.
Optymalna wielkość produkcji przedsiębiorstwa działającego w doskonałej konkurencji (analiza krótkookresowa) Przypomnijmy założenia modelu doskonałej.
Metody sztucznej inteligencji - Technologie rozmyte i neuronowe 2015/2016 Perceptrony proste nieliniowe i wielowarstwowe © Kazimierz Duzinkiewicz, dr hab.
Definiowanie i planowanie zadań typu P 1.  Planowanie zadań typu P  Zadania typu P to zadania unikalne służące zwykle dokonaniu jednorazowej, konkretnej.
Wykonał: Mgr Inż. Krzysztof Harwacki. Value Mapping for Lean management Sytuacja stanowi mały, prosty przykład zastosowania mapowania strumienia wartości.
Jak tworzymy katalog alfabetyczny? Oprac.Regina Lewańska.
Kompilacja iteracyjna Piotr Błaszyński. Szybkie programy Prawa ograniczające:  prawo Moore'a (jego granice),  prawo Gatesa,  prawo Amdahla,  prawo.
Budżetowanie kapitałowe cz. III. NIEPEWNOŚĆ senesu lago NIEPEWNOŚĆ NIEMIERZALNA senesu strice RYZYKO (niepewność mierzalna)
Dlaczego wybraliśmy zasilacz?  Chcieliśmy wykonać urządzenia, które będzie pamiątką po naszym pobycie w gimnazjum i będzie użyteczne.  Po zastanowieniu.
O PARADOKSIE BRAESSA Zbigniew Świtalski Paweł Skałecki Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski Zakopane 2016.
OFERTA NA ZAMIESZCZENIE REKLAM NA PORTALU JakZdacMatureZmatematyki
Hoopl Higher-order optimization library
Szkoła Podstawowa Nr 47 im. Jana Klemensa Branickiego w Białymstoku
WYKORZYSTANIE CYFROWYCH MODELI WYSOKOŚCIOWYCH
T.15 Wybór narzędzi dla reengineeringu (szczegóły).
ANALIZA ABC/XYZ Zajęcia Nr 8.
Wytwarzanie oprogramowania sterowane przypadkami testowymi
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
On-the-Fly Garbage Collection
Wyniki egzaminu gimnazjalnego Matematyka Rok szkolny 2016/1017
Model ISO/OSI Wykład 4.
Nazwa firmy Plan biznesowy.
Akademia C# lab. 9 Zdarzenia i delegaty.
Podstawy automatyki I Wykład /2016
Optymalizacja programów Open-Source
Przewodnik Udoskonalanie listy wyników w wyszukiwarce naukowej
Wstęp do Informatyki - Wykład 8
Wpływ osiągnięć technicznych XXI wieku wpływających negatywnie na rozwój i kondycję zdrowotną dzieci i młodzieży. Telewizja.
KOREKTOR RÓWNOLEGŁY DLA UKŁADÓW Z NIEMINIMALNOFAZOWYMI OBIEKTAMI Ryszard Gessing Instytut Automatyki, Politechnika Śląska Plan referatu Wprowadzenie.
Tytuł – [najlepiej aby jak najtrafniej oddawał opisywane rozwiązanie]
PROCESY SZLIFOWANIA POWIERZCHNI ŚRUBOWYCH
Tworzenie tabel przestawnych
PROGRAMY DO KONTROLI RODZICIELSKIEJ
Git - system kontroli wersji
Języki programowania.
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Certyfikaty branżowe Odbiorcy docelowi:
Tworzenie modelu: przeglądanie wyników, redukcja rozmiarów modelu.
Nowa jakość studiów II stopnia na PG
Laboratorium 1 – obsługa wejść i wyjść
Prezentacja planu biznesowego
Microsoft Office Project 2003 Professional
SKJ Serwer WWW Michail Mokkas.
Tytuł – [najlepiej aby jak najtrafniej oddawał opisywane rozwiązanie]
Implementacja rekurencji w języku Haskell
Nazwa firmy Biznesplan.
Program na dziś Wprowadzenie Logika prezentacji i artykułu
Mikroekonomia Wykład 4.
WYBRANE ZAGADNIENIA PROBABILISTYKI
Autor: Magdalena Linowiecka
Projekt realizowany pod nadzorem Ministerstwa Edukacji Narodowej VULCAN kompetencji w MAŁOPOLSKICH SAMORZĄDACH Zadać pytanie uczestnikom czym jest.
dr Robert Kowalczyk, PWSZ Płock
Zapis prezentacji:

Możliwości automatycznego zrównoleglania kodu w kompilatorze języka C Piotr Błaszyński Katedra Inżynierii Oprogramowania

Szybkie programy Prawa ograniczające:  prawo Moore'a (jego granice),  prawo Gatesa,  prawo Amdahla,  prawo Gustafsona.

Problemy i rozwiązania Programiści nie znają wszystkich metod uzyskiwania wyższej wydajności, Pracując z istniejącym kodem muszą go dobrze zrozumieć przed dokonaniem zmian. Automatyczne wyszukiwanie najlepszego kodu  sekwencyjnego,  równoległego.

Problemy i inne rozwiązania  LLVM  Profiler guided  HotSpot i JIT (dlaczego muszą być rozpędzone i czy zużywają zasoby)  Architektury się jednak zmieniają

Kompilacja iteracyjna  Przy pomocy modelu statycznego dokonuje się wyboru metod optymalizacji kodu wynikowego jak w tradycyjnym kompilatorze,  Wybierane są parametry dla wybranych optymalizacji,  Generowany jest tymczasowy kod wynikowy z wybranymi wcześniej parametrami,  Testowana jest wydajność kodu wynikowego, informacje te są zwrotnie przekazywane do kompilatora

Kompilacja iteracyjna  Na podstawie powyższych informacji zmieniane są parametry i następuje kolejna kompilacja,  W przypadku jeśli wydajność jest na wystarczającym poziomie, przygotowywana jest wersja ostateczna kodu wynikowego.

Model kompilatora Kod źródłowy Kompilator (analiza statyczna) Ostateczny kod wynikowy Tymczasowy kod wynikowy Profilowanie / symulacja (analiza dynamiczna) System ekspercki Analiza empiryczna Algorytmy ewolucyjne Sprzężenie zwrotne Wyniki empiryczne Pula transformacji

Metody testowania 1.Przygotowanie eksperymentów i na ich podstawie opracowanie części wiedzy 2.Opracowanie modelu Dane wejściowe: Program źródłowy, architektura, rozmiar problemu, zbiór parametrów. Dane wejściowe przekształcane przy pomocy opracowanego modelu. Na wyjściu otrzymujemy wybrane/zaproponowane parametry (zestaw parametrów) dla zadanego kryterium (czas, pamięć, energia). Dodatkowo elementem danych wejściowych dla opracowanego modelu jest wiedza pochodząca z eksperymentów.

Stosowane narzędzia MiiBench + Własny zestaw testowy GCC Własny frontend kompilatora (ANSI C) przygotowanie do analizy zależności

Prosty przykład - loop unrolling Loop Unrolling Żeby można było zmieniać kolejność kodu, w większości przypadku należy zwracać uwagę na granice pojedynczej iteracji pętli (występuje tam przede wszystkim zmiana przepływu sterowania przez instrukcje skoku). Efektywną techniką pozwalającą rozwiązać ten problem jest rozwijanie pętli. Zalecane są niewielkie rozmiary rozwinięć. Dzięki rozwinięciom możliwe jest łatwiejsze, o ile nie ma zależności, znalezienie możliwości zrównoleglenia.

Prosty przykład - loop unrolling Pętla for for (i=0; i<N; i++) S(i); Po rozwinięciu czterokrotnym: for (i=0; i+4<N; i+=4){ S(i); S(i+l); S(i+2); S(i+3); } for( ; i<N; i++) S(i);

Prosty przykład - loop unrolling wszystkie testy z MiiBench, wielkość rozwinięć większa od przyjętej standardowo, własny frontend kompilatora (ANSI C) - modyfikacja źródeł.

Prosty przykład - loop unrolling Przykładowy program w wersji oryginalnej, for (i = 1; i > 8; j = 1 + (j / 2); weight[i] = j << 8; }

Prosty przykład - loop unrolling Przykładowy program w wersji rozwiniętej 4 razy, for (i = 1; i + 4 > 8; j = 1 + (j / 2); weight[i] = j > 8; j = 1 + (j / 2); weight[i+1] = j > 8; j = 1 + (j / 2); weight[i+2] = j > 8; j = 1 + (j / 2); weight[i+3] = j > 8; j = 1 + (j / 2); weight[i] = j << 8; }

Prosty przykład - loop unrolling Przykładowe wyniki: Przed: 8 10 Found dataset: 8 Command line: -z -k -f -c../../consumer_data/2.wav > ftmp_out Loop wrap: 10 real 0m31.143s user 0m30.422s sys 0m0.648s Po: 8 10 Found dataset: 8 Command line: -z -k -f -c../../consumer_data/2.wav > ftmp_out Loop wrap: 10 real 0m29.050s user 0m28.526s sys 0m0.416s

Prosty przykład - loop unrolling Dobór do kompilacji statycznej na danej architekturze: Wychodzi, że dla większości programów wartości dające efekty na architekturze 2-rdzeniowej, procesor E8400, _sensowne zmiany dają wartości loop_unroll z przedziału Należy pamiętać o kosztach zmian: ll a.out4 -rwxr-xr-x 1 ubuntu ubuntu :40 a.out4 ll a.out8 -rwxr-xr-x 1 ubuntu ubuntu :46 a.out8

Zadania - analiza zależności konieczność przetestowania dla dużej liczby przypadków testowych (różne kody źródłowe) dla uzyskania jakości przemysłowej - w przypadku ręcznej ekstrakcji pętli jest niemożliwe do wykonania, własny frontend kompilatora (ANSI C), przygotowanie do analizy zależności, możliwość analizy przy pomocy różnych narzędzi (Petit, Loopo, Candl) o różnych formatach wejściowych, potrzebna również przy rozwijaniu pętli.

Reprezentacja kodu żródłowego Formy pośrednie reprezentacji kodu źródłowego  Gcc  Vhdl2bool  Stepson

Reprezentacja kodu żródłowego Gcc Inne formy przejściowe  Gcc – SSA, GIMPLE tree_list tree_list identifier_node strg: __divdc3 lngt: 8 function_decl srcp: :0  body: undefined  link: extern tree_list tree_list identifier_node strg: __mulxc3 lngt: 8 function_type algn: 8

Reprezentacja kodu żródłowego Gcc Inne formy przejściowe  Gcc Zalety:  Gotowy kompilator,  Standardowy, istnieje wiele rozwiązań opartych o tą formę. Wady:  Skomplikowanie,  Zbyt „odległy” od kodu źródłowego,  Trudny w odczycie przez człowieka

Reprezentacja kodu żródłowego VHDL2BOOL Inne formy przejściowe  Vhdl2bool Drzewo katalogów  Zalety: trywialna obsługa przestrzeni nazw, możliwość zajmowania się tylko fragmentem kodu.  Wady: Konieczność ustalania formatu, Trudności w manipulacji, Problemy z przekształcaniem plików.

Reprezentacja kodu żródłowego Stepson (1):for(i=0 ; i<10 ; i++) { (2):for(j=0 ; j<10 ; j++) { a[i][j] = i+j; b[i][j] = i*j; } (3): for(k=9 ; k>=0 ; k--) { c[i][k] = i+k; d[i][k] = i*k; }

Reprezentacja kodu żródłowego Stepson ParseTree1 (1) (for(i=0 ; i<10 ; i++)) | |-- ParseTree2 (2) (for(j=0 ; j<10 ; j++)) | | | \ ParseTree2a (a[i][j] = i+j;) | \ ParseTree2b (b[i][j] = i*j;) | |-- ParseTree3 (3) (for(k=9 ; k>=0 ; k--)) | \ ParseTree3a (c[i][k] = i+k;) \ ParseTree3b (d[i][k] = i*k;)

Transformacja pętli while Metoda transformacji  Wyszukanie zmiennej, po której iterujemy,  Wyszukanie wszystkich miejsc jej użycia,  Określenie warunku zakończenia pętli

Transformacja pętli while Przekształcenie powyższej pętli: i=0 while (i<n)for (i=0 ; i<n ; i++){a[i] = b[i] + c[i]; i++;}

Transformacja pętli while Inne tranformacje i istotne ograniczenia a=otherList.head() t=list.head();a=otherList.head() while (t!=NULL)for (t=list.head() ; t!=NULL ; t++){ *a = *t + sVal; a++; t++;}

Podsumowanie Cele i osiągnięcia najbliższe  Rozwój bazy testów,  Analiza zależności,  Konwersja while na for,  Zależności i przestrzeń iteracji jako polyhedra (wielościan),  wskaźniki,  Implementacja prostych transformacji. Cele strategiczne:  Kompilacja iteracyjna (również ekstracja wiedzy),  Automatyczne zrównoleglanie dużego zbioru testowego (z naciskiem na wybraną klasę algorytmów),  Większy niż w innych rozwiązaniach podzbiór języka C (w przyszłości również C++, kompilacja kodu zarządzanego)

Dziękuję za uwagę