r   e   k   l   a   m   a
r   e   k   l   a   m   a

Komputer okazał się nie dość szybki? OpenCL może postawić kwestię wydajności na głowie

Strona główna AktualnościOPROGRAMOWANIE

Kilka lat temu Apple zaprezentowało wygodny sposób na zaprzęgnięcie do pracy nad zadaniami obliczeniowymi wszystkich jednostek procesorowych w komputerze. Framework OpenCL (Open Computing Language) umożliwił wskazanie fragmentów kodu, które byłyby uruchamiane wiele razy niezależnie od siebie, na różnych procesorach, z właściwymi dla nich parametrami. Dzięki temu czas wykonania zadań, które dobrze się paralelizują, takich jak np. obróbka grafiki, uległ skróceniu czasem nawet o rzędy wielkości. Co najważniejsze, OpenCL jest względnie prosty w wykorzystaniu. Dlatego też coraz więcej nowoczesnych aplikacji wykorzystuje to rozwiązanie, pozwalając użytkownikom wykorzystać możliwości procesorów graficznych nie tylko w grach.

Obliczenia równoległe: szansa i wyzwanie

Jak to działa? Framework zawiera specjalny, podobny do C język OpeCL99, który służy do tworzenia tzw. kerneli, czyli funkcji uruchamianych na urządzeniach, oraz interfejs programowania (API), dający kontrolę nad działaniem urządzeń. W uproszczeniu wygląda to następująco: host wysyła na urządzenia dane, polecenia do wykonania i pobiera wyliczone dane. Na hoście działa kod aplikacji pisany w normalnym C/C++ czy innym popularnym języku programowania. Na urządzeniach działa kod OpenCL, skompilowany za pomocą specjalizowanych kompilatorów, dostosowanych do specyfiki danego procesora.

To nie system operacyjny uruchamia kod OpenCL, lecz właśnie API tego frameworka, pozwalające na wykrycie urządzeń, określenie ich możliwości, skompilowanie programu dla nich, uruchomienie programu na wybranym urządzeniu, oraz wymianie informacji z hostem. Dzięki temu, jeśli np. program musi policzyć jakąś funkcję trygonometryczną dla macierzy liczb o rozmiarze tysiąc na tysiąc, to zamiast iterować po milionie liczb, OpenCL wyśle te dane na dostępne urządzenia, a następnie nakaże wykonanie funkcji dla każdej liczby w macierzy. Po ukończeniu operacji, zwróci dane do sterującego programu.

r   e   k   l   a   m   a

Jeśli jesteście zainteresowani szczegółami, to polecamy zacząć od prezentacji Aaftaba Munshiego, przygotowanej na konferencję SIGGRAPH.

OpenCL ma dwie fundamentalne zalety. Po pierwsze, potrafi wykorzystać możliwości procesora, bez względu na jego typ – właściwe optymalizacje zostaną użyte nie tylko dla różnych modeli CPU czy GPU, ale też FPGA czy DSP. Po drugie, stał się otwartym standardem dla heterogenicznego przetwarzania danych, ciesząc się wsparciem niemal całej branży: w dbającej o jego rozwój grupie Khronos znajdziemy takie tuzy jak AMD, ARM, Intel, NVIDIA, Samsung, Texas Instruments oraz oczywiście Apple.

W tym artykule chcemy Wam pokazać korzyści, jakie może przynieść zaprzęgnięcie do pracy GPU. Oprogramowanie, które wcześniej wykorzystywało tylko procesor główny, teraz staje się w niektórych zadaniach wielokrotnie wydajniejsze. Rola CPU w ten sposób nieco się kurczy. Ma to spore znaczenie przy wyborze nowego komputera. Może okazać się, że zamiast szukać jak najszybszego CPU, bardziej opłaci się kupić słabsze CPU i uzupełnić je mocniejszym GPU (albo dwoma), a w niektórych wypadkach, np. zainteresować się takimi rozwiązaniami jak APU od AMD, w jednym układzie przynoszące wydajne rdzenie GPU i (nie tak już wydajne) rdzenie CPU. Jest to szczególnie ciekawe w wypadku laptopów, gdzie nie mamy dużej swobody dobierania sprzętu – pozornie słabsza maszyna z APU Kaveri może się, dzięki OpenCL okazać w istotnych dla nas obciążeniach roboczych szybsza od Haswella.

Nasze eksperymenty

Możliwości OpenCL w praktyce przetestowaliśmy na dwóch laptopach. Pierwszy z nich to laptop red. Łukasza Tkacza, HP EliteBook 2570p z dwurdzeniowym procesorem Intel Core i5-3320M, ze zintegrowanym układem graficznym HD 4000 i TDP na poziomie 35 W. Drugi to testowany niedawno w naszym Labie HP EliteBook 755 GW z czterordzeniowym procesorem AMD APU A10 Pro-7350B, zintegrowanym układem graficznym Radeon R6 i TDP na poziomie 19 W.

Syntetyczne benchmarki wydajności procesora nie dawały laptopowi z „czerwonym” procesorem zbyt wielkich szans. Przykładowo wPrime 2.0x uzyskał on wynik ok. 913 sekund, podczas gdy Intel był niemal dwukrotnie szybszy, kończąc test w ciągu 536 sekund. W Cinebenchu R10 wynik APU A10 (multiple CPU) to 7166 pkt, Core i5 Intela uzyskało zaś 11700 pkt. Syntetyczne benchmarki niewiele jednak mają wspólnego z codziennym używaniem komputera. Postanowiliśmy zobaczyć, jak wygląda sytuacja, gdy do pracy zaprzęgniemy układ graficzny w APU, znacznie silniejszy przecież od tego, co znaleźć można w czipie Intela.

Na pierwszy ogień wzięliśmy nudne, biurowe sprawy – czyli arkusze kalkulacyjne. Od wersji 4.2 LibreOffice potrafi wykorzystać OpenCL do przyspieszenia obliczeń. Niestety wciąż jest to domyślnie wyłączone, a na dodatek dość ukryte. Obsługę OpenCL można włączyć w menu Narzędzia, wybierając kolejno Opcje | Calc | Formuła | Szczegółowe ustawienia… | Niestandardowe. Wczytane zostały kolejno trzy testowe dokumenty w formacie Excela z pakietu OpenCL-test-documents.

Wyniki możecie zobaczyć na poniższych wykresach.

Jak widać, bez OpenCL, A10 było w każdym wypadku odczuwalnie bardziej ślamazarne od mobilnego Core i5. Po włączeniu obsługi OpenCL, doszło do ogromnego, nawet kilkusetkrotnego przyspieszenia, procesor AMD nie dał intelowemu żadnych szans. W trzecim, gorzej się paralelizującym arkuszu (Stock History), wygrał układ Intela, ale i tu wynik A10 z OpenCL był niemal dwukrotnie lepszy.

Następnie wykorzystaliśmy popularne narzędzie do edycji zdjęć Musemage – ma ono już wbudowany benchmark. Tu napotkaliśmy problem, gdyż edytor nie chciał się uruchomić na EliteBooku 2570p. Wykorzystaliśmy więc desktopową maszynę z czterordzeniowym procesorem Intel Core i5-4460. Trzeba zaznaczyć, że TDP tego procesora to 84 W, a porównujemy go do czipa użytego w laptopie. Jak widać, mimo tej różnicy kategorii, laptopowy A10 z OpenCL nie miał się czego wstydzić, uzyskując wynik bliski desktopowemu Core i5.

Kolejny test to również zadanie, które się dobrze paralelizuje. Wtyczka FaceDetect dla IrfanView chętnie jest wykorzystywana przy demonstrowaniu możliwości OpenCL. Poniższy wykres wyjaśnia dlaczego, pokazując, jak wiele w dziedzinie komputerowego rozpoznawania obrazu może dać wydajne GPU.

Niemniej przydatne GPU okazuje się przy łamaniu haseł. Proste narzędzie cRARk do łamania haseł do archiwów RAR potrafi wykorzystać OpenCL. Zabezpieczyliśmy archiwum z jednym zdjeciem 4-znakowym hasłem. APU okazało się tu pięciokrotnie szybsze od procesora Intela.

Nie ma co jednak popadać w hurraoptymizm. Są wypadki, w których OpenCL w takim APU niewiele nam pomoże, a nawet może zaszkodzić. Przykładem może być transkodowanie wideo. Za pomocą narzędzia Handbrake spróbowaliśmy przekształcić zajawkę filmu „Grawitacja” z H.264 do Ogg Theory. Z OpenCL odnotowaliśmy niewielkie przyspieszenie dla APU, ale i tak procesor Intela okazał się sporo szybszy.

Jeszcze gorzej było z transkodowaniem tego samego klipu za pomocą Sony Vegas. Duże obciążenie dla CPU i GPU sprawiło, że system próbując utrzymać TDP na właściwym dla laptopa poziomie, dławił zarówno procesory AMD jak i Intela – lepsze wyniki osiągnęliśmy bez OpenCL.

Finalnie sprawdziliśmy jeszcze renderowanie 3D, w benchmarku Luxmark. Tu wydajność CPU okazała się znacznie istotniejsza od wydajności GPU, więc nawet z OpenCL w każdym wypadku układ Intela wygrywał.

Będzie trudniej, co nie znaczy gorzej

Uzyskane wyniki znacznie komplikują obraz sytuacji dla osób, które chciałyby kupić laptopa. Lista aplikacji obsługujących OpenCL stale się wydłuża – są wśród nich zarówno proste, małe programiki, jak i potężne pakiety, takie jak Adobe CS6 czy Autodesk Maya. Spore różnice w architekturach Intela i AMD oznaczają, że wyniki testów takich jak PCMark w wyborze nam nie pomogą, trzeba brać pod uwagę konkretne aplikacje z którymi pracujemy, te zastosowania, które są dla nas najważniejsze.

W wypadku desktopów (oraz najpotężniejszych laptopów z dyskretną grafiką) dochodzi do tego kwestia, którą w tym artykule pominęliśmy, a mianowicie CUDA. Własnościowy framework CUDA od Nvidii (działający tylko na produktach tej firmy) jest w wielu wypadkach wydajniejszy od OpenCL – i choć nie jest oficjalnym standardem, to w szeroko rozumianych dziedzinach inżynierskich jest powszechnie używany. Dodatkowo produkty Nvidii wspierają też OpenCL. Jeśli więc już decydujemy się na wykorzystanie karty graficznej do przyspieszenia potrzebnego nam oprogramowania, to musimy zobaczyć, jak radzą sobie tu GeForce, a jak Radeony.

Ogólny wniosek z tego jest jednak optymistyczny i to bez względu na to, z jakiego procesora czy systemu operacyjnego korzystamy. Paralelizacja okazała się owocną techniką i jest wspierana coraz powszechniej, sprawiając że te rdzenie GPU w naszych komputerach przestają być tylko niepotrzebnym balastem, gdy akurat nie gramy w gry 3D. Kto wie, może kolejnym krokiem będzie pojawienie się w procesorach ogólnego zastosowania jednostek programowalnych (FPGA) czy procesorów sygnałowych (DSP)?

© dobreprogramy
r   e   k   l   a   m   a
r   e   k   l   a   m   a

Komentarze

r   e   k   l   a   m   a
r   e   k   l   a   m   a
Czy wiesz, że używamy cookies (ciasteczek)? Dowiedz się więcej o celu ich używania i zmianach ustawień.
Korzystając ze strony i asystenta pobierania wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.