11.1 简要介绍现状

高级编程语言和领域专用语言,通常都能从异构计算中获益。并且,编译器作者们不需要去处理这些供应商提供设备间的错综复杂的关系,以及为特定平台生成对应的代码。另外,OpenCL本身提供目标编译器,并且通过编译器编译可移植的代码,编译器的指定则由运行时管理。通过指定OpenCL目标平台,编译器作者会聚焦在实现更加重要和高级的问题上。这样只专注于对应的平台,会异构计算(高级编程语言)提升其能力。

本章我们将使用C++ AMP(Accelerated Massive Parallelism),作为C++的并行编程扩展。本章中用一个例子来展示在高阶编程模型下,OpenCL代码所产生代码的效率。C++语言有很多高级和对编程者友好的特性,不过这些特性在OpenCL中消失了。这些高级的特征在软件工程实践中也被支持,并且这些特征被证明能提高开发者的效率。那么编译器作者的任务就是将这些特性通过OpenCL构建,而不会有太多的性能损失。我们在代码翻译过程中,目前使用了一些很重要的实现技巧;对于编译器作者来说,会将OpenCL的编程模型与其他编程模型相对应,这对于实现编译器来说是十分重要的。

我们将从一个简单的C++ AMP例子开始,一个简单向量相加的例子,并且运行这个字。通过这个例子,我们会将一些C++ AMP特性映射到OpenCL上(之后的章节会介绍)。实际上,其实现包含一个编译器,一系列头文件,还有一个运行时库,这个实现是作为一个开源项目,可以被任何人访问。(该库已经转移到这里)