4.1 OpenCL实例

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

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

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

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

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