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
- Definition and scope of CUDA
- Comparative analysis: CUDA vs. OpenCL vs. SYCL
- Architectural overview of CUDA features
- Configuring the development environment
Getting Started
- Initializing a new CUDA project in Visual Studio Code
- Analyzing the project structure and file organization
- Compiling and executing the application
- Outputting data using printf and fprintf functions
CUDA API
- The role of the CUDA API within the host program
- Querying device information and capabilities via the CUDA API
- Allocating and freeing device memory using the CUDA API
- Transferring data between host and device via the CUDA API
- Launching kernels and synchronizing threads using the CUDA API
- Managing errors and exceptions through the CUDA API
CUDA C/C++
- The role of CUDA C/C++ in device-side programming
- Writing kernels for GPU execution and data manipulation in CUDA C/C++
- Utilizing CUDA C/C++ data types, qualifiers, operators, and expressions
- Leveraging CUDA C/C++ built-in functions, including math, atomic, and warp operations
- Employing CUDA C/C++ built-in variables, such as threadIdx, blockIdx, and blockDim
- Integrating CUDA C/C++ libraries, such as cuBLAS, cuFFT, and cuRAND
CUDA Memory Model
- Distinguishing between host and device memory models
- Utilizing CUDA memory spaces, including global, shared, constant, and local memory
- Managing CUDA memory objects, such as pointers, arrays, textures, and surfaces
- Applying CUDA memory access modes, including 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
- Defining parallelism using CUDA threads, blocks, and grids
- Utilizing CUDA thread functions, such as threadIdx, blockIdx, and blockDim
- Employing CUDA block functions, such as __syncthreads and __threadfence_block
- Implementing 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 using CUDA-MEMCHECK
- Debugging and analyzing CUDA programs on Windows using NVIDIA Nsight
Optimization
- Identifying factors that impact CUDA program performance
- Enhancing memory throughput using CUDA coalescing techniques
- Reducing memory latency via 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
- Proficiency in the C/C++ language and parallel programming concepts
- Foundational knowledge of computer architecture and memory hierarchy
- Experience with command-line tools and code editors
Audience
- Developers seeking to learn how to use CUDA to program NVIDIA GPUs and exploit their parallelism for government applications
- Developers aiming to write high-performance, scalable code capable of running on diverse CUDA devices
- Programmers interested in exploring low-level aspects of GPU programming and optimizing code performance