首页>参考读物>计算机科学与技术>软件与程序设计

R并行编程实战
作者 : [美]西蒙 R.查普尔(Simon R. Chapple) 伊丽•特鲁普(Eilidh Troup) 托斯顿•福斯特(Thorsten Forster) 特伦斯·斯隆(Terence Sloan) 著
译者 : 张茂军 李洪成 文益民 译
出版日期 : 2017-10-30
ISBN : 978-7-111-57637-2
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 199
开本 : 16
原书名 : Mastering Parallel Programming with R
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

图书特色

资深HPC和大数据处理专家撰写,涵盖各种并行技术
构建大规模高效算法的综合实用指南

R语言是数据科学中最流行的编程语言之一。本书是一本构建大规模高效算法的综合实用指南,涵盖各种并行技术,从R语言的并行版本lapply()的简单应用到基于Hadoop和Apache Spark框架的高级AWS云。此外,本书还介绍了影响并行效率的因素(包括评估代码性能和实现负载平衡),以及要避免的陷阱(包括死锁和数值不稳定问题),并且还详细阐释如何为最适合的并行类型构建代码和数据,如何在各种计算机系统中运行R代码获取最佳性能。
本书针对那些想要超越单线程和内存限制的R程序员,使其从中学习如何实现大规模高效算法,这是对大数据高性能处理的必要条件。

通过阅读本书,你将学到:
运用R语言中内置的并行包来建立和构造高效的负载均衡并行计算
从R语言中开发和使用云计算的并行架构,包括启动一个在亚马逊Web服务运行的Hadoop分布式计算
使用RMPI、pbdMPI和SPRINT包开发复杂并行算法和标准消息传递接口
用自己的MPI的路径构建和扩展并行R包(SPRINT)
用带有OpenCL的图形处理单元(GPU)的向量处理能力,执行R语言中的加速数值函数
理解并行编程陷阱,如死锁、数值不稳定性,以及处理和避免它们的方法
建立一个任务的工作和管理模式,例如空间网格和混合并行R语言程序

内容简介
本书是一本构建大规模高效算法的综合实用指南。书中介绍了并行计算的方方面面,不仅涵盖从单程序多数据(SPMD)到单指令多数据(SIMD)向量处理,包括应用R添加包parallel来利用R内置的多核功能、用消息传递接口(MPI)进行消息传递、用OpenCL处理基于通用GPU(GPGPU)的并行性,还探讨了并行性的不同框架方法,从利用任务分配的负载平衡到网格空间处理。此外,还通过Hadoop详细介绍云计算中更通用的批量数据处理,以及集群计算中的热门新技术Apache Spark。
全书共6章,第1章简单介绍如何利用R的并行版本lapply()来开发笔记本电脑的多核处理功能。第2章涵盖标准的消息传递接口(MPI),它是实现高级并行算法的关键技术。第3章通过开发一个详实的Rmpi工作示例来完成MPI过程,说明如何使用非阻塞通信和局部信息交换模式,这是实现空间网格并行所必需的。第4章介绍在真实超级计算机上运行并行代码的经验。第5章说明如何通过ROpenCL添加包直接应用笔记本电脑的图形处理单元(GPU)的大规模并行和向量处理能力。第6章介绍并行编程及其性能的科学原理,通过强调想要避免的潜在陷阱来讲述最好的实践艺术,并初步展望并行计算系统的未来。


作者简介

西蒙 R. 查普尔(Simon R. Chapple) 
经验丰富的方案架构师和软件工程师,从事数据分析和医疗信息系统解决方案和应用的开发达25年之久。他也是超级计算机HPC和大数据处理方面的专家。Simon是Datalytics科技有限公司的首席技术官和管理合伙人,带领一个团队正在建设下一代大规模数据分析平台,该平台建立在一组由高性能工具、框架和系统所构成的可定制的工具集合基础上,可以使数据采集、分析以及呈现的整个实时处理周期,轻松地部署到任何已有的IT操作环境中。
伊丽·特鲁普(Eilidh Troup) 
爱丁堡大学EPCC聘用的应用顾问。她拥有Glasgow大学的遗传学学位,现在专注于为广大用户提供高性能计算,尤其是生物学家。Eilidh致力于各种软件项目,包括为基于网络的科学数据存储库提供简单的并行R接口(SPRINT)和SEEK。
托斯顿·福斯特(Thorsten Forster)
爱丁堡大学的数据科学研究员。他具有统计学和计算机科学的背景,并获得了生物医学科学博士学位,在这些交叉学科研究方面拥有10年多的经验。
特伦斯·斯隆(Terence Sloan)
爱丁堡大学高性能计算中心EPCC的软件开发小组经理。他在苏格兰中小企业、英国公司以及欧洲和全球合作方面拥有超过25年的管理和参与数据科学和高性能计算项目的经验。

图书前言

我们正处于信息爆炸时代。从个人到全世界,生活中的一切都变得越来越与物联网实时关联。据预测,到2020年,世界上的数据将超过现在的10倍,达到惊人的44泽字节(1泽字节相当于2500亿张DVD)。为了解决大数据的规模和速度问题,我们需要巨大的计算、内存和磁盘资源,而为此就需要并行计算。
尽管使用的时间不长,但R作为一种开源统计编程语言,逐渐成为人们分析数据的关键基础技术之一。我敢说R现在是“数据科学家”的主流编程语言之一。
当然,数据科学家可能会部署许多其他工具来处理大数据的一些困难问题,如Python、SAS、SPSS或MATLAB。然而,自从1997年以来,随着开源语言的深入发展,R语言非常流行,在20年中开发了许多存放于CRAN镜像站点的R添加包,这些添加包适用于几乎所有形式的数据分析,从小型数值矩阵到庞大的符号数据集,如生物分子DNA。事实上,我认为R语言正成为“事实上”的数据科学脚本语言,它可以融合许多不同类型的高度复杂数据的分析方法。
R语言自身总是按照单线程来实现的,而且其原有的程序设计并没有应用并行机制。然而,为了达到某些功能的并行目的以及使用并行处理框架,R语言需要借助于某些特别开发的外部添加包。我们将重点关注一些目前技术范围内可用的最好的并行算法。
在本书中,我们将介绍并行计算的各个方面,从单程序多数据(SPMD)到单指令多数据(SIMD)向量处理,包括用R添加包parallel来利用R内置的多核功能、用消息传递接口(MPI)进行消息传递、用OpenCL处理通用GPU(GPGPU)的并行性。我们还将探讨并行性的不同框架方法,从利用任务分配的负载均衡到网格空间处理。我们将通过Hadoop了解云计算中更通用的批量数据处理,以及集群计算中的热门新技术Apache Spark,它更适合大规模的实时数据处理。
我们甚至会探索如何使用真正的数百万英镑的超级计算机。是的,我知道你可能没有这样的计算机,但是在本书中,我们会告诉你如何使用它,以及并行计算的效果。说不定,随着知识的更新,你可以来到当地的超级计算机中心,并说服他们让你进行一些大规模的并行计算!
本书中展示的所有编码示例都具有原创性,选择这些示例的原因是为了不复制其他书中可能遇到的例子。亲爱的读者,选择这些代码的原因是希望能让你与普通读者有一点不同。作为作者,我们非常希望你享受这个过程。
本书内容
第1章快速地展示如何利用R的并行版本lapply()来开发笔记本电脑的多核处理功能。我们也通过亚马逊网络服务简要介绍云计算的巨大运行能力。
第2章涵盖标准的消息传递接口(MPI),它是实现高级并行算法的关键技术。在本章中,你将学习如何使用两个不同的R MPI添加包Rmpi和pbdMPI以及底层通信子系统的OpenMPI实现。
第3章通过开发一个详细的Rmpi工作示例完成MPI过程,说明如何使用非阻塞通信和局部进程间消息交换模式,这是实现空间网格并行所必需的。
第4章介绍在真实的超级计算机上运行并行代码的经验。本章还详细介绍开发SPRINT的过程,即一个用C语言编写的可以在笔记本电脑以及超级计算机上运行的并行计算的R包。此外,还说明如何使用自己本地编码的高性能并行算法扩展此添加包,并使其可访问R。
第5章展示如何通过ROpenCL添加包直接应用笔记本电脑的图形处理单元(GPU)的大规模并行和向量处理能力,该添加包是开放式计算语言OpenCL的一个R包装。
第6章介绍并行编程及其性能的科学原理,通过强调想要避免的潜在陷阱来讲述最好的实践艺术,并初步展望了并行计算系统的未来。
在线章节“Apache Spa-R-k”介绍了Apache Spark,现在它成为继Hadoop之后最流行的分布式存储大数据的并行计算环境。你将学习如何设置和安装Spark集群,以及如何直接从R中利用Spark自己的数据框提取。
这一章可以在Packt出版社的主页上下载:https://www.packtpub.com/sites/default/files/downloads/B03974_BonusChapter.pdf。
不需要从头到尾依次阅读本书,大多数情况下,每一章节都是可以独立阅读的。
阅读准备
要运行本书中的代码,你需要一个最新配置的多核笔记本电脑或台式计算机。你还需要一个合适带宽的网络连接,用于从CRAN(R包的主要在线存储库)下载R和各种R代码库。
本书中的例子主要使用RStudio 0.98. 1062、64位R 3.1.0(CRAN发行版)开发,运行于2014年发行的Apple MacBook Pro OS X 10.9.4(具有2.6 GHz Intel Core i5处理器和16 GB内存)。当然,所有这些例子也应该适用最新版本的R。
本书中的一些示例将无法使用Microsoft Windows运行,但是它们应该可以在Linux的其他版本上运行。每章将详细介绍所需的额外的外部库或运行时的系统要求,并提供有关如何访问和安装它们的信息。
读者人群
本书适用于中高级R开发人员,使之掌握利用并行计算功能来执行长时间运行的计算,并分析大量数据。你需要具有一定的R编程知识,并且是一个能力强大的程序员,这样你可以阅读和理解低级语言(如C/C++),并熟悉代码编译过程。你可以认为自己是新型数据科学家,即—个熟练的程序员和数学家。
本书约定
在本书中,你会发现一些区分不同信息的文本样式。以下是这些样式的一些例子及其含义。
代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter句柄如下所示:“注意使用mpi.cart.create(),它从一组现有的MPI进程映射构造了一个笛卡儿秩/网格。”
代码段如下:

当我们希望注意到代码段的特定部分时,相关行或条目将加粗:

任何命令行输入或输出如下所示:

新术语和重要词都以黑体显示。
表示警告或重要提示。
表示提示和技巧。
下载示例代码
可以从http://www.packtpub.com通过个人账号下载你所购买书籍的示例源码。如果你是从其他途径购买的,可以访问http://www.packtpub.com/support,完成账号注册,就可以直接通过邮件方式获得相关文件。
你也可以访问华章网站http://www.hzbook.com,通过注册并登录个人账号,下载本书的源代码。
下载书中彩图
我们还提供了一个PDF文件,其中包含本书中使用的截图和彩图,以帮助读者更好地了解输出的变化。文件可以从以下地址下载:http://www.packtpub.com/sites/default/files/downloads/MasteringParallelProgrammingwithR_ColorImages.pdf。

上架指导

计算机\程序设计

封底文字

R语言是数据科学中最流行的编程语言之一。本书是一本构建大规模高效算法的综合实用指南,涵盖各种并行技术,从R语言的并行版本lapply()的简单应用到基于Hadoop和Apache Spark框架的高级AWS云。此外,本书还介绍了影响并行效率的因素(包括评估代码性能和实现负载平衡),以及要避免的陷阱(包括死锁和数值不稳定问题);并且还详细阐释如何为最适合的并行类型构建代码和数据,如何在各种计算机系统中运行R代码获取最佳性能。
本书针对那些想要超越单线程和内存限制的R程序员,使其从中学习如何实现大规模高效算法,这是对大数据高性能处理的必要条件。

通过阅读本书,你将学到:
·运用R语言中内置的并行包来建立和构造高效的负载均衡并行计算
·从R语言中开发和使用云计算的并行架构,包括启动一个在亚马逊Web服务运行的Hadoop分布式计算
·使用RMPI、pbdMPI和SPRINT包开发复杂并行算法和标准消息传递接口
·用自己的MPI的路径构建和扩展并行R包(SPRINT)
·用带有OpenCL的图形处理单元(GPU)的向量处理能力,执行R语言中的加速数值函数
·理解并行编程陷阱,如死锁、数值不稳定性,以及处理和避免它们的方法
·建立一个任务的工作和管理模式,例如空间网格和混合并行R语言程序

译者序

并行计算是一种通过执行多条指令来解决大型复杂计算问题的有效算法,可以显著提高计算机系统的计算速度和处理能力。R语言是目前非常流行的一种开源程序语言,在统计学和生物学等学科中得到了广泛应用。本书成功地借助于R语言实现了并行计算的多种有效算法,并且通过案例分析了如何运用R语言执行并行计算。同时详细介绍了并行计算中的R程序包的使用,如SPRINT包提供了一套从R中调用并行计算的MPI函数。全书案例简单易懂,程序翔实,叙述清晰。本书4位作者都是计算机专业的资深专家和学者,从事并行计算多年,发表了众多优秀成果。本书的引进有益于读者运用R语言进行并行计算的研究,读者可以结合实际应用来学习本书中讨论的算法和模型。
本书的翻译得到了国家自然科学基金(项目编号71461005)和广西高校数据分析与计算重点实验室的资助。特别感谢桂林电子科技大学研究生姚家进、郭梦菲、秦文哲在翻译本书中所做的出色工作。
由于时间和水平所限,难免会有不当之处,希望同行和读者多加指正和批评。

图书目录

译者序
前言
关于作者
第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 安装segue24
1.3.2 设置AWS账户25
1.3.3 运行segue27
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 安装OpenMPI38
2.2 MPI标准39
2.2.1 MPI的世界39
2.2.2 安装Rmpi40
2.2.3 安装pbdMPI41
2.3 MPI API43
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 关于ARCHER91
4.2 从R中调用MPI代码92
4.2.1 MPI Hello World92
4.2.2 从R中调用C94
4.3 建立一个MPI R包—SPRINT97
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.R102
4.4.3 添加接口函数—phello.c103
4.4.4 添加实现函数—hello.c105
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 OpenCL133
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

教学资源推荐
作者: [美] 本贾尼?斯特劳斯特鲁普 (Bjarne Stroustrup)著
作者: [英] 约翰·M. 斯图尔特(John M. Stewart) 著
参考读物推荐
作者: 李向军 著
作者: Phil Ballard, Michael Moncur
作者: (美)Peter C.Dibble