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 OpenCL and its core concepts.
- Comparing OpenCL with CUDA and SYCL.
- Overview of OpenCL features and architectural design.
- Steps for setting up the development environment.
Getting Started
- Creating a new OpenCL project within Visual Studio Code.
- Exploring the project structure and file organization.
- Compiling and executing the initial program.
- Displaying output results using printf and fprintf functions.
OpenCL API
- The role of the OpenCL API within the host program.
- Querying device information and capabilities via the OpenCL API.
- Creating contexts, command queues, buffers, kernels, and events using the API.
- Enqueuing commands such as read, write, copy, map, unmap, execute, and wait.
- Implementing error and exception handling mechanisms with the OpenCL API.
OpenCL C
- The function of OpenCL C in the device-side program.
- Writing kernels in OpenCL C to execute on the device and process data.
- Working with OpenCL C data types, qualifiers, operators, and expressions.
- Utilizing OpenCL C built-in functions for math, geometry, and relational operations.
- Incorporating OpenCL C extensions and libraries, including atomic operations, image processing, and cl_khr_fp16.
OpenCL Memory Model
- Distinguishing between host and device memory models.
- Utilizing OpenCL memory spaces such as global, local, constant, and private.
- Managing OpenCL memory objects, including buffers, images, and pipes.
- Applying OpenCL memory access modes like read-only, write-only, and read-write.
- Understanding the OpenCL memory consistency model and synchronization mechanisms.
OpenCL Execution Model
- Differentiating between host and device execution paradigms.
- 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.
- Employing OpenCL work-group functions like barrier, work_group_reduce, and work_group_scan.
- Accessing OpenCL device functions such as get_num_groups, get_global_size, and get_local_size.
Debugging
- Identifying common errors and bugs in OpenCL applications.
- Using the Visual Studio Code debugger to inspect variables, set breakpoints, and analyze the call stack.
- 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
- Key factors influencing the performance of OpenCL programs.
- Improving arithmetic throughput using OpenCL vector data types and vectorization techniques.
- Reducing control overhead and increasing locality through OpenCL loop unrolling and tiling.
- Optimizing memory access and bandwidth using OpenCL local memory and related functions.
- Measuring and enhancing execution time and resource utilization through OpenCL profiling and specialized tools.
Requirements
- Proficiency in C/C++ programming and a solid understanding of parallel computing concepts.
- Fundamental knowledge of computer architecture and memory hierarchy.
- Practical experience with command-line interfaces and code editors.
Target Audience
- Developers seeking to master OpenCL for programming heterogeneous devices and exploiting parallelism.
- Engineers aiming to write portable, scalable code that performs consistently across various platforms and devices.
- Programmers interested in exploring the low-level aspects of heterogeneous computing to optimize code performance.