artykuły

Akceleracja GPU w praktyce – OpenCL

Drzemiące megaflopy

76
21 stycznia 2013, 09:07 Mateusz Brzostek

W każdym pececie jest jakiś układ graficzny, lepszy lub gorszy. Do niedawna, jeśli był gorszy, to służył tylko do wyświetlania pulpitu i okien programów. Jeśli był lepszy, to oprócz tego nadawał się do grania. Ale rozwój w branży gier zapoczątkował spore zmiany w tych układach. Z wąsko wyspecjalizowanych mikroprocesorów stały się uniwersalnymi, programowalnymi maszynami obliczeniowymi, i to o gigantycznej mocy. Stało się jasne, że można, wręcz należy zaprząc tę moc nie tylko do rozrywki. W tej chwili na myśl powinny Wam przyjść takie nazwy, jak: OpenCL, CUDA, GPGPU, QuickSync. O co w tym wszystkim chodzi?

Spis treści

Drzemiące megaflopy

Powstała koncepcja GPGPU, czyli General Purpose Graphics Processing Unit. „Jednostka przetwarzania grafiki ogólnego zastosowania” brzmi bez sensu – w końcu służy do grafiki czy do ogólnych zastosowań? Okazuje się, że programowalne jednostki obliczeniowe nowoczesnych GPU mogą służyć i do tego, i do tego. 

W tym miejscu musimy się zastanowić, jak programy korzystają z układów graficznych. Procesor to jasna sprawa: ktoś pisze kod, a system operacyjny dba o jego prawidłowe wykonanie równocześnie z setkami innych fragmentów kodu. Ale karta graficzna nie jest bezpośrednio programowalna, nie jest po prostu dodatkową jednostką wykonawczą procesora. Jej pamięć nie jest częścią przestrzeni adresowej „głównej” pamięci operacyjnej komputera – nie wpisuje się bezpośrednio do niej kodu i instrukcji. Pośredniczy w tym sterownik, udostępniający różne interfejsy programowania, czyli sposoby odwoływania się do karty. Takimi interfejsami są na przykład DirectX i OpenGL. 

Wraz z rozwojem sprzętu, o którym wspomnieliśmy w pierwszym akapicie, następował rozwój wspomnianych interfejsów. Najbardziej znane i najczęściej wykorzystywane to:

  • DirectX – to cały zbiór różnych interfejsów programistycznych, z których karty graficznej dotyczą: DirectDraw, Direct 2D (oba używane do wyświetlania grafiki dwuwymiarowej), Direct3D (wyspecjalizowany w wyświetlaniu grafiki trójwymiarowej, wykorzystywany przez większość gier) i DirectCompute (do wykonywania obliczeń na GPU). DirectX jest ściśle związany z systemem Windows. Od dawna stosuje się go nie tylko w grach: na przykład wiele programów odtwarzających filmy wyświetla obraz z użyciem DirectDraw.
  • OpenGL – główny rywal DirectX, o bardzo podobnej funkcjonalności. Jest otwartym standardem nieprzywiązanym do żadnego systemu operacyjnego. Wykorzystują go niektóre gry, szczególnie te dostępne na Linuksa lub Mac OS X. Oprócz tego jest powszechnie stosowany do wyświetlania grafiki dwu- i trójwymiarowej w profesjonalnych narzędziach, takich jak produkty Adobe i Autodesk.
  • CUDA – interfejs programowania kart graficznych Nvidii służący do wykonywania obliczeń. Jest dostępny w wersjach dla Windows, Linuksa i Mac OS X, ale to standard zamknięty, ograniczony do układów Nvidii. Wykorzystywany głównie w przemyśle i badaniach naukowych, a tam i tak używa się oprogramowania dostosowanego do konkretnych maszyn. 
  • OpenCL – interfejs programowania wyspecjalizowany w obliczeniach, nie tylko wykonywanych z użyciem procesorów graficznych. Pozwala jednakowo potraktować wszystkie urządzenia obliczeniowe w komputerze: procesor, GPU, a nawet różnego rodzaju procesory sygnałowe. 
  • DXVA, XVBA, XVMC, VA-API, OpenVideo Decode, VDPAU, Intel ClearVideo, Intel QuickSync – cała gama interfejsów programistycznych dających dostęp do wbudowanych w układy graficzne wąsko wyspecjalizowanych jednostek kodowania i dekodowania wideo. Karty AMD mają dekoder UVD i koder VCE, Intel ma ClearVideo i QuickSync, Nvidia – PureVideo; są to jednak wyspecjalizowane jednostki wbudowane w krzem. Są one w mniejszym lub większym zakresie programowalne, ale mogą służyć tylko do obróbki wideo – nie można powiedzieć, że są ogólnego zastosowania. 

W tym artykule przyjrzymy się temu przedostatniemu, OpenCL, a szczególnie wykorzystaniu go w programach użytkowych, z którymi domowy użytkownik może się zetknąć na co dzień.

Strona:
PiotrLenarczykZobacz profil
Poziom ostrzeżenia: 0%
PiotrLenarczyk2018.02.17, 08:53
A zapomniałbym - kiedyś jak mi się nudziło zrobiłem trudne testy Linpack swoich sprzętów i tak uzyskałem GFLOP'sy:
-Intel Celeron G3900 (dwa rdzenie x86-64) 6
-Orange Pi One (cztery rdzenie ARMv8) 0.2
-GT1030 (Pascal I gen.) 1100
-GTX780 (Keppler II gen.) 3700
Edytowane przez autora (2018.02.17, 08:55)
PiotrLenarczykZobacz profil
Poziom ostrzeżenia: 0%
PiotrLenarczyk2018.02.17, 08:47
CUDA posiada zamkniętą licencję - i jak każda komercyjna licencja ogranicza możliwość jakichkolwiek zysków z użyciem kart Zielonych. Jeśli komuś marzy się zarobkowanie na akceleracji to powinien iść w kierunku sztucznie udziwnionego API OpenCL, lub odpowiedniej analizy złożoności obliczeniowej algorytmów. Jeśli ktoś chce po prostu napisać akcelerowany program do celów prywatnych, naukowych, czy do wdrożenia wewnętrznego w firmie której jest właścicielem może śmiało użyć znacznie wygodniejszego i bardziej dopracowanego API CUDA C++11. Ale w Polszy GPU to niszowa technologia - poza paroma ośrodkami naukowymi zachwyconych lokowaniem produktu nie znajdzie się pracy z takowymi umiejętnościami. Wiem co mówię-ponad rok szukałem pracy z biegłą znajomością CUDA, projektowaniem serwerowni i ZERO ogłoszeń pracy pod GPU!!! Szkoda czasu - lepiej łatać gliniane kolosy Java, celem utrzymania rodziny.
Post Scriptum: ogólnie artykuł słowem nie wspomina o wydajności OpenCL, a jedynie udowadnia, że popularne oprogramowanie ma pustego checkBox'a:D
Edytowane przez autora (2018.02.17, 08:47)
lukaszsaZobacz profil
Poziom ostrzeżenia: 0%
lukaszsa2013.02.13, 13:40
Droga redakcjo macie błąd i to duży i to jeszcze w tytule: Nie megaflopy tylko megaflopSy. Wygooglajecie sobie co to jest Flops i tak dla waszej informacji s nie wynika tu z liczby mnogiej w języku angielskim.

>>>FLoating point Operations Per Second<<<
madlyZobacz profil
Poziom ostrzeżenia: 0%
madly2013.01.29, 17:47
Ciut dziwne jest narzekanie w artykule na brak wsparcia OpenCL przez oprogramowanie. W obróbce video... proszę bardzo Adobe wspiera zarówno w Premierze, jak i After Effects. Sony w konkurencyjnym (IMHO rewelacyjnym) sofcie z półki PRO - Sony Vegas Pro. Wyniki wsparcia OpenCL:
http://www.sonycreativesoftware.com/vegaspro/gpuacceleration
Tak to wygląda (przynajmniej PRowo) J.

Tyle, że nie mówimy tutaj o zastosowaniach z low endowymi kartami, a na stacjach roboczymi z potężnymi kartami, wielkimi pamięciami, itp.

W teście mamy niską półkę, przyrost więc będzie marny. Może autor artykułu pobierze trial Vegas'a Pro czy Adobe i przeprowadzi test na SZYBKIEJ karcie, a nie na średniej karcie i szybkim procesorze?

Co do stabilności softu.... cóż Adobe ograniczyło liczbę kart, na których to działa (sztucznie rozpoznając producenta i typ karty) po to, aby zawęzić support techniczny. Kart i chipsetów jest mnóstwo, sterowników i ich wersji również... O czymś to świadczy. A i tak co rusz na forach ktoś się żali, że mu nie chodzi akceleracja GPU.
bv6t7Zobacz profil
Poziom ostrzeżenia: 0%
bv6t72013.01.22, 12:29
snape89 @ 2013.01.22 02:31  Post: 630741
hmm cieszyłęm się na ten artykuł, jednak jak dla mnie za mało piszecie o CUDA a to mnie najbardziej interesuje:) dokładniej chodzi mi o program do kodowania video Megui, jak sobie z nim radzą karty zielonych i czerwonych:)


http://astrataro.wordpress.com/2012/09/12/...od/#comment-208
Nakładka graficzna chyba nie obsługuje w pełni 'podmianę' z wymuszeniem opencl.

Mimo to Handbrake(karta amd działała, obciążenie 30%, temperatura 60 st C) potrzebował ~20 minut na 1 przebieg wraz ze wsparciem GPU uzyskując ostatecznie gorszy efekt wizualny przy niskim bittrate, a MeGui ~6 minut przy pierwszym. Drugie przebiegi Handbrake ~20minut, Megui ~13 minut.

Może przy wyższych wartościach bittrate czas chyba zmieni się ;]

Może krótkie omówienie instalacji/używania testowej kompilacji x264-opencl ?
MaxForcesZobacz profil
Poziom ostrzeżenia: 0%
MaxForces2013.01.22, 12:00
Andree w większości programów konsumenckich Cuda została olana w tej serii 6.
AndreeZobacz profil
Poziom ostrzeżenia: 0%
Andree2013.01.22, 11:12
Nie rozumiem co masz na myśli, na anandtechu są wyniki karty 680 w CUDA, OpenCL i DirectCompute. Fakt że wyniki są gorsze niż w przypadku 580, ale nie można powiedzieć że nie działa. Winna jest m.in. znacznie niższa wydajność w podwójnej precyzji, ale do tego są przeznaczone karty Tesla.
MaxForcesZobacz profil
Poziom ostrzeżenia: 0%
MaxForces2013.01.22, 04:09
snape89 @ 2013.01.22 02:31  Post: 630741
hmm cieszyłęm się na ten artykuł, jednak jak dla mnie za mało piszecie o CUDA a to mnie najbardziej interesuje:) dokłądniej chodzi mi o program do kodowania video Megui, jak sobie z nim radzą karty zielonych i czerwonych:)

W sumie to nie ma o czym pisać, nv w obecnej formie nie udostępnia Cuda dla serii 6. Chyba żeby cię interesowało o seriach 5 czy 4 a nie myślę że tesle będzie ktoś kupować. Tak samo jak w sony vegas można zapomnieć czy adobe P itd it...
MaxForcesZobacz profil
Poziom ostrzeżenia: 0%
MaxForces2013.01.22, 03:58
JackDebicki @ 2013.01.22 00:19  Post: 630716
Widzę że autor otwarcie odrzuca i krytykuje CUDA Nvidii, które wielu ludziom ratują życie i tworzą naszą przyszłość w kosmosie - a przy tym mają najlepsze wsparcie w programach używkowych. Wypadałoby chyba być bardziej obiektywnym panie autorze, i napisać wprost - że CUDA są dominującym środowiskiem GPGPU - choć ograniczonym tylko do procesorów graficznych jednego producenta. Tak było by OK. Krytyka OpenCL słuszna, ale brak pochwał dla CUDA zdumiewa i prawdę mówiąc niszczy jakikolwiek sens tego artykułu. Bo to CUDA powinno być logiem - CUDA które jest rozwijane i o które ktoś dba, nie OpenCL pozostawione same sobie - na pastwę losu

W której części artykułu bo jakoś ślepy jestem. Co najwyżej jest dwa razy zaznaczone że to zamknięty standard. Może w pierwszej kolejności zacząć czytać ze zrozumieniem zanim coś takiego napiszesz . A w drugiej nie o tym jest ten artykuł więc i o Cuda nie ma nic.
snape89Zobacz profil
Poziom ostrzeżenia: 0%
snape892013.01.22, 02:31
hmm cieszyłęm się na ten artykuł, jednak jak dla mnie za mało piszecie o CUDA a to mnie najbardziej interesuje:) dokłądniej chodzi mi o program do kodowania video Megui, jak sobie z nim radzą karty zielonych i czerwonych:)
Funkcja komentowania została wyłączona. Do dyskusji zapraszamy na forum.
1