1.1 异构计算介绍

异构计算包括串行处理和并行处理。在异构计算环境下,应用程序都由(设置在最佳的设备上的)任务组成。这样,系统中的程序就能并行或并发的执行,从而提高性能和节省功耗。开放计算语言(OpenCL)是一种适合在支持异构开发环境中进行编程的语言。为了帮助读者理解OpenCL2.0中的新特性,我们将从介绍异构和并行计算开始。之后,我们会给OpenCL以合理的定位,基于该定位来讨论OpenCL中的异构编程模型。

当前,异构计算的环境越来越多元化,为了尽可能发挥多核微处理器、中央处理单元群(CPUs)、数字型号处理器(DSP)、可擦写配置的硬件(FPGA,可编程门阵列),还有图形处理单元(GPUs)。在目前这些异构环境下,需要有能够兼容处理这些异构环境的架构,这样的架构也需要将软件任务映射到异构设备上。不过,这种的架构会给当前的编程体系带来许多挑战。

异构应用通常会对负载行为进行混合,从控制密集型(比如,搜索、排序和分析)到数据密集型(比如,图像处理、模拟和建模,以及数据挖掘)。这些任务也具有计算密集型(比如,迭代函数、数值方法和金融建模)的特点,这种应用的整体吞吐量对底层硬件的计算能力很大。每种负载类型通常都会以最高效的执行方式,执行在指定的硬件架构上。不存在一种设备能够很好的执行所有类型的负载。例如,控制密集型应用在超标量CPU上运行最为合适,CPU的分支预测机制很适合执行这样的应用。不过,数据密集型应用执行在支持向量处理架构的处理器下就会更快的运行。其能同时对多个数据项进行操作,并且这种操作是并行的。