Get in Touch

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

  1. Demonstrated proficiency in C++, encompassing lambda expressions, templates, and the Standard Template Library (STL).
  2. Working knowledge of standard algorithms, container classes, and iterator mechanisms.
  3. Adequate command of fundamental control structures, including loops, conditional statements, and functions.
  4. 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.

 8 Hours

Number of participants


Price per participant

Testimonials (3)

Upcoming Courses

Related Categories