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



Podobne dokumenty
która metoda jest najlepsza

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

Instrukcja instalacji PS Bonus Pack do IBM SPSS Statistics 20 w systemie operacyjnym Windows

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Programowanie procesorów graficznych GPGPU

Przykładowe sprawozdanie. Jan Pustelnik

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

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

i3: internet - infrastruktury - innowacje

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski

Raport Hurtownie Danych

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

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Dysk twardy kontra dysk SSDNow V+ serii 200 o pojemności 240GB firmy Kingston: test

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

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

Moc płynąca z kart graficznych

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

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

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

Programowanie w C. dr inż. Stanisław Wszelak

Analiza i Przetwarzanie Obrazów

Komputer VIPER i x4,2ghz 8GB GTX 1050TI 4GB 1TB USB 3.0

Julia 4D - raytracing

Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo.

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

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

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

PROPOZYCJE KONFIGURACJI ZESTAWÓW KOMPUTERÓW STACJONARNYCH OPISANYCH ZGODNIE Z REKOMENDACJAMI UZP

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE. Mnożenie macierzy kwadratowych metodą klasyczną oraz blokową z wykorzystaniem OpenMP.

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Zespół Szkół Pnadgimnazjalnych im. Jana Kasprowicza Nietążkowo, ul. Dudycza 4, Śmigiel. autor: Tomasz Adamczewski kl. IIti

2,4 razy. 3 razy. 2,3 razy EKSTREMALNA MEGAZADANIOWOŚĆ NAWET NAWET NAWET

Parametry techniczne. Testy

MESco. Testy skalowalności obliczeń mechanicznych w oparciu o licencje HPC oraz kartę GPU nvidia Tesla c2075. Stanisław Wowra

Programowanie aplikacji równoległych i rozproszonych

Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Programowanie proceduralne w języku C++ Podstawy

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

INŻYNIERIA OPROGRAMOWANIA

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

WIDEOS O ER E WER E ÓW

NETBEANS PROFILER TOMASZ ŁUKASZUK

INSTRUKCJA KORZYSTANIA Z APLIKACJI

Pamięci. Pamięci DDR DIMM SDR SDRAM

Podręcznik użytkownika PCI-x Karta przechwytująca 4xHDMI

Tworzenie oprogramowania

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

EGZAMIN POTWIERDZAJĄCY KWALIFIKACJE W ZAWODZIE Rok 2017 CZĘŚĆ PRAKTYCZNA

XPRI Team. Szybka i elastyczna współpraca podczas montażu nieliniowego dla grup roboczych. Omówienie. XPRI Team 1

Transformacja Fouriera i biblioteka CUFFT 3.0

CENTRALNA KOMISJA EGZAMINACYJNA

Sieci obliczeniowe poprawny dobór i modelowanie

CUDA. cudniejsze przyk ady

Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie Równoległe wykład 12. OpenGL + algorytm n ciał. Maciej Matyka Instytut Fizyki Teoretycznej

Komputer DELL Optiplex 3020 MT (Midi Tower) Intel Core i QUAD 4 x 3,4 GHz / 8 GB / 120 GB SSD / DVD-RW / Windows 10 Professional

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

Wprowadzenie do programowania

Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT

Scenariusz lekcji. Scenariusz lekcji 1 TEMAT LEKCJI: 2 CELE LEKCJI: 2.1 Wiadomości: 2.2 Umiejętności: 3 METODY NAUCZANIA: 4 ŚRODKI DYDAKTYCZNE:

Link do produktu: Specyfikacja:

Praca dyplomowa magisterska

Komputer DELL Optiplex 7010 w obudowie DT (Desktop Tower) Intel Core i x 3,3 GHz / 4 GB / 500 GB / DVD / Windows 7 Professional

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

EGZAMIN POTWIERDZAJĄCY KWALIFIKACJE W ZAWODZIE Rok 2017 CZĘŚĆ PRAKTYCZNA

Programowanie w języku C++ Grażyna Koba

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka

Warsztaty szkoleniowe. Technologia SafetyLon w systemach związanych z bezpieczeństwem funkcjonalnym Narzędzia SafetyLon Moduł 4.5.

Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych

Komputer stacjonarny DELL Optiplex 9010 MT (Midi Tower) Intel Core i QUAD 4 x 3,4 GHz / 8 GB / 120 GB SSD / DVD-RW / Windows 10 Professional

Architektura komputerów

Welcome to the waitless world. Inteligentna infrastruktura systemów Power S812LC i S822LC

Analiza i przetwarzanie obrazo w

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

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Przewodnik. NVIDIA SLI Jak samodzielnie zbudować system NVIDIA SLI

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Nazwa kwalifikacji: Montaż i eksploatacja komputerów osobistych oraz urządzeń peryferyjnych Oznaczenie kwalifikacji: E.12 Numer zadania: 06

Wymagania edukacyjne z informatyki w klasie VIII

Struktury systemów operacyjnych

Podstawy OpenCL część 2

Komputer stacjonarny DELL Optiplex 7010 MT (Midi Tower) Intel Core i QUAD 4 x 3,4 GHz / 8 GB / HDD 250 GB / DVD-RW / Windows 10 Professional

System komputerowy. System komputerowy

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

Specyfikacja Wymagań Oprogramowania

Programowanie i techniki algorytmiczne

Tekla Structures 20 Instalacja

Komputer stacjonarny DELL Optiplex 7010 MT (Midi Tower) Intel Core i QUAD 4 x 3,4 GHz / 8 GB / 120 GB SSD / DVD-RW / Windows 10 Professional

Paweł Skrobanek. C-3, pok pawel.skrobanek.staff.iiar.pwr.wroc.pl

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Programowanie współbieżne Wykład 2. Iwona Kochańska

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

Działanie systemu operacyjnego

Implementacja filtru Canny ego

Działanie systemu operacyjnego

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Transkrypt:

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu inż. Daniel Solarz Wydział Fizyki i Informatyki Stosowanej AGH 1. Cel projektu. Celem projektu było napisanie wtyczki dla programu ImageJ wykonującą filtr medianowy z wykorzystaniem pakietu CUDA firmy Nvidia. Miało to na celu przyspieszenie wykonywania operacji, które dla dużych zestawów danych są czasochłonne i zabierają znaczne zasoby. Dodatkowo dla porównania napisano wtyczkę dla filtru medianowego działającą bez pakietu CUDA. 2. Opis projektu Projekt został wykonany przy użyciu bibliotek JCuda i środowiska programistycznego Eclipse. Do działania wymaga zainstalowanego pakietu CUDA (najlepiej w wersji 7.0) oraz kompilatora języka C/C++ (dla systemu Windows jest to kompilator VC - cl.exe - zawarty w środowisku Visual Studio). Algorytm działania zastosowanego filtru medianowego jest następujący: przechodzimy po całym obrazie; jeżeli trafimy na brzeg to pomijamy obliczenia; jeżeli nie to pobieramy otoczenie badanego piksela o rozmiarze 3 na 3 piksele. Następnie piksele z otoczenia są sortowane algorytmem sortowania bąbelkowego, a wartość środkowa - mediana - jest umieszczana jako wartość badanego piksela. W algorytmie wykorzystującym platformę CUDA tworzony jest blok wątków, a jądro uruchamia grid składający się z pewnej ilości bloków. Adres poszczególnych bloków jest dwuwymiarowy. Jądro CUDY jest wykonywane przez wektor wątków, które wykonują ten sam kod - w filtrze medianowym każdy wątek oblicza wartość dla jednego piksela. Każdy wątek jest wykonywany niezależnie w dowolnej kolejności wygodnej dla karty graficznej. Po wykonaniu obliczeń wyniki zwracane są do tablicy wynikowych pikseli. Mechanizm JCuda pozwala na odczytanie pliku zawierającego kernel CUDY, skompilowanie go oraz wykonanie funkcji, która alokuje pamięć na karcie graficznej, ustala rozmiar bloków i gridu, wywołuje kernel z zadanymi parametrami a na końcu kopiuje wyniki do pamięci komputera i zwalnia pamięć. Przy uruchamianiu wtyczki ważne jest, że przy jej każdym nowym uruchomieniu ImageJ kernel zostaje skompilowany, co powoduje niską wydajność obliczeń - do czasu wykonania wlicza się wtedy również czas kompilacji. Dla wiarygodnych wyników należy uruchomić wtyczkę testowo dla małego obrazka, by skompilować kernel, a później pracować korzystając z już skompilowanego jądra. Po ponownym

uruchomieniu ImageJ czynność należy powtórzyć - jądra nie są nigdzie przechowywane i trzeba je za każdym uruchomieniem budować od nowa. 3. Testowanie Do przetestowania działania obydwu wtyczek oraz wbudowanego filtra zastosowanego w programie ImageJ wybrałem pięć obrazów: Obraz 1: Zaszumione zdjęcie komórek - 283x280 pikseli. Obraz 2: Silnie zaszumione zdjęcie tygrysa - 384x256 pikseli.

Obraz 3: Zaszumione zdjęcie twarzy - 256x256 pikseli. Obraz 4: Zaszumione zdjęcie w rozdzielczości 4K - 3840x2160 pikseli. Obraz 5: Zaszumione zdjęcie w rozdzielczości 8K - 7680x4320 pikseli.

Napisane wtyczki zostały przetestowane na następujących konfiguracjach sprzętowych: Tabela 1: Konfiguracja pierwsza. Procesor Intel Core i5-2410m (4 x 2.30 GHz) Karta graficzna Nvidia GeForce GT 525M (1024 MB DDR3) Pamięć 6 GB DDR3-1333 SDRAM Wersja sterowników graficznych 347.62 Wersja pakietu CUDA 7.0.27 Uzyskane wyniki dla pierwszej konfiguracji prezentują się następująco: Tabela 2: Wyniki dla pierwszej konfiguracji sprzętowej. Obraz Rodzaj filtra Czas wykonania [s] Szybkość przetwarzania [miliony pikseli/s] wbudowany 0,065 1,2 zwykły (pierw. ) 0,063 1,3 komórki zwykły 0,047 1,7 CUDA (pierw.) 0,281 0,281993 CUDA 0,015 5,3 wbudowany 0,039 2,5 zwykły (pierw. ) 0,047 2,1 tygrys zwykły 0,032 3,1 CUDA (pierw.) 0,203 0,484256 CUDA 0,016 6,1 wbudowany 0,037 1,8 zwykły (pierw. ) 0,047 1,4 twarz zwykły 0,031 2,1 CUDA (pierw.) 0,262 0,250137 CUDA 0,016 4,1 wbudowany 1,002 8,3 zwykły (pierw. ) 2,215 3,7 4K zwykły 1,810 4,6 CUDA (pierw.) 0,803 10,3 CUDA 0,343 24,2 wbudowany 2,942 11,3 zwykły (pierw. ) 8,502 3,9 8K zwykły 7,956 4,2 CUDA (pierw.) 1,455 22,8 CUDA 1,045 31,7 Wzrost wydajności dla algorytmu opartego na technologii CUDA jest widoczny. W najgorszym wypadku jest on dwa razy szybszy niż algorytm tradycyjny. Lepsze wyniki są obserwowane dla dużego obrazu 4K - tam przyspieszenie jest ponad pięciokrotnie większe. Dla obrazu 8K przyspieszenie jest

ponad 7,5 krotnie wyższe. Można wywnioskować, że im większy obraz, tym lepsze wyniki są uzyskiwane. Zwraca uwagę fakt, że filtr wbudowany w program działa gorzej na małych obrazkach, a lepiej na dużych w porównaniu z klasycznym filtrem medianowym z sortowaniem bąbelkowym. Przy pierwszym uruchomieniu obydwu wtyczek widoczne jest ich spowolnione działanie. W wypadku filtru klasycznego ma to zapewne związek z systemem ładowania rozszerzeń programu ImageJ i nie jest ono bardzo uciążliwe - różnice są niewielkie i niezauważalne dla zwykłego użytkownika. Natomiast filtr oparty na CUDZIE jest znacznie spowolniony - ma to związek z koniecznością kompilacji kernela, co jest czasochłonne. Różnice są znaczne dla małych obrazków, natomiast zmniejszają się wraz z przetwarzaniem coraz większych zdjęć. Tabela 3: Konfiguracja druga. Procesor AMD FX-6100 (6 x 3.3 GHz) Karta graficzna Nvidia GeForce GTX 660 (2048 MB GDDR 5) Pamięć 16 GB DDR3-1600 SDRAM Wersja sterowników graficznych 353.06 Wersja pakietu CUDA 7.0.27 Uzyskane wyniki dla drugiej konfiguracji prezentują się następująco:

Tabela 4: Wyniki dla drugiej konfiguracji sprzętowej. Obraz Rodzaj filtra Czas wykonania [s] Szybkość przetwarzania [miliony pikseli/s] wbudowany 0,065 1,2 zwykły (pierw. ) 0,037 2,1 komórki zwykły 0,024 3,3 CUDA (pierw.) 0,170 0,466178 CUDA 0,003 26,4 wbudowany 0,028 3,5 zwykły (pierw. ) 0,041 2,4 tygrys zwykły 0,013 7,6 CUDA (pierw.) 0,104 0,945231 CUDA 0,003 32,8 wbudowany 0,028 2,3 zwykły (pierw. ) 0,038 1,7 twarz zwykły 0,020 3,3 CUDA (pierw.) 0,071 0,923042 CUDA 0,003 21,8 wbudowany 0,623 13,3 zwykły (pierw. ) 1,583 5,2 4K zwykły 1,543 5,4 CUDA (pierw.) 0,495 16,8 CUDA 0,261 31,8 wbudowany 2,188 15,2 zwykły (pierw. ) 7,700 4,3 8K zwykły 7,450 4,5 CUDA (pierw.) 0,967 34,3 CUDA 0,366 90,6 Wyraźnie widać, że przyspieszenie względem tradycyjnego algorytmu jest znaczne. Czas wykonania dla CUDY w najgorszym wypadku był ponad czterokrotnie szybszy od tradycyjnego algorytmu, co jest dwukrotnie lepszym wynikiem niż dla poprzedniej konfiguracji. Podobnie jak poprzednio, lepsze rezultaty dało się zaobserwować dla dużych obrazów. Dla obrazu w rozdzielczości 8K algorytm wykorzystujący CUDA wykonywał się ponad dwadzieścia razy szybciej zarówno czasowo, jak i pod względem liczby przetwarzanych pikseli na sekundę. Podobnie jak poprzednio, filtr wbudowany działał wolniej od swojego odpowiednika dla małych obrazów, ale szybciej dla dużych. Również podobnie jak poprzednio dało się zaobserwować spowolnienie podczas pierwszego uruchamiania wtyczek. Dla filtru opartego na CUDZIE analogicznie jak w poprzedniej konfiguracji różnica malała wraz ze wzrostem wymiarów przetwarzanego obrazu.

Dla dużych obrazów i jednego z mniejszych dla danych z drugiej konfiguracji wykonano wykres. Wykres 1: Czasy wykonania dla wybranych obrazów dla drugiej konfiguracji sprzętowej. 8 7 6 5 4 3 2 1 0 twarz 4K 8K CUDA wbudowany zwykły Na wykresie wyraźnie widać, jak znaczny jest przyrost wydajności przy wykorzystaniu pakietu CUDA. O ile dla małych obrazów różnica jest dla zwykłego użytkownika niemal niezauważalna, o tyle dla dużych obrazów wydajność jest znacznie lepsza. 4. Podsumowanie Wykonane testy pokazały, że wykonywanie obliczeń na karcie graficznej jest znacznie szybsze od tradycyjnych obliczeń wykonywanych na procesorze. Różnica była tym większa, im większy obraz był przetwarzany. Biblioteki JCuda pozwoliły na połączenie wydajnych obliczeń na karcie graficznej z popularnym obiektowym językiem Java. Daje to duże możliwości dla programu ImageJ, którego filtry mogą osiągnąć bardzo wysoką wydajność.

5. Bibliografia W moim projekcie korzystałem z następujących materiałów: 2D median filtering in CUDA: how to efficiently copy global memory to shared memory http://stackoverflow.com/questions/16876480/2d-median-filtering-in-cuda-how-toefficiently-copy-global-memory-to-shared-mem/25476864#25476864 2D CUDA median filter optimization http://stackoverflow.com/questions/19634328/2d-cuda-median-filter-optimization How to create an ImageJ Plugin using JCuda http://www.jcuda.org/imagej/imagejhowto.html Cuda Image average filter http://stackoverflow.com/questions/14334251/cuda-image-average-filter Obliczenia na GPU w technologii CUDA http://aragorn.pb.bialystok.pl/~wkwedlo/pc14.pdf Programowanie GPU: Kurs CUDA - Wprowadzenie http://programowanie.opole.pl/archives/1566