Karta graficzna zamiast CPU, czyli superkomputer pod twoim biurkiem

Karta graficzna zamiast CPU, czyli superkomputer pod twoim biurkiem

Karta graficzna zamiast CPU, czyli superkomputer pod twoim biurkiem
03.01.2008 14:00, aktualizacja: 03.01.2008 16:30

Współczesny procesor ( CPU ) jest całkiem zmyślnym kawałkiem krzemu, ale w niektórych dziedzinach daleko mu do wyspecjalizowanego procesora graficznego ( GPU ), który niektóre zadania potrafi wykonać o cały rząd wielkości szybciej. Te zadania kręcą się wokół renderowania grafiki trójwymiarowej tak szybko jak się tylko da i z możliwie najwyższą jakością. 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 procesor graficzny, albo w skrócie GPGPU. Przerzucenie części obowiązków centralnego procesora na barki karty graficznej może być więc całkiem skutecznym sposobem poprawienia wydajności całego komputera.

W gruncie rzeczy wszelkie obliczenia możliwe do podzielenia na powtarzające się algorytmy mogą być przyspieszane 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. Pierwszą, która przypomniała środowisku specjalistów o możliwościach GPGPU była ATI z jej Stream Computing initiative - http://techreport.com/etc/2006q4/stream-computing/index.x?pg=1.

Sama nazwa "stream computing" ( obliczenia potokowe ) nie została przez ATI precyzyjnie zdefiniowana, chodzi o taką klasę problemów, która wyraźnie różni się od obliczeń tradycyjnie uważanych za najsilniejszą stronę CPU. Jednym z pierwszych zastosowań w jej ramach były obliczenia naukowe dotyczące modelowania budowy protein.

Jednakże możliwości GPGPU nie są badane jedynie przez 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 GPGPU jest silnie związana z przetwarzaniem potokowym i pewnie stąd ATI wybrało tę nazwę dla swojego narzędzia. Ale przetwarzanie potokowe wcale nie zostało wynalezione przez tą firmę. W istocie rzeczy jego korzenie sięgają czasów sprzed wynalezienia peceta. Jest 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 wykonywanie 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 implementacji tego pomysłu jest Cray-1, którego pierwszy egzemplarz z serii został zainstalowany w laboratorium Los Alamos w 1976 roku. Stał się możliwy wielki przyrost wydajności, ale tylko tych zadań, które dają się podzielić na powtarzalne operacje. Ta technologia znalazła sobie drogę także do pecetowych CPU pod postacią stale udoskonalanych i coraz bardziej skomplikowanych serii instrukcji z rodziny Single Instruction Multiple Data ( SIMD ). Zaczęło się od MMX, potem 3DNow! dzisiaj doszliśmy do kolejnych wersji SSE ( Streaming SIMD Extensions ). Jak z tego widać procesor centralny także ma własny skromny zasób instrukcji potokowych, które fizycznie stały się częścią jednostki zmiennopozycyjnej ( FPU ). To już zupełnie inny układ od koprocesora matematycznego 80287 z pionierskich czasów.

Następny krok w rozwijaniu tej idei został wykonany przez 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 zoptymalizowane do wykonywania powtarzających się operacji przy renderowaniu trójwymiarowym. Ja z tego widać GPGPU nie jest niczym specjalnie nowym, jedynie realizacją technologii superkomputerowej wykonanej na tanim chipie peryferyjnym peceta.

Bez emerytury

GPGPU stało się bardziej znane dopiero po wprowadzeniu nowych kart graficznych z pokolenia GeForce 8800, Radeon X1000 i HD 2000, ale dużo starsze układy teoretycznie także mogą być wykorzystywane. 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 werteksowych 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 ATI's R300 ( Radeon 9700 ) dysponuje dokładnością odpowiednio FP32 albo FP24 oraz możliwościami 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 werteksowe i pikselowe architektura da 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ść. Kiedy typowy Core 2 może wykonywać kilka instrukcji SIMD w ciągu jednego taktu zegara najnowsze GPU radzą sobie z setkami. Radeon z ATI ustanowił nowy rekord równoległości dzięki swoim 48 jednostkom przetwarzania pikseli Pixel Shader. To jest ten kawał krzemu, który 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 z Nvidii ( GeForce 8800 ) ma 128, a R600 z 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 ), to ATI i NVIDIA ciągle pozostają przy FP32 ( pojedyncza precyzja ), chociaż ta druga twierdzi, że układy FP64 wyprodukuje pod koniec tego roku.

Lekko otwarte

Jedną z najważniejszych przeszkód na drodze wykorzystania kart graficznych do obliczeń spoza specyfiki renderingu 3D może stać się izolacja sprzętu od narzędzi dla programistów zdolnych wykorzystać jego możliwości. W ten sam sposób w jaki Intel udostępnia kompilatory C++ zoptymalizowane do możliwości swoich procesorów także producenci kart graficznych powinni udostępniać środki otwierające dostęp do wszystkich możliwości GPGPU.

Interfejs ATI do tego celu nazywa się Close to Metal ( CTM ) - http://www.amd.com/us-en/corporate/virtualpressroom/0,,51104543%7e114147,00.html. Pozwala on programistom wykorzystywać naturalne instrukcje ich procesorów potokowych i możliwości sprzętowe Radeona. Oczywiście można skorzystać z Direct3D albo OpenGL w roli narzędzia do programowania, ale ATI twierdzi, że dostęp bezpośredni do kodu maszynowego, jaki gwarantuje CTM, pozwala aż ośmiokrotnie przyspieszyć pracę. To zrozumiałe ze względu na specyficzne zorientowanie Direct3D i OpenGL na obliczenia w trzech wymiarach. Z tego powodu w oprogramowaniu tworzy się dodatkowa warstwa, która przeszkadza w wykonywaniu innych rodzajów obliczeń.

Z drugiej strony CTM nie jest językiem wysokiego poziomu jak na przykład C++. Raczej przypomina kod maszynowy. CTM umożliwia zbudowanie interfejsu na wyższym poziomie abstrakcji dla takich języków jak C++ ale ATI pozostawia tę pracę do wykonania innym firmom. Te z kolei niezbyt palą się do roboty, którą według nich powinna należeć do obowiązków producenta procesora. Ale ponieważ CTM jest częścią rodziny oprogramowania otwartego, każdy może zbudować swój własny kod korzystając z pomocy tego środowiska i publikowanych tam cząstkowych rozwiązań. Tak czy inaczej, wyspecjalizowane aplikacje na GPGPU są programowane na poziomie o wiele niższym niż C++ ale uzyskują dzięki temu niespotykane możliwości optymalizacji kodu i przyspieszenia pracy. CUDA NVIDII

Odpowiedź NVIDII na CTM z ATI do programowania GPGPU nazywa się "Compute Unified Device Architecture ( CUDA ) - http://www.pcworld.pl/news/107322/100.html". Pod tą wiele obiecującą nazwą kryje się narzędzie przeznaczone do kart GeForce z serii 8000 oraz ostatnich Quadro FX 4600 i 5600, które obsługują technologię Unified Shader Architecture. Wykluczone są poprzednie generacje kart. CTM z ATI jest mniej wymagające i obsługuje procesory począwszy od R580 ( Radeony z serii X1900 ) a więc dwa ostanie pokolenia mogą w pełni wykorzystywać możliwości GPGPU.

NVIDIA próbuje wyróżnić swoją implementację GPGPU spośród innych używając terminu obliczenia wielowątkowe ( thread computing ) zamiast potokowych ( stream computing ). Jednak istnieje też faktyczna różnica, procesor graficzny NVIDII przetwarza instrukcje raczej z pamięci podręcznej niż pamięci video i to w grupach liczących przynajmniej 32 wątki na raz. NVIDIA twierdzi, że ta architektura jest szybsza od GPGPU z ATI, która posługuje się pamięcią na tekstury. Niestety nie ma kryterium zdolnego wykazać tę wyższość. Kolejna z zasadniczych różnic między konkurentami tkwi w poziomie kodu. CUDA wykorzystuje standardowy interfejs języka C i dzięki temu jest o wiele łatwiejsza do programowania niż CTM.

Ostatnio NVIDIA wprowadziła na rynek ciekawy produkt dedykowany specjalnie do GPGPU, nazwany Tesla, który jest bliźniaczo podobny do karty graficznej. Rzeczywiście, jego układy opierają się na tym samym rdzeniu G80 jak w GeForce 8800, ale konfiguracja jest zoptymalizowana pod potrzeby przetwarzania potokowego. Tesla składa się z osobnej karty, zewnętrznego boksu zawierającego dwie karty ( podobnie jak w zewnętrznym systemie graficznym Quadro Plex ).

Do korzeni

Pomimo tego, że ATI dysponuje GPGPU z systemem CTM, który pozwala programować karty o dwa pokolenia wstecz, to raczej NVIDIA zasługuje na tytuł pioniera aplikacji, które można zaliczyć do kategorii GPGPU. W kwietniu 2004 roku na rynku ukazał się Gelato, program do renderowania 3D ale nie pracujący w czasie rzeczywistym, przeznaczony dla zawodowych animatorów. Ten fakt można uznać za żart technologii skoro pierwsze "ogólne zastosowanie" procesora graficznego akurat niewiele odbiega od jego standardowej specyfiki pracy.

Jednak paradoks nie jest aż tak wielki, renderowanie wykorzystuje ślady promieni i ogólne oświetlenie. Te metody nie należą do arsenału przyspieszanej hardware'owo części Direct3D, więc i tak nie były do realizacji konwencjonalnymi metodami. Gelato jest nastawione na wizualną jakość bez kompromisu, mniej ważne są liczby ramek wyświetlane w czasie rzeczywistym. Do swojej pracy Gelato wymaga karty graficznej z możliwością przetwarzania liczb pojedynczej precyzji, typu FP32. Te warunki spełniają karty oparte o procesor NV30 lub późniejszy ( GeForce FX 5200 i nowsze ). Dostępna jest wersja darmowa programu, ale prawdziwą siłę demonstruje dopiero wydanie Pro. Za 1500 dolarów od węzła dostaje się możliwość równoległego renderowania sieciowego, wielowątkowości i naturalnej obsługi kodu 64-bitowego. Obie wersje dostarczane są z wtyczkami Mango i Amaretto, które pozwalają renderować bezpośrednio z Maya firmy Alias i 3ds Max Autodesku, dwóch najlepszych programów do animacji używanych w produkcji filmów i
projektowaniu gier.

Pieśń przyszłości

CUDA i Close to Metal to interesujące inicjatywy, ale pełne wykorzystanie obu technologii jest raczej pieśnią przyszłości. Programiści ciągle jeszcze uczą się sposobów na optymalne zagospodarowanie więcej niż jednego rdzenia w CPU, więc na wspomaganie Excela przez GeForce lub Winampa przez Radeona ( patrz też: "Karta dźwiękowa firmy... ATI? - http://www.pcworld.pl/news/93850.html" ) przyjdzie nam zapewne jeszcze trochę poczekać.

Zgodnie z ankietą przeprowadzoną w redakcji PC World Komputera masowe wykorzystywanie GPU do zadań innych niż przetwarzanie grafiki w aplikacjach codziennego użytku powinno zacząć się w 2009-2010 roku.

_ Artykuł pochodzi z czasopisma PC World Komputer 12/2007. Więcej o aktualnym wydaniu magazynu na stronie PCWK - http://20.pcworld.pl/nowynumer/default801.asp. _

Źródło artykułu:PC World Komputer
Oceń jakość naszego artykułuTwoja opinia pozwala nam tworzyć lepsze treści.
Wybrane dla Ciebie
Komentarze (0)