第一篇 基础 3
第1章 并行计算基础 3
1.1基本概念 3
1.2并行计算平台 4
1.2.1典型结构 4
1.2.2SMP 6
1.2.3 NUMA 8
1.2.4GPU 10
1.2.5Cluster 11
1.3并行程序设计技术 14
1.3.1并行程序设计 14
1.3.2 OpenMP 17
1.3.3 MPI 17
1.3.4 CUDA 18
1.3.5 HPF 19
1.4本章小结 19
习题 19
第2章OpenMP编程基础 20
2.1 OpenMP基本概念 20
2.1.1执行模式 20
2.1.2OPenMP编程要素 21
2.2OpenMP编程 24
2.2.1并行域管理 24
2.2.2任务分担 25
2.2.3同步 34
2.2.4数据环境控制 41
2.3本章小结 49
习题 49
第二篇OpenMP编译 53
第3章OpenMP编译 53
3.1 OpenMP编译系统 53
3.1.1编译系统 53
3.1.2目标语言 54
3.2 OpenMP编译器结构 55
3.2.1功能模块 56
3.2.2工作流程 59
3.3编译优化 60
3.4本章小结 60
习题 60
第4章 词法与语法分析 61
4.1 Lex工具 61
4.1.1 Lex的正则表达式 62
4.1.2 Lex的使用方法 64
4.2 OpenMPC的词法分析 66
4.2.1 C语言单词 66
4.2.2 OpenMP单词 66
4.2.3 OpenMP与C语言公用单词 67
4.3 scanner.l 68
4.3.1全局声明段 68
4.3.2模式匹配规则段 70
4.3.3补充函数段 75
4.3.4 scanner.c 78
4.3.5 scanner.h 78
4.4 Yacc工具 79
4.4.1 Yacc 79
4.4.2 Yacc文件实例 81
4.5 OpenMPC语法分析 85
4.6本章小结 88
习题 88
第5章AST的创建 90
5.1中间表示 90
5.1.1两种中间表示形式 90
5.1.2中间表示的选择 91
5.2 AST节点数据结构 92
5.2.1语句节点 92
5.2.2类型说明节点 95
5.2.3声明节点 96
5.2.4表达式节点 97
5.2.5 OpenMP制导节点 98
5.3 AST节点维护函数 103
5.4 AST的创建 104
5.4.1语法制导翻译 105
5.4.2例1 OpenMP的for节点 107
5.4.3例2 C语言while语句 108
5.4.4 Helloworld.c的AST 109
5.5符号表 111
5.5.1字符串表 112
5.5.2符号表 112
5.5.3符号表操作 114
5.5.4作用域管理 115
5.6本章小结 115
习题 116
第6章 并行域管理 117
6.1并行域及其嵌套 117
6.2并行域管理 119
6.2.1线程无关接口 119
6.2.2线程的供给 120
6.2.3线程层次关系 120
6.2.4并行域代码封装与标识 122
6.2.5任务分担问题 122
6.3目标代码形式 123
6.4 OMPi的并行域管理 124
6.4.1 ORT统一界面 124
6.4.2并行域代码变换 126
6.4.3线程管理与控制 127
6.4.4总览 132
6.5本章小结 133
习题 133
第7章 任务分担与线程同步 134
7.1 for制导指令 134
7.1.1for任务分担 134
7.1.2循环变量分解原则 135
7.1.3目标代码功能 136
7.1.4目标代码形式 137
7.1.5OMPi的for制导指令 138
7.2 sections制导指令 144
7.2.1sections任务分担描述 144
7.2.2section划分原则 145
7.2.3目标代码功能 145
7.2.4目标代码形式 145
7.2.5OMPi的sections制导指令 147
7.3 single制导指令 149
7.4 nowait问题 149
7.5归约操作 151
7.6线程同步 152
7.6.1atomic 152
7.6.2 critical 153
7.6.3master 154
7.6.4 ordered 154
7.6.5 nowait 155
7.6.6 flush 155
7.6.7barrier 155
7.7本章小结 155
习题 156
第8章 数据环境控制 157
8.1共享与私有 157
8.1.1非全局变量的共享 158
8.1.2变量的私有化 159
8.1.3 threadprivate子句 159
8.1.4基于进程的问题 160
8.2并行域边界处理 160
8.2.1 private变量 160
8.2.2 threadprivate变量 160
8.3 OMPi数据环境控制 161
8.3.1共享变量 161
8.3.2私有变量 163
8.3.3线程专有变量 166
8.3.4归约变量 169
8.4本章小结 170
习题 170
第9章 产生目标代码 171
9.1源代码变换 171
9.1.1变换流程 171
9.1.2支撑函数 173
9.2 AST变换 173
9.2.1拼接及创建函数 173
9.2.2变换函数集 174
9.2.3 OpenMP节点变换 177
9.2.4 parallel变换 180
9.2.5 for变换 183
9.2.6 sections变换 185
9.2.7数据环境的处理 186
9.3代码优化 188
9.4 AST输出 189
9.4.1 OMPi的AST输出 189
9.4.2 OpenMP节点输出 189
9.5本章小结 192
第10章运行环境 193
10.1重要数据结构 193
10.1.1 ORT 193
10.1.2线程池与EECB 194
10.1.3任务分担结构 195
10.1.4共享变量结构 197
10.2初始化与退出 198
10.2.1 ORT初始化 199
10.2.2 EELIB初始化 202
10.3并行支撑函数 204
10.3.1线程状态管理 204
10.3.2并行域管理 206
10.3.3任务分担 211
10.3.4同步 220
10.3.5变量的数据环境 221
10.4 OpenMP的API 222
10.4.1 API函数 222
10.4.2 ICV变量 224
10.4.3引用与链接 225
10.5环境变量 225
10.6本章小结 226
第三篇 实践篇 229
第11章 编译器及测试工具 229
11.1常见OpenMP编译器 229
11.1.1 GCC编译器 229
11.1.2 OMPi编译器 231
11.1.3 Onmi编译器 233
11.2性能测试工具 235
11.2.1 EPCC Microbenchmark 236
11.2.2 NSA Parallel Benchmark 242
11.2.3 SPEC OMP2001 243
11.2.4 LLNL 243
11.3本章小结 243
第12章OMPi框架分析 245
12.1工作流程 245
12.2 OMPi的处理步骤 246
12.3代码转换 250
12.4进程问题 252
12.4.1全局变量 252
12.4.2非全局共享变量 253
12.5运行环境 254
12.5.1初始化 254
12.5.2并行域的处理 254
12.5.3任务分担 254
12.5.4同步 256
12.5.5线程专有变量 256
12.5.6与EELIB的接口 258
12.6源代码文档结构 258
12.7后续阅读建议 259
12.8本章小结 259
第13章ompicc.c源码分析 260
13.1 ompicc工作流程 260
13.2变量声明及参数处理 261
13.3编译部分 271
13.3.1文件名处理 272
13.3.2预处理 273
13.3.3代码变换 274
13.3.4 C编译 275
13.4链接部分 276
13.5主函数部分 278
13.5.1参数及配置函数 278
13.5.2 main函数 281
13.6配置文件 283
13.7运行参数与选项 287
13.7.1环境变量 288
13.7.2命令行参数 288
13.7.3配置文件 291
13.8本章小结 292
第14章ompi.c源码分析 293
14.1 ompi工作流程 293
14.2 ompi.c 294
14.2.1变量声明及辅助函数 294
14.2.2 main()函数 297
14.2.3错误处理 303
14.3 ort.defs 303
14.4 ompi.h 307
14.5小结 308