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
- Defining 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 the host program
- Using the CUDA API to query device information and capabilities
- Using the CUDA API to allocate and deallocate device memory
- Using the CUDA API to copy data between host and device
- Using the CUDA API to launch kernels and synchronize threads
- Handling errors and exceptions using the CUDA API
CUDA C/C++
- Understanding the role of CUDA C/C++ in the device program
- Using CUDA C/C++ to write kernels that execute on the GPU and manipulate data
- Utilizing CUDA C/C++ data types, qualifiers, operators, and expressions
- Using CUDA C/C++ built-in functions, such as math, atomic, and warp operations
- Using CUDA C/C++ built-in variables, such as threadIdx, blockIdx, and blockDim
- Leveraging CUDA C/C++ libraries, including cuBLAS, cuFFT, and cuRAND
CUDA Memory Model
- Distinguishing between host and device memory models
- Utilizing CUDA memory spaces, including global, shared, constant, and local
- Working with CUDA memory objects such as pointers, arrays, textures, and surfaces
- Applying CUDA memory access modes like read-only, write-only, and read-write
- Implementing the CUDA memory consistency model and synchronization mechanisms
CUDA Execution Model
- Distinguishing between host and device execution models
- Using CUDA threads, blocks, and grids to define parallelism
- Applying CUDA thread functions such as threadIdx, blockIdx, and blockDim
- Utilizing CUDA block functions like __syncthreads and __threadfence_block
- Employing CUDA grid functions such as gridDim, gridSync, and cooperative groups
Debugging
- Identifying common errors and bugs in CUDA programs
- Using the Visual Studio Code debugger to inspect variables, breakpoints, and the call stack
- 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
- Applying CUDA coalescing techniques to improve memory throughput
- Using CUDA caching and prefetching techniques to reduce memory latency
- Optimizing memory accesses and bandwidth using CUDA shared and local memory techniques
- Measuring and improving execution time and resource utilization through CUDA profiling and profiling tools
Requirements
- A solid understanding of the C/C++ language and parallel programming concepts
- Fundamental knowledge of computer architecture and memory hierarchy
- Practical experience with command-line tools and code editors
Audience
- Developers seeking to learn how to program NVIDIA GPUs using CUDA to exploit their parallelism
- Developers aiming to write high-performance, scalable code compatible with various CUDA devices
- Programmers interested in exploring the low-level aspects of GPU programming and optimizing code performance