大规模并行处理器编程实战
2010-9
清华大学出版社
科克(David B. Kirk)
211
293000
陈曙晖,熊淑华
无
大众市场上的计算系统将多核CPU和众核GPU两者结合起来,在笔记本电脑上的运算速度可以达到万亿次,在集群系统中的运算速度可以达到千万亿次。具有这种计算能力以后,我们有望很快将计算实验推广到科学、工程、健康和商业等领域。通过使用计算实验,很多人可能会在他们的学科领域中有所突破,这种规模是可控的、可观测的但规模水平又是空前的。本书提供了实现这种构想的关键途径:教会数百万的本科生和研究生并行编程,使计算思维能力和并行编程技能像数学运算那样普及。 从这门课的前身ECE498AL开始。在2006年的圣诞假期间,我们在疯狂地致力于幻灯片的讲座和实验作业。David正在开发一套系统,试着把早期的Ge Force 8800 GTX GPU卡经客轮拉到伊利诺伊州,但直到开学后几个星期才到货。显然也是在开学后的几个星期以后,CUDA才开始公开。我们必须制定出合法的合同,以便在最初的几个星期内就能依照NDA保密协议为学生开设这门课程。我们也需要公开,这样学生才会来报名,直到预报告阶段之后我们才会公开这个课程。 2007年1月16日,我们上了第一堂课。所有事情才算是安顿下来。David每周都要乘公交车来Urbana上课。我们招收了52个学生,比我们要招收的人数还多两个。前10次课,我们大都要制作幻灯片。Wen-mei的研究生John Stratton,欣然主动地要求担任教学助理,并帮我们布置实验室。所有的学生都签了NDA,因此在CUDA公开前,我们可以继续上前几次课。我们把课堂的内容记录下来,但直到2月份才把它发布到网上。我们有物理、天文、化学、电气工程、机械工程,以及计算机科学和计算机工程专业的研究生。教室里洋溢的热情使我们都觉得这一切都是值得的。
本书介绍了学生和专业人员都适合的并行编程与GPU体系结构的基本概念,详细剖析了编写并行程序所需的各种技术,用案例研究说明了并行程序设计的整个开发过程,即从计算机思想开始,直到最终实现高效可行的并行程序。
科克(David B. Kirk),博士:美国国家工程院院士,NVIDIA公司首席科学家,拥有麻省珲工学院的机械工程学学士和硕十学位,加州理工学院的计算机科学博士学位。Kirk博士是50项与图形芯片设计相关的专利和专利申请的发明者,发表了50多篇关于图形处理技术的论文,是可视化计算技术方面的权威。 胡文美(Wen-mei W. Hwu),教授:拥有美国加州大学伯克利分校计算机科学博士学位,担任伊利诺伊大学厄巴纳一香槟分校协调科学实验室的电气和计算机工程主席,领导IMPACT研究中心并负责Open IMPACT项目,该项目为计算机行业提供编译器和计算机架构新技术。Hwu教授还担任通用并行计算研究中心联合主任,是全球首个ACUDA卓越中心首席研究员。
第1章 引言 1.1 GPU与并行计算机 1.2 现代GPU的体系结构 1.3 为什么需要更高的速度和并行化 1.4 并行编程语言与模型 1.5 综合目标 1.6 本书的组织结构第2章 GPU计算的发展历程 2.1 图形流水线的发展 2.1.1 固定功能的图形流水线时代 2.1.2 可编程实时图形流水线的发展 2.1.3 图形与计算结合的处理器 2.1.4 GPU:一个中间步骤 2.2 GPUU计算 2.2.1 可扩展的GPU 2.2.2 发展近况 2.3 未来发展趋势第3章 CUDA简介 3.1 数据并行性 3.2 CUUDA的程序结构 3.3 矩阵乘法示例 3.4 设备存储器与数据传输 3.5 kernel函数与线程 3.6 小结 3.6.1 函数声明 3.6.2 启动kernel函数 3.6.3 预定义变量 3.6.4 运行时API第4章 CUDA线程 4.1 CUDA线程组织结构 4.2 使用blockIdx和threadIdx 4.3 同步与透明可扩展性 4.4 线程分配 4.5 线程调度和容许延时 4.6 小结 4.7 习题第5章 CUDA存储器模型 5.1 存储器访问效率的重要性 5.2 CUUDA设备存储器的类型 5.3 减少全局存储器流量的策略 5.4 存储器——限制并行性的一个因素 5.5 小结 5.6 习题第6章 性能优化 6.1 更多关于线程执行的问题 6.2 全局存储器的带宽 6.3 SM资源的动态划分 6.4 数据预取 6.5 指令混合 6.6 线程粒度 6.7 可度量的性能和小结 6.8 习题第7章 浮点运算 7.1 浮点格式 7.1.1 M的规范化表示 7.1.2 E的余码表示 7.2 能表示的数 7.3 特殊的位模式与精度 7.4 算术运算的准确度和舍入 7.5 算法的优化 7.6 小结 7.7 习题第8章 应用案例研究:高级MRI重构 8.1 应用背景 8.2 迭代重构 8.3 计算FHd 8.4 最终评估 8.5 习题第9章 应用案例研究:分子可视化和分析 9.1 应用背景 9.2 kernel函数简单的实现方案 9.3 指令执行效率 9.4 存储器合并 9.5 附加性能比较 9.6 采用多GPU 9.7 习题第10章 并行编程和计算思想 10.1 并行编程的目标 10.2 问题分解 10.3 算法选择 10.4 计算思想 10.5 习题第11章 OpenCL简介 11.1 背景 11.2 数据并行性模型 11.3 设备的体系结构 11.4 kernel函数 11.5 设备管理和启动kernel 11.6 OpenCL中的静电势图谱 11.7 小结 11.8 习题第12章 结论与展望 12.1 重申目标 12.2 存储器体系结构的演变 12.2.1 大型虚拟和物理地址空间 12.2.2 统一的设备存储空间 12.2.3 可配置的缓存和暂时存储器 12.2.4 提高原子操作的速度 12.2.5 提高全局存储器的访问速度 12.3 kernel函数执行控制过程的演变 12.3.1 kernel函数内部的函数调用 12.3.2 kernel函数中的异常处理 12.3.3 多个kernel函数的同步执行 12.3.4 可中断的kernel函数 12.4 内核的性能 12.4.1 双精度的速度 12.4.2 提高控制流的效率 12.5 编程环境 12.6 美好前景附录A 矩阵乘法主机版的源代码附录B GPU的计算能力
本书第二个目标是讲解如何编写功能正确的、可靠的并行程序,这是并行计算中的技巧问题。过去曾从事过并行系统方面工作的开发人员会知道,仅保证初始性能是远远不够的。我们面临的挑战是如何在可以调试代码和支持用户的情况下实现高性能。CUDA编程模型关注的焦点是数据并行性,我们将帮助读者在他们的应用程序中实现高性能和高可靠性。 本书第三个目标是通过探讨一些方法来使目前的并行编程实现可扩展性,能适应未来硬件更新换代的要求。对于未来的计算机,程序并行化程度会越来越高,程序运行速度也会比现在的计算机更快。我们想帮助读者掌握并行编程,以便随着新一代计算机的出现,程序的性能有所提升。 读者要想达到上述目标,需要掌握相当多的技术知识,因此本书主要讨论并行编程的设计原理和模式。我们不能保证本书能覆盖所有相关知识,但是我们从中选取最有用也是经得起考验的技术进行深入研究。为了补充读者的知识和经验,我们将推荐一个相关参考文献列表。接下来我们准备对本书的其余部分做一个简单的概述。
“对于希望学习GPU并行编程的读者,《大规模并行处理器编程实战》简直是天赐之物。书中介绍了CUDA,一种类C的数据并行语言,介绍了Tesla,当前的NVIDIA GPU显示核心的体系结构。除了解释语言和体系结构,《大规模并行处理器编程实战》还详细说明了可以在异构CPU-GPU硬件上平稳运行的数据并行问题的类型……《大规模并行处理器编程实战》是一本重要的并行计算参考文献。” ——David Patterson(美国国家工程院院土,加州大学伯克利分校并行计算研究实验室主任兼计算机科学系Pardee教授,IEEE与ACM会员)大力推荐
无
学习cuda并行计算非常好的一本书
学习cuda的好书,正在学习。
如题,不过还是不错的,没几天就卖完了,庆幸自己买的早,吼吼~~~
并行编程的经典书籍,值得购买~~
作为CUDA编程的参考书还是不错的,不过有些内容比较老了,需要更新了。
适合初中级读者。
比较喜欢书的整体结构和安排,比较注重并行处理思想的贯穿。
在每章节都有一些核心思想的深入,比如延迟隐藏技术,内存使用方面 有详细的讲解。
不足之处是设计内容比较广泛,因此基本每章的内存都是点到为止,没有具体的深入分析。
后面的几个实例还是挺好的,概括了性能优化里最常用也是最有效的一些方法。
推荐有空翻翻。