1 / 13
文档名称:

并行编程入门.doc

格式:doc   大小:904KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

并行编程入门.doc

上传人:daoqqzhuanyongyou2 2018/11/21 文件大小:904 KB

下载得到文件列表

并行编程入门.doc

相关文档

文档介绍

文档介绍:第1章
并行编程入门
引言
当前计算环境变得越来越多样化,需要充分利用包括多核微处理器、CPU、数字信号处理器(DSP)、可重构硬件(FPGA)和图形处理单元(GPU)的能力。面对如此大的异构性,在众多硬件体系架构上开发高效的软件,给编程社区带来了诸多挑战。
通常,应用包含了大量工作负载行为,从控制密集型(搜索、排序和分析等)到数据密集型(图像处理、模拟和建模,数据挖掘等)。此外,还包括计算密集型应用(迭代方法、数值方法和金融建模等),这类应用的吞吐量严重依赖于底层硬件的计算效率。每一类工作负载一般都能在某种特定类型的硬件体系架构上获得最高的运行效率,但是没有一种硬件架构能够让所有类别的工作负载都取得最优的运行效率。而且,大部分应用都包含多种工作负载的特征。例如,控制密集型应用在超标量CPU上运行得更快,因为CPU使用大量的芯片面积来进行分支预测。数据密集型应用在向量架构上运行更快,同样的操作可以在多个数据元素上并行执行。
OpenCL
开放计算语言(puting Language,OpenCL)是一个由非盈利性技术联盟Khronos Group进行管理的异构编程框架。OpenCL框架用于开发可以在各种设备上运行的应用程序。OpenCL支持多种层次的并行,可以高效映射到同构或异构的体系结构上,比如单个或者多个CPU、GPU和其他类型的设备等。OpenCL提供了一个系统中设备端语言和主机端控制层两方面的定义。设备端语言可以高效映射到众多的内存系统架构上。主机端语言的目标是以较低开销来高效管理复杂的并发程序。两者共同为开发人员提供了一种从算法设计高效过渡到实现的途径。
OpenCL
提供了基于任务和基于数据这两种并行计算方式。当前支持的CPU包括x86,ARM和PowerPC,同时支持AMD (Accelerated Parallel Processing SDK)和NVIDIA的显卡。支持OpenCL的硬件平台在迅速增长,众多硬件平台厂商已经采用和支持或者计划在其平台上支持OpenCL。从嵌入式厂商(ARM和Imagination Technologies),到HPC厂商(AMD,Intel,NVIDIA和IBM),其市场范围相当广阔。OpenCL支持的体系架构众多,包括多核CPU,GPU之类的吞吐量和向量处理器,FPGA之类的细粒度并行设备。
最重要的是,OpenCL是跨平台的,得到工业界广泛的支持,所以它是适合开发人员学****和使用的极佳编程模型。而且,可以确信OpenCL在很多年内会继续持续发展,不断提高可用性和扩大适用范围。
本书目标
本书是第一本适合课堂教学的介绍OpenCL编程的书籍。本书的内容组织符合在当前系统架构上教授OpenCL并行编程的要求,包括CPU和GPU应用示例,以及集成两者的加速处理器(Accelerated Processing Unit,APU)。本书的另一个主要目标为程序员提供一个指南,用于在并行系统上设计开发良好的OpenCL程序。本书引导程序员熟悉OpenCL编程环境提供的多种抽象和功能。应用实例给读者提供了许多简单的背景介绍和复杂的优化技术,提出了进一步开发的建议和目标。此外,本书也介绍了性能剖析和调试等不可缺少的工具,使读者不至于在开发过程中迷失方向。
本书有一套用于教学的幻灯片和编程范例等补充材料,以方便OpenCL教师使用。详情请访问/。
并行思维
大部分应用最初编写程序时都是为了在单处理器上运行。在高性能计算领域,有许多计算资源时,采用了很多经典的方法以加速计算。通常,标准的方法包括“分治法”和“散列-收集法”,程序员可以通过这些策略有效地利用高性能计算系统上的并行资源。
Vector B

(A)简单排序;(B)向量点乘
“分治法”是将一个问题迭代的划分成子问题,直到子问题可以在当前计算资源上较好地求解。“散列-收集法”是将一些输入数据的子集分配给每一个并行计算资源,之后再收集它们的计算结果,生成最终的结果数据。任务的划分像从前一样基于各个并行资源的计算能力,。
随着现代并行处理器上并行度的增长和异构性的出现,编程越来越成为一项挑战。在当前CMOS技术的功耗和散热限制下,微处理器厂商发现很难通过提高主频来提升设备的性能。他们换而采用在一个芯片上放置多个处理器的方法。由此,如何从一个应用程序中提取并行性的问题留给程序员解决。程序员必须分解应用的底层算法,将它们有效地映射到多样化的目标硬件平台上。
在过去的5年中,并行计算设备在数量和处理能力上都取得了长足进展。GPU也开始用来进行通用计算,以非常低的成本提供了较高的处理能力。受实时三维图像渲染这种高度数据并行问题的驱动,