FrazPC.pl - Programy - Pogoda - Gry - Hosting


Aktualności Programy Artykuły GSM RTV Board
Intel Pineview | HTC HD2 | Westmere | Profil | Loguj | Stats |


Artykuły



15-05-2009


CUDA – sposób na teraflop(s)y

Technologia: Obliczenia prowadzone za pomocą kart graficznych

CUDA – sposób na teraflop(s)y

O tym, że karty graficzne dysponują ogromną mocą obliczeniową, która nie tak dawno zarezerwowana była wyłącznie dla superkomputerów, wiadomo nie od dziś. NVIDIA GeForce GTX 280 dysponuje mocą obliczeniową rzędu 933 gigaflop(s)ów czyli 933 miliardów operacji zmiennoprzecinkowych na sekundę. Dwuukładowy ATI Radeon HD 4870 X2 to moc rzędu 2,4 teraflop(s)a (2,4 biliona operacji na sekundę). Dla porównania moc obliczeniowa jednego z najszybszych dostępnie obecnie procesorów, czterordzeniowego układu Core i7 965 XE to 70 gigaflop(s)ów – ponad 13 razy mniej niż wspomnianego GeForce’a. Nic dziwnego, że inżynierowie od dawna zastanawiają się jak wykorzystać tę moc drzemiącą w kartach graficznych nie tylko do generowania obrazów 3D.

Porównując moc obliczeniową kart graficznych i tradycyjnych procesorów należy jednak pamiętać o tym, że moc obliczeniowa podawana w wielokrotności flop(s)ów (FLOPS – FLoating Operations Per Second) – tak na marginesie, w polskiej literaturze spotykane są dwie pisownie odmiany pisowni tej wielkości flopsów i flopów, stąd postanowiliśmy zapisać w nawiasie (s), tak aby każdy Czytelnik mógł wybrać odpowiadając mu wersję zapisu – w wypadku kart graficznych dotyczy obliczeń w pojedynczej precyzji, a w wypadku CPU podwójnej precyzji, co nie zmienia jednak faktu, że jest ona w dalszym ciągu ogromna.
 
Wróćmy jednak, do samego wykorzystania potencjału kart graficznych do obliczeń niezwiązanych z generowaniem grafiki 3D. Najbardziej zainteresowana tym zagadnieniem była i jest firma NVIDIA. Pierwsze prace nad wykorzystaniem kart graficznych do strumieniowego przetwarzania danych rozpoczęto w 2004 roku. Wówczas to zaczęto zastanawiać się jak obejść problemy związane z dwustronną komunikacją między GPU a resztą systemu komputerowego oraz jak powinien wyglądać software współpracujący z procesorem graficznym, który przecież wykorzystuje bardzo specyficzne dane wektorowe oraz instrukcje operujące na wierzchołkach, wielokątach, pikselach, tekselach i teksturach, co narzuca z kolei bardzo restrykcyjny model oprogramowania.
 
Pierwsze udane próby wykorzystania do obliczeń karty NVIDIA Quadro FX 3400 miały miejsce w listopadzie 2004 roku. Wówczas to zespół naukowców z laboratorium w Los Alamos wspólnie z inżynierami z NVIDII opracował program wykonujący obliczenia symulacji zapadającej się gwiazdy. Karta graficzna wykonała obliczenia czterokrotnie szybciej niż kod wykonywany na procesorze Intel Pentium 4 Xeon 3.0 GHz. W tym miejscu warto dodać, że dla CPU kod został zoptymalizowany do wykorzystywania 64-bitowych rozszerzeń EM64T oraz zmiennoprzecinkowych instrukcji SIMD.


Źródło: NVIDIA

NVIDIA Quadro FX 3400. To na takiej karcie graficznej po raz pierwszy w historii wykonano zaawansowane obliczenia niezwiązane z grafiką – wykonano obliczenia symulacji zapadania się gwiazdy. Parametry karty to: 8 potoków renderujących, złącze PCI Express x16, taktowanie rdzenia 350 MHz, taktowanie pamięci GDR3 (256 MB) 900 MHz, silnik CineFX 3.0, DirectX 9.0, Pixel Shader 3.0.

W 2005 roku firma BionicFX rozpoczęła zaś prace nad technologią Audio Video Exchange (AVEX), która dokonywała zamiany cyfrowych sygnałów audio na sygnał wideo, które mogły być następnie przetwarzane przez kartę graficzną. Innymi słowy, dzięki AVEX karta graficzna realizowała obliczenia audio na odpowiednio spreparowanych danych, w taki sposób jakby pracowała w normalny sposób na pikselach i werteksach przechowywanych w pamięci wideo.

Czas na CUDA
 
Sukces inżynierów z Los Alamos oraz postęp dokonany przez firmę BionicFX w sposobach przystosowywania danych na potrzeby kart graficznych sprawił, że inżynierowie z NVIDII, na czele z Davidem Kirkiem, szefem działu rozwoju i badań (to on uznawany jest za twórcę koncepcji CUDA), przekonali się, że warto zacząć wykorzystywać karty graficzne do obliczeń naukowo-inżynierskich. Bardzo szybko podjęto próby zaimplementowania odpowiednich mechanizmów obliczeniowych do kolejnej generacji kart graficznych.


Źródło: NVIDIA

Przykład przepływu danych w architekturze i modelu programowania CUDA. 1) Kopiowanie danych z pamięci RAM komputera do pamięci karty graficznej, 2) Procesor wysyła program do GPU (instruowanie GPU), 3) Równoległe wykonywanie obliczeń (w każdym procesorze strumieniowym) zgodnie z przesłanym przez CPU programem, 4) Kopiowanie wyników obliczeń z pamięci karty graficznej do pamięci RAM komputera.

Tak narodziła się koncepcja architektury i modelu programowania znanego obecnie pod nazwą CUDA (Compute Unified Device Architecture). CUDA zadebiutowały wraz z układami z serii GeForce 8800 GTX, czyli kością o kodowej nazwie G80. Architektura ta z niewielkimi zmianami wykorzystana została również w kolejnej serii kart NVIDII – GeForce 9000, a także w nowym mainstreamowym modelu NVIDIA GeForce GTS 250.
 
W wypadku oryginalnej architektury G80 (GF 8800 GTX), jej podstawę stanowi osiem jednostek cieniowania, z których każda ma 16 jednostek obliczeniowych tzw. Streaming Processor – G80 dysponuje łącznie 128-takimi jednostkami. Jednostki te, zgodnie przyjętymi założeniami architektury CUDA, są 32-bitowymi jednostkami skalarnymi uniwersalnego przeznaczenia. Oznacza to, że jednostka taka może wykonywać zarówno obliczenia charakterystyczne dla Vertex Shadera, jak i Pixel Shadera, a także obliczenia dowolnego innego typu. Co ważne, każdy ze 128 układów Streaming Processor może w jednym cyklu wykonać dwie instrukcje dodawania oraz jedną operację mnożenia. Dodatkowo w każdej jednostce cieniowania znalazł się zestaw modułów odpowiedzialnych za operacje na teksturach. Moduły te zoptymalizowane zostały pod kątem obliczeń typu HDR i mogą pracować w trybach FP16 i FP32.
 
Zgodnie z założeniami architektury CUDA, jednostki Streaming Processor podczas obliczeń mogą być łączone w większe zespoły (klastry) obliczeniowe liczące cztery jednostki wykonujące wspólnie np. obliczenia wektorowe typu SIMT wykonywane w tradycyjnej architekturze przez Vertex Shadery. Po skończeniu kalkulacji, taki moduł obliczeniowy może być „rozformowany” a każda wchodząca w jego skład jednostka przydzielona do innych zadań. W ten sposób nie tylko zwiększyć szybkość obliczeń ale również ich efektywność wykorzystania – praktycznie wyeliminowane zostały przestoje. W G80 zastosowana zunifikowana architektura ma zatem strukturę nazywaną angielskim terminem Scalable Processor Array, co przetłumaczyć można jako skalowalna matryca procesorów. Jej podstawowym elementem są właśnie doraźnie tworzone bloki wykonawcze złożone z kilku mniejszych procesorów nazywane klastrami. W wypadku G80 bloki te mogą pracować w dwóch trybach: Texture Processing Clusters, wówczas wykonywane są skalarne operacje na teksturach i pikselach oraz w trybie Thread Processing Clusters, umożliwiającym równoległe przetwarzanie danych tak jak to ma miejsce w tradycyjnych Vertex Shaderach i wprowadzonych w DX 10 Geometry Shaderach.
 
Operacje obliczeniowe wykonywane przez klastry wykorzystują instrukcje typu MIMD (Multiple Instruction, Multiple Data), a do wykonywania kalkulacji w obrębie jednostek Streaming Processor używa się skalarnych algorytmów SIMT (Single Instruction, Multiple Thread). W odróżnieniu stosowanych w procesorach mechanizmów SIMD (Single Instruction, Multiple Data), skalarny SIMT nie potrzebuje do obliczeń pobierać informacji o szerokości wektora, stąd operacje te realizowane są znacznie szybciej, niemniej należy programowo pilnować ewentualnych zmian w szerokości wektora obliczeń, aby przypadkowo nie zmniejszyć dokładności wykonywanych operacji.
 
Pojawienie się zunifikowanych uniwersalnych jednostek obliczeniowych sprawiło, że do tradycyjnego modelu przetwarzania grafiki wykorzystującego moduły Vertex i Pixel Shader można było dodać nową, wspomniana przed chwilą, grupę jednostek obliczeniowych – Geometry Shader. Ujrzały one, tak jak już napisałem, światło dzienne wraz z dziesiątą odsłoną bibliotek graficznych DirectX. Do ich zadań należy m.in. przetwarzanie i deformacja elementów szkieletu sceny, stanowiących większą całość. Oczywiście tymi obliczeniami zajmują się również odpowiednio grupowane Streaming Processory. Do tej pory tymi obliczeniami parał się zaś CPU.
 
Układ G80 osiąga moc obliczeniową rzędu 518 gigaflop(s)ów. Jego moc obliczeniowa jest też dość łatwo dostępna, dzięki zastosowaniu standardowych formatów danych, ujednoliconych instrukcji, a co najważniejsze opracowanego w ramach CUDA środowisku programistycznemu korzystającemu z implementacji języka C i pakietu OpenCL – o czym za chwilę.

Architektura G80 - źródło: NVIDIA

Architektura zunifikowanych modułów graficznych pozwala ograniczyć sytuację, w której albo jednostki Vertex Shader, albo Pixel Shader będą miały puste cykle obliczeniowe wynikające z oczekiwania do momentu aż bardziej obciążona grupa jednostek shaderowych skończy swoje obliczenia.

Parę słów o DirectX 10
 
Premiera GeForce’a 8800 i pojawienia się nowej zunifikowanej architektury CUDA zbiegł się w czasie z premierą DirectX 10. Nie był to przypadek. DX 10 stworzony został właśnie z myślą jak najbardziej efektywnego wykorzystania takiej ujednoliconej architektury procesorów graficznych. Co więcej, wszystkie operacje dotyczące przetwarzania wielokątów i pikseli realizowane przez jednostki Vertex i Pixel Shader z punktu widzenia bibliotek graficznych DirectX 10 połączone zostały w jedną fazę. Microsoft mógł sobie na taki krok śmiało pozwolić, bowiem również konstrukcje firmy ATI – począwszy od układu o kodowej nazwie R600 czyli układzie, na którym bazują karty z serii Radeon HD 2000/3000 – zaczęły wykorzystywać architekturę zunifikowanych shaderów. Nie było więc obawy, o to że któraś z wielkich firm produkujących układy graficzne nie będzie na wprowadzenie nowych bibliotek 3D odpowiednio przygotowana. Co więcej taka, koncepcja działania kart graficznych sprawdzona została „w praniu” w konsolach do gier Xbox 360 i PlayStation 3.

Zunifikowana Architektura ATI oraz shadery geometrii - źródło: ATI

Oczywiście, połączenie obliczeń shaderowych w DX 10 w jedna fazę nie oznacza wcale, że karta zgodna z DirectX 10 musi koniecznie wykorzystywać zunifikowaną architekturę procesorów graficznych. Kość graficzna może z powodzeniem być zaprojektowana w tradycyjnej architekturze korzystającej z Vertex i Pixel Shaderów, a fazą rozseparowania operacji zajmie się sterownik urządzenia. Karta nie musi mieć też Geometry Shaderów. Tą częścią obliczeń może zając się procesor. Pamiętajmy jednak, że w zasadniczy sposób odbije się to na wydajności systemu grafiki.
 
CUDA – odsłona druga
 
Wsparcie dla architektury CUDA ze strony bibliotek graficznych DirectX 10 oraz pojawianie się aplikacji wykorzystujących moc obliczeniowych (głownie za sprawą akceleratorów obliczeniowych o nazwie Tesla, o których też za chwilę) umożliwiło inżynierom z firmy NVIDIA znaczne usprawnienie systemu CUDA. Nowa architektura zgodna z założeniami koncepcji CUDA, czyli tak naprawdę druga generacja architektury zunifikowanych shaderów, pojawiła się w kartach z układami o kodowej nazwie GT200 i GT20, a więc w GeForce’ach GTX 280 i 260.
 
Podstawą architektury GT200 są skalarne, ale tym razem już 64-bitowe, zmiennoprzecinkowe jednostki obliczeniowe, które dla odmiany nazwane zostały Thread Processor. Jak można się domyślić, do operacji wektorowych jednostki TP łączy się w grupy po dwie, a nie jak w G80, po cztery jednostki pracujące w trybie SIMT. W GT200 jednostek Thread Processor jest 240. Nieco inna niż w G80 jest ich organizacja. TP podzielono między 10 (poprzednio było ich osiem) jednostek cieniowania, z których każda dysponuje nie dwoma, ale trzema zespołami obliczeniowymi składającymi się z ośmiu Thread Processorów (10*3*8=240 dla GT200, 8*2*8=128 dla G80). Więcej jest też jednostek filtrujących tekstur (80 vs. 64) i modułów ROP czyli Render Operation Processors (32 kontra 24), które, co ciekawe wyposażono w pamięć cache L2 do przechowywania tekstur.

Architektura G200 (GeForce GTX 280) - źródło: NVIDIA

Istotną wprowadzoną w GT200 modyfikacją architektury CUDA jest również poprawa wydajności (o około 20%) szybkości działania klastrów obliczeniowych, lepszy podział zadań (wydajniejszy scheduler) oraz wprowadzenie wielowątkowego zestawu instrukcji SIMT. GT200 potrafi jednocześnie przetworzyć ponad 30000 wątków, w porównaniu z 12000 wykonanymi jednocześnie wątkami przez układ G80. Przede wszystkim ze względu na możliwość prowadzenia skomplikowanych, nie związanych z grafiką obliczeń, podwojono również pamięć przeznaczoną do przetrzymywania plików rejestru. W G80 zbyt długi program shaderowy powodował konieczność przenoszenia podczas kalkulacji części danych do zewnętrznej pamięci karty graficznej, w GT200 zdarza się to teraz sporadycznie. W GT200 usprawniono również inne związane z przetwarzaniem grafiki bloki wykonawcze, ale ze względu na główny temat artykułu nie będziemy ich tutaj omawiać. Architekturę bazującą na układzie GT200 mogą pochwalić się pozostałe nowe karty graficzne NVIDII, czyli GeForce GTX 275, 285, 295, ale pamiętajmy, że i w tym wypadku ich budowa wewnętrzna (różne są m.in. liczby użytych Thread Processorów) nie różni się zasadniczy sposób od GeForce’a GTX 280.
 
GPGPU, czyli Tesla
 
Tak naprawdę zarówno GeForce 8800 GTX, jak i GeForce GTX 280 zaliczyć można śmiało do układów typu GPGPU (General Purpose GPU), a więc układów graficznych ogólnego przeznaczenia. Procesor graficzny GPGPU może być z powodzeniem wykorzystywany do wykonywania zadań przeznaczonych dla tradycyjnych jednostek centralnych. Innymi słowy, w razie potrzeby karta graficzna może wesprzeć CPU podczas wykonywaniu skomplikowanych obliczeń, które w ogóle nie są związane z generowaniem grafiki. Najczęściej są to obliczenia związane z kalkulacjami fizyki w grach (np. PhysX), ale również obliczeniami naukowo-inżynierskimi takimi jak np. symulacje wytrzymałościowe konstrukcji mechanicznych, numeryczne rozwiązywanie równań mechaniki kwantowej, kalkulacje trajektorii rakiet i pocisków, obliczenia fizykochemiczne, kalkulacje struktury cząsteczek chemicznych itp.
 
Do powyższych naukowo-inżynierskich celów nie wykorzystuje się jednak zwykłych kart graficznych. Takimi specjalnie przystosowanymi do obliczeń numerycznych akceleratorami graficznymi są opracowana przez NVIDIĘ specjalna platforma obliczeniowa o nazwie Tesla. W jej ramach dostępne są specjalne karty bazujące na zmodernizowanych układach graficznych 8800 GTX, oznaczonych symbolem Tesla T8P (są one już wycofywane ze sprzedaży) oraz nowsze wersje Tesli – T10P – bazujące już na układach graficznych NVIDIA GeForce GTX 280.

Karta obliczeniowa GPGPU NVIDIA Tesla C1060 - źródło: NVIDIA

System obliczeniowy NVIDIA Tesla S1070 1U - źródło: NVIDIA

Jak już wcześniej wspomniałem, moc obliczeniowa Tesli jest łatwo dostępna, a to dzięki zastosowaniu standardowego formatu danych oraz bardzo dobremu wsparciu ze strony środowiska programistycznego CUDA. NVIDIA dostarcza bowiem wraz z Teslą odpowiednio przystosowane środowisko do tworzenia aplikacji, co sprawiło, że systemy Tesla wykorzystywane są już w ponad 50 ośrodkach naukowo-badawczych, w tym tak znanych i prestiżowych, jak MIT (Massachusetts Institute of Technology). Co więcej, wszystkie wykonywane bez problemu przez systemy Tesla obliczenia zarezerwowane były do niedawna wyłącznie dla superkomputerów.
 
Podobnie jak układ graficzny GT200, tak i Tesla T10P, ma do dyspozycji 240 w pełni programowalnych procesorów Thread Processor. Oczywiście procesory te można bez kłopotu programować za pośrednictwem środowiska C będącego częścią systemu CUDA. W skład platformy Tesla wchodzi obecnie serwerowy system Tesla S1070 1U, złożony z czterech układów Tesla T10P o łącznej mocy obliczeniowej 4 teraflopsów, oraz karta obliczeniowa Tesla C1060 Computing Processor, która, jak można się domyślić, wyposażona jest w kość Tesla T10P zamiast standardowego graficznego układu GTX 280. Oczywiście, karta akceleratora obliczeniowego CUDA pozbawiona jest wyjść i wejść wideo – jest to po prostu montowana w komputerze karta rozszerzeń. Jej moc obliczeniowa jest nieco większa niż standardowego GeForce’a GTX 280 i wynosi równo teraflop(s). Starsza, pojedyncza karta Tesla C870 wyposażona w rdzeń G80 charakteryzowała się zaś mocą obliczeniową 518 gigaflop(s)ów czyli taką samą jak odpowiadający jej GeForce 8800 GTX. Ciekawostką jest to, że systemie komputerowym karty Tesla można łączyć ze sobą razem w trybie SLI i tri SLI – dokładnie tak samo jak ma to miejsce w wypadku zwyczajnych kart graficznych NVIDII z rodziny GeForce.
 
Jak wynika z różnych badań przeprowadzonych przez NVIDIĘ, właśnie wśród naukowców największym zainteresowaniem, głownie ze względu na cenę, cieszy się karta obliczeniowa Tesla C1060 (cena ok. 1500 USD) 1ub wykorzystujące ją gotowe komputery, takie jak np. system firmy Sprinx Systems (cena ok. 10 tys. USD) z trzema akceleratorami Tesla. Po jej zainstalowaniu w zwykłym pececie zmienia się on w coś co można nazwać osobistym superkomputerem. Środowisko programistyczne i uruchamiane na stacji aplikacje mogą pracować zarówno pod Linuksem jak i systemem Windows. Obsługa odpowiednio zmodyfikowanych aplikacji w niczym nie różni się od korzystania ze zwykłych wersji programów uruchamianych na CPU. Odpowiednim rozdziałem zadań obliczeniowych zajmują się dołączone do Tesli sterowniki.

Przykłady obliczeń wykonywanych na kartach Tesla - źródło: NVIDIA

Nieco inaczej skonstruowany został system obliczeniowy Tesla S1070 1U – stanowi on bowiem jedną niezależną całość. Współpracuje on z większymi maszynami obliczeniowymi (np. niewielkimi superkomputerami, obliczeniowymi stacjami roboczymi, klastrami lub serwerami) i komunikuje się z nimi bezpośrednio za pomocą interfejsu FiberChannel lub gigabitowego ethernetu. Superkomputer, klaster obliczeniowy bądź serwer przekazuje do systemu Tesla dane do obliczeń, a po ich wykonaniu otrzymuje gotowe wyniki. Innymi słowy, Tesla S1070 1U to coś na kształt zewnętrznego akceleratora obliczeniowego dużej mocy wspomagającego niewielkie superkomputery, klastry, stacje robocze lub serwery. Oczywiście, Tesla S1070 przystosowana została do instalacji w centrum obliczeniowym lub serwerowni i dlatego zamknięto ją w typowej obudowie rackowej 1U przystosowanej do montażu w szafach stelażowych. Dostęp do mocy obliczeniowej NVIDIA Tesla S1070 zapewnia zaś specjalne oprogramowanie, które instaluje się na współpracującym z systemem Tesla komputerze.
 
CUDA w obliczeniach naukowo-inżynierskich
 
W tym miejscu warto zatrzymać się na chwilę na zagadnieniach związanych z dostępnym dla systemu Tesla oprogramowaniem oraz wykorzystaniem systemu Tesla i architektury CUDA do zaawansowanych obliczeń naukowo-inżynierskich, wymagających wysokich wydajności, czyli obliczeń określanych angielskim terminem HPC (High Performance Computing). Jak można się domyślić, choćby po tym, że pojedynczy procesor Tesla T10P, ma do dyspozycji 240 w pełni programowalnych procesorów Thread Processor, które swoje zadania wykonują niezależnie i równolegle, Teslę wykorzystuje się przede wszystkim w tzw. wysokowydajnych obliczeniach masowo-równoległych. Mówiąc inaczej, chodzi tutaj o prowadzenie za pomocą stosunkowo prostego zestawu instrukcji wysokowydajnych równoległych obliczeń na ogromnej (masowej) ilości danych.
 
Wraz z systemem obliczeniowym Tesla użytkownikom dostarczane są, przygotowane do natychmiastowego wykorzystania i zaimplementowania w swoich programach, biblioteki obliczeniowe dla szybkiej transformaty Fouriera (FFT – Fast Fourier Transform) oraz zagadnień związanych z rozwiązywaniem równań liniowych, macierzy form kwadratowych i innych problemów znanych z algebry liniowej – biblioteki BLAS, Basic Linear Algebra Subroutines. Dostępne są także odpowiednie wtyczki do programu Photoshop oraz Matlab (pliki MEX).
 
Na wielu uczelniach opracowywane są obecnie programy i dodatki do wielu wykorzystywanych w nauce i technice aplikacji służących do wysokowydajnych obliczeń. Przygotowywane oprogramowanie korzysta z możliwości technologii CUDA. Obecnie realizowanych jest m.in. kilka różnych projektów związanych z przyspieszeniem obliczeń z dziedziny chemii kwantowej, obliczeń finansowych, obliczeń dynamiki płynów, dynamiki molekularnej, obliczeń związanych z elektromagnetyzmem i elektrodynamiką oraz modelowaniem zachowania się atmosfery, oceanów, próżni i modelowaniem zjawisk pogodowych – to tylko niektóre z nich (patrz: http://www.NVIDIA.pl/object/vertical_solutions_pl.html).
 
Jeśli chodzi o chemię, obecnie prowadzone prace dotyczą przede wszystkim możliwości prowadzenia obliczeń HPC za pomocą GPU i technologii CUDA przy użyciu takich programów jak Gaussian i GAMESS. Oprogramowanie finansowe skupia się nad wyceną i analizą ryzyka oraz algorytmiczną analizą obrotów, przy analizie dynamiki płynów wykorzystuje się wymagające ogromnych nakładów obliczeniowych modele Naviera-Stokesa i metodę Lattice Boltzmana (patrz: poniższe wykresy) – to tylko niektóre przykłady. Według danych udostępnionych przez NVIDIĘ, w porównaniu z komputerem wykorzystującym do obliczeń tylko procesor, maszyna wykorzystująca technologię CUDA charakteryzuje się zwiększoną wydajnością od 18 razy przy kodowaniu wideo do nawet 149-krotniego przyspieszenia podczas prowadzenia symulacji finansowych metodą Monte Carlo. Inne przykłady to na University of Utah komputer z technologią CUDA zapewnia 146-krotnie szybszą pracę przy obrazowaniu medycznym, a z kolei na University of Maryland naukowcom udało się ponad 30-krotnie szybciej wykonać sekwencjonowanie genomu.


Źródło: NVIDIA

Przedstawione powyżej wykresy przedstawiają przykłady przyspieszenia uzyskiwanych wyników obliczeniowych w różnych aplikacjach naukowo-inżynierskich oraz programach finansowych z wykorzystaniem wyłącznie samego CPU oraz przy wspomaganiu obliczeń akceleratorami z rodziny Tesla wykorzystującymi technologię CUDA.

Zastosowanie CUDA to nie tylko programy tworzone na uczelniach, ale również aplikacje komercyjne. Przykładem takiego programu może być Distributed Password Recovery firmy Elcomsoft. Program ten służy do łamania zabezpieczeń kryptograficznych i może współpracować z czterema kartami Tesla przypadającymi na jeden węzeł obliczeniowy. Jedna karta Tesla S1070 pozwala na osiągnięcie 2,8 mld prób łamania na sekundę, podczas gdy procesor Intel Core 2 Quad 6600 umożliwia podjęcie zaledwie 87 milionów prób złamana kodu na sekundę.
 
Środowisko C w CUDA
 
CUDA to tak naprawdę również kompletne środowisko programistyczne wraz z odpowiednim API (Application Programming Interface). Środowisko programistyczne CUDA zawiera między innymi kompilator nvcc C, profiler oraz debugger dla procesora graficznego, a także sterownik uruchomieniowy CUDA, który dostępny już jest także w standardowym sterowniku dla procesorów graficznych z rodziny GeForce, a nie tylko w sterownikach dla kart Tesla. Wszystkie te elementy CUDA pozwalają programistom bez specjalnego przygotowania (wymagana jest znajomość języka C) zaprząc do obliczeń nie tylko procesor w komputerze, ale również GPU.
 
Dostępny w API CUDA firmowy interfejs programistyczny, to nie jedyny interfejs dostępny dla środowiska CUDA. Firma NVIDIA udostępnienia twórcom oprogramowania również pakiet SDK dla języka OpenCL, który również pozwala skorzystać z technologii CUDA. Opracowany i ustandaryzowany przez konsorcjum Khronos Group OpenCL czyli Open Computing Language, jest frameworkiem wspomagającym pisanie aplikacji wieloplatformowych składających się z różnego rodzaju jednostek obliczeniowych – przede wszystkim CPU i GPU. OpenCL zawiera w sobie język służący do tworzenia oprogramowania, bazujący na specyfikacji ISO-C99 oraz API pozwalający na sprawowanie kontroli nad poszczególnymi urządzeniami systemu. OpenCL ma w swoim założeniu pozwolić na zaprogramowanie aplikacji i funkcji, które będą działy na najróżniejszych, ale kompatybilnych z OpenCL procesorach i układach graficznych – podobnie jak ma to miejsce z graficznymi bibliotekami OpenGL. Co ciekawe, z OpenCL są również kompatybilne karty graficzne ATI (firma AMD, podobnie jak NVIDIA, Apple, HP, IBM, Sun czy Intel należy również do konsorcjum Khronos Group). Oznacza, to, wspomaganie obliczeń w programach przez procesory graficzne będzie możliwe nie tylko dla kart NVIDII. Jak twierdzi NVIDIA aplikacje zgodne z OpenCL bezproblemowo działają na kartach graficznych obsługujący technologię CUDA. Odpowiednie procedury zostały już włączone do GeForce’owych sterowników.

Microsoft Windows 7 będzie pierwszym systemem operacyjnym wykorzystującym do rożnych zadań jednocześnie moc obliczeniową karty graficznej i centralnego procesora - źródło: NVIDIA

Konkurencyjnym rozwiązaniem technologicznym w stosunku do OpenCL mają być wprowadzone przez Microsoft do DirectX 11 jednostki Compute Shader. Oznacza to, że najprawdopodobniej będziemy mieli do czynienia z dwoma interfejsami programistycznymi pozwalającymi wykorzystać do zadań niezwiązanych z grafiką moc obliczeniową akceleratorów 3D. Podobną sytuację mamy dzisiaj w stosunku do DirectX i OpenGL. Będzie to pewien kłopot dla programistów, ale we wszystkich sterownikach do kart graficznych zarówno ATI, jak i NVIDII, a także Intela (projekt Larrabee) znajdą się procedury obsługi zarówno OpenGL, jak i Compute Shader.
 
Obróbka wideo, czyli wreszcie coś dla ludzi
 
Jak widać z powyższych przykładów oprogramowanie zgodne z technologią CUDA rozwijało się do tej pory głównie na uniwersytetach i instytutach naukowo-badawczych. I nie ma w tym nic dziwnego, przecież CUDA dały do ręki naukowcom i inżynierom potężne narzędzie do prowadzenia zaawansowanych wysokowydajnych obliczeń stosunkowo niewielkim kosztem. Naukowcy nie muszą też, mając do dyspozycji na biurku „osobisty superkomputer”, czekać w kolejce na tzw. slot obliczeniowy (tak wielu naukowców nazywa czas przyznany na ich obliczenia wykonywane na superkomputerze), za który często trzeba jeszcze płacić.
 
Niemniej, do niedawna zwykły właściciel domowego peceta z GeForce’m na pokładzie, nie mógł skorzystać z dostępnej ponad pół tera flop(s)owej mocy obliczeniowej. A trzeba pamiętać, że grono takich osób jest naprawdę ogromne, biorąc pod uwagę wszystkich użytkowników GeForce’ów z serii 8000, 9000 i 200. Bardzo dobrze zdawali sobie z tego sprawę inżynierowie i marketingowcy z NVIDII. Wiedzieli oni dobrze, że szersze promowanie technologii CUDA ma tylko sens wtedy, kiedy będą z niej mogli skorzystać zwykli użytkownicy kart graficznych. NVIDIA, nie bez racji, stwierdziła, że w domowych warunkach najlepszym zastosowaniem technologii CUDA będzie wspomaganie obróbki i odtwarzania wideo. Po pierwsze gros użytkowników pecetów ma, ogląda i przetwarza na swoim komputerze, a następnie część z nich wysyła na takie serwisy internetowe jak YouTube, materiały wideo – ot choćby te nakręcone komórką, a pamiętajmy, przyspieszenie przy zastosowaniu technologii CUDA w przetwarzaniu strumienia wideo jest co najmniej 20-procentowe. Przy okazji można też poprawić jakość takich materiałów wykorzystując wbudowane w kartę graficzną mechanizmy przetwarzania obrazu wideo.

Przykłady programów do obróbki wideo wykorzystujących technologię CUDA - źródło: NVIDIA

Pierwszym zaprezentowanym przez NVIDIĘ programem do obróbki wideo korzystającym z technologii CUDA był Badaboom. Przez długi czas nie zdobył on jednak dużej popularności i był traktowany raczej jako ciekawostka demonstrująca możliwości wykorzystania technologii CUDA do obróbki wideo. Dopiero od niedawna zaobserwować można prawdziwy wysyp programów do obróbki i odtwarzania wideo wspierających technologię CUDA. Wśród nich wymienić można: CyberLink Power Director 7, LiLoScope Mars, MotionDSP vReveal czy przede wszystkim Nero MovieIt. Oczywiście, wszystkie te programy pokazują „lwi pazur” podczas obróbki i odtwarzania materiałów wideo w wysokiej rozdzielczości HD.
 
Wybrane oprogramowanie komercyjne dla technologii CUDA:
 
1. vReveal firmy MotionDSP
2. ArcSoft SimHD
3. Ikena
4. Badaboom Media Converter firmy Elemental Technologies
5. Cyberlink PowerDirector 7
6. Loilo Scope Mars
7. Nero MoveIt
8. Pegasys TMPGenc
9. Gra społecznosciowa Nurien
10. Firma Elcomsoft. High-Performance Distributed Password Recovery
11. North Star Imaging
12. SciFinance
13. Manifold System GIS Internet Map Server for web applications
14. WIPRO
 
źródło: NVIDIA

AMD Stream, czyli jak to robi ATI
 
Oczywiście technologia CUDA to nie jedyny system pozwalający wykonywać obliczenia typu GPGPU na kartach graficznych. Konkurencja NVIDII, czyli firma ATI/AMD dysponuje również tego typu techniką o nazwie AMD Stream. Jest ona zdecydowanie mniej znana szerszemu gronu użytkowników i programistów, niemniej pozwala dokładnie na prowadzenie w taki sam sposób obliczeń HPC jak w wypadku CUDA. Jak już wspomniałem, technologia AMD Stream zgodna jest z OpenCL oraz technologią Compute Shader Microsoftu. Ta ostatnia cecha oznacza też pełną kompatybilność ze wszystkimi mechanizmami zaimplementowanymi Windows 7 związanymi z wykorzystywaniem mocy obliczeniowej GPU do zadań niegraficznych oraz zgodność pod tym względem z bibliotekami DirectX 11.

Architektura Radeona HD 4800 (RV770) korzystającego z 800 procesorów strumieniowych - źródło: ATI/AMD

Obecnie ATI/AMD udostępnia już swój API Stream SDK. Technologia AMD Stream dostępna jest w kartach bazujących na chipach RV670 i RV770, a więc Radeonach HD z serii 3800 i 4800 oraz karcie AMD FireStream 9270. Jeśli chodzi o tą ostatnią to AMD chwali się, że jest to karta specjalnie dedykowana obliczeniom HPC. Jej moc obliczeniowa wynosi 1,2 teraflop(s)a i 240 gigaflop(sów) jeśli chodzi o obliczenia podwójnej precyzji.

Architektura strumieniowych procesorów ATI/AMD - źródło: ATI/AMD

Jeśli chodzi o sam układ RV770, to zawiera on 800 zunifikowanych strumieniowych jednostek cieniujących SPU (Stream Processing Unit) – w RV670 jest ich 320. Moduły te są w stanie wykonywać zmiennoprzecinkowe obliczenia typu SIMD ze 128-bitową precyzją. Organizacyjnie jednostki SIMD podzielono na klastry zawierające po 10 bloków obliczeniowych, z których każdy ma do dyspozycji 80 SPU. Każda jednostka SIMD ma do swojego użytku po 16 KB pamięci podręcznej cache Local DataShare oraz wspólną dla 10 bloków obliczeniowych pamięć Global DataShare. Ta ostatnia służy do wymiany danych, alokacji i komunikacji między 10 blokami obliczeniowymi. W strukturze architektury, którą ATI/AMD nazywa TeraScale Engine, znalazło się także 40 jednostek teksturujących – po 4 na jeden z dziesięciu bloków obliczeniowych.
 
Oprogramowanie dla AMD Stream
 
Jeśli chodzi o dostępne dla systemu AMD Stream komercyjne oprogramowanie (nie naukowo-inżynierskie) to obecnie jego wybór jest znacznie mniejszy niż w wypadku CUDA. Firma AMD chwali się, że z technologii AMD Stream korzysta ATI Avivo Video Converter, CyberLink PowerDirector 7, ArcSoft TotalMedia Theater oraz niektóre aplikacje firmy Adobe.

Wybrane oprogramowanie dostępna dla technologii ATI/AMD Stream - źródło: ATI/AMD

ATI Stream SDK - źródło: ATI/AMD

Przyszłość GPGPU
 
Jak widać technologie związane z obliczeniami pozagraficznymi realizowanymi na akceleratorach graficznych zaczynają dynamicznie przyspieszać. Na pewno impulsem do dalszych prac będzie pojawienie się systemu operacyjnego Windows 7 i bibliotek DirectX 11. Co ciekawe, również w kierunku obliczeń realizowanych za pośrednictwem kart graficznych zaczyna podążać Intel. Jego projekt karty graficznej Larrabee jest typowym projektem związanym z wykorzystaniem technologii GPGPU.
 
Czy tandem CPU + GPU będzie podstawą zaawansowanych obliczeń w najbliższej przyszłości? Na pewno tak. Jedno jest obecnie pewne. Dzięki mocy obliczeniowej kart graficznych wysokowydajne obliczenia HPC z pewnością będą mogły zawitać pod przysłowiowe strzechy.

Autor: Marcin Bieńkowski

Komentarze (16)





Podobne Artykuły/Recenzje

23-09-2009 - ATI Radeon 5870 / 5850 - Technologia (11%)
12-03-2010 - Technologia druku komputerowego (10%)
11-03-2009 - RFID - miniaturowy szpieg (7%)
06-07-2009 - INTEL: Czas 32 nanometrów (7%)
24-04-2006 - PureVideo - technologia przyszłości (7%)
04-01-2010 - Technologie: 32 nanometrowe procesory Intela (7%)
09-02-2010 - Technologie: NVIDIA Fermi GF100 (7%)
18-09-2009 - Produkcja procesorów i półprzewodników - od piasku do procesora (7%)
22-12-2009 - Intel Single-chip Cloud Computer (7%)
18-01-2010 - Technologie: Architektura Fermi - NVIDIA GF100 (7%)
12-01-2009 - Technologia vPro - zarządzanie na odległość (7%)
29-05-2009 - Przydatne serwisy i usługi online - Wszystko na chmurce (7%)
17-07-2009 - DirectX 10, DirectX 10.1 i DirectX 11 - Biblioteki graficzne (5%)
09-09-2002 - Sześć kart z ATI Radeon 8500 (4%)
01-01-2004 - Optymalizacja codziennej pracy z kartą Radeon (4%)
26-09-2005 - ATI CROSSFIRE - Dwoch kart moc! (4%)
13-12-2004 - Optymalizacja codziennej pracy z kartą Radeon część 2 (4%)

___________________________
Więcej artykułów



Redakcja serwisu FrazPC.pl nie ponosi odpowiedzialności za ewentualne szkody powstałe
w wyniku użytkowania jakichkolwiek materiałów ukazujących się na łamach FrazPC.pl.
Copyright © FrazPC.pl 1997-2010
| Online: 4282 | Online w dziale: 157 | Odsłony: 609,353,783 | Czas generacji strony: 0.0070 s |