logo资料库

amd中文opencl教程.pdf

第1页 / 共100页
第2页 / 共100页
第3页 / 共100页
第4页 / 共100页
第5页 / 共100页
第6页 / 共100页
第7页 / 共100页
第8页 / 共100页
资料共100页,剩余部分请下载后查看
OpenCL内存管理模块
第四类为几何计算类函数
序言 过去二十年间,计算机芯片设计、制造技术不断创新,以x86为代表的微处理器性能以令人目眩 的速度不断提升。2000年之后,高性能微处理器逐渐以多核为发展方向。这是一个微妙的变化,暗示 着并行化成为提高性能的主要手段。 作为专用的图形协处理器,GPU的历史相比CPU短得多,但其晶体管数量增长和性能提升曲线 比CPU还要陡峭。从单位面积和单位功耗的角度衡量,现代GPU的计算能力已经大大超过CPU。这主 要得益于GPU的并行化本质:GPU芯片中有几百甚至更多数量的物理计算单元。 如今,市场上随处可以买到高性能的CPU和GPU,两者的并行处理能力足以构建一个桌面超级计 算机,前提是如何把芯片中的计算能力释放出来。并行化的核心问题是软件。由于GPU在指令集上和 x86处理器不兼容,这个问题显得尤为突出。 为了发挥GPU强大的计算能力,学术界开展了十余年的研究工作,尝试在GPU上实现非图形算 法。这些工作被统称为GPGPU。早期需要把其他应用中的算法映射到图形算法,再使用DirectX或者 OpenGL这样的图形编程接口来实现代码。随着时间推移和研发工作不断取得成果,厂商开始为用户 提供更加高效、直观的开发平台,于是有了CAL、Brook+、CUDA等等编程工具。这些方案大大提高了 开发效率,使得更多的开发人员很容易地在GPU平台上编程。另一方面,各个厂商专有解决方案之间 的不兼容性也给用户带来新的困扰。 OpenCL标准的制订和发布是对上述问题的回应,所有重要厂商都承诺为用户提供一个互相开 放、兼容、高效、易用的开发平台。兼得鱼和熊掌。 OpenCL的范畴远比GPU要大,覆盖了多种处理器芯片。从AMD的角度,这是一个跨越CPU和 GPU的编程接口,帮助开发者挖掘出系统所有的计算能力。中国首台千万亿次超级计算机“天河一 号”就是混合CPU和GPU的异构系统。 2008和2009年,AMD在全国高校范围成功举办了两届GPU加速计算竞赛,各种富有创意的算法 在AMD GPU上得到实现和性能验证。从2010年开始,竞赛的开发环境将全面升级到OpenCL。 本书最初是作为公司内外部OpenCL课程的讲义,严肃的程序员会在书中发现许多未充分展开的 论题。就像书名所暗示的,对于读者,我们希望保留简洁和易于上手的印象。 在出版物中每每可以见到并诧异于长长的感谢名单,当我们自己也终于完成了面前这本薄薄的 小册子时,才体会到作者的致谢并非泛泛而谈,确是肺腑之言。
感谢组内同事一年来的辛勤工作并将一路心得汇成此书;感谢AMD美国开发团队的Michael Houston、Benedict Gaster、Micah Villmow、Elizabeth Sanville、Ben Sander等在技术上给予的指导和帮 助;感谢AMD大学项目部的Gloria Le组织GPU竞赛。 感谢AMD美国总部的Rick Bergman、David Wang、Raja Koduri,感谢AMD大中华区的Karen Guo、Owen Liu,感谢AMD大中华区上海研发中心的Allen Lee、Wen-Chung Chen,他(她)们对通用计 算项目的支持使得这一切成为可能。 是为序。 代表超威半导体(上海)有限公司 李约炯 流计算小组 2010年3月
目录 第一章 GPU计算与OpenCL 1.1 什么是OpenCL ........................................................................................................ 1 1.2 为什么要使用OpenCL ........................................................................................... 1 1.2.1 利用OpenCL可以充分利用设备的并行特性 ......................................... 1 1.2.2 OpenCL为程序员提供了平台独立性 ...................................................... 2 1.3 AMD与流计算 ....................................................................................................... 3 1.4 本文的结构 .............................................................................................................. 4 第二章 OpenCL架构 2.1 平台模型PlatformModel ......................................................................................... 5 2.2 内存模型MemoryModel ......................................................................................... 6 2.3 执行模型ExecutionModel ...................................................................................... 7 2.4 编程模型ProgrammingModel ............................................................................... 9 第三章 OpenCL编程 3.1 HelloOpenCL .......................................................................................................... 11 3.2 OpenCL平台初始化 ............................................................................................... 19 3.3 OpenCL运行时模块 .............................................................................................. 21 3.4 OpenCL内存管理模块 .......................................................................................... 27 3.5 OpenCL内核模块 ................................................................................................... 33 3.6 OpenCL的可选扩展 ............................................................................................... 44 第四章 OpenCL优化编程 4.1 AMD GPU架构 ....................................................................................................... 47 4.2 基本优化策略 .......................................................................................................... 47 4.3 数据传输优化 .......................................................................................................... 48
4.4 内存访问的优化技术 ................................................................................................... 49 4.4.1 Global Memory访存......................................................................................... 49 4.4.2 Local Memory访存 ......................................................................................... 52 4.5 计算及控制流优化 ....................................................................................................... 58 4.5.1 控制流................................................................................................................ 58 4.6 其他优化技术 ............................................................................................................... 59 4.6.1 内建数学函数 ................................................................................................... 59 第五章 实例之一: MIR-FHD和MIR-Q的优化 5.1 MIR-FHD和MIR-Q的优化 ....................................................................................... 61 第六章 实例之二: KD-Tree创建算法并行化 6.1 KD-Tree简介 ................................................................................................................. 69 6.2 KD-Tree的创建算法改进 ........................................................................................... 69 6.3 并行创建KD-Tree算法细节 ....................................................................................... 73 6.3.1 求元素的包围集合........................................................................................... 73 6.3.2 元素的空间分割策略 ...................................................................................... 74 6.3.3 KD-Tree节点的内存管理 ............................................................................... 75 6.4 利用OpenCL所能带来的潜在优势 ........................................................................... 75 6.5 本章小结........................................................................................................................ 76 第七章 实例之三: 稀疏矩阵 -向量乘法(SpMV) 7.1 相关的基本概念............................................................................................................ 77 7.1.1 稀疏矩阵 ............................................................................................................ 77 7.1.2 稀疏矩阵的CSR格式 ....................................................................................... 78 7.2 SpMV算法设计和优化 ................................................................................................ 79 7.2.1 SpMV基本算法及其并行化 .......................................................................... 79 7.2.2 基本并行算法的优化 ...................................................................................... 80 7.2.3 进一步改进的方法 .......................................................................................... 82 7.3 本章小结 ........................................................................................................................ 86
附录A AMD OpenCL开发环境 A.1 如何组建AMD流计算环境 .................................................................................. 87 A.2 AMD OpenCL profiler工具 ................................................................................... 88 附录B 常用术语 B.1 中英文术语对照表 ................................................................................................. 91 B.2 名词解释 .................................................................................................................. 92
第一章 GPU计算与OpenCL 第一章 GPU计算与OpenCL 1.1 什么是OpenCL OpenCL全称Open Computing Language即开放计算语言。OpenCL为异构平台提供了一个编写程 序,尤其是并行程序的开放的框架标准。OpenCL所支持的异构平台可由多核CPU、GPU或其他类型 的处理器组成。OpenCL由两部分组成,一是用于编写内核程序(在OpenCL设备上运行的代码) 的语 言,二是定义并控制平台的API。OpenCL提供了基于任务和基于数据两种并行计算机制,它极大地扩 展了GPU 的应用范围,使之不再局限于图形领域。 OpenCL由Khronos Group维护。Khronos Group是一个非盈利性技术组织,维护着多个开放的工 业标准,例如OpenGL和OpenAL。这两个标准分别用于三维图形和计算机音频方面。 OpenCL源程序既可以在多核CPU上也可以在GPU1上编译执行,这大大提高了代码的性能和可 移植性。OpenCL标准由相应的标准委员会制订,委员会的成员来自业界各个重要厂商2。作为用户和 程序员期待已久的东西,OpenCL带来两个重要变化:一个跨厂商的非专有软件解决方案;一个跨平台 的异构框架以同时发挥系统中所有计算单元的能力。 1.2 为什么要使用OpenCL 1.2.1 利用OpenCL可以充分利用设备的并行特性 现代处理器的架构已经将并行计算作为了提高性能的一个最重要途径。高性能 CPU的由于很难 克服提高时钟频率后的散热问题转而使用增加运算核心的方法加速。作为图形渲染专用的处理器, GPU具有高度的并行特性。由于相关应用的需要,GPU也从单一的图形渲染设备转化为作为通用计 算的协处理器。相对于 CPU,GPU有很多自己独有的特点。 • GPU的运算核心数量要远远超过高端 CPU的核心数量。GPU的每个运算核心并没有 CPU的 运算核心工作频率高,但是其总体性能-芯片面积比和性能-功耗比都很高,在处理并行计算的相 关任务中有很大优势。 • GPU是通过大量并行线程之间交织运行隐藏全局访问的延迟,同时GPU还拥有大量的寄存 器、局部存储器及Cache等来提升外部存储的访问性能。 1AMD从HD 5800系列开始全面支持OpenCL标准。 2包括AMD、IBM、Intel、NVidia等厂商都是OpenCL委员会成员。 1
分享到:
收藏