第1章 并行处理与并行编译系统 1
1.1 并行处理 1
1.1.1 并行体系结构 1
1.1.2 并行软件系统 3
1.1.3 并行程序设计 4
1.2 并行编译系统 5
1.2.1 功能 6
1.2.2 结构 7
1.2.3 编译方法 8
1.2.4 发展趋势 10
第2章 并行程序设计语言 13
2.1 向量语言 14
2.1.1 向量数据结构 14
2.1.2 向量操作 15
2.1.3 向量化指导命令 17
2.2 共享存储器并行机并行语言 18
2.2.1 多任务机制 18
2.2.2 PCF Fortran并行语言 20
2.3 分布存储器并行机数据并行语言 21
2.3.1 并行数据结构 22
2.3.2 并行任务 24
2.3.3 同步通信 25
2.4 消息传递并行程序设计机制 25
2.4.1 MPI支持的并行模式 26
2.4.2 基本函数 27
2.4.3 通信函数 27
2.4.4 组和通信器的管理 28
2.4.5 通用数据类型 29
2.4.6 应用程序拓扑 30
3.1.1 基础知识 31
3.1 依赖关系概念 31
第3章 依赖关系分析 31
3.1.2 控制依赖关系 34
3.1.3 数据依赖关系 38
3.2 数据依赖关系分析 42
3.2.1 依赖关系问题 42
3.2.2 依赖关系测试 44
3.3 单层循环中的依赖关系测试 46
3.3.1 精确测试算法 47
3.3.2 近似测试算法 52
3.4 嵌套循环中的依赖关系测试 56
3.4.1 嵌套循环中的依赖关系 57
3.4.2 广义gcd测试 60
3.4.3 边界法测试算法 63
3.4.4 消去法测试算法 70
第4章 程序并行化技术 75
4.1 程序向量化和并行化 76
4.1.1 向量化 77
4.1.2 并行化 79
4.2 简单变换 81
4.2.1 归约变量替换 82
4.2.2 递归下标消除 82
4.2.3 标量和数组扩张 82
4.2.4 标量和数组私有化 83
4.2.5 语句重排 85
4.2.6 语句分裂和循环分裂 85
4.2.7 循环展开 86
4.2.8 循环联合 87
4.2.9 模式匹配 88
4.2.10 循环多版本 88
4.2.11 非循环代码并行化 88
4.3 循环分布 89
4.4 循环合并 91
4.5 循环分段和循环分块 92
4.6 循环散布 94
4.7 循环结合 95
4.8 循环置换 97
4.8.1 循环置换方法 98
4.8.2 用循环置换实现并行化 103
4.8.3 循环上下界计算 104
4.9 幺模变换 105
4.9.1 初等变换 106
4.9.2 内层循环并行化 109
4.9.3 外层循环并行化 113
4.9.4 循环上下界计算 115
4.10 余数变换 116
4.10.1 单层循环变换 117
4.10.2 GCD变换 121
4.10.3 梯阵变换 124
4.10.4 圈收缩 127
第5章 并行编译技术 130
5.1 向量语言编译技术 130
5.1.1 向量语法处理 130
5.1.2 向量结构优化 131
5.2 共享存储器并行机并行编译技术 132
5.2.1 预编译 132
5.2.2 可再入的目标代码 133
5.3 处理机分配 135
5.3.1 处理机分配问题 135
5.3.2 处理机分配算法 136
5.4 分布数据的地址计算 139
5.4.2 分布数组的地址计算 140
5.4.1 分布数据的地址计算问题 140
5.4.3 分布数组的映射函数 145
5.5 并行循环迭代分布 146
5.5.1 并行循环迭代分布问题 146
5.5.2 并行循环迭代分布算法 147
5.6 通信优化 153
5.6.1 通信优化问题 153
5.6.2 减少通信 154
5.6.3 隐藏通信 156
5.6.4 通信并行化 157
第6章 并行运行库技术 158
6.1 并行任务控制机制 158
6.1.1 任务调度 159
6.1.2 负载平衡 161
6.2.1 锁与临界区 163
6.2 同步互斥机制 163
6.2.2 事件与障碍 167
6.3 通信机制 168
6.3.1 共享变量通信 168
6.3.2 点-点通信 170
6.3.3 全局通信 173
6.4 共享存储器并行机并行运行库 184
6.4.1 宏任务并行机制 184
6.4.3 宏任务库的实现 185
6.4.2 编译器和操作系统的支持 185
6.5 分布存储器并行机并行运行库 187
6.5.1 MPICH总体结构 188
6.5.2 MPICH关键数据对象分析 188
6.5.3 抽象设备接口 189
6.5.4 通道接口 191
6.5.5 分布共享存储器并行机上的MPI实现 193
参考文献 199