Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny**



Podobne dokumenty
Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

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

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

ROCZNIKI 2010 GEOMATYKI. Metodyka i technologia budowy geoserwera tematycznego jako komponentu INSPIRE. Tom VIII Zeszyt 3(39) Warszawa

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

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

i3: internet - infrastruktury - innowacje

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

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

Tesla. Architektura Fermi

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

Programowanie procesorów graficznych GPGPU

Moc płynąca z kart graficznych

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

Larrabee GPGPU. Zastosowanie, wydajność i porównanie z innymi układami

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

Zastosowanie technologii nvidia CUDA do zrównoleglenia algorytmu genetycznego dla problemu komiwojażera

Architektura mikroprocesorów TEO 2009/2010

Architektura von Neumanna

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

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

16. Taksonomia Flynn'a.

Grafika komputerowa i wizualizacja

SYSTEM INFORMACJI GEOGRAFICZNEJ JAKO NIEZBÊDNY ELEMENT POWSZECHNEJ TAKSACJI NIERUCHOMOŒCI**

Podstawy Informatyki Systemy sterowane przepływem argumentów

Mikroprocesory rodziny INTEL 80x86

Analiza obrazów RTG w celu zwiêkszenia skutecznoœci predykcji dysplazji oskrzelowo-p³ucnej u noworodków

Budowa Mikrokomputera

Systemy operacyjne i sieci komputerowe Szymon Wilk Superkomputery 1

PROCESOR Z ODBLOKOWANYM MNOŻNIKIEM!!! PROCESOR INTEL CORE I7 4790K LGA1150 BOX

Algorytmy dla maszyny PRAM

PRZEWODNIK PO PRZEDMIOCIE

Rozproszona pamiêæ dzielona - 1

Klasyfikacja systemów komputerowych. Architektura von Neumanna Architektura harwardzka Zmodyfikowana architektura harwardzka. dr inż.

Budowa komputera Komputer computer computare

Przegląd architektury PlayStation 3

Architektura Systemów Komputerowych. Rozwój architektury komputerów klasy PC

Przetwarzanie Równoległe i Rozproszone

Nowoczesne technologie przetwarzania informacji

dr inż. Jarosław Forenc

INŻYNIERIA OPROGRAMOWANIA

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

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

Procesory. Schemat budowy procesora

Wykorzystanie architektury Intel MIC w obliczeniach typu stencil

Skanowanie trójwymiarowej przestrzeni pomieszczeñ

INŻYNIERIA OPROGRAMOWANIA

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

Programowanie współbieżne Wprowadzenie do programowania GPU. Rafał Skinderowicz

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Automatyka i Robotyka studia stacjonarne drugiego stopnia

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

Julia 4D - raytracing

która metoda jest najlepsza

Architektura Komputerów

Wyznaczanie charakterystyki widmowej kolorów z wykorzystaniem zapisu liczb o dowolnej precyzji

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

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

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

Projektowanie. Projektowanie mikroprocesorów

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

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

Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów współbieżnych i obsługi współbieżności przez system.

Projektowanie logistycznych gniazd przedmiotowych

3.Przeglądarchitektur

Klasyfikacja systemów komputerowych. Architektura von Neumanna. dr inż. Jarosław Forenc

Architektura komputerów

Programowanie kart graficznych

NOWE TRENDY ROZWOJU MIKROPROCESORÓW

3.Przeglądarchitektur

Metody optymalizacji soft-procesorów NIOS

PRZEWODNIK PO PRZEDMIOCIE

Programowanie aplikacji równoległych i rozproszonych

Budowa i zasada działania komputera. dr Artur Bartoszewski

Nowinki technologiczne procesorów

Konwerter RS 232 / Centronics typ KSR

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

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx

Raport Hurtownie Danych

Nowinkach technologicznych procesorów

Praca dyplomowa magisterska

Technika mikroprocesorowa

dr inż. Jarosław Forenc

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

Opis funkcjonalny i architektura. Modu³ sterownika mikroprocesorowego KM535

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

Obliczenia Wysokiej Wydajności

Nowinki technologiczne procesorów

Kabel USB 2.0 do poù¹czenia komputerów PCLinq2 (PL-2501) podrêcznik u ytkownika

Introduction to Computer Science

Algorytmy i Struktury Danych

Bogdan Nogalski*, Anna Wójcik-Karpacz** Sposoby motywowania pracowników ma³ych i œrednich przedsiêbiorstw

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

MIÊDZYNARODOWY STANDARD REWIZJI FINANSOWEJ 520 PROCEDURY ANALITYCZNE SPIS TREŒCI

Wykład I. Podstawowe pojęcia. Studia Podyplomowe INFORMATYKA Architektura komputerów

Język opisu sprzętu VHDL

Plan wykładu. Akcelerator 3D Potok graficzny

Architektura komputerów

Procesory sygnałowe Digital Signal Processors. Informatyka II stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)

Wykład 2. Mikrokontrolery z rdzeniami ARM

Transkrypt:

AUTOMATYKA 2011 Tom 15 Zeszyt 3 Magdalena Szymczyk*, Piotr Szymczyk* Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny** 1. Wprowadzenie Aplikacje stosowane do przetwarzania obrazu i sygna³u wideo oraz grafiki staj¹ siê du ym i coraz wa niejszym obszarem zastosowañ wspó³czesnych komputerów. Wspó³czesne mikroprocesory ogólnego zastosowania (CPU Central Processing Unit) nie spe³niaj¹ jednak wysokich wymagañ wydajnoœciowych zwi¹zanych z tego typu aplikacjami. W odró nieniu od CPU specjalizowane procesory dostarczaj¹ jednak e odpowiedni¹ elastycznoœæ i programowalnoœæ niezbêdn¹ do zaimplementowania odpowiednich architektur oraz modeli programistycznych spe³niaj¹cych ich wymagania. Jednym z mo liwych rozwi¹zañ jest zastosowanie nowoczesnych kart graficznych GPU (Graphics Processing Unit). Celem artyku³u jest ogólne przedstawienie architektury GPU, zapoznanie ze sposobem implementacji aplikacji na tego typu procesorach oraz analiza mo liwoœci wykorzystania ich do tworzenia efektywnych aplikacji zwi¹zanych z przetwarzaniem obrazów. 2. CPU kontra GPU Czêstotliwoœæ pracy CPU jest obecnie ograniczana poprzez w³asnoœci fizyczne materia³ów, z których zosta³ wykonany, a tak e przez wysoki stopieñ zu ycia energii. W g³ównej mierze coraz to lepsze wydajnoœci tego typu procesorów uzyskuje siê dziêki stosowaniu coraz to wiêkszej liczby rdzeni, przy czym nale y pamiêtaæ, e s¹ to procesory ukierunkowane na wykonywanie aplikacji najczêœciej stosowanych przez zwyk³ych u ytkowników (typu edytory tekstu, przeszukiwarki internetowe itp.). Zastosowanie wielu rdzeni w CPU daje mo liwoœæ wykonywania procesów równolegle na podstawie modelu przetwarzania równoleg³ego typu MIMD (Multiple Instructions/Multiple Data) wed³ug taksonomii Flynna. * AGH Akademia Górniczo-Hutnicza, Wydzia³ Elektrotechniki, Automatyki, Informatyki i Elektroniki, Katedra Automatyki, al. A. Mickiewicza 30, 30-059 Kraków ** Projekt z Ministerstwa Nauki i Szkolnictwa Wy szego nr 0128/R/t00/2010/12 271

272 Magdalena Szymczyk, Piotr Szymczyk Zatem ka dy z rdzeni pracuje niezale nie od pozosta³ych, wykonuj¹c ró ne instrukcje dla ró nych procesów. Cech¹ charakterystyczn¹ pamiêci w procesorach ogólnego przeznaczenia jest swobodny dostêp do niej. CPU jest tak zaprojektowane, e wykonuje na swych rdzeniach pojedynczy w¹tek z³o ony z pojedynczych instrukcji maksymalnie szybko, natomiast GPU jest tak opracowane, aby wykonywaæ szybko wiele równoleg³ych w¹tków. Oczywiœcie projektanci CPU staraj¹ siê spe³niæ tak e wymaganie wykonywania wielu instrukcji równolegle, maksymalizuj¹c efektywnoœæ przy u yciu superskalarnego wykonywania instrukcji, a tak e korzystaj¹c z wykonywania instrukcji typu out-of-order. Jednak e wykonywanie równoleg³e w¹tków instrukcji na CPU ma pewne podstawowe ograniczenia i zwiêkszanie liczby elementów wykonawczych nie daje proporcjonalnego wzrostu wydajnoœci procesora. Uk³ady NVIDIA czy AMD (g³ówni producenci kart graficznych) zbudowane s¹ przy u yciu architektury multiprocesorowej o 8 10 rdzeniach i setkach ALU, tysi¹cach rejestrów i pamiêciach wspó³dzielonych [12]. Ka da karta graficzna ma bardzo szybk¹ pamiêæ globaln¹, która jest dostêpna dla wszystkich multiprocesorów, pamiêæ lokaln¹ dla ka dego multiprocesora oraz specjalne pamiêci dla sta³ych. GPU jest ukierunkowana na wykonywanie instrukcji równolegle. Na pocz¹tek otrzymuje ona zbiory wielok¹tów, które nastêpnie poddawane s¹ wielu transformacjom i niezbêdnym operacjom w celu uzyskania z kolei zbioru pikseli. Operacje na wielok¹tach i pikselach wykonywane s¹ równolegle i niezale nie. Z powodu równoleg³ej organizacji architektury GPU dane do uk³adów wykonawczych s¹ dostarczane z tak¹ sam¹ ³atwoœci¹ jak dla pojedynczego w¹tku dla CPU. Szczególnie widoczne s¹ ró nice w dostêpie do pamiêci pomiêdzy tymi uk³adami. Wynika to z charakteru danych, na których zazwyczaj pracuje GPU. Teksele tekstury nie s¹ potrzebne pojedynczo, stanowi¹ one pewn¹ zwart¹ ca³oœæ, zazwyczaj powierzchniê, zatem na pewno zostan¹ w najbli szej przysz³oœci pobrane teksele bêd¹ce w s¹siedztwie pierwszego. Ta sama zasada dotyczy pikseli przy zapisie do pamiêci, gdy do bufora ramki zostanie wpisany jeden, to na pewno po pewnej liczbie cykli do niej zostan¹ wpisane piksele s¹siednie. GPU w odró nieniu od CPU nie potrzebuj¹ du ych pamiêci typu cache. Wiele procesorów typu CPU nie ma wbudowanych sterowników pamiêci, a GPU maj¹ wiele takich uk³adów. Karty graficzne u ywaj¹ du o szybszych pamiêci (charakteryzuj¹cych siê du ¹ przepustowoœci¹) w celu sprawnego dostarczenia ogromnych strumieni danych, co jest niezwykle istotne z punktu widzenia przetwarzania równoleg³ego. Procesory ogólnego przeznaczenia w du ej mierze wykorzystuj¹ swój obszar matrycy z tranzystorami do realizacji buforów instrukcji, sprzêtowego przewidywania rozga³êzieñ czy te ogromnych rozmiarów pamiêci cache. Takie rozwi¹zania s¹ potrzebne do przyspieszenia wykonywania kilku strumieni instrukcji. W przypadku GPU jest inaczej, tranzystory s¹ wykorzystywane do budowy tablic uk³adów wykonawczych, ekspedytorów instrukcji, ma³ych pamiêci dzielonych i sterowników pamiêci dla wielu kana³ów. Te rozwi¹zania nie powoduj¹ przyspieszenia wykonania poszczególnych strumieni instrukcji, daj¹ natomiast mo liwoœæ przetwarzania setek tysiêcy w¹tków równolegle przy wymaganiu wysokiej przepustowoœci pamiêci. Szczególnym aspektem odró niaj¹cym CPU od GPU jest sposób wykonywania operacji wielow¹tkowych.

Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny 273 Specyfika pracy GPU wynika w g³ównej mierze z budowy pamiêci typu cache. Ró nice projektowe pomiêdzy budow¹ CPU a GPU pokazano na rysunku 1. W CPU zadaniem tej pamiêci jest ukrycie d³ugich czasów dostêpów do danych, w przypadku karty graficznej cache oraz pamiêæ wspó³dzielona u ywana jest do zwiêkszenia przepustowoœci pamiêci. Gdy GPU czeka na dane dla konkretnego w¹tku, wykonuje on wówczas inny w¹tek bez opóÿnieñ. Jest to mo liwe, gdy w uk³adach tych w odró nieniu od CPU, koszt prze³¹czenia siê na inny w¹tek to mniej ni jeden cykl, a w procesorach ogólnego przeznaczenia setki cykli zegarowych. Ogólnie rzecz ujmuj¹c, nowoczesne CPU pracuj¹, opieraj¹c siê na architekturze równoleg³ej typu SIMD (Single Instruction Multiple Data) na jednostkach wektorowych wykorzystywanych do obs³ugi instrukcji typu SSE2 i SSE3, natomiast GPU na architekturze SIMT (Single Instruction Multiple Threads) do przetwarzania skalarnych w¹tków. Karty graficznie s¹ wykorzystywane w obliczeniach równoleg³ych, które s¹ przeprowadzane na ogromnych zbiorach danych i na tych danych wykonywane s¹ te same matematyczne operacje. Najlepsze wyniki s¹ otrzymywane przy wysokiej wartoœci ilorazu liczby operacji arytmetycznych do liczby odwo³añ do pamiêci. Istotnym aspektem tego typu aplikacji jest tak e ma³a liczba instrukcji rozga³êziaj¹cych. Cechy aplikacji na GPU powoduj¹, e zanika potrzeba stosowania rozbudowanych pamiêci typu cache. Rys. 1. Ró nice projektowe pomiêdzy budow¹ CPU a GPU [12]

274 Magdalena Szymczyk, Piotr Szymczyk 3. Wykorzystanie GPU do obliczeñ równoleg³ych Mikroprocesory oparte na jednej jednostce centralnej, których przyk³adami mog¹ byæ Operon firmy AMD czy te Pentium Intela, charakteryzuj¹ siê wysokim przyrostem wydajnoœci wraz ze znacznym zmniejszeniem kosztów produkcji w ostatnich dwóch dekadach. Jednak e od 2003 roku mo na zauwa yæ wyraÿny spadek wydajnoœci, ze wzglêdu na du e zapotrzebowanie na energiê zasilania oraz du e straty spowodowane wydzielaniem energii cieplnej. Ma to wp³yw na czêstotliwoœæ pracy procesora, jej przyrost jest ograniczany tymi zjawiskami. W celu ratowania sytuacji producenci procesorów przerzucili siê na produkcjê uk³adów zawieraj¹cych wiele procesorów, tzw. rdzeni, w celu zapewnienia wzrostu mocy przetwarzania aplikacji. Ta operacja mia³a ogromny wp³yw na œrodowisko projektantów oprogramowania. Dotychczas aplikacje w wiêkszoœci pisane by³y na architekturê von Neumanna, w której programy realizowane s¹ krok po kroku sekwencyjnie. Je eli taki sekwencyjny program zostanie uruchomiony na jednym z rdzeni, to jego czas wykonania nie skróci siê ju znacznie, jeœli nie zostan¹ wprowadzone pewne innowacje technologiczne. Sposobem na zwiêkszenie wydajnoœci jest zastosowanie programowania równoleg³ego w nowych generacjach mikroprocesorów. Programowanie równoleg³e nie jest pojêciem nowym. By³o i jest ono stosowane przez dziesiêciolecia w oprogramowaniu komputerów drogich i o du ej skali. Jednak e tylko pewna czêœæ programistów potrafi pisaæ tego typu aplikacje. Z pojawieniem siê procesorów nowego typu programiœci musz¹ podj¹æ siê nowego wyzwania opracowywania nowych równoleg³ych aplikacji na nowe procesory. Od 2003 rozwój mikroprocesorów podzieli³ siê na dwie linie, jedn¹ z nich jest linia procesorów wielordzeniowych (multicore), pocz¹wszy od dwurdzeniowych, aktualnie na czterech skoñczywszy. Drug¹ jest linia many-core, która szczególnie ukierunkowana jest na przepustowoœæ wykonania aplikacji równoleg³ych. Procesory te maj¹ du ¹ liczbê rdzeni, przy czym ich liczba podwaja siê ka dego roku. Przyk³adem mo e byæ karta graficzna Ge- Force GTX 280 NVIDIA z 240 rdzeniami. GPU w porównaniu z CPU wykazuj¹ od 2003 sta³y, du o wiêkszy wzrost wydajnoœci w wykonywaniu operacji zmiennoprzecinkowych, osi¹gaj¹c w 2009 wartoœæ 10 do 1, na rysunku 2 mo na zauwa yæ tê tendencjê. G³ównym zadaniem kart graficznych jest ich wykorzystanie do celów renderyzacji grafiki 3D, ale ju bardzo wczeœnie próbowano wykorzystaæ je do innych typów aplikacji. Pocz¹tki by³y trudne i wymaga³y od programistów doskona³ej znajomoœci architektury GPU, znajomoœci problematyki grafiki 3D, co w znacznym stopniu ogranicza³o wykorzystanie tych kart. Wraz z rozwojem i udoskonalaniem potoku renderyzacji realizowanym na kartach graficznych mo liwe stawa³o siê tworzenie coraz to bardziej zaawansowanych aplikacji z dziedziny przetwarzania obrazów czy te systemów wizyjnych jak wykrywanie krawêdzi, okreœlanie podobieñstwa obrazów, detekcja cech obrazu, filtrowanie, a tak e tworzenie obrazów panoramicznych. Pierwszym doœæ popularnym kompilatorem do celów GPGPU by³ BrookGPU [8] przystosowany do tworzenia aplikacji niegraficznych na GPU. Z grupy projektantów tego

Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny 275 oprogramowania wydzieli³y siê osoby, które przy³¹czy³y siê do NVIDIA w celu tworzenia zintegrowanej architektury daj¹cej mo liwoœæ programowania równoleg³ego na GPU osobom nieznaj¹cym graficznego API. Tak pojawi³a siê technologia CUDA (Computed Unified Device Architecture). Rys. 2. Porównanie wydajnoœci przetwarzania operacji zmiennoprzecinkowych przez procesory CPU i GPU [12] 4. Ogólne spojrzenie na architekturê NVIDIA CUDA NVIDIA projektuj¹c now¹ generacjê kart graficznych opartych na DirectX 10, zapocz¹tkowa³a mo liwoœæ wykorzystania GPU przez programistów w podobny sposób jak standardowe procesory ogólnego przeznaczenia. U ytkownicy mog¹ od tej pory deklarowaæ równoleg³oœæ danych w swoich aplikacjach. Procesory NVIDIA mo na traktowaæ jako wysoko wydajne procesory przetwarzaj¹ce dane zmiennoprzecinkowe jak i ca³kowite w równoleg³y sposób dla wspomagania logicznego potoku graficznego. Linia Tesla GPU, rozpoczynaj¹ca siê od GeForce 8800GTX poprzez póÿniejsze G92 i GT200 zosta³a wzbogacona w porównaniu ze swoimi poprzednikami o procesory cieniuj¹ce (shader), które sta³y siê w pe³ni programowalne z du ¹ pamiêci¹ dla instrukcji, cachem dla nich oraz logicznym uk³adem przetwarzania rozga³êzieñ. Dodatkowo wzbogacono zbiór instrukcji o instrukcje dostêpu swobodnego do pamiêci (zapis i odczyt), aby upodobniæ styl programowania do jêzyka C. Aplikacje niegraficzne dosta³y mo liwoœæ wykorzystania bardziej ogólnego modelu programowania opartego na w¹tkach, barierach synchronizacji i operacjach atomowych w celu wykonywania i zarz¹dzania wysoko równoleg³ymi programami.

276 Magdalena Szymczyk, Piotr Szymczyk Kompilator CUDA C/C++, biblioteki oraz oprogramowanie do uruchamiania zosta³ zaprojektowany w celu prostego dostêpu przez programistów do potencja³u oferowanego przez architekturê Tesla. Programy uruchamiane na nowoczesnych GPU, zarówno te graficzne jak i aplikacje CUDA, korzystaj¹ z mo liwoœci wykorzystania masowej, drobnoziarnistej równoleg³oœci opartej na danych, przy czym jest to oprogramowanie transparentne i skalowalne. Na rysunku 3 pokazano nowoczesn¹ kartê graficzn¹ GPU realizuj¹c¹ architekturê CUDA. Rys. 3. Architektura nowoczesnej karty graficznej GPU realizuj¹cej architekturê CUDA [12] Model programowania CUDA zbudowany jest z hosta, który zazwyczaj jest jednostk¹ CPU (wykonuj¹c¹ program szeregowo lub równolegle, ale w stopniu doœæ ograniczonym) i wielu urz¹dzeñ (devices) zbudowanych z masowo-równoleg³ych procesorów wyposa onych w du ¹ liczbê arytmetycznych jednostek wykonawczych. Kod programu (a w³aœciwie zbiór funkcji opartych na równoleg³oœci danych) uruchamiany jest na GPU i oznaczony poprzez s³owo kluczowe kernel. Funkcje kernel uruchamiaj¹ ogromn¹ liczbê w¹tków w celu wykorzystania równoleg³oœci danych. Wa n¹ informacj¹ jest to, e w¹tki te ró ni¹ siê od w¹tków uruchamianych na CPU, s¹ one l ejszego typu (prze³adowanie takiego w¹tku trwa kilka cykli pracy procesora w odró nieniu od tysiêcy cykli dla procesora CPU). Wykonanie typowego programu CUDA przedstawione jest na rysunku 4. Wykonanie rozpoczyna siê na hoœcie (CPU), a nastêpnie wywo³ywane s¹ funkcje kernela. Wszystkie w¹tki uruchamiane

Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny 277 przez kernel s¹ okreœlane wspólna nazw¹ grid. Gdy w¹tki danego kernela zakoñcz¹ swoje dzia³anie, grid jest zamykany i sterowanie programem powraca na host, gdzie ewentualnie wywo³ywany jest nastêpny kernel. Rys. 4. Wykonanie programu na GPU [6] 5. Zalety i ograniczenia technologii CUDA do wykonywania aplikacji typu GPGPU CUDA ma wiele zalet w porównaniu z tradycyjnym oprogramowaniem ogólnego zastosowania na GPU przy u yciu graficznego API: tzw. scattered reads jedna operacja czytania danych powoduje zapis do wielu miejsc w pamiêci; pamiêæ wspó³dzielona CUDA udostêpnia szybk¹ pamiêæ wspó³dzielon¹ pomiêdzy w¹tkami (do 48 kb na multiprocesor) i mo e ona s³u yæ jako zarz¹dzany przez u ytkownika cache o du ej przepustowoœci; szybsze operacje transferu danych z i do GPU; pe³ne wspomaganie operacji ca³kowitoliczbowych oraz bitowych.

278 Magdalena Szymczyk, Piotr Szymczyk G³ówne ograniczenia CUDA: CUDA pozbawiona jest mo liwoœci wywo³ywania funkcji rekurencyjnych oraz korzystania ze wskaÿników, renderowanie tekstury nie jest mo liwe, podwójna precyzja dostêpna jest dla CUDA 1.3 i powy ej, z pewnymi zmianami w stosunku do standardu IEEE 754, transfer informacji pomiêdzy CPU a GPU mo e byæ w¹skim gard³em aplikacji, w¹tki powinny byæ wykonywane w grupach co najmniej 32-elementowych dla lepszej efektywnoœci, model SIMD wykonania programu doœæ ogranicza zadania z wewnêtrzn¹ dywergencj¹, w odró nieniu do OpenCL, CUDA dostêpna jest tylko dla NVIDIA (GeForce8, Quadro i Tesla). 6. Wykorzystanie CUDA do systemów wizyjnych Systemy wizyjne w ostatnim dziesiêcioleciu sta³y siê integralnym elementem aplikacji stosowanych w medycynie, transporcie i ochronie. Algorytmy z zakresu systemów wizyjnych zawieraj¹ w sobie algorytmy z zakresu wielu dyscyplin naukowych (statystyka, optyka, sztuczna inteligencja, przetwarzanie obiektów, rozpoznawanie obrazów, teoria grafów). Algorytmy tego typu charakteryzuj¹ siê ogromn¹ intensywnoœci¹ obliczeñ i w zasadzie uruchamianie ich na tradycyjnych CPU spotka³o siê ju z barier¹ ich mo liwoœci. Wspó³czesne systemy wizyjne nak³adaj¹ na tego typu aplikacje wymaganie wykonania w czasie rzeczywistym, a to mo e zostaæ zrealizowane przy u yciu procesorów równoleg³ych. Aktualnie tak¹ mo liwoœæ daj¹ tanie i ³atwo dostêpne karty graficzne GPU przy wykorzystaniu miêdzy innymi jêzyka programowania CUDA. Wykonywanie takich programów na procesorach GPU przy u yciu wysokowydajnych algorytmów równoleg³ych daje efekty nieosi¹galne dotychczas. Szczególnie istotnym aspektem w opracowywaniu systemów wizyjnych uruchamianych w czasie rzeczywistym jest teraz opracowanie nowych algorytmów równoleg³ych doskonale wykorzystuj¹cych potencja³ nowoczesnych GPU (architektura Tesla). Ta dyscyplina jest obecnie obszarem wzmo onej pracy naukowców w celu opracowania wysoko wydajnego opartego o GPU oprogramowania dla systemów wizyjnych. Ogólnie rzecz bior¹c, algorytmy systemów wizyjnych przetwarzaj¹ niezale nie ogromne iloœci pikseli oraz pewnych struktur dla których wykorzystanie modelu programowania równoleg³ego typu SIMT doskonale siê sprawdza. W dalszej czêœci przedstawione zostan¹ prace zwi¹zane z pewnymi wybranymi algorytmami wykorzystywanymi w przetwarzaniu obrazów na GPU i przedstawione zostan¹ pewne wytyczne dotycz¹ce sposobu ich projektowania wynikaj¹ce z tych badañ.

Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny 279 7. Modu³ OpenCV CUDA OpenCV jest aktualnie rozwijan¹ doœæ intensywnie bibliotek¹ graficzn¹ u³atwiaj¹c¹ implementacje z³o onych systemów wizyjnych typu open-source [12]. W 2010 NVIDIA oficjalnie og³osi³a wsparcie dla tej biblioteki. Dotychczas czêœæ algorytmów zosta³a zaimportowana do CUDA: HOG, SURF, konwersja kolorów, rozmycie gaussowskie. Kod jest aktualnie rozwijalny i cechuje siê pewn¹ niestabilnoœci¹ czêsto raportowan¹ przez u ytkowników. Jednak e uda³o siê ju przeprowadziæ pewne testy i okreœliæ wp³yw wykorzystania GPU dla istniej¹cego ju, jednak e zorientowanego na CPU oprogramowania. 8. Biblioteka NVIDIA NPP Biblioteka ta jest tworzona przez NVIDIA [5] i zawiera w sobie funkcje korzystaj¹ce z technologii CUDA w celu przyspieszenia obliczeñ. Pocz¹tkowo by³a ona ukierunkowana na przetwarzanie obrazów i jest ona intensywnie wykorzystywana przez projektantów tego typu aplikacji. Z czasem zosta³a poszerzona o inne trudne obliczeniowo zadania w ró nych obszarach zastosowañ. Biblioteka NPP jest pisana w sposób elastyczny, nie trac¹c przy tym na swych wysokich mo liwoœciach wydajnoœciowych. Mo e ona zostaæ u yta jako niezale na osobna biblioteka dodana do aplikacji w celu przyspieszenia ich pracy na GPU przy minimalnym wysi³ku programisty. Drugie rozwi¹zanie to w³¹czenie funkcji tej biblioteki w kod programu w celu stworzenia efektywnego kodu pracuj¹cego na GPU. Wybrane funkcje do przetwarzania obrazu to: wymiana danych i ich inicjalizacja (set, convert, transpose, swapchannels, copyconstborder, copy), operacje arytmetyczne i logiczne (add, sub, mul, div, absdiff), progowanie oraz porównywanie, konwersja kolorów, funkcje filtruj¹ce, transformacje geometryczne, funkcje statystyczne, algorytmy Haar, Canny. Bibliotek¹ wspó³pracuj¹c¹ z NPP jest biblioteka CUVI Lib realizuj¹ca bardziej z³o one algorytmy z przeznaczeniem do systemów wizyjnych. 9. Konwersja kolorów oraz rozmycie gaussowskie Algorytmy te nale ¹ do czêsto wykorzystywanych operacji na obrazach (retusz, korekcja koloru). Algorytmy te na CUDA zaimplementowali T. Lengyel, J. Gedarovich i inni [13]. Wykonano testy konwersji kolorów oraz rozmycia gaussowskiego na karcie graficznej NVIDIA GeForce 9800 GT przy u yciu obrazu o rozdzielczoœci 1280 1024 pikseli oraz na CPU Intel CORE 2 6400 2,13 GHz. Testy wykaza³y, e algorytm istniej¹cy

280 Magdalena Szymczyk, Piotr Szymczyk zaimportowany do CUDA wykonuje siê 2,7 razy szybciej, przy czym wiêkszoœæ czasu zosta³a wykorzystana na przesy³anie danych pomiêdzy CPU a kart¹. Wnioski, jakie wynikaj¹ z tych badañ s¹ takie, e algorytmy te osi¹gaj¹ lepsze przyspieszenie przy du ych obrazach, gdzie czas obliczeñ jest znacz¹cy w porównaniu z czasem transferu. Wynika to z d³ugiego czasu dostêpu do pamiêci globalnej multiprocesora (oko³o 500 cykli zegara) zatem operacje czytania i pisania do niej s¹ bardzo kosztowne. Czas ten mo e zostaæ zniwelowany przez wykonanie ogromnej liczby niezale nych obliczeñ zmiennoprzecinkowych. 10. HOG Detekcja osób jest doœæ istotnym zadaniem wspó³czesnych systemów ochrony. Algorytm HoG zaprezentowany przez Dalala i Triggsa [3] oblicza histogram lokalnie znormalizowanych gradientów kierunku przy u yciu bloków 16 16 pikseli (reprezentacja okna detekcji). Fakt, e okno to rozci¹ga siê przez ten obraz we wszystkich mo liwych skalach obrazu, powoduje, e to podejœcie staje siê raczej trudne do wykorzystania przez systemy czasu rzeczywistego (systemy wspomagania kierowania samochodem, œledzenia czy te nadzoru). Jedn¹ z najwa niejszych prac w detekcji obiektów ostatniego dziesiêciolecia jest kaskadowy detektor, który wykonali Viola i Jones [15]. Jest to algorytm odporny na b³êdy i oprócz tego wykazuje du o lepsze przyspieszenie (oko³o jednego rzêdu wartoœci) w porównaniu z podobnymi pracami. Ich praca oparta jest miêdzy innymi o specjaln¹ strukturê integral image, która powoduje, e obliczenie cech jest zwi¹zane z operacj¹ sumowania pikseli obrazu w pewnych regionach. Operacje te dobrze siê paralelizuj¹, gdy zawieraj¹ w sobie miêdzy innymi ³atwe do zrównoleglenia operacje sumowania. Wyniki z pracy Berkina Bilgica [2] wykazuj¹ przyspieszenie równe oko³o 3 w porównaniu z aplikacjami na CPU. Algorytm ten jest kluczowym elementem algorytmu do szybkiej detekcji osób, zatem zaimplementowanie w postaci równoleg³ej pozosta³ej czêœci detektora jest obiecuj¹ce. Berkin Bilgic w swej pracy raportuje przyspieszenie ponaddziesiêciokrotne dla tego algorytmu. Zatem te rozwi¹zania zbli aj¹ nas do wykorzystania kaskadowych detektorów w systemach z wysokimi wymaganiami czasowymi jakimi s¹ systemy czasu rzeczywistego. Testy przeprowadzone przez T. Lengyel, J. Gedarovich i innych [13] potwierdzi³y, e algorytm ten jest bardzo dobrym kandydatem na algorytm równoleg³y wykonywany na GPU. 11. Viola-Jones na GPU Testy przeprowadzone w 2009 przez studentów Harvarda [4] przy u yciu funkcji z biblioteki OpenCV oraz CUDA 2.0 dla tej aplikacji przy wykorzystaniu sprzêtu CPU Intel 32-bitowy Core-2 (2,13 GHz) 1 GB RAM oraz GPU 512 MB NVIDIA GeForce 9800GT wykaza³y osi¹gniêcie dwukrotnego przyspieszenia.

Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny 281 12. Implementacja algorytmu SURF na GPU Aktualnie prowadzone s¹ przez autorów intensywne prace nad implementacj¹ algorytmu SURF [1] na GPU przy u yciu pakietu CUDA. Wstêpne wyniki uzyskane z przeprowadzonych testów wykazuj¹, e czas przetwarzania algorytmu równoleg³ego wykazuje niewielk¹ zale noœæ od liczby punktów charakterystycznych. W zwi¹zku z tym istnieje du y potencja³ zastosowania GPU dla tego typu algorytmu. Szczegó³owe wyniki prowadzonych prac zostan¹ opublikowane w najbli szym czasie. 13. Podsumowanie GPU dostarczaj¹ pewne rozwi¹zania technologiczne u³atwiaj¹ce przetwarzanie multimedialnych aplikacji na GPU. Do takich mo liwoœci mo na zaliczyæ w zakresie tekstury: cache tekstury, interpolacjê dwuliniow¹ wykonywan¹ sprzêtowo, konwersjê danych, dostêpnoœæ tekstury po wielu kana³ach, wielowymiarowoœæ, nieomal optymaln¹ wydajnoœæ przy dostêpie do lokalnych danych 2D. CUDA daje mo liwoœæ bardzo szybkiego dostêpu do pamiêci dzielonej, w której mo na umieœciæ fragment obrazu i dzieliæ piksele pomiêdzy w¹tkami. Wykorzystanie potencja³u GPU do systemów wizyjnych jest bardzo obiecuj¹c¹ technologi¹. W celu wydajnego wykorzystania kart graficznych do tego celu koniecznym jest opracowanie algorytmów równoleg³ych wykorzystuj¹cych specyfikê ich pracy jak te dalsza praca nad bibliotek¹ OpenCV dla GPU. Problemem jest tutaj te czas przesy³ania danych pomiêdzy hostem a kart¹, ale przy dzisiejszym rozwoju algorytmów koduj¹cych i dekoduj¹cych obrazy, to w¹skie gard³o mo e zostaæ usuniête. Literatura [1] Bay H., Ess A., Tuytelaars T., Van Gool L., SURF:Speeded Up Robust Features. Computer Vision and Image Understanding (CVIU), vol. 110, No. 3, 2008, 346 359. [2] Bilgic B., Fast Human Detection with Cascaded Ensembles. S.M. thesis, Massachusetts Institute of Technology, Department of Electrical Engineering and Computer Science, February 2010. [3] Dalal N., Triggs B., Histograms of Oriented Gradients for Human Detection. http://lear.inrialpes.fr. [4] Hsiao C.H., Dai A., Face detection on CUDA. 2009, http://cs264.org. [5] http://developer.nvidia.com/npp. [6] http://en.wikipedia.org/wiki/cuda. [7] http://ixbtlabs.com/articles3/video/cuda-1-p1.html. [8] http://ixbtlabs.com/articles3/video/cuda-1-p2.html. [9] http://ixbtlabs.com/articles3/video/cuda-1-p3.html. [10] http://ixbtlabs.com/articles3/video/cuda-1-p4.html.

282 Magdalena Szymczyk, Piotr Szymczyk [11] http://ixbtlabs.com/articles3/video/cuda-1-p5.html. [12] Kirk D.B., Hwu W.W., Programming Massively Parallel Processors. Morgan Kaufmann, Elsevier, 2010. [13] Lengyel T.K., Gedarovich J., Cusano A., Peters T.J., GPU Vision: Accelerating Computer Vision algorithms with Graphics Processing Unit. University of Connecticut, 2011. [14] Park I.K., Singhal N., Lee M.H., Cho S., Efficient design and implementation of visual computing algorithms on tha GPU. ICIP 2009. [15] Viola P., Jones M., Robust Real-time Object Detection. Second International Workshop on Statistical and Computational Theories of Vision Modeling, Learning, Computing, and Sampling, Vancouver, Canada, 2001.