PROGRAMOWE ŚRODOWISKO ZAUTOMATYZOWANEGO PROJEKTOWANIA ARCHITEKTUR URZĄDZEŃ RÓWNOLEGŁYCH PRZEZNACZONYCH DO IMPLEMENTACJI W FPGA I/LUB ASIC Oleg Maslennikow, Andrzej Wąsik, Dariusz Gretkowski, Jerzy Kaniewski Politechnika Koszalińska, Wydział Elektroniki Streszczenie Celem pracy jest stworzenie środowiska CAD zautomatyzowanego projektowania struktur wyspecjalizowanych urządzeń równoległych (typu macierzy procesorowych). Środowisko zawiera trzy współpracujące pomiędzy sobą programy umożliwiające konstruowanie i edycję grafów regularnych algorytmów zadanych w postaci zagnieżdżonych pętli, a następnie ich odwzorowanie w architektury np. macierzy procesorowych z wybranymi przez użytkownika parametrami. Środowisko może być wykorzystane do uzyskania i optymalizacji struktur wyspecjalizowanych urządzeń w celu ich dalszej implementacji w postaci ASIC lub na bazie FPGA. W pracy przedstawione zostały podstawowe etapy opracowanej przez autorów metody odwzorowania algorytmów, oraz krótki opis opracowanych programów. Testowanie elementów środowiska na przykładach algorytmów cyfrowego przetwarzania sygnałów i algebry liniowej potwierdziło prawidłową pracę programów we wszystkich trybach. Realizacja licznych zadań DSP sprowadza się do rozwiązania algorytmów algebry liniowej w czasie rzeczywistym[1,3]. Algorytmy DSP, takie jak cyfrowa filtracja, transformacja Fouriera, rozwiązywanie układów liniowych, metoda najmniejszych kwadratów charakteryzują się dużą ilością obliczeń [3,4]. Stwarza to konieczność realizacji tych algorytmów w specjalnych, wysokowydajnych systemach obliczeniowych. Macierze procesorowe (PA) są przykładem tego typu struktur. Wykorzystują one regularność wielu algorytmów w celu osiągnięcia wysokiej wydajności, a dzięki znacznej ilości połączeń lokalnych nie wymagają dużej ilości wymienianej informacji poprzez układy wej/wyj. Struktury macierzy procesorowych VLSI mogą być zaimplementowane [1,2,3,4,5] w układach ASIC lub FPGA. Zastosowanie systemów DSP w FPGA ma szereg korzyści takich jak pełne przystosowanie implementowanych struktur FPGA do algorytmu, wysoka przepustowość, efektywność wykorzystania sprzętu, uzyskanie dużej dokładności obliczeń. W pracy opisane zostały podstawowe etapy proponowanej metodologii projektowania [4] struktur PA. Następnie na przykładzie algorytm filtracji FIR przedstawiono syntezę struktury PA przystosowanej do wykonywania tego algorytmu. 1. WPROWADZENIE Rozwój współczesnej technologii VLSI przyczynił się do pojawienia reprogramowalnych cyfrowych układów scalonych FPGA. Struktura wewnętrzna takich układów może być szybko i wielokrotnie zmieniana programowo przez użytkownika w celu dopasowania jej do wykonywanych zadań [1, 2]. Takie układy przeznaczone są głównie do konstruowania wydajnych wyspecjalizowanych systemów komputerowych (WSK) z najkorzystniejszym w porównaniu do innych systemów obliczeniowych stosunkiem wydajności do ceny i najkrótszym czasem projektowania i realizacji [3, 4]. Głównym przeznaczeniem WSK jest praca w czasie rzeczywistym z sygnałami, które przy pomocy przetworników A/D zostają przekształcone w wejściowe dane dla WSK. Z tego powodu WSK zwykle są urządzeniami równoległymi (np. macierzami procesorowymi (MP)), operują z danymi wejściowymi przedstawionymi w postaci macierzy lub wektorów i realizują regularne algorytmy. Wykorzystanie układów FPGA do realizacji WSK posiada kilka innych ważnych zalet: wysoki współczynnik wykorzystania zasobów układu, dużą dokładność (precyzję) obliczeń, oraz znaczne skrócenie czasu projektowania i weryfikacji od poziomu logicznego w sprzętowego. W chwili obecnej istnieje kilka pakietów CAD zawierających emulatory języków opisu sprzętu HDL [5,6] i programy do rozmieszczania i trasowania połączeń które
umożliwiają szybkie opracowanie schematu WSK na poziomie logicznym, jego modelowanie oraz otrzymanie plików konfigurujących wewnętrzną strukturę układu FPGA. Brak natomiast CAD-pakietów wykonujących odwzorowanie realizowanych algorytmów w architektury wyspecjalizowanych systemów obliczeniowych, które pozwalają uzyskać zoptymalizowaną według wybranych kryteriów strukturę WSK. Oprócz tego, proces odwzorowania nie jest do końca zautomatyzowany i wymaga w wielu przypadkach zastosowania specjalnych metod (np. ekwiwalentnych przekształceń grafów algorytmów). Dlatego w pracy opisane zostało opracowane przez autorów środowisko zautomatyzowanego projektowania struktur równoległych WSK typu macierzy procesorowych (MP) [7,8]. Środowisko zawiera trzy współpracujące pomiędzy sobą programy pozwalające na konstruowanie i edycję grafów algorytmów zadanych w postaci zagnieżdżonych pętli oraz ich odwzorowanie w architektury MP. Środowisko może być wykorzystane do generacji i optymalizacji struktur MP w celu ich dalszej implementacji w postaci ASIC, lub na bazie FPGA. 2. PODSTAWOWE ETAPY METODY ODWZOROWANIA REGULARNYCH ALGORYTMÓW W ARCHITEKTURY MACIERZY PROCESOROWYCH Macierze procesorowe mogą być projektowane w sposób systematyczny poprzez zastosowanie liniowych odwzorowań algorytmów zadanych rekursywnie w postaci systemu równań rekurencyjnych lub gniazd pętli [7,8,10-12]. Ogólnie, w procesie projektowania wyróżnić można następujące etapy: 1. Uzyskanie grafu zależności informacyjnych (GZI) algorytmu zadanego w formie zagnieżdżonych pętli. 2. Odwzorowanie przydziału (ang. alocation mapping) poszczególnych obliczeń do elementów przetwarzających (EP) systemu. 3. Odwzorowanie szeregujące (ang. schedule mapping) poszczególne obliczenia w czasie. Zgodnie z opracowaną przez autorów metodą [8] odwzorowania regularnych algorytmów na równoległe architektury wyspecjalizowanych urządzeń, pierwszą zasadniczą fazą projektowania jest faza uzyskania regularnej grafowej reprezentacji algorytmu wejściowego zadanego w postaci zagnieżdżonych pętli. Druga faza polega na uzyskaniu zbioru architektur MP realizujących zadany algorytm. W tym celu otrzymany wcześniej graf poddawany jest liniowym, przestrzenno-czasowym odwzorowaniom F spełniającym określone warunki (brak konfliktów w dostępie do elementów przetwarzających itp.). Ostatecznie znajdowana jest najlepsza architektura (ze wszystkich możliwych), realizująca zadany algorytm zgodnie z kryteriami wybranymi przez projektanta (np. ogólny czas realizacji algorytmu, przepustowość systemu, stopień wykorzystania elementów przetwarzających, itd.). Bardzo ważną zaletą pierwszej fazy jest możliwość wykonania ekwiwalentnych (np. izomorficznych) przekształceń otrzymanego bazowego grafu zależności informacyjnych algorytmu. Ważność tej zalety polega na tym, że dopuszczalne wartości przestrzennoczasowych odwzorowań F algorytmu nie mogą wychodzić poza pewną dziedzinę, którą określa konkretna wersja jego grafu zależności informacyjnych. Wersja ta nie tylko determinuje dopuszczalne topologie sieci połączeń między elementami przetwarzającymi MP, lecz również częściowo określa porządek realizacji operatorów algorytmu. Dlatego dla rozszerzenia zbioru schematów strukturalnych realizujących dany algorytm potrzebnym jest wykonanie celowych transformacji bazowego grafu zależności informacyjnych, odpowiadającego wykonaniu algorytmu zgodnie z zadanym porządkiem leksykograficznym. Pozwala to wydobyć ukryte właściwości algorytmu i wykorzystać je do syntezy architektur MP o pożądanych cechach takich, jak np. zoptymalizowana topologia sieci połączeń między EP, zwiększony współczynnik wykorzystania EP, itd. Dla algorytmu przedstawionego w postaci gniazda pętli z regularnymi zależnościami informacyjnymi, jego graf zależności informacyjnych (GZI) wraz z macierzą zależności
informacyjnych D może być otrzymany w sposób analityczny [13,14], bądź też wykorzystując opracowaną przez autorów metodę [9]. Metoda ta bazuje na symbolicznym wykonaniu gniazda pętli, zgodnym z zadanym porządkiem leksykograficznym. W przeciwieństwie do metod analitycznych, dana metoda jest łatwiejsze do implementacji w systemach komputerowych, zapewniając jednocześnie możliwość operowania z szerszym zakresem algorytmów użytkownika. Na przykład, pojawia się możliwość operowania nie tylko z jednorodnymi algorytmami rekursywnymi, którym odpowiadają elementarne gniazda pętli, lecz także z niejednorodnymi algorytmami, odpowiadającymi złożonym gniazdom pętli. Oprócz tego, zaproponowana metoda pozwala na uzyskanie macierzy D zależności informacyjnych algorytmu, przy czym wyznaczenie macierzy D nie wymaga, aby konstruować GZI w sposób jawny. Ponieważ macierze zależności informacyjnych wykorzystywane są w większości znanych metod projektowania dedykowanych MP, np. [7,8,12,14], to opisana możliwość staje się szczególnie istotna dla algorytmów charakteryzujących się wymiarem n > 3 (kiedy graf algorytmu trudno przedstawić w postaci graficznej). Dlatego opracowane przez autorów środowisko zawiera program Generator do konstruowania GZI regularnych algorytmów, edytor graficzny Graf do wizualizacji i transformacji otrzymanych grafów oraz program Designer wykonujący liniowe, przestrzenno-czasowe odwzorowanie F n-wymiarowego grafu algorytmu w m-wymiarowe architektury MP. Każde z tych odwzorowań składa się z dwóch składowych: odwzorowania przydziału F S i odwzorowania szeregującego F T, gdzie F S zadaje strukturę S urządzenia, F T - funkcję T synchronizacji obliczeń, zaś wspólnie F S i F T determinują zbiór φ algorytmów funkcjonowania EP. Dokładny opis metod realizowanych przez elementy składowe opracowanego środowiska został przedstawiony w pracach [8,9]. 3. ŚRODOWISKO ZAUTOMATYZOWANEGO PROJEKTOWANIA ARCHITEKTUR RÓWNOLEGŁYCH, WYSPECJALIZOWANYCH URZĄDZEŃ Ze względu na wszechobecność systemu operacyjnego Windows 9X, wszystkie programy środowiska pracują w tym systemie. Do realizacji aplikacji użyto pakietu Borland Delphi. Zasadniczo, programy nie mają żadnych innych wymagań sprzętowych oprócz systemu operacyjnego. 3.1. Program GENERATOR do konstrukcji grafów zależności informacyjnych algorytmów Program realizuje opracowaną przez autorów metodę konstruowania grafów zależności informacyjnych algorytmów przedstawionych w postaci zagnieżdżonych pętli. Do analizy program wykorzystuje kod źródłowy w języku PASCAL. Kod źródłowy może zawierać: stałe, zmienne, zmienne indeksowane, instrukcje przypisania, złożone (begin... end), iteracyjne (for... to... do...), warunkowe (if...then...else...). Główne Menu programu przedstawiono na rys.1.
Rys.1. Okno główne programu Generator. Dane wejściowe programu Generator mogą być wprowadzone na dwa sposoby: bezpośrednio. Program zawiera wbudowany mini-edytor tekstu, który ma możliwość redagowania plików tekstowych. z pliku tekstowego (z rozszerzeniem.txt bądź.pas). Interesujący fragment kodu (algorytm), może być wprowadzony bezpośrednio z istniejącego pliku, a następnie poddany odpowiednim przekształceniom do postaci akceptowanej przez program. Format danych wyjściowych został określony w taki sposób, aby był czytelny zarówno dla użytkownika pracującego z programem, jak również przydatny dla programu rysującego graf. Dane wyjściowe wyprowadzane są na ekran w postaci kolumn cyfr. Istnieje możliwość ich edycji przed zapisaniem w postaci pliku tekstowego. Znaczenie poszczególnych kolumn wyjaśnia rys.2 (pokazany fragment odpowiada algorytmowi eliminacji Gaussa). Na podstawie kolejnych kolumn wyliczane są łuki grafu. Bezpośrednio po uruchomieniu programu otwiera się okno główne programu (rys.1). Praca z programem jest w dużej mierze intuicyjna. Układ menu jest zbliżony do menu typowych edytorów tekstu środowiska Windows 9X. Dokumenty otwierają się każdy w oddzielnym oknie, co umożliwia wspólną pracę na kilku dokumentach. Funkcje menu Okno pozwalają odpowiednio układać okna dokumentów. Możliwe jest również drukowanie dokumentów, zarówno pliku badanego, jak też pliku wynikowego. Szczególnie widoczne są dwa klawisze na panelu: Generacja zależności informacyjnych i Zapis wyniku. Pierwszy klawisz służy do rozpoczęcia badania kodu wejściowego. Po jego naciśnięciu na ekranie ukazuje się dokument wynikowy. Wciśnięcie drugiego klawisza powoduje zachowanie wyników w odpowiednim pliku *.txt. Jako przykład, na rys.1 w lewym okienku przedstawiono zapis w Pascalu algorytmu eliminacji Gaussa, a w prawym górnym okienku wyniki pracy programu Generator dla drugiego gniazda pętli tego algorytmu dla macierzy wejściowej A(4x4).
3.2. Edytor graficzny GRAF Program Graf przeznaczony jest do wyświetlania grafów algorytmów oraz struktur macierzy procesorowych, i w szczególności wykonuje następujące funkcje: a) wizualizacja grafu w postaci trójwymiarowego rzutu na płaszczyznę z uwzględnieniem skalowania oraz obrotu o dowolny kąt płaszczyznowy, np. j-k, i-k, i-j; b) edycja grafu poprzez dodawanie oraz usuwanie wektorów i wierzchołków; c) rzuty grafu na płaszczyzny określone współrzędnymi grafu np. j-k, i-k, i-j; d) drukowanie otrzymanego grafu; e) zapisanie wyniku pracy w postaci listy wektorów grafu w pliku tekstowym (rys.3); Jako dane wejściowe program Graf wykorzystuje plik wyjściowy programu Generator (w przypadku wizualizacji grafu algorytmu) lub plik wyjściowy programu Designer (w przypadku wizualizacji struktury urządzenia) w formacie pliku wyjściowego programu Generator (patrz. Rys.2). W powyższym pliku zawarte są informacje o współrzędnych węzłów, o ich typie oraz o łukach które łączą wybrane węzły. Program analizuje plik wejściowy, oblicza współrzędne wszystkich jego łuków, i po dokonaniu tych wszystkich czynności wyświetla gotowy graf GZI. W trakcie pracy programu możliwe jest edytowanie pliku wejściowego. Po dokonaniu tej czynności program automatycznie aktualizuje wyświetlany graf. Po edycji grafu można zapisać go także do pliku tekstowego *.txt, lecz o innej strukturze wewnętrznej. Format pliku wyjściowego programu Graf przedstawiony został na rys. 3 (gdzie pokazany fragment odpowiada algorytmowi eliminacji Gaussa). Po uruchomieniu programu z plikiem wejściowym na ekranie pojawia się okno edytora graficznego z odpowiednim kolorowym grafem przestrzennym (różny kolor wierzchołków odpowiada różnym typom operacji algorytmu). Okno to przedstawione jest na rys.4. Po prawej stronie okna edytora graficznego znajduje się panel narzędziowy zawierający wszystkie funkcje wspomagające wizualizację grafu: obrót grafu w trzech płaszczyznach jk,ik,ij o kąt - 180 +180 (3D rotate); szybki obrót i rzut na każdą z trzech płaszczyzn jk,ik i ij (View side); powiększenie - 500% +500% (Zoom); przemieszczanie obiektu na płaszczyźnie w pionie i poziomie - 100% +100% (2D position); podział grafu na poszczególne płaszczyzny oraz grupy wektorów (Toggle view); dodawanie wektora o współrzędnych i, j, k oraz kolorze (Add vector); usuwanie wektora z listy wektorów (Remove vector); Indeksy zmiennych współrzędne węzłów występujących w typ węzła algorytmie numer węzła c w 1 2 3 [1,1] [1,2] [2,2] i j k a[j,k] a[i,k] m[j,i] 1 0 1 2 2 2 1 1 2 2 2 2 1 1 3 3 2 1 1 3 2 3 3 2 1 2 4 2 1 1 4 2 4 4 2 1 3 2 3 1 1 2 3 2 5 2 1 3 3 3 1 1 3 3 3 6 2 1 3 4 3 1 1 4 3 4 7 0 1 4 2 4 1 1 2 4 2 8 0 1 4 3 4 1 1 3 4 3 Rys. 2. Format danych wyjściowych programu Generator oraz danych wejściowych programów Graf i Designer Współrzędne węzła rozpoczynającego łuk Liczba porządkowa from to 1 (1,2,2) (1,2,3) 2 (1,2,3) (1,2,4) 3 (1,3,2) (1,3,3) 4 (1,3,3) (1,3,4) 5 (1,4,2) (1,4,3) 6 (1,4,3) (1,4,4) 7 (2,3,3) (2,3,4) 8 (2,4,3) (2,4,4) Współrzędne węzła kończącego łuk
Rys. 3. Format danych wyjściowych wejściowych programów Designer programu GRAF oraz danych Jako przykład, na rys.4 przedstawiono graf algorytmu eliminacji Gaussa (bez wyboru elementu wiodącego) dla macierzy wejściowej A(4x4). Rys. 4. Okno edytora graficznego programu GRAF. 3.3. Program DESIGNER odwzorowujący graf algorytmu w architektury macierzy procesorowych Program korzysta z dwóch plików wejściowych, które są plikami wyjściowymi programów GENERATOR i GRAF (formaty plików zostały przedstawione na rys.2 i rys.3). Z pierwszego pliku, zawierającego opis węzłów grafu odczytywana jest liczba n określająca wymiar przestrzeni grafu, ilość węzłów, oraz współrzędne poszczególnych węzłów. Na podstawie drugiego pliku tworzona jest macierz zależności informacyjnych algorytmu D, zawierająca wszystkie różniące się od siebie łuki grafu. W założeniach przyjęto, że liczba n może maksymalnie wynosić 3. Jest to spowodowane tym, że jednym z plików wejściowych programu DESIGNER jest plik wyjściowy programu GRAF, którego wygenerowanie jest możliwe jedynie w przypadku gdy liczba n 3. Jeżeli podane przez użytkownika nazwy były prawidłowe, program otworzy dwa okna zawierające dane z plików wejściowych (patrz rys.5).
Rys. 5. Główne okno programu Designer W celu przeprowadzenia odwzorowania należy wybrać opcję Run i zatem wybrać wymiar struktury urządzenia oraz jedno lub kilka kryteriów optymalizacji otrzymywanych rozwiązań (patrz odpowiednio rys.6 i rys.7). Po odczytaniu danych wejściowych program generuje wszystkie możliwie warianty funkcji odwzorowań F. Dla każdego z tych wariantów generowana jest struktura urządzenia, oraz parametry czasowe, które zostają następnie zapisane w pliku wyjściowym. Program zapisuje dwa pliki wyjściowe. W pierwszym pliku o nazwie zdefiniowanej przez użytkownika znajdują się tylko te rozwiązania, które odpowiadają wybranym przez użytkownika kryteriom (np. mają najmniejszą liczbę EP, lub czas realizacji algorytmu). Drugi plik zawiera wszystkie możliwe rozwiązania (architektury). Obydwa pliki mają taką samą strukturę, różnią się tylko ilością zawartych wariantów rozwiązań. Format plików wyjściowych programu Designer przedstawiono na rys.8. W pierwszej (górnej) części opisu wariantu rozwiązania znajdują się: macierze Fs i Ft określające odpowiednio strukturę urządzenia i kolejność obliczeń; czas wykonania algorytmu w taktach oraz ilość elementów przetwarzających; macierz Delta, określająca ilość i kierunek kanałów łączących EP w strukturze MP. Rys. 6. Wybór wymiaru struktury docelowego urządzenia Rys. 7. Wybór parametrów docelowego urządzenia.
W drugiej części opisu rozwiązania znajduje się macierz G1, której kolejne kolumny oznaczają: nr węzła w grafie algorytmu (NR), typ węzła (TYP), współrzędne węzła (n kolumn poczynając od trzeciej), nr taktu (TAKT), w którym dany węzeł będzie wykonany, oraz współrzędne elementu przetwarzającego (NR EP), w którym dany węzeł zostanie obliczony. Trzecia, ostatnia część opisu rozwiązania zawiera opis urządzenia. Kolumny tej macierzy zawierają: nr porządkowy elementu przetwarzającego (NR), typ elementu przetwarzającego (ST), oraz współrzędne elementu przetwarzającego (NR EP). Przedstawiony na rys.8 fragment pliku wyjściowego odpowiada dwuwymiarowej strukturze urządzenia do realizacji algorytmu eliminacji Gaussa. Rys. 8. Format pliku wyjściowego programu DESIGNER 4. WNIOSKI Celem pracy było stworzenie środowiska CAD zautomatyzowanego projektowania struktur równoległych wyspecjalizowanych urządzeń (np. macierzy procesorowych). Środowisko zawiera trzy współpracujące między sobą programy pozwalające na konstruowanie i edycję grafów regularnych algorytmów zadanych w postaci zagnieżdżonych pętli, a następnie ich odwzorowanie w architektury wyspecjalizowanych urządzeń z wybranymi przez użytkownika parametrami. Testowanie składowych środowiska na przykładach algorytmów cyfrowego przetwarzania sygnałów i algebry liniowej wykazało prawidłową pracę programów we wszystkich trybach. W obecnej wersji programy środowiska mają kilka istotnych ograniczeń, takich jak: wymiar n przestrzeni grafu algorytmu, który może maksymalnie wynosić 3; parametry czasowe rozwiązań generowane są jedynie w wypadku gdy n-m=1. W przyszłości
przewidziane jest usunięcie tych ograniczeń, poszerzenie możliwości edycji grafów, oraz połączenie trzech programów w jedną całość. LITERATURA [1]. The Programmable Logic Data Book. Xilinx, Inc., 1999. [2]. Altera Device Logic Data Book. Altera, Inc., 1999. [3]. G.R. Goslin. A Guide to Using Field Programmable Gate Arrays (FPGAs) for Application-Specific Digital Signal Processing Performance. Xilinx, Inc., 1995. [4] J. Kaniewski, R. Berezowski, D. Gretkowski, O. Maslennikow, P. Sołtan, VHDL-models of parallel fir digital filters. Workshop Signal Processing 99, Poznań, 1999, pp.95-100. [5]. www.xilinx.com [6]. www.aldec.com [7]. Kung S.Y. VLSI processor arrays. Prentice Hall, Englewood Cliffs, 1988. [8]. Wyrzykowski R., Kanevski J.S., Maslennikov O. Mapping recursive algorithms into processor arrays. Proc. Int. Workshop Parallel Numerics'94, Smolenice, (Slovakia), 1994, pp.169-191. [9]. Wyrzykowski R., Kanevski J, Maslennikova N., Maslennikov O., Ovramenko S. Formalized Construction Method of Array Functional Graphs for Regular Algorithms. Engineering Simulation, 1997, Vol.14, pp.217-232. [10]. Moreno J.H., Lang T. Matrix computations on systolic-type arrays. Kluwer Acad.Publ., Boston, 1992. [11]. Darte A., Robert Y.: Mapping uniform loop nests onto distributed memory architectures. Parallel Computing, 1994, 20, pp.679-710. [12]. Shang W., Fortes J.A.B.: On time mapping of uniform dependence algorithms into lower dimensional processor arrays. IEEE Trans. Parallel and Distr. Systems, 1992, 3, (3), pp.350-363. [13]. Barada H., El-Amawy A.: A methodology for algorithm regularization and mapping into time-optimal VLSI arrays, Parallel Computing, 1993, V. 19, pp.33-61 [14]. Rajopadhye, S.V.: Synthesizing systolic arrays with control signals from recurrence equations. Distributed Computing, 1989, 3, pp.88-105.