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?
- Comparison: OpenCL vs CUDA vs SYCL
- Overview of OpenCL features and architecture
- Setting up the Development Environment
Getting Started
- Creating a new OpenCL project using Visual Studio Code
- Exploring the project structure and files
- Compiling and running the program
- Displaying output using printf and fprintf
OpenCL API
- Understanding the role of the OpenCL API in the host program
- Querying device information and capabilities using the OpenCL API
- Creating contexts, command queues, buffers, kernels, and events with the OpenCL API
- Enqueuing commands such as read, write, copy, map, unmap, execute, and wait via the OpenCL API
- Handling errors and exceptions using the OpenCL API
OpenCL C
- Understanding the role of OpenCL C in the device program
- Writing kernels in OpenCL C for device execution and data manipulation
- Using OpenCL C data types, qualifiers, operators, and expressions
- Applying OpenCL C built-in functions, including math, geometric, and relational operations
- Utilizing OpenCL C extensions and libraries, such as atomic, image, and cl_khr_fp16
OpenCL Memory Model
- Understanding the differences between host and device memory models
- Working with OpenCL memory spaces: global, local, constant, and private
- Using OpenCL memory objects: buffers, images, and pipes
- Applying OpenCL memory access modes: read-only, write-only, read-write, and more
- Implementing OpenCL memory consistency models and synchronization mechanisms
OpenCL Execution Model
- Understanding the differences between host and device execution models
- Defining parallelism using OpenCL work-items, work-groups, and ND-ranges
- Using OpenCL work-item functions: get_global_id, get_local_id, get_group_id, and others
- Applying OpenCL work-group functions: barrier, work_group_reduce, work_group_scan, and others
- Using OpenCL device functions: get_num_groups, get_global_size, get_local_size, and others
Debugging
- Identifying common errors and bugs in OpenCL programs
- Using the Visual Studio Code debugger to inspect variables, set breakpoints, and examine 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
- Identifying factors that impact 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 local memory functions
- Measuring and improving execution time and resource utilization using OpenCL profiling and profiling tools
Requirements
- A solid understanding of C/C++ programming and parallel computing concepts.
- Basic knowledge of computer architecture and memory hierarchy.
- Proficiency with command-line interfaces and code editors.
Target Audience
- Developers looking to learn OpenCL for programming heterogeneous devices and exploiting their parallelism.
- Developers aiming to write portable and scalable code compatible with various platforms and devices.
- Programmers interested in exploring the low-level aspects of heterogeneous programming to optimize code performance.
Custom Corporate Training
Training solutions designed exclusively for businesses.
- Customized Content: We adapt the syllabus and practical exercises to the real goals and needs of your project.
- Flexible Schedule: Dates and times adapted to your team's agenda.
- Format: Online (live), In-company (at your offices), or Hybrid.
Price per private group, online live training, starting from 5200 € + VAT*
Contact us for an exact quote and to hear our latest promotions