- Totalt 0 kr
GPGPU Beräkningar med C++ med AMP
Lägg till en bevakning så meddelar vi dig så snart varan är i lager igen.
GPGPU Beräkningar med C++ med AMP
Beräkningsintensiva problem kan ofta få bättre prestanda om de löses med parallella algoritmer som exekverar på multipla processorkärnor. För en delmängd av dessa problem kan man få en ytterligare prestandavinst genom att utföra beräkningarna på grafikkortet. Detta kallas för General Purpose Processing on Graphics Processing Units (GPGPU).
I den här kursen lär vi oss att identifiera vilka beräkningar som passar att köra på grafikkortet och hur man implementerar GPU algoritmer i C++ med Microsoft AMP (Accelerated Massive Parallelism).
Vissa algoritmer är massivt parallella, till exempel bildfiltrering, faltning, matrismultiplikation, partikel-baserade fysiksimuleringar, neurala nätverk. Dessa algoritmer kan få en stor prestanda förbättring genom att göra beräkningarna på grafikkortet istället för applikationsprocessorn. I den här kursen lär vi oss att använda C++ tillägget Microsoft AMP för att skriva program som gör beräkningar på GPU:n.
Kursen innehåller en grundläggande genomgång av hur GPU hårdvara fungerar. Detta gör att vi bättre kan ta beslut kring mjukvaruarkitektur och hjälper oss att debugga och optimera GPU program.
Microsoft AMP är en utökning av C++ som lägger till några nyckelord till språket för att markera vilka funktioner som kan exekvera på grafikkortet. Detta gör att vi kan skriva kod som ser ut som C++ och träffar en balans mellan utvecklingskostnad och prestanda.
Målgrupp
Erfarna C++ utvecklare
Förkunskaper
Djup erfarenhet av parallellprogrammering på CPU. Erfarenhet av modern trådprogrammering med exempelvis Microsoft PPL eller Intel TBB.
Vad du kommer lära dig
- Hur man löser vanliga optimeringsproblem
- När man vinner på parallellism
- Hur hårdvaran utnyttjar parallellism
- Hur man kan använda grafikkortet för beräkningar med C++ och Microsoft AMP
- Hur man utnyttjar CPU och GPU tillsammans för beräkningar
Agenda
- Introduction
- C++11 Lambdas
- Measuring Performance
- Introduction to CPU and GPU Hardware
- Memory Types and Caching
- Vector programming
- Cores, Threads, Tiles and Warps
- Methods of writing code for the GPU
- OpenCL
- CUDA
- DirectCompute
- Microsoft C++ AMP
- Introduction to AMP
- AMP Syntax and Data Types
- array, array_view
- index
- extent
- grid
- restrict
- parallel_for_each
- How to use
- Optimizing Memory Move and Copy
- Synchronizing memory with accelerators
- Implicit synchronization
- synchronize*()
- data()
- Lost Exceptions
- The fast_math and precise_math namespaces
- Comparison to “standard” math.
- Accelerator requirements
- Example
- Debugging with Warp
- Visual Studio Tools
- GPU Threads
- Parallel Stacks
- Parallel Watch
- Floating Point Numbers
- How they are handled
- Why they are different from CPU
- Performance of float/double operations
- Tiling
- Syntax
- Determining tile size
- Memory Coalescence
- Memory Collisions
- Tile Synchronization
- AMP Atomic Operations
- atomic_exchange()
- atomic_fetch*()
- Parallel patterns with AMP
- Map
- Reduce
- Scan
- Pack
- AMP Accelerators
- Accelerator properties
- Shared memory
- Using multiple accelerators
- Concurrency::graphics
- Exploiting the texture cache.
- AMP Error Handling
- Exceptions
- Detecting and Recovering from TDR