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.
Course Outline
Introduction
- Defining GPU programming
- The rationale behind using GPU acceleration
- Key challenges and trade-offs in GPU development
- Overview of available frameworks and tools
- Strategies for selecting the right framework and tool for specific applications
OpenCL
- An overview of OpenCL
- Advantages and limitations of the OpenCL ecosystem
- Configuring the OpenCL development environment
- Developing a basic OpenCL program for vector addition
- Using the OpenCL API to query device info, manage memory, handle host-device data transfers, launch kernels, and synchronize threads
- Writing device-side kernels using the OpenCL C language
- Leveraging OpenCL built-in functions, variables, and libraries for common operations
- Optimizing performance by utilizing OpenCL memory spaces: global, local, constant, and private
- Controlling parallelism via the OpenCL execution model: work-items, work-groups, and ND-ranges
- Debugging and testing OpenCL programs with tools like CodeXL
- Optimizing OpenCL code through coalescing, caching, prefetching, and profiling
CUDA
- An overview of CUDA
- Strengths and weaknesses of the CUDA platform
- Setting up the CUDA development environment
- Creating a basic CUDA program for vector addition
- Utilizing the CUDA API for device queries, memory management, data copying, kernel launches, and thread synchronization
- Writing kernels with CUDA C/C++ for device execution and data manipulation
- Employing CUDA built-in functions, variables, and libraries for standard tasks
- Optimizing data flow using CUDA memory spaces: global, shared, constant, and local
- Managing parallelism via the CUDA execution model: threads, blocks, and grids
- Debugging and testing CUDA applications using CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
- Enhancing CUDA performance with coalescing, caching, prefetching, and profiling
ROCm
- An overview of ROCm
- Benefits and drawbacks of the ROCm stack
- Preparing the ROCm development environment
- Building a basic ROCm program for vector addition
- Using the ROCm API to manage device info, memory, data transfers, kernel launches, and synchronization
- Writing kernels with ROCm C/C++ for device-side data manipulation
- Utilizing ROCm built-in functions, variables, and libraries for common operations
- Optimizing performance via ROCm memory spaces: global, local, constant, and private
- Controlling parallelism using the ROCm execution model: threads, blocks, and grids
- Debugging and testing ROCm programs with the ROCm Debugger and ROCm Profiler
- Optimizing ROCm code through coalescing, caching, prefetching, and profiling
HIP
- An overview of HIP
- Advantages and disadvantages of using HIP
- Setting up the HIP development environment
- Creating a basic HIP program for vector addition
- Writing kernels using the HIP language for device execution and data manipulation
- Utilizing HIP built-in functions, variables, and libraries for common tasks
- Optimizing data access using HIP memory spaces: global, shared, constant, and local
- Controlling parallelism via the HIP execution model: threads, blocks, and grids
- Debugging and testing HIP programs using the ROCm Debugger and ROCm Profiler
- Optimizing HIP code through coalescing, caching, prefetching, and profiling
Comparison
- Comparing the features, performance, and compatibility of OpenCL, CUDA, ROCm, and HIP
- Evaluating GPU applications using benchmarks and performance metrics
- Adopting best practices and expert tips for effective GPU programming
- Exploring current trends and future challenges in the GPU programming landscape
Summary and Next Steps
Requirements
- Familiarity with C/C++ syntax and core parallel programming concepts
- Foundational knowledge of computer architecture and memory hierarchy
- Practical experience with command-line interfaces and code editors
Target Audience
- Developers seeking to understand the fundamentals of GPU programming and the primary frameworks for building GPU applications
- Engineers aiming to write portable, scalable code that can execute efficiently across different platforms and hardware devices
- Programmers interested in exploring the advantages, constraints, and optimization strategies inherent in GPU programming
21 Hours