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
- Introduction to OpenCL.
- Comparing OpenCL with CUDA and SYCL.
- Overview of OpenCL features and architecture.
- Setting up the development environment.
Getting Started
- Creating a new OpenCL project with Visual Studio Code.
- Exploring the project structure and files.
- Compiling and executing the program.
- Displaying output using printf and fprintf.
OpenCL API
- Understanding the role of the OpenCL API in host programs.
- Querying device information and capabilities via the OpenCL API.
- Creating contexts, command queues, buffers, kernels, and events using the OpenCL API.
- Enqueuing commands such as read, write, copy, map, unmap, execute, and wait.
- Handling errors and exceptions with the OpenCL API.
OpenCL C
- Understanding the role of OpenCL C in device programs.
- Writing kernels in OpenCL C to execute on the device and manipulate data.
- Using OpenCL C data types, qualifiers, operators, and expressions.
- Utilizing OpenCL C built-in functions, including math, geometric, and relational operations.
- Applying OpenCL C extensions and libraries, such as atomic operations, image handling, and cl_khr_fp16.
OpenCL Memory Model
- Distinguishing between host and device memory models.
- Working with OpenCL memory spaces: global, local, constant, and private.
- Managing OpenCL memory objects, including buffers, images, and pipes.
- Applying OpenCL memory access modes, such as read-only, write-only, and read-write.
- Implementing the OpenCL memory consistency model and synchronization mechanisms.
OpenCL Execution Model
- Differentiating 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.
- Utilizing OpenCL work-group functions, including barrier, work_group_reduce, and work_group_scan.
- Employing 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 the call stack using the Visual Studio Code debugger.
- Debugging and analyzing OpenCL programs on AMD devices with CodeXL.
- Debugging and analyzing OpenCL programs on Intel devices using Intel VTune.
- Debugging and analyzing OpenCL programs on NVIDIA devices with NVIDIA Nsight.
Optimization
- Understanding the factors impacting OpenCL program performance.
- Improving arithmetic throughput with OpenCL vector data types and vectorization techniques.
- Reducing control overhead and increasing locality using loop unrolling and loop tiling.
- Optimizing memory access and bandwidth with OpenCL local memory and associated functions.
- Measuring and improving execution time and resource utilization through OpenCL profiling and dedicated tools.
Summary and Next Steps
Requirements
- Proficiency in the C/C++ language and a solid understanding of parallel programming concepts.
- Fundamental knowledge of computer architecture and memory hierarchy.
- Familiarity with command-line tools and code editors.
Target Audience
- Developers looking to master OpenCL for programming heterogeneous devices and exploiting their parallelism.
- Developers aiming to write portable and scalable code capable of running across different platforms and devices.
- Programmers interested in exploring the low-level aspects of heterogeneous programming to enhance code performance.
28 Hours