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
- What is OpenCL?
- Comparing OpenCL, CUDA, and SYCL
- Overview of OpenCL features and architecture
- Configuring the Development Environment
Getting Started
- Creating a new OpenCL project in Visual Studio Code
- Exploring the project structure and key files
- Compiling and executing the program
- Displaying output using printf and fprintf
OpenCL API
- Understanding the role of the OpenCL API in host programs
- Using the OpenCL API to query device information and capabilities
- Creating contexts, command queues, buffers, kernels, and events via the OpenCL API
- Enqueuing commands such as read, write, copy, map, unmap, execute, and wait using the OpenCL API
- Handling errors and exceptions with the OpenCL API
OpenCL C
- Understanding the role of OpenCL C in device programs
- Writing kernels that execute on the device and manipulate data using OpenCL C
- Utilizing OpenCL C data types, qualifiers, operators, and expressions
- Using OpenCL C built-in functions for math, geometry, and relations
- Leveraging OpenCL C extensions and libraries, including atomic, image, and cl_khr_fp16
OpenCL Memory Model
- Distinguishing between host and device memory models
- Working with OpenCL memory spaces such as global, local, constant, and private
- Managing OpenCL memory objects like buffers, images, and pipes
- Applying OpenCL memory access modes including read-only, write-only, and read-write
- Implementing the OpenCL memory consistency model and synchronization mechanisms
OpenCL Execution Model
- Distinguishing between host and device execution models
- Defining parallelism using OpenCL work-items, work-groups, and ND-ranges
- Using OpenCL work-item functions such as get_global_id, get_local_id, and get_group_id
- Applying OpenCL work-group functions including barrier, work_group_reduce, and work_group_scan
- Utilizing OpenCL device functions such as get_num_groups, get_global_size, and get_local_size
Debugging
- Identifying common errors and bugs in OpenCL programs
- Inspecting variables, breakpoints, and call stacks using the Visual Studio Code debugger
- Debugging and analyzing OpenCL programs on AMD devices using CodeXL
- Debugging and analyzing OpenCL programs on Intel devices using Intel VTune
- Debugging and analyzing OpenCL programs on NVIDIA devices using NVIDIA Nsight
Optimization
- Understanding factors that influence OpenCL program performance
- Improving arithmetic throughput using OpenCL vector data types and vectorization techniques
- Reducing control overhead and increasing locality through OpenCL loop unrolling and loop tiling
- Optimizing memory access and bandwidth using OpenCL local memory and related functions
- Measuring and improving execution time and resource utilization using OpenCL profiling tools
Requirements
- Familiarity with C/C++ programming languages and parallel computing concepts
- Foundational knowledge of computer architecture and memory hierarchies
- Proficiency with command-line interfaces and code editors
Target Audience
- Developers seeking to master OpenCL for programming heterogeneous devices and harnessing their parallelism
- Developers aiming to write portable, scalable code compatible with various platforms and devices
- Programmers interested in exploring the low-level aspects of heterogeneous computing and optimizing code performance