第1章 绪论 1
1.1 大规模应用对高性能计算的迫切需求 1
1.2 高性能计算硬件基础 3
1.2.1 多核通用处理器 3
1.2.2 众核加速器 4
1.2.3 加速器增强型异构系统 5
1.3 高性能计算编程挑战与研究现状 7
1.3.1 高性能计算编程挑战 7
1.3.2 高性能计算编程研究现状 9
参考文献 13
第2章 高性能计算并行基础 17
2.1 并行计算分类 17
2.1.1 数据并行 17
2.1.2 任务并行 18
2.2 并行计算的度量 19
2.2.1 性能 20
2.2.2 扩展性 22
2.3 并行程序测试集 23
2.3.1 Linpack 23
2.3.2 13类基准测试分类体系 24
2.3.3 其他测试集 32
参考文献 34
第3章 并行程序设计 36
3.1 共享存储计算机 36
3.1.1 共享存储体系结构 36
3.1.2 OpenMP编程 36
3.1.3 实例 40
3.2 分布式存储计算机 45
3.2.1 分布式存储体系结构 45
3.2.2 MPI消息传递机制 46
3.2.3 实例 47
3.3 大规模并行计算 52
3.3.1 混合编程模型 52
3.3.2 大规模系统节点间通信优化 55
参考文献 58
第4章 GPU并行计算 59
4.1 GPU体系结构 59
4.1.1 GPU的发展历程 59
4.1.2 GPU硬件体系结构 62
4.2 CUDA编程模型 65
4.2.1 程序结构 65
4.2.2 存储模型 67
4.3 性能优化 68
4.3.1 大规模线程并行 68
4.3.2 全局带宽的利用 69
4.3.3 SM片上资源优化 70
4.4 单节点多GPU编程 71
4.4.1 单线程多GPU编程 72
4.4.2 多线程多GPU编程 74
4.4.3 多GPU P2P直接通信模式 75
4.5 大规模CPU-GPU异构计算 77
参考文献 79
第5章 MIC并行计算 81
5.1 MIC体系结构 81
5.1.1 MIC体系结构概述 81
5.1.2 MIC计算核 82
5.1.3 MIC环形网络 84
5.1.4 MIC存储层次 85
5.2 MIC编程模式 86
5.2.1 offload编程模式 87
5.2.2 native编程模式 90
5.2.3 底层编程接口 91
5.3 性能优化策略 93
5.3.1 并行优化 93
5.3.2 访存优化 97
5.3.3 通信优化 99
5.4 节点内多MIC并行计算 100
5.4.1 基于stencil计算的任务划分 100
5.4.2 基于pragma卸载模式的优化 101
5.4.3 基于系统级接口的卸载模式 104
5.4.4 基于MPI-OpenMP的对称模式 109
5.4.5 不同卸载模式的比较 110
5.5 大规模CPU-MIC并行计算 111
5.5.1 大规模CPU-MIC异构系统 111
5.5.2 基于MIC加速器的大规模异构系统的编程模型 112
5.5.3 基于MIC加速器的大规模异构系统的并行优化 113
5.6 本章小结 120
参考文献 120
第6章 面向贝叶斯进化分析的大规模异构混合计算 123
6.1 引言 123
6.2 背景 125
6.2.1 MrBayes概述 125
6.2.2 同时利用CPU和GPU的挑战 126
6.3 方法 127
6.3.1 oMC3算法 127
6.3.2 负载划分策略 129
6.4 结果和讨论 131
6.4.1 实验设置 131
6.4.2 单计算节点上的性能 132
6.4.3 验证负载划分策略 134
6.4.4 多节点扩展性 135
6.5 小结 136
参考文献 136
第7章 基于CPU-GPU异构系统的双岩沉降模拟 138
7.1 概述 138
7.2 数学模型和数值方法 139
7.3 并行实现设计 141
7.3.1 基于MPI的CPU-only实现 142
7.3.2 GPU-only实现 143
7.3.3 CPU-GPU混合实现 145
7.4 实验评估与分析 149
7.4.1 实验设置和结果 149
7.4.2 单GPU性能比较与分析 151
7.4.3 扩展性评测 152
7.4.4 时间分布 156
7.5 小结 158
参考文献 158
第8章 接近纳米级精度的钙动力模拟并行计算 160
8.1 引言 160
8.2 应用描述 161
8.2.1 数学模型 161
8.2.2 数值方法 163
8.3 目标体系结构 164
8.4 实现和优化 165
8.4.1 整体策略 165
8.4.2 单协处理器利用 166
8.4.3 单节点利用 168
8.4.4 多节点效率 168
8.5 性能研究 169
8.5.1 单协处理器性能 169
8.5.2 单节点性能 170
8.5.3 弱扩展性 170
8.5.4 强扩展性 171
8.6 模拟结果 172
8.7 小结 175
参考文献 176
第9章 未来的高性能计算 178
9.1 E级计算的挑战 178
9.2 Scale up与Scale out的比较 180
9.3 未来可能的发展方向 181
9.3.1 大规模机器学习 181
9.3.2 热点方向 184
参考文献 185