第1章 引言 1
1.1 学习成功经验 1
1.2 代码现代化 1
1.3 并发算法现代化 1
1.4 向量化和数据局部性现代化 2
1.5 理解功耗使用 2
1.6 ISPC和OpenCL 2
1.7 Intel Xeon Phi协处理器特性 2
1.8 众核和新异构系统 2
1.9 书名中没有Xeon Phi与新异构架构编程 3
1.10 众核的未来 3
1.11 下载 3
1.12 更多信息 4
第2章 从正确到正确&高效:Godunov格式的Hydro2D案例学习 5
2.1 现代计算机上的科学计算 5
2.1.1 现代计算环境 6
2.1.2 CEA的Hydro2D 6
2.2 冲击流体动力学的一种数值方法 7
2.2.1 欧拉方程 7
2.2.2 Godunov方法 7
2.2.3 哪里需要优化 9
2.3 现代计算机架构的特征 9
2.3.1 面向性能的架构 9
2.3.2 编程工具和运行时 10
2.3.3 计算环境 11
2.4 通向高性能的路 11
2.4.1 运行Hydro2D 11
2.4.2 Hydro2D的结构 12
2.4.3 优化 15
2.4.4 内存使用 16
2.4.5 线程级并行 17
2.4.6 算术效率和指令级并行 24
2.4.7 数据级并行 26
2.5 总结 32
2.5.1 协处理器与处理器 32
2.5.2 水涨船高 32
2.5.3 性能策略 33
2.6 更多信息 34
第3章 HBM上的SIMD与并发优化 36
3.1 应用程序:HIROMB-BOOS-MODEL 36
3.2 关键应用:DMI 36
3.3 HBM执行配置文件 37
3.4 HBM优化综述 38
3.5 数据结构:准确定位位置 38
3.6 HBM上的线程并行 41
3.7 数据并行:SIMD向量化 45
3.7.1 零散的可优化部分 46
3.7.2 过早抽象是万恶之源 48
3.8 结果 50
3.9 详情分析 51
3.10 处理器与协处理器可扩展性对比 52
3.11 CONTIGUOUS属性 53
3.12 总结 54
3.13 参考文献 54
3.14 更多信息 55
第4章 流体动力学方程优化 56
4.1 开始 56
4.2 1.0版本:基础版本 57
4.3 2.0版本:线程盒 59
4.4 3.0版本:栈内存 63
4.5 4.0版本:分块 63
4.6 5.0版本:向量化 64
4.7 Intel Xeon Phi协处理器上的运行结果 68
4.8 总结 69
4.9 更多信息 70
第5章 分阶段准同步栅栏 71
5.1 如何改善代码 74
5.2 如何进一步改善代码 74
5.3 超线程方阵 74
5.4 关于该方案哪些地方不是最优的 75
5.5 超线程方阵编码 76
5.5.1 如何确定内核间兄弟线程和内核内HT线程 77
5.5.2 超线程方阵手动分区方法 77
5.5.3 吸取教训 79
5.6 回到工作 80
5.7 数据对齐 81
5.7.1 尽可能使用对齐的数据 81
5.7.2 冗余未必是件坏事 81
5.8 深入讨论分阶段准同步栅栏 84
5.9 如何节省时间 86
5.10 几个留给读者的优化思考 90
5.11 类似Xeon Phi协处理器的Xeon主机性能优化 91
5.12 总结 92
5.13 更多信息 92
第6章 故障树表达式并行求解 93
6.1 动机和背景 93
6.1.1 表达式 93
6.1.2 表达式选择:故障树 93
6.1.3 程序实例中的故障树:基本模拟 93
6.2 实例实现 94
6.3 其他因素 101
6.4 总结 101
6.5 更多信息 101
第7章 深度学习的数值优化 102
7.1 拟合目标函数 102
7.2 目标函数与主成分分析 105
7.3 软件及样例数据 106
7.4 训练数据 109
7.5 运行时间 109
7.6 扩展结果 111
7.7 总结 111
7.8 更多信息 112
第8章 优化聚集/分散模式 113
8.1 聚集/分散在Intel架构下的说明 114
8.2 聚集/分散模式在分子动力学中的应用 115
8.3 优化聚集/分散模式 117
8.3.1 提高时间和空间的局部性 117
8.3.2 选择一种适当的数据布局:AoS与SoA 118
8.3.3 AoS和SoA之间的动态转换 119
8.3.4 分摊聚集/分散和转换的开销 122
8.4 总结 123
8.5 更多信息 123
第9章 N体问题直接法的众核实现 125
9.1 N体模拟 125
9.2 初始解决方案 125
9.3 理论极限 126
9.4 降低开销和对齐数据 128
9.5 优化存储层次 131
9.6 改进分块 133
9.7 主机端的优化 135
9.8 总结 136
9.9 更多信息 136
第10章 N体方法 137
10.1 快速N体方法和直接N体内核 137
10.2 N体方法的应用 138
10.3 直接N体代码 138
10.4 性能结果 141
10.5 总结 142
10.6 更多信息 142
第11章 使用OpenMP 4.0实现动态负载均衡 144
11.1 最大化硬件利用率 144
11.2 N体内核 146
11.3 卸载版本 149
11.4 第一个处理器与协处理器协作版本 150
11.5 多协处理器版本 152
11.6 更多信息 155
第12章 并发内核卸载 156
12.1 设定上下文 156
12.1.1 粒子动力学 156
12.1.2 本章结构 157
12.2 协处理器上的并发内核 158
12.2.1 协处理器设备划分和线程关联 158
12.2.2 并发数据传输 163
12.3 在PD中使用并发内核卸载进行作用力计算 166
12.3.1 使用牛顿第三定律并行评估作用力 166
12.3.2 实现作用力并发计算 167
12.3.3 性能评估:之前与之后 171
12.4 总结 173
12.5 更多信息 174
第13章 MPI和异构计算 175
13.1 现代集群中的MPI 175
13.2 MPI任务地点 176
13.3 DAPL提供者的选择 180
13.3.1 第一个提供者OFA-V2-MLX4_0-1U 180
13.3.2 第二个提供者ofa-v2-scif0以及对节点内部结构的影响 180
13.3.3 最后一个提供者 181
13.3.4 混合程序的可扩展性 182
13.3.5 负载均衡 184
13.3.6 任务和线程映射 184
13.4 总结 185
13.5 致谢 185
13.6 更多信息 185
第14章 Intel Xeon Phi协处理器功耗分析 186
14.1 功耗分析 186
14.2 用软件测量功耗和温度 187
14.2.1 创建功耗和温度监控脚本 188
14.2.2 使用micsmc工具创建功耗和温度记录器 189
14.2.3 使用IPMI进行功耗分析 190
14.3 基于硬件的功耗分析方法 192
14.4 总结 196
14.5 更多信息 196
第15章 集成Intel Xeon Phi协处理器至集群环境 197
15.1 早期探索 197
15.2 Beacon系统的历史 197
15.3 Beacon系统的架构 198
15.3.1 硬件环境 198
15.3.2 软件环境 198
15.4 Intel MPSS安装步骤 199
15.4.1 系统准备 199
15.4.2 安装Intel MPSS栈 200
15.4.3 生成和定制配置文件 201
15.4.4 MPSS升级 204
15.5 建立资源和工作负载管理器 204
15.5.1 TORQUE 204
15.5.2 序言程序 205
15.5.3 尾声程序 206
15.5.4 TORQUE/协处理器集成 207
15.5.5 Moab 207
15.5.6 提高网络局部性 207
15.5.7 Moab/协处理器集成 207
15.6 健康检查和监控 208
15.7 常用命令脚本化 209
15.8 用户软件环境 210
15.9 今后的方向 211
15.10 总结 212
15.11 致谢 212
15.12 更多信息 212
第16章 在Intel Xeon Phi协处理器上支持集群文件系统 214
16.1 网络配置概念和目标 214
16.1.1 网络选项概览 215
16.1.2 设置集群启用协处理器的步骤 216
16.2 协处理器文件系统支持 217
16.2.1 支持NFS 217
16.2.2 支持Lustre文件系统 218
16.2.3 支持Fraunhofer BeeGFS文件系统 219
16.2.4 支持Panasas PanFS文件系统 220
16.2.5 集群文件系统的选择 220
16.3 总结 220
16.4 更多信息 221
第17章 NWChem:大规模量子化学仿真 222
17.1 引言 222
17.2 回顾单线程CC形式 222
17.3 NWChem软件架构 225
17.3.1 全局数组 225
17.3.2 张量收缩引擎 226
17.4 设计卸载解决方案 226
17.5 卸载架构 229
17.6 内核优化 230
17.7 性能评估 232
17.8 总结 233
17.9 致谢 235
17.10 更多信息 235
第18章 大规模多系统上的高效嵌套并行 238
18.1 动机 238
18.2 基准测试 238
18.3 基线基准测试 239
18.4 流水线方法——Flat arena类 240
18.5 Intel TBB用户管理任务调度平台 241
18.6 分层方法——Hierarchical_arena类 243
18.7 性能评估 243
18.8 对NUMA架构的影响 245
18.9 总结 246
18.10 更多信息 246
第19章 Black-Scholes定价的性能优化 248
19.1 金融市场模型基础及Black-Scholes公式 248
19.1.1 金融市场数学模型 248
19.1.2 欧式期权和公平价格概念 249
19.1.3 Black.Scholes公式 250
19.1.4 期权定价 250
19.1.5 测试平台架构 250
19.2 案例研究 251
19.2.1 初始版本——检验正确性 251
19.2.2 参照版本——选择合适的数据结构 251
19.2.3 参照版本——不要混合使用数据类型 252
19.2.4 循环向量化 253
19.2.5 使用快速数学函数:erff()与cdfnormf() 255
19.2.6 代码等价变换 256
19.2.7 数组对齐 257
19.2.8 尽可能降低精度 258
19.2.9 并行工作 259
19.2.10 使用热身 260
19.2.11 使用Intel Xeon Phi协处理器实现轻松移植 261
19.2.12 使用Intel Xeon Phi协处理器实现并行工作 261
19.2.13 使用Intel Xeon Phi协处理器和流存储 262
19.3 总结 263
19.4 更多信息 264
第20章 使用Intel COI库传输数据 265
20.1 使用Intel COI库的第一步 265
20.2 COI缓冲区种类和传输性能 266
20.3 应用程序 269
20.4 总结 270
20.5 更多信息 270
第21章 高性能光线追踪 271
21.1 背景 272
21.2 向量化的光线遍历 272
21.3 Embree光线追踪内核 273
21.4 在应用程序中使用Embree 274
21.5 性能 276
21.6 总结 277
21.7 更多信息 278
第22章 OpenCL程序的可移植性能 279
22.1 两难的困境 279
22.2 OpenCL简介 280
22.3 OpenCL示例:矩阵乘 282
22.4 OpenCL与Intel Xeon Phi协处理器 285
22.5 性能评估 285
22.6 案例研究:分子对接算法 287
22.7 性能评估:性能可移植性 289
22.8 相关工作 291
22.9 总结 291
22.10 更多信息 291
第23章 应用到Stencil计算中的特性提取和优化方法 292
23.1 引言 292
23.2 性能评估 293
23.2.1 测试平台的 AI 293
23.2.2 内核的AI 294
23.3 标准优化 296
23.3.1 自动应用调试 301
23.3.2 自动调试工具 304
23.3.3 结果 305
23.4 总结 305
23.5 更多信息 307
第24章 剖析指导优化 308
24.1 计算机科学中的矩阵转置 308
24.2 工具和方法 309
24.3 串行:初始的就地转置实现 310
24.4 并行:使用OpenMP增加并行度 313
24.5 分块:提高数据局部性 315
24.6 规范化:多版本微内核 319
24.7 预组织:释放更多的并行性 322
24.8 总结 326
24.9 更多信息 327
第25章 基于ITAC的异构MPI应用优化 328
25.1 亚式期权定价 328
25.2 应用设计 329
25.3 异构集群中的同步 330
25.4 通过ITAC寻找性能瓶颈 331
25.5 建立ITAC 331
25.6 非均衡的MPI运行 332
25.7 手动负载均衡 335
25.8 动态老板-工人负载均衡 337
25.9 结论 339
25.10 更多信息 340
第26章 集群上可扩展OOC解法器 341
26.1 引言 341
26.2 基于ScaLAPACK的OOC分解算法 342
26.2.1 核内分解 342
26.2.2 OOC分解 343
26.3 从NVIDIA GPU移植到Intel Xeon Phi协处理器 344
26.4 数值结果 346
26.5 结论和展望 350
26.6 致谢 350
26.7 更多信息 350
第27章 稀疏矩阵向量乘:并行化和向量化 352
27.1 引言 352
27.2 稀疏矩阵数据结构 353
27.2.1 压缩后的数据结构 354
27.2.2 分块 356
27.3 并行SpMV乘法 356
27.3.1 部分分布式并行SpMV 356
27.3.2 完全分布式并行SpMV 357
27.4 Intel Xeon Phi协处理器的向量化 358
27.5 评估 362
27.5.1 Intel Xeon Phi协处理器 363
27.5.2 Intel Xeon处理器 365
27.5.3 性能比较 366
27.6 总结 366
27.7 致谢 367
27.8 更多信息 367
第28章 基于Morton排序的性能优化 368
28.1 通过数据重排提高缓存局部性 368
28.2 性能改进 368
28.3 矩阵转置 369
28.4 矩阵乘法 373
28.5 总结 377
28.6 更多信息 378