Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hello world CUDA

Hello world CUDA

UTB FAI presentation (in czech) about quick basics of NVIDIA CUDA technology.

Martin Pernica

May 03, 2014
Tweet

More Decks by Martin Pernica

Other Decks in Programming

Transcript

  1. 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”
  2. 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
  3. Hello CUDA! Martin Pernica ZAČÍNÁME • Ještě než se podíváme

    na CUDA je nutné si něco říct o GPU …
  4. GRAPHIC PROCESSING UNIT Hello CUDA! Martin Pernica • Masivně multivláknové

    ! • Mnohojádrové čipy • NVIDIA TESLA • 128 scalar processors • ~12 000 concurrent threads • 500+ GFLOPS
  5. 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ě
  6. 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
  7. 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
  8. 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
  9. 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)
  10. HOST, DEVICE Hello CUDA! Martin Pernica • Host = CPU

    a jeho pamět • Device = GPU a jeho pamět
  11. KERNEL Hello CUDA! Martin Pernica • Kernel slouží k uložení

    GPU kódu • CUDA C • Většinou externí soubor • Podobný shaderům
  12. 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
  13. 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
  14. 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
  15. 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!!!!
  16. HELLO WORLD CUDA Hello CUDA! Martin Pernica • CUDA používá

    vlastní compiler • host, device kód • nvcc • LLVM, clang, gcc, g++, MS C++ compiler
  17. 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
  18. 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, V>> • N počet bloků pro výpočet • V počet vláken v bloku
  19. PRÁCE S PAMĚTÍ (CUDA 5) Hello CUDA! Martin Pernica •

    cudaMalloc() • cudaFree() • cudaMemcpy() • Podobně jako malloc(), free(), memcpy()
  20. 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!
  21. 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()
  22. 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 • …
  23. LEARN CUDA Hello CUDA! Martin Pernica • Kurz na Udacity

    - Intro to Parallel Programming • Kurz Pluralsight - Parallel Computing with CUDA • NVIDIA - CUDA Education & Training • …
  24. 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 [email protected]