nVidia CUDA - platforma do obliczeń w GPU
nVidia CUDA (Compute Unified Device Architecture) to kompilator i zestaw narzędzi umożliwiających wykorzystanie odmiany języka C do tworzenia algorytmów wykonywanych na procesorach karty graficznej (GPU). CUDA daje programistom dostęp do natywnych instrukcji i pamięci GPU. Najważniejszą różnicą między standardowym procesorem, a układem karty graficznej jest jej szeregowa "wielordzeniowa" architektura umożliwiająca działania tysięcy wątków na każdym z rdzeni. Aplikacje przeprowadzające wiele obliczeń, czy dokonujące przekształceń złożonych obiektów mogą znacząco poprawić swoje możliwości jeżeli zastosowana zostanie architektura CUDA (a nie procesor CPU) - jak np. algorytmy fizyki w grach, oprogramowanie naukowe (aplikacje typu CAD) i wiele innych. Przykładowo mając do zjedzenia 100 jabłek rozwiązaniem w stylu standardowego programowania pod CPU byłaby optymalizacja jedzenia jednego jabłka, natomiast programując pod GPU rozwiązaniem byłaby optymalizacja zjedzenia 100 jabłek. GPU to operacje szeregowe, wielowątkowe.
Możliwości GPU nie są przenoszone do układu głównego procesora, gdyż nie są uniwersalne. Nie sprawdzają się we wszystkich przypadkach z jakimi ma do czynienia procesor CPU. Dodatkowo platformy do obliczeń w GPU nie są obecnie ustandaryzowane i zależą od dostawcy danego sprzętu (nVidia - CUDA, ATI - Brook++, Intel - LARRABEE). CUDA to rozwiązanie dość proste w nauce i w wykorzystaniu zyskujące obecnie na popularności.
Platforma CUDA dostępna jest pod systemami MS Windows XP i VISTA, Mac OS X, oraz Linuksem dla architektury x86 i x86_64. nVidia udostępnia pakiet SDK, oraz Toolkit zawierający kompilator, oraz potrzebne biblioteki. Dostępne są też biblioteki dla innych języków (pyCUDA dla Pythona). Przykładowy kod dostępny jest na stronie nVidii, a także na youtube.com. W zależności od dystrybucji pakiety mogą znajdować się w repozytorium, lub na stronie nVidii.
Zalety CUDA nad tradycjonalnymi rozwiązaniami do obliczań z GPU to m.in.:- Używa języka C, z prostymi wyjątkami.
- Rozproszone czytanie - kod może czytać do określonych adresów w pamięci.
- Pamięć współdzielona - CUDA udostępnia region szybkiej pamięci (16 KB), który może być współdzielony pomiędzy wątkami.
- Szybsze przesyłanie i odbieranie danych z GPU.
- Pełna obsługa operacji na liczbach całkowitych (int).
- Brak wsparcia dla funkcji rekursywnych.
- Przepustowość magistrali i opóźnienie pomiędzy CPU i GPU mogą stanowić wąskie gardło.
- Wątki powinny być uruchamiane w grupach po minimum 32 dla najlepszej wydajności.
- GPU obsługujące platformę CUDA dostarczane są obecnie wyłącznie przez firmę nVidia.
Nvidia GeForce | Nvidia GeForce Mobile | Nvidia Quadro | Nvidia Quadro Mobile | Nvidia Tesla |
---|---|---|---|---|
GeForce GTX 280 GeForce GTX 260 GeForce 9800 GX2 GeForce 9800 GTX+ GeForce 9800 GTX GeForce 9800 GT GeForce 9600 GSO GeForce 9600 GT GeForce 9500 GT GeForce 9400 mGPU GeForce 9300 mGPU GeForce 8800 Ultra GeForce 8800 GTX GeForce 8800 GTS GeForce 8800 GT GeForce 8800 GS GeForce 8600 GTS GeForce 8600 GT GeForce 8500 GT GeForce 8400 GS GeForce 8300 mGPU GeForce 8200 mGPU GeForce 8100 mGPU |
GeForce 9800M GTX GeForce 9800M GTS GeForce 9800M GT GeForce 9700M GTS GeForce 9700M GT GeForce 9650M GS GeForce 9600M GT GeForce 9600M GS GeForce 9500M GS GeForce 9500M G GeForce 9400M G GeForce 9300M GS GeForce 9300M G GeForce 9200M GS GeForce 9100M G GeForce 8800M GTS GeForce 8700M GT GeForce 8600M GT GeForce 8600M GS GeForce 8400M GT GeForce 8400M GS GeForce 8400M G GeForce 8200M G |
Quadro FX 5800 Quadro FX 5600 Quadro FX 4700 X2 Quadro FX 4600 Quadro FX 3700 Quadro FX 1700 Quadro FX 570 Quadro FX 370 Quadro NVS 290 Quadro FX 3600M Quadro FX 1600M Quadro FX 570M Quadro FX 370M Quadro Plex 1000 Model IV Quadro Plex 1000 Model S4 |
Quadro NVS 360M Quadro NVS 140M Quadro NVS 135M Quadro NVS 130M |
Tesla S1070 Tesla C1060 Tesla C870 Tesla D870 Tesla S870 |
Comment article