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