Obliczenia (przetwarzanie) na GPU lub inaczej GPGPU to wykorzystanie układu GPU (procesora graficznego) do wykonywania obliczeń ogólnego przeznaczenia w zastosowaniach naukowych i inżynierskich.
W modelu opisującym zasady wykorzystania idei obliczeń na GPU podstawę stanowi współpraca układów CPU i GPU w ramach heterogenicznego środowiska wspólnego przetwarzania danych. Sekwencyjna część aplikacji wykonywana jest przez procesor centralny (CPU), zaś przetwarzanie w złożonych obliczeniowo fragmentach jest akcelerowane przez układ GPU. Z punktu widzenia użytkownika aplikacja działa po prostu szybciej, ponieważ dzięki wykorzystaniu wysokowydajnego układu GPU wydajność przetwarzania wzrasta.

Na przestrzeni lat układ GPU ewoluował, osiągając obecnie wydajność zmiennoprzecinkową na poziomie TeraFLOPS. NVIDIA zrewolucjonizowała GPGPU i akcelerowała świat informatyki w latach 2006-2007, kiedy to zaprezentowała swoją nową, masowo równoległą architekturę „CUDA”. W jej skład wchodzą setki działających równolegle rdzeni obliczeniowych, które współpracują ze sobą i przetwarzają z ogromną wydajnością przekazywane przez aplikację dane.
Za sukces, odniesiony w minionych paru latach przez układy GPGPU, odpowiada łatwość programowania z wykorzystaniem związanego z tą architekturą modelu programowania równoległego CUDA. W modelu tym twórca aplikacji modyfikuje jej kod tak, by wyodrębnić w nim złożone obliczeniowo jądra i zamapować je na GPU, czyli odwzorować w wersji dla układu GPU. Pozostała część aplikacji pozostaje bez zmian i jest wykonywana przez CPU. Zagadnienie mapowania funkcji na GPU pociąga za sobą konieczność opracowania nowego jej kodu, który odsłoni równoległość realizowanych przez nią zadań, oraz wymaga dodania słów kluczowych „C”, umożliwiających przekazywanie danych do GPU i z powrotem. Programista ma przed sobą zadanie uruchamiania i wykorzystania dziesiątków tysięcy wątków jednocześnie. Odpowiedni moduł sprzętowy układu GPU zarządza wątkami i odpowiada za ich kolejkowanie (sterowanie kolejnością przetwarzania).
Układ GPU z serii Tesla 20 oparty jest na nowej architekturze „Fermi", będącej trzecią generacją architektury CUDA. Architektura „Fermi” została zoptymalizowana pod kątem zastosowań naukowych, oferując takie kluczowe funkcje i możliwości, jak sprzętowa obsługa liczb zmiennoprzecinkowych podwójnej precyzji w formacie zgodnym ze standardem IEEE (wydajność obliczeń na poziomie 500+ GigaFLOPS), lokalna pamięć podręczna pierwszego i drugiego poziomu, mechanizmy wykrywania i korekcji błędów ECC, lokalna, zarządzana przez użytkownika pamięć podręczna dla danych obecna w formie współdzielonej pamięci rozmieszczonej w obrębie całego układu GPU, wspólne dostępy do pamięci itd.
Historia obliczeń na GPU
Układy graficzne funkcjonowały początkowo na zasadzie potoków przetwarzania graficznego o sztywno ustalonych funkcjach. W przeciągu lat stawały się one coraz bardziej programowalne, co doprowadziło w efekcie do wprowadzenia przez firmę NVIDIA pierwszego układu GPU, czyli jednostki przetwarzania graficznego (Graphics Processing Unit). W okresie 1999-2000 r. przede wszystkim informatycy, ale także badacze zajmujący się takimi dziedzinami jak np. obrazowanie medyczne i elektromagnetyzm, zaczęli uruchamiać na układach GPU aplikacje, które wykonywały na nich obliczenia ogólnego przeznaczenia. Zaobserwowali oni, że znakomita wydajność układów GPU w operacjach zmiennoprzecinkowych doprowadziła do ogromnego wzrostu wydajności wielu aplikacji naukowych. Był to początek nurtu zwanego GPGPU (General Purpose computing on GPU), czyli technologii obliczeń ogólnego przeznaczenia na układach GPU.
Istniał jednak pewien problem – technologia GPGPU wymagała programowania układu GPU z użyciem języków do programowania grafiki, takich jak OpenGL czy Cg. Programiści zmuszeni byli przekształcać swoje, wykorzystywane w pracach naukowych aplikacje w taki sposób, by wyglądały i działały one jak programy graficzne, które rozwiązywały stawiane przed nimi problemy kreśląc trójkąty i wielokąty. Podejście to ograniczyło stopień wykorzystania olbrzymiej wydajności układów GPU w badaniach naukowych.
Firma NVIDIA uświadomiła sobie potencjał, jaki niesie ze sobą możliwość przekazania tej wydajności w ręce szerszej społeczności pracowników naukowych i zdecydowała się zainwestować w takie modyfikacje układu GPU, które uczynią go w pełni programowalnym i użytecznym w zastosowaniach naukowych. Dodała także obsługę języków programowania wysokiego poziomu, takich jak C, C++ i Fortran. W ten właśnie sposób powstała dedykowana układom GPU architektura CUDA.
Architektura równoległa CUDA i związany z nią model programowania
Równoległej architekturze sprzętowej CUDA towarzyszy model programowania równoległego o tej samej nazwie. Udostępnia on zestaw abstrakcyjnych pojęć, które pozwalają na wyrażanie równoległości zadań – a także przetwarzanych przez nie danych – o drobnej i grubej ziarnistości. Programista ma do wyboru możliwość wyrażenia tej równoległości zarówno za pomocą języków programowania wysokiego poziomu, takich jak C, C++ i Fortran, jak i z użyciem obsługiwanych przez odpowiednie sterowniki interfejsów programowania aplikacji (API), takich jak OpenCL™ i DirectX™ 11 Compute.

NVIDIA zapewnia obecnie wsparcie dla programowania GPU z użyciem języków C, C++ i Fortran oraz OpenCL i DirectCompute. Jak pokazano na powyższej ilustracji oraz stronie, do której kieruje odnośnik, twórcy oprogramowania mają obecnie dostęp do narzędzi programistycznych wraz z bibliotekami oraz oprogramowaniem typu middleare. Programy dla GPU mogą być tworzone w języku C z użyciem minimalnego zbioru słów kluczowych i rozszerzeń. Wsparcie dla języka Fortran, OpenCL itp. zostanie dodane wkrótce.
Stosowanie modelu programowania równoległego CUDA wymaga od programistów dekompozycji rozwiązywanego przez nich problemu, czyli rozbicia go na podproblemy o grubej ziarnistości, które mogą być rozwiązywane równolegle niezależnie od siebie. Równoległość drobnoziarnistą w podproblemach osiąga się, dzieląc każdy z nich na podzadania, które można rozwiązywać równolegle na zasadach współpracy.
OpenCL jest znakiem towarowym Apple Inc. używanym na licencji przez Khronos Group Inc.
DirectX jest zarejestrowanym znakiem towarowym Microsoft Corporation.