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
- What is CUDA?
- CUDA vs OpenCL vs 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 the 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 synchronise threads
- Using the CUDA API to handle errors and exceptions
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
- Using CUDA C/C++ data types, qualifiers, operators, and expressions
- Using CUDA C/C++ built-in functions, such as math, atomic, warp, etc.
- Using CUDA C/C++ built-in variables, such as threadIdx, blockIdx, blockDim, etc.
- Using CUDA C/C++ libraries, such as cuBLAS, cuFFT, cuRAND, etc.
CUDA Memory Model
- Understanding the difference between host and device memory models
- Using CUDA memory spaces, such as global, shared, constant, and local
- Using CUDA memory objects, such as pointers, arrays, textures, and surfaces
- Using CUDA memory access modes, such as read-only, write-only, read-write, etc.
- Using the CUDA memory consistency model and synchronisation mechanisms
CUDA Execution Model
- Understanding the difference between host and device execution models
- Using CUDA threads, blocks, and grids to define parallelism
- Using CUDA thread functions, such as threadIdx, blockIdx, blockDim, etc.
- Using CUDA block functions, such as __syncthreads, __threadfence_block, etc.
- Using CUDA grid functions, such as gridDim, gridSync, cooperative groups, etc.
Debugging
- Understanding common errors and bugs in CUDA programs
- Using the Visual Studio Code debugger to inspect variables, breakpoints, call stacks, etc.
- Using CUDA-GDB to debug CUDA programs on Linux
- Using CUDA-MEMCHECK to detect memory errors and leaks
- Using NVIDIA Nsight to debug and analyse CUDA programs on Windows
Optimization
- Understanding the factors that affect the performance of CUDA programs
- Using CUDA coalescing techniques to improve memory throughput
- Using CUDA caching and prefetching techniques to reduce memory latency
- Using CUDA shared memory and local memory techniques to optimise memory accesses and bandwidth
- Using CUDA profiling and profiling tools to measure and improve execution time and resource utilisation
Requirements
- A working knowledge of the C/C++ language and concepts of parallel programming.
- Basic understanding of computer architecture and memory hierarchy.
- Familiarity with command-line tools and code editors.
Audience
- Developers seeking to learn how to use CUDA to program NVIDIA GPUs and 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 to optimise code performance.