dla opencl c - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty...

17
49 Szybkobiene Pojazdy Gsienicowe (45) nr 3, 2017 mgr in. Michał BUGAŁA – Orodek Badawczo-Rozwojowy Urzdze Mechanicznych „OBRUM" sp z o.o., Gliwice Michał BUGAŁA AGOGE - ZINTEGROWANE RODOWISKO PROGRAMISTYCZNE DLA OPENCL C Streszczenie. W artykule zaprezentowano moliwoci i rozwizania technologiczne zintegrowanego rodowiska programistycznego dedykowanego technologii OpenCL o nazwie Agoge. Omówiono proces zautomatyzowania tworzenia kontekstu OpenCL, obsługi argumentów jdra obliczeniowego i siatki obliczeniowej, oraz przedstawiono moliwoci wykorzystania rodowiska w obliczeniach numerycznych i analizie obrazu. Słowa kluczowe: rodowisko programistyczne, jzyk 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. zwizanych z akceleracj algorytmów przetwarzania i analizy obrazu. Artykuł nie jest powicony 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 bdzie mógł by w pełni wykorzystany w przyszłoci przy produkcji wydajnych symulacji fizycznych w dziedzinie aerodynamiki, hydrodynamiki i mechaniki klasycznej). Celem artykułu jest zaprezentowanie narzdzia umoliwiajcego wykorzystanie i prac z technologi OpenCL w sposób szybki i przyjazny dla uytkownika. Potencjalnym czytelnikiem artykułu i odbiorcrodowiska Agoge jest programista poszukujcy rozwiza pozwalajcych opracowywa szybkie algorytmy w dedykowanym do tego rodowisku programistycznym, jakim stara si by opisane w artykule rodowisko Agoge. Z perspektywy Orodka Badawczo-Rozwojowego Urzdze Mechanicznych, w którym powstał projekt, czytelnik powinien traktowa rodowisko Agoge jako narzdzie umoliwiajce przeprowadzanie bada w Biurze Symulatorów OBRUM, a przez cel powstania projektu naley rozumie opracowanie rozwizania umoliwiajcego sprawne wykorzystanie technologii OpenCL. Problematyka moe wyda si daleka od głównych zada Orodka, jednak z punktu widzenia Biura Symulatorów i technologii programistycznych jest bardzo aktualna. OpenCL (z ang. Open Computing Language) to technologia heterogeniczna 1 umoliwiajca tworzenie bardzo wydajnych programów z wykorzystaniem przetwarzania równoległego, w którym wiele oblicze moe by wykonywanych w tym samym czasie. Dodatkow zalet standardu OpenCL jest API 2 , które umoliwia wykorzystanie technologii 1 Załoeniem standardu OpenCL jest obsługa rónych platform sprztowych na rónych systemach operacyjnych (w odrónieniu od np. CUDA i C++AMP). OpenCL jest obecnie implementowany na czterech typach urzdze 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

Upload: danghuong

Post on 27-Feb-2019

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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

Page 2: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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.

Page 3: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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).

Page 4: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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).

Page 5: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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.

Page 6: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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.

Page 7: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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.

Page 8: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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.

Page 9: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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).

Page 10: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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)

Page 11: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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.

Page 12: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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.

Page 13: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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).

Page 14: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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).

Page 15: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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

Page 16: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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.

Page 17: DLA OPENCL C - obrum.gliwice.pl · typach urz dze obliczeniowych (procesory tradycyjne, karty graficzne, układy DSP, układy typu FPGA) i systemach operacyjnych z rodziny Windows,

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.