Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
Duration 28 hours
Course Outline
Introduction
- An introduction to CUDA
- Comparing CUDA with OpenCL and SYCL
- Overview of CUDA features and architecture
- Setting up the Development Environment
Getting Started
- Creating a new CUDA project using Visual Studio Code
- Exploring the project structure and files
- Compiling and running the program
- Displaying output using printf and fprintf
CUDA API
- Understanding the role of the CUDA API in host programs
- Using the CUDA API to query device information and capabilities
- Managing device memory allocation and deallocation via the CUDA API
- Transferring data between host and device using the CUDA API
- Launching kernels and synchronizing threads with the CUDA API
- Handling errors and exceptions using the CUDA API
CUDA C/C++
- Understanding the role of CUDA C/C++ in device programs
- Writing kernels in CUDA C/C++ that execute on the GPU and manipulate data
- Using CUDA C/C++ data types, qualifiers, operators, and expressions
- Leveraging built-in functions such as math, atomic, and warp operations
- Utilizing built-in variables like threadIdx, blockIdx, and blockDim
- Using CUDA libraries such as cuBLAS, cuFFT, and cuRAND
CUDA Memory Model
- Understanding the differences between host and device memory models
- Working with CUDA memory spaces: global, shared, constant, and local
- Handling CUDA memory objects including pointers, arrays, textures, and surfaces
- Applying CUDA memory access modes such as read-only, write-only, and read-write
- Implementing the CUDA memory consistency model and synchronization mechanisms
CUDA Execution Model
- Understanding the differences between host and device execution models
- Defining parallelism using CUDA threads, blocks, and grids
- Using CUDA thread functions like threadIdx, blockIdx, and blockDim
- Applying CUDA block functions such as __syncthreads and __threadfence_block
- Utilizing CUDA grid functions, including gridDim, gridSync, and cooperative groups
Debugging
- Identifying common errors and bugs in CUDA programs
- Inspecting variables, breakpoints, and call stacks using the Visual Studio Code debugger
- Debugging CUDA programs on Linux using CUDA-GDB
- Detecting memory errors and leaks with CUDA-MEMCHECK
- Debugging and analyzing CUDA programs on Windows using NVIDIA Nsight
Optimization
- Understanding factors affecting the performance of CUDA programs
- Improving memory throughput using CUDA coalescing techniques
- Reducing memory latency through CUDA caching and prefetching
- Optimizing memory accesses and bandwidth using shared and local memory techniques
- Measuring and improving execution time and resource utilization using CUDA profiling and tools
Requirements
- A solid understanding of the C/C++ language and parallel programming concepts.
- Familiarity with computer architecture and memory hierarchy.
- Proficiency with command-line tools and code editors.
Target Audience
- Developers aiming to learn how to program NVIDIA GPUs using CUDA to exploit their parallelism.
- Developers seeking to write high-performance, scalable code that runs on various CUDA devices.
- Programmers interested in exploring the low-level aspects of GPU programming to optimize code performance.