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 and its core principles.
- The strategic advantages of adopting GPU programming.
- Understanding the challenges and trade-offs involved in GPU development.
- Overview of major GPU programming frameworks.
- Criteria for selecting the most suitable framework for specific applications.
OpenCL
- An in-depth look at OpenCL.
- Analyzing the strengths and limitations of OpenCL.
- Configuring the development environment for OpenCL.
- Building a foundational OpenCL application for vector addition.
- Utilizing the OpenCL API for device queries, memory management, data transfer, kernel launch, and thread synchronization.
- Writing device-executed kernels and manipulating data using OpenCL C.
- Leveraging OpenCL built-in functions, variables, and libraries for common operations.
- Optimizing data transfers and memory access via OpenCL memory spaces (global, local, constant, private).
- Controlling parallelism through the OpenCL execution model (work-items, work-groups, ND-ranges).
- Debugging and testing OpenCL applications using tools like CodeXL.
- Applying optimization techniques such as coalescing, caching, prefetching, and profiling to OpenCL code.
CUDA
- Understanding the CUDA ecosystem.
- Evaluating the benefits and drawbacks of using CUDA.
- Setting up the CUDA development environment.
- Developing a basic CUDA application for vector addition.
- Using the CUDA API to manage device information, memory, data transfer, kernel execution, and synchronization.
- Authoring kernels and manipulating data using the CUDA C/C++ language.
- Utilizing CUDA built-in functions, variables, and libraries for standard tasks.
- Optimizing performance using CUDA memory spaces (global, shared, constant, local).
- Managing parallelism via the CUDA execution model (threads, blocks, grids).
- Debugging and testing CUDA programs with tools like CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight.
- Optimizing CUDA applications through coalescing, caching, prefetching, and profiling.
ROCm
- Introduction to the ROCm platform.
- Assessing the advantages and disadvantages of ROCm.
- Configuring the development environment for ROCm.
- Creating a basic ROCm application for vector addition.
- Using the ROCm API for device queries, memory management, data transfer, kernel launch, and synchronization.
- Writing kernels and manipulating data using the ROCm C/C++ language.
- Employing ROCm built-in functions, variables, and libraries for common operations.
- Optimizing data flow using ROCm memory spaces (global, local, constant, private).
- Controlling parallelism through the ROCm execution model (threads, blocks, grids).
- Debugging and testing ROCm programs using the ROCm Debugger and Profiler.
- Applying optimization techniques such as coalescing, caching, prefetching, and profiling to ROCm code.
Comparative Analysis
- Direct comparison of features, performance, and compatibility among OpenCL, CUDA, and ROCm.
- Evaluating GPU program efficiency using benchmarks and key metrics.
- Best practices and expert tips for effective GPU programming.
- Exploring current trends and future challenges in the GPU programming landscape.
Summary and Next Steps
Requirements
- A solid understanding of C/C++ language constructs and parallel programming concepts.
- Fundamental knowledge of computer architecture and memory hierarchies.
- Proficiency with command-line interfaces and code editors.
Target Audience
- Developers seeking to master multiple GPU programming frameworks and compare their functional capabilities, performance, and compatibility.
- Engineers aiming to write portable and scalable code that runs seamlessly across diverse platforms and hardware devices.
- Programmers interested in exploring the nuances, trade-offs, and optimization challenges inherent in GPU programming.