《OPENACC并行编程实战》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:何沧平著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2017
  • ISBN:9787111549659
  • 页数:265 页
图书介绍:第1章介绍超级计算技术发展趋势和并行编程概况,可以从中了解OpenACC的作用。没有CUDA C基础的读者能够掌握基本概念,便于深入理解OpenACC的并行化技术。第2章介绍OpenACC语言的设计思路。第3~4章是本书的核心,将计算部分并行化,并将数据传递时间减到最少。至此读者已经能够编写性能良好的OpenACC程序。第5~7章介绍高级并行技术,用于极致性能优化、与CUDA C/CUDA Fortran和各类库的混合编程。第8章给出OpenACC规定的所有运行时例程,不用细读,用到时再参考。第9章指导部署开发环境,以便快速上手。

第1章 并行编程概览 1

1.1 加速器产品 1

1.1.1 英伟达GPU 3

1.1.2 英特尔至强融核处理器 9

1.2 并行编程语言 12

1.3 CUDA C 14

1.3.1 线程组织方式 16

1.3.2 运行过程 18

1.3.3 内存层级 20

1.3.4 性能优化技术 21

第2章 OpenACC概览 22

2.1 OpenACC规范的内容 23

2.1.1 抽象加速器模型 25

2.1.2 存储模型 25

2.1.3 计算执行模型 26

2.2 OpenACC 2.5 规范 29

第3章 OpenACC计算构件 36

3.1 条件编译 37

3.2 导语格式 38

3.3 计算构件kernels 40

3.3.1 构件内有1个循环 41

3.3.2 构件内2个循环 44

3.3.3 构件内二重嵌套循环 45

3.3.4 kernels构件内三重嵌套循环 48

3.4 loop构件 52

3.4.1 independent子语 53

3.4.2 reduction归约子语 57

3.4.3 不常用的子语 64

3.5 计算构件parallel 66

3.5.1 gang单独模式 68

3.5.2 gang分裂模式 70

3.5.3 二重循环 73

3.5.4 三重循环 75

3.6 组合导语 77

3.7 案例研究:Jacobi迭代 78

3.7.1 CPU上并行化 84

3.7.2 GPU上并行化 88

3.8 原子操作:atomic导语 91

第4章 数据管理 97

4.1 数据属性、数据区域和数据生存期 99

4.2 计算构件的伴随数据区域 100

4.2.1 引用计数 101

4.2.2 present子语 102

4.2.3 copy子语 104

4.2.4 copyin子语 105

4.2.5 copyout子语 107

4.2.6 create子语 108

4.2.7 数据子语内的子数组 111

4.2.8 private私有子语 112

4.2.9 承上私有firstprivate子语 115

4.2.10 带有预置数据属性的变量 116

4.2.11 default默认子语 117

4.2.12 案例研究:Jacobi迭代优化数据传输 117

4.3 data构件 119

4.3.1 数据管理功能 119

4.3.2 deviceptr子语 121

4.3.3 案例研究:data构件迭代优化Jacobi数据传输 122

4.4 enter data导语和exit data导语 128

4.4.1 C++类的数据生存期 129

4.4.2 传递设备数据指针 133

4.5 update导语 135

4.6 declare导语 138

4.6.1 device resident子语 139

4.6.2 create子语 140

4.6.3 link子语 140

4.6.4 用法举例 141

4.7 特定设备的子语 146

第5章 计算区域内的过程调用 148

5.1 routine导语 150

5.2 seq子语(C版) 151

5.3 seq子语(Fortran版) 152

5.4 routine(名字) 154

5.5 bind子语 155

5.6 用子语指定并行级别 155

5.6.1 vector级别并行 156

5.6.2 worker、worker级别并行 159

5.7 计算圆周率π 160

第6章 高级特性 164

6.1 异步操作 164

6.1.1 async子语 165

6.1.2 wait子语 165

6.1.3 wait导语 166

6.2 设备计算与主机计算重叠 166

6.3 设备上同时执行多个队列 169

6.4 重叠计算与数据传输 172

6.4.1 步骤0:串行代码 174

6.4.2 步骤1:计算并行化 177

6.4.3 步骤2:分块计算 178

6.4.4 步骤3:数据分块传输 179

6.4.5 步骤4:重叠计算与传输 181

6.5 双向传输 183

6.6 多个设备同时运算 185

6.6.1 环境变量 186

6.6.2 运行过程中选择设备 186

6.6.3 OpenMP调动多个设备 195

第7章 与GPU生态环境互操作 202

7.1 OpenACC调用CUDA C 203

7.2 OpenACC调用CUDA Fortran 205

7.3 CUDA C调用OpenACC 207

7.4 捆绑主机地址与设备地址 208

7.5 CUDA Fortran调用OpenACC 210

7.6 OpenACC(C)调用cuBLAS 211

7.7 OpenACC(Fortran)调用cuBLAS 212

第8章 运行时函数 213

8.1 运行时库的定义 213

8.2 运行时库例程 215

8.2.1 acc_get_num_devices 215

8.2.2 acc_set_device_type 216

8.2.3 acc_get_device_type 217

8.2.4 acc_set_device_num 217

8.2.5 acc_get_device_num 218

8.2.6 acc_init 218

8.2.7 acc_shutdown 219

8.2.8 acc_async_test 219

8.2.9 acc_async_test_all 220

8.2.10 acc_wait 220

8.2.11 acc_wait_async 221

8.2.12 acc_wait_all 221

8.2.13 acc_wait_all_async 222

8.2.14 acc_get_default_async 222

8.2.15 acc_set_default_async 223

8.2.16 acc_on_device 223

8.2.17 acc_malloc 224

8.2.18 acc_free 224

8.2.19 acc_copyin 225

8.2.20 acc_create 226

8.2.21 acc_copyout 227

8.2.22 acc_delete 228

8.2.23 acc_update_device 229

8.2.24 acc_update_self 230

8.2.25 acc_map_data 231

8.2.26 acc_unmap_data 231

8.2.27 acc_deviceptr 231

8.2.28 acc_hostptr 232

8.2.29 acc_is_present 232

8.2.30 acc_memcpy_to_device 233

8.2.31 acc_memcpy_from_device 233

8.2.32 acc_memcpy device 234

第9章 开发环境搭建 235

9.1 Windows 7 236

9.2 Linux(rhel) 244

9.3 编译工具、特性支持度 247

第10章 在神威·太湖之光上使用OpenACC 253

10.1 SW26010众核处理器 253

10.2 存储模型 254

10.3 执行模型 256

10.4 数据管理 256

附录 著名超级计算机 259

后记 码农的悲喜 264