Slide 1

Slide 1 text

HELLO CUDA! Martin Pernica Martin Pernica Hello CUDA!

Slide 2

Slide 2 text

KDO JSEM? Hello CUDA! Martin Pernica • Již 10 let programuji ! • Miluji technologie ! • Výzvy jsou pro mě v životě nutností • Aktuálně “vývojář her”

Slide 3

Slide 3 text

O NÁS - SOULBOUND GAMES Hello CUDA! I have a dream ... Martin Pernica

Slide 4

Slide 4 text

CO POUŽÍVÁME? Hello CUDA! • Unity3D Pro • Unreal Engine 3/4 • CryENGINE • Vlastní low-level kód - C++/Objective-C/ASM • Vlastní shadery • Procedurální materiály Substance ! • Oculus Rift • Xbox One, PS4 • NVIDIA APEX, PhysX, CUDA Martin Pernica

Slide 5

Slide 5 text

Hello CUDA! Martin Pernica ZAČÍNÁME • Ještě než se podíváme na CUDA je nutné si něco říct o GPU …

Slide 6

Slide 6 text

GRAPHIC PROCESSING UNIT Hello CUDA! Martin Pernica • Masivně multivláknové ! • Mnohojádrové čipy • NVIDIA TESLA • 128 scalar processors • ~12 000 concurrent threads • 500+ GFLOPS

Slide 7

Slide 7 text

GPU VS CPU Hello CUDA! Martin Pernica • CPU • Komplexní instrukční sada • Optimalizované pro rychlost provedení 1 instrukce • GPU • Hodně jednoduchá instrukční sada • Optimalizované pro provádění stovek až tisíců instrukcí paralelně

Slide 8

Slide 8 text

GPU = HRY? Hello CUDA! Martin Pernica • Ano i ne • Hry primárně používají “shadery” pro práci s GPU • Shadery obsahují specifické funkce pro práci s 3D grafikou • GPU má optimalizované procesory/paměti pro 3D grafiku

Slide 9

Slide 9 text

GPU = VÝPOČTY? Hello CUDA! Martin Pernica • Chceme využít sílu GPU na “běžné” výpočty (často řešené přes CPU) • Pomocí “shaderů” by to bylo komplikované • Potřebujeme “hezčí” jazyk pro tyto výpočty

Slide 10

Slide 10 text

CO JE TO CUDA? Hello CUDA! Martin Pernica • “Hezký jazyk pro paralelní výpočty na GPU” ! • CUDA C • Kernely ! • Ideálně používat na Fermi a vyšší • Pouze nVidia karty :( • Možno počítat i na CPU

Slide 11

Slide 11 text

PROČ CUDA A NE OPENCL? Hello CUDA! Martin Pernica • Lepší API • Aktivnější vývoj ze strany nVidie • NVIDIA se také podílí na vývoji OpenCL (Khronos group) ! • Lepší nástroje a ovladače • profiler, cuda-gdb, cuda-memcheck, nsight • Občas “rychlejší” ! • Statická kompilace kernelu (také “JIT”, ale s omezeními) • Může být i nevýhoda (optimalizace pro dané GPU)

Slide 12

Slide 12 text

HOST, DEVICE Hello CUDA! Martin Pernica • Host = CPU a jeho pamět • Device = GPU a jeho pamět

Slide 13

Slide 13 text

KERNEL Hello CUDA! Martin Pernica • Kernel slouží k uložení GPU kódu • CUDA C • Většinou externí soubor • Podobný shaderům

Slide 14

Slide 14 text

WORKFLOW Hello CUDA! Martin Pernica • Provedení host kódu • Alokace GPU paměti • Přesun dat z RAM do VRAM • PCI sběrnice • Provedení kernelu (device code) • Ukládání (mezi)výsledků do VRAM • Přesun dat z VRAM do RAM • Provedení host kódu

Slide 15

Slide 15 text

STRUKTURA Hello CUDA! Martin Pernica • Grid • 1D, 2D, 3D • Bloky jsou uspořádany do mřížky, bloky musí být nezávislé, každý blok v mřížce má identifikátor - blockIdx ! • Block • 1D, 2D, 3D • Vlákna v bloku sdílí pamět, mohou být synchronizována, každé vlákno v bloku má svůj identifikátor - threadIdx ! • Threads

Slide 16

Slide 16 text

PAMĚTOVÝ MODEL Hello CUDA! Martin Pernica • GPU obsahuje ~6 programovatelných pamětí ! • Registry • Lokální • exkluzivní přístup pro 1 vlákno • může být “pomalá” • Sdílená • přímo na čipu • každý blok má svou • přístup přes banky • Globální • Pamět pro konstanty • Pamět pro textury

Slide 17

Slide 17 text

CUDA 6 Hello CUDA! Martin Pernica • Zjednodušené API • Lepší podpora konstrukcí v CUDA C • Lepší “automatická” škálovatelnost na více GPU • Unifikovaná pamět!!!!

Slide 18

Slide 18 text

CUDA 6 - UNIFIKOVANÁ PAMĚT Hello CUDA! Martin Pernica • Killer feature!

Slide 19

Slide 19 text

HELLO WORLD CUDA Hello CUDA! Martin Pernica • CUDA používá vlastní compiler • host, device kód • nvcc • LLVM, clang, gcc, g++, MS C++ compiler

Slide 20

Slide 20 text

HELLO WORLD CUDA Hello CUDA! Martin Pernica • __global__ říká, že funkce bude prováděna na device a volána z host • nvcc rozdělí host a device kód • device kód zkompiluje pomocí NVIDA compileru • host kód systémovým compilerem

Slide 21

Slide 21 text

HELLO WORLD CUDA Hello CUDA! Martin Pernica • <<<1, 1>>> říká, že má být volání provedeno z hostu na zařízení • “kernel launch” • <<> • N počet bloků pro výpočet • V počet vláken v bloku

Slide 22

Slide 22 text

PRÁCE S PAMĚTÍ (CUDA 5) Hello CUDA! Martin Pernica • cudaMalloc() • cudaFree() • cudaMemcpy() • Podobně jako malloc(), free(), memcpy()

Slide 23

Slide 23 text

ROZŠÍŘÍME KERNEL Hello CUDA! Martin Pernica • Vytvoříme kernel add • Tři argumenty • Ukazatele do device paměti • Třetí na uložení výsledku • Pozn.: Toto není ideální kód, protože každé vlákno dělá stejnou práci!

Slide 24

Slide 24 text

Hello CUDA! Martin Pernica

Slide 25

Slide 25 text

ASYNCHRONNÍ Hello CUDA! Martin Pernica • Veškerý CUDA kód běží asynchronně ! • To znamená, že CPU nečeká na dokončení kernelu! • cudaMemcpy() blokuje, cudaMemcpyAsync() neblokuje CPU ! • Můžeme také synchronizovat pomocí cudaDeviceSynchronize() či cudaStreamSynchronize()

Slide 26

Slide 26 text

VYUŽITÍ CUDA Hello CUDA! Martin Pernica • Hry • simulace vody, simulace vlasů, ray tracing • Video aplikace • Filmový průmysl • Výzkum • Umělá inteligence • Urychlení běžné aplikace • …

Slide 27

Slide 27 text

LEARN CUDA Hello CUDA! Martin Pernica • Kurz na Udacity - Intro to Parallel Programming • Kurz Pluralsight - Parallel Computing with CUDA • NVIDIA - CUDA Education & Training • …

Slide 28

Slide 28 text

OTÁZKY? Hello CUDA! Martin Pernica pernica@soulbound.cz | @martindeveloper

Slide 29

Slide 29 text

JE PROGRAMOVÁNÍ TVŮJ ŽIVOT? Hello CUDA! Martin Pernica

Slide 30

Slide 30 text

OTEVŘENÉ PRACOVNÍ POZICE Hello CUDA! Martin Pernica • iOS samuraj • Cocoa Touch, Objective-C ! • Android bukanýr • Java, Android SDK/NDK ! • Windows Phone ninja • .NET, C#, XAML ! • PHP gladiátor • OOP, Symfony Napiš na kariera@pria.cz

Slide 31

Slide 31 text

DĚKUJI ZA POZORNOST! Hello CUDA! Martin Pernica pernica@soulbound.cz | @martindeveloper