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
- What is OpenCL?
- 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
- Using the OpenCL API to query device information and capabilities
- Using the OpenCL API to create contexts, command queues, buffers, kernels, and events
- Using the OpenCL API to enqueue commands such as read, write, copy, map, unmap, execute, and wait
- Handling errors and exceptions using the OpenCL API
OpenCL C
- Understanding the role of OpenCL C in the device program
- Writing kernels that execute on the device and manipulate data using OpenCL C
- Using OpenCL C data types, qualifiers, operators, and expressions
- Utilizing OpenCL C built-in functions, such as math, geometric, and relational functions
- Leveraging OpenCL C extensions and libraries, such as atomic operations, image processing, and cl_khr_fp16
OpenCL Memory Model
- Understanding the differences between host and device memory models
- Using OpenCL memory spaces, such as global, local, constant, and private
- Working with OpenCL memory objects, including buffers, images, and pipes
- Utilizing OpenCL memory access modes such as read-only, write-only, and read-write
- Applying the OpenCL memory consistency model 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 such as get_global_id, get_local_id, and get_group_id
- Utilizing OpenCL work-group functions like barrier, work_group_reduce, and work_group_scan
- Using OpenCL device functions such as get_num_groups, get_global_size, and get_local_size
Debugging
- Identifying common errors and bugs in OpenCL programs
- Using the Visual Studio Code debugger to inspect variables, set breakpoints, and view 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
- Understanding factors that impact OpenCL program performance
- Improving arithmetic throughput using OpenCL vector data types and vectorization techniques
- Reducing control overhead and increasing locality using loop unrolling and loop tiling techniques
- Optimizing memory accesses and bandwidth using OpenCL local memory and related functions
- Measuring and improving execution time and resource utilization using OpenCL profiling and tools
Summary and Next Steps
Requirements
- Proficiency in the C/C++ language and concepts of parallel programming
- Foundational knowledge of computer architecture and memory hierarchy
- Experience with command-line tools and code editors
Audience
- Developers looking to learn how to program heterogeneous devices using OpenCL and exploit their parallelism
- Developers aiming to write portable and scalable code capable of running on diverse platforms and devices
- Programmers interested in exploring the low-level aspects of heterogeneous programming and optimizing code performance
28 Hours
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 6400 € + VAT*
Contact us for an exact quote and to hear our latest promotions