好书推荐 好书速递 排行榜 读书文摘

GPU高性能编程CUDA实战

GPU高性能编程CUDA实战
作者:Jason Sanders / Edward Kandrot
译者:聂雪军
出版社:机械工业出版社
出版年:2011-03
ISBN:9787111326793
行业:计算机
浏览数:4

内容简介

UDA是一种专门为提高并行程序开发效率而设计的计算架构。在构建高性能应用程序时,CUDA架构能充分发挥GPU的强大计算功能。《GPU高性能编程CUDA实战》首先介绍了CUDA架构的应用背景,并给出了如何配置CUDA C的开发环境。然后通过矢量求和运算、矢量点积运算、光线跟踪、热传导模拟等示例详细介绍了CUDA C的基本语法和使用模式。通过学习本书,读者可以清楚了解CUDA C中每个功能的适用场合,并编写出高性能的CUDA软件。

《GPU高性能编程CUDA实战》适合具备C或者C++知识的应用程序开发人员、数值计算库开发人员等,也可以作为学习并行计算的学生和教师的教辅。

......(更多)

作者简介

Jason Sanders是NVIDIA公司CUDA平台小组的高级软件工程师。他在NVIDIA的工作包括帮助开发早期的CUDA系统软件,并参与OpenCL 1.0规范的制定,该规范是一个用于异构计算的行业标准。Jason在加州大学伯克利分校获得计算机科学硕士学位,他发表了关于GPU计算的研究论文。此外,他还获得了普林斯顿大学电子工程专业学士学位。在加入NVIDIA公司之前,他曾在ATI技术公司、Apple公司以及Novell公司工作过。

Edward Kandrot是NVIDIA公司CUDA算法小组的高级软件工程师。他在代码优化和提升性能等方面拥有20余年的工作经验,参与过Photoshop和Mozilla等项目。Kandrot曾经在Adobe公司、Microsoft公司工作过,他还是许多公司的咨询师,包括Apple公司和Autodesk公司。

......(更多)

目录

译者序

前言

致谢

作者简介

第1章 为什么需要CUDA 1

1.1 本章目标 2

1.2 并行处理的历史 2

1.3 GPU计算的崛起 3

1.4 CUDA 5

1.5 CUDA的应用 6

1.6 本章小结 8

第2章 入门 9

2.1 本章目标 10

2.2 开发环境 10

2.3 本章小结 14

第3章 CUDA C简介 15

3.1 本章目标 16

3.2 第一个程序 16

3.3 查询设备 20

3.4 设备属性的使用 23

3.5 本章小结 24

第4章 CUDA C并行编程 26

4.1 本章目标 27

4.2 CUDA并行编程 27

4.3 本章小结 41

第5章 线程协作 42

5.1 本章目标 43

5.2 并行线程块的分解 43

5.3 共享内存和同步 54

5.4 本章小结 68

第6章 常量内存与事件 69

6.1 本章目标 70

6.2 常量内存 70

6.3 使用事件来测量性能 78

6.4 本章小结 83

第7章 纹理内存 84

7.1 本章目标 85

7.2 纹理内存简介 85

7.3 热传导模拟 86

7.4 本章小结 101

第8章 图形互操作性 102

8.1 本章目标 103

8.2 图形互操作 103

8.3 基于图形互操作性的GPU波纹示例 108

8.4 基于图形互操作性的热传导 113

8.5 DirectX互操作性 118

8.6 本章小结 118

第9章 原子性 119

9.1 本章目标 120

9.2 计算功能集 120

9.3 原子操作简介 122

9.4 计算直方图 124

9.5 本章小结 133

第10章 流 134

10.1 本章目标 135

10.2 页锁定主机内存 135

10.3 CUDA流 139

10.4 使用单个CUDA流 140

10.5 使用多个CUDA流 144

10.6 GPU的工作调度机制 149

10.7 高效地使用多个CUDA流 151

10.8 本章小结 152

第11章 多GPU系统上的CUDA C 154

11.1 本章目标 155

11.2 零拷贝主机内存 155

11.3 使用多个GPU 162

11.4 可移动的固定内存 166

11.5 本章小结 170

第12章 后记 171

12.1 本章目标 172

12.2 CUDA工具 172

12.3 参考资料 176

12.4 代码资源 178

12.5 本章小结 179

附录 高级原子操作 180

......(更多)

读书文摘

CUDA C编译器对共享内存中的变量与普通变量将分别采取不同的处理方式。对于在GPU上启动的每个线程块,CUDA C编译器都将创建该变量的一个副本。线程块中的每个线程都共享这块内存,但线程却无法看到也不能修改其他线程块的变量副本。这就实现了一种非常好的方式,使得一个线程块中的多个线程能够在计算上进行通信和协作。

与从全局内存中读取数据相比,从常量内存中读取相同的数据可以节约内存带宽,原因有两个: 1.对常量内存的单词读操作可以广播到其他的邻近线程,这将节约15次读取操作; 2.常量内存的数据将缓存起来,因此对相同地址的连续读操作将不会产生额外的内存通信量。

......(更多)

猜你喜欢

点击查看