Wybrane metodologie wspierające sprzętową akcelerację obliczeń wielkiej skali

Podobne dokumenty
Systemy wbudowane. Uproszczone metody kosyntezy. Wykład 11: Metody kosyntezy systemów wbudowanych

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Większe możliwości dzięki LabVIEW 2009: programowanie równoległe, technologie bezprzewodowe i funkcje matematyczne w systemach czasu rzeczywistego

Metody optymalizacji soft-procesorów NIOS

i3: internet - infrastruktury - innowacje

Efekt kształcenia. Ma uporządkowaną, podbudowaną teoretycznie wiedzę ogólną w zakresie algorytmów i ich złożoności obliczeniowej.

Zadania badawcze prowadzone przez Zakład Technik Programowania:

INŻYNIERIA OPROGRAMOWANIA

Systemy na Chipie. Robert Czerwiński

Sprzętowo wspomagane metody klasyfikacji danych

Efekty kształcenia dla kierunku studiów INFORMATYKA, Absolwent studiów I stopnia kierunku Informatyka WIEDZA

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Numeryczna algebra liniowa

Obliczenia Wysokiej Wydajności

POLITECHNIKA WARSZAWSKA Wydział Elektroniki i Technik Informacyjnych. Instytut Telekomunikacji Zakład Podstaw Telekomunikacji

Obliczenia Wysokiej Wydajności

EFEKTY KSZTAŁCENIA DLA KIERUNKU STUDIÓW

Podsumowanie wyników ankiety

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Katedra Mikroelektroniki i Technik Informatycznych

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

Odniesienie do efektów kształcenia dla obszaru nauk EFEKTY KSZTAŁCENIA Symbol

Nowoczesne technologie przetwarzania informacji

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

Algorytmy i Struktury Danych

Państwowa Wyższa Szkoła Techniczno-Ekonomiczna w Jarosławiu

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

Dr inż. hab. Siergiej Fialko, IF-PK,

METODY ZINTEGROWANEGO PROJEKTOWANIA SPRZĘTU I OPROGRAMOWANIA Z WYKORZYSTANIEM NOWOCZESNYCH UKŁADÓW PROGRAMOWALNYCH

PRZEWODNIK PO PRZEDMIOCIE

PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W NYSIE

Historia modeli programowania

EFEKTY UCZENIA SIĘ DLA KIERUNKU INŻYNIERIA DANYCH W ODNIESIENIU DO EFEKTÓW UCZENIA SIĘ PRK POZIOM 6

Opinia o pracy doktorskiej pt. Damage Identification in Electrical Network for Structural Health Monitoring autorstwa mgr inż.

Podstawy Informatyki Systemy sterowane przepływem argumentów

KIERUNKOWE EFEKTY KSZTAŁCENIA

Mechatronika i inteligentne systemy produkcyjne. Modelowanie systemów mechatronicznych Platformy przetwarzania danych

Szybkie prototypowanie w projektowaniu mechatronicznym

Adam Korzeniewski - p. 732 dr inż. Grzegorz Szwoch - p. 732 dr inż.

Opinia o pracy doktorskiej pt. On active disturbance rejection in robotic motion control autorstwa mgr inż. Rafała Madońskiego

Literatura. 11/16/2016 Przetwarzanie równoległe - wstęp 1

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Dodatkowo planowane jest przeprowadzenie oceny algorytmów w praktycznym wykorzystaniu przez kilku niezależnych użytkowników ukończonej aplikacji.

10/14/2013 Przetwarzanie równoległe - wstęp 1. Zakres przedmiotu

Program Obliczeń Wielkich Wyzwań Nauki i Techniki (POWIEW)

KIERUNKOWE EFEKTY KSZTAŁCENIA

RECENZJA ROZPRAWY DOKTORSKIEJ

Programowanie procesorów graficznych GPGPU

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

Podstawy techniki cyfrowej i mikroprocesorowej - opis przedmiotu

USŁUGI HIGH PERFORMANCE COMPUTING (HPC) DLA FIRM. Juliusz Pukacki,PCSS

Moc płynąca z kart graficznych

Projektowanie systemów za pomocą języków wysokiego poziomu ESL

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Mikroprocesory rodziny INTEL 80x86

Opracował: Jan Front

Kryptografia na procesorach wielordzeniowych

Podstawy programowania

Architektury akceleratorów kryptograficznych opartych o układy programowalne. Marcin Rogawski

Odniesienie symbol II/III [1] [2] [3] [4] [5] Efekt kształcenia. Wiedza

Zapisywanie algorytmów w języku programowania

Co to jest jest oprogramowanie? 8. Co to jest inżynieria oprogramowania? 9. Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką?

Projektowanie. Projektowanie mikroprocesorów

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

INŻYNIERIA OPROGRAMOWANIA

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

UCHWAŁA NR 46/2013. Senatu Akademii Marynarki Wojennej im. Bohaterów Westerplatte z dnia 19 września 2013 roku

Dyrektor ACK Cyfronet AGH. z dnia 2 października 2017 roku w sprawie zmian organizacyjnych

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Algorytmy i struktury danych, C3

EFEKTY KSZTAŁCENIA DLA KIERUNKU STUDIÓW NAUCZANIE MATEMATYKI I INFORMATYKI

Architektury komputerów Architektury i wydajność. Tomasz Dziubich

Task Parallel Library

1. Tabela odniesień efektów kierunkowych do efektów obszarowych z komentarzami

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Literatura. 3/26/2018 Przetwarzanie równoległe - wstęp 1

Wydajność programów sekwencyjnych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Zaawansowane technologie w nowoczesnych układach sterowania

Informatyka, studia I stopnia (profil ogólnoakademicki) - wersja

Elektronika cyfrowa i mikroprocesory. Dr inż. Aleksander Cianciara

PROGRAM KSZTAŁCENIA dla kierunku automatyka i robotyka studiów pierwszego stopnia o profilu ogólnoakademickim

Zakładane efekty kształcenia dla kierunku Wydział Telekomunikacji, Informatyki i Elektrotechniki

Zagadnienia egzaminacyjne AUTOMATYKA I ROBOTYKA. Stacjonarne I-go stopnia TYP STUDIÓW STOPIEŃ STUDIÓW SPECJALNOŚĆ

Wykorzystanie architektury Intel MIC w obliczeniach typu stencil

Efekt kształcenia. Wiedza

EFEKTY KSZTAŁCENIA DLA KIERUNKU STUDIÓW INFORMATYKA

Wykorzystanie układów FPGA w implementacji systemów bezpieczeństwa sieciowego typu Firewall

zna metody matematyczne w zakresie niezbędnym do formalnego i ilościowego opisu, zrozumienia i modelowania problemów z różnych

Zaawansowane programowanie w języku C++

[1] [2] [3] [4] [5] [6] Wiedza

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Efekty kształcenia wymagane do podjęcia studiów 2 stopnia na kierunku Informatyka

Transkrypt:

Akademia Górniczo-Hutnicza w Krakowie Wydział Elektroniki, Informatyki i Telekomunikacji Marcin Pietroń Wybrane metodologie wspierające sprzętową akcelerację obliczeń wielkiej skali Rozprawa doktorska Promotor prof. dr hab. inż. Kazimierz Wiatr Kraków, 2013 1

Spis treści 1. Wstęp............................................................. 6 1.1. Motywacja........................................................... 6 1.2. Cel i teza pracy.................................................. 9 1.3. Organizacja pracy............................................... 10 1.4. Podziękowania.................................................. 11 2. Platformy sprzętowe................................................. 12 2.1. Platformy sprzętowe i obliczenia równoległe......................... 12 2.2. Platformy GP-GPU.............................................. 13 2.3. Układy rekonfigurowalne FPGA................................... 16 2.4. Procesory wielordzeniowe i specjalizowane.......................... 18 2.5. Platformy sprzętowe zastosowane w pracy........................... 20 2.5.1. Platforma RASC........................................... 20 2.5.2. Platforma DRC............................................ 21 2.5.3. Karty graficzne NVIDIA Tesla m2070 i m2090.................. 23 3. Środowiska programowania akceleratorów sprzętowych.................. 25 3.1. Środowisko CUDA............................................... 25 3.2. Języki HLL..................................................... 28 3.2.1. Język ImpulseC............................................ 30 3.2.2. Język MitrionC............................................ 32 4. Operacje zmiennoprzecinkowe oraz funkcje elementarne implementowane 35 w akceleratorach sprzętowych......................................... 4.1. Operacje zmiennoprzecinkowe w układach FPGA i kartach graficznych 35 4.2. Funkcje elementarne na przykładzie funkcji eksponenty............... 38 5. Metody analizy algorytmów pod kątem wykrywania ich wewnętrznej równoległości 44............................................................ 5.1. Metody analizy ad-hoc........................................... 48 5.2. Formalne metody analizy algorytmów.............................. 52 5.2.1. Zależności w pętlach programowych.......................... 52 5.2.2. Metody analityczne wykrywania równoległości................. 60 2

6. System profilingu i automatycznej analizy kodu źródłowego............... 64 6.1. Generator grafu przepływu danych................................ 68 6.2. Profiler pętli.................................................... 68 6.3. Algorytmy profilowania.......................................... 72 6.4. Profilowanie danych............................................. 86 7. Implementacja wybranych algorytmów analizy danych................... 91 7.1. Algorytmy sortowania............................................ 91 7.2. Implementacja operacji bazodanowych............................. 96 7.3. Algorytmy porównywania i analizy danych.......................... 102 7.3.1. Algorytm porównywania tekstowego oparty na haszowaniu....... 102 7.3.2. Algorytmy tekstowe........................................ 106 7.3.3. Obliczanie histogramu...................................... 110 8. Implementacja wybranych algorytmów w akceleratorach sprzętowych...... 111 8.1. Implementacja wybranych algorytmów algebry liniowej............... 111 8.1.1. Implementacja mnożenia macierzy............................ 111 8.1.2. Implementacja rozwiązywania układów równań liniowych........ 121 8.2. Paraboliczne cząstkowe równania różniczkowe....................... 125 8.3. Algorytm N-body................................................ 127 8.4. Akceleracja sprzętowa Metod Monte Carlo.......................... 131 8.5. Implementacja algorytmu SVM.................................... 134 9. Podsumowanie...................................................... 140 10. Bibliografia........................................................ 144 3

1. Wstęp 1.1. Motywacja Od paru lat obserwujemy dynamiczny rozwój mocy obliczeniowej akceleratorów sprzętowych oraz obszar ich stosowania. Pod pojęciem akcelerator sprzętowy mamy głównie na myśli karty graficzne z procesorami GPU oraz układy rekonfigurowalne FPGA. W przypadku kart graficznych ich wykorzystanie przez długi okres czasu ograniczało się jedynie do generowania obrazów i wykonywania na nich odpowiednich algorytmów. Jednak wraz z rozwojem ich mocy obliczeniowej wzrosło zainteresowanie tymi kartami w celu użycia ich do wielu zagadnień naukowych jak i komercyjnych. Od kilku lat trwają intensywne badania nad implementacją w kartach graficznych algorytmów z zakresu wielu dziedzin nauki. Zakres dziedzin praktycznie obejmuje wszystkie możliwe dyscypliny, w których stosuje się obliczenia naukowe. Taką samą tendencję zauważa się w przypadku układów FPGA. Początkowo miały one zastosowanie jedynie w zadaniach wysoko specjalizowanych (szyfrowanie, przetwarzanie obrazów). W momencie pojawienia się platform HPRC (High Performance Computing) stworzonych przez największe firmy z sektora obliczeń wielkiej skali (SGI [43], Nallatech [80]) zaczęto badania nad implementacją na nich wielu algorytmów HPC. Należy zauważyć, że zastosowanie akceleratorów sprzętowych może mieć różne cele i nieść wiele korzyści. Pierwszym ich zastosowaniem jest już wcześniej wspomniane wykorzystanie do zadań wysoko specjalizowanych, gdzie z racji architektury akceleratorów uzyskuje się największe przyspieszenia obliczeń. Kolejnym zastosowaniem jest przyspieszanie tylko wybranych części algorytmów. Przez wybrane części rozumie się tu takie krytyczne i najbardziej obciążające czasowo miejsca algorytmów, które mogą zostać przyspieszone w akceleratorze. Obliczenia w akceleratorach nie muszą być zawsze przyspieszone względem jednostki centralnej (CPU), aby mogły mieć praktyczne zastosowanie. Mogą stanowić dodatkową moc obliczeniową systemu. Wykonanie danego algorytmu w akceleratorze może odciążać procesor główny na wykonanie w tym czasie innego zadania. W przypadku układów FPGA nie tylko szybkość działania algorytmu ma znaczenie lecz także mniejszy pobór mocy od standardowych procesorów jak i także od kart graficznych. Głównym problemem przy wszelkiej próbie implementowania i przyspieszania algorytmów w akceleratorach jest czas transferu danych z jednostki centralnej (CPU) do akceleratora i odesłanie wyników obliczeń z powrotem do procesora. Sukcesywnie z rozwojem technologii 6

przepustowość ta wzrasta (magistrala PCI Express). Oprócz transferu rozmiar i szybkość dostępu do pamięci wewnętrznej akceleratora mają duży wpływ na możliwości akceleracji. Rozmiar pamięci ma szczególne znaczenie w algorytmach zorientowanych na dane (m. in. algorytmy z dziedziny data-mining u). Kolejnym ważnym aspektem efektywności obliczeń na danej platformie sprzętowej jest rodzaj reprezentacji danych występujących w danym algorytmie. W większości obliczeń najczęściej wykorzystywanym formatem jest format zmiennoprzecinkowy, zapisywany według standardu IEEE-754. Standard IEEE-754 wiąże się z ograniczeniem precyzji obliczeń i reprezentacji danych tylko do trzech formatów zapisu liczb (single, double, extended double). Powoduje to, że wyniki obliczeń są zaokrąglane. W tym względzie układy programowalne mają pewną przewagę nad procesorami ogólnego przeznaczenia oraz kartami graficznymi, gdyż ich architektura umożliwia programiście na zaprojektowanie takiego układu, który wyniki pośrednie operacji zmiennoprzecinkowych będzie mógł przechowywać bez straty dokładności. Układy FPGA pozwalają na wprowadzenie formatu typu fixed-point o dowolnej szerokości bitowej. Pozostawia to pewną swobodę projektantowi w przypadku projektowania algorytmu w układach FPGA w przeciwieństwie do sztywnej architektury operacji zmiennoprzecinkowych w kartach graficznych i procesorach ogólnego przeznaczenia. Kolejnym ważnym aspektem jest czas implementacji algorytmów w akceleratorach. W przypadku układów FPGA czas implementacji w językach opisu sprzętu takich jak VHDL bądź Verilog jest dość długi w porównaniu z tworzeniem oprogramowania na karty graficzne (środowisko CUDA[19], OpenCL[81]) oraz na procesory ogólnego przeznaczenia. Z tego powodu powstaje wiele języków wysokiego poziomu (HLL High Level Language), które umożliwiają szybkie prototypowanie i implementację algorytmów w układach programowalnych. Środowiska te umożliwiają dokonanie automatycznej konwersji algorytmu zapisanego w języku programowania wysokiego poziomu na odpowiednią reprezentacje logiki algorytmu w kodzie HDL. W przypadku kart graficznych implementację algorytmów możemy wykonywać na niskim poziomie (język PTX odpowiednik asemblera) w celu optymalizacji kodu, bądź używać środowiska wyższego poziomu (CUDA [19] lub OpenCL [81]). Znacznie zwiększa to konkurencję układów FPGA na rynku HPC. Powoduje także, iż projektowanie algorytmów w układach programowalnych jest bardziej dostępne dla naukowców i inżynierów nie specjalizujących się w tej dziedzinie. 7

Jednym z najtrudniejszych zagadnień w przypadku akceleracji obliczeń jest odpowiednie profilowanie badanego oprogramowania w celu sprawdzenia newralgicznych miejsc programu, które najbardziej obciążają czasowo system obliczeniowy. Wiele dostępnych narzędzi profilowania [82, 83, 84] nie ma wystarczającej funkcjonalności, aby skutecznie wychwytywać miejsca w oprogramowaniu nadające się do implementacji w akceleratorach sprzętowych. W większości umożliwiają one na monitorowanie czasu wywołania poszczególnych funkcji programu. Poprzez brakującą funkcjonalność mamy przede wszystkim na myśli przepływ danych oraz czas wykonania innych części algorytmu niż tylko poszczególne funkcje. Inną bardzo cenną informacją jest zależność między danymi w najbardziej czasochłonnych częściach algorytmu. Dzięki takiej analizie możemy wykrywać potencjalną równoległość w kodzie źródłowym. Ekstrakcja równoległości jest niezwykle przydatna w implementacji algorytmów w akceleratorach ze względu na ich wewnętrzną architekturę. Pozwala to na optymalne ich wykorzystanie. Zależność między danymi nie tylko pozwala wykryć równoległość kodu ale pozwala ocenić także czy dany algorytm jest podatny na implementację potokową, co jest niezwykle istotne w przypadku układów FPGA. Kolejną niezwykle ważną informacją jest ilość danych potrzebnych do wykonania wybranego fragmentu programu. Pozwala ona oszacować transfer danych pod kątem wybranej platformy sprzętowej oraz ocenić możliwości wykonania algorytmu w danym akceleratorze ze względu na jego pamięć wewnętrzną. Analiza algorytmów może odbywać się na dwa sposoby. Pierwszy z nich to metody formalnej analizy algorytmu wykrywające potencjalną równoległość i obliczające wymaganą sekwencję operacji aby zachować poprawność algorytmu. Drugi sposób to automatyczna analiza kodu źródłowego. Ten sposób jest dużym wyzwaniem naukowym. Trudność tego podejścia wynika przede wszystkim z automatycznego wykrywania równoległości w kodzie oraz odpowiedniej analizie danych. Analiza taka wspomaga odpowiednie zaprojektowanie efektywnego algorytmu w akceleratorze sprzętowym. Kluczowe wydaje się w tej sytuacji odpowiednie wyprofilowanie aplikacji. Przede wszystkim pętle programowe są najistotniejszymi elementami, które powinny być poddane szczegółowej analizie. Wynika to z tego, iż są to części aplikacji, które pochłaniają najwięcej czasu wykonania całego programu. Co więcej są one elementami kodu źródłowego, który posiada cechy równoległości. W związku z tym wszelkie algorytmy i narzędzia do wykrywania równoległości w kodzie sekwencyjnym skupiają się na analizie pętli programowych. Profilowanie i analiza programu pod kątem wykrycia w nim równoległych sekcji pozwala nie tylko na efektywniejsze zaprogramowanie 8

akceleratora sprzętowego ale także jest niezbędnym elementem do zbudowania narzędzia, które wspomagałoby automatyczną generację kodu źródłowego dla wybranego akceleratora sprzętowego. Jest to zadanie o wysokiej skali trudności i wymaga jeszcze wielu badań, aby taki automatyczny generator działał wystarczająco efektywnie. Jednak należy zauważyć, że odpowiednie profilowanie wydaje się tutaj niezbędnym narzędziem, które wspomaga i dostarcza niezbędne informacje potrzebne do wygenerowania odpowiedniego kodu źródłowego. 1.2. Cel i teza pracy Od wielu lat trwają badania nad zrównoleglaniem algorytmów na platformy wieloprocesorowe. Od kilku lat na rynku pojawiły się dodatkowo procesory wielordzeniowe umożliwiające zrównoleglanie i akcelerację obliczeń wewnątrz jednego układu scalonego. Z tego też powodu prowadzone były badania nad analizą sekwencyjnych programów w celu ich równoległej implementacji [85, 86, 87, 88]. Badania te głównie koncentrują się na zależnościach między danymi w celu wykrywania równoległości. Jednak wiele z tych metod to metody czysto formalne, trudne w implementacji. Ponadto brakuje nadal narzędzi profilujących aplikacje sekwencyjne pod kątem ich zrównoleglenia. Akceleratory sprzętowe pojawiły się na rynku HPC kilka lat temu. Od tego czasu wiele algorytmów zostało w nich zaimplementowanych. Dodatkowo powstaje wiele narzędzi wspomagających szybkie przenoszenie wybranych części aplikacji do akceleratorów sprzętowych. Jednak na rynku HPC odczuwa się brak narzędzi zapewniających odpowiedni profiling aplikacji sekwencyjnych w celu znalezienia odpowiednich elementów do implementacji w akceleratorach. Celem pracy jest pokazanie skutecznych i efektywnych metod przyspieszania obliczeń w akceleratorach sprzętowych. Praca przedstawia możliwości tych akceleratorów włącznie z efektywnymi narzędziami, które wspomagają implementację algorytmów. Zawarte w niej są implementacje wybranych algorytmów z kilku dziedzin oraz przedstawione są porównania efektywności ich działań w akceleratorach sprzętowych. Praca pokazuje metody, którymi można analizować i badać oprogramowanie w celu wychwycenia tych części aplikacji, które nadają się do implementacji w danym akceleratorze. 9

W wyniku powyższych założeń sformułowano następującą tezę: Akceleratory sprzętowe umożliwiają efektywną implementację wielu algorytmów numerycznych i analizy danych. Wspomaganie implementacji poprzedzone odpowiednim profilowaniem znacznie ułatwia projektowanie efektywnych algorytmów przy pomocy narzędzi i języków wysokiego poziomu. 1.3. Organizacja pracy Niniejszą pracę podzielono na 8 rozdziałów poświęconych zagadnieniom implementacji algorytmów w akceleratorach sprzętowych, problematyce operacji zmienno-przecinkowych i funkcji elementarnych, efektywności narzędzi wysokopoziomowych oraz profilowaniu i analizie aplikacji pod kątem ich implementacji w akceleratorach sprzętowych. Rozdział 1: Wstęp, stanowi wprowadzenie do poruszanej w pracy tematyki. Rozdział zawiera tezę pracy i jej główny cel. Poruszone są w nim informacje na temat przyczyny podjętego tematu. Rozdział 2: Platformy sprzętowe, przedstawia architekturę współczesnych akceleratorów sprzętowych. Opisuje elementy funkcjonalne kart graficznych oraz charakterystykę kart użytych w pracy (rodzina kart Tesla [30]). Ponadto przedstawione są platformy z układami FPGA, na których prowadzone były badania (platforma RASC [47] oraz DRC [42]). Rozdział 3: Środowiska programowania akceleratorów sprzętowych, zawiera opis narzędzi wysokopoziomowych, które zostały użyte do realizacji pracy. W przypadku układów FPGA są to języki ImpulseC [79] oraz MitrionC [41]. Języki te zostały zaprezentowane w celu porównania możliwości języków wysokiego poziomu. Rozdział podkreśla najważniejsze elementy i mechanizmy języków wysokiego poziomu umożliwiające efektywną implementację algorytmów. Implementacja algorytmów na kartach graficznych została wykonana w środowisku CUDA [153]. W rozdziale przedstawione są jej najważniejsze cechy zapewniające realizację równoległych obliczeń. Rozdział 4: Operacje zmiennoprzecinkowe i funkcje elementarne, opisuje format zmiennoprzecinkowy oraz funkcje elementarne i ich realizacje w układach FPGA oraz GPU. Przede wszystkim pokazana jest efektywność operacji zmiennoprzecinkowych w obu przypadkach 10

oraz realizacja funkcji elementarnych, które są niezbędne w przypadku implementacji wielu algorytmów. Rozdział 5: Metody analizy algorytmów pod kątem wykrywania ich wewnętrznej równoległości, zawiera opis analitycznych i formalnych metod ekstrakcji równoległości w kodzie sekwencyjnym, które mogą być użyte w celu wykrycia algorytmów oraz ich części, które mogą być efektywnie zaimplementowane w akceleratorze sprzętowym. Rozdział 6: System profilingu i automatycznej analizy kodu źródłowego, jest poświęcony metodologii profilowania aplikacji w celu wykrycia miejsc podatnych na przyspieszenie w akceleratorach sprzętowych. Ponadto przedstawione są w nim sposoby analizy instrumentacji kodu źródłowego w celu profilowania danych oraz oceny równoległości algorytmów. Rozdział 7: Implementacja wybranych algorytmów analizy danych, przedstawia implementacje algorytmów data-mining u. Rozdział zaczyna się od przedstawienia realizacji operacji sortowania, jako jednego z najczęstszych algorytmów występujących w algorytmach zorientowanych na dane. Następnie przedstawione są implementacje operacji bazodanowych w akceleratorach sprzętowych oraz wybrane algorytmy analizy podobieństwa dokumentów oraz popularne algorytmy tekstowe i obliczanie histogramu. Rozdział 8: Implementacja wybranych algorytmów w akceleratorach sprzętowych, prezentuje implementacje najpopularniejszych algorytmów numerycznych oraz ich wyniki uzyskane na kilku platformach sprzętowych. Przedstawione są tu algorytmy algebry liniowej, symulacja N-body, wybrana metoda Monte-Carlo, cząstkowe równania różniczkowe oraz klasyfikator SVM. Rozdział 9: Podsumowanie to rozdział zawierający wnioski, uwagi końcowe oraz dalsze kierunki badań. 1.4. Podziękowania Praca ta powstała dzięki zaangażowaniu oraz wsparciu Pana Profesora Kazimierza Wiatra. Dlatego chciałbym serdecznie podziękować Panu Profesorowi za cenne uwagi, które pozwoliły nadać tej pracy obecny kształt. 11

9. Podsumowanie Celem prac badawczych przedstawionych w niniejszej rozprawie było opracowanie metod profilingu i analizy algorytmów pod kątem ich implementacji w akceleratorach sprzętowych oraz implementacja wybranych algorytmów, pokazująca skuteczność opracowanych metod oraz możliwości sprzętowe akceleratorów. Ponadto w pracy zbadano możliwości narzędzi wysokopoziomowego programowania akceleratorów sprzętowych w implementacji wielu algorytmów numerycznych oraz analizy danych. Karty graficzne, tak samo jak układy programowalne, oferują równoległe architektury obliczeniowe. W przypadku kart graficznych równoległość obliczeń oparta jest o architekturę typu SIMD [150], natomiast układy programowalne z racji swojej rekonfigurowalności umożliwiają realizację architektury potokowej lub w pełni równoległej (typu unroll). W przypadku algorytmów numerycznych duży wpływ na efektywność implementowanych algorytmów ma wydajność operacji zmiennoprzecinkowych. Parametry sprzętowe oraz badania pokazują, że karty graficzne mają lepszą wydajność szczytową jeśli chodzi o liczbę wykonywanych instrukcji zmiennoprzecinkowych w jednostce czasu niż układy FPGA. Jednak układy FPGA są bardzo wydajne w obliczeniach opartych na stałym przecinku. Znając wymaganą dokładność obliczeń dla danego algorytmu, można z powodzeniem stosować ten format w przypadku implementacji w układach FPGA. Pokazane w pracy narzędzia wysokiego poziomu programowania układów programowalnych umożliwiają zastosowania formatu stałoprzecinkowego poprzez udostępnione specjalnie do tego celu makra. Dzięki ich stosowaniu układy programowalne stają się bardziej konkurencyjne w realizacji algorytmów numerycznych. Kolejnym ważnym aspektem projektowania algorytmów w akceleratorach sprzętowych są funkcje elementarne. W pracy pokazano ten problem na przykładzie często występującej w obliczeniach HPC funkcji eksponenty. Układy FPGA nie posiadają wbudowanych funkcji elementarnych jak inne jednostki obliczeniowe. Z tego powodu projektant musi korzystać z gotowych modułów, które zawierają implementacje funkcji elementarnych lub dokonać własnej implementacji. Języki wysokiego poziomu HLL, także nie posiadają gotowych bibliotek z funkcjami elementarnymi. Wymaga to dołączania gotowych modułów lub projektowania własnych bibliotek. W pracy zostało pokazane na przykładzie implementacji funkcji eksponenty, że możliwa jest efektywna realizacja funkcji elementarnych w układach FPGA. Jednak stosowanie jej w algorytmach powoduje dość znaczną zajętość zasobów 140

układu i ograniczone możliwości zrównoleglenia danego algorytmu. Na przykładzie prostego klasyfikatora SVM zostało pokazane jak zajętość ta zmniejsza efektywność implementacji algorytmu w układach FPGA na rzecz kart graficznych, gdzie funkcje elementarne są wbudowane w architekturę całej platformy sprzętowej. Wykonana w pracy implementacja algorytmów za pomocą języków wysokiego poziomu pokazuje, że możliwe jest szybkie prototypowanie i realizacja algorytmów w układach FPGA. W pracy opracowano metody analizy algorytmów sekwencyjnych w celu ich implementacji na platformach równoległych oraz przedstawiono ich wady i zalety na przykładzie analizy wybranych algorytmów. Głównymi metodami analizy algorytmów jest odpowiednie profilowanie aplikacji oraz analiza zależności między danymi i instrukcjami. W przypadku profilowania aplikacji większość dostępnych narzędzi profilowania generuje zbyt mało informacji niezbędnych do oceny możliwości efektywnej implementacji danego algorytmu w akceleratorze sprzętowym. Z tego powodu w pracy zaprezentowano autorski prototyp narzędzia profilującego algorytmy. Jego głównymi elementami jest moduł profilowania pętli programowych jako części algorytmów, które zajmują największą część całkowitego czasu wykonania programów. Moduł ten wydobywa informacje dotyczące czasu wykonania pętli, ilości wykonanych iteracji oraz zagnieżdżeń między pętlami. Oprócz informacji o czasie wykonania pętli niezbędne są także informacje o ich strukturze, zależnościach miedzy poszczególnymi instrukcjami oraz rozmiar danych potrzebnych do realizacji wybranych fragmentów algorytmów. Z tego powodu zostały opracowane kolejne etapy analizy kodu, które wspomagają ekstrakcje tych części aplikacji, które mogą być efektywnie zrealizowane w danym akceleratorze sprzętowym. Metody analizy struktury algorytmów można podzielić na metody formalne oraz metody oparte na bezpośredniej analizie kodu źródłowego, polegające na automatycznej instrumentacji kodu źródłowego oraz generowaniu grafów DFG w celu analizy zależności między danymi. Obie metody mają swoje wady i zalety. Pokazane zostały one w pracy na przykładach implementacji wielu algorytmów. Metody formalne są trudne do zautomatyzowania oraz nie łatwo jest je zastosować do skomplikowanych algorytmów. Natomiast metody oparte na instrumentacji kodu są zależne od badanej struktury kodu. Instrumentacja wspomaga analizę napisanego kodu źródłowego. Natomiast nie bada różnych wariantów wykonania tego samego algorytmu. Odpowiednie przekształcenia kodu źródłowego często mogą rzutować na inne, równoległe wykonanie algorytmu, a co za tym idzie powoduje to efektywniejsze wykonanie kodu na danej platformie sprzętowej. Zastosowanie obu metod analizy algorytmów jest optymalnym rozwiązaniem. Pozwala to na 141

wykrycie maksymalnej ilości sposobów zrównoleglenia danego algorytmu. Ponadto jak zostało pokazane w pracy oba rodzaje metod znakomicie się uzupełniają. Metody formalne dobrze sprawdzają się w prostszych algorytmach, w których łatwo można formalnie opisać zależności między danymi, umożliwiając wygenerowanie najlepszych wersji zrównoleglanego kodu. Natomiast metody oparte na instrumentacji najlepiej sprawdzają się w analizie skomplikowanych algorytmów. Należy dodać, że niezwykle istotną zaletą metod opartych na instrumentacji jest monitorowanie ilości danych używanych przez wskazane sekcje algorytmu, co ułatwia efektywniejsze wykorzystanie wewnętrznej hierarchii pamięci, które posiadają akceleratory sprzętowe. Metody te dodatkowo generują drzewa składniowe badanych algorytmów (ang. Abstract Syntax Tree), co wspomaga analizę operacji używanych w algorytmie (możliwość oszacowania szczytowej wydajności, która może być osiągnięta na wybranej platformie sprzętowej) oraz ułatwia sprowadzenie algorytmu do postaci pojedynczego przypisania (ang. Single Assignment Form) dzięki której można oszacować liczbę cykli zegarowych potrzebnych na wykonanie algorytmu w układzie programowalnym. Zaprezentowane metody wspomagają adaptację algorytmów i ich przyspieszanie w akceleratorach graficznych jednak nie są w stanie zapewnić ich optymalnej realizacji. Poprzez optymalną realizację należy rozumieć takie aspekty projektowania algorytmu jak np. optymalny dostęp do pamięci (np. używanie pamięci łączonej - coalesced memory, unikanie konfliktów pamięci bank conflicts), optymalny rozdział przetwarzanych danych pomiędzy wątkami lub optymalne wykorzystanie szybkich pamięci w danym akceleratorze sprzętowym. Proces profilowania i przedstawiona analiza pozwala na sprawdzenie podatności algorytmów na przyspieszenie, natomiast wyżej wymienione problemy powinny być brane pod uwagę przez projektanta w celu optymalnej implementacji. Do najważniejszych oryginalnych rozwiązań autora zaprezentowanych w tej pracy, należy zaliczyć: opracowanie koncepcji oraz prototypu systemu kompleksowego profilowania aplikacji, opracowanie metody profilingu danych, opracowanie algorytmów analizy pętli programowych oraz algorytmów wykrywania równoległości, opracowanie metod instrumentacji kodu w celu uzyskania informacji niezbędnych do realizacji algorytmów w akceleratorach sprzętowych, 142

porównanie możliwości układów FPGA i kart graficznych na podstawie implementacji w nich wybranych algorytmów, opracowanie sposobów wykorzystania informacji uzyskanych w trakcie profilowania do implementacji algorytmów w akceleratorach sprzętowych, implementacja różnorodnych algorytmów w akceleratorach sprzętowych, w celu pokazania ich możliwości w przyspieszaniu aplikacji względem standardowych jednostek CPU. Wyniki przedstawione w pracy upoważniają do stwierdzenia, że postawiona teza: Akceleratory sprzętowe umożliwiają efektywną implementację wielu algorytmów numerycznych i analizy danych. Wspomaganie implementacji poprzedzone odpowiednim profilowaniem znacznie ułatwia zaprojektowanie efektywnych algorytmów przy pomocy narzędzi i języków wysokiego poziomu. została udowodniona. Implementacje wybranych algorytmów zaprezentowanych w pracy pokazują, że akceleratory sprzętowe znakomicie nadają się do efektywnej implementacji wielu algorytmów numerycznych oraz analizy danych. Należy zwrócić uwagę, iż określona grupa algorytmów jest podatna na przyspieszenie w akceleratorach sprzętowych względem standardowych jednostek CPU. Przede wszystkim dotyczy to algorytmów, które posiadają wewnętrzną równoległość. Najczęstszym miejscem potencjalnej równoległości są pętle programowe. Z tego powodu metody profilingu i analizy algorytmów przedstawione w pracy koncentrują się na analizie tych części kodu źródłowego. Implementacje wybranych algorytmów poprzedzone przedstawionymi w pracy analizami pokazują skuteczność i przydatność opracowanych metod. Przedstawiona automatyczna analiza kodu źródłowego może stać się przyczynkiem do budowy narzędzi przekształcających sekwencyjny kod na gotowy kod w wybranym języku wysokiego poziomu w celu jego implementacji w wybranym akceleratorze sprzętowym. Rosnąca wydajność i popularność akceleratorów sprzętowych powoduje, iż narzędzia automatycznej generacji kodu na te platformy sprzętowe mogą wspomagać proces projektowania i implementacji algorytmów. Szczególnie przydatne może to być w przypadku słabej znajomości architektury platformy oraz języka programowania służącego do implementacji. 143