Moc płynąca z kart graficznych Cuda za darmo! Czyli programowanie generalnego przeznaczenia na kartach graficznych (GPGPU) 22 października 2013 Paweł Napieracz /20
Poruszane aspekty Przetwarzanie równoległe Obliczenia na kartach graficznych: kiedyś/dziś, pokaz wydajności, zastosowania; Architektura GPU Zalety i wady OpenCL Aparapi 22 października 2013 2/20
Przetwarzanie równoległe przetwarzanie wielu instrukcji równocześnie, konieczność wytworzenia kodu współbieżnego: dla czasochłonnych fragmentów programu, kosztowne: inne podejście do programowania, występowanie błędów (np. wyścigi), synchronizacja, dostęp do pamięci; najszybciej zrównolegla się obliczenia niezależne. 22 października 2013 3/20
Obliczenia na kartach graficznych? Kiedyś: wykorzystanie interfejsów do wyświetlania grafiki, tworzenie tekstur i obliczenia przy użyciu DirectX i OpenGL; Dziś: wyspecjalizowane narzędzia programistyczne, kompilacja i uruchomienie własnych programów z użyciem karty graficznej. 22 października 2013 4/20
Ale gdzie te CUDA? Programowanie na karty graficzne umożliwia architektura i zestaw narzędzi, nazwany przez firmę nvidia, CUDA. Alternatywą dla układów graficznych od AMD jest AMD APP. 22 października 2013 5/20
Ale gdzie te CUDA? Moc obliczeń z wykorzystaniem architektury CUDA [1] 22 października 2013 6/20
Ale gdzie te CUDA? Algorytm Floyd Warshall (minimalny dystans w grafie), o złożoności O(n 3 ) dla drzewa z 4096 wierzchołkami [2] Mnożenie macierzy [2] 22 października 2013 7/20
Ale gdzie te CUDA? Algorytm wyliczania ilości dzielników podanych liczb [2] Sprawdzanie czy liczba (19 cyfrowa) jest liczbą pierwszą [2] 22 października 2013 8/20
Gdzie się wykorzystuje? mathlab, PhotoShop's plugins, rendering video, projekty naukowe (Folding@home, GIMPS), symulacje, gry komputerowe (obliczenia fizyki). 22 października 2013 9/20
Architektura GPU Porównanie liczby rdzeni w CPU a GPU [3] 22 października 2013 10/20
Architektura GPU Zasięg pamięci i przedstawienie architektury [4] 22 października 2013 11/20
Schemat przetwarzania Podział pracy CPU i GPU w typowym programie z przetwarzaniem masowo-równoległym [5] 22 października 2013 12/20
Zalety i wady... odciążenie CPU, przyśpieszenie obliczeń, dodatkowa pamięć na obliczenia, trudna architektura koszta wytworzenia wysokie, tylko wybrane obliczenia na GPU, kosztowne przesyły danych z pamięci RAM komputera do pamięci RAM karty graficznej, zachowanie kompatybilności wstecznej czasochłonne, wytworzenie szybkiej aplikacji wymaga bardzo dużego doświadczenia. 22 października 2013 13/20
OpenCL otwarty standard dla programowania równoległego, oparty na języku c z dodatkowymi definicjami, między platformowy: nvidia, AMD, Intel, arm, GPU, CPU, alternatywa dla zamkniętych standardów (nvidia CUDA), obecnie wszystkie platformy zaangażowane są w jego rozwój. 22 października 2013 14/20
Aparapi biblioteka napisana w języku Java, tłumaczy w runtime'ie kod Javy na język OpenCL: maksymalnie upraszcza pisanie kodu na GPGPU (z założenia nie musimy nawet o tym pamiętać, że piszemy pod OpenCL'a), Pozwala na uruchamianie kodu na GPU i CPU, wersja rozwojowa wspiera wyrażenia lambda (Java 8). 22 października 2013 15/20
Aparapi Standardowy, sekwencyjny kod w j. Java Przetwarzania masywno-równoległe przy użyciu Aparapi final float ina[] =... final float inb[] =... //(ina.length==inb.length) final float result = new float[ina.length]; for (int i=0;i<array.length;i++){ result[i]=ina[i]+inb[i]; } Kernel kernel = new Kernel() { @Override public void run() { int i= getglobalid(); result[i]=inta[i]+inb[i]; } }; Range range = Range.create(result.length); kernel.execute(range); 22 października 2013 16/20
Aparapi zarządzanie pamięcią (host device): kernel.setexplicit(true); get(data); put(data); optymalizacje (np. unikanie pętli kernela): kernel.execute(range, loopcount); przetwarzanie prostych obiektów (typy proste i tablice), używanie różnych zasięgów operacji. 22 października 2013 17/20
Aparapi Wystarczająco rozwinięta, aby przyśpieszyć obliczenia używając technologii Java. 22 października 2013 18/20
Dziękuję za uwagę! Pokaz demo :). 22 października 2013 19/20
Źródła [1] - http://www.hardwarecanucks.com/forum/hardware-canucks-reviews/24145-gpu-technology-conference-nvidias-new-focuschanging-market-2.html [2] - http://aparapi-vortex.blogspot.com/ [3] - http://blog.goldenhelix.com/?p=374 [4] - http://electronicdesign.com/embedded/programming-cuda-architecture-look-gpu-computing [5] - http://goo.gl/xc74t3 Parallel reduction example - https://github.com/archaeasoftware/cudahandbook/tree/master/reduction 22 października 2013 20/20