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
- Definition and scope of GPU programming
- Strategic rationale for adopting GPU programming
- Operational challenges and trade-offs in GPU implementation
- Overview of available frameworks and tooling ecosystems
- Selection of appropriate frameworks and tools for specific application needs
OpenCL
- Overview of the OpenCL standard
- Analysis of OpenCL strengths and limitations
- Configuration of the OpenCL development environment
- Implementation of a foundational OpenCL program for vector addition
- Application of the OpenCL API for device interrogation, memory management, data transfer, kernel execution, and thread synchronization
- Development of device-executable kernels using the OpenCL C language
- Leveraging OpenCL built-in functions, variables, and libraries for standard operations
- Optimization of data transfer and memory access via OpenCL memory spaces (global, local, constant, private)
- Control of parallelism through the OpenCL execution model (work-items, work-groups, ND-ranges)
- Diagnostic and validation of OpenCL programs using tools such as CodeXL
- Performance enhancement of OpenCL programs through coalescing, caching, prefetching, and profiling techniques
CUDA
- Overview of the NVIDIA CUDA architecture
- Analysis of CUDA strengths and limitations
- Configuration of the CUDA development environment
- Implementation of a foundational CUDA program for vector addition
- Application of the CUDA API for device interrogation, memory management, data transfer, kernel execution, and thread synchronization
- Development of device-executable kernels using the CUDA C/C++ language
- Leveraging CUDA built-in functions, variables, and libraries for standard operations
- Optimization of data transfer and memory access via CUDA memory spaces (global, shared, constant, local)
- Control of parallelism through the CUDA execution model (threads, blocks, grids)
- Diagnostic and validation of CUDA programs using tools such as CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
- Performance enhancement of CUDA programs through coalescing, caching, prefetching, and profiling techniques
ROCm
- Overview of the ROCm software stack
- Analysis of ROCm strengths and limitations
- Configuration of the ROCm development environment
- Implementation of a foundational ROCm program for vector addition
- Application of the ROCm API for device interrogation, memory management, data transfer, kernel execution, and thread synchronization
- Development of device-executable kernels using the ROCm C/C++ language
- Leveraging ROCm built-in functions, variables, and libraries for standard operations
- Optimization of data transfer and memory access via ROCm memory spaces (global, local, constant, private)
- Control of parallelism through the ROCm execution model (threads, blocks, grids)
- Diagnostic and validation of ROCm programs using tools such as the ROCm Debugger and ROCm Profiler
- Performance enhancement of ROCm programs through coalescing, caching, prefetching, and profiling techniques
HIP
- Overview of the HIP runtime and language
- Analysis of HIP strengths and limitations
- Configuration of the HIP development environment
- Implementation of a foundational HIP program for vector addition
- Development of device-executable kernels using the HIP language
- Leveraging HIP built-in functions, variables, and libraries for standard operations
- Optimization of data transfer and memory access via HIP memory spaces (global, shared, constant, local)
- Control of parallelism through the HIP execution model (threads, blocks, grids)
- Diagnostic and validation of HIP programs using tools such as the ROCm Debugger and ROCm Profiler
- Performance enhancement of HIP programs through coalescing, caching, prefetching, and profiling techniques
Comparison
- Comparative analysis of features, performance, and compatibility across OpenCL, CUDA, ROCm, and HIP
- Assessment of GPU programs using standardized benchmarks and metrics
- Review of best practices and strategic tips for GPU programming
- Exploration of 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
- Foundational knowledge of computer architecture and memory hierarchy
- Practical experience with command-line interfaces and code editors
Target Audience
- Developers seeking to acquire foundational knowledge of GPU programming and the principal frameworks for creating GPU-accelerated applications
- Developers aiming to write portable and scalable code capable of executing across diverse platforms and devices
- Programmers interested in exploring the operational benefits and technical challenges of GPU programming and optimization
21 Hours