dla opencl c - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty...
TRANSCRIPT
48 49Szybkobie�ne Pojazdy G�sienicowe (45) nr 3, 2017
mgr in�. Michał BUGAŁA – O�rodek Badawczo-Rozwojowy Urz�dze� Mechanicznych „OBRUM" sp z o.o., Gliwice
Michał BUGAŁA
AGOGE - ZINTEGROWANE �RODOWISKO PROGRAMISTYCZNE DLA OPENCL C
Streszczenie. W artykule zaprezentowano mo�liwo�ci i rozwi�zania technologiczne zintegrowanego �rodowiska programistycznego dedykowanego technologii OpenCL o nazwie Agoge. Omówiono proces zautomatyzowania tworzenia kontekstu OpenCL, obsługi argumentów j�dra obliczeniowego i siatki obliczeniowej, oraz przedstawiono mo�liwo�ci wykorzystania �rodowiska w obliczeniach numerycznych i analizie obrazu.
Słowa kluczowe: �rodowisko programistyczne, j�zyk programowania OpenCL C, technologia OpenCL, przetwarzanie równoległe, analiza obrazu.
1. WPROWADZENIE
Projekt Agoge powstał z inicjatywy autora w czasie bada� realizowanych przez Biuro Symulatorów OBRUM sp. z o.o. zwi�zanych z akceleracj� algorytmów przetwarzania i analizy obrazu. Artykuł nie jest po�wi�cony zaletom wykorzystania technologii OpenCL, algorytmom przetwarzania i analizy obrazu, nie opisuje równie� konkretnych zastosowa��rodowiska w projektach realizowanych przez Biuro Symulatorów OBRUM sp. z o.o. (potencjał projektu b�dzie mógł by� w pełni wykorzystany w przyszło�ci przy produkcji wydajnych symulacji fizycznych w dziedzinie aerodynamiki, hydrodynamiki i mechaniki klasycznej). Celem artykułu jest zaprezentowanie narz�dzia umo�liwiaj�cego wykorzystanie i prac� z technologi� OpenCL w sposób szybki i przyjazny dla u�ytkownika. Potencjalnym czytelnikiem artykułu i odbiorc� �rodowiska Agoge jest programista poszukuj�cy rozwi�za�pozwalaj�cych opracowywa� szybkie algorytmy w dedykowanym do tego �rodowisku programistycznym, jakim stara si� by� opisane w artykule �rodowisko Agoge. Z perspektywy O�rodka Badawczo-Rozwojowego Urz�dze� Mechanicznych, w którym powstał projekt, czytelnik powinien traktowa� �rodowisko Agoge jako narz�dzie umo�liwiaj�ce przeprowadzanie bada� w Biurze Symulatorów OBRUM, a przez cel powstania projektu nale�y rozumie� opracowanie rozwi�zania umo�liwiaj�cego sprawne wykorzystanie technologii OpenCL. Problematyka mo�e wyda� si� daleka od głównych zada� O�rodka, jednak z punktu widzenia Biura Symulatorów i technologii programistycznych jest bardzo aktualna.
OpenCL (z ang. Open Computing Language) to technologia heterogeniczna 1
umo�liwiaj�ca tworzenie bardzo wydajnych programów z wykorzystaniem przetwarzania równoległego, w którym wiele oblicze� mo�e by� wykonywanych w tym samym czasie. Dodatkow� zalet� standardu OpenCL jest API2, które umo�liwia wykorzystanie technologii
1 Zało�eniem standardu OpenCL jest obsługa ró�nych platform sprz�towych na ró�nych systemach
operacyjnych (w odró�nieniu od np. CUDA i C++AMP). OpenCL jest obecnie implementowany na czterech typach urz�dze� obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows, Linux i Mac OS X.
2 API (z ang. Application Programming Interface) - zestaw reguł i opisów, w jaki programy komputerowe
50 51Michał BUGAŁA
w dowolnym �rodowisku programistycznym i j�zyku programowania (za po�rednictwem biblioteki OpenCL C++ Standard Library) [1], [2]. O ile mo�liwe jest wykorzystanie API OpenCL w licznych �rodowiskach programistycznych i j�zykach programowania, to sama procedura obliczeniowa (zwana równie� j�drem obliczeniowym, kernelem lub funkcj�obliczeniow�) musi zosta� przygotowana w odr�bnym j�zyku OpenCL C [3].
Opisane w artykule �rodowisko programistyczne Agoge pełni rol� gospodarza (zarz�dcy) API OpenCL, którego implementacja nie jest widoczna dla u�ytkownika (u�ytkownik nie musi zajmowa� si� uci��liwym przygotowywaniem kontekstu obliczeniowego 3 , niezb�dnym do wykonania j�dra obliczeniowego OpenCL) i jest �rodowiskiem dedykowanym j�zykowi OpenCL C w wersji 1.1 z wykorzystaniem modelu programowania opartego na danych (siatka obliczeniowa)4.
Istnieje wiele narz�dzi wspomagaj�cych prac� z technologi� OpenCL i j�zykiem OpenCL C, jednak w wi�kszo�ci przypadków s� to narz�dzia programistyczne typu SDK5
(AMD Accelerated Parallel Processing SDK, NVIDIA OpenCL SDK, Intel SDK for OpenCL) współpracuj�ce ze �rodowiskiem gospodarza OpenCL. Wyj�tek stanowi OpenCL Studio, który jest samodzieln� aplikacj� dedykowan� technologii OpenCL, jednak i w tym przypadku u�ytkownik musi sam zadba� o kontekst OpenCL, u�ywaj�c skryptów LUA [4].
Tym, co powinno wyró�ni� �rodowisko Agoge spo�ród innych dost�pnych narz�dzi wspomagaj�cych OpenCL, ma by� automatyczne tworzenie kontekstu OpenCL na podstawie argumentów podanych w kernelu obliczeniowym OpenCL C, odseparowanie kodu �ródłowego j�dra obliczeniowego od �rodowiska programistycznego gospodarza OpenCL6
oraz zredukowanie liczby wykorzystywanych j�zyków programowania do jednego (z punktu widzenia u�ytkownika). Planowane jest równie� automatyczne generowanie kodu �ródłowego gospodarza (posta� j�dra obliczeniowego OpenCL C b�dzie determinowa� charakter API OpenCL gospodarza).
Celem powstania projektu Agoge było przyspieszenie oraz ułatwienie pracy z technologi� OpenCL, które pozwoli u�ytkownikowi skupi� si� na opracowywaniu algorytmów równoległych w j�zyku OpenCL C i przygotowa� procedur� obliczeniow�w sposób wła�ciwy dla nieskr�powanego (w miar� mo�liwo�ci mniej skomplikowanego) procesu twórczego.
Celem po�rednim projektu było gł�bsze zapoznanie si� z technologi� OpenCL oraz zwi�kszenie do�wiadczenia w dziedzinie wytwarzania �rodowisk programistycznych [5].
komunikuj� si� mi�dzy sob�.
3 W skład kontekstu obliczeniowego mog� wchodzi�: okre�lenie �rodowiska pracy OpenCL (np. rodzaj urz�dzenia obliczeniowego), przygotowanie danych (np. utworzenie bufora pami�ci siatki obliczeniowej), utworzenie kolejki polece� (np. przesłanie danych do urz�dzenia obliczeniowego) [1].
4 Model programowania w OpenCL został podzielony na model dla danych (siatka obliczeniowa adresuje dane) i model dla zada� (kolejka polece�). W modelu zadaniowym nadal mo�na wykonywa� obliczenia równoległe, jednak j�dro obliczeniowe wykorzystuje tylko jedn� jednostk� robocz� w ramach grupy roboczej [1].
5 SDK (z ang. Software Development Kit) - zestaw narz�dzi programistycznych, które s� niezb�dne w tworzeniu aplikacji korzystaj�cych z danej biblioteki.
6 Nie ma mo�liwo�ci utworzenia kontekstu OpenCL w j�zyku OpenCL C. Za kontekst odpowiedzialny jest inny j�zyk programowania (korzystaj�cy z API OpenCL), który okre�lamy mianem gospodarza OpenCL. W wi�kszo�ci przypadków kod �ródłowy j�dra obliczeniowego jest edytowany w �rodowisku gospodarza OpenCL, który nie jest dedykowany j�zykowi OpenCL C.
50 51AGOGE - zintegrowane �rodowisko programistyczne dla OpenCL C
2. IMPLEMENTACJA
�rodowisko programistyczne Agoge powstało w j�zyku Pascal (dialekt Delphi Pascal) i �rodowisku programistycznym Delphi XE w wersji 10 – j�zyk Pascal jest w tym przypadku gospodarzem OpenCL, jednak u�ytkownik nie jest zobowi�zany do znajomo�ci tego j�zyka programowania. Czynno�ci, za które odpowiedzialny jest gospodarz, s� zautomatyzowane w �rodowisku Agoge lub podane w postaci prostych edytorów (np. lista z wyborem urz�dzenia, na którym b�d� przeprowadzane obliczenia równolegle) i s� podzielone na nast�puj�ce etapy:
• utworzenie obiektu reprezentuj�cego platform� i urz�dzenie obliczeniowe;
• debugowanie i kompilacja kodu �ródłowego do wersji binarnej;
• przygotowanie kontekstu (utworzenie buforów dla danych, wczytanie obrazów z plików itp.);
• przygotowanie argumentów (parametrów) i przekazanie ich do j�dra obliczeniowego;
• utworzenie kolejki polece� i uruchomienie j�dra obliczeniowego;
• zebranie wyników;
• prezentacja wyników;
• zwolnienie pami�ci.
2. 1. Edytor kodu �ródłowego i model programowania
Agoge posiada wszystkie funkcjonalno�ci, jakie powinien zawiera� dobry edytor kodu �ródłowego (kolorowanie składni, podpowiadanie i autouzupełnianie kodu, wyszukiwanie tekstu, lista ostatnio otwartych plików itp.) oraz zintegrowane �rodowisko programistyczne (debugowanie 7 z zaznaczeniem �ródła bł�du, je�li takie wyst�piło w kodzie �ródłowym; kompilacja kodu, wykonanie programu). Na rysunku 1 przedstawiono widok ekranu głównego z przykładowym zachowaniem si� �rodowiska w czasie wykrycia bł�du w kodzie �ródłowym.
7 Debugowanie i kompilacja kodu �ródłowego OpenCL C odbywa si� przez sterowniki urz�dzenia, które
wspieraj� technologi� OpenCL i na którym wykonywane s� obliczenia. W przypadku napotkania bł�du, API OpenCL zwraca tre�� bł�du (testy na trzech ró�nych urz�dzeniach, w których dwa nale�ały do tego samego producenta, wykazały brak standardów dla tego typu komunikatów).
52 53Michał BUGAŁA
Rys. 1. Ekran główny �rodowiska Agoge z przykładow� reakcj� �rodowiska na napotkany bł�d w kodzie �ródłowym
(wraz z uruchomionym systemem podpowiedzi)
Model programowania oparty na siatce obliczeniowej (przestrze� indeksowana) nie pozwala na zlecanie tzw. zada� (model zadaniowy przygotowywany w API OpenCL), ale te nie wykorzystuj� przetwarzania równoległego [1], dlatego ni�ej nie po�wi�cono mu wi�cej uwagi. Model programowania w �rodowisku Agoge skupia si� na przetwarzaniu równoległym z wykorzystaniem siatki obliczeniowej.
2. 2. Argumenty procedury obliczeniowej
Tworzenie kontekstu OpenCL na podstawie argumentów podanych w kernelu obliczeniowym OpenCL C wymaga od u�ytkownika wci�ni�cia przycisku Create Arguments...(lub Update Arguments8) w opcjach projektu realizowanego w �rodowisku Agoge (rys. 2).
8 Ró�nica pomi�dzy Create Arguments... a Update Arguments polega na tym, �e utworzenie argumentów
(Create Arguments...) wypełnia pola na li�cie argumentów warto�ciami domy�lnymi, natomiast aktualizacja (Update Arguments) modyfikuje list� argumentów bez ingerencji w zmiany, jakie wprowadził u�ytkownik w li�cie argumentów - zaleca si� u�ywanie przycisku Update Arguments... po ka�dej modyfikacji argumentów w kernelu OpenCL C (zakłada si�, �e funkcjonalno�� Update Arguments... b�dzie automatycznie uruchamiana po ka�dej zmianie argumentów w kodzie �ródłowym w kolejnych wersjach �rodowiska).
52 53AGOGE - zintegrowane �rodowisko programistyczne dla OpenCL C
Rys. 2. Pogl�dowy zestaw okien z wynikami i opcjami projektu (zakładka Arguments) po wykonaniu procedury obliczeniowej (lista argumentów Kernel Arguments została
utworzona automatycznie)
Analiza leksykalna argumentów j�dra obliczeniowego w kodzie OpenCL C umo�liwiła utworzenie listy argumentów z domy�lnymi warto�ciami dla przestrzeni adresowej argumentu (Adress Space), dost�pu do danych (Access), typu danych (Data Type), flagi pami�ci (Memory Flag), typu wska�nika gospodarza (Host Pointer), typu danych wynikowych 9
(Result Type), danych wprowadzanych lub odczytywanych z j�dra obliczeniowego (Value). U�ytkownik mo�e zmieni� flag� pami�ci, typ wska�nika gospodarza i dane (Value). Rysunek 3 przedstawia przykładowe okna zmiany warto�ci danych dla typu int (warto�� skalarna)i typu image2d_t (obraz) - przycisk Change Value... w opcjach projektu.
9 Typ danych wynikowych i dane, w odró�nieniu od wcze�niej podanych pól, s� parametrami specyficznymi
dla �rodowiska Agoge - ich obecno�� nie jest zdeterminowana przez API OpenCL, a przez samo �rodowisko, które wymaga wprowadzenia danych do argumentów oraz ustaleniu odpowiedniej prezentacji wyników. Posta� prezentowanych wyników jest zale�na od typu wynikowego (tekst, liczba, obraz) i jest ustalana automatycznie, bez mo�liwo�ci zmiany typu.
54 55Michał BUGAŁA
Rys. 3. Przykładowe okna edycji warto�ci dla danych typu Int i Image2d_t
Pełn� list� typów skalarnych i wektorowych, na jakich mog� by� przeprowadzane obliczenia i które mog� by� modyfikowane w oknie Change Value (rys. 3.), przedstawia tablica 1. Typy graficzne obsługiwane przez �rodowisko Agoge s� ograniczone do obrazów dwuwymiarowych10.
10 Planuje si� obsług� obrazów jednowymiarowych i trójwymiarowych w kolejnych wersjach �rodowiska.
54 55AGOGE - zintegrowane �rodowisko programistyczne dla OpenCL C
Tablica 1. Typy danych OpenCL C, z których mo�e korzysta� kernel
Typ skalarnyTyp
wektorowy Odpowiedniki w API
OpenCL
Zastosowane odpowiedniki w �rodowisku Agoge (gospodarz:
Pascal/Delphi)
char charN11 cl_char, cl_charN Tablica N-elementowa typu Shortint
unsigned char, uchar
ucharN cl_uchar, cl_ucharN Tablica N-elementowa typu Byte
short shortN cl_short, cl_shortN Tablica N-elementowa typu SmallInt
unsigned short, ushort
ushortN cl_ushort, cl_ushortN Tablica N-elementowa typu Word
int intN cl_int, cl_intN Tablica N-elementowa typu LongInt
unsigned int, uint
uintN cl_uint, cl_uintN Tablica N-elementowa typu LongWord
long longN cl_long, cl_longN Tablica N-elementowa typu Int64
unsigned long, ulong
ulongN cl_ulong, cl_ulongN Tablica N-elementowa typu UInt64
float floatN cl_float, cl_floatN Tablica N-elementowa typu Single
double doubleN cl_double, cl_doubleN Tablica N-elementowa typu Double
Obrazy dwuwymiarowe mog� by� skalowane z poziomu �rodowiska, według warto�ci szeroko�ci i wysoko�ci podanych w oknie Change Value (rys. 3). Po zmianie obrazu 2D (okno wyboru pliku graficznego po wci�ni�ciu Change Image...) �rodowisko zadaje pytanie u�ytkownikowi o mo�liwo�ci dokonania skalowania 12 - brak zatwierdzenia jest równoznaczny z wczytaniem obrazu bez skalowania, natomiast warto�ci wielko�ci obrazu w oknie Change Value s� ustawiane według wielko�ci wczytanego obrazu13. Wa�niejsze formaty plików graficznych, obsługiwane przez Agoge: BMP, JPEG, JPEG2000, PNG, MNG, PPM, GIF, TGA i inne.
2. 3. Siatka obliczeniowa
Siatka obliczeniowa (okre�lana skrótem NDRange, zwana równie� siatk� indeksuj�c�) to najwa�niejsze poj�cie w przypadku procedur obliczeniowych OpenCL. Determinuje sposób, w jaki dane podzielone s� na poszczególne rdzenie obliczeniowe i mo�e mie� posta�jedno-, dwu- lub trójwymiarow� [1]. Rysunek 4 prezentuje edytor wła�ciwo�ci siatki obliczeniowej w opcjach projektu realizowanego w �rodowisku Agoge.
11 Dopuszczalne warto�ci dla N to 2, 3, 4, 8, 16 (standard OpenCL C). Jako odpowiednik warto�ci skalarnych
(N=1) po stronie gospodarza, wykorzystano tablice jednoelementowe, które pozwoliły wykorzysta� ten sam mechanizm dla warto�ci skalarnych i wektorowych (N = 1, 2, 3, 4, 8 lub 16).
12 Interpolacja metod� najbli�szego s�siada (ang. nearest neighbor), interpolacja dwuliniowa (ang. bilinear), dwusze�cienna (ang. bicubic) lub algorytmem Lanczosa.
13 Domy�lnie ustawiane s� równie� parametry dwuwymiarowej siatki obliczeniowej.
56 57Michał BUGAŁA
Rys. 4. Okno opcji projektu realizowanego w �rodowisku Agoge (zakładka NDRange), umo�liwiaj�ce zmian� wła�ciwo�ci siatki obliczeniowej
Artykuł nie jest po�wi�cony wyja�nieniu architektury OpenCL, dlatego podział danych według parametrów siatki obliczeniowej nie zostanie omówiony w sposób rzetelny, tzn. w sposób umo�liwiaj�cy �cisłe zrozumienie zale�no�ci parametrów siatki obliczeniowej i ustalenie ich warto�ci. W celu gł�bszego zapoznania si� ze wszystkimi zagadnieniami technologii OpenCL autor odsyła czytelnika do literatury [2], [3], [4].
W skład siatki obliczeniowej wchodz� parametry: rozmiar siatki globalnej (Work-Items), rozmiar siatki lokalnej (Work-Items in Group), przesuni�cia (Offset) i wymiaru (Dimension). Mniej do�wiadczeni u�ytkownicy powinni odznaczy� pole Set Local-Size, dzi�ki czemu rozmiar siatki lokalnej b�dzie dobierany automatycznie (przez sterowniki OpenCL).
Okno przedstawione na rysunku 4 definiuje dwuwymiarow� siatk� obliczeniow�, w której ł�czna warto�� w�tków (jednostek roboczych) realizuj�cych jedn� instancj�procedury obliczeniowej wynosi 4096 (64x64). Jednostki robocze podzielone s� na 256 grup roboczych, w których poszczególne jednostki robocze mog� komunikowa� si� za pomoc� tzw. pami�ci dzielonej (nazywanej równie� pami�ci� lokaln�). Maksymalne warto�ci parametrów nale�y dobiera� według mo�liwo�ci danego urz�dzenia obliczeniowego. Parametry dost�pnych urz�dze� mo�na przegl�da� na zakładce Platforms w opcjach projektu, jak na rysunku 5.
56 57AGOGE - zintegrowane �rodowisko programistyczne dla OpenCL C
Rys. 5. Okno opcji projektu (zakładka Platforms), umo�liwiaj�ce wybór urz�dzenia wykonuj�cego obliczenia i podgl�d jego parametrów
2. 4. Typy specjalne i kompilacja procedury obliczeniowej
Specjalne typy danych, to typy wprowadzone na potrzeby �rodowiska Agoge. Wprowadzenie typów specjalnych w kodzie �ródłowym nie ma wpływu na sposób wykonywania j�dra obliczeniowego w potencjalnie innym �rodowisku (zbudowane j�dro obliczeniowe w �rodowisku Agoge mo�e by� uruchamiane przez innego gospodarza). Dodanie typu specjalnego sprowadza si� do wpisania odpowiedniego leksemu przy deklaracji argumentu w kernelu, ukrytego w komentarzu 14 , jak na rysunku 6. Obecnie zaimplementowano trzy leksemy reprezentuj�ce specjalny token �rodowiska Agoge:
• /*out*/,
• /*symbol*/,
• /*iteration*/.
Leksem /*out*/ informuje system automatycznego tworzenia kontekstu OpenCL, �e argument b�dzie tylko do zapisu (flaga pami�ci ustawiona na WriteOnly) i warto�ci domy�lne nie zostan� przekazane do j�dra obliczeniowego15. Leksem /*symbol*/ jest zarezerwowany dla danych typu uchar i char (o�miobitowa liczba całkowita reprezentuj�ca jeden z 256 znaków) - pozwala na wprowadzanie i odczytanie symboli (znaków) z tabeli kodów ASCII (przykład na rysunku 6). Wyja�nienie leksemu /*iteration*/ wymaga omówienia metod uruchomieniowych - metody uruchomieniowe przedstawione s� w dalszej cz��ci artykułu.
14 Leksemy Agoge b�d� ignorowane przez obcych gospodarzy - b�d� traktowane, jako nieznacz�cy komentarz. 15 W przypadku niewprowadzenia leksemu /*out*/ flaga pami�ci jest ustawiana na ReadWrite. Flag� ReadOnly
mo�na uzyska� przez wpisanie const po zadeklarowaniu globalnej przestrzeni adresowej __global(standardowe rozwi�zanie OpenCL C dla danych tylko do odczytu).
58 59Michał BUGAŁA
Rys. 6. Pogl�dowy zestaw okien po wykonaniu przykładu wykorzystuj�cego typy specjalne Agoge (12 jednostek roboczych na jednowymiarowej
siatce obliczeniowej)
Obsłudze wykonania (uruchomienia) lub zatrzymania procedury obliczeniowej dedykowane s� przyciski w górnej cz��ci okna głównego (rys. 1 i 7). Korzystanie z leksemu /*iteration*/ jest uzasadnione w przypadku uruchomienia procedury obliczeniowej w trybie Build and Run (zap�tlenie wykonywania procedury). Do argumentu przekazywana jest warto�� aktualnej iteracji liczonej od zera - prezentowane wyniki na rysunku 6 (okno Project Results) s� wynikami dla pierwszej iteracji (N=0). Leksem /*iteration*/ mo�e by� stosowany dla danych typu uint.
Rys. 7. Przyciski steruj�ce: zbudowanie programu, uruchomienie i zap�tlenie wykonywania (Build and Run); zatrzymanie iteracji (Stop); zbudowanie i wykonanie
programu (Build and Execute); zbudowanie programu (Build Only); zamkni�cie �rodowiska Agoge (Close Application)
58 59AGOGE - zintegrowane �rodowisko programistyczne dla OpenCL C
3. �RODOWISKO AGOGE W PRAKTYCE
�rodowisko programistyczne Agoge mo�e by� stosowane do implementacji algorytmów przetwarzania równoległego w technologii OpenCL w obliczeniach numerycznych (rys. 2), kryptograficznych (rys. 6), przetwarzaniu i analizie obrazu. Rozdział ten po�wi�cony jest bardziej zaawansowanym przykładom wykorzystania �rodowiska16.
Testy �rodowiska i technologii OpenCL zostały przeprowadzane na dwóch stanowiskach z ł�cznie trzema platformami OpenCL:
• Stanowisko 1:
• Urz�dzenie: GeForce GTX 460
• Platforma: NVIDIA CUDA
• Wersja OpenCL: OpenCL 1.1 CUDA
• Stanowisko 2 (dwie platformy obliczeniowe na jednym komputerze):
• Urz�dzenie 1: GeForce GTX 680
• Platforma: NVIDIA CUDA
• Wersja OpenCL: OpenCL 1.1 CUDA
• Urz�dzenie 2: Intel Core i7-3930K CPU @ 3.20GHz
• Platforma: Intel OpenCL
• Wersja OpenCL: OpenCL 1.2
Rysunek 8 przedstawia grafik� testow� [6].
Rys. 8. Lena w rozdzielczo�ci 512x512 [px]
3. 1. Przetwarzanie obrazu - przykład rozmycia obrazu
Na rysunku 8 przedstawiono kod �ródłowy rozmycia obrazu (filtr u�redniaj�cy na podstawie rozkładu Gaussa z macierz� 5x5) z wykonan� procedur� obliczeniow� i prezentacj�wyniku. �redni czas oblicze� na stanowisku 2 (urz�dzenie 1) wyniósł 188 [s]. Informacje na
16 Pełniejsze uzasadnienie potrzeby wykorzystywania �rodowiska Agoge i technologii OpenCL wraz
z profesjonalnymi przykładami b�d� prezentowane w przyszłych artykułach w ramach kolejnych projektów realizowanych przez Biuro Symulatorów OBRUM sp. z o.o.
60 61Michał BUGAŁA
temat czasu wykonania j�dra obliczeniowego17 widoczne s� w dolnej cz��ci okna �rodowiska Agoge.
Rys. 9. Rozmycie obrazu z wykorzystaniem �rodowiska Agoge
W przypadku urz�dzenia 2 (stanowisko 1), procedura obliczeniowa nie została wykonana (sterownik OpenCL zwrócił kod bł�du równy -10), a rejestr zdarze� �rodowiska Agoge zapisał komunikat o tre�ci: image format not supported18 . Rejestr zdarze� �rodowiska mo�na przegl�da� na zakładce Log w oknie Project Results lub w pliku AGOGE.log, znajduj�cym si� w katalogu głównym aplikacji.
3. 2. Przetwarzanie obrazu - animacja
Animacj� zmiany jasno�ci obrazu (zmiana wyników w czasie, prezentowana w oknie Project Results wykorzystuj�cym podwójne buforowanie19) mo�na uzyska� przez dodanie aktualnej warto�ci iteracji (/*iteration*/) do j�dra obliczeniowego i uruchomienie programu w p�tli (rys. 10). Przykładowy kod �ródłowy ustala parametr wzmocnienia i osłabienia
17 Warte podkre�lenia jest, �e podawany czas wykonania procedury obliczeniowej nie jest czasem od chwili
wci�ni�cia przycisku Build and Execute do uzyskania wyników - jest to czas wykonania samego j�dra OpenCL. Czas wykonania j�dra obliczeniowego nie uwzgl�dnia czasu tworzenia kontekstu OpenCL, w skład którego mo�e wej�� wczytanie obrazu z pliku, przekazanie danych do j�dra obliczeniowego, przygotowanie prezentacji wyników (narysowanie obrazu w oknie Project Results).
18 Statusy wywoła� metod API OpenCL (kody bł�dów) opisywane s� w j�zyku angielskim. 19 Podwójne buforowanie to technika eliminuj�ca efekt migotania obrazu.
60 61AGOGE - zintegrowane �rodowisko programistyczne dla OpenCL C
kanałów RGB po krzywej funkcji sinus. Przykład jest banalny, jednak prezentuje mo�liwo�ci u�ycia leksemu /*iteration*/ w �rodowisku Agoge.
�redni czas oblicze� na stanowisku 2 (urz�dzenie 1) wyniósł 51 [s] dla 280 iteracji.
Rys.10. Zmiana jasno�ci kolorów uruchomiona w p�tli (Build and Run)
Oczywi�cie, mo�liwe jest zliczanie kolejnych iteracji w samym j�drze obliczeniowym (rys. 11), jednak nale�y pami�ta� o liczbie wywoła� kodu, które zale�ne s� od ustawie�rozmiaru siatki obliczeniowej.
Rys.11. Kod �ródłowy OpenCL C zliczaj�cy kolejne iteracje
3. 3. Obliczenia numeryczne - zbiór Mandelbrota
Zbiór Mandelbrota [7] to wyra�ny i szybki w implementacji przykład mo�liwo�ci obliczeniowych OpenCL (rys. 12).
62 63Michał BUGAŁA
Rys. 12. Zbiór Mandelbrota w �rodowisku Agoge
W artykule nie omawiono zalet wykorzystania przetwarzania równoległego za pomoc�technologii OpenCL, jednak poni�sze zestawienie jest wyra�nym dowodem na znaczn�akceleracj� oblicze�.
• Testy wzorcowe (ang. benchmark) sprz�tu z wykorzystaniem przetwarzania równoległego:
• stanowisko 2, urz�dzenie 1: 1.3 [ms],
• stanowisko 2, urz�dzenie 2: 13 [ms],
• stanowisko 1, urz�dzenie 1: 2.8 [ms].
• Testy wzorcowe algorytmu rysowania zbioru Mandelbrota z wykorzystaniem technologii OpenCL i bez wykorzystania oblicze� równoległych:
• algorytm z wykorzystaniem przetwarzania równoległego20: 5.7 [ms],
• algorytm szeregowy bez wykorzystania oblicze� równoległych21: 390 [ms].
20 �rednia arytmetyczna z testów sprz�tu. 21 Algorytm rysowania zbioru Mandelbrota [8] zaimplementowany w �rodowisku gospodarza na stanowisku 2
(bez wykorzystania OpenCL i bez kolorowania fraktalu).
62 63AGOGE - zintegrowane �rodowisko programistyczne dla OpenCL C
3. 4. Obliczenia numeryczne – zbiór Julii
Algorytm rysowania zbioru Julii [9],[10] jest zbli�ony do implementacji zbioru Mandelbrota z poprzedniego przykładu, jednak tym razem wysoko�� i szeroko�� fraktalu zostały wprowadzone przez zdefiniowanie stałych preprocesora (pp_width, pp_height)w zakładce Build Options (rys. 13). Przykład demonstruje równie� mo�liwo�� zmiany standardowych opcji OpenCL w �rodowisku Agoge.
�redni czas wykonania procedury obliczeniowej z wł�czon� optymalizacj� -cl-fast-relaxed-math na stanowisku 1 (urz�dzenie 1) wyniósł 1.27 [ms]. �redni czas z domy�lnymi ustawieniami OpenCL (bez optymalizacji) wyniósł 1.31 [ms] na tym samym stanowisku.
Rys. 13. Zbiór Julii
4. WNIOSKI
Zaprezentowane w artykule przykłady mog� nie oddawa� w pełni potencjału technologii OpenCL, ale ich głównym celem było zaprezentowanie mo�liwo�ci wykorzystania aktualnej wersji �rodowiska programistycznego Agoge w opracowywaniu wydajnych algorytmów OpenCL C i udowodnienie sprawno�ci działania samego �rodowiska. Znajomo�� API OpenCL oraz implementacja kodu �ródłowego gospodarza jest jak najbardziej wskazana dla potencjalnego programisty pragn�cego korzysta� z technologii OpenCL, jednak ci�głe powtarzanie czynno�ci zwi�zanych z obsług� i zasobami j�dra obliczeniowego (w przypadku samodzielnego wykorzystywania technologii, bez dedykowanego �rodowiska) jest niepraktyczne, uci��liwe i mo�e generowa� wiele bł�dów
64 65Michał BUGAŁA
peryferyjnych 22 . Ilo�� pracy, jak� nale�ałoby wło�y� w samodzielne opracowanie kodu �ródłowego po stronie gospodarza, chocia�by dla przytoczonych przykładów, jest o wiele wi�ksza ni� opracowanie algorytmów w j�zyku OpenCL C.
Technologia OpenCL i �rodowisko Agoge mog� by� bardzo u�yteczne w implementacji i wykonywaniu wydajnych oblicze� w zakresie ka�dej dziedziny naukowej, które da si� opisa� za pomoc� algorytmów równoległych. Algorytmy, w których wiele instrukcji mo�e by� wykonywanych jednocze�nie, maj� zastosowanie (lub powinny by�stosowane) w przetwarzaniu i analizie obrazu, symulacji dynamiki płynów i gazów, w technikach �ledzenia promieni (ang. ray tracing), chemii i biologii obliczeniowej, w metodach elementów sko�czonych i wielu innych.
�rodowisko programistyczne Agoge podlega ci�głemu rozwojowi, a kierunek rozwoju uzale�niony jest od zada�, jakie wykonywane s� w Biurze Symulatorów OBRUM sp. z o.o. W najbli�szym czasie planuje si� implementacj� mo�liwo�ci wprowadzania struktur danych do j�dra obliczeniowego, generowanie kodu �ródłowego gospodarza 23 , implementacj� i poł�czenie ze standardem OpenGL24, obsług� obrazów jednowymiarowych i trójwymiarowych.
5. LITERATURA
[1] Sawerwain M.: OpenCL – Akceleracja GPU w praktyce, PWN, Warszawa 2014, ISBN 978-83-01-18012-6.
[2] Khronos Group Inc.: The open standard for parallel programming of heterogeneous systems,https://www.khronos.org/opencl [dost�p: 25.09.2016].
[3] Khronos OpenCL Working Group: The OpenCL C Specification, https://www.khronos.org/registry/cl/specs/opencl-1.2.pdf [dost�p: 26.09.2016].
[4] PUC-RIO, Lua, https://www.lua.org/ [dost�p: 11.10.2016].
[5] Bugała M.: Hydrogen – �rodowisko programistyczne dla systemu Virtual BattleSpace, Szybkobie�ne Pojazdy G�sienicowe (43) nr 1/2017 s. 55-67. ISSN 0860-8369. OBRUM sp. z o.o. Gliwice, stycze� 2017.
[6] USC, The USC-SIPI Image Database, http://sipi.usc.edu/database/ [dost�p: 29.09.2016].
[7] Mandelbrot B.: The Fractal Geometry of Nature, W. H. Freeman and Company, New York 1982, ISBN 0-7167-1186-9.
[8] Rosetta Code, Mandelbrot Set, https://rosettacode.org/wiki/Mandelbrot_set [dost�p: 10.10.2016].
[9] Rosetta Code, Julia Set, https://rosettacode.org/wiki/Julia_set [dost�p: 11.10.2016].
22 Autor ma na my�li bł�dy, które nie s� zwi�zane z sam� implementacj� API OpenCL i kodem �ródłowym
OpenCL C, a bł�dy wynikaj�ce chocia�by z potrzeby u�ywania dodatkowych �ródeł dekoduj�cych ró�ne formaty plików graficznych lub zwykłe pomyłki (ilo�� deklarowanej pami�ci po zmianie parametrów siatki obliczeniowej itp.).
23 Wygenerowane kody �ródłowe gospodarza b�d� zapisywane w postaci funkcji, które b�dzie mo�na doł�cza�i wykorzystywa� w bardziej zło�onych aplikacjach. Ilo�� kodu �ródłowego gospodarza, jaka jest niezb�dn�do wykonania procedury obliczeniowej OpenCL, mo�e kilkukrotnie przewy�sza� ilo�� kodu samej procedury i cho�by z tego powodu akceleracja tego procesu w �rodowisku Agoge (automatyczne tworzenie kontekstu OpenCL) jest uzasadniona.
24 Bardziej w celu uatrakcyjnienia i przyspieszenia generowania prezentacji wyników, ni� zwi�kszenia mo�liwo�ci obliczeniowych.
64 65AGOGE - zintegrowane �rodowisko programistyczne dla OpenCL C
[10] Julia G.: Mémoire sur l’itération des fonctions rationnelles, Journal de mathématiques pures et appliquées 8e série, tome 1 (1918), p. 47-246., http://sites. mathdoc.fr/JMPA/PDF/JMPA_1918_8_1_A2_0.pdf [dost�p: 11.10.2016].
AGOGE - AN INTEGRATED DEVELOPMENT ENVIRONMENT FOR OPENCL C
Abstract. The article presents the capabilities and technological solutions of Agoge, an integrated development environment dedicated to OpenCL. The automation of the process of creating an OpenCL context, handling of computational kernel and computational grid are discussed and the potential for using the environment in numerical calculations and image analysis is presented.
Keywords: development environment, OpenCL C programming language, OpenCL technology, parallel processing, image analysis.