Course Outline
Overview of GPU-Accelerated Computing Infrastructure
- Heterogeneous computing architectures and CPU-GPU integration models
- CUDA execution contexts and memory space management
- Compilation workflows for CUDA C++ using nvcc and CMake
- Validation procedures for GPU development environments for government applications
Parallel Algorithm Implementation with Thrust and CUB Libraries
- GPU-accelerated operations for sorting, reduction, and transformation
- Adaptation of Standard Template Library (STL) algorithms for GPU execution
- Management of Thrust device vectors and execution policies
- Utilization of CUB device-wide primitives for custom processing pipelines
GPU Memory Architecture and Resource Management
- Classification of global, constant, and texture memory types
- Explicit procedures for device memory allocation and data transfers
- Leveraging Unified Memory to streamline data access workflows
- Optimization of memory coalescing and access patterns for efficiency
Asynchronous Execution Management via CUDA Streams
- Procedures for creating and managing CUDA streams
- Strategies for overlapping kernel execution with data transfers
- Use of CUDA events to establish execution dependencies
- Tuning stream priorities and concurrency levels for optimal performance
Development of Custom CUDA Kernels
- Understanding the SIMT programming model and warp execution mechanics
- Configuration of kernel launch parameters and implementation of grid-stride loops
- Techniques for thread indexing within multidimensional grids
- Implementation of error handling protocols and CUDA runtime API validation
Thread Hierarchy and Execution Model Architecture
- Structure of grids, blocks, and threads in device code execution
- Application of warp-level primitives and ballot operations
- Execution of block-level synchronization and barrier mechanisms
- Analysis of occupancy rates and resource utilization metrics
Flexible Parallelism via Cooperative Groups
- Utilization of the cooperative_groups API and associated group types
- Implementation of thread-block tiles and tiled partitions
- Execution of grid-level cooperative launches
- Coordination of multi-grid synchronization patterns for distributed tasks
Optimization Techniques for Shared Memory
- Management of shared memory banks and prevention of bank conflicts
- Application of tiling strategies for matrix operations
- Configuration of shared memory as user-managed cache memory
- Utilization of cuda::shared_memory_mdspan for multidimensional data views
Kernel Fusion and Advanced Parallel Processing Patterns
- Techniques for f multiple kernels to minimize launch overhead
- Implementation of scan, reduce-by-key, and segmented algorithms
- Application of atomic operations and lock-free data structures
- Optimization of throughput through warp-aggregated atomic operations
Performance Profiling and Optimization with Nsight Systems
- Analysis of timeline data for CPU and GPU activity correlation
- Identification of bottlenecks related to memory transfers
- Profiling of kernel performance metrics and occupancy levels
- Iterative optimization processes utilizing Nsight Compute tools for government workloads
Integration of Modern C++ Features in CUDA Device Code
- Application of lambdas, constexpr variables, and auto type deduction within kernels
- Utilization of C++17 parallel algorithms and execution policies
- Incorporation of C++20 concepts and ranges for device-side operations
- Leverage of C++23 support features in nvcc and CCCL 3.x frameworks
CUDA Graphs and Advanced Asynchronous Workflows
- Procedures for defining and launching CUDA graphs
- Capture mechanisms for converting stream execution to graphs
- Modification of graph structures and management of conditional execution nodes
- Reduction of launch latency for iterative computational workloads
Integration Patterns for Legacy Application Modernization
- Encapsulation of GPU code behind robust C++ interfaces
- Management of multi-GPU configurations and Non-Uniform Memory Access (NUMA) systems
- Integration of build system processes with CMake and CUDA toolkits
- Debugging of device code using cuda-gdb for effective troubleshooting
Summary and Strategic Best Practices
- Criteria for selecting between Thrust, CUB, and custom kernel development
- Strategies for achieving performance portability across diverse GPU architectures
- Guidelines for code organization and Resource Acquisition Is Initialization (RAII) for CUDA resources
- Recommended next steps and advanced learning pathways for continued professional development
Requirements
- Demonstrated proficiency in C++, encompassing lambda expressions, templates, and the Standard Template Library (STL).
- Working knowledge of standard algorithms, container classes, and iterator mechanisms.
- Adequate command of fundamental control structures, including loops, conditional statements, and functions.
- No previous experience with CUDA or GPU architecture is necessary for enrollment.
Target Participants
- C++ practitioners aiming to enhance the performance of compute-intensive applications through graphics processing units.
- Software engineers transitioning from centralized processing environments to heterogeneous parallel computing frameworks.
- Performance analysts and quantitative specialists managing extensive data workloads.
This curriculum is designed specifically for government agencies and personnel requiring robust technical capabilities in modern computational environments.
Testimonials (3)
Initially, the trainer's pace seemed a bit too fast for me, but after offering the feedback during the training, he acknowledged it and slowed down the pace without sacrificing any of the lectures. Good rapport with the audience, very friendly and open for discussions.
Alexandru Ostafi - Siemens
Course - Advanced C++ : Practical workshop
Detailed explanation, re-iteration of points in a quite subtle way that really drove the knowledge home very well. Rod's willingness to double-check the odd obscure question that we rasied, to be sure that his answers were 100% right. Also, his interest in discussing the pros & cons of alternate coding styles so that we learnt not only how to use C++ in our intended way, but why it should be done that way.
Nick Dillon - cellxica Ltd
Course - Using C++ in Embedded Systems - Applying C++11/C++14
Experience sharing, it's teacher's know-how and valuable.