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 21 hours
Course Outline
Introduction
- Defining GPU programming
- Rationale for utilizing GPU programming
- Challenges and trade-offs associated with GPU development
- Overview of available frameworks and tools for GPU programming
- Selecting the optimal framework and tool for specific applications
OpenCL
- Introduction to OpenCL
- Advantages and limitations 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 device-executed kernels using the OpenCL C language to 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, and private)
- Controlling parallelism via the OpenCL execution model (work-items, work-groups, and ND-ranges)
- Debugging and testing OpenCL programs with tools such as CodeXL
- Enhancing OpenCL program performance through coalescing, caching, prefetching, and profiling
CUDA
- Introduction to CUDA
- Advantages and limitations 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 device-executed kernels using the CUDA C/C++ language to manipulate data
- Leveraging CUDA built-in functions, variables, and libraries for standard tasks
- Optimizing data flows using CUDA memory spaces (global, shared, constant, and local)
- Managing parallelism through the CUDA execution model (threads, blocks, and grids)
- Debugging and testing CUDA programs using CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
- Optimizing CUDA program performance via coalescing, caching, prefetching, and profiling
ROCm
- Introduction to ROCm
- Advantages and limitations 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 device-executed kernels using the ROCm C/C++ language to manipulate data
- Utilizing ROCm built-in functions, variables, and libraries for common operations
- Optimizing data transfers using ROCm memory spaces (global, local, constant, and private)
- Controlling parallelism via the ROCm execution model (threads, blocks, and grids)
- Debugging and testing ROCm programs using the ROCm Debugger and ROCm Profiler
- Enhancing ROCm program performance through coalescing, caching, prefetching, and profiling
HIP
- Introduction to HIP
- Advantages and limitations of HIP
- Setting up the HIP development environment
- Creating a basic HIP program for vector addition
- Writing device-executed kernels using the HIP language to manipulate data
- Leveraging HIP built-in functions, variables, and libraries for standard tasks
- Optimizing data flows using HIP memory spaces (global, shared, constant, and local)
- Managing parallelism through the HIP execution model (threads, blocks, and grids)
- Debugging and testing HIP programs using the ROCm Debugger and ROCm Profiler
- Optimizing HIP program performance via coalescing, caching, prefetching, and profiling
Comparison
- Comparing the features, performance characteristics, and compatibility of OpenCL, CUDA, ROCm, and HIP
- Evaluating GPU programs through benchmarks and performance metrics
- Learning best practices and strategic 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++ programming and parallel computing concepts
- Foundational knowledge of computer architecture and memory hierarchy structures
- Practical experience with command-line utilities and code editors
Target Audience
- Developers aiming to acquire foundational knowledge of GPU programming and the key frameworks and tools for building GPU applications
- Developers interested in writing portable and scalable code capable of running across different platforms and devices
- Programmers looking to explore the potential benefits and technical challenges associated with GPU programming and optimization