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 for using GPU programming.
- Challenges and trade-offs inherent to GPU programming.
- Overview of available GPU programming frameworks.
- Selecting the optimal framework for your application.
OpenCL
- Understanding OpenCL.
- Pros and cons of OpenCL.
- Configuring the OpenCL development environment.
- Developing 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 kernels in OpenCL C to execute on the device and manipulate data.
- Leveraging OpenCL built-in functions, variables, and libraries for common operations.
- Utilizing OpenCL memory spaces (global, local, constant, private) to optimize data transfers and memory access.
- Applying the OpenCL execution model to manage work-items, work-groups, and ND-ranges for parallelism.
- Debugging and testing OpenCL programs with tools like CodeXL.
- Optimizing OpenCL programs via coalescing, caching, prefetching, and profiling.
CUDA
- Understanding CUDA.
- Pros and cons of CUDA.
- Setting up the CUDA development environment.
- Creating a basic CUDA program for vector addition.
- Utilizing 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.
- Using CUDA built-in functions, variables, and libraries for standard tasks.
- Employing CUDA memory spaces (global, shared, constant, local) to optimize data transfers and memory access.
- Applying the CUDA execution model to control threads, blocks, and grids for parallelism.
- Debugging and testing CUDA programs with tools such as CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight.
- Optimizing CUDA programs using coalescing, caching, prefetching, and profiling.
ROCm
- Understanding ROCm.
- Pros and cons of ROCm.
- Configuring the ROCm development environment.
- Creating 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 and manipulate data.
- Leveraging ROCm built-in functions, variables, and libraries for common operations.
- Utilizing ROCm memory spaces (global, local, constant, private) to optimize data transfers and memory access.
- Applying 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 via coalescing, caching, prefetching, and profiling.
Comparison
- Comparing the features, performance, and compatibility of OpenCL, CUDA, and ROCm.
- Assessing GPU programs through benchmarks and metrics.
- Adopting best practices and tips for effective GPU programming.
- Exploring current and future trends and challenges in GPU programming.
Summary and Next Steps
Requirements
- Proficiency in the C/C++ language and concepts of parallel programming.
- Fundamental understanding of computer architecture and memory hierarchy.
- Familiarity with command-line tools 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 compatible with diverse platforms and devices.
- Programmers looking to investigate the trade-offs and challenges associated with GPU programming and optimization.
28 Hours