Zamiast CPU

Nowoczesne karty graficzne mają duży potencjał, który można wykorzystać nie tylko do przygotowania obrazu i wysyłania sygnału do monitora. Najwięksi producenci dysponują już narzędziami, którymi można zmusić procesory graficzne do całkiem niegraficznych obliczeń.


Nowoczesne karty graficzne mają duży potencjał, który można wykorzystać nie tylko do przygotowania obrazu i wysyłania sygnału do monitora. Najwięksi producenci dysponują już narzędziami, którymi można zmusić procesory graficzne do całkiem niegraficznych obliczeń.

Na pewno większość czytelników słyszała o GPGPU. Można się spodziewać, że w najbliższych latach technologia ta będzie zyskiwać na znaczeniu. Skąd się wzięła, na czym polega i jaką ma przyszłość? Na te pytania odpowiemy w dalszej części tekstu.

Intel też próbuje GPGPU, chociaż od drugiej strony.

Intel też próbuje GPGPU, chociaż od drugiej strony.

Koncepcję GPGPU nietrudno zrozumieć. Współczesne CPU jest całkiem zmyślnym kawałkiem krzemu, ale w niektórych konkurencjach daleko mu do wyspecjalizowanego procesora graficznego, który pewne zadania potrafi wykonać o cały rząd wielkości szybciej. Te zadania polegają na renderowaniu grafiki trójwymiarowej w możliwie dużym tempie i możliwie najlepiej. Za taką wizualizacją kryją się skomplikowane geometryczne obliczenia. Więc dlaczego nie zaprząc tego samego sprzętu i koncepcji programistycznych do wykonywania wszelkiego rodzaju alternatywnych funkcji? Ten pomysł stał się podstawą technologii General Purpose computation on GPUs, czyli wykonywania ogólnych obliczeń przez procesory graficzne, w skrócie GPGPU. Przerzucenie części obowiązków centralnego procesora na kartę graficzną może być skutecznym sposobem zwiększenia wydajności całego komputera.

W gruncie rzeczy wszelkie obliczenia możliwe do podzielenia na powtarzające się algorytmy mogą być przyśpieszane przez kartę graficzną. Lista najbardziej prawdopodobnych kandydatów obejmuje: obliczenia fizyczne, naukowe modelowanie, prognozy finansowe, rozpoznawanie twarzy i wiele innych zadań wymagających intensywnego przetwarzania danych. O możliwościach GPGPU przypomniało środowisku specjalistów najpierw ATI swoją Stream Computing Initiative (http://techreport.com/etc/2006q4/stream-computing/index.x?pg=1 ). Sama nazwa "stream computing" (obliczenia potokowe) nie została przez firmę precyzyjnie zdefiniowana - chodzi o klasę problemów, która wyraźnie różni się od obliczeń tradycyjnie uważanych za najsilniejszą stronę CPU. Jedno z pierwszych zastosowań dotyczyło modelowania budowy protein.

Jednakże GPGPU bada nie tylko ATI. Procesory graficzne NVIDII mają podobne możliwości. Do eksploatacji nowego terytorium włączył się także Intel w ramach swojej inicjatywy Larrabee.

Superkomputer za grosik

Ze względu na architekturę procesora technologia GPGPU jest mocno związana z przetwarzaniem potokowym i pewnie dlatego ATI wybrało tę nazwę dla swojego narzędzia. Ale przetwarzania potokowego wcale nie wymyśliło. Jego korzenie sięgają czasów sprzed wynalezienia peceta. Jest ono związane z opanowaniem możliwości przetwarzania całych wektorów i tablic liczb na superkomputerach zbudowanych pod koniec lat sześćdziesiątych poprzedniego wieku. Chodziło o przeprowadzanie operacji matematycznych na więcej niż jednej danej jednocześnie. To oznaczało, że procesor mógł wykonywać o wiele więcej pracy w czasie jednego cyklu zegara. Jednym z najsłynniejszych zastosowań tego pomysłu jest Cray-1, którego pierwszy egzemplarz z serii zainstalowano w laboratorium Los Alamos w 1976 roku. Umożliwiło to wielki przyrost wydajności, ale tylko tych zadań, które dają się podzielić na powtarzalne operacje. Technologia trafiła także do pecetowych CPU w postaci stale udoskonalanych i coraz bardziej skomplikowanych serii instrukcji z rodziny Single Instruction Multiple Data (SIMD). Zaczęło się od MMX, potem było 3DNow!, dzisiaj doszliśmy do kolejnych wersji SSE (Streaming SIMD Extensions). Jak widać, procesor centralny także ma skromny zasób instrukcji potokowych, które fizycznie stały się częścią jednostki zmiennopozycyjnej (FPU). To już zupełnie inny układ niż koprocesor matematyczny 8087 z pionierskich czasów.

Dalszy wkład w rozwijanie tej idei wniosło Sony. Procesor Cell zastosowany w PlayStation 3 jest kombinacją pojedynczego PowerPC z jednostką obsługującą osiem wektorów. Ale nawet jemu daleko do możliwości kart graficznych, które zostały w dużym stopniu dostosowane do wykonywania powtarzających się operacji w renderowaniu trójwymiarowym. Jak widać, GPGPU nie jest czymś absolutnie nowym, a jedynie realizacją technologii superkomputerowej w tanim układzie peryferyjnym peceta.

Bez emerytury

Schemat blokowy CTM. Oprócz macierzy procesorów do przetwarzania równoległego, ATI Data Parallel Processor Array (DPP) CTM składa się z trzech głównych komponentów: jednostki wykonawczej,  jednostki obsługi operacji warunkowych i kontrolera pamięci.

Schemat blokowy CTM. Oprócz macierzy procesorów do przetwarzania równoległego, ATI Data Parallel Processor Array (DPP) CTM składa się z trzech głównych komponentów: jednostki wykonawczej, jednostki obsługi operacji warunkowych i kontrolera pamięci.

GPGPU stało się bardziej znane dopiero po wprowadzeniu nowych kart graficznych z pokolenia GeForce 8800, Radeon X1000 i HD 2000, ale teoretycznie można wykorzystywać także dużo starsze układy. Karty z procesorami NVIDII, począwszy od NV20 (GeForce3 i GeForce4 poza MX), mają potencjał niezbędny do GPGPU. Decyduje o tym możliwość dostępu do wierzchołkowych obliczeń przez mechanizm spoza Direct3D. Inna rzecz, że ta generacja kart udostępnia tylko dokładność FP16, która ogranicza ich wykorzystanie. Pokolenie NV30 (od GeForce FX 5200) i R300 ATI (Radeon 9700) dysponuje dokładnością odpowiednio FP32 albo FP24 oraz potencjałem Pixel and Vertex shader 2. Zysk polega na możliwości bardziej skomplikowanego programowania i większej dokładności.

Jednak dopiero technologia zunifikowanych jednostek (unified shader architecture) pozwoliła GPGPU wystartować. Zamiast dzielić przetwarzanie sztywno na wierzchołkowe i pikselowe, architektura ta dysponuje bardziej uniwersalnym, zunifikowanym procesorem potokowym, wliczając w to jednostki arytmetyczne, które mogą prowadzić oba rodzaje obliczeń (także nowe instrukcje cieniowania z repertuaru DirectX 10).

Cechą, która czyni z GPU procesor o wiele szybszy od CPU, jest równoległość. Typowy Core 2 może wykonywać kilka instrukcji SIMD w ciągu jednego taktu zegara, natomiast najnowsze GPU radzą sobie z setkami. Radeon z ATI ustanowił nowy rekord równoległości dzięki 48 jednostkom przetwarzania pikseli (pixel shader). Właśnie ten kawał krzemu tworzy podstawę procesora Stream i wspomagany przez jeden gigabajt DRAM GDDR3 składa się na szesnaście potoków renderingu, które - chociaż cały czas obecne - z reguły pozostają bezczynne. Ale procesor G80 NVIDII (GeForce 8800) ma 128, a R600 ATI (Radeon HD 2900XY) nawet 320 zunifikowanych jednostek obliczeniowych. To jasne, że możliwości równoległego przetwarzania obu układów są ogromne.

Niestety, dzisiejsza generacja kart graficznych z perspektywy wykorzystania ich do obliczeń ma jedną poważną wadę. Jest nią mniejsza dokładność liczb zmiennopozycyjnych. Podczas gdy koprocesory arytmetyczne używane w dzisiejszych superkomputerach udostępniają FP64 (podwójna precyzja), ATI i NVIDIA pozostają przy FP32 (pojedyncza precyzja), chociaż ta druga firma zapowiada wyprodukowanie układów FP64 pod koniec tego roku.