Architektura GPU

Obliczenia GPU (Graphics Processing Unit) to użycie karty graficznej do uzyskania wyników obliczeń, zamiast tradycyjnie do renderowania grafiki. Procesory kart graficznych są wielordzeniowe i charakteryzują się wysoką wydajnością. Mogą zostać one stosowane do przyspieszenia różnorodnych zastosowań za pomocą przetwarzania równoległego. Duża programowalność kart graficznych daje ich użyteczność przy szybkich obliczeniach, poza oczywiście ich graficznymi możliwościami.

Narodziny rewolucji w obliczeniach, przy użyciu kart graficznych nastąpiły w listopadzie 2006 roku, kiedy to AMD wprowadziło na rynek CTM (Close To Metal), czyli nisko poziomowy interfejs programowania sprzętu. Umożliwia to programistom przeprowadzanie arytmetycznych obliczeń na procesorach kart graficznych, z wykorzystaniem ich pamięci. Technologie te nie spełniały jednak wszystkich pokładanych w nich oczekiwań klientów, ponieważ były mało uniwersalne – brak możliwości przeniesienia kodu z napisanego dla karty jednego producenta na komputer wykorzystujący kartę innego producenta. Dlatego też obecnie AMD ma na celu udostępnienie użytkownikom nowych możliwości obliczeń przy pomocy GPGPU.

GPGPU (ang. General-Purpose Computing on Graphics Processing Units) – ta metoda również daje możliwość użytkownikowi przeprowadzenia obliczeń przy użyciu kart graficznych. Metoda ta jest stosunkowo nowa, ponieważ dopiero karty graficzne zgodne z DirectX9, potrafiły wykonywać operacje na zmiennych zmiennoprzecinkowych o pojedynczej precyzji, w dodatku karty zostały wzbogacone w obsługę pętli i dynamicznych instrukcji warunkowych. Mimo wszystko karty graficzne dalej są projektowane specjalnie dla grafiki, a więc i są bardzo restrykcyjne, jeżeli chodzi o wykorzystanie ich do wykonywania operacji arytmetycznych. Ze względu na ich charakter są skuteczne tylko do problemów, które można rozwiązać stosując przetwarzanie strumieniowe, czyli SIMD[1] (ang. Single Instruction, Multiple Data), a sprzęt może być używany tylko w określony sposób.

Idea GPGPU jest taka, że karty graficzne mogą przetwarzać nie tylko wierzchołki, ale mogą też przetwarzać wiele z nich równolegle. Jest to szczególnie istotne, gdy programista chce przetwarzać wiele wierzchołków lub fragmentów w ten sam sposób. W ten sposób została zastosowana architektura SIMD – procesory mogą działać równolegle, uruchamiając jedno jądro przez pojedynczy strumień rozkazów, dla wielu rekordów danych na raz. Rekordy danych wymagają podobnych obliczeń i zapewniają one równoległość, natomiast strumienie rozkazów to funkcje, które są stosowane, do każdego elementu danych. Ponieważ elementy procesorów graficznych są od siebie niezależne, nie ma możliwości używania danych współdzielonych czy statycznych. Dlatego każda dana musi zostać przeczytana z wejścia, muszą zostać wykonane na niej operacje, a następnie musi zostać ona zapisana do wyjścia. Dopuszczalne jest posiadanie wielu wejść i wyjść, ale nie można używać fragmentu pamięci, który jest przeznaczony zarówno do odczytu, jak i zapisu.


[1] Architektura komputerowa według klasyfikacji Flynna, w której to przetwarzane jest wiele strumienie danych, przez pojedynczy strumień rozkazów.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s