partner serwisu

GPU i oprogramowanie, czyli procesor graficzny nie tylko do gier

GPU i oprogramowanie, czyli procesor graficzny nie tylko do gier
Autor:
Marek Kowalski
Data publikacji:
25 września 2015, 01:37
Średnia ocena:
Twoja ocena:
Tagi:
adobe, amd, autodesk, geforce, gpu, handbrake, intel, nvidia, photoshop, radeon, windows

Niemal każdy pasjonat komputerów, nowoczesnych technologii i gier, zapytany po co w komputerze powinna być szybka karta graficzna odpowie "do gier!". Oczywiście to prawda, ale przecież nie tylko. Współczesne układy graficzne to wyspecjalizowane jednostki obliczeniowe, pod niektórymi względami znacznie szybsze od procesorów głównych. Czy zatem kupno komputera, np. laptopa, wyposażonego w wydajny układ GPU ma sens w przypadku, gdy nabywaną maszynę zamierzamy wykorzystać niemal wyłącznie do pracy? Postanowiliśmy to sprawdzić, doposażyliśmy się w sprzęt z miarę przyzwoitymi GPU na pokładzie i rozpoczęliśmy rekonesans w poszukiwaniu aplikacji, w których określone funkcje mogą "nabrać wiatru w żagle" i wykonać się zauważalnie (nawet bardzo zauważalnie) szybciej, o ile tylko komputer, na którym dane funkcje są uruchamiane, jest wyposażony nie tylko w wydajny procesor główny - CPU - ale również wydajny układ graficzny - GPU. 

Interesujący nas w artykule temat jest określany przez miłujących wszelkiego typu skrótowce Amerykanów terminem GPGPU, czyli General-Purpose Computing on Graphics Processing Unit. Można to ująć w naszej wspaniałej mowie jako wykorzystanie procesorów graficznych w zadaniach obliczeniowych ogólnego przeznaczenia (w domyśle: nie związanych wyłącznie z generowaniem grafiki w grach komputerowych).

Któregoś dnia podczas prowadzenia jednej z licznych dysput redakcyjnych zaczęliśmy się zastanawiać, czy użytkownik używający głównie aplikacji realizujących konkretne zadania obliczeniowe (w sensie nie-gracz), bardziej skorzysta z komputera dysponującego silniejszym CPU, czy też niekiedy opłaca się również zainwestować w maszynę określaną jako "sprzęt do gier" choć z góry wiadomo, że to nie gry będą głównym zadaniem realizowanym na danym sprzęcie. Oczywiście odpowiedź na to pytanie zależy od bardzo wielu czynników: różnicy pomiędzy stanem wyjściowym a zakładanym (czyli czym dysponuje słabszy komputer, a czym mocniejszy), a także - może nawet przede wszystkim - od rodzaju aplikacji, które mają być wykorzystywane w codziennej pracy i zadań, które za pomocą tych aplikacji są realizowane. Standardowy Notatnik Windows może być z powodzeniem wykorzystywany przez programistę czy administratora sieci np. do pisania skryptów, ale w tym przypadku wyposażenie stanowiska pracy w komputer z super wydajnym GPU nie przyniesie żadnych korzyści, bo Notatnik nie jest aplikacją, która w ogóle potrafi wykorzystać potencjał obliczeniowy jakiegokolwiek układu graficznego - choć nie do końca, bo sam system operacyjny może wykorzystywać moc GPU choćby w "kreśleniu" interfejsu użytkownika - tutaj jednak skupiamy się na korzyściach bezpośrednich wynikających z możliwości "zatrudnienia" GPU w zadaniach realizowanych za pomocą konkretnych aplikacji. W tym kontekście Notatnik i GPU to ślepa uliczka. Z drugiej jednak strony istnieje mnóstwo aplikacji i zadań, które efektywnie potrafią wykorzystać moc drzemiącą w mocy obliczeniowej układów graficznych, niestety w większości przypadków są to drogie pakiety profesjonalnego oprogramowania. Czy nie ma nic dla zwykłego Kowalskiego? Zanim jednak przejdziemy do opisu wybranych aplikacji i naszych pomiarów porównawczych najpierw kilka słów o wykorzystywanym przez nas sprzęcie.

Park maszynowy

Urządzeniami, za pomocą których chcieliśmy sprawdzić hipotezę dotyczącą ewentualnej opłacalności posiadania komputera z silnym (względnie) GPU jako jednostki wykorzystywanej głównie do pracy a nie do gier były trzy komputery. Tradycyjnie już informujemy, że wszystkie opisywane rozwiązania sprawdziliśmy w praktyce. Nie jest naszym celem przepisywanie instrukcji obsługi, czy informacji "zasłyszanych" z internetu. 

Komputerem "wyjściowym", czyli jednostką najsłabszą (choć wcale nie słabą obliczeniowo) był laptop Acer V3-371, wyposażony w procesor Intel Core i5-4210U, 8 GB pamięci RAM, dysk SSD 128 GB i matrycę o rozdzielczości 1920 x 1080 pikseli. Ten komputer nie miał odrębnego układu GPU, za generowanie grafiki odpowiadał stosowny podsystem CPU Intela. Maszyna pracowała pod kontrolą systemu Windows 10.

Acer V3-371

Kolejnym sprzętem, na którym instalowaliśmy i sprawdzaliśmy oprogramowanie zdolne do wykorzystania mocy obliczeniowej układów graficznych był laptop Acer Aspire V15 Nitro (model VN7-571G-70MR). Komputer ten wyposażony jest w procesor Intel Core i7-5500U, 12 GB pamięci RAM, 256 GB SSD + 1TB HDD i matrycę o rozdzielczości 1920 x 1080 pikseli. Układem najbardziej nas interesującym w kontekście poruszanej tu tematyki był procesor graficzny NVIDIA GeForce GTX 850M z własną pamięcią o pojemności 4 GB. Komputer pracował pod kontrolą systemu operacyjnego Windows 8.1.

Oba powyższe komputery przekazał nam producent, firma Acer.

Acer

Natomiast ostatnim modelem był model ASUS ROG G750. To już typowa maszyna "dla graczy" o czym świadczy m.in. sygnowanie tego modelu marką ROG (Republic Of Gamers) utworzoną przez ASUS-a specjalnie dla urządzeń i akcesoriów przeznaczonych głównie dla miłośników szeroko pojętego gamingu. Laptop ten wyposażony był w procesor Intel Core i7-4700HQ, 16 GB pamięci RAM, dysk twardy Hitachi Travelstart 5K100 1 TB i matrycę o rozdzielczości 1920 x 1080 pikseli. Dysponował najsilniejszą (choć nie najnowszą) jednostką GPU: układem NVIDIA GeForce GTX 780M. Komputer pracował pod kontrolą systemu Windows 10.

Urządzenie przekazał nam producent, firma Asus.

CPU i GPU

Dedykowane procesory graficzne wbudowywane w niektóre modele współczesnych komputerów to bardzo szybkie jednostki obliczeniowe, ale ze względu na swoją specjalizację są one użyteczne jedynie w niektórych rodzajach zadań obliczeniowych. Oznacza to, że wykorzystanie GPU w jakiejś aplikacji może, ale nie musi przynieść korzyści. Zresztą to czy dany program w ogóle będzie potrafił wykorzystać potencjał obliczeniowy układu graficznego zależy przede wszystkim od programisty i opracowanego przez niego kodu danej aplikacji. To program powinien mieć wbudowane procedury wykorzystujące układy graficzne do realizacji określonych obliczeń.

Przede wszystkim należy pamiętać, że jednostki GPU liczą inaczej niż procesory główne (CPU), czyli układy ogólnego przeznaczenia. Najogólniej rzecz biorąc - bez wnikania w techniczne zawiłości związane z dokładnym sposobem dokonywania obliczeń przez współczesne układy wysokiej skali integracji - procesory ogólnego przeznaczenia (CPU) lepiej radzą sobie z przetwarzaniem sekwencyjnym, podczas gdy układy "graficzne" doskonale nadają się do obliczeń równoległych. Oczywiście procesory główne (CPU), zwłaszcza współczesne, wielordzeniowe układy, również potrafią dokonywać obliczeń równoległych, ale w niektórych zadaniach nie dorównują szybkością obliczeń układom graficznym. Współpraca obu typów układów w zadaniach numerycznych może przynieść wymierne korzyści użytkownikom. Przy czym warto podkreślić, że wykorzystanie potencjału GPU zawsze odbywa się przy współpracy procesora/procesorów głównych. Nigdy nie jest tak, że GPU zastępuje CPU. Po prostu zadania są rozdysponowane do poszczególnych typów układów w zależności od rodzaju wymaganych obliczeń. Tylko wtedy ma to sens.

Kiedy GPU może się przydać?

Z pewnością niejednokrotnie w przekazach medialnych czy informacjach dystrybuowanych m.in. przez samych producentów szybkich kart graficznych zaobserwowaliście informacje na temat potężnego zysku wydajnościowego w różnych naukowych zadaniach takich jak np. poszukiwanie egzoplanet, sekwencjonowanie genomu i białek, złożone obliczenia finansowe, obrazowanie medyczne, predykcja wiązań molekularnych, prognozowanie pogody i zmian klimatycznych i wiele, wiele więcej.

Oczywiście na domowym komputerze, nawet tym wykorzystywanym do prac biurowych czy graficznych, raczej nikt tego typu obliczeń nie będzie przeprowadzał (choć może wspomagać świat nauki, o czym w dalszej części artykułu). Istnieje jednak bardzo duża grupa programów, nawet wśród wielu popularnych narzędzi, w których określone funkcje potrafią wykorzystywać potencjał obliczeniowy układów graficznych. Zresztą sami producenci promują własne układy pod kątem ich zastosowań w złożonych obliczeniowo zadaniach, niekoniecznie mających cokolwiek wspólnego z generowaniem grafiki. Przykładem jest 20-stronicowy dokument (jest dostępny w języku angielskim;format PDF) opublikowany przez firmę NVIDIA, będący katalogiem aplikacji (przeznaczonych dla profesjonalistów), które potrafią korzystać z potencjału obliczeniowego układów tej marki.

Nawet jeżeli nie zajmujemy się pracą naukową, nie jesteśmy inżynierami, architektami, biologami etc. to i tak warto zajrzeć do wspomnianego dokumentu. Oprócz wyspecjalizowanych narzędzi do specyficznych naukowych zadań, znajdziemy w nim m.in. popularne programy firmy Adobe, takie jak Photoshop (chyba nikomu nie trzeba przedstawiać tego narzędzia), Premiere Pro (edycja wideo), SpeedGrade (korekcja barw), czy After Effects (efekty wideo). Z mocy obliczeniowej układów graficznych potrafi korzystać również cały arsenał aplikacji firmy Autodesk, m.in. renomowany AutoCAD (najpopularniejszy na świecie program do projektowania 2D i 3D), 3ds Max (popularne narzędzie do modelowania, animacji i renderingu grafiki 3D), a także Mudbox (modelowanie przestrzenne), Inventor (projektowanie elementów mechanicznych, modelowanie produktów), Revit (projektowanie budynków), Moldflow (oprogramowanie do projektowania form wtryskowych), Maya (animacja i modelowanie przestrzenne), czy MotionBuilder (animacja postaci).

Uważny Czytelnik zwróci jednak uwagę, że powyższe aplikacje mimo wszystko wciąż obracają się wokół grafiki (obróbka, projektowanie, modelowanie, animacja itp.). To prawda, ale szybkie przetwarzanie zadań równoległych przez układy graficzne przynosi wymierne efekty również w zadaniach w ogóle niezwiązanych z grafiką, np. w kryptografii. Przykładem tutaj mogą być programy do odzyskiwania haseł firmy Elcomsoft. Moc GPU w zastosowaniach bardziej amatorskich przydaje się szczególnie (gry cały czas pomijamy) podczas kodowania, dekodowania i konwertowania danych wideo, pokażemy to na przykładzie bezpłatnego konwertera wideo Free CUDA Video Converter.

Czy tylko NVIDIA?

Oczywiście nie. W naszym przypadku zainteresowanie oprogramowaniem zdolnym do wykorzystania potencjału układów graficznych tego producenta wynikało po prostu z typu sprzętu jakim dysponowaliśmy (patrz wyżej), ale do wspomagania CPU i zadań stawianych przez aplikacje używane przez użytkownika mogą być wykorzystywane teoretycznie dowolne układy graficzne, wszystko jednak zależy od tego w jaki sposób kod danego programu został opracowany i z jakimi technologiami jest zgodny. Poniżej przedstawimy najpopularniejsze chyba obecnie techniki (czy też jak wolą niektórzy: interfejsy programowania) umożliwiające "zaprzęgnięcie" GPU do pracy z różnymi aplikacjami ogólnego przeznaczenia:

  • CUDA (Compute Unified Device Architecture); rozwiązanie firmy NVIDIA i działające tylko z układami tej firmy; jest to specjalny interfejs programowania GPU, obecnie wykorzystywany głównie w badaniach naukowych i przemyśle.
  • OpenCL (Open Computing Language) - opracowany pierwotnie przez Apple interfejs programowania wyspecjalizowany w realizacji obliczeń ale nie tylko za pomocą układów GPU, teoretycznie OpenCL może być wykorzystywany w dowolnym programowalnym układzie scalonym (dowolnego typu) zdolnym do wykonywania obliczeń
  • DirectCompute - interfejs obliczeniowy opracowany przez Microsoft, po raz pierwszy zadebiutował wraz z DirectX 11.

Czy moja karta graficzna potrafi liczyć?

No dobrze, skoro wiemy, że zmuszenie układu graficznego do pracy wymaga obsługi przez posiadany sprzęt określonych typów interfejsów obliczeniowych, jak sprawdzić, które z nich są obsługiwane przez kartę/układ graficzny w danym komputerze? To akurat jest bardzo proste, wystarczy posłużyć się bezpłatnym oprogramowaniem diagnostycznym, np. programem TechPowerUp GPU-Z.

PobierzGPU-Z

Klikając widoczny obok przycisk możesz pobrać najnowszą wersję programu TechPowerUp GPU-Z. Program działa we wszystkich wersjach systemu Windows (łącznie z najnowszym Windows 10). Jest dostępny w wersji 32-bitowej oraz 64-bitowej.

Po uruchomieniu tej aplikacji na ekranie powinniśmy zobaczyć okienko podobne do przedstawionego poniżej. 

Niezależnie od mnóstwa interesujących parametrów na temat układu graficznego, porcją danych najbardziej nas interesującą są wskaźniki widoczne obok napisu Computing. Zaznaczone pole obok nazwy konkretnego interfejsu oznacza, że układ graficzny wbudowany w komputer, na którym został uruchomiony GPU-Z obsługuje ten interfejs. No dobrze, na ile zatem układ graficzny "pomaga" w pracy programom, które są zdolne wykorzystać jego moc obliczeniową? Oto kilka przykładów.

Adobe Photoshop

Ten najpopularniejszy edytor graficzny świata "nauczył się" wykorzystywać potencjał obliczeniowy układów GPU już dość dawno, bo wraz z rynkowym debiutem generacji CS4. Starsze wersje Photoshopa, choć wciąż używane przez wielu użytkowników, niestety nie są w stanie wykorzystać mocy obliczeniowej układów graficznych, zatem jakiego byśmy "potwora" graficznego nie mieli w komputerze, starszy Photoshop nie będzie pracował na takim sprzęcie ani trochę szybciej. W przypadku Photoshopa CS4 i CS5 moc GPU jest wykorzystywana za pośrednictwem graficznego interfejsu OpenGL (nie mylić z OpenCL - OpenCL jest uniwersalnym interfejsem obliczeniowym ogólnego przeznaczenia, natomiast OpenGL to interfejs wykorzystywany wyłącznie w zadaniach związanych z grafiką). Ponieważ OpenGL to interfejs graficzny, zatem wsparcie ze strony GPU w CS4 i CS5 dotyczyło wyświetlania przestrzeni roboczej użytkownika w programie Adobe Photoshop.

Kolejną istotną generacją - względem wdrożonych w Photoshopie zadań, które mogą być realizowane za pomocą układów graficznych - był Photoshop CS6. Od tej wersji Adobe wprowadził nowy silnik graficzny o nazwie Mercury Graphics Engine - korzysta on w znacznie szerszym stopniu z możliwości obliczeniowych układów graficznych.

Z nowszymi generacjami sprawa wygląda zdecydowanie lepiej. W naszej redakcji posłużyliśmy się najnowszą wersją Photoshop CC 2015.

Program standardowo sam wykrywa obecność układu graficznego w komputerze. W oknie Preferencje po wybraniu z bocznej listy kategorii pozycji Wydajność łatwo sprawdzić, czy włączone jest wykorzystywanie procesora graficznego. Stosowna pole wyboru umieszczono w sekcji Ustawienia procesora graficznego.

Po kliknięciu we wspomnianej sekcji przycisku Ustawienia zaawansowane, w kolejnym oknie można sterować zakresem zadań, w których GPU będzie "wspierać" Photoshopa. Powyższa ilustracja prezentuje domyślny zestaw ustawień na jednej z naszych platform testowych wyposażonych w układ NVIDII. 

Naprowadzenie kursora na pole wyboru Użyj funkcji OpenCL wyświetla "dymek" z opisem danej funkcji. Z tego opisu można się zorientować w jakich zadaniach interfejs OpenCL jest w Photoshopie wykorzystywany. Jak widać jest to m.in. inteligentne wyostrzanie, oczywiści filtry graficzne lub zmiana rozmiaru obrazu (z zachowaniem szczegółów).

Tak wyglądało okno zaawansowanych ustawień procesora graficznego na komputerze pozbawionym odrębnego GPU - Acer V3-371. W tej maszynie moduł graficzny (Intel HD Graphics 4400) jest zintegrowany z procesorem głównym (Intel Core i5-4210U). Jak widać w tym przypadku nie ma możliwości w ogóle skorzystania z funkcji OpenCL w Photoshopie.

Postanowiliśmy sprawdzić, czy faktycznie obecność szybkiego GPU wśród komponentów komputera może istotnie wpłynąć na wydajność operacji w tym najpopularniejszym edytorze graficznym. Przygotowaliśmy testowy zestaw zadań obejmujący m.in. zmianę rozmiaru obrazu (powiększenie), filtr formowanie (w angielskiej wersji: liquify) i filtr artystyczny. Taki zestaw zapisaliśmy i skopiowaliśmy na wszystkie maszyny i uruchomiliśmy mierząc czas wykonania wszystkich zadań. Rezultaty (w sekundach) przedstawia poniższy wykres.

Wyniki tylko częściowo wydają się oczywiste. Najlepszym rezultatem, czyli najkrótszym czasem wykonania zadań testowych wykazał się - zgodnie z oczekiwaniami - sprzęt wyposażony w najsilniejszy układ graficzny, ale z drugiej strony różnice pomiędzy trzema wynikami z włączoną akceleracją nie są tak duże, jakby to wynikało z wydajności samych układów GPU wspomagających pracę programu. Dlaczego tak jest? Przede wszystkim dlatego, że Photoshop wykorzystuje moc układów graficznych jedynie w niektórych zadaniach, przykładem może być tu obecny w testowym zestawie zadań filtr formowanie. To on w znacznym stopniu wpłynął na różnice wyników z akceleracją i bez akceleracji. Gdy powtórzyliśmy pomiary uprzednio wyłączając w ustawieniach Photoshopa korzystanie z wydajności układu graficznego (czyli w domyśle wszystkie obliczenia były wykonywane wyłącznie przez procesor główny), okazało się, że najszybszy z akceleracją komputer okazał się najwolniejszy. Skąd taka różnica? Paradoksalnie nie jest to wina układów CPU i GPU, lecz... dysku twardego. Zaobserwowaliśmy, że podczas automatycznego nanoszenia efektów filtra formowanie Photoshop intensywnie wykorzystywał dysk twardy. Tymczasem laptopy Acera (oba wykorzystywane przez nas modele) wyposażone były w znacznie szybszy napęd SSD, co wpłynęło na wynik przetwarzania w sytuacji gdy wyłączona była akceleracja GPU. Niezależnie od tego, różnice pomiędzy szybkością przetwarzania z włączonym wsparciem układu graficznego i przy pozbawieniu Photoshopa tego wsparcia są więcej niż zauważalne i z pewnością będą miały znaczenie w codziennej pracy. Inna sprawa, że odpowiadając na postawione we wstępie pytanie, niekoniecznie wymagana jest inwestycja w ultraszybki (lub przynajmniej jeden z szybszych) układów graficznych, bo oprogramowanie Adobe potrafi wykorzystać również moc znacznie wolniejszych jednostek Intel HD Graphics 4400 (taki model figurował w laptopie Acer V3-371).

A może konwersja wideo? HandBrake.

Jednym z najczęściej wymienianych zadań w kontekście obliczeń dokonywanych przez układy graficzne jest przetwarzanie wideo, a dokładniej konwersja i kodowanie wideo. Również i to postanowiliśmy sprawdzić. Wypróbowaliśmy dwa programy: HandBrake oraz Free CUDA Video Converter. Zacznijmy od tego pierwszego.

PobierzHandBrake

Klikając widoczny obok przycisk możesz pobrać najnowszą wersję programu HandBrake. Aplikacja działa w każdej aktualnej wersji Windows, dotyczy to również najnowszego systemu Windows 10.

HandBrake jest jednym z nielicznych (wciąż, mimo już dość długiej obecności na rynku programistycznym interfejsów programowania obliczeń GPU) narzędzi dostępnych bezpłatnie i umożliwiających "zatrudnienie" układów graficznych do konwersji i transkodowania wideo. Niestety, w praktyce zakres zastosowań tej aplikacji w powiązaniu z mocą obliczeniową jakiej mógłby dostarczyć szybki GPU jest mocno ograniczony. W istocie, jeżeli chodzi o funkcje OpenCL HandBrake oferuje zaledwie jedną (sic!) - skalowanie wideo. 

Tak prezentują się ustawienia programu HandBrake powiązane w jakikolwiek sposób z funkcjami umożliwiającymi wykorzystanie mocy obliczeniowej układów graficznych. Jeżeli chodzi o zastosowania uniwersalne (realizowane przez OpenCL), to tak naprawdę jedyną funkcją jest skalowanie metodą Bicubic. Opcja ta nawet nie jest standardowo aktywna. Sami twórcy deklarują, że "zysk" wydajnościowy z racji wykorzystania OpenCL do przeskalowywania przetwarzanego wideo może nie być w ogóle widoczny, pozostaje też kwestia jakości. Zdaniem wielu osób parających się konwersją wideo skalowanie metodą Lanczos daje jakościowo lepsze efekty niz Bicubic. Sami widzicie, że całość prezentuje się dość mało zachęcająco. Funkcje w jakikolwiek sposób powiązane z GPU są jeszcze w ustawieniach dekodowania. Pierwsza z nich to dekodowanie wideo za pomocą API Microsoftu (DirectX Video Acceleration, w skrócie DXVA), tutaj jednak sami twórcy programu zastrzegają, że to funkcja eksperymentalna i nadaje się w zasadzie do "testowania" (czyt. raczej nie działa niż działa). Drugą funkcją jest dekodowanie za pomocą technologii Intel QuickSync. Tutaj obecność szybkich układów NVIDII nie na wiele się przyda - rozwiązanie to działa tylko z układami Intela. Oczywiście najlepiej tymi najnowszymi.

Mimo to postanowiliśmy dokonać sprawdzenia, o ile szybsze będzie transkodowanie przykładowego pliku wideo na jeden z predefiniowanych profili wyjściowych wbudowanych w HandBrake'a (wybraliśmy profil iPad, czyli rekonwersję wideo do formatu zgodnego z iPadem).

Wynik w pełni zrozumiały, zadanie najszybciej wykonał komputer dysponujący najszybszym procesorem głównym. Gdyż tylko on brał udział w tym procesie. A co robił w tym czasie GPU? Odpowiedzi dostarczy poniższa ilustracja:

Za pomocą programu Process Explorer sprawdziliśmy w jakim stopniu pogram HandBrake obciąża GPU w trakcie wykonywania zadania transkodowania pliku wideo. Jak widać układ graficzny w zasadzie nic nie robi. Całą robotę wykonał CPU. Zatem mimo dostępnych tu i ówdzie informacji jak to HandBrake potrafi wykorzystać moc GPU, wypada stwierdzić: nie potrafi. Ten program nawet w ułamku procenta nie wykorzystuje GPU w takim stopniu, jak np. wspomniany wcześniej Photoshop.

Free CUDA Video Converter - kompletne fiasko

Nasza kolejna próba wykorzystania GPU do przetwarzania wideo za pomocą ogólnodostępnego i możliwie taniego (tu: darmowego) oprogramowania polegała na skorzystaniu z dostępnego bezpłatnie programu Free CUDA Video Converter. Nazwa brzmi obiecująco, jednak na nazwie się kończy. Na żadnej z używanych przez nas maszyn ten program się nie uruchomił. Jedynym objawem działania był wyświetlany przez kilkanaście sekund następujący obrazek: 

Ilustracja sugerowała ładowanie się aplikacji, ale na wszystkich trzech komputerach po kilkunastu sekundach program kończył działanie jeszcze zanim w ogóle je rozpoczął a proces był usuwany z pamięci.

Benchmark - CompuBench CL

Różnicę pomiędzy używanymi przez nas komputerami postanowiliśmy sprawdzić nie tylko w programach użytkowych, ale również za pomocą benchmarku (aplikacji testowej) CompuBench CL. Cechą tego właśnie programu pomiarowego jest to, że sprawdza on szybkość wykonywania operacji realizowanych z wykorzystaniem interfejsu OpenCL, który jest - jak już wiemy - jedną z metod "zatrudnienia" mocy obliczeniowej układów graficznych.

CompuBench CL

Klikając widoczny obok przycisk możesz pobrać najnowszą wersję benchmarka CompuBench CL. Jest to program działający na platformie Windows oraz Apple OS X. Dostępna jest również mobilna wersja dla Androida, ale nie korzysta ona już z OpenCL lecz z RenderScript.

Należy pamiętać, że OpenCL jest interfejsem z założenia wspomagającym różne zadania obliczeniowe na tzw. heterogenicznych platformach, czyli sprzęcie wyposażonym w różnego typu układy obliczeniowe. To zupełnie inne rozwiązanie niż np. CUDA, współpracujące wyłącznie z GPU NVIDII. W CompuBench CL wbudowano 7 testów obliczeniowych (wykrywanie twarzy, rozpoznawanie obiektów, dynamika płynów, symulacje cząsteczkowe, przetwarzanie wideo czy... "kopanie" kryptowalut (ten ostatni test, wykorzystujący popularny algorytm obliczania kryptowaluty Bitcoin jest - zdaniem twórców CompuBencha CL - dobrym narzędziem do mierzenia całkowitej wydajności obliczeniowej danego układu). Od użytkownika zależy, czy testy te mają być realizowane przez CPU, GPU zintegrowane z CPU czy też niezależne GPU.

Przykładowy ekran ustawień testów w CompuBench CL dotyczący wyboru jednostek obliczeniowych, które mają być wykorzystywane do obliczeń. Oczywiście ilość dostępnych tu opcji zależy od konfiguracji sprzętowej komputera, na którym benchmark jest uruchamiany. Powyższa ilustracja pochodzi z jednej z naszych maszyn testowych - laptopa Acer V15 Nitro, wyposażonego w układ graficzny zintegrowany z procesorem głównym, jak i niezależne GPU NVIDII.

Poniżej wyniki naszych pomiarów z komentarzem.

Powyższe rezultaty uzyskał "najsłabszy" z trójki wykorzystywanych przez nas komputerów - Acer Aspire V 13 (V3-371-51GY), czy zmiana sprzętu na szybszy znacząco polepszy wynik?

Powyższy zestaw wyników pochodzi z Acera Aspire V 15 Nitro, obliczenia były realizowane z wykorzystaniem układu NVIDIA GeForce GTX 850M, znacząco szybszego od zintegrowanego układu Intel HD Graphics 4400. W większości testów wydajność wzrosła kilkukrotnie (3-5-krotnie), wyjątkiem są obliczenia wykorzystujące algorytm Bitcoina. Tutaj zysk wydajności był aż kilkunastokrotny. Z jednej strony fajnie, z drugiej praktyczne zastosowanie tego faktu dziś jest żadne. Obecnie absolutnie nie opłaca się "wydobywać" kryptowalut na pojedynczym sprzęcie, pomijając już sam fakt sensowności takiej operacji. Z drugiej strony nie znamy obecnie popularnego oprogramowania, które w równie efektywny sposób potrafiłoby wykorzystać - za pośrednictwem interfejsu OpenCL - moc obliczeniową GPU. Algorytm Bitcoina może i dobrze oddaje różnice w całkowitej wydajności konkretnych układów, ale nie przekłada się to na praktyczne zastosowanie, a przynajmniej nie w szerokim, dostępnym dla zwykłych użytkowników, zakresie.

A takie rezultaty uzyskał komputer dysponujący najmocniejszym (choć nie najnowszym) GPU NVIDIA GeForce GTX 780M. Ciekawostką jest, że układ bezsprzecznie szybszy w generowaniu grafiki od modelu GTX 850M (widać to np. w teście z oceanem) okazał się w niektórych testach obliczeniowych bazujących na OpenCL wolniejszy od poprzednika. Czego to dowodzi? Głównie tego, że wciąż jeszcze długa droga do optymalnej implementacji funkcji OpenCL w oprogramowaniu. 

Obliczenia rozproszone

Moc obliczeniowa układów graficznych może być częściowo wykorzystana w ramach projektów obliczeniowych wykorzystujących przetwarzanie rozproszone. Z pewnością wielu użytkowników komputerów słyszało o projektach takich jak SETI@home (poszukiwanie cywilizacji pozaziemskich), czy Folding@home (analiza molekularna białek i poszukiwanie lekarstw na dotychczas nieuleczalne choroby i schorzenia). W projektach tego typu zadania obliczeniowe dystrybuuje się na całym świecie pomiędzy komputery wolontariuszy chętnych wesprzeć dany projekt. Użytkownik po prostu udostępnia placówkom badawczym swój komputer i moc obliczeniową. Większość projektów tego typu potrafi wykorzystać zarówno moc CPU jak i układów graficznych.

Na ilustracji webowy interfejs jednego z wspomnianych projektów rozproszonych, prowadzony przez Uniwersytet Stanforda projekt Folding@home. Jego celem jest wyleczenie dotychczas nieuleczalnych chorób.

Wnioski końcowe

Szczerze mówiąc, spodziewaliśmy się znacznie lepszych rezultatów. Sądziliśmy, że po tak długiej dostępności rozwiązań takich jak CUDA czy OpenCL programiści staną na wysokości zadania i będą mogli dostarczać użytkownikom ciekawe narzędzia zdolne do efektywnego wykorzystania mocy obliczeniowej układów graficznych. Oczywiście na rynku są dostępne aplikacje zdolne "zatrudnić" układy graficzne - użyty przez nas Photoshop jest tego najlepszym przykładem, ale jeżeli chodzi o oprogramowanie amatorskie, czy aplikacje przeznaczone na rynek typowo konsumencki, dla użytkownika domowego, amatora - tu już jest niestety posucha. Poniekąd trudno się dziwić. Tworzenie kodu poprawnie obsługującego wszelkie możliwe układy obliczeniowe (np. za pomocą OpenCL) jest znacznie trudniejsze od opracowania aplikacji realizującej obliczenia tradycyjnie, tj. za pomocą procesora głównego. To niestety widać w ofercie rynkowej, zwłaszcza wśród tańszych i bezpłatnych aplikacji amatorskich. Profesjonaliści robią to dobrze, ale też w tym przypadku (vide produkty Adobe czy Autodesk) za jakość płacimy i to słono.

2015.09.25, 10:08
Uczestniczę w Folding@Home. Zapraszam do udziału.
http://chomikuj.pl/Miszkurka2000/Przetwarzanie+rozproszone
Ze względu na obowiązującą ciszę wyborczą funkcja komentowania została wyłączona do dn. 2019-05-26 godz. 21:00.