Zasoby komputerowe U SM. Dokąd prowadzi cuda: praktyczne zastosowanie technologii gpgpu - najlepszy sprzęt Aplikacje działające na cudie

Od kilkudziesięciu lat obowiązuje prawo Moore’a, które mówi, że co dwa lata liczba tranzystorów w chipie podwaja się. Miało to jednak miejsce w 1965 roku i w ciągu ostatnich 5 lat koncepcja fizycznych wielordzeniowych procesorów klasy konsumenckiej zaczęła szybko się rozwijać: w 2005 roku Intel wprowadził Pentium D, a AMD Athlon X2. Wtedy aplikacje wykorzystujące 2 rdzenie można było policzyć na palcach jednej ręki. Jednak kolejna generacja procesorów Intela, która dokonała rewolucji, miała dokładnie 2 rdzenie fizyczne. Co więcej, seria Quad pojawiła się w styczniu 2007 roku, kiedy to sam Moore przyznał, że jego prawo wkrótce przestanie obowiązywać.

Co teraz? Dwurdzeniowe procesory nawet w budżetowych systemach biurowych i 4 rdzenie fizyczne stały się normą i to w ciągu zaledwie 2-3 lat. Częstotliwość procesorów nie jest zwiększana, ale poprawiana jest architektura, zwiększana jest liczba rdzeni fizycznych i wirtualnych. Jednak pomysł wykorzystania kart wideo wyposażonych w dziesiątki, a nawet setki „jednostek” obliczeniowych istnieje już od dawna.

I choć perspektywy dla obliczeń na GPU są ogromne, to najpopularniejszym rozwiązaniem jest Nvidia CUDA, które jest darmowe, posiada mnóstwo dokumentacji i jest generalnie bardzo łatwe w implementacji, to niewiele jest aplikacji korzystających z tej technologii. W zasadzie są to wszelkiego rodzaju specjalistyczne obliczenia, którymi przeciętny użytkownik w większości przypadków nie przejmuje się. Ale są też programy przeznaczone dla masowego użytkownika, o których porozmawiamy w tym artykule.

Na początek trochę o samej technologii i tym, do czego jest wykorzystywana. Ponieważ Pisząc artykuł, skupiam się na szerokim kręgu czytelników, dlatego postaram się go wyjaśnić przystępnym językiem, bez skomplikowanych terminów i w miarę krótko.

CUDA(angielski Compute Unified Device Architecture) to architektura oprogramowania i sprzętu, która umożliwia wykonywanie obliczeń przy użyciu procesorów graficznych NVIDIA obsługujących technologię GPGPU (arbitralne przetwarzanie na kartach graficznych). Architektura CUDA po raz pierwszy pojawiła się na rynku wraz z wypuszczeniem na rynek chipa NVIDIA ósmej generacji – G80 i jest obecna we wszystkich kolejnych seriach układów graficznych, które są wykorzystywane w rodzinach akceleratorów GeForce, Quadro i Tesla. (c) Wikipedia.org

Strumienie przychodzące przetwarzane są niezależnie od siebie, tj. równoległy.

Istnieje podział na 3 poziomy:

Siatka- rdzeń. Zawiera jedno/dwu/trójwymiarową tablicę bloków.

Blok– zawiera wiele wątków. Wątki z różnych bloków nie mogą ze sobą współdziałać. Dlaczego konieczne było wprowadzenie bloków? Każdy blok jest zasadniczo odpowiedzialny za swoje własne podzadanie. Na przykład duży obraz (który jest matrycą) można podzielić na kilka mniejszych części (matryc) i pracować z każdą częścią obrazu równolegle.

Nitka- przepływ. Wątki w jednym bloku mogą wchodzić w interakcje albo poprzez pamięć współdzieloną, która, nawiasem mówiąc, jest znacznie szybsza niż pamięć globalna, albo poprzez narzędzia do synchronizacji wątków.

Osnowa to połączenie wątków oddziałujących ze sobą, dla wszystkich nowoczesnych procesorów graficznych rozmiar Warp wynosi 32. Następnie następuje półosnowy, co stanowi połowę osnowy, ponieważ Dostęp do pamięci następuje zwykle oddzielnie dla pierwszej i drugiej połowy osnowy.

Jak widać, ta architektura doskonale nadaje się do zadań równoległych. I choć programowanie odbywa się w języku C z pewnymi ograniczeniami, w rzeczywistości nie wszystko jest takie proste, bo… nie wszystko da się zrównać. Nie ma też standardowych funkcji generowania liczb losowych (lub inicjalizacji), wszystko to należy zaimplementować osobno. I choć gotowych opcji jest mnóstwo, żadna z nich nie sprawia radości. Możliwość stosowania rekurencji pojawiła się stosunkowo niedawno.

Dla przejrzystości napisano mały program konsolowy (w celu zminimalizowania kodu), który wykonuje operacje na dwóch tablicach typu float, tj. z wartościami niecałkowitymi. Z powodów podanych powyżej, inicjalizacja (wypełnianie tablicy różnymi dowolnymi wartościami) została przeprowadzona przez procesor. Następnie wykonano 25 różnych operacji na odpowiednich elementach z każdej tablicy, a wyniki pośrednie wpisano do trzeciej tablicy. Rozmiar tablicy uległ zmianie, wyniki są następujące:

W sumie przeprowadzono 4 testy:

1024 elementy w każdej tablicy:

Wyraźnie widać, że przy tak małej liczbie elementów przetwarzanie równoległe jest mało przydatne, ponieważ Same obliczenia są znacznie szybsze niż ich przygotowanie.

4096 elementów w każdej tablicy:

A teraz widać, że karta graficzna wykonuje operacje na tablicach 3 razy szybciej niż procesor. Co więcej, czas wykonania tego testu na karcie graficznej nie wzrósł (niewielki spadek czasu można przypisać błędowi).

W każdej tablicy znajduje się teraz 12288 elementów:

Separacja karty graficznej wzrosła 2 razy. Ponownie warto zauważyć, że czas wykonania na karcie graficznej wzrósł
nieznacznie, ale na procesorze ponad 3 razy, tj. proporcjonalnie do złożoności zadania.

Ostatni test to 36864 elementy w każdej tablicy:

W tym przypadku przyspieszenie osiąga imponujące wartości - prawie 22 razy większe na karcie graficznej. I znowu czas wykonania na karcie graficznej nieznacznie wzrósł, ale na procesorze - wymagane 3 razy, co znowu jest proporcjonalne do złożoności zadania.

Jeśli nadal będziesz komplikować obliczenia, karta graficzna wygrywa coraz więcej. Chociaż przykład jest nieco przesadzony, ogólna sytuacja jest wyraźnie widoczna. Ale jak wspomniano powyżej, nie wszystko można zrównoleglić. Na przykład obliczenie Pi. Istnieją tylko przykłady zapisane metodą Monte Carlo, ale dokładność obliczeń wynosi 7 miejsc po przecinku, tj. zwykły pływak. Aby zwiększyć dokładność obliczeń, wymagana jest długa arytmetyka i tu pojawiają się problemy, ponieważ Bardzo, bardzo trudno jest to skutecznie wdrożyć. Nie mogłem znaleźć w Internecie przykładów wykorzystujących CUDA i obliczających Pi z dokładnością do 1 miliona miejsc po przecinku. Podejmowano próby napisania takiej aplikacji, jednak najprostszą i najskuteczniejszą metodą obliczania Pi jest algorytm Brenta-Salamina lub wzór Gaussa. Dobrze znany SuperPI najprawdopodobniej (sądząc po szybkości działania i liczbie iteracji) wykorzystuje formułę Gaussa. I sądząc po
Ze względu na to, że SuperPI jest jednowątkowy, brak przykładów pod CUDA i fiasko moich prób, nie da się skutecznie zrównoleglić liczenia Pi.

Nawiasem mówiąc, można zauważyć, jak podczas obliczeń wzrasta obciążenie procesora graficznego, a także przydzielana jest pamięć.

Przejdźmy teraz do bardziej praktycznych zalet CUDA, a mianowicie do obecnie istniejących programów korzystających z tej technologii. W większości są to wszelkiego rodzaju konwertery i edytory audio/wideo.

W testach wykorzystano 3 różne pliki wideo:

      *Historia powstania filmu Avatar - 1920x1080, MPEG4, h.264.
      *Seria „Okłam mnie” – 1280x720, MPEG4, h.264.
      *Seria „W Filadelfii zawsze jest słonecznie” – 624x464, xvid.

Kontener i rozmiar pierwszych dwóch plików to .mkv i 1,55 GB, a ostatniego .avi i 272 MB.

Zacznijmy od bardzo rewelacyjnego i popularnego produktu – Badaboom. Zastosowana wersja - 1.2.1.74 . Koszt programu wynosi $29.90 .

Interfejs programu jest prosty i intuicyjny – po lewej stronie wybieramy plik źródłowy lub dysk, a po prawej – wymagane urządzenie, dla którego będziemy kodować. Dostępny jest także tryb użytkownika, w którym parametry ustawia się ręcznie, z czego my skorzystaliśmy.

Najpierw przyjrzyjmy się, jak szybko i sprawnie wideo jest kodowane „w sobie”, tj. tej samej rozdzielczości i w przybliżeniu tego samego rozmiaru. Prędkość będziemy mierzyć w fps, a nie w czasie, który upłynął - w ten sposób wygodniej jest porównać i obliczyć, jak bardzo zostanie skompresowany film o dowolnej długości. Ponieważ Dzisiaj rozważamy „zieloną” technologię, wtedy wykresy będą odpowiednie -)

Szybkość kodowania zależy bezpośrednio od jakości, to oczywiste. Warto zaznaczyć, że rozdzielczość światła (nazwijmy to tradycyjnie SD) nie stanowi dla Badabooma problemu – prędkość kodowania jest 5,5 razy większa niż oryginalna (24 kl./s) liczba klatek na sekundę. Program konwertuje nawet ciężkie wideo w rozdzielczości 1080p w czasie rzeczywistym. Warto zaznaczyć, że jakość finalnego filmu jest bardzo zbliżona do oryginalnego materiału wideo, tj. Badaboom koduje bardzo, bardzo wydajnie.

Ale zwykle przesyłają wideo do niższej rozdzielczości, zobaczmy, jak sprawy mają się w tym trybie. Wraz ze spadkiem rozdzielczości spadła także szybkość transmisji wideo. Było to 9500 kbps dla pliku wyjściowego 1080p, 4100 kbps dla 720p i 2400 kbps dla 720x404. Wyboru dokonano w oparciu o rozsądny stosunek wielkości do jakości.

Nie potrzeba żadnych komentarzy. Jeśli zrobisz rip z 720p do zwykłej jakości SD, to transkodowanie filmu trwającego 2 godziny zajmie około 30 minut. Jednocześnie obciążenie procesora będzie nieznaczne, możesz zajmować się swoimi sprawami bez odczuwania dyskomfortu.

Co się stanie, jeśli przekonwertujesz wideo na format dla urządzenia mobilnego? Aby to zrobić, wybierz profil iPhone'a (bitrate 1 Mbit/s, 480x320) i spójrz na prędkość kodowania:

Czy muszę coś mówić? Dwugodzinny film w normalnej jakości iPhone'a jest transkodowany w mniej niż 15 minut. W jakości HD jest to trudniejsze, ale wciąż bardzo szybkie. Najważniejsze jest to, że jakość wyjściowego wideo pozostaje na dość wysokim poziomie, gdy ogląda się go na wyświetlaczu telefonu.

Ogólnie wrażenia z Badaboom są pozytywne, szybkość działania przyjemna, a interfejs prosty i przejrzysty. Wszelkiego rodzaju błędy we wcześniejszych wersjach (korzystałem z wersji beta w 2008 r.) zostały naprawione. Z jednym wyjątkiem – ścieżka do pliku źródłowego, a także do folderu, w którym zapisany jest gotowy film, nie powinna zawierać rosyjskich liter. Ale w porównaniu z zaletami programu ta wada jest nieznaczna.

Następny w kolejce będziemy mieć Super LoiLoScope. Pytają o wersję zwykłą 3280 rubli, a za wersję dotykową, która obsługuje sterowanie dotykowe w Windows 7, proszą o tyle samo 4440 rubli. Spróbujmy dowiedzieć się, dlaczego deweloper chce takich pieniędzy i dlaczego edytor wideo potrzebuje obsługi wielodotyku. Używana najnowsza wersja - 1.8.3.3 .

Dość trudno opisać słowami interfejs programu, dlatego zdecydowałem się nagrać krótki film. Od razu powiem, że podobnie jak wszystkie konwertery wideo dla CUDA, akceleracja GPU jest obsługiwana tylko w przypadku wyjścia wideo do MPEG4 z kodekiem h.264.

Podczas kodowania obciążenie procesora wynosi 100%, ale nie powoduje to dyskomfortu. Przeglądarka i inne lekkie aplikacje nie zwalniają.

Przejdźmy teraz do wydajności. Na początek wszystko jest takie samo jak w Badaboom - transkodowanie wideo na podobną jakość.

Wyniki są znacznie lepsze niż Badaboom. Jakość też jest znakomita, różnicę w stosunku do oryginału można dostrzec dopiero porównując ramki parami pod lupą.

Wow, tutaj LoiloScope przewyższa Badaboom 2,5 razy. Jednocześnie można łatwo wycinać i kodować równolegle inny film, czytać wiadomości, a nawet oglądać filmy, a nawet FullHD odtwarza się bez problemów, nawet przy maksymalnym obciążeniu procesora.

Spróbujmy teraz zrobić film na urządzenie mobilne, nazwijmy profil tak samo jak w Badaboom - iPhone (480x320, 1 Mbit/s):

Nie ma żadnego błędu. Wszystko było sprawdzane kilka razy, za każdym razem wynik był taki sam. Najprawdopodobniej dzieje się tak z prostego powodu: plik SD został nagrany przy użyciu innego kodeka i w innym kontenerze. Podczas transkodowania wideo jest najpierw dekodowane, dzielone na matryce o określonym rozmiarze i kompresowane. Dekoder ASP używany w przypadku xvid jest wolniejszy niż AVC (dla h.264) przy dekodowaniu równoległym. Jednak 192 kl./s to 8 razy szybciej niż prędkość oryginalnego wideo; 23-minutowa seria jest kompresowana w mniej niż 4 minuty. Sytuacja powtórzyła się w przypadku innych plików skompresowanych do formatu xvid/DivX.

LoiloScope Zostawiłem same miłe wrażenia – interfejs, mimo swojej niecodzienności, jest wygodny i funkcjonalny, a szybkość działania jest nie do pochwały. Stosunkowo słaba funkcjonalność jest nieco frustrująca, ale często przy prostej instalacji wystarczy tylko nieznacznie dostosować kolory, wykonać płynne przejścia i dodać tekst, a LoiloScope radzi sobie z tym znakomicie. Cena też jest nieco przerażająca – ponad 100 dolarów za standardową wersję to norma za granicą, ale takie liczby wciąż wydają nam się nieco szalone. Choć przyznam, że gdybym np. często kręcił i montował domowe filmy, to pewnie zastanowiłbym się nad jego kupnem. Przy okazji sprawdziłem możliwość edycji treści HD (czy raczej AVCHD) bezpośrednio z kamery wideo, bez konieczności wcześniejszej konwersji na inny format, LoiloScope nie wykrył żadnych problemów z plikami typu .mts.

Nowa technologia jest jak nowo powstający gatunek ewolucyjny. Dziwne stworzenie, w przeciwieństwie do wielu starców. Czasem niezręcznie, czasem śmiesznie. I na początku jego nowe cechy wydają się w żaden sposób nie pasować do tego ustalonego i stabilnego świata.

Jednak mija trochę czasu i okazuje się, że początkujący biega szybciej, skacze wyżej i jest ogólnie silniejszy. I zjada więcej much niż jego wsteczni sąsiedzi. A potem ci sami sąsiedzi zaczynają rozumieć, że nie ma sensu kłócić się z tym niezdarnym byłym. Lepiej się z nim zaprzyjaźnić, a jeszcze lepiej zorganizować symbiozę. Zobaczysz, że będzie więcej much.

Technologia GPGPU (General-Purpose Graphics Processing Units – procesor graficzny ogólnego przeznaczenia) przez długi czas istniała jedynie w teoretycznych obliczeniach bystrych naukowców. Jak inaczej? Zaproponować radykalną zmianę procesu obliczeniowego, który rozwijał się przez dziesięciolecia, powierzając obliczenia jego równoległych gałęzi karcie graficznej - są do tego zdolni tylko teoretycy.

Logo technologii CUDA przypomina nam, że wyrosła ona w głębinach
Grafika 3D.

Jednak technologia GPGPU nie zamierzała długo zalegać kurzu na łamach czasopism uniwersyteckich. Puszywszy pióra swoich najlepszych cech, przyciągnęła uwagę producentów. Tak narodziła się CUDA – implementacja GPGPU na procesorach graficznych GeForce produkowanych przez firmę nVidia.

Dzięki CUDA technologie GPGPU stały się głównym nurtem. I teraz tylko najbardziej krótkowzroczni i pokryci grubą warstwą lenistwa programiści systemów programistycznych nie deklarują wsparcia dla CUDA w swoim produkcie. Publikacje IT uznały za zaszczyt przedstawienie szczegółów technologii w licznych obszernych artykułach popularnonaukowych, a konkurenci natychmiast zasiedli do wzorców i kompilatorów krzyżowych, aby opracować coś podobnego.

Publiczne uznanie to marzenie nie tylko aspirujących gwiazdek, ale także nowonarodzonych technologii. I CUDA miała szczęście. Jest dobrze znana, mówią i piszą o niej.

Po prostu piszą, jakby nadal dyskutowali o GPGPU w grubych czasopismach naukowych. Bombardują czytelnika mnóstwem terminów, takich jak „siatka”, „SIMD”, „warp”, „host”, „tekstura i stała pamięć”. Zanurzają go na sam szczyt w schematy organizacyjne procesorów graficznych nVidia, prowadzą go krętymi ścieżkami równoległych algorytmów i (najsilniejszy ruch) pokazują długie listy kodów w języku C. W rezultacie okazuje się, że na wejściu artykułu mamy świeżego czytelnika z palącą chęcią zrozumienia CUDA, a na wyjściu tego samego czytelnika, ale z zapuchniętą głową wypełnioną bałaganem faktów, diagramów , kod, algorytmy i terminy.

Tymczasem celem każdej technologii jest ułatwienie nam życia. CUDA radzi sobie z tym znakomicie. Wyniki jej pracy przekonają każdego sceptyka lepiej niż setki schematów i algorytmów.

Nie wszędzie

CUDA jest obsługiwana przez superkomputery o wysokiej wydajności
nVidii Tesli.

A jednak zanim przyjrzymy się efektom pracy CUDA w zakresie ułatwiania życia przeciętnemu użytkownikowi, warto poznać wszystkie jej ograniczenia. Podobnie jak z dżinem: dowolne pragnienie, ale jedno. CUDA ma także swoje pięty achillesowe. Jednym z nich są ograniczenia platform, na których może działać.

Lista kart graficznych nVidia obsługujących CUDA jest prezentowana na specjalnej liście o nazwie Produkty obsługujące CUDA. Lista jest imponująca, ale łatwa do sklasyfikowania. Obsługa CUDA nie jest odmawiana:

    Modele nVidia GeForce z serii 8, 9, 100, 200 i 400 z minimum 256 megabajtami pamięci wideo na pokładzie. Wsparcie obejmuje zarówno karty stacjonarne, jak i mobilne.

    Zdecydowana większość kart graficznych do komputerów stacjonarnych i mobilnych to nVidia Quadro.

    Wszystkie rozwiązania z serii netbooków nvidia ION.

    Wysokowydajne rozwiązania superkomputerowe HPC (High Performance Computing) i nVidia Tesla wykorzystywane zarówno do komputerów osobistych, jak i do organizowania skalowalnych systemów klastrowych.

Dlatego przed użyciem oprogramowania opartego na CUDA warto sprawdzić tę listę ulubionych.

Oprócz samej karty graficznej wymagany jest odpowiedni sterownik do obsługi CUDA. Jest to połączenie między procesorem centralnym a procesorem graficznym, działające jako rodzaj interfejsu oprogramowania umożliwiającego dostęp do kodu programu i danych do wielordzeniowej skarbnicy procesora graficznego. Aby mieć pewność, że nie popełnisz błędu, nVidia zaleca odwiedzenie strony sterowników i pobranie najnowszej wersji.

...ale sam proces

Jak działa CUDA? Jak wytłumaczyć złożony proces obliczeń równoległych na specjalnej architekturze sprzętowej GPU, nie zakopując czytelnika w otchłani szczegółowych terminów?

Możesz spróbować to zrobić, wyobrażając sobie, jak centralny procesor wykonuje program w symbiozie z procesorem graficznym.

Architektonicznie jednostka centralna (CPU) i jej odpowiednik graficzny (GPU) są zaprojektowane inaczej. Jeśli narysujemy analogię ze światem motoryzacji, to CPU to kombi, jeden z tych, które nazywa się „stodołą”. Wygląda jak samochód osobowy, ale jednocześnie (z punktu widzenia twórców) „to Szwajcar, żniwiarz i gracz na rurze”. Spełnia jednocześnie rolę małej ciężarówki, autobusu i przerośniętego hatchbacka. Krótko mówiąc, kombi. Ma kilka rdzeni cylindrycznych, ale radzi sobie z niemal każdym zadaniem, a imponująca pamięć podręczna jest w stanie przechować mnóstwo danych.

Ale GPU to samochód sportowy. Funkcja jest tylko jedna: jak najszybciej dostarczyć pilota do mety. Dlatego nie ma dużej pamięci w bagażniku, nie ma dodatkowych siedzeń. Ale rdzeni cylindrów jest setki razy więcej niż procesora.

Dzięki CUDA twórcy programów GPGPU nie muszą zagłębiać się w zawiłości programowania
rozwój dla silników graficznych, takich jak DirectX i OpenGL

W przeciwieństwie do procesora centralnego, który jest w stanie rozwiązać dowolne zadanie, w tym grafikę, ale przy średniej wydajności, procesor graficzny jest przystosowany do szybkiego rozwiązania jednego zadania: zamiany pęczka wielokątów na wejściu w pęczek pikseli na wyjście. Co więcej, problem ten można rozwiązać równolegle, wykorzystując setki stosunkowo prostych rdzeni obliczeniowych w GPU.

Jaki więc może być tandem z kombi i samochodu sportowego? CUDA działa mniej więcej tak: program działa na procesorze, dopóki nie pojawi się sekcja kodu, którą można wykonać równolegle. Następnie, zamiast powoli wykonywać go na dwóch (a nawet ośmiu) rdzeniach najfajniejszego procesora, jest on przenoszony na setki rdzeni GPU. Jednocześnie czas wykonania tej sekcji ulega znacznemu skróceniu, co oznacza również skrócenie czasu wykonania całego programu.

Technologicznie dla programisty nic się nie zmienia. Kod programów CUDA napisany jest w języku C. Dokładniej, w jego specjalnym dialekcie „C ze strumieniami” (C ze strumieniami). To rozszerzenie języka C, opracowane w Stanford, nosi nazwę Brook. Interfejs przesyłający kod Brooka do procesora graficznego to sterownik karty graficznej obsługującej CUDA. Organizuje cały proces przetwarzania tej części programu tak, aby dla programisty procesor graficzny wyglądał jak koprocesor procesora. Bardzo podobne do użycia koprocesora matematycznego we wczesnych latach komputerów osobistych. Wraz z pojawieniem się Brook, kart graficznych z obsługą CUDA i sterowników do nich, każdy programista mógł uzyskać dostęp do procesora graficznego w swoich programach. Ale wcześniej szamanizm był własnością wąskiego kręgu wybranych ludzi, którzy spędzili lata na doskonaleniu technik programowania dla silników graficznych DirectX lub OpenGL.

Do beczki tego pretensjonalnego miodu – pochwała CUDA – warto wsadzić muchę, czyli ograniczenia. Nie każdy problem wymagający zaprogramowania da się rozwiązać za pomocą CUDA. Przyspieszenie rozwiązywania rutynowych zadań biurowych nie będzie możliwe, ale możesz zaufać CUDA, która obliczy zachowanie tysięcy wojowników tego samego typu w World of Warcraft. Ale to zadanie wymyślone. Spójrzmy na przykłady tego, co CUDA już rozwiązuje bardzo skutecznie.

Sprawiedliwe uczynki

CUDA to bardzo pragmatyczna technologia. Po zaimplementowaniu obsługi w swoich kartach graficznych nVidia słusznie spodziewała się, że baner CUDA zostanie podjęty przez wielu entuzjastów zarówno w środowisku uniwersyteckim, jak i komercyjnym. I tak się stało. Projekty oparte na CUDA żyją i przynoszą korzyści.

NVIDIA PhysX

Reklamując swoje kolejne gamingowe arcydzieło, producenci często podkreślają jego realizm 3D. Ale niezależnie od tego, jak realny może być świat gier 3D, jeśli podstawowe prawa fizyki, takie jak grawitacja, tarcie i hydrodynamika, zostaną niewłaściwie zaimplementowane, fałsz zostanie natychmiast wyczuty.

Jedną z możliwości silnika fizycznego NVIDIA PhysX jest realistyczna praca z tkankami.

Implementacja algorytmów do komputerowej symulacji podstawowych praw fizycznych jest zadaniem bardzo pracochłonnym. Najbardziej znanymi firmami w tej dziedzinie są irlandzka firma Havok ze swoją wieloplatformową fizyczną Havok Physics oraz kalifornijska Ageia – protoplasta pierwszego na świecie procesora fizycznego (PPU – Physics Processing Unit) i odpowiadającego mu silnika fizycznego PhysX. Pierwszy z nich, choć przejęty przez Intela, obecnie aktywnie pracuje nad optymalizacją silnika Havok dla kart graficznych ATI i procesorów AMD. Ale Ageia ze swoim silnikiem PhysX stała się częścią nVidii. Jednocześnie nVidia rozwiązała dość trudny problem dostosowania PhysX do technologii CUDA.

Stało się to możliwe dzięki statystykom. Statystycznie udowodniono, że niezależnie od tego, jak skomplikowany jest rendering, niektóre jego rdzenie są nadal bezczynne. To na tych rdzeniach pracuje silnik PhysX.

Dzięki CUDA lwia część obliczeń związanych z fizyką świata gry zaczęła być wykonywana na karcie graficznej. Uwolniona moc centralnego procesora została wykorzystana do rozwiązania innych problemów związanych z rozgrywką. Na wynik nie trzeba było długo czekać. Według ekspertów wzrost wydajności w rozgrywce z PhysX działającym na CUDA wzrósł co najmniej o rząd wielkości. Wzrosło także prawdopodobieństwo realizacji praw fizycznych. CUDA zajmuje się rutynowymi obliczeniami realizacji tarcia, grawitacji i innych znanych nam rzeczy dla obiektów wielowymiarowych. Teraz nie tylko bohaterowie i ich ekwipunek doskonale wpisują się w prawa znanego nam świata fizycznego, ale także kurz, mgła, fala uderzeniowa, płomień i woda.

Wersja CUDA pakietu kompresji tekstur NVIDIA Structure Tools 2

Czy lubisz realistyczne obiekty we współczesnych grach? Warto to podziękować twórcom tekstur. Ale im więcej rzeczywistości jest w fakturze, tym większa jest jej objętość. Tym więcej zajmuje cenną pamięć. Aby tego uniknąć, tekstury są wstępnie kompresowane i dynamicznie dekompresowane w razie potrzeby. A kompresja i dekompresja to czyste obliczenia. Do pracy z teksturami firma nVidia udostępniła pakiet NVIDIA Structure Tools. Obsługuje wydajną kompresję i dekompresję tekstur DirectX (tzw. format HF). Druga wersja tego pakietu może pochwalić się obsługą algorytmów kompresji BC4 i BC5 zaimplementowanych w technologii DirectX 11. Najważniejsze jest jednak to, że NVIDIA Textur Tools 2 zawiera obsługę CUDA. Według nVidii daje to 12-krotny wzrost wydajności w zadaniach kompresji i dekompresji tekstur. Oznacza to, że klatki rozgrywki będą ładowały się szybciej i zachwycą gracza swoim realizmem.

Pakiet NVIDIA Structure Tools 2 został zaprojektowany do współpracy z CUDA. Wzrost wydajności podczas kompresji i dekompresji tekstur jest oczywisty.

Zastosowanie CUDA może znacznie poprawić efektywność nadzoru wideo.

Przetwarzanie strumienia wideo w czasie rzeczywistym

Cokolwiek by nie powiedzieć, obecny świat, z punktu widzenia szpiegostwa, jest znacznie bliższy światowi Wielkiego Brata Orwella, niż się wydaje. Zarówno kierowcy samochodów, jak i osoby odwiedzające miejsca publiczne odczuwają wzrok kamer wideo.

Pełne rzeki informacji wideo płyną do ośrodków jej przetwarzania i… wpadają na wąskie ogniwo – osobę. W większości przypadków jest on ostatnim autorytetem monitorującym świat wideo. Co więcej, władza nie jest najskuteczniejsza. Mruga, rozprasza się i próbuje zasnąć.

Dzięki CUDA możliwe stało się zaimplementowanie algorytmów jednoczesnego śledzenia wielu obiektów w strumieniu wideo. W tym przypadku proces odbywa się w czasie rzeczywistym, a wideo ma pełne 30 kl./s. W porównaniu z implementacją takiego algorytmu na nowoczesnych wielordzeniowych procesorach, CUDA daje dwu-, trzykrotny wzrost wydajności, a to, jak widać, całkiem sporo.

Konwersja wideo, filtrowanie audio

Konwerter wideo Badaboom jako pierwszy wykorzystuje CUDA do przyspieszenia konwersji.

Miło jest oglądać nowy produkt do wypożyczania filmów w jakości FullHD i na dużym ekranie. Ale nie możesz zabrać ze sobą dużego ekranu w podróż, a kodek wideo FullHD będzie czkał na procesorze gadżetu mobilnego o niskim poborze mocy. Na ratunek przychodzi konwersja. Ale większość tych, którzy zetknęli się z tym w praktyce, narzeka na długi czas konwersji. Jest to zrozumiałe, proces jest rutynowy, nadaje się do równoległości, a jego wykonanie na procesorze nie jest zbyt optymalne.

Ale CUDA radzi sobie z tym z hukiem. Pierwszym znakiem jest konwerter Badaboom od Elevental. Programiści Badaboom podjęli właściwą decyzję wybierając CUDA. Testy pokazują, że konwertuje standardowy, półtorej godziny filmu do formatu iPhone'a/iPoda Touch w mniej niż dwadzieścia minut. I to pomimo faktu, że przy użyciu samego procesora proces ten zajmuje ponad godzinę.

Pomaga CUDA i profesjonalnym miłośnikom muzyki. Każdy z nich oddałby pół królestwa za efektowną zwrotnicę FIR – zestaw filtrów dzielących widmo dźwięku na kilka pasm. Proces ten jest bardzo pracochłonny i przy dużej objętości materiału audio zmusza inżyniera dźwięku do „dymienia” przez kilka godzin. Wdrożenie crossovera FIR opartego na CUDA przyspiesza jego działanie setki razy.

Przyszłość CUDA

Urzeczywistniwszy technologię GPGPU, CUDA nie spoczywa na laurach. Jak wszędzie, w CUDA działa zasada odbicia: teraz nie tylko architektura procesorów wideo nVidia wpływa na rozwój wersji CUDA SDK, ale sama technologia CUDA zmusza nVidię do ponownego rozważenia architektury swoich chipów. Przykładem takiej refleksji jest platforma nVidia ION. Jego druga wersja jest specjalnie zoptymalizowana do rozwiązywania problemów CUDA. Oznacza to, że nawet w stosunkowo niedrogich rozwiązaniach sprzętowych konsumenci otrzymają całą moc i genialne możliwości CUDA.

A przeznaczony jest do tłumaczenia kodu hosta (kod główny, sterujący) i kodu urządzenia (kod sprzętowy) (pliki z rozszerzeniem .cu) na pliki obiektowe odpowiednie do procesu asemblowania finalnego programu lub biblioteki w dowolnym środowisku programistycznym, np. w NetBeansie.

Architektura CUDA wykorzystuje model pamięci grid, modelowanie wątków klastrowych i instrukcje SIMD. Ma zastosowanie nie tylko do wysokowydajnych obliczeń graficznych, ale także do różnych obliczeń naukowych przy użyciu kart graficznych nVidia. Naukowcy i badacze powszechnie wykorzystują CUDA w różnych dziedzinach, w tym w astrofizyce, biologii obliczeniowej i chemii, modelowaniu dynamiki płynów, oddziaływaniach elektromagnetycznych, tomografii komputerowej, analizie sejsmicznej i nie tylko. CUDA ma możliwość łączenia się z aplikacjami wykorzystującymi OpenGL i Direct3D. CUDA to wieloplatformowe oprogramowanie dla systemów operacyjnych takich jak Linux, Mac OS X i Windows.

22 marca 2010 roku firma nVidia wypuściła CUDA Toolkit 3.0, który zawierał obsługę OpenCL.

Sprzęt

Platforma CUDA pojawiła się po raz pierwszy na rynku wraz z wypuszczeniem ósmej generacji układu NVIDIA G80 i stała się obecna we wszystkich kolejnych seriach układów graficznych, które są wykorzystywane w rodzinach akceleratorów GeForce, Quadro i NVidia Tesla.

Pierwsza seria sprzętu obsługująca CUDA SDK, G8x, miała 32-bitowy procesor wektorowy o pojedynczej precyzji, wykorzystujący CUDA SDK jako API (CUDA obsługuje podwójny typ C, ale jego precyzja została teraz zmniejszona do 32-bitów zmiennoprzecinkowy). Późniejsze procesory GT200 obsługują precyzję 64-bitową (tylko SFU), ale wydajność jest znacznie gorsza niż w przypadku precyzji 32-bitowej (ze względu na fakt, że na multiprocesor strumieniowy przypadają tylko dwie jednostki SFU, podczas gdy procesorów skalarnych jest osiem). Procesor graficzny organizuje wielowątkowość sprzętową, co pozwala na wykorzystanie wszystkich zasobów procesora graficznego. Otwiera się zatem perspektywa przeniesienia funkcji akceleratora fizycznego na akcelerator graficzny (przykładem wdrożenia jest nVidia PhysX). Otwiera także szerokie możliwości wykorzystania sprzętu grafiki komputerowej do wykonywania złożonych obliczeń niegraficznych: na przykład w biologii obliczeniowej i innych gałęziach nauki.

Zalety

W porównaniu z tradycyjnym podejściem do organizacji obliczeń ogólnego przeznaczenia poprzez graficzne API, architektura CUDA ma w tym obszarze następujące zalety:

Ograniczenia

  • Wszystkie funkcje wykonywalne na urządzeniu nie obsługują rekurencji (CUDA Toolkit 3.1 obsługuje wskaźniki i rekurencję) i mają pewne inne ograniczenia

Obsługiwane procesory graficzne i akceleratory graficzne

Lista urządzeń producenta sprzętu Nvidia z deklarowanym pełnym wsparciem dla technologii CUDA znajduje się na oficjalnej stronie Nvidii: CUDA-Enabled GPU Products (j. ang.).

W rzeczywistości następujące urządzenia peryferyjne obsługują obecnie technologię CUDA na rynku sprzętu komputerowego:

Wersja specyfikacji GPU Karty wideo
1.0 G80, G92, G92b, G94, G94b GeForce 8800GTX/Ultra, 9400GT, 9600GT, 9800GT, Tesla C/D/S870, FX4/5600, 360M, GT 420
1.1 G86, G84, G98, G96, G96b, G94, G94b, G92, G92b GeForce 8400GS/GT, 8600GT/GTS, 8800GT/GTS, 9600 GSO, 9800GTX/GX2, GTS 250, GT 120/30/40, FX 4/570, 3/580, 17/18/3700, 4700x2, 1xxM, 32 /370M, 3/5/770M, 16/17/27/28/36/37/3800M, NVS420/50
1.2 GT218, GT216, GT215 GeForce 210, GT 220/40, FX380 LP, 1800M, 370/380M, NVS 2/3100M
1.3 GT200, GT200b GeForce GTX 260, GTX 275, GTX 280, GTX 285, GTX 295, Tesla C/M1060, S1070, Quadro CX, FX 3/4/5800
2.0 GF100, GF110 GeForce (GF100) GTX 465, GTX 470, GTX 480, Tesla C2050, C2070, S/M2050/70, Quadro Plex 7000, Quadro 4000, 5000, 6000, GeForce (GF110) GTX 560 TI 448, GTX570, GTX580, GTX590
2.1 GF104, GF114, GF116, GF108, GF106 GeForce 610M, GT 430, GT 440, GTS 450, GTX 460, GTX 550 Ti, GTX 560, GTX 560 Ti, 500M, Quadro 600, 2000
3.0 GK104, GK106, GK107 GeForce GTX 690, GTX 680, GTX 670, GTX 660 Ti, GTX 660, GTX 650 Ti, GTX 650, GT 640, GeForce GTX 680MX, GeForce GTX 680M, GeForce GTX 675MX, GeForce GTX 670MX, GTX 660M, GeForce GT 650M, GeForce GT 645M, GeForce GT 640M
3.5 GK110
Nvidia GeForce dla komputerów stacjonarnych
GeForce GTX 590
GeForce GTX 580
GeForce GTX 570
GeForce GTX 560 Ti
GeForce GTX 560
GeForce GTX 550 Ti
GeForce GTX 520
GeForce GTX 480
GeForce GTX 470
GeForce GTX 465
GeForce GTX 460
GeForce GTS450
GeForce GTX 295
GeForce GTX 285
GeForce GTX 280
GeForce GTX 275
GeForce GTX 260
GeForce GTS 250
GeForceGT240
GeForce GT 220
GeForce210
GeForce GTS 150
GeForce GT 130
GeForce GT 120
GeForce’a G100
GeForce 9800 GX2
GeForce 9800 GTX+
GeForce'a 9800 GTX
GeForce 9800GT
GeForce 9600 GSO
GeForce 9600 GT
GeForce 9500 GT
GeForce 9400 GT
GeForce 9400mGPU
GeForce 9300 mGPU
GeForce 8800 GTS 512
GeForce 8800 GT
GeForce 8600GTS
GeForce 8600 GT
GeForce 8500 GT
GeForce 8400GS
Nvidia GeForce dla komputerów mobilnych
GeForce GTX 580M
GeForce GTX 570M
GeForce GTX 560M
GeForce GT555M
GeForce GT540M
GeForce GT525M
GeForce GT520M
GeForce GTX 485M
GeForce GTX 480M
GeForce GTX 470M
GeForce GTX 460M
GeForce GT445M
GeForce GT435M
GeForce GT425M
GeForce GT420M
GeForce GT415M
GeForce GTX 285M
GeForce GTX 280M
GeForce GTX 260M
GeForce GTS 360M
GeForce GTS 350M
GeForce GTS 160M
GeForce GTS 150M
GeForce GT 335M
GeForce GT330M
GeForce GT 325M
GeForce GT240M
GeForce GT 130M
GeForce G210M
GeForce G110M
GeForce G105M
GeForce310M
GeForce305M
GeForce 9800M GTX
GeForce 9800M GT
GeForce 9800M GTS
GeForce 9700M GTS
GeForce 9700M GT
GeForce 9650MGS
GeForce 9600M GT
GeForce 9600MGS
GeForce 9500MGS
GeForce 9500M G
GeForce 9300MGS
GeForce 9300M G
GeForce 9200MGS
GeForce 9100M G
GeForce 8800M GTS
GeForce 8700M GT
GeForce 8600M GT
GeForce 8600MGS
GeForce 8400M GT
GeForce 8400MGS
Nvidii Tesli *
Tesli C2050/C2070
Tesli M2050/M2070/M2090
Tesli S2050
Tesli S1070
Tesli M1060
Tesli C1060
Tesli C870
Tesli D870
Tesli S870
Nvidia Quadro dla komputerów stacjonarnych
Quadro 6000
Quadro 5000
Quadro 4000
Quadro 2000
Quadro 600
QuadroFX5800
QuadroFX5600
Quadro FX 4800
Quadro FX 4700 X2
Quadro FX 4600
QuadroFX3700
Quadro FX 1700
Quadro FX 570
Quadro FX 470
Niskoprofilowy Quadro FX 380
Quadro FX 370
Niskoprofilowy Quadro FX 370
Quadro CX
Quadro NVS 450
Quadro NVS 420
Quadro NVS 290
QuadroPlex 2100 D4
QuadroPlex 2200 D2
QuadroPlex 2100 S4
Quadro Plex 1000 Model IV
Nvidia Quadro do komputerów przenośnych
Quadro 5010M
Quadro 5000M
Quadro 4000M
Quadro 3000M
Quadro 2000M
Quadro 1000M
Quadro FX 3800M
Quadro FX 3700M
Quadro FX 3600M
Quadro FX2800M
Quadro FX2700M
Quadro FX 1800M
Quadro FX 1700M
Quadro FX 1600M
Quadro FX 880M
Quadro FX 770M
Quadro FX 570M
Quadro FX 380M
Quadro FX 370M
Quadro FX 360M
Quadro NVS 5100M
Quadro NVS 4200M
Quadro NVS 3100M
Quadro NVS 2100M
Quadro NVS 320M
Quadro NVS 160M
Quadro NVS 150M
Quadro NVS 140M
Quadro NVS 135M
Quadro NVS 130M
  • Modele Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 umożliwiają obliczenia GPU z podwójną precyzją.

Funkcje i specyfikacje różnych wersji

Obsługa funkcji (niewymienione na liście funkcje to
obsługiwane dla wszystkich możliwości obliczeniowych)
Możliwości obliczeniowe (wersja)
1.0 1.1 1.2 1.3 2.x

32-bitowe słowa w pamięci globalnej
NIE Tak

wartości zmiennoprzecinkowe w pamięci globalnej
Całkowite funkcje atomowe działające na
32-bitowe słowa w pamięci współdzielonej
NIE Tak
atomicExch() działająca w systemie 32-bitowym
wartości zmiennoprzecinkowe w pamięci współdzielonej
Całkowite funkcje atomowe działające na
64-bitowe słowa w pamięci globalnej
Funkcje głosowania w trybie Warp
Operacje zmiennoprzecinkowe o podwójnej precyzji NIE Tak
Funkcje atomowe działające w systemie 64-bitowym
wartości całkowite w pamięci współdzielonej
NIE Tak
Działające zmiennoprzecinkowe dodawanie atomowe
32-bitowe słowa w pamięci globalnej i współdzielonej
_balotować()
_threadfence_system()
_syncthreads_count(),
_syncthreads_and(),
_syncthreads_or()
Funkcje powierzchni
Siatka 3D bloków gwintów
Specyfikacja techniczna Możliwości obliczeniowe (wersja)
1.0 1.1 1.2 1.3 2.x
Maksymalna wymiarowość siatki bloków gwintów 2 3
Maksymalny wymiar x, y lub z siatki bloków gwintów 65535
Maksymalna wymiarowość bloku gwintu 3
Maksymalny wymiar x lub y bloku 512 1024
Maksymalny wymiar Z bloku 64
Maksymalna liczba wątków na blok 512 1024
Rozmiar osnowy 32
Maksymalna liczba bloków rezydentnych na wieloprocesor 8
Maksymalna liczba rezydentnych warpów na wieloprocesor 24 32 48
Maksymalna liczba wątków rezydentnych na wieloprocesor 768 1024 1536
Liczba rejestrów 32-bitowych na wieloprocesor 8 tys 16 tys 32 tys
Maksymalna ilość pamięci współdzielonej na wieloprocesor 16KB 48KB
Liczba banków pamięci współdzielonej 16 32
Ilość pamięci lokalnej na wątek 16KB 512 kB
Stały rozmiar pamięci 64KB
Zestaw roboczy pamięci podręcznej na wieloprocesor w celu zapewnienia stałej pamięci 8KB
Zestaw roboczy pamięci podręcznej na wieloprocesor dla pamięci tekstur W zależności od urządzenia, od 6 KB do 8 KB
Maksymalna szerokość tekstury 1D
8192 32768
Maksymalna szerokość tekstury 1D
odniesienie powiązane z pamięcią liniową
2 27
Maksymalna szerokość i liczba warstw
dla odniesienia do tekstury warstwowej 1D
8192 x 512 16384 x 2048
Maksymalna szerokość i wysokość dla 2D
odniesienie do tekstury powiązane z
pamięć liniowa lub tablica CUDA
65536 x 32768 65536 x 65535
Maksymalna szerokość, wysokość i liczba
warstw dla odniesienia do tekstury warstwowej 2D
8192 x 8192 x 512 16384x16384x2048
Maksymalna szerokość, wysokość i głębokość
dla odniesienia do tekstury 3D powiązanego z liniowym
pamięć lub tablica CUDA
2048x2048x2048
Maksymalna liczba tekstur, które
można powiązać z jądrem
128
Maksymalna szerokość powierzchni 1D
odwołanie powiązane z tablicą CUDA
Nie
utrzymany
8192
Maksymalna szerokość i wysokość dla 2D
odniesienie do powierzchni powiązane z tablicą CUDA
8192 x 8192
Maksymalna liczba powierzchni, które
można powiązać z jądrem
8
Maksymalna liczba instrukcji na
jądro
2 miliony

Przykład

CudaArray* cu_array; tekstura< float , 2 >teks; // Przydziel tablicę cudaMalloc( & cu_array, cudaCreateChannelDesc< float>(), szerokość wysokość) ; // Skopiuj dane obrazu do tablicy cudaMemcpy( cu_array, image, szerokość* wysokość, cudaMemcpyHostToDevice) ; // Powiąż tablicę z teksturą cudaBindTexture( tex, cu_array) ; // Uruchom jądro dim3 blockDim(16, 16, 1) ; dim3 gridDim(szerokość /wymbloku.x, wysokość /wymbloku.y, 1) ; jądro<<< gridDim, blockDim, 0 >>> (d_odata, szerokość, wysokość) ; cudaUnbindTexture(tex) ; __global__ void kernel(float * odata, int wysokość, int szerokość) ( unsigned int x = blockIdx.x * blockDim.x + threadIdx.x ; unsigned int y = blockIdx.y * blockDim.y + threadIdx.y ; float c = texfetch(tex, x, y) ; odata[ y* szerokość+ x] = c; )

Importuj pycuda.driver jako drv import numpy drv.init() dev = drv.Device(0) ctx = dev.make_context() mod = drv.SourceModule( """ __global__ void multiply_them(float *dest, float *a, float *b) ( const int i = threadIdx.x; dest[i] = a[i] * b[i]; ) """) multiply_them = mod.get_function („multiply_them” ) a = numpy.random .randn (400 ) .astype (numpy.float32 ) b = numpy.random .randn (400 ) .astype (numpy.float32 ) dest = numpy.zeros_like (a) multiply_them( drv.Out (dest) , drv.In (a) , drv.In (b) , block= (400 , 1 , 1 ) ) print dest-a*b

CUDA jako przedmiot na uniwersytetach

Według stanu na grudzień 2009 r. modelu oprogramowania CUDA naucza się na 269 uniwersytetach na całym świecie. W Rosji szkolenia z CUDA prowadzone są na Politechnice w Petersburgu i na Uniwersytecie Państwowym w Jarosławiu. P. G. Demidow, Moskwa, Niżny Nowogród, St. Petersburg, Twer, Kazań, Nowosybirsk, Państwowy Uniwersytet Techniczny w Nowosybirsku, Państwowe Uniwersytety w Omsku i Permie, Międzynarodowy Uniwersytet Natury Społeczeństwa i Człowieka „Dubna”, Państwowy Uniwersytet Energetyczny w Iwanowie, Państwowy Uniwersytet w Biełgorodzie , MSTU im. Baumana, Rosyjski Uniwersytet Techniki Chemicznej imienia. Mendelejew, Międzyregionalne Centrum Superkomputerowe RAS, . Ponadto w grudniu 2009 roku ogłoszono, że rozpoczął działalność pierwszy rosyjski ośrodek naukowo-edukacyjny „Parallel Computing”, zlokalizowany w mieście Dubna, którego zadania obejmują szkolenia i konsultacje w zakresie rozwiązywania złożonych problemów obliczeniowych na procesorach graficznych.

Na Ukrainie kursy dotyczące CUDA prowadzone są w Kijowskim Instytucie Analizy Systemów.

Spinki do mankietów

Oficjalne zasoby

  • Strefa CUDA (rosyjski) - oficjalna strona CUDA
  • CUDA GPU Computing (angielski) - oficjalne fora internetowe poświęcone obliczeniom CUDA

Nieoficjalne źródła

Sprzęt Toma
  • Dmitrij Czekanow. nVidia CUDA: przetwarzanie na karcie graficznej czy śmierć procesora? . Tom's Hardware (22 czerwca 2008 r.) Zarchiwizowane
  • Dmitrij Czekanow. nVidia CUDA: Test porównawczy aplikacji GPU dla rynku masowego. Tom's Hardware (19 maja 2009 r.) Zarchiwizowane od oryginału 4 marca 2012 r. Pobrano 19 maja 2009 r.
iXBT.com
  • Aleksiej Berillo. NVIDIA CUDA - obliczenia niegraficzne na procesorach graficznych. Część 1 . iXBT.com (23 września 2008). Zarchiwizowane od oryginału w dniu 4 marca 2012 r. Źródło 20 stycznia 2009 r.
  • Aleksiej Berillo. NVIDIA CUDA - obliczenia niegraficzne na procesorach graficznych. Część 2 . iXBT.com (22 października 2008). - Przykłady implementacji NVIDIA CUDA. Zarchiwizowane od oryginału w dniu 4 marca 2012 r. Źródło 20 stycznia 2009 r.
Inne zasoby
  • Boreskow Aleksiej Wiktorowicz. Podstawy CUDA (20 stycznia 2009). Zarchiwizowane od oryginału w dniu 4 marca 2012 r. Źródło 20 stycznia 2009 r.
  • Włodzimierz Frołow. Wprowadzenie do technologii CUDA. Magazyn internetowy „Grafika Komputerowa i Multimedia” (19.12.2008). Zarchiwizowane od oryginału w dniu 4 marca 2012 r. Źródło 28 października 2009 r.
  • Igor Oskolkow. NVIDIA CUDA to niedrogi bilet do świata wielkich obliczeń. Computerra (30 kwietnia 2009). Źródło 3 maja 2009.
  • Włodzimierz Frołow. Wprowadzenie do technologii CUDA (1 sierpnia 2009). Zarchiwizowane od oryginału w dniu 4 marca 2012 r. Źródło 3 kwietnia 2010 r.
  • GPGPU.ru. Używanie kart graficznych do obliczeń
  • . Centrum obliczeń równoległych

Notatki

Zobacz też

W rozwoju nowoczesnych procesorów istnieje tendencja do stopniowego zwiększania liczby rdzeni, co zwiększa ich możliwości w obliczeniach równoległych. Jednak od dawna dostępne są procesory graficzne, które pod tym względem znacznie przewyższają procesory. I te możliwości procesorów graficznych zostały już uwzględnione przez część firm. Pierwsze próby wykorzystania akceleratorów graficznych do obliczeń non-target podejmowano od końca lat 90-tych. Ale dopiero pojawienie się shaderów stało się impulsem do rozwoju zupełnie nowej technologii, a w 2003 roku pojawiła się koncepcja GPGPU (jednostek przetwarzania grafiki ogólnego przeznaczenia). Ważną rolę w rozwoju tej inicjatywy odegrał BrookGPU, będący specjalnym rozszerzeniem języka C. Przed pojawieniem się BrookGPU programiści mogli pracować z procesorami graficznymi jedynie poprzez API Direct3D lub OpenGL. Brook umożliwił programistom pracę w znanym środowisku, a sam kompilator, korzystając ze specjalnych bibliotek, zaimplementował interakcję z procesorem graficznym na niskim poziomie.

Taki postęp nie mógł nie przyciągnąć uwagi liderów tej branży - AMD i NVIDIA, które rozpoczęły opracowywanie własnych platform oprogramowania do obliczeń niegraficznych na swoich kartach graficznych. Nikt nie zna lepiej niż twórcy procesorów graficznych wszystkich niuansów i funkcji swoich produktów, co pozwala tym samym firmom optymalizować pakiet oprogramowania pod kątem konkretnych rozwiązań sprzętowych tak efektywnie, jak to możliwe. Obecnie NVIDIA rozwija platformę CUDA (Compute Unified Device Architecture), AMD nazywa podobną technologię CTM (Close To Metal) lub AMD Stream Computing. Przyjrzymy się niektórym możliwościom CUDA i ocenimy w praktyce możliwości obliczeniowe układu graficznego G92 karty graficznej GeForce 8800 GT.

Ale najpierw przyjrzyjmy się niektórym niuansom wykonywania obliczeń przy użyciu procesorów graficznych. Ich główną zaletą jest to, że układ graficzny jest początkowo zaprojektowany do wykonywania wielu wątków, podczas gdy każdy rdzeń konwencjonalnego procesora wykonuje strumień instrukcji sekwencyjnych. Każdy nowoczesny procesor graficzny to wieloprocesor składający się z kilku klastrów obliczeniowych, z których każdy zawiera wiele jednostek ALU. Najpotężniejszy współczesny chip GT200 składa się z 10 takich klastrów, z których każdy ma 24 procesory strumieniowe. Testowana karta graficzna GeForce 8800 GT oparta na chipie G92 posiada siedem dużych jednostek obliczeniowych, z których każda posiada 16 procesorów strumieniowych. Procesory wykorzystują bloki SIMD SSE do obliczeń wektorowych (pojedyncza instrukcja wiele danych - jedna instrukcja wykonywana jest na wielu danych), co wymaga przekształcenia danych na 4 wektory. Procesor graficzny przetwarza wątki skalarnie, tj. jedna instrukcja stosowana jest w kilku wątkach (SIMT – pojedyncza instrukcja wiele wątków). Oszczędza to programistom konieczności konwertowania danych na wektory i umożliwia dowolne rozgałęzianie strumieni. Każda jednostka obliczeniowa GPU ma bezpośredni dostęp do pamięci. A przepustowość pamięci wideo jest większa, dzięki zastosowaniu kilku oddzielnych kontrolerów pamięci (w topowym G200 jest 8 64-bitowych kanałów) i wysokim częstotliwościom pracy.

Ogólnie rzecz biorąc, w niektórych zadaniach podczas pracy z dużą ilością danych procesory graficzne są znacznie szybsze niż procesory CPU. Poniżej znajduje się ilustracja tego stwierdzenia:


Wykres przedstawia dynamikę wzrostu wydajności CPU i GPU od 2003 roku. NVIDIA lubi przytaczać te dane jako reklamę w swoich dokumentach, jednak są to jedynie obliczenia teoretyczne i w rzeczywistości różnica może oczywiście okazać się znacznie mniejsza.

Tak czy inaczej, istnieje ogromny potencjał procesorów graficznych, które można wykorzystać, a co wymaga specyficznego podejścia do tworzenia oprogramowania. Wszystko to jest realizowane w środowisku sprzętowo-programowym CUDA, które składa się z kilku poziomów oprogramowania – wysokopoziomowego API CUDA Runtime oraz niskopoziomowego API sterownika CUDA.


CUDA wykorzystuje do programowania standardowy język C, co jest jedną z jego głównych zalet dla programistów. Początkowo CUDA zawiera biblioteki BLAS (podstawowy pakiet algebry liniowej) i FFT (transformata Fouriera). CUDA posiada także możliwość interakcji z graficznymi API OpenGL lub DirectX, możliwość rozwoju na niskim poziomie oraz charakteryzuje się zoptymalizowaną dystrybucją strumieni danych pomiędzy CPU i GPU. Obliczenia CUDA wykonywane są jednocześnie z obliczeniami graficznymi, w przeciwieństwie do podobnej platformy AMD, gdzie do obliczeń na GPU uruchamiana jest specjalna maszyna wirtualna. Ale takie „współżycie” jest również obarczone błędami, jeśli graficzny interfejs API generuje duże obciążenie, gdy CUDA działa jednocześnie - w końcu operacje graficzne nadal mają wyższy priorytet. Platforma jest kompatybilna z 32- i 64-bitowymi systemami operacyjnymi Windows XP, Windows Vista, MacOS X oraz różnymi wersjami systemu Linux. Platforma ma charakter otwarty i na stronie, oprócz specjalnych sterowników do karty graficznej, można pobrać pakiety oprogramowania CUDA Toolkit, CUDA Developer SDK, zawierające kompilator, debugger, standardowe biblioteki i dokumentację.

Jeśli chodzi o praktyczne wdrożenie CUDA, to przez długi czas technologia ta była wykorzystywana wyłącznie do wysoce specjalistycznych obliczeń matematycznych z zakresu fizyki cząstek elementarnych, astrofizyki, medycyny czy prognozowania zmian na rynku finansowym itp. Ale ta technologia stopniowo staje się bliższa zwykłym użytkownikom, w szczególności pojawiają się specjalne wtyczki do Photoshopa, które mogą wykorzystywać moc obliczeniową procesora graficznego. Na specjalnej stronie możesz przestudiować całą listę programów wykorzystujących możliwości NVIDIA CUDA.

Jako praktyczny test nowej technologii na karcie graficznej MSI NX8800GT-T2D256E-OC wykorzystamy program TMPGEnc. Produkt ten jest komercyjny (pełna wersja kosztuje 100 dolarów), ale w przypadku kart graficznych MSI jest dostępny jako bonus w wersji próbnej na okres 30 dni. Tę wersję można pobrać ze strony dewelopera, jednak do zainstalowania TMPGEnc 4.0 XPress MSI Special Edition potrzebna jest oryginalna płytka ze sterownikami z karty MSI - bez niej program nie zostanie zainstalowany.

Aby wyświetlić najpełniejsze informacje o możliwościach obliczeniowych w CUDA i porównać je z innymi kartami wideo, możesz skorzystać ze specjalnego narzędzia CUDA-Z. Oto informacje o naszej karcie graficznej GeForce 8800GT:




W porównaniu do modeli referencyjnych nasz egzemplarz pracuje na wyższych częstotliwościach: domena rastrowa jest o 63 MHz wyższa od nominalnej, a jednostki cieniujące są szybsze o 174 MHz, a pamięć jest o 100 MHz szybsza.

Szybkość konwersji tego samego wideo HD porównamy przy obliczaniu wyłącznie przy użyciu procesora i z dodatkową aktywacją CUDA w programie TMPGEnc na następującej konfiguracji:

  • Procesor: Dwurdzeniowy Pentium E5200 2,5 GHz;
  • Płyta główna: Gigabyte P35-S3;
  • Pamięć: 2x1 GB GoodRam PC6400 (5-5-5-18-2T)
  • Karta graficzna: MSI NX8800GT-T2D256E-OC;
  • Dysk twardy: 320 GB WD3200AAKS;
  • Zasilanie: CoolerMaster eXtreme Power 500-PCAP;
  • System operacyjny: Windows XP SP2;
  • TMPGEnc 4.0 XPress 4.6.3.268;
  • Sterowniki karty graficznej: ForceWare 180.60.
Do testów procesor został podkręcony do 3 GHz (w konfiguracji 11,5 x 261 MHz) i do 4 GHz (11,5 x 348 MHz) przy częstotliwości RAM 835 MHz w pierwszym i drugim przypadku. Film w rozdzielczości Full HD 1920x1080, trwający jedną minutę i dwadzieścia sekund. Aby stworzyć dodatkowe obciążenie, włączono filtr redukcji szumów, którego ustawienia pozostawiono domyślne.


Do kodowania wykorzystano kodek DivX 6.8.4. W ustawieniach jakości tego kodeka wszystkie wartości pozostają domyślne, włączona jest wielowątkowość.


Obsługa wielowątkowości w TMPGEnc jest początkowo włączona w zakładce ustawień CPU/GPU. CUDA jest również aktywowana w tej samej sekcji.


Jak widać na powyższym zrzucie ekranu, przetwarzanie filtrów przy użyciu CUDA jest włączone, ale sprzętowy dekoder wideo nie jest włączony. Dokumentacja programu ostrzega, że ​​aktywacja ostatniego parametru wydłuża czas przetwarzania pliku.

Na podstawie wyników badań uzyskano następujące dane:


Przy 4 GHz z włączoną CUDA zyskaliśmy tylko kilka sekund (czyli 2%), co nie jest szczególnie imponujące. Ale przy niższej częstotliwości wzrost wynikający z aktywacji tej technologii pozwala zaoszczędzić około 13% czasu, co będzie dość zauważalne podczas przetwarzania dużych plików. Ale i tak wyniki nie są tak imponujące, jak oczekiwano.

Program TMPGEnc posiada wskaźnik obciążenia procesora i CUDA, w tej konfiguracji testowej pokazał obciążenie procesora na poziomie około 20%, a rdzenia graficznego na pozostałych 80%. W efekcie mamy takie same 100% jak przy konwersji bez CUDA, a różnicy czasu może w ogóle nie być (ale jednak istnieje). Mała pojemność pamięci wynosząca 256 MB również nie jest czynnikiem ograniczającym. Sądząc po odczytach z RivaTuner, podczas pracy wykorzystano nie więcej niż 154 MB pamięci wideo.



wnioski

Program TMPGEnc jest jednym z tych, które przybliżają masom technologię CUDA. Wykorzystanie procesora graficznego w tym programie pozwala przyspieszyć proces przetwarzania wideo i znacznie odciążyć centralny procesor, co pozwoli użytkownikowi wygodnie wykonywać inne zadania w tym samym czasie. W naszym konkretnym przykładzie karta graficzna GeForce 8800GT 256 MB nieznacznie poprawiła wydajność taktowania podczas konwersji wideo w oparciu o podkręcony procesor Pentium Dual-Core E5200. Ale wyraźnie widać, że wraz ze spadkiem częstotliwości wzrasta zysk z aktywacji CUDA; na słabych procesorach zysk z jej użycia będzie znacznie większy. Na tle tej zależności całkiem logiczne jest założenie, że nawet przy wzroście obciążenia (na przykład zastosowanie bardzo dużej liczby dodatkowych filtrów wideo) wyniki systemu z CUDA będą się wyróżniać bardziej znaczna delta różnicy w czasie spędzonym na procesie kodowania. Nie zapominaj też, że G92 nie jest obecnie najpotężniejszym chipem, a nowocześniejsze karty graficzne zapewnią znacznie wyższą wydajność w takich zastosowaniach. Jednak podczas działania aplikacji procesor graficzny nie jest w pełni obciążony i prawdopodobnie rozkład obciążenia zależy od każdej konfiguracji z osobna, a mianowicie od kombinacji procesor/karta graficzna, co ostatecznie może dać większy (lub mniejszy) wzrost procentowy aktywacji CUDA. W każdym razie dla tych, którzy pracują z dużymi ilościami danych wideo, technologia ta nadal pozwoli im znacznie zaoszczędzić czas.

To prawda, że ​​​​CUDA nie zyskała jeszcze powszechnej popularności, jakość oprogramowania współpracującego z tą technologią wymaga poprawy. W sprawdzanym przez nas programie TMPGEnc 4.0 XPress technologia ta nie zawsze działała. Ten sam film mógł zostać ponownie zakodowany kilka razy, a potem nagle przy następnym uruchomieniu obciążenie CUDA wynosiło już 0%. A zjawisko to było całkowicie losowe na zupełnie innych systemach operacyjnych. Również program, o którym mowa, odmówił użycia CUDA podczas kodowania do formatu XviD, ale z popularnym kodekiem DivX nie było problemów.

W rezultacie, jak dotąd technologia CUDA może znacząco zwiększyć wydajność komputerów osobistych tylko w niektórych zadaniach. Jednak zakres zastosowania takiej technologii będzie się poszerzał, a proces zwiększania liczby rdzeni w konwencjonalnych procesorach wskazuje na wzrost zapotrzebowania na równoległe przetwarzanie wielowątkowe w nowoczesnych aplikacjach. Nie bez powodu ostatnio wszyscy liderzy branży mają obsesję na punkcie połączenia procesora i karty graficznej w ramach jednej zunifikowanej architektury (pamiętajcie tylko szeroko reklamowane AMD Fusion). Być może CUDA jest jednym z etapów procesu tej unifikacji.


Dziękujemy następującym firmom za udostępnienie sprzętu badawczego:

– zestaw niskopoziomowych interfejsów programowych ( API) do tworzenia gier i innych wydajnych aplikacji multimedialnych. Zawiera wsparcie dla wysokiej wydajności 2D- I 3D-grafika, dźwięk i urządzenia wejściowe.

Direct3D (D3D) – interfejs do wyświetlania trójwymiarowego prymitywni(ciała geometryczne). Zawarte w .

OpenGL(z angielskiego Otwórz bibliotekę grafik, dosłownie - otwarta biblioteka graficzna) to specyfikacja definiująca niezależny od języka programowania, wieloplatformowy interfejs programistyczny do pisania aplikacji wykorzystujących dwuwymiarową i trójwymiarową grafikę komputerową. Zawiera ponad 250 funkcji do rysowania złożonych scen 3D z prostych prymitywów. Służy do tworzenia gier wideo, rzeczywistości wirtualnej i wizualizacji w badaniach naukowych. Na platformie Okna konkuruje z .

OpenCL(z angielskiego Otwarty język komputerowy dosłownie – otwarty język obliczeń) – struktura(struktura systemu oprogramowania) do pisania programów komputerowych związanych z obliczeniami równoległymi na różnych grafikach ( GPU) I ( ). Do ramy OpenCL zawiera język programowania i interfejs programowania aplikacji ( API). OpenCL zapewnia równoległość na poziomie instrukcji i na poziomie danych i jest implementacją tej techniki GPGPU.

GPGPU(w skrócie z angielskiego) Jednostki przetwarzania grafiki ogólnego przeznaczenia, dosłownie - GPU ogólnego przeznaczenia) to technika wykorzystania procesora graficznego (GPU) lub karty graficznej do ogólnych obliczeń, które zwykle wykonuje komputer.

Moduł cieniujący(Język angielski) moduł cieniujący) – program do konstruowania cieni na syntetyzowanych obrazach, stosowany w grafice trójwymiarowej w celu określenia ostatecznych parametrów obiektu lub obrazu. Zwykle zawiera dowolnie złożone opisy absorpcji i rozpraszania światła, mapowania tekstur, odbicia i załamania światła, cieniowania, przemieszczenia powierzchni i efektów przetwarzania końcowego. Złożone powierzchnie można zwizualizować za pomocą prostych kształtów geometrycznych.

Wykonanie(Język angielski) wykonanie) – wizualizacja, w grafice komputerowej, proces uzyskiwania obrazu z modelu za pomocą oprogramowania.

SDK(w skrócie z angielskiego) Zestaw programistyczny) – zestaw narzędzi programistycznych.

procesor(w skrócie z angielskiego) Jednostka centralna dosłownie – centralne/główne/główne urządzenie obliczeniowe) – centralne (mikro); urządzenie wykonujące instrukcje maszynowe; element sprzętowy odpowiedzialny za wykonywanie operacji obliczeniowych (określonych przez system operacyjny i oprogramowanie aplikacyjne) oraz koordynujący pracę wszystkich urządzeń.

GPU(w skrócie z angielskiego) Jednostka przetwarzania grafiki dosłownie – urządzenie graficzne) – procesor graficzny; osobne urządzenie lub konsola do gier, które wykonuje renderowanie grafiki (wizualizację). Nowoczesne procesory graficzne są bardzo wydajne w przetwarzaniu i wyświetlaniu grafiki komputerowej w realistyczny sposób. Procesor graficzny w nowoczesnych kartach wideo służy jako akcelerator grafiki 3D, ale w niektórych przypadkach może być również używany do obliczeń ( GPGPU).

Problemy procesor

Przez długi czas wzrost wydajności tradycyjnych rozwiązań następował głównie dzięki konsekwentnemu wzrostowi częstotliwości zegara (około 80% wydajności determinowało częstotliwość zegara) przy jednoczesnym wzroście liczby tranzystorów w jednym chipie . Jednak dalszy wzrost częstotliwości taktowania (przy częstotliwości taktowania większej niż 3,8 GHz chipy po prostu się przegrzewają!) napotyka szereg podstawowych barier fizycznych (ponieważ proces technologiczny prawie zbliżył się do wielkości atomu: , a wielkość atomu krzemu wynosi w przybliżeniu 0,543 nm):

Po pierwsze, wraz ze zmniejszaniem się rozmiaru kryształu i wzrostem częstotliwości zegara wzrasta prąd upływu tranzystorów. Prowadzi to do zwiększonego zużycia energii i zwiększonej emisji ciepła;

Po drugie, korzyści płynące z wyższych częstotliwości zegara są częściowo niwelowane przez opóźnienia w dostępie do pamięci, ponieważ czasy dostępu do pamięci nie nadążają za rosnącymi prędkościami zegara;

Po trzecie, w przypadku niektórych zastosowań tradycyjne architektury szeregowe stają się nieefektywne wraz ze wzrostem szybkości zegara ze względu na tzw. „wąskie gardło von Neumanna” – ograniczenie wydajności wynikające z sekwencyjnego przepływu obliczeń. Jednocześnie zwiększają się opóźnienia w transmisji sygnału rezystancyjno-pojemnościowego, co stanowi dodatkowe wąskie gardło związane ze wzrostem częstotliwości taktowania.

Rozwój GPU

Równolegle nastąpił (i trwa!) rozwój GPU:

listopad 2008 – Intel wprowadził linię 4-rdzeniową Intel Core i7, które opierają się na mikroarchitekturze nowej generacji Nehalem. Procesory pracują z częstotliwością taktowania 2,6-3,2 GHz. Wykonane w procesie technologicznym 45 nm.

Grudzień 2008 – rozpoczęły się dostawy wersji 4-rdzeniowej AMD Phenom II 940(kryptonim - Deneb). Działa z częstotliwością 3 GHz i jest wytwarzany w procesie technologicznym 45 nm.

Maj 2009 – firma AMD wprowadził wersję GPU Karta ATI Radeon HD 4890 przy taktowaniu rdzenia zwiększonym z 850 MHz do 1 GHz. To jest pierwszy graficzny procesor pracujący z częstotliwością 1 GHz. Moc obliczeniowa chipa, dzięki zwiększeniu częstotliwości, wzrosła z 1,36 do 1,6 teraflopa. Procesor zawiera 800 (!) rdzeni obliczeniowych i obsługuje pamięć wideo GDDR5, DirectX 10.1, ATI CrossFireX oraz wszystkie inne technologie właściwe nowoczesnym modelom kart graficznych. Chip wyprodukowany jest w oparciu o technologię 55 nm.

Główne różnice GPU

Cechy charakterystyczne GPU(w porównaniu z ) Czy:

– architektura maksymalnie nastawiona na zwiększenie szybkości obliczania tekstur i skomplikowanych obiektów graficznych;

– moc szczytowa typowa GPU znacznie wyżej ;

– dzięki specjalistycznej architekturze przenośników, GPU znacznie wydajniejszy w przetwarzaniu informacji graficznych niż .

„Kryzys gatunku”

„Kryzys gatunkowy” za dojrzały do ​​2005 roku – wtedy się pojawiły. Jednak pomimo rozwoju technologii, wzrost produktywności konwencjonalnej spadła zauważalnie. Jednocześnie wydajność GPU nadal rośnie. Tak więc w 2003 roku ten rewolucyjny pomysł skrystalizował się: wykorzystaj moc obliczeniową grafiki dla swoich potrzeb. Procesory graficzne są coraz częściej wykorzystywane do obliczeń „niegraficznych” (symulacja fizyczna, przetwarzanie sygnałów, matematyka/geometria obliczeniowa, operacje na bazach danych, biologia obliczeniowa, ekonomia obliczeniowa, widzenie komputerowe itp.).

Głównym problemem był brak standardowego interfejsu programowania GPU. Twórcy wykorzystali OpenGL Lub Direct3D, ale było to bardzo wygodne. Korporacja NVIDIA(jeden z największych producentów procesorów graficznych, medialnych i komunikacyjnych, a także procesorów mediów bezprzewodowych; założony w 1993) rozpoczął prace nad ujednoliconym i wygodnym standardem - i wprowadził technologię CUDA.

Jak to się zaczęło

2006 – NVIDIA demonstruje CUDA™; początek rewolucji w informatyce GPU.

2007 – NVIDIA uwalnia architekturę CUDA(orginalna wersja SDK CUDA został złożony w dniu 15 lutego 2007 r.); nominacja „Najlepszy Nowy Produkt” magazynu Popularna nauka oraz „Wybór czytelników” z publikacji HPCWire.

2008 – technologia NVIDIACUDA zwyciężył w kategorii „Doskonałość techniczna”. Magazyn PC.

Co się stało CUDA

CUDA(w skrócie z angielskiego) Oblicz zunifikowaną architekturę urządzeń, dosłownie – ujednolicona architektura obliczeniowa urządzeń) – architektura (zestaw oprogramowania i sprzętu), która pozwala na produkcję GPU obliczenia ogólnego przeznaczenia, podczas gdy GPU faktycznie działa jak potężny koprocesor.

Technologia NVIDIA CUDA™ to jedyne środowisko programistyczne w języku programowania C, który umożliwia programistom tworzenie oprogramowania rozwiązującego złożone problemy obliczeniowe w krótszym czasie, dzięki mocy obliczeniowej procesorów graficznych. Na świecie pracują już miliony ludzi GPU ze wsparciem CUDA, a tysiące programistów już korzysta z (darmowych!) narzędzi CUDA w celu przyspieszenia aplikacji i rozwiązywania najbardziej złożonych, wymagających dużej ilości zasobów zadań – od kodowania wideo i audio po poszukiwania ropy i gazu, modelowanie produktów, obrazowanie medyczne i badania naukowe.

CUDA daje programiście możliwość, według własnego uznania, zorganizowania dostępu do zestawu instrukcji akceleratora graficznego i zarządzania jego pamięcią oraz organizowania na nim skomplikowanych obliczeń równoległych. Obsługa akceleratora graficznego CUDA staje się potężną, programowalną otwartą architekturą, podobną do dzisiejszej . Wszystko to zapewnia programiście niskopoziomowy, rozproszony i szybki dostęp do sprzętu komputerowego CUDA niezbędna podstawa do budowania poważnych narzędzi wysokiego poziomu, takich jak kompilatory, debugery, biblioteki matematyczne i platformy oprogramowania.

Uralsky, wiodący specjalista ds. technologii NVIDIA, porównując GPU I , mówi tak: „ - To jest SUV. Jeździ zawsze i wszędzie, ale niezbyt szybko. A GPU- To jest samochód sportowy. Na złej drodze po prostu nigdzie nie pojedzie, ale daj mu dobrą nawierzchnię, a pokaże całą swoją prędkość, o jakiej SUV nawet nie marzył!…”

Możliwości technologiczne CUDA