HiPEAC 2011

Tutorial – Topics in Heterogeneous Programming with OpenCL

OpenCL (TM)

To be held in conjunction with the

6th International Conference on High Performance and Embedded Architectures and Compilers (HiPEAC)

Heraklion, Crete, Greece, Saturday January 22nd, 2011

ATI Stream


Benedict R. Gaster, Advanced Micro Devices

Lee Howes, Advanced Micro Devices

Ofer Rosenberg, Intel Corp.

Tim Mattson, Intel Corp.

Anton Lokhmotov, ARM

Tutorial session

Saturday January 22nd 2011, 09.00AM – 04.30PM









OpenCL is a standard for programming heterogeneous computers built
from CPUs, GPUs, and other processors. It includes a framework to define
the platform in terms of a host (e.g. a CPU) and one of more compute
devices (e.g. a GPU) plus a C-based programming language for writing
programs for the compute devices. Using OpenCL, a programmer can write
task-based and data-parallel programs that use all the resources of the
heterogeneous computer.

In this tutorial, we will explore OpenCL in depth. The first half of
the day is a “programmer’s introduction”, covering the ideas behind
OpenCL and showing how these are translated into source code. After a
brief recap of the key features in OpenCL, introduced in the morning
session, the remainder of the day focuses on a series of case studies
showing how to use OpenCL in practice. The focus will be on source code,
showing not just what OpenCL can do, but how you can implement similar
functionality in your own programs.

It is assumed that attendees have either worked in C or C++.

Content Level

40% introduction, 30% intermediate, 30% advanced


  • Heterogeneous computing and the origins of OpenCL
  • OpenCL overview
  • Exploring the spec through a series of examples
    • Vector addition: the basic platform layer
    • Sorting: writing simple kernels
  • Break
    • Optimizing sort: work-groups and the memory model
  • A survey of the rest of OpenCL
    • Runtime layer
    • Event model
    • C++ Wrapper API
  • Lunch
  • OpenCL summary and recap
  • Examples
    • Scan operators
    • Parallel algorithms and containers
    • Physics for Games
  • Break
    • Media/Image Programming
    • Software Rendering

Slides as presented