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
- Understanding GPU programming
- Rationale for utilizing GPU programming
- Challenges and trade-offs associated with GPU programming
- Overview of frameworks available for GPU programming
- Selecting the appropriate framework for specific applications
OpenCL
- Defining OpenCL
- Pros and cons of using OpenCL
- Configuring the development environment for OpenCL
- Creating a basic OpenCL program for vector addition
- Using the OpenCL API to query device details, manage memory, transfer data, launch kernels, and synchronize threads
- Writing device-executing kernels with the OpenCL C language
- Utilizing OpenCL built-in functions, variables, and libraries for common operations
- Optimizing data transfer and memory access via OpenCL memory spaces (global, local, constant, private)
- Managing parallelism through the OpenCL execution model (work-items, work-groups, ND-ranges)
- Debugging and testing OpenCL programs using CodeXL
- Optimizing OpenCL programs via coalescing, caching, prefetching, and profiling
CUDA
- Defining CUDA
- Advantages and limitations of CUDA
- Configuring the development environment for CUDA
- Creating a basic CUDA program for vector addition
- Using the CUDA API to query device details, manage memory, transfer data, launch kernels, and synchronize threads
- Writing device-executing kernels with CUDA C/C++
- Utilizing CUDA built-in functions, variables, and libraries for common operations
- Optimizing data transfer and memory access via CUDA memory spaces (global, shared, constant, local)
- Managing parallelism through the CUDA execution model (threads, blocks, grids)
- Debugging and testing CUDA programs using CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
- Optimizing CUDA programs via coalescing, caching, prefetching, and profiling
ROCm
- Defining ROCm
- Advantages and limitations of ROCm
- Configuring the development environment for ROCm
- Creating a basic ROCm program for vector addition
- Using the ROCm API to query device details, manage memory, transfer data, launch kernels, and synchronize threads
- Writing device-executing kernels with ROCm C/C++
- Utilizing ROCm built-in functions, variables, and libraries for common operations
- Optimizing data transfer and memory access via ROCm memory spaces (global, local, constant, private)
- Managing parallelism through the ROCm execution model (threads, blocks, grids)
- Debugging and testing ROCm programs using ROCm Debugger and ROCm Profiler
- Optimizing ROCm programs via coalescing, caching, prefetching, and profiling
Comparison
- Comparing features, performance, and compatibility among OpenCL, CUDA, and ROCm
- Evaluating GPU programs through benchmarks and metrics
- Learning best practices and tips for GPU programming
- Exploring current and future trends and challenges in GPU programming
Summary and Next Steps
Requirements
- Proficiency in C/C++ programming and parallel computing concepts
- Fundamental knowledge of computer architecture and memory hierarchy
- Experience using command-line interfaces and code editors
Target Audience
- Developers looking to master multiple GPU programming frameworks and evaluate their features, performance, and compatibility.
- Developers aiming to write portable, scalable code capable of running across various platforms and devices.
- Programmers interested in exploring the trade-offs and challenges inherent in GPU programming and optimization.
28 Hours