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).
Ograniczenia platformy to m.in.:
  • 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.
Obsługiwane karty to ( seria GeForce 8 i nowsze, seria Quadro i Tesla):
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
RkBlog

Wprowadzenie do świata Linuksa, 17 November 2008

Comment article
Comment article RkBlog main page Search RSS Contact