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.
Duration 28 hours
Course Outline
Introduction
- Defining GPU programming
- The benefits of adopting GPU programming
- Understanding the challenges and trade-offs involved in GPU programming
- Overview of available frameworks for GPU programming
- Selecting the appropriate framework for your specific application
OpenCL
- An overview of OpenCL
- Advantages and disadvantages of using OpenCL
- Configuring the development environment for OpenCL
- Developing a basic OpenCL application for vector addition
- Using the OpenCL API to query device info, manage memory, transfer data, launch kernels, and synchronize threads
- Using OpenCL C to write kernels that execute on the device and manipulate data
- Utilizing OpenCL built-in functions, variables, and libraries for common operations
- Optimizing data transfers and memory access using OpenCL memory spaces (global, local, constant, private)
- Managing parallelism using the OpenCL execution model (work-items, work-groups, and ND-ranges)
- Debugging and testing OpenCL programs with tools like CodeXL
- Optimizing OpenCL programs through coalescing, caching, prefetching, and profiling
CUDA
- An overview of CUDA
- Advantages and disadvantages of using CUDA
- Configuring the development environment for CUDA
- Developing a basic CUDA application for vector addition
- Using the CUDA API to query device info, manage memory, transfer data, launch kernels, and synchronize threads
- Using CUDA C/C++ to write kernels that execute on the device and manipulate data
- Utilizing CUDA built-in functions, variables, and libraries for common operations
- Optimizing data transfers and memory access using CUDA memory spaces (global, shared, constant, local)
- Managing parallelism using the CUDA execution model (threads, blocks, and grids)
- Debugging and testing CUDA programs with tools like CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
- Optimizing CUDA programs through coalescing, caching, prefetching, and profiling
ROCm
- An overview of ROCm
- Advantages and disadvantages of using ROCm
- Configuring the development environment for ROCm
- Developing a basic ROCm application for vector addition
- Using the ROCm API to query device info, manage memory, transfer data, launch kernels, and synchronize threads
- Using ROCm C/C++ to write kernels that execute on the device and manipulate data
- Utilizing ROCm built-in functions, variables, and libraries for common operations
- Optimizing data transfers and memory access using ROCm memory spaces (global, local, constant, private)
- Managing parallelism using the ROCm execution model (threads, blocks, and grids)
- Debugging and testing ROCm programs with tools like ROCm Debugger and ROCm Profiler
- Optimizing ROCm programs through coalescing, caching, prefetching, and profiling
Comparative Analysis
- Comparing the features, performance, and compatibility of OpenCL, CUDA, and ROCm
- Evaluating GPU programs using benchmarks and key metrics
- Best practices and expert 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 a solid grasp of parallel programming concepts
- Fundamental understanding of computer architecture and memory hierarchy
- Familiarity with command-line interfaces and code editors
Target Audience
- Developers seeking to master various GPU programming frameworks and compare their features, performance, and compatibility
- Developers aiming to write portable and scalable code capable of running across diverse platforms and devices
- Programmers interested in exploring the trade-offs and complexities inherent in GPU programming and optimization