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
- Overview of GPU programming
- Benefits and use cases for GPU programming
- Understanding the challenges and trade-offs involved in GPU programming
- The landscape of GPU programming frameworks
- Selecting the appropriate framework for your application
OpenCL
- Introduction to OpenCL
- Advantages and disadvantages of using OpenCL
- Setting up the OpenCL development environment
- Creating a basic OpenCL program to perform vector addition
- Using the OpenCL API to query device info, manage device memory, transfer data, launch kernels, and synchronize threads
- Writing kernels using the OpenCL C language to execute on the device and manipulate data
- Utilizing OpenCL built-in functions, variables, and libraries for common tasks
- Leveraging OpenCL memory spaces (global, local, constant, private) to optimize data transfers and access
- Using the OpenCL execution model to control work-items, work-groups, and ND-ranges for parallelism
- Debugging and testing OpenCL programs with tools like CodeXL
- Optimizing OpenCL programs through coalescing, caching, prefetching, and profiling
CUDA
- Introduction to CUDA
- Advantages and disadvantages of using CUDA
- Setting up the CUDA development environment
- Creating a basic CUDA program for vector addition
- Using the CUDA API to query device info, manage device memory, transfer data, launch kernels, and synchronize threads
- Writing kernels using CUDA C/C++ to execute on the device and manipulate data
- Utilizing CUDA built-in functions, variables, and libraries for common operations
- Leveraging CUDA memory spaces (global, shared, constant, local) to optimize data transfers and access
- Using the CUDA execution model to control threads, blocks, and grids for parallelism
- Debugging and testing CUDA programs with tools like CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
- Optimizing CUDA programs via coalescing, caching, prefetching, and profiling
ROCm
- Introduction to ROCm
- Advantages and disadvantages of using ROCm
- Setting up the ROCm development environment
- Creating a basic ROCm program for vector addition
- Using the ROCm API to query device info, manage device memory, transfer data, launch kernels, and synchronize threads
- Writing kernels using ROCm C/C++ to execute on the device and manipulate data
- Utilizing ROCm built-in functions, variables, and libraries for common tasks
- Leveraging ROCm memory spaces (global, local, constant, private) to optimize data transfers and access
- Using the ROCm execution model to control threads, blocks, and grids for parallelism
- Debugging and testing ROCm programs with tools like the ROCm Debugger and ROCm Profiler
- Optimizing ROCm programs using coalescing, caching, prefetching, and profiling
Comparison
- Comparing the features, performance, and compatibility of OpenCL, CUDA, and ROCm
- Evaluating GPU program efficiency using benchmarks and metrics
- Key best practices and tips for effective GPU programming
- Exploring current trends and future challenges in GPU programming
Summary and Next Steps
Requirements
- A solid understanding of C/C++ language and parallel programming concepts
- Fundamental knowledge of computer architecture and memory hierarchy
- Familiarity with command-line tools and code editors
Target Audience
- Developers seeking to master different GPU programming frameworks and compare their features, performance, and compatibility
- Developers aiming to write portable and scalable code capable of running across various platforms and devices
- Programmers interested in exploring the trade-offs and challenges associated with GPU programming and optimization
28 Hours