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
- Reasons for adopting GPU programming
- Challenges and trade-offs in GPU development
- Overview of available frameworks and tools
- Selecting the optimal framework and tool for your application
OpenCL
- Understanding OpenCL
- Advantages and disadvantages of OpenCL
- Configuring the OpenCL development environment
- Developing a basic OpenCL program for vector addition
- Utilizing the OpenCL API to query device information, manage memory, transfer data, launch kernels, and synchronize threads
- Writing device-executable kernels using the OpenCL C language
- Using OpenCL built-in functions, variables, and libraries for common operations
- Optimizing data transfers and memory access via OpenCL memory spaces (global, local, constant, private)
- Controlling parallelism using the OpenCL execution model (work-items, work-groups, ND-ranges)
- Debugging and testing OpenCL programs with tools like CodeXL
- Optimizing OpenCL programs through coalescing, caching, prefetching, and profiling
CUDA
- Understanding CUDA
- Advantages and disadvantages of CUDA
- Setting up the CUDA development environment
- Creating a basic CUDA program for vector addition
- Using the CUDA API to query device information, manage memory, copy data, launch kernels, and synchronize threads
- Writing kernels in CUDA C/C++ to execute on the device and manipulate data
- Utilizing CUDA built-in functions, variables, and libraries for standard tasks
- Optimizing memory access using CUDA memory spaces (global, shared, constant, local)
- Managing parallelism via the CUDA execution model (threads, blocks, grids)
- Debugging and testing CUDA programs using CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
- Optimizing CUDA programs using techniques such as coalescing, caching, prefetching, and profiling
ROCm
- Understanding ROCm
- Advantages and disadvantages of ROCm
- Configuring the ROCm development environment
- Developing a basic ROCm program for vector addition
- Using the ROCm API to query device information, manage memory, transfer data, launch kernels, and synchronize threads
- Writing kernels in ROCm C/C++ to execute on the device
- Using ROCm built-in functions, variables, and libraries for common operations
- Optimizing memory access using ROCm memory spaces (global, local, constant, private)
- Controlling parallelism via the ROCm execution model (threads, blocks, grids)
- Debugging and testing ROCm programs using the ROCm Debugger and ROCm Profiler
- Optimizing ROCm programs through coalescing, caching, prefetching, and profiling
HIP
- Understanding HIP
- Advantages and disadvantages of HIP
- Setting up the HIP development environment
- Creating a basic HIP program for vector addition
- Writing kernels in HIP to execute on the device and manipulate data
- Using HIP built-in functions, variables, and libraries for standard tasks
- Optimizing memory access using HIP memory spaces (global, shared, constant, local)
- Managing parallelism via the HIP execution model (threads, blocks, grids)
- Debugging and testing HIP programs using the ROCm Debugger and ROCm Profiler
- Optimizing HIP programs using techniques such as coalescing, caching, prefetching, and profiling
Comparison
- Comparing features, performance, and compatibility across OpenCL, CUDA, ROCm, and HIP
- Evaluating GPU program efficiency using benchmarks and metrics
- Adopting best practices and tips for GPU programming
- Exploring current trends and future challenges in GPU programming
Summary and Next Steps
Requirements
- Familiarity with the C/C++ language and core parallel programming concepts
- Fundamental understanding of computer architecture and memory hierarchy
- Practical experience with command-line utilities and code editors
Audience
- Developers seeking to learn the basics of GPU programming and the main frameworks and tools for developing GPU applications
- Developers aiming to write portable and scalable code that runs across different platforms and devices
- Programmers interested in exploring the benefits and challenges of GPU programming and optimization
21 Hours