Kompilator dziedzinowego jezyka do szybkiego implementowania
Transkrypt
Kompilator dziedzinowego jezyka do szybkiego implementowania
Kompilator dziedzinowego jezyka ˛ do szybkiego implementowania transformacji i banków filtrów do cyfrowego przetwarzania sygnałów Marek Parfieniuk, Oskar Świda, Marcin Kazberuk, Kamil Kowalewski Wydział Informatyki Politechnika Białostocka Białystok Konferencja TEWI, Białystok, 17 listopada 2011 Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 1 / 21 Transformacje i banki (zespoły) filtrów Algorytmy powszechnie stosowane w cyfrowym przetwarzaniu sygnałów (obrazu i dźwieku) ˛ Najbardziej znane przykłady: szybkie przekształcenie Fouriera (FFT: Fast Fourier Transform): podstawowe narz˛edzie analizy sygnałów dyskretna transformacja kosinusowa (DCT: Discrete Cosine Transform): podstawa standardów JPEG i MPEG-2 kodowania obrazów/wideo dyskretna transformacja falkowa (DWT: Discrete Wavelet Transform): podstawa standardu JPEG2000 kodowania obrazów Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 2 / 21 Badania w dziedzinie transformacji i banków filtrów Trzy kierunki: opracowywanie nowych algorytmów tego typu dopasowanych do specyficznych zastosowań opracowywanie nowych metod implementacji znanych transformacji o obni żonej złożoności obliczeniowej i/lub niewra żliwych na błedy ˛ zaokragle ˛ ń w implementacji stałoprzecinkowej nowe zastosowania banków filtrów i transformacji: ulepszone algorytmy kompresji, usuwania zakłóce ń, przesyłania obrazu i dźwieku ˛ W każdym przypadku korzystna jest możliwość łatwej implementacji algorytmu i szybkiego prototypowania aplikacji korzystajacej ˛ z niego lub oceniajacej ˛ jego właściwości. Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 3 / 21 Celowość opracowania dedykowanego jezyka ˛ Celowe jest opracowanie dziedzinowego jezyka ˛ do implementowania transformacji i banków filtrów, który wykorzystywałby wła ściwości tych algorytmów do uproszczenia programowania brak dedykowanych narz˛edzi oferujacych ˛ wygodna˛ problemowo-zorientowana˛ składnie˛ i predefiniowane specjalizowane funkcje biblioteczne jezyki, ˛ biblioteki i narz˛edzia ogólnego przeznaczenia = nu żace ˛ programowanie i łatwość popełnienia błedów ˛ dwa wyjatki: ˛ Matlab/Simulink and SPL (Signal Processing Language)/SPIRAL ukierunkowane na obliczenia macierzowe, na których opieraja˛ sie˛ transformacje, ale rozwlekłe i nieczytelne opisy transformacji; np. w SPL odwrotna notacja polska dużo zbytecznych funkcjonalności, a pewnych użytecznych brakuje zaniedbana generacja kodu Java leżace ˛ u ich podstaw założenia uniemożliwiaja˛ skorygowanie niedoskonałości Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 4 / 21 Właściwości obliczeniowe transformacji i banków filtrów Przykład: schemat Loefflera do obliczania DCT 2.2. Co C. Loeffler, A. Lightenberg, and G. Moschytz, “Practical fast 1-D DCT algorithms with 11 multiplications,” in Proc. IEEE Int. Conf. Acoust., Speech, Signal Process. (ICASSP), 1989. Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 5 / 21 Właściwości obliczeniowe transformacji i banków filtrów (cont.) Przekształcenie wektora próbek sygnału w wektor współczynników transformaty lub odwrotnie (transformacja odwrotna). W porównaniu próbek sygału współczynniki transformaty sa˛ znacznie mniej skorelowane i lepiej nadaja˛ sie˛ do kodowania, usuwania szumu, rozpoznawania obrazu itd. Modyfikacja wektora ograniczona do jego mno żenia przez macierz (zwykła˛ lub wielomianowa), ˛ która opisuje system (algorytm). Macierz reprezentowana po średnio jako kompozycja przekształce ń elementarnych (obroty, odbicia, operacje “lifitng”, wzmocnienia, opóźnienia) 1- lub 2-wymiarowych i opisanych macierzami o specyficznej strukturze. Zaleta: mo żliwość parametryzacji macierzy z minimalizacja˛ liczby stopni swobody i wymuszeniem pożadanych ˛ jej własno ści. Zaleta: mo żliwość zmniejszenia zło żoności obliczeniowej. Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 6 / 21 Właściwości obliczeniowe transformacji i banków filtrów (cont.) Faktoryzacja macierzy okre śla specyficzny graf przepływu danych ustalony kierunek przepływu danych ustalona struktura powtarzalne komponenty brak operacji warunkowych/iteracyjnych Możliwe opracowanie deklaratywnego jezyka ˛ do opisywania takich algorytmów, wygodniejszego od jezyków ˛ proceduralnych. M. Parfieniuk. A Dedicated High-level Language for Implementing Nonrecursive Filter Banks and Transforms. In Proc. 17th Int. Conf. "Mixed design of integrated circuits and systems"(MIXDES), p. 536-540, Wroclaw, Poland, 24–26 June 2010. Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 7 / 21 TDL: Transform Description Language 2.2. Comparison to existing tools Listing 1: Schemat Loefflera do DCT a kod TDL ªY1 º «Y » ¬ 2¼ ª cos I « sin I ¬ ªY1 º «Y » ¬ 2¼ Parfieniuk (Politechnika Białostocka) sin I º ª y 1 º cos I »¼ «¬ y 2 »¼ ª1 1º ª y 1 º «1 1» « y » ¬ ¼¬ 2¼ ! " ! " # ! " $ % % $ & ' " Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 8 / 21 TDL: Transform Description Language (cont.) Założenia jezyk ˛ deklaratywny opis transformacji ściśle zwiazany ˛ z jej grafem przepływu danych transformacja jako sekwencja stopni w stopniu specyfikacja wyj ść grafu, który tworza˛ stopnie poprzednie, i operacji, która na nie oddziałuje operacje: mnożenie wektora próbek na wyjściach przez podana˛ macierz, wywołanie transformacji podrz˛ednej na próbkach, zmiana kolejności wyjść, możliwość zadeklarowania transformacji i macierzy do wielokrotnego u żytku notacja macierzowa = podzbiór składni MATLAB Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 9 / 21 Rozwijanie aplikacji z użyciem kompilatora TDL Opis transformacji w języku dziedzinowym TDL Parametry implementacji i opcje generacji kodu Kompilator TDL Implementacja transformacji: kod Java/C/C++ Kod źródłowy aplikacji Kompilator Java/C/C++ Pliki wykonywalne Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 10 / 21 Rozwijanie aplikacji z użyciem kompilatora TDL (cont.) Generowanie kodu Java/C++/C implementujacego ˛ transformacje, ˛ której opis w jezyku ˛ TDL znajduje sie˛ w głównym pliku wej ściowym. Generacja kontrolowana parametrami okre ślonymi w odrebnym ˛ pliku wej ściowym. Pliki wynikowe nale ży dołaczyć ˛ do pozostałej cz˛e ści kodu źródłowego aplikacji wykorzystujacej ˛ transformacje, ˛ a nastepnie ˛ wywoła ć kompilator Java/C/C++ odpowiedni do wybranej platformy implementacyjnej. Dzieki ˛ oddzieleniu opisu od preferencji, ten sam opis mo że być wykorzystywany w różnych projektach opierajacych ˛ sie˛ na danej transformacji. Przystepność ˛ wynikowego kodu źródłowego: opisowe identyfikatory, komentarze objaśniajacymi, ˛ wykorzystanie wyłacznie ˛ standardowych bibliotek Java/C. Możliwość recznej ˛ modyfikacji automatycznie wygenerowanych plików i wykorzystania w sytuacjach, których nie przewidziano opracowujac ˛ kompilator. Implementacja obejmuje 3 procedury Java/C/C++ “resetDelays” : wyzerowanie buforów do implementacji opóźnień “init” : obliczenie współczynników przekształceń elementarnych “process” : przekształcenie wektora wejściowego w wyjściowy; procedura wywoływana iteracyjnie dla kolejnych wektorów z kodu wyższego poziomu Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 11 / 21 Przebieg kompilacji Kod źródłowy TDL Przepływ danych w kompilatorze Cztery pośrednie reprezentacje systemu, Kolejno tworzone jedna na podstawie drugiej Konieczne do uzyskania zało żonej funkcjonalno ści oraz umożliwiajace ˛ zmodularyzowanie projektu Ograniczone mo żliwości użycia gotowych bibliotek do analizy leksykalnej i składniowej, oraz do generacji kodu Parfieniuk (Politechnika Białostocka) Abstrakcyjne drzewo składni (AST) Obiektowy model opisu transformacji Graf przepływu danych Drzewo współczynników Obiektowy model implementacji Kod źródłowy Java/C/C++ implementujący transformację Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 12 / 21 Wykorzystanie ANTLR Najnowocześniejszy obecnie generator parserów, dostepny ˛ na zasadach „open source” i ukierunkowany na rozwijanie jezyków ˛ dziedzinowych. Na podstawie podanej gramatyki, generacja kodu źródłowego do przetwarzania wyrażeń zgodnych z ta˛ gramatyka, ˛ który mo żna wykorzystać w różnych aplikacjach. Możliwość przypisywania akcji (reguł przetwarzania) do elementów gramatyki Dostepno ˛ ść powiazanych ˛ z tym zaawansowanych funkcjonalno ści: automatyczne tworzenie AST, generowanie parserów drzewa, które ułatwiaja˛ translacje˛ wieloprzebiegowa, ˛ interfejs do StringTemplate, biblioteki do przetwarzania wzorców tekstowych, która˛ można wykorzystać do generacji kodu Wniosek: funkcjonalno ści ANTLR do zaawansowanej translacji jezyka ˛ i generacja˛ kodu nie sa˛ zbyt u żyteczne w kompilatorze TDL zbyt duże różnice miedzy ˛ deklaratywna˛ składnia˛ opisów transformacji a proceduralnym kodem docelowej implementacji konieczność tworzenia bardzo skomplikowanych reguł i osadzania kodu Java w definicji gramatyki, co czyniłoby kod źródłowy projektu niespójnym i nieczytelnym, a wiec ˛ uniemożliwiałoby sprawne i poprawne projektowanie-programowanie. T. Parr, The Definitive ANTLR Reference: Building Domain-Specific Languages. Raleigh, NC and Dallas, TX: The Pragmatic Bookshelf, 2007. Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 13 / 21 Szczegóły implementacji Około 150 klas z nastepuj ˛ acych ˛ głównych kategorii Drzewo współczynników. Kompilator: działanie ogólne, analiza leksykalna, parsowanie pliku opisu, sygnalizacja błedów, ˛ generacja plików diagnostycznych. Graf przepływu danych. IDE zespolone z kompilatorem. Kompilator: generacja implementacji, opcje implementacji, analiza pliku kontrolnego. Obiektowy model wyra żeń macierzowych. Bufory znakowe do generacji kodu źródłowego i plików diagnostycznych. Obiektowy model transformacji. Przekształcenie abstrakcyjnego drzewa składni uzyskanego z parsera Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 14 / 21 Szczegóły implementacji (cont.) Konieczność szerokiego korzystania z dziedziczenia. ReferenceSpace Scope MatrixDefinition TransformDefinition Symbol ParameterDefinition StageDefinition Rysunek: Uproszczony diagram UML klas z obiektowego modelu opisu transformacji Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 15 / 21 Szczegóły implementacji (cont.) Matrix ElementwiseFunction Identity Coefficients MatrixReference Sine Negate BinaryOperator Flip Transpose FlipHorizontally ElementwiseDivide ElementwiseMultiply ParameterReference Repeat Filter Cosine ElementwiseSQRT Subtract SingleNumber Add ElementwisePower Diagonal FlipVertically Allpass Concatenate Delay IIR ConcatenateVertically ConcatenateHorizontally FIR CoefficientReference ConcatenateDiagonally Rysunek: Uproszczony diagram UML klas z obiektowego modelu wyrażenia macierzowego Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 16 / 21 Kompilator jako aplikacja komputerowa Aplikacja konsolowa dystrybuowana jako jedno archiwum JAR. Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 17 / 21 Kompilator jako aplikacja komputerowa (cont.) Oprócz jednokrotnej kompilacji, mo żliwość iteracyjnej pracy z u życiem wbudowanego środowiska rozwojowego. Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 18 / 21 Integracja kompilatora z platforma˛ TEWI Pobranie aplikacji z Windchill i lokalne uruchomienie Strona WWW do zdalnej kompilacji na serwerze TEWI Rysunek: Strona WWW kompilacji zdalnej: lista zadań Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 19 / 21 Integracja kompilatora z platforma˛ TEWI (cont.) Rysunek: Strona WWW kompilacji zdalnej: szczegóły zadania Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 20 / 21 Podsumowanie Zdefiniowanie gramatyki jezyka ˛ dziedzinowego jest znacznie łatwiejsze ni ż opracowanie odpowiedniego kompilatora. Przekształcenie deklaratywnego opisu TDL systemu w proceduralna˛ implementacje˛ nie jest proste. Konieczne jest u życie kilku złożonych struktur danych: abstrakcyjnego drzewa składni, obiektowego modelu transformacji, grafu przepływu danych i drzewa współczynników. Tylko pierwsza˛ strukture˛ mo że łatwo uzyskać za pomoca˛ parsera wygenerowanego z u życiem ANTLR. Pozostałe struktury i przej ścia miedzy ˛ nimi sa˛ dosyć trudne i pracochłonne w projektowaniu i implementacji. Parfieniuk (Politechnika Białostocka) Kompilator dziedzinowego jezyka ˛ ... TEWI 2010 21 / 21