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
- Overview of OpenCL
- Comparing OpenCL, CUDA, and SYCL
- Summary of OpenCL features and architectural design
- Configuring the Development Environment
Getting Started
- Initiating a new OpenCL project in Visual Studio Code
- Examining the project structure and associated files
- Compiling and executing the program
- Displaying output via printf and fprintf
OpenCL API
- The role of the OpenCL API within host programs
- Querying device information and capabilities via the OpenCL API
- Instantiating contexts, command queues, buffers, kernels, and events with the OpenCL API
- Enqueueing commands such as read, write, copy, map, unmap, execute, and wait
- Managing errors and exceptions using the OpenCL API
OpenCL C
- The function of OpenCL C in device-side programming
- Authoring kernels in OpenCL C for device execution and data manipulation
- Working with OpenCL C data types, qualifiers, operators, and expressions
- Employing 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
- Distinguishing between host and device memory models
- Utilizing OpenCL memory spaces: global, local, constant, and private
- Managing OpenCL memory objects like buffers, images, and pipes
- Applying OpenCL memory access modes, including read-only, write-only, and read-write
- Implementing OpenCL memory consistency models and synchronization mechanisms
OpenCL Execution Model
- Contrasting host and device execution models
- Defining parallelism using OpenCL work-items, work-groups, and ND-ranges
- Using OpenCL work-item functions like get_global_id, get_local_id, and get_group_id
- Leveraging OpenCL work-group functions such as barrier, work_group_reduce, and work_group_scan
- Applying OpenCL device functions, including get_num_groups, get_global_size, and get_local_size
Debugging
- Identifying common errors and bugs in OpenCL applications
- Inspecting variables, breakpoints, and call stacks with 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 influencing OpenCL program performance
- Enhancing arithmetic throughput using OpenCL vector data types and vectorization techniques
- Reducing control overhead and improving locality via loop unrolling and loop tiling
- Optimizing memory access and bandwidth using local memory and associated functions
- Measuring and improving execution time and resource utilization through OpenCL profiling tools
Requirements
- Familiarity with C/C++ languages and fundamental parallel programming concepts
- Basic understanding of computer architecture and memory hierarchies
- Practical experience with command-line tools and code editors
Target Audience
- Developers aiming to master OpenCL for programming heterogeneous devices and utilizing their parallel power
- Developers seeking to write portable, scalable code compatible with diverse platforms and devices
- Programmers interested in exploring the low-level intricacies of heterogeneous programming to optimize code performance