第1章 简单的R并行性 1
1.1 亚里士多德数谜 2
1.1.1 求解程序的实现 2
1.1.2 改进求解程序 6
1.1.3 将问题分解为多个任务 10
1.2 R的并行包 14
1.2.1 使用mclapply() 15
1.2.2 使用parLapply() 19
1.2.3 并行负载均衡 21
1.3 segue包 23
1.3.1 安装segue 24
1.3.2 设置AWS账户 25
1.3.3 运行segue 27
1.3.4 求解亚里士多德数谜 32
1.4 总结 34
第2章 消息传递入门 36
2.1 为MPI设置系统环境 36
2.1.1 为MPI选择R包 37
2.1.2 选择MPI子系统 37
2.1.3 安装OpenMPI 38
2.2 MPI标准 39
2.2.1 MPI的世界 39
2.2.2 安装Rmpi 40
2.2.3 安装pbdMPI 41
2.3 MPI API 43
2.3.1 点对点阻塞通信 44
2.3.2 点对点非阻塞通信 56
2.3.3 集体通信 60
2.4 总结 65
第3章 高级消息传递 66
3.1 网格并行性 66
3.1.1 创建网格集群 68
3.1.2 边界数据交换 70
3.1.3 中值滤波 73
3.1.4 平铺分配图像 74
3.1.5 中值滤波网格程序 76
3.2 检查和管理通信 84
3.3 lapply()的函数变体 87
3.4 总结 89
第4章 开发SPRINT——超级计算机的基于MPI的R包 90
4.1 关于ARCHER 91
4.2 从R中调用MPI代码 92
4.2.1 MPI Hello World 92
4.2.2 从R中调用C 94
4.3 建立一个MPI R包——SPRINT 97
4.3.1 简单的并行R接口(SPRINT)包 97
4.3.2 SPRINT包的体系结构 99
4.4 将一个新函数添加到SPRINT包中 100
4.4.1 下载SPRINT源代码 101
4.4.2 在R中创建一个存根——phello.R 102
4.4.3 添加接口函数——phello.c 103
4.4.4 添加实现函数——hello.c 105
4.4.5 连接存根、接口和实现 106
4.4.6 编译并运行SPRINT代码 110
4.5 基因组学分析案例研究 112
4.5.1 基因组学 113
4.5.2 基因组数据 115
4.6 基因组学与超级计算机 116
4.6.1 目标 116
4.6.2 ARCHER超级计算机 116
4.6.3 随机森林 120
4.6.4 基因组分析案例研究的数据 122
4.6.5 ARCHER中的随机森林性能 122
4.6.6 排名产品 127
4.6.7 ARCHER中的排名产品性能 128
4.6.8 结论 131
4.7 总结 132
第5章 笔记本中的超级计算机 133
5.1 OpenCL 133
5.2 ROpenCL包 142
5.2.1 ROpenCL编程模型 142
5.2.2 距离矩阵示例 153
5.3 总结 161
第6章 并行程序设计的艺术 162
6.1 理解并行效率 163
6.1.1 加速比 163
6.1.2 阿姆达尔定律 164
6.1.3 并行或者不并行 165
6.2 数值逼近 167
6.3 随机数 170
6.4 死锁 172
6.5 减少并行开销 175
6.6 自适应负载均衡 178
6.6.1 任务场 178
6.6.2 有效的网格处理 179
6.6.3 成功并行化的3个步骤 180
6.6.4 未来将会怎样 181
6.6.5 混合并行性 184
6.7 总结 185