我们身处异构世界
我们所在的世界本质上是异构的。如此多元的丰富性和细节难以用语言描述。与此同时,广泛不同的实体针对具体任务和环境进行的优化带来了某种程度的复杂性和相互影响。
在计算领域,丰富的异构计算系统有利于程序员选择最佳的硬件架构来执行手边的任务,或者选择恰当的任务来优化使用特定的硬件架构。在解决包含各种不同任务的计算问题时,异构系统在这两方面的灵活性表现得尤为明显。最近,计算机设计社区出现了一股构建异构系统的热潮。市面上正在涌现出一些新型的计算系统,它们由不同类别的架构组成。但这一进程的发展受阻,因为缺乏一个标准化的编程环境来统管通用框架内呈多样化态势的各种资源。
有关OpenCL
OpenCL的发展旨在减轻程序员为异构系统编写应用程序的负担。OpenCL迎合了当前为给定架构上增加处理器核数这一发展趋势。OpenCL框架能够运行在多核CPU、DSP、FPGA、GPU以及异构加速处理单元上。该架构提供了广泛的方法来抽取内存系统和指令流中的并行性和效率。 OpenCL框架的多样性为设计人员提供了解决问题的方法——如果采用OpenCL规范进行设计,该解决方案的更新便能够与硬件架构的种类增多和发展保持同步。OpenCL标准中抽象和接口允许程序员使应用程序无缝地运行在一个或多个厂商的多种异构设备上。
本书的目标
目前为止,没有一本合适的教材能够帮助程序员和软件工程师利用OpenCL编程标准所具有的能力和灵活性。因此,我们尝试填补空白。为了这个目标,我们不想编写一本语法手册——有大量好的资源,程序员可以从中找开完整、最新的OpenCL语法描述。
本书试图向开发者或学生说明如何利用OpenCL框架来构建有趣且有用的应用。我们通过提供大量实际应用案例来展示该编程标准具有的魅力。
我们希望读者能够拥抱这个新的编程框架,并探究它为异构系统带来的所有好处。我们欢迎对本书提出改进意见,同时也希望本书能够帮助你构建下一个异构应用程序。
致谢
感谢Manju Hegde提议编写本书。Jay Owen负责联系参与编写本书的各方,Morgan Kaufmann出版社的Todd Green负责本项目的管理和进度提醒等。
在技术方面,我们感谢Jay Cornwall认真负责地为本书文字编辑了早期版本,我们感谢Takahiro Harada, Justin Hensley, Budirijanto Purnomo, Frank Swehosky和Dongping Zhang,他们分别为几个章节做出了重要的贡献。尤其是如果没有他们的帮助,本书很难拥有如此多的研究实例。