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
- Definition and scope of OpenCL
- 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 in Visual Studio Code
- Exploring project structure and file organization
- Compiling and executing the program
- Displaying output using printf and fprintf
OpenCL API
- Understanding the role of the OpenCL API in host-side programming
- Querying device information and capabilities via the OpenCL API
- Creating contexts, command queues, buffers, kernels, and events using the OpenCL API
- Enqueueing commands such as read, write, copy, map, unmap, execute, and wait
- Handling errors and exceptions within the OpenCL API
OpenCL C
- Understanding the role of OpenCL C in device-side programming
- Writing kernels to execute on the device and manipulate data using OpenCL C
- Utilizing OpenCL C data types, qualifiers, operators, and expressions
- Employing OpenCL C built-in functions for math, geometry, and relational operations
- Using OpenCL C extensions and libraries, including atomic, image, and cl_khr_fp16
OpenCL Memory Model
- Distinguishing between host and device memory models
- Utilizing OpenCL memory spaces: 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
- Understanding OpenCL memory consistency 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
- Inspecting variables, breakpoints, and call stacks using the Visual Studio Code debugger
- 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 influence OpenCL program performance
- Improving arithmetic throughput using OpenCL vector data types and vectorization
- Reducing control overhead and increasing locality through loop unrolling and tiling
- Optimizing memory access and bandwidth using OpenCL local memory and functions
- Measuring and improving execution time and resource utilization via OpenCL profiling tools
Requirements
- Familiarity with C/C++ language and parallel programming principles
- Fundamental understanding of computer architecture and memory hierarchy
- Proficiency with command-line utilities and code editors
Target Audience
- Developers aiming to utilize OpenCL for programming heterogeneous devices and exploiting parallelism
- Developers seeking to write portable, scalable code capable of running across various platforms and devices
- Programmers interested in exploring the low-level aspects of heterogeneous programming to optimize code performance