Wpracy przedstawiono wyniki wykorzystania możliwości obliczeniowych kart graficznych

Podobne dokumenty
CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

CUDA. cudniejsze przyk ady

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

Praca dyplomowa magisterska

Detekcja twarzy w obrazie

Przetwarzanie obrazu

Przetwarzanie obrazów rastrowych macierzą konwolucji

Podsystem graficzny. W skład podsystemu graficznego wchodzą: karta graficzna monitor

dr inż. Piotr Odya dr inż. Piotr Suchomski

Nowinki technologiczne procesorów

Julia 4D - raytracing

Spośród licznych filtrów nieliniowych najlepszymi właściwościami odznacza się filtr medianowy prosty i skuteczny.

Grafika Komputerowa Wykład 2. Przetwarzanie obrazów. mgr inż. Michał Chwesiuk 1/38

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

Przetwarzanie obrazu

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

która metoda jest najlepsza

Laboratorium. Cyfrowe przetwarzanie sygnałów. Ćwiczenie 9. Przetwarzanie sygnałów wizyjnych. Politechnika Świętokrzyska.

Nowinki technologiczne procesorów

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

Karty graficzne możemy podzielić na:

Automatyka i Robotyka II stopień ogólno akademicki

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC,

Detekcja punktów zainteresowania

Parametryzacja obrazu na potrzeby algorytmów decyzyjnych

Wykorzystanie architektury Intel MIC w obliczeniach typu stencil

Filtracja obrazu operacje kontekstowe

Wymagania na poszczególne oceny szkolne dla klasy VI. (na podstawie Grażyny Koba, Teraz bajty. Informatyka dla szkoły podstawowej.

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Moc płynąca z kart graficznych

Filtracja obrazu operacje kontekstowe

Raport Hurtownie Danych

Przetwarzanie obrazu

i3: internet - infrastruktury - innowacje

Modelowanie diagramów klas w języku UML. Łukasz Gorzel @stud.umk.pl 7 marca 2014

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

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

Algorytmy decyzyjne będące alternatywą dla sieci neuronowych

dr inż. Tomasz Krzeszowski

BIBLIOTEKA PROGRAMU R - BIOPS. Narzędzia Informatyczne w Badaniach Naukowych Katarzyna Bernat

Analiza obrazów - sprawozdanie nr 2

Nowinkach technologicznych procesorów

Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie. dr inż. Adam Piórkowski. Jakub Osiadacz Marcin Wróbel

Redukcja czasu wykonania algorytmu Cannego dzięki zastosowaniu połączenia OpenMP z technologią NVIDIA CUDA

Politechnika Świętokrzyska. Laboratorium. Cyfrowe przetwarzanie sygnałów. Ćwiczenie 8. Filtracja uśredniająca i statystyczna.

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

Implementacja filtru Canny ego

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT

Grafika komputerowa. Dla DSI II

Wymagania edukacyjne z informatyki dla uczniów klas VI SP nr 53 w Krakowie w roku szkolnym 2019/2020

1. Opis aplikacji. 2. Przeprowadzanie pomiarów. 3. Tworzenie sprawozdania

Ćwiczenie 6. Transformacje skali szarości obrazów

Metody optymalizacji soft-procesorów NIOS

Wtyczka Crop3D. Wstęp. Implementacja. Sprawozdanie z realizacji projektu Bartłomiej Trzewiczek Kraków,

Programowanie procesorów graficznych GPGPU

Szacowanie wartości monet na obrazach.

CZYM JEST KARTA GRAFICZNA.

Zadania badawcze prowadzone przez Zakład Technik Programowania:

Test dysku Intel SSD DC S GB. Wpisany przez Mateusz Ponikowski Wtorek, 22 Październik :22

Przetwarzanie obrazów wykład 4

Sieci obliczeniowe poprawny dobór i modelowanie

Analiza obrazu. wykład 3. Marek Jan Kasprowicz Uniwersytet Rolniczy 2009

Laboratorium Cyfrowego Przetwarzania Obrazów

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

Automatyczne tworzenie trójwymiarowego planu pomieszczenia z zastosowaniem metod stereowizyjnych

Strojenie systemu Linux pod k¹tem serwera bazy danych Oracle 9i

Straszyński Kołodziejczyk, Paweł Straszyński. Wszelkie prawa zastrzeżone. FoamPro. Instrukcja obsługi

WYDZIAŁ FIZYKI I INFORMATYKI STOSOWANEJ

Przykładowe sprawozdanie. Jan Pustelnik

Architektura komputerów

Streszczenie Komputery do przechowywania rysunków, zdjęć i innych obrazów używają tylko liczb. Te zajęcia mają ukazać w jaki sposób to robią.

AMD Ryzen recenzja procesora. Wpisany przez Mateusz Ponikowski Piątek, 11 Październik :47

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Numeryczna algebra liniowa

Laboratorium. Cyfrowe przetwarzanie sygnałów. Ćwiczenie 11. Filtracja sygnałów wizyjnych

Maciej Piotr Jankowski

1 Temat: Wprowadzenie do biblioteki OpenCV

Widżety KIWIPortal. tworzenie umieszczanie na stronach internetowych opcje zaawansowane. Autor: Damian Rebuś Data: Wersja: 1.

Analiza i przetwarzanie obrazów

Cyfrowe przetwarzanie obrazów i sygnałów Wykład 8 AiR III

Analiza obrazu. wykład 1. Marek Jan Kasprowicz Uniwersytet Rolniczy Marek Jan Kasprowicz Analiza obrazu komputerowego 2009 r.

Rzeczywistość rozszerzona: czujniki do akwizycji obrazów RGB-D. Autor: Olga Głogowska AiR II

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

zna wybrane modele kolorów i metody transformacji między nimi zna podstawowe techniki filtracji liniowej, nieliniowej dla obrazów cyfrowych

Technologie Informacyjne

AUTOMATYCZNE ROZPOZNAWANIE PUNKTÓW KONTROLNYCH GŁOWY SŁUŻĄCYCH DO 3D MODELOWANIA JEJ ANATOMII I DYNAMIKI

1. Tilt-shift. TEMAT PROJEKTU Tilt-shift - aplikacja na system mobilny ios

Histogram obrazu, modyfikacje histogramu

Analiza i przetwarzanie obrazów

Formaty obrazów rastrowych biblioteki PBM

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

Wyższa Szkoła Informatyki Stosowanej i Zarządzania

Transformata Fouriera

Wymagania edukacyjne na ocenę z informatyki klasa 3

Informatyka, studia dzienne, mgr II st. Przetwarzanie obrazu i dźwięku 2011/2012 Prowadzący: dr inż. Bartłomiej Stasiak czwartek, 8:30

Laboratorium Komputerowe Systemy Pomiarowe

System komputerowy. System komputerowy

Transkrypt:

Przetwarzanie wstępne obrazów z wykorzystaniem możliwości obliczeniowych kart graficznych Łukasz Furman, Krzysztof Jaskot Politechnika Ślaska, krzysztof.jaskot@polsl.pl Wpracy przedstawiono wyniki wykorzystania możliwości obliczeniowych kart graficznych w przetwarzaniu wstępnym obrazów. Porównano czasy realizacji przykładowych zadań przetwarzania wstępnego realizowanych z wykorzystaniem procesora głównego i karty graficznej wspierającej technologię CUDA.. Wstęp Rozwój technologii osiągnął etap, w którym dalsze zwiększanie częstotliwości pracy procesorów staje się coraz trudniejsze. Z tego względu producenci procesorów umieszczają w nich kilka rdzeni umożliwiając w ten sposób równoległe wykonywanie obliczeń. Przykładowo procesor Intel Core I7 posiada cztery rdzenie, a dzięki technologii Hyper-Threading w danym momencie korzystać może z niego osiem wątków. Pod względem liczby wątków karty graficzne przewyższają nawet najlepsze procesory. Dla przykładu karta graficzna GeForce GTX 56M (która wydana została w roku) posiada 9 rdzenie CUDA, natomiast najnowsza karta graficzna GeForce GTX 78 posiada ich aż 34. Oczywiście częstotliwość pracy procesorów jest znacznie większa niż karty graficznej. Firma NVIDIA opracowała technologię CUDA - (ang. Compute Unified Device Architecture) pozwalającą na wykorzystanie mocy obliczeniowej karty graficznej do rozwiązywania problemów niekoniecznie związanych z grafiką, które mogą zostać wykonane w sposób równoległy. Mimo, że technologia CUDA została opracowana już jakiś czas temu (listopad 6), literatura jej dotycząca jest bardzo uboga. Na uwagę zasługują dwie pozycje [9] oraz [4]. Dodatkowo przyjrzeć warto się publikacjom dotyczącym ogólnemu przetwarzaniu danych w sposób równoległy jak [3] oraz [7]. Mimo tak małej liczby pozycji książkowych, cała dokumentacja jest dostępna w wersji elektronicznej [5], co pozwala na przystępne zrozumienie zasad działania. Technologia CUDA bywała już tematem tego typu prac. Między innymi w jednej z prac skupiono się na wykorzystaniu technologii CUDA w sieciach neuronowych [8]. Inna praca opisuje wykorzystanie CUDA do jednej z technik generowania obrazów trójwymiarowych. Dlatego dziedziny, w których można wykorzystać karty graficzne do równoległego przetwarzania danych są bardzo rozległe oraz zróżnicowane. Aktualnie CUDA wykorzystywana jest w dziedzinach takich jak: przetwarzanie wideo, astrofizyka, biologia obliczeniowa i chemia, symulacja dynamiki płynów, rekonstrukcja obrazu w tomografii komputerowej czy analiza sejsmiczna. Technologia CUDA jest wykorzystywana między innymi do przyspieszania obliczeń oprogramowania AMBER program do symulacji dynamiki

molekularnej wykorzystywany w środowiskach akademickich oraz przez firmy farmaceutyczne w celu skrócenia czasu opracowywania nowych leków. W każdej dziedzinie, w której wykorzystywana jest wizja wykonuje się operacje przekształceń obrazu. Obrazy mogą mieć różny charakter z jednej strony obrazy mogą oddawać wartości estetyczne, z drugiej zawierać mogą pewne informacje, które muszą zostać wydobyte przez system. W zależności od celu, przekształcenia mogą być prostymi operacjami, lub opisane skomplikowanymi algorytmami zajmującymi dużo czasu. Ze względu na to, że w niektórych przypadkach operacje wykonywane na obrazach powinny zajmować jak najmniej czasu, jednym ze sposobów przyspieszania przekształceń jest użycie specjalnych bibliotek zoptymalizowanych pod kątem takich operacji jak np. OpenCV [6]. Oprócz rozwiązań programowych realizujących przyśpieszenie operacji na obrazach istnieją również rozwiązania sprzętowe [3]. Z drugiej strony operacji przetwarzania obrazu można przyjrzeć się jako zadaniu, które w łatwy sposób może zostać rozbite na wątki, które mogłyby być wykonywane równoległe. W większości przypadków dla każdego z pikseli obrazu wykonywana jest identyczna funkcja. Wartość piksela obliczanego w danym momencie nie zależy od wartości pikseli już przetworzonych. Kolejność przetwarzania również nie ma w takim przypadku znaczenia. Ze względu na cechy tego typu operacji, można więc wykorzystać technologię CUDA do wykonania zadania przetwarzania obrazów przy pomocy karty graficznej. W ramach pracy przygotowano środowisko programistycznego w taki sposób, by możliwe było tworzenie programów wykorzystujących możliwości obliczeniowe kart graficznych. Stworzono aplikację przetwarzającą obrazy wykorzystującą możliwości obliczeniowe karty graficznej. Za pomocą napisanego oprogramowania można porównać czasy wykonywania operacji z wykorzystaniem możliwości obliczeniowych kart graficznych z tymi wykonanymi z wykorzystaniem procesora głównego, oraz oszacowanie przyspieszenia czasu obliczeń.. Środowisko testowe Jako środowisko testowe stworzono aplikację wykorzystującą technologię CUDA służącą do przetwarzania obrazów. Aplikacja była uruchamiana pod kontrolą systemu operacyjnego Windows 7. Ze względu na dużo prostszą implementację GUI w języku C#, zdecydowano się na niego zamiast WinAPI w C + +. Ze względu na to, że funkcje CUDA są rozszerzeniami języka C, pojawił się problem połączenia dwóch języków. Zdecydowano się na rozbicie całej aplikacji na dwa projekty. W pierwszym, pisanym w C + + [5], zaimplementowane zostały wszystkie funkcje wykonujące operacje na obrazach. Projekt jest kompilowany do biblioteki DLL. Drugi projekt pisany w języku C# odpowiada za GUI całej aplikacji []. Operacje na obrazach wykonywane są poprzez odwołanie się do wcześniej utworzonego pliku DLL. W przypadku języka C# wczytanie pliku z obrazem odbywa się z wykorzystaniem jednego polecenia (Listing ): Listing : Wczytanie pliku Image obraz=image. FromFile ( s c i e z k a d o p l i k u ) ; To rozwiązanie pozwala na szybkie wczytanie pliku niezależne od jego rozszerzenia. Ma jednak wadę ze względu na to, że obraz wczytywany jest jako obiekt typu Image. Tak wczytany obraz nie może być przekazany do funkcji znajdującej się w pliku DLL ze względu na to, że jest ona pisana w języku C i nie obsługuje danych tego typu. Przed przekształceniami obrazu konieczna jest więc zmiana typu reprezentującego obraz na tablicę pikseli. Dostęp do pikseli obiektu Image można uzyskać przez dwa sposoby. Pierwszym z nich jest skorzystanie z funkcji obraz.getp ixsel(x, y), oraz obraz.setp ixel(x, y) gdzie x, y oznaczają współrzędne pożądanego piksela. W rezultacie zwracany jest obiekt typu Color zawierające informację o składowych RGB danego piksela. Zaletą tego

sposobu jest prostota, natomiast wadą szybkość działania. Drugi sposób bardziej skomplikowany jednak działający szybciej, jest oparty na wskaźnikach. W języku C# wszystkie operacje na wskaźnikach muszą być umieszczone w bloku unsaf e. Pierwszą rzeczą, którą należy zrobić jest zablokowanie obszaru bitmapy w pamięci za pomocą funkcji obraz.lockbits, która zwraca obiekt typu BitmapData. Na podstawie otrzymanego obiektu można utworzyć wskaźnik do pierwszego elementu obrazu (Listing ). Listing : Wczytanie pliku - operacja na wskaźnikach // zablokowanie obszaru do odczytu i z a p i s u BitmapData dane = obraz. LockBits ( new Rectangle (,, obraz. Width, obraz. Height ), ImageLockMode. ReadWrite, obraz. PixelFormat ) ; unsafe { byte bmpptr = ( byte ) dane. Scan ; int o f f s e t = dane. S t r i d e dane. Width 3 ; for ( int y = ; y < obraz. Height ; y++) { for ( int x = ; x < obraz. Width ; x++) { bmpptr += 3 ; // o p e r a c j e na p i k s e l u } bmpptr += o f f s e t ; // nastepny w i e r s z } } Pamiętać należy, że kolory w języku C# reprezentowane są poprzez paletę BGR. Wyliczany offset potrzebny jest, ponieważ w języku C# rozmiary bitmap muszą być potęgami. Jeśli tak nie jest do obrazu zostanie dodany padding. Stride zwraca całkowitą długość wiersza w bajtach, tak więc odjęcie od niego szerokości obrazu (pomnożonego przez 3) pozwoli otrzymać padding. Takie podejście pozwoliło na szybsze przekształcanie obiektu typu Image na wektor bajtów oraz z powrotem. Mimo to, że jest ono realizowane w ten sposób nadal operacja ta zajmuje dość dużo czasu dłużej niż same przekształcenia na obrazie, dlatego jest to swego rodzaju wąskie gardło. Aplikacja pozwala na wykonanie operacji na obrazie przy wykorzystaniu zarówno procesora jak i karty graficznej. Po wykonaniu operacji, prezentowany jest jej wynik z możliwością zapisu pod różnymi rozszerzeniami. Dodatkowo zwracany jest czas wykonania operacji (z pominięciem czasu przekształcenia obrazu z typu Image do wektora danych). Czasy wykonania poszczególnych operacji prezentowane są na wykresie. Zarówno funkcje wykonujące się przy pomocy procesora jak i karty graficznej wywoływane są poprzez odwołanie się do zewnętrznej biblioteki DLL stworzonej w osobnym projekcie. Wygląd aplikacji przedstawiony jest na rysunku. Rysunek : Aplikacja testowa. 3

3. Otrzymane wyniki Poniżej zostaną przedstawione przykładowe wyniki otrzymane z wykorzystaniem stworzonej aplikacji uruchomionej na komputerze PC wyposażonym w procesor INTEL i7 63QM,.9GHz, 4 rdzenie 8 wątków (testy na procesorze były wykonywane tylko dla jednego wątku), oraz z wykorzystaniem karty graficznej NVIDIA GeForce GTX56m, 775 MHz, 9 rdzenie CUDA. 3.. Poziomy szarości, binaryzacja Każdy piksel obrazu reprezentowany jest przez trzy składowe koloru RGB. Piksel, którego wszystkie trzy składowe RGB posiadają identyczne wartości posiada kolor w poziomach szarości. Algorytm przejścia z obrazu kolorowego do obrazu w poziomach szarości powoduje uśrednienie wartości RGB każdego z pikseli. Wyniki przedstawiono na rysunku. Dla obrazu o rozdzielczości 5 x 5 pikseli Rysunek : Wynik konwersji obrazu kolorowego na obraz w poziomach szarości. operacja przejścia na obraz w poziomach szarości wykonuje się poniżej ms, dlatego aby możliwe było wykonanie porównania przyspieszenia obliczeń wykonano powtórzeń funkcji. Osiągnięto następujące wyniki: Procesor 575 ms Karta graficzna 49 ms Przyspieszenie obliczeń wynosi więc 3.7x. Binaryzacja jest operacją, której wynikiem jest obraz, którego piksele posiadają jedną z dwóch wartości całkowicie białe lub czarne []. Użytkownik podaje wartość, według której progowany jest obraz. Jako, że każdy piksel reprezentowany jest przez trójelementowy wektor, przed operacją progowania obraz musi być poddany konwersji na obraz w poziomach szarości. Wyniki przedstawiono na rysunku 3. Podobnie jak w przypadku konwersji do Rysunek 3: Wynik binaryzacji obrazu dla progu 8. obrazu w poziomach szarości, operacja binaryzacji zajmuje bardzo mało czasu, dlatego aby lepiej wyznaczyć wartość przyspieszenia obliczeń wykonano serię powtórzeń. Osiągnięte wyniki przedstawiają się następująco: Procesor 7 ms Karta graficzna 697 ms Przyspieszenie obliczeń: 4.4x. 4

3.. Filtracja Podstawowy filtr dolnoprzepustowy o rozmiarze 3x3, którego wynikiem jest średnia wszystkich elementów okna (rysunek 4) []. Czas wykonania obliczeń dla obrazu o rozmiarze 5 x 5 pikseli: Rysunek 4: Wynik działania filtru uśredniającego. Procesor: 5 ms Karta graficzna:.94 ms Przyspieszenie obliczeń: 5.96x. Filtr kołowy jest modyfikacją filtru kwadratowego [4]. Jego maska przypomina kształtem koło piksele znajdujące się w rogu maski mają wagę, czyli nie biorą udziału w filtracji (). Wynik działania filtru kołowego przedstawiono na rysunku 5. W = () Czas wykonania obliczeń dla obrazu o rozmiarze 5 x 5 pikseli: Rysunek 5: Wynik działania filtru kołowego. Procesor: 9 ms Karta graficzna:.4 ms Przyspieszenie obliczeń:.7x. Gdyby wartości wag filtru reprezentowane były przez słupki, filtr kształtem przypominałby piramidę (). Wraz z oddalaniem się od punktu, dla którego wykonywana jest filtracja, wartości wag maleją. Wygląd filtru według [4]: W = 8 3 4 6 4 5 3 6 9 6 3 4 6 4 3 ()

Wynik działania filtru piramidalnego przedstawiony jest na rysunku 6. Czas wykonania obliczeń dla Rysunek 6: Wynik działania filtru piramidalnego. obrazu o rozmiarze 5 x 5 pikseli: Procesor: 9 ms Karta graficzna:.4 ms Przyspieszenie obliczeń:.7x. Filtr stożkowy podobny jest do filtru piramidalnego. Jeśli wagi maski reprezentowane byłyby przez słupki, miałby kształt stożka (3). Piksel, dla którego wykonywana jest filtracja posiada największą wagę. Wraz z oddalaniem się od środka maski wagi poszczególnych elementów maleją. Obraz po filtracji przedstawiono na rysunku 7. W = 5 5 (3) Czas wykonania obliczeń dla obrazu o rozmiarze 5 x 5 pikseli: Rysunek 7: Wynik działania filtru stożkowego. Procesor: 9 ms Karta graficzna:.4 ms Przyspieszenie obliczeń:.7x. Jak widać z otrzymanych wyników czasy wykonania obliczeń dla filtrów kołowego, piramidalnego i stożkowego są takie same. Duży wpływ na szybkość ma rozmiar zastosowanej maski co widać w przypadku czasu obliczeń dla maski 3x3 w filtrze dolnoprzepustowym. Filtr nazywany kompresującym lub erozyjnym polegający na zastąpieniu wartości piksela wartością najmniejszą z obszaru danego punktu. Jego działanie powoduje zmniejszenie się jasności obrazu dające efekt erozji obiektów [4] (rysunek 8). Czasy wykonania funkcji są następujące: Procesor 54 ms 6

Rysunek 8: Wynik działania filtru erozyjnego. Karta graficzna.75 ms Osiągnięto więc przyspieszenie obliczeń równe aż 7x. Filtr nazywany dekompresującym lub ekspansywnym w działaniu podobny do filtra minimalnego. Wartość filtrowanego piksela zastępuje się wartością maksymalną z obszaru danego piksela. Powoduje to zwiększenie się jasności obrazu, dające efekt dylatacji (rozrostu) obiektów [4] (rysunek 9). Otrzymane czasy obliczeń dla filtra ekspensywnego są takie same jak w przypadku filtra erozyjnego. Rysunek 9: Wynik działania filtru ekspensywnego. 3.3. Deskryptor Harrisa Deskryptor Harrisa wykorzystywany jest w celu znalezieniu rogów obiektów znajdujących się na obrazie [6]. Służy to wyznaczeniu punktów charakterystycznych, które mogą być użyte do znajdywania cech wspólnych obrazów do tworzenia np. panoramy lub do rozpoznawania tekstur. W zrealizowanych testach deskryptor Harrisa został użyty w celu detekcji narożników wykorzystując następującą macierz: " # Ix Ix Iy M= (4) Ix Iy Iy Pozwala to na uniezależnienie się od translacji obiektów. Efekt detekcji narożników przedstawiony został na rysunku. Czas detekcji dla powyższego przykładu (434x34 pikseli): Procesor 37 ms Karta graficzna 67 ms Przyspieszenie obliczeń prawie 6 razy. Powodem tak małego przyspieszenia obliczeń w porównaniu z poprzednimi przykładami jest złożoność problemu składającego się z kilku etapów obliczeń. Ze względu na to skorzystano z gotowych funkcji napisanych wcześniej jak np. filtracja obrazu. Spowodowało to kopiowanie danych pomiędzy pamięcią RAM i procesorem przy użyciu każdej z funkcji składowych. Z powodu zbyt małego przyspieszenia obliczeń, zaimplementowano funkcję wykonującą się w całości przy użyciu karty graficznej, bez niepotrzebnego kopiowania danych pomiędzy poszczególnymi etapami obliczeń. Pozwoliło to na osiągnięcie następujących czasów: 7

Rysunek : Wynik detekcji narożników. Procesor 37 ms Karta graficzna 6 ms Przyspieszenie obliczeń ponad 3 x. Jak widać zoptymalizowana funkcja wykonuje się znacznie szybciej niż w poprzednim przypadku. 3.4. Porównanie szybkości działania dla różnych rozmiarów masek W celu dokładniejszego sprawdzenia wzrostu szybkości obliczeń z wykorzystaniem technologii CUDA przeprowadzono porównanie szybkości obliczeń realizowanych przez procesor i kartę graficzną dla trzech rodzajów masek (3x3, 5x4, 7x7) i sześciu rozdzielczości obrazu (56p, 5p, 8p, 4p, 68p, 9p). Dla tak przeprowadzonego eksperymentu sporządzono wykresy zależności czasu wykonania funkcji od rozmiaru obrazu dla różnych rozmiarów masek. Rysunek przedstawia otrzymane wyniki. Rysunek : Zależność czasu wykonania funkcji od rozmiaru obrazu dla procesora oraz karty graficznej przy użyciu maski 3x3, 5x5, 7x7. W tabeli przedstawiono zbiorczo pomiar czasu dla poszczególnych operacji z zastosowaniem różnych masek wykonanych z wykorzystaniem procesora i karty graficznej. Z otrzymanych czasów wynika, że obliczenia z wykorzystaniem karty graficznej z technologią CUDA w najgorszym przypadku były 4 razy szybsze niż realizując je tylko z wykorzystaniem procesora głównego (dla maski 3x3 i 5p). W najlepszym przypadku wzrost prędkości był 8 krotny (dla maski 5x5 i 5p). Co ciekawe dla maski 7x7 i 9p wzrost prędkości był 7 krotny. 8

Tablica : Zależność czasu wykonania funkcji od rozmiaru obrazu dla procesora oraz karty graficznej przy użyciu różnych rozmiarów masek Szerokość obrazu w pikselach 56p 5p 8p 4p 68p 9p Procesor 3x3 6 ms 4 ms 6 ms 43 ms 96 ms 7 ms Karta graficzna 3x3,3 ms ms,7 ms,7 ms 6, ms 8, ms Procesor 5x5 9 ms 4 ms 55 ms 9 ms 7 ms 8 ms Karta graficzna 5x5,4 ms,4 ms,6 ms 4, ms 9,7 ms 4,4 ms Procesor 7x7 3 ms 6 ms 95 ms 56 ms 37 ms 5 ms Karta graficzna 7x7,6 ms, ms 3,8 ms 6, ms 4, ms 8,5 ms 4. Podsumowanie Wykorzystanie mocy obliczeniowej karty graficznej pozwala na znaczne przyspieszenie wykonywania funkcji dla pewnych typów problemów. Prezentowane przekształcenia obrazów polegają na wykonywaniu pewnych obliczeń dla każdego piksela składowego. Pozwala to w dość łatwy sposób na takie przedstawienie problemu by dało się go wykonać w sposób równoległy. Średnie przyspieszenie wykonania funkcji jak np. filtracja wykorzystująca maskę, gdzie konieczne jest wykonanie pewnych obliczeń wynosi około razy. Warto zauważyć, że dla funkcji nie wykonujących żadnych obliczeń jak zastosowanie filtru erozyjnego/ekspansywnego przyspieszenie obliczeń wyniosło nawet 7 razy. Jak pokazuje przykład deskryptora Harrisa samo rozdzielenie problemu na wątki nie jest wystarczające do maksymalnego przyspieszenia wykonania funkcji. Należy również zwrócić uwagę na odpowiednie wykonanie funkcji po stronie karty graficznej. Optymalizacja przepływu danych pozwoliła na zmniejszenie czasu wykonania funkcji z 67ms do 6ms. Stosując technologię CUDA wydajność aplikacji zależy od odpowiedniego rozbicia problemu na części składowe []. Przede wszystkim skupić należy się na: maksymalnym zrównolegleniu zadań dla maksymalnego wykorzystania zasobów sprzętowych optymalizacji użycia pamięci optymalizacji używanych instrukcji Każdy z elementów może mieć różne znaczenie w zależności od rodzaju analizowanego problemu. Wyniki jakie otrzymaliśmy wykorzystując technologię CUDA w przetwarzaniu wstępnym obrazów zachęcają do wykorzystania jej w zagadnieniach związanych ze śledzeniem poruszających się obiektów np. jak w systemach wieloagentowych robotów grających w piłkę [] gdzie szybkość obliczeń ma ogromny wpływ na jakość sterowania. Przy pomocy technologii CUDA możliwe jest tworzenie bardziej wydajnych programów, przez co na odpowiedniej klasy sprzęcie można dużo szybciej wykonywać operacje, które mogą być wykonywane przez wiele wątków równolegle. Możliwe, że rozwinięcie się tej technologii spowoduje, że w przyszłości programy wykorzystujące karty graficzne w takim celu będą powszechnie stosowane. W obecnej chwili można już znaleźć programy wykorzystujące technologię CUDA w kryptografii lub kompresujące materiały wideo. 9

Literatura [] Almasi G.S., Gottlieb A., Highly Parallel Computing, Benjamin-Cummings Publishing Co., Inc. Redwood City, CA, (989) [] Babiarz A., Bieda R., Jaskot K., Vision System for Group of Mobile Robots, Vision Based Systems for UAV Applications, Part III, pp. 39-56, Springer International Publishing (3) [3] Blelloch G. E.: Vector Models for Data-Parallel Computing, Massachusetts Institute of Technology, (99) [4] Farber R., CUDA Application Design and Development, NVIDIA () [5] Grebosz J., Symfonia C ++ Standard, Editions, Kraków () [6] Harris C., Stephens M.J., A combined corner and edge detector, In Alvey Vision Conference, pp. 47 5 (988) [7] Hwu W., Kirk D., Programming Massively Parallel Processors: A Hands-on Approach, NVIDIA () [8] Krizhevsky A., Ilya S., Geoffrey E. H., ImageNet Classification with Deep Convolutional Neural Networks. NIPS Vol.. No.. () [9] Sanders J., Kandrot E., CUDA by Example: An Introduction to General-Purpose GPU Programming, NVIDIA () [] Smołka B., Bieda R., Application of the adaptive noise removal technique to the enhancement of cdna microarray images, J. Med. Informat. Technol. vol. 9, pp. 3-4, (5) [] Tadeusiewicz R., Systemy wizyjne robotów przemysłowych, Wydawnictwa Naukowo-Techniczne, Warszawa (99) [] Troelsen A., Język C# i platforma.net 4., Wydawnictwo Naukowe PWN () [3] Wiatr K., Akceleracja obliczeń w systemach wizyjnych, Wydawnictwa Naukowo-Techniczne, Warszawa (3) [4] Zieliński T. P., Cyfrowe przetwarzanie sygnałów. Od teorii do zastosowań, Wydawnictwa Komunikacji i Łączności, Warszawa (9) [5] CUDA C Programming Guide, http://docs.nvidia.com/cuda/pdf/ [6] OpenCV, http://opencv.org/