《多核与GPU编程 工具、方法及实践》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(阿联酋)杰拉西莫斯·巴拉斯(GerassimosBarlas)著;张云泉,贾海鹏,李士刚等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2017
  • ISBN:9787111557685
  • 页数:536 页
图书介绍:本书从并行软件的实现、调试、优化和剖析四个方面,详细讨论了当前主要的并行计算关键技术,主要内容包括:多核和并行程序设计、共享内存编程中的线程与OpenMP、分布式内存编程、GPU编程、Thrust模板库、负载均衡等。本书结合具体的代码和案例分析,揭示了如何使用库或者指令创建多核应用,如何使用MPI开发分布式应用程序,如何使用CUDA开发高性能GPU程序,如何实现负载均衡,以及如何针对目标多核平台进行程序剖析和调试等。本书可供从事高性能计算技术研究的专业人员参考,也可作为高校相关专业的教学用书。

第1章 概述 1

1.1多核计算机时代 1

1.2并行计算机的分类 3

1.3现代计算机概览 4

1.3.1 Cell BE处理器 5

1.3.2 NVIDIA Kepler 6

1.3.3 AMD APU 9

1.3.4从多核到众核:Tilera TILE-Gx8072 和Intel Xeon Phi 10

1.4性能指标 12

1.5并行程序性能的预测与测量 16

1.5.1 Amdahl定律 18

1.5.2 Gustafson-Barsis定律 20

第2章 多核和并行程序设计 23

2.1引言 23

2.2 PCAM方法学 24

2.3分解模式 26

2.3.1任务并行 27

2.3.2分而治之分解 28

2.3.3几何分解 30

2.3.4递归数据分解 32

2.3.5流水线分解 35

2.3.6基于事件的合作分解 39

2.4程序结构模式 39

2.4.1单程序多数据 40

2.4.2多程序多数据 40

2.4.3主/从 41

2.4.4 map-reduce 41

2.4.5 fork/join 42

2.4.6循环并行 44

2.5匹配分解模式和程序结构模式 44

第3章 共享内存编程:线程 46

3.1引言 46

3.2线程 48

3.2.1线程的定义 48

3.2.2线程的作用 49

3.2.3线程的生成和初始化 49

3.2.4在线程间共享数据 55

3.3设计考虑 57

3.4信号量 58

3.5经典问题中的信号量 62

3.5.1生产者-消费者 63

3.5.2终止处理 66

3.5.3理发师问题:引入公平性 75

3.5.4读者-写者问题 80

3.6 monitor 84

3.6.1设计方法1: monitor内部的关键区 87

3.6.2设计方法2: monitor控制关键区的入口 87

3.7经典问题中的monitor 91

3.7.1重新考虑生产者-消费者问题 91

3.7.2重新考虑读者-写者问题 95

3.8动态线程管理与静态线程管理 102

3.8.1 Qt线程池 102

3.8.2线程池的创建和管理 103

3.9调试多线程应用 111

3.10高层次结构:无须显式利用线程的多线程编程 115

3.10.1并发map 116

3.10.2 map-reduce 118

3.10.3并发过滤 120

3.10.4 filter-reduce 121

3.10.5案例研究:多线程存储 122

3.10.6案例研究:多线程图像匹配 131

第4章 共享内存编程:OpenMP 140

4.1引言 140

4.2第一个OpenMP程序 141

4.3变量作用域 144

4.3.1定积分OpenMP版本V.0:人工划分 146

4.3.2定积分OpenMP版本V.1:无竞争条件的人工划分 147

4.3.3定积分OpenMP V.2:基于锁的隐式划分 148

4.3.4定积分OpenMP V.3:基于归约的隐式划分 150

4.3.5变量作用域总结 151

4.4循环级并行 152

4.4.1数据依赖 154

4.4.2嵌套循环 162

4.4.3调度 162

4.5任务并行 166

4.5.1 sections指令 166

4.5.2 task指令 171

4.6同步结构 177

4.7正确性与优化问题 183

4.7.1线程安全 183

4.7.2假共享 187

4.8案例研究:OpenMP中的排序算法 192

4.8.1自下而上归并排序算法的OpenMP实现 192

4.8.2自上而下归并排序算法的OpenMP实现 195

4.8.3性能评估 200

第5章 分布式内存编程 203

5.1通信进程 203

5.2 MPI 204

5.3核心概念 205

5.4你的第一个MPI程序 206

5.5程序体系结构 208

5.5.1 SPMD 208

5.5.2 MPMD 209

5.6点对点通信 210

5.7可选的点对点通信模式 214

5.8非阻塞通信 216

5.9点对点通信小结 220

5.10错误报告与处理 220

5.11集合通信简介 222

5.11.1分发 226

5.11.2收集 231

5.11.3归约 233

5.11.4多对多收集 237

5.11.5多对多分发 240

5.11.6多对多归约 245

5.11.7全局同步 245

5.12通信对象 245

5.12.1派生数据类型 246

5.12.2打包/解包 253

5.13节点管理:通信器和组 254

5.13.1创建组 255

5.13.2建立内部通信器 257

5.14单边通信 259

5.14.1 RMA通信函数 261

5.14.2 RMA同步函数 262

5.15 I/O注意事项 270

5.16 MPI多进程和多线程混合编程 276

5.17时序和性能测量 279

5.18调试和分析MPI程序 279

5.19 Boost.MPI库 283

5.19.1阻塞和非阻塞通信 285

5.19.2数据序列化 289

5.19.3集合通信 292

5.20案例研究:有限扩散聚合模型 295

5.21案例研究:暴力加密破解 300

5.21.1版本1:“基本型”MPI 300

5.21.2版本2: MPI与OpenMP的结合 305

5.22案例研究:主/从式并行模型的MPI实现 308

5.22.1简单主/从式设置 309

5.22.2多线程主/从式设置 316

第6章 GPU编程 333

6.1 GPU编程简介 333

6.2 CUDA编程模型:线程、线程块、线程网格 335

6.3 CUDA执行模型:流多处理器和warp 340

6.4 CUDA程序编译过程 344

6.5构建CUDA项目 347

6.6内存层次结构 349

6.6.1本地内存/寄存器 355

6.6.2共享内存 356

6.6.3常量内存 363

6.6.4 texture和surface内存 368

6.7优化技术 369

6.7.1线程组织设计 369

6.7.2 kernel结构 378

6.7.3共享内存访问 382

6.7.4全局内存访问 388

6.7.5 page-locked与zero-copy内存 392

6.7.6 统一内存 394

6.7.7异步执行和流 397

6.8动态并行 403

6.9 CUDA程序的调试 407

6.10 CUDA程序剖析 410

6.11 CUDA和MPI 412

6.12案例研究 417

6.12.1分形集合计算 417

6.12.2块加密算法 426

第7章 Thrust模板库 452

7.1引言 452

7.2使用Thrust的第一步 453

7.3 Thrust数据类型 456

7.4 Thrust算法 459

7.4.1变换算法 460

7.4.2排序与查询 463

7.4.3归约 468

7.4.4 scan/前缀和 471

7.4.5数据管理与处理 472

7.5花式迭代器 475

7.6交换设备后端 480

7.7案例研究 481

7.7.1蒙特卡洛积分 481

7.7.2 DNA序列比对 485

第8章 负载均衡 493

8.1引言 493

8.2动态负载均衡:Linda的遗赠 494

8.3静态负载均衡:可分负载理论方法 495

8.3.1建模开销 496

8.3.2通信设置 502

8.3.3分析 503

8.3.4总结:简短的文献综述 510

8.4 DLTlib:分割工作负载的库 513

8.5案例研究 516

8.5.1 Mandelbrot集“电影”的混合计算:动态负载均衡案例研究 516

8.5.2分布式块加密:静态负载均衡案例研究 526