CUDA

Technologia NVIDIA CUDA™ to jedyne środowisko języka C, które wykorzystuje moc przetwarzania GPU do rozwiązywania najbardziej złożonych obliczeniowo zadań.

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.

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.

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

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.

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.

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.

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.

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.

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

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