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
- Understanding OpenCL fundamentals
- Comparing OpenCL with CUDA and SYCL
- Overview of OpenCL features and architectural design
- Setting up the Development Environment
Getting Started
- Creating a new OpenCL project using Visual Studio Code
- Exploring the project structure and file organization
- Compiling and executing the program
- Displaying output using printf and fprintf functions
OpenCL API
- Understanding the role of the OpenCL API within the host program
- Using the OpenCL API to query device information and capabilities
- Creating contexts, command queues, buffers, kernels, and events via the OpenCL API
- Enqueueing 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 within the device program
- Writing kernels in OpenCL C that execute on the device and manipulate data
- Utilizing OpenCL C data types, qualifiers, operators, and expressions
- Using OpenCL C built-in functions, including math, geometric, and relational operations
- Leveraging 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
- Utilizing OpenCL memory spaces, including global, local, constant, and private
- Working with OpenCL memory objects such as buffers, images, and pipes
- Applying OpenCL memory access modes like read-only, write-only, and read-write
- Implementing OpenCL memory consistency models 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
- Employing OpenCL work-group functions like 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
- 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
- Understanding factors that impact 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 loop tiling
- Optimizing memory accesses and bandwidth using OpenCL local memory and related functions
- Measuring and improving execution time and resource utilization using OpenCL profiling and specialized tools
Requirements
- A solid understanding of C/C++ language and parallel programming concepts
- Familiarity with computer architecture and memory hierarchy
- Experience with command-line tools and code editors
Target Audience
- Developers seeking to learn how to use OpenCL to program heterogeneous devices 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 to optimize code performance