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
- Introduction to CUDA
- Comparison of 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 executing the program
- Displaying output using printf and fprintf
CUDA API
- Understanding the role of the CUDA API in host programs
- Querying device information and capabilities via the CUDA API
- Allocating and deallocating device memory using the CUDA API
- Transferring data between host and device using the CUDA API
- Launching kernels and synchronizing threads via 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 for GPU execution and data manipulation using CUDA C/C++
- Using CUDA C/C++ data types, qualifiers, operators, and expressions
- Leveraging CUDA C/C++ built-in functions, such as math, atomic, and warp operations
- Utilizing CUDA C/C++ built-in variables, including threadIdx, blockIdx, and blockDim
- Using CUDA C/C++ libraries, such as cuBLAS, cuFFT, and cuRAND
CUDA Memory Model
- Distinguishing between host and device memory models
- Utilizing CUDA memory spaces: global, shared, constant, and local
- Working with CUDA memory objects, such as pointers, arrays, textures, and surfaces
- Applying CUDA memory access modes, such as read-only, write-only, and read-write
- Implementing CUDA memory consistency models and synchronization mechanisms
CUDA Execution Model
- Distinguishing between host and device execution models
- Defining parallelism using CUDA threads, blocks, and grids
- Utilizing CUDA thread functions, such as threadIdx, blockIdx, and blockDim
- Using CUDA block functions, such as __syncthreads and __threadfence_block
- Employing CUDA grid functions, such as 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 using CUDA-MEMCHECK
- Debugging and analyzing CUDA programs on Windows using NVIDIA Nsight
Optimization
- Understanding factors affecting CUDA program performance
- Improving memory throughput using CUDA coalescing techniques
- Reducing memory latency using CUDA caching and prefetching techniques
- Optimizing memory accesses and bandwidth using CUDA shared and local memory techniques
- Measuring and improving execution time and resource utilization using CUDA profiling tools
Requirements
- Familiarity with the C/C++ language and core concepts of parallel programming
- Foundational knowledge of computer architecture and memory hierarchy
- Proficiency with command-line tools and code editors
Target Audience
- Developers seeking to learn how to program NVIDIA GPUs using CUDA to leverage their parallelism
- Developers aiming to write high-performance, scalable code capable of running on diverse CUDA devices
- Programmers interested in exploring the low-level aspects of GPU programming and optimizing code performance