CUDA

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania
CUDA
biblioteka i środowisko programistyczne
NVIDIA-CUDA.jpg
Logo programu
Producent NVIDIA Corporation
Platforma sprzętowa GPU firmy Nvidia
System operacyjny GNU/Linux, MS Windows, Mac OS X
Aktualna wersja stabilna 5.5 31 lipca 2013[1]
Licencja własnościowa, freeware
Strona domowa CUDA

CUDA (ang. Compute Unified Device Architecture) – opracowana przez firmę Nvidia uniwersalna architektura procesorów wielordzeniowych (głównie kart graficznych) umożliwiająca wykorzystanie ich mocy obliczeniowej do rozwiązywania ogólnych problemów numerycznych w sposób wydajniejszy niż w tradycyjnych, sekwencyjnych procesorach ogólnego zastosowania.

Architektura[edytuj | edytuj kod]

Integralną częścią architektury CUDA jest oparte na języku programowania C środowisko programistyczne wysokiego poziomu, w którego skład wchodzą m.in. specjalny kompilator (nvcc), debugger (cuda-gdb, który jest rozszerzoną wersją debuggera gdb umożliwiającą śledzenie zarówno kodu wykonywanego na CPU, jak i na karcie graficznej), profiler oraz interfejs programowania aplikacji. Dostępne są również biblioteki, które można wykorzystać w językach Python, Fortran, Java, C# oraz Matlab. Pierwsze wydanie środowiska wspierało systemy operacyjne Windows oraz Linux. Od wersji 2.0 wspierany jest również Mac OS X.

Zalety[edytuj | edytuj kod]

W stosunku do tradycyjnych metod wykonywania obliczeń inżynierskich na GPU, CUDA posiada kilka istotnych zalet:

  • Język programowania oparty na języku C.
  • Model pamięci procesora ściśle odpowiadający architekturze sprzętowej, co umożliwia świadome, efektywne wykorzystywanie dostępnych zasobów GPU, w tym pamięci współdzielonej (obecnie do 48 KB). Pamięć ta jest współdzielona przez wszystkie wątki w tzw. bloku (zwykle 128-512 wątków). Można jej używać jako programowalnej pamięci typu cache.
  • Kod uruchamiany na GPU może odczytywać i zapisywać dane z dowolnego adresu w pamięci GPU.
  • Projekt architektury CUDA zakłada pełną kompatybilność programów – napisany dziś program wykonywalny ma w przyszłości działać bez żadnych zmian na coraz wydajniejszych procesorach graficznych posiadających coraz większą liczbę rdzeni, rejestrów, pamięci operacyjnej i innych zasobów.

Ograniczenia[edytuj | edytuj kod]

  • CUDA korzysta z podzbioru języka C++, który do wersji 3.1 uniemożliwiał wykorzystywanie rekurencji i wskaźników na funkcje. Nie można również definiować statycznych zmiennych wewnątrz funkcji, a funkcje mogą mieć tylko stałą liczbę parametrów[2].
  • Dla liczb zmiennoprzecinkowych podwójnej precyzji (dostępnych w nowszych procesorach) istnieją pewne odstępstwa od standardu w zakresie zaokrąglania liczb.
  • Przepustowość i opóźnienia magistrali PCI-Express łączącej CPU i GPU mogą być wąskim gardłem w przypadku przesyłania dużej ilości danych.
  • W przeciwieństwie do języka OpenCL, CUDA jest dostępna jedynie dla kart graficznych produkowanych przez firmę NVIDIA. Obecnie z CUDA można korzystać na wszystkich kartach począwszy od serii GeForce 8 w tym Quadro oraz Tesla[3]

Zastosowania[edytuj | edytuj kod]

W grach komputerowych moc obliczeniową można wykorzystać do obliczeń fizyki w grach, ale CUDA jest również wykorzystywana do przyspieszania obliczeń w takich dziedzinach jak biologia, fizyka, kryptografia i inne obliczenia inżynierskie. Dla potrzeb tego segmentu Nvidia opracowała specjalny procesor graficzny Tesla.

Niektóre projekty przetwarzania rozproszonego BOINC wykorzystują do obliczeń architekturę CUDA.[5][6]

Języki wyższego poziomu[edytuj | edytuj kod]

Wersja 3.x[edytuj | edytuj kod]

Kolejna wersja architektury CUDA (CUDA 3.0) obsługuje procesory graficzne o architekturze Fermi. Cuda 3.0 zapewnia pełniejsze wsparcie dla konstrukcji języka C++ (m.in. jednolitą przestrzeń adresową dla wskaźników, obsługę dziedziczenia, a od wersji 3.1 – funkcji rekurencyjnych i wskaźników na funkcje). Cuda 3.0 umożliwia wykonywanie kilkunastu kerneli jednocześnie na jednym GPU (o architekturze Fermi). Wraz z nową generacją procesorów Nvidia udostępniła wsparcie dla środowiska Visual Studio 2008[7].

Zobacz też[edytuj | edytuj kod]

Przypisy

Linki zewnętrzne[edytuj | edytuj kod]