# 4.1 OpenCL实例

本章会讨论一些简单的OpenCL实例，第3章总结出的一些结论同样适用于这些实例。实例证明，编程的每一步都需要出现在一个完整的OpenCL应用中。对于习惯用C++的同学，我们也会使用C++ Wrapper实现一个实例。我们讨论的这些例子，相较于有更深层次优化的代码，算是一个基线版本。优化相关的内容将在之后的章节中讨论。

表4.1中将我们要使用到的OpenCL特性和具体实例一一对应。同学们可以按照自己的喜好，去关注特定的实例。

每节的末尾，我们都将提供完整的程序代码。另外，实例中使用到的一些功能函数将在本章末尾提供源码，有兴趣的同学可以先看看。这些功能函数包括对OpenCL代码的查错和报错，从文件中读取OpenCL程序(创建程序时需要)，并且直接报告程序编译错误。

表4.1 每个例子所涉及的OpenCL特性

| 例子      | OpenCL特性                |
| ------- | ----------------------- |
| 直方图     | 局部内存，局部原子操作，全局原子操作，内存栅栏 |
| 图像旋转    | 图像，采样器                  |
| 图像卷积    | C++ API，常量内存，图像，采样器     |
| 生产者-消费者 | 通道，多设备                  |
