内容简介

  《数据科学中的并行计算:以R,C++和CUDA为例》是一本并行计算领域中,注意力完全集中在并行数据结构、算法、软件工具及数据科学中具体应用的书。
  《数据科学中的并行计算:以R,C++和CUDA为例》中的例子不仅有经典的“n个样本,p个变量”的矩阵形式,还有时间序列、网络图模型,以及各种其他的在数据科学中常见的结构。
  《数据科学中的并行计算:以R,C++和CUDA为例》同时也讨论7适用于多种硬件、多种编程语言的的软件包。
  《数据科学中的并行计算:以R,C++和CUDA为例》特点
  ·关注数据科学中的应用,包括统计学、数据挖掘和机器学习。
  ·讨论了数据科学中的常见数据结构,如网络图模型。
  ·通篇强调7普遍的原理,如避免降低并行程序速度的因素。
  ·覆盖了主流的计算平台:多核、集群以及图像处理单元(GPU)。
  ·解释了Thrust包如何降低多核机器和GPU编程的难度,并使得同一份代码能够在不同的平台上工作。
  ·在作者网站上提供了样例代码。

作者简介

  汪磊,中科院微系统所通信专业博士。曾活跃在Julia等多个开源项目。现就职于滴滴出行,负责订单派单策略方向。
  
  寇强,美国印第安纳大学信息学博士在读,Rcpp核心成员。

精彩书评

  ★“……一本完整、易读的并行计算入门——它适合很多学科的研究人员和学生使用。这是一本‘必备’的参考书……”
  ——戴维·E·吉尔斯,维多利亚大学
  
  ★“这《数据科学中的并行计算:以R,C++和CUDA为例》我会既用来当参考书,又当教材。书中的例子生动,内容也使读者直接从概念走向可用于工作的代码。”
  ——迈克尔·凯恩,耶鲁大学

目录

译者序
前言
作者简介

第1章R语言中的并行处理入门
1.1反复出现的主题:良好并行所具有的标准
1.2关于机器
1.3反复出现的主题:不要把鸡蛋放在一个篮子里
1.4扩展示例:相互网页外链

第2章“我的程序为什么这么慢?”:速度的障碍
2.1速度的障碍
2.2性能和硬件结构
2.3内存的基础知识
2.4网络基础
2.5延迟和带宽
2.6线程调度
2.7多少个进程/线程?
2.8示例:相互外链问题
2.9“大O”标记法
2.10数据序列化
2.11“易并行”的应用

第3章并行循环调度的准则
3.1循环调度的通用记法
3.2snow中的分块
3.3关于代码复杂度
3.4示例:所有可能回归
3.5partools包
3.6示例:所有可能回归,改进版本
3.7引入另一个工具:multicore
3.8块大小的问题
3.9示例:并行距离计算
3.10foreach包
3.11跨度
3.12另一种调度方案:随机任务置换
3.13调试snow和multicore的代码

第4章共享内存范式:基于R的简单介绍
4.1是什么被共享了?
4.2共享内存代码的简洁
4.3共享内存编程的高级介绍:Rdsm包
4.4示例:矩阵乘法
4.5共享内存能够带来性能优势
4.6锁和屏障
4.7示例:时间序列中的最大脉冲
4.8示例:变换邻接矩阵
4.9示例:k-means聚类

第5章共享内存范式:C语言层面
5.1OpenMP
5.2示例:找到时间序列中的最大脉冲
5.3OpenMP循环调度选项
5.4示例:邻接矩阵的变换
5.5示例:邻接矩阵,R可调用的代码
5.6C加速
5.7运行时间与开发时间
5.8高速缓存/虚拟内存的深入问题
5.9OpenMP中的归并操作
5.10调试
5.11IntelThreadBruldingBlocks(TBB)
5.12无锁同步

第6章共享内存范式:GPU
6.1概述
6.2关于代码复杂性的再讨论
6.3章节目标
6.4英伟达GPU和CUDA简介
6.5示例:相互反向链接问题
6.6GPU上的同步问题
6.7R和GPU
6.8英特尔XeonPhi芯片

第7章Thrust与Rth
7.1不要把鸡蛋放在一个篮子里
7.2Thrust简介
7.3Rth
7.4略过C++相关内容
7.5示例:计算分位数
7.6Rth简介

第8章消息传递范式
8.1消息传递概述
8.2集群模型
8.3性能问题
8.4Rmpi
8.5示例:计算素数的流水线法
8.6内存分配问题
8.7消息传递的性能细节

第9章MapReduce计算
9.1ApacheHadoop
9.2其他MapReduce系统
9.3MapReduce系统的R接口
9.4另一个选择:“Snowdoop”

第10章并行排序和归并
10.1难以实现的最优目标
10.2排序算法
10.3示例:R中的桶排序
10.4示例:使用OpenMP的快排
10.5Rth中的排序
10.6计时比较
10.7分布式数据上的排序

第11章并行前缀扫描
11.1一般公式
11.2应用
11.3一般策略
11.4并行前缀扫描的实现
11.5OpenMP实现的并行cumsum()
11.6示例:移动平均

第12章并行矩阵运算
12.1平铺矩阵
12.2示例:snowdoop方法
12.3并行矩阵相乘
12.4BLAS函数库
12.5示例:OpenBLAS的性能
12.6示例:图的连通性
12.7线性系统求解
12.8稀疏矩阵

第13章原生统计方法:子集方法
13.1分块均值
13.2BagofLittleBootstraps方法
13.3变量子集

附录A回顾矩阵代数
A.1术语和符号
A.2矩阵转置
A.3线性独立
A.4行列式
A.5矩阵求逆
A.6特征值和特征向量
A.7R中的矩阵代数

附录BR语言快速入门
B.1对照
B.2启动R
B.3编程示例
B.4编程示例二
B.5编程示例三
B.6R列表类型
B,7R中的调试

附录C给R程序员的C简介
C.1示例程序
C.2分析
C.3C++
索引

前言/序言

  感谢你对《数据科学中的并行计算:以R,C++和CUDA为例》感兴趣。我很享受写书的过程,也希望这《数据科学中的并行计算:以R,C++和CUDA为例》对你非常有用。为达此目的,这里有几点事情我希望说清楚。《数据科学中的并行计算:以R,C++和CUDA为例》目标:
  我很希望这《数据科学中的并行计算:以R,C++和CUDA为例》能充分体现它标题的含义——数据科学中的并行计算。和我所知道的其他并行计算的书籍不同,这《数据科学中的并行计算:以R,C++和CUDA为例》里你不会碰到任何一个求解偏微分方程或其他物理学上的应用。这《数据科学中的并行计算:以R,C++和CUDA为例》真的是为了数据科学所写——无论你怎样定义数据科学,是统计学、数据挖掘、机器学习、模式识别、数据分析或其他的内容-。
  这不仅仅意味着书里的实例包括了从数据科学领域中选取的应用,这也意味着能够反映这一主题的数据结构、算法和其他内容。从经典的“n个观测,p个变量”的矩阵形式,到时间序列,到网络图模型和其他数据科学中常见的结构都会囊括其中。
  《数据科学中的并行计算:以R,C++和CUDA为例》包含了大量实例,以用于强调普遍的原理。因此,在第1章介绍了入门的代码实例后(没有配套的实例,这些普遍的原理也就没有任何意义),我决定在第2章里解释可以影响并行计算速度的一般因素,而不是集中介绍如何写并行代码。这是一个至关重要的章节,在后续的章节中会经常提到它。

其他推荐