第1章 引论 1
1.1 并行机制的原动力 1
1.1.1 计算能力——从晶体管到FLOPS 1
1.1.2 内存/磁盘速度 2
1.1.3 数据通信 2
1.2 并行计算的应用 3
1.2.1 工程和设计中的应用 3
1.2.2 科学应用 3
1.2.3 商业应用 4
1.2.4 计算机系统中的应用 4
1.3 并行机的分类 4
1.4 本书的结构 5
第2章 基于MPI的并行程序设计 6
2.1 基于MPI的“Hello World” 6
2.1.1 编译和运行MPI程序 8
2.1.2 为“Hello World”增加通信 8
2.2 管理者/工人示例 12
2.3 基于一维分解的二维雅可比(Jacobi)例子 15
2.4 聚合操作 19
2.5 并行Monte Carlo计算 21
2.6 没有MPI的MPI编程 23
2.6.1 Poisson求解器 23
2.6.2 非线性偏微分方程的求解 25
第3章 MPI编程的高级论题 27
3.1 MPI中的动态进程管理 27
3.1.1 内部通信机 27
3.1.2 繁殖新的MPI进程 27
3.1.3 再论矩阵-向量相乘 28
3.1.4 更多动态进程管理 29
3.2 容错 30
3.3 再论网格交换 31
3.3.1 阻塞和非阻塞通信 31
3.3.2 MPI中非邻近数据的通信 33
3.4 引入通信机的动机 36
3.5 聚合操作的进一步讨论 38
3.6 并行I/O 40
3.6.1 一个简单的例子 40
3.6.2 一个更复杂的例子 41
3.7 远程内存访问 43
3.8 使用C++和Fortran 90 45
3.9 MPI性能测试 46
3.9.1 mpptest 46
3.9.2 SKaMPI 46
3.9.3 高性能LINPACK 47
3.10 MPI-2现状 48
第4章 基于OpenMP的共享内存并行计算 49
4.1 OpenMP概论 49
4.2 简单的OpenMP程序例子 49
4.3 OpenMP程序设计 51
4.3.1 OpenMP的基本运行模型 51
4.3.2 OpenMP的编译指示语句 51
4.3.3 OpenMP的库函数 54
4.3.4 OpenMP并行数据共享机制 55
4.3.5 OpenMP任务调度和负载均衡子句 57
4.4 设计正确高效OpenMP程序的基本方法 57
4.5 OpenMP用于实现矩阵相乘 58
第5章 基于SIMD模型的图形硬件编程 61
5.1 统一设备计算模型简介 61
5.1.1 CPU与GPU的不同之处 61
5.1.2 编程模型 61
5.1.3 内存模型 63
5.1.4 硬件实现与执行模式 64
5.1.5 应用程序接口 66
5.2 一个简单的基于CUDA结构的矩阵乘法程序 67
5.2.1 问题描述 67
5.2.2 基于CPU的计算方法 67
5.2.3 基于GPU的简单算法 68
5.3 基于CUDA结构的矩阵乘法程序的性能提升 71
5.3.1 计算性能分析 71
5.3.2 分块矩阵相乘算法 71
第6章 并行算法设计原理 73
6.1 预备知识 73
6.1.1 分解、任务和依赖图 73
6.1.2 粒度、并发和任务交互 75
6.1.3 进程和映射 78
6.1.4 进程和处理器 79
6.2 分解方法 80
6.2.1 递归分解 80
6.2.2 数据分解 82
6.2.3 探索性分解 87
6.2.4 猜测性分解 89
6.2.5 混合分解 90
6.3 任务和交互的特性 91
6.3.1 任务的特性 91
6.3.2 任务间交互的特性 92
6.4 负载平衡的映射技术 94
6.4.1 静态映射方法 95
6.4.2 动态映射方案 105
6.5 包容交互负荷的方法 107
6.5.1 最大化数据局部性 107
6.5.2 最小化争夺和热点 108
6.5.3 重叠计算和交互 109
6.5.4 复制数据或计算 109
6.5.5 使用优化聚合交互运算 110
6.5.6 与其他交互重叠交互 110
6.6 并行算法模型 110
6.6.1 数据-并行模型 111
6.6.2 任务图模型 111
6.6.3 工作池模型 112
6.6.4 主从模型 112
6.6.5 流水线或生产者—消费者模型 113
6.6.6 混合模型 113
第7章 Matlab的并行化 114
7.1 MatlabMPI/pMatlab介绍 114
7.1.1 MatlabMPI简介 115
7.1.2 全局向量语义 115
7.1.3 pMatlab介绍 116
7.2 Matlab的并行工具 117
7.3 Matlab已有工具的并行版本 117
7.4 Matlab代码的并行化 118
7.4.1 基于Matlab的任务并行 119
7.4.2 基于Matlab的数据并行 121
7.4.3 基于Matlab环境实现类似MPI的并行开发 122
第8章 网格计算和云计算 123
8.1 网格技术概述 123
8.1.1 网格计算简介 123
8.1.2 网格体系结构 123
8.1.3 网格计算关键技术 126
8.2 网格计算编程环境 127
8.2.1 网格计算平台介绍 127
8.2.2 Globus环境配置 129
8.3 云计算技术概述 133
8.3.1 云计算简介 133
8.3.2 云计算体系结构 134
8.3.3 云计算关键技术 136
8.4 云计算编程环境 137
8.4.1 Hadoop框架的工作机制 137
8.4.2 MapReduce分布式并行计算编程模型 138
附录 142
主要参考资料 149