Konrad Szałkowski
Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo Skisr-kolo@libra.cs.put.poznan.pl
Po co? Krótka prezentacja Skąd? Dlaczego? Gdzie? Gdzie nie? Jak?
CPU Pamięć DDR3-19200 19,2 GB/s Wydajność i7-3770k (@4,7GHz) 120 GFLOPS Energia 120 GFLOPS / 120W = 1 GFLOPS/W (chłodzenie not included) GPU Pamięć GDDR5-224 GB/s Wydajność Radeon 7970 4 TFLOPS / 1 TFLOPS Energia 1000 GFLOPS / 314W = 3,1 GFLOPS/W
CPU (CORE 2 DUO QUAD Q6600 2,4GHZ 4GB DDR2) RayTracer 720p: 3-4 FPS SGEMM 1000: 5924 ms Sort 10^6: 43 ms Sort 10^8: 1 s GPU (NVIDIA GEFORCE GTX470 1296MB GDDR5) RayTracer 720p: 80 FPS SGEMM 1000: 528 ms Sort 10^6: 547 ms Sort 10^8: 800 ms
NBody simulation FluidSimulation2D MD5 Brute Force Attack
Piękne liczby, powodują dreszcze, ale gdzie jest haczyk?
Na początku było słowo Do komunikacji z komputerem wystarczały terminale znakowe. (nadal wystarczają ) Renderowanie obrazu składającego się z pixeli (piksli). Akceleracja 2D, rysowanie kształtów, z- bufory, sprite y.
Gry komputerowe zaczynają napędzać biznes Wejście w świat 3D obliczenia na wierzchołkach brył, wektorach, macierzach liczb zmiennoprzecinkowych. Akceleracja 3D coraz bogatsza grafika, coraz więcej smaczków, dynamiczne oświetlenie
Powstanie pierwszego GPU NV10. Karta graficzna przejmuje obliczenia Transform&Lightning. Pojawiają się shadery krótkie programiki ładowane do karty graficznej obrabiające znajdujące się w niej dane (NV30).
Coraz większe wymagania dla potoku przetwarzania i shaderów. Pomysł obrabiania zjawisk fizyki w grach na GPU. Pojawia się CUDA (chipset G80) dowolne programowanie na GPU z dostępem do prawie całej infrastruktury karty graficznej w kodzie pochodnym C.
Świat 3D jest konstruowany w karcie graficznej za pomocą liczb zmiennoprzecinkowych. Liczby te opisują wierzchołki brył które są rzutowane na ekran (lub inne urządzenia wyświetlające). Najczęściej są to liczby pojedynczej precyzji. Architektura GPU jest dostosowana do natury obliczeń obrazu 3D. Wiele wierzchołków, wiele pikseli, ale wszystkie obrabiane tym samym programem. GPU to procesory SIMD single instruction - multiple data
CONTROL UNIT CACHE DDR3 DRAM
CON TROL CACHE CON TROL CACHE GDDR5 DRAM
SHARED MEMORY INSTRUCTION MEMORY REGISTERS TEXTURE MEMORY CONSTANTS MEMORY REGISTERS GDDR5 DRAM
Symulacje objętościowe cieczy i gazów, Optymalizacja wydajności aerodynamicznej pojazdów, Analiza pogody, Wizualizacje, Obliczanie hashy, i wiele innych Gdziekolwiek gdzie zastosowanie znajdują algorytmy obliczeń równoległych najlepiej operujące na liczbach zmiennoprzecinkowych.
Nadzorowanie macierzy RAID Kontrola ruchu sieciowego Obliczenia wymagające dużej liczby rekurencji Bazy danych Gdziekolwiek, gdzie potrzebne są operacje IO.
Zwiększanie precyzji obliczeń (double naprawdę wchodzą do gry) Każdy producent chce mieć swoje GPU do liderów nvidii i ATI(AMD) dołączają Apple, Samsung, Intel, ARM Stopniowe odejście od typowych zastosowań rozrywkowych Programy użytkowe zaczynają czerpać korzyści z GPU: Photoshop, AutoCAD, ArchiCAD, pakery
C++ na kartach graficznych Rekurencja Pojawiają się struktury danych i rozwijają biblioteki (CuFFT, CuBLAS.) PRINTF!!! Debug na karcie graficznej
Kiepskie IO. (generalnie tylko O monitor komputera) Brak wydajnego mostu CPU-GPU. (PCI-E 16x jest za wolne) Ilość zużywanej energii. Sposób programowania.
Choose your destiny CUDA OpenCL ATI-Stream DirectCompute
Cytując stronę NVidii: CUDA jest opracowaną przez firmę NVIDIA, równoległą architekturą obliczeniową, która zapewnia radykalny wzrost wydajności obliczeń dzięki wykorzystaniu mocy układów GPU (graphics processing unit jednostka przetwarzania graficznego).
Jest to również synonim rozszerzenia standardowego języka C o składnię i biblioteki potrzebne do wygodnego przeprowadzania obliczeń na kartach graficznych.
Kup GeForce'a/Quadro/Tesla/Tegra... CUDA Zone - nvidia dba o devów http://www.nvidia.pl/object/cuda_home_new_pl. html Duże community, dużo wykładów i tutoriali
Kernel - funkcja ładowana do pamięci instrukcji multiprocesora. Przykładowo
Jak się wywołuje kernele?
Jak się wywołuje kernele?
Jak się wywołuje kernele?
Jak się wywołuje kernele?
Organizacja kerneli: Blok Grid Grid Grid Grid Grid Grid Grid Grid Wątek Wątek Wątek Wątek Grid Grid Grid Grid Grid Grid Grid Grid Wątek Wątek Wątek Wątek
Organizacja kerneli: Grid Grid Grid Grid Grid Grid Grid Grid Grid Blok Blok Blok Blok Grid Grid Grid Grid Grid Grid Grid Grid Blok Blok Blok Blok
Organizacja kerneli: Wykonanie Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid Grid
Jak się wywołuje kernele?
Ilość wątków: 1024 na blok do ułożenia w 3 wymiarach w zakresach x,y:<1;1024> z: <1;64> (2^31-1)^3 bloków do ułożenia w 3 wymiarach na gridzie w zakresach x,y,z:<1;2^31-1>
Klucz do dobrego programowania w CUDA (moim zdaniem): Zmiana sposobu myślenia o programowaniu równoległym w bardziej masowy Opanowanie kruczków obsługi pamięci Opanowanie dobrego programowania w C
AMD http://developer.amd.com/tools/hc/pages/default.asp x Intel http://software.intel.com/enus/vcsource/tools/opencl-sdk Apple https://developer.apple.com/library/mac/#documenta tion/performance/conceptual/opencl_macprogguid e/introduction/introduction.html ARM nvidia
Podobna koncepcja do CUDY: Thread work-item Block work-group Grid ND-range Dynamiczna kompilacja kerneli Dużo więcej formalizmu w zapisie programu
Krótka prezentacja
ZALETY Przodownik programowania na GPU Prędkość Dostęp do wszystkich smaczków programowania na GPU (zarządzanie pamięcią, wyrównywanie słów w pamięci) WADY You ll never know what next CUDA will be programy pisane są tylko na dany typ karty (chip) Monopol nvidii działa tylko na jej urządzeniach
ZALETY Stały standard Wszyscy go implementują Learn once Uniwersalny Dobrze integruje się z OpenGL em WADY Wolniejszy od CUDY Nie nadąża za sprzętem Formalny Dynamiczna kompilacja kerneli
Dziękuję za uwagę
?
Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo Skisr-kolo@libra.cs.put.poznan.pl