Karty pełne mocy

Możliwości kart graficznych nie ograniczają się do kreowania wyglądu gier komputerowych na monitorze. Ich wielka moc obliczeniowa może być użyta w innych zadaniach, chociaż do w pełni uniwersalnego wykorzystania procesorów graficznych jeszcze daleko.


Możliwości kart graficznych nie ograniczają się do kreowania wyglądu gier komputerowych na monitorze. Ich wielka moc obliczeniowa może być użyta w innych zadaniach, chociaż do w pełni uniwersalnego wykorzystania procesorów graficznych jeszcze daleko.

Procesory graficzne są wykorzystywane do obliczeń potrzebnych w symulacjach zjawisk fizycznych, np. badaniu przepływu cieczy czy gazu.

Procesory graficzne są wykorzystywane do obliczeń potrzebnych w symulacjach zjawisk fizycznych, np. badaniu przepływu cieczy czy gazu.

Czy można użyć kart graficznych do innych, niż im przeznaczono, celów? Okazuje się, że jest to możliwe - ten element naszego komputera może stać się niezwykle wydajnym koprocesorem, choć jego jednostki obliczeniowe (GPU) nie sprawdzą się we wszystkich zastosowaniach. Procesory graficzne, budowane pod kątem wydajności w określonych dziedzinach, nie są uniwersalne. GPU zawierają zestaw instrukcji związanych z generowaniem grafiki 3D: mapowaniem tekstur, renderowaniem wielokątów, zmianą obiektów względem różnych układów współrzędnych. Nowoczesne karty graficzne potrafią także przekształcać piksele tworzonego obrazu i wierzchołki obiektów za pomocą krótkich programów (tzw. shaderów). Ich wykorzystanie pozwoliło na uzyskanie efektów graficznych powszechnie identyfikowanych z nową generacją gier na PC. Większość tych operacji wymaga intensywnego przetwarzania macierzy, nowoczesne shadery potrzebują także wydajnych obliczeń zmiennopozycjnych. Dostępność operacji zmiennoprzecinkowych w GPU oznacza, że procesor graficzny staje się coraz bardziej uniwersalny. Jednostki obliczeniowe kart graficznych dążą w kierunku podobnej wszechstronności jak CPU, a przy tym zachowują możliwość niezwykle szybkiego przetwarzania macierzy. Coraz częściej o wykorzystaniu GPU myślą nie tylko programiści gier.

Karty graficzne świetnie sprawdzają się przy specyficznych obliczeniach: wymagających przetwarzania wielkiej ilości niezależnych od siebie danych, dających się wykonywać równolegle. Coraz częściej podejmowane są próby wykorzystania procesorów graficznych w badaniach naukowych, np. przy modelowaniu zjawisk fizycznych, obliczeniach przepływu cieczy, przetwarzaniu dźwięku, grafiki rastrowej (w tym zdjęć cyfrowych) i wideo. Naukowcy próbują wykorzystać moc kart graficznych także do symulacji zjawisk pogodowych, w mechanice kwantowej i kryptografii.

Pierwsze przykładowe programy wykorzystujące CUDA potrafią m.in. dokonywać skomplikowanej analizy zachowań giełd papierów wartościowych i symulować przepływ cieczy. Wszystko to z wykorzystaniem procesora graficznego.

Pierwsze przykładowe programy wykorzystujące CUDA potrafią m.in. dokonywać skomplikowanej analizy zachowań giełd papierów wartościowych i symulować przepływ cieczy. Wszystko to z wykorzystaniem procesora graficznego.

CUDA na kiju

Firmy NVIDIA i AMD dostrzegły możliwości, jakie otwierają się przed procesorami graficznymi, które mogą być wykorzystane do czegoś więcej niż generowanie grafiki. Obydwie firmy przygotowują mocne uderzenie związane z wykorzystaniem GPU do uniwersalnych obliczeń. Jeszcze na rok 2007 zapowiadane są premiery kart linii G80GL i R600. Apetyt budzi zwłaszcza projekt R600 firmy AMD: karta wyposażona w 4 GB pamięci i stanowiąca alternatywny procesor do obliczeń zmiennopozycyjnych w stosunku do tradycyjnego CPU.

Pod koniec lutego bieżącego roku NVIDIA udostępniła pakiet programistyczny wraz z kompilatorem specjalnej wersji języka C, przeznaczony do tworzenia wysoko wydajnych aplikacji wykorzystujących GPU jako koprocesor. Pakiet ten jest częścią większego programu o wdzięcznej nazwie CUDA (Compute Unified Device Architecture). Narzędzia udostępnione przez NVIDIĘ mogą znacząco przyśpieszyć tworzenie aplikacji wykorzystujących procesor graficzny. Programiści, których projekty wymagają zaawansowanych obliczeń, będą mogli skorzystać ze specjalnych konstrukcji językowych, umożliwiających przekazanie części zadań karcie graficznej.

Nieco inną drogę wybrała firma AMD (która wchłonęła ATI), prezentując inicjatywę CTM (Close To Metal). Udostępniła specyfikację języka niskiego poziomu do swoich produktów. W ten sposób umożliwiła swobodny rozwój narzędzi programistycznych, bibliotek, kompilatorów wykorzystujących procesory graficzne AMD. Na rynek wydajnych procesorów graficznych ma wejść także Intel, być może jeszcze w 2007 roku. Wojna o najwyższą wydajność uniwersalnych procesorów przeniesie się na nowe pole, a użytkownicy mogą spodziewać się znaczących, jeśli nie rewolucyjnych zmian w sposobie korzystania z kart graficznych.

Nie tylko giganci

Sh to zestaw narzędzi programistycznych służących do efektywnego tworzenia aplikacji wykorzystujących moc procesora graficznego. Udostępniany jest na zasadach open source.

Sh to zestaw narzędzi programistycznych służących do efektywnego tworzenia aplikacji wykorzystujących moc procesora graficznego. Udostępniany jest na zasadach open source.

Brook to stworzony na uniwersytecie w Stanford język programowania zaprojektowany z myślą o wykorzystaniu mocy obliczeniowej kart graficznych. Jest rozszerzeniem języka C, zawierającym podstawowe narzędzia do oprogramowania możliwości karty graficznej. Wprowadzony został nowy typ danych, tzw. strumienie (stream), służące do wysyłania i odbierania informacji przetwarzanych przez GPU. Używana jest także specjalna odmiana funkcji, tzw. jądro (kernel), która równolegle przetwarza wiele danych wprowadzonych w postaci strumienia. BrookGPU to ciekawy przykład usprawnienia programowania GPU, może to być doskonały sposób na zapoznanie się z zagadnieniami programowania procesorów kart graficznych. Projekt został udostępniony w wersji beta, do pobrania ze stronyhttp://sourceforge.net/projects/brook . Aby wypróbować go na własnym komputerze, potrzebna będzie odpowiednio mocna karta graficzna (co najmniej ATI 9700 lub NVIDIA 5200), najlepiej obsługująca Pixel Shader 3.0. Wymagany jest także pakiet Microsoft DirectX 9 SDK, kompilator gcc albo Microsoft Visual C++ 7 lub 8, a także kompilator NVIDIA Cg (dostępny na stroniehttp://developer.nvidia.com/page/cg_main.html ).

Podobnym do Brook projektem jest Sh (http://www.libsh.org ), rozszerzenie C++ wprowadzające konstrukcje językowe, pozwalające na wygodne użycie procesora graficznego. Sh to projekt darmowy i otwarty, udostępniany na licencji GNU GPL. Początkowo był rozwijany przez firmę RapidMind (http://www.rapidmind.net ), a od połowy 2006 roku został udostępniony społeczności Open Source.