本书是一本构建大规模高效算法的综合性实用书籍,介绍各种并行技术,从R语言的并行版本lapply()的简单应用到基于Hadoop和ApacheSpark框架的高级AWS云。在本书的后,你将了解到影响并行效率的因素,包括:评估代码性能和实现负载平衡;要避免的陷阱,包括死锁和数值不稳定问题;对于你的项目,如何为适合的并行类型构建代码和数据;如何在各种计算机系统中运行R代码获取佳性能。本书针对那些想要单线程和内存限制的R程序员,使其从中学习如何实现高效大规模算法,这是对大数据高性能处理的必要条件。
About the Authors 关于作者西蒙R. 查普尔(Simon R. Chapple)是一位经验丰富的解决方案架构师和首席软件工程师,从事数据分析和医疗信息系统解决方案和应用的开发超过25年。他也是超级计算机HPC和大数据处理方面的专家。
Simon是Datalytics科技有限公司的首席技术官和管理合伙人,带领一个团队建设下一代大规模数据分析平台,该平台建立在一组由高性能工具、框架和系统所构成的可定制的工具集合基础上,可以使从数据采集、分析到呈现的整个实时处理周期,轻松地部署到任何已有的IT操作环境中。
此前,他在Aridhia信息公司担任产品创新总监,为苏格兰的医疗服务供应商建立了多个新系统,包括为苏格兰18周转诊治疗和癌症患者的管理而提供的一体化病人路径跟踪系统,该系统应用了10个单独数据系统的集成(减少病人等待时间,从而提供好的服务)。他还利用公共云托管监测系统,为实时化疗患者建立了专门的移动系统,该系统在澳大利亚进行了临床试验,受到护士和病人的高度赞扬,“就像在你的起居室里有一位护士……希望所有的化疗病人每天都有天使般的安全舒适的护理环境。”
Simon也是ROpenCL开源软件包的作者之一,该添加包使得用R编写的统计程序可以应用图形加速器芯片中的并行计算能力。
对于SPRINT这一章,我特别要感谢爱丁堡并行计算中心的同事以及本书审阅者Willem Ligtenberg、Joe McKavanagh和Steven Sanderson,谢谢他们的积极反馈。我还要感谢Packt出版社的编辑团队为本书的终出版付出的辛勤劳动。感谢我的妻子和儿子的理解,他们给我珍贵的时间使我成为一名作者,谨以此书献给我爱的Heather和Adam。
伊丽·特鲁普(Eilidh Troup)是爱丁堡大学EPCC的应用顾问。她拥有Glasgow大学的遗传学学位,现在专注于为广大用户尤其是生物学家提供高性能计算。Eilidh致力于各种软件项目,包括为基于网络的科学数据存储库提供简单的并行R接口(SPRINT)和SEEK。
托斯顿·福斯特(Thorsten Forster)是爱丁堡大学的数据科学研究员。他具有统计学和计算机科学背景,并获得了生物医学科学博士学位,在这些交叉学科研究方面拥有超过10年的经验。
Thorsten利用统计学和机器学习(如微阵列和下一代测序)研究生物医学的大数据分析方法,他曾经是SPRINT项目的项目经理,该项目的目标是允许潜在用户使用R统计编程语言对大型生物数据集应用并行分析解决方案。他还是Fios Genomics公司的联合创始人,该公司是一家大学孵化的提供生物医学大数据研究的数据分析服务公司。
目前,Thorsten的工作是设计用于诊断新生儿细菌感染的基因转移分类器、分析巨噬细胞干扰素激活的转移谱、调查胆固醇对感染免疫的作用,以及研究导致儿童气喘的基因因素。
Thorsten的完整资料可以在上获得。
特伦斯·斯隆(Terence Sloan)是爱丁堡大学高性能计算中心EPCC的软件开发小组经理。他在苏格兰中小企业、英国公司以及欧洲和全球合作方面拥有超过25年的管理和参与数据科学和高性能计算项目的经验。
Terry获得过Wellcome Trust(基金号086696/Z/08/Z)、BBSRC(基金号BB/J019283/1)研究基金,以及帮助开发R语言SPRINT添加包的3个EPSRC分布式计算科学基金。他在使用行为大数据进行客户行为分析方面获得过ESRC奖(获奖号RES-189-25-0066、RES-149-25-0005)。
Terry是爱丁堡大学HPC数据科学硕士项目的HPC数据分析、项目准备和论文课程的责任人。
我要感谢Alan Simpson博士,他是EPCC的技术总监、ARCHER超级计算机的计算科学和工程总监,感谢他支持SPRINT的开发及其在英国国家超级计算机上的应用。
译者序
前言
关于作者
第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
前 言 Preface
我们正处于信息爆炸时代。从个人到全世界,生活中的一切都变得越来越与物联网实时关联。据预测,到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出版社的主页上下载:。
不需要从头到尾依次阅读本书,大多数情况下,每一章节都是可以独立阅读的。
阅读准备要运行本书中的代码,你需要一个最新配置的多核笔记本电脑或台式计算机。你还需要一个合适带宽的网络连接,用于从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++),并熟悉代码编译过程。你可以认为自己是新型数据科学家,即—个熟练的程序员和数学家。
这本书的价值,绝不仅仅在于提供了几段能够加速R代码的“黑魔法”。它更像是一门关于“如何高效利用计算资源”的哲学课。在阅读之前,我常常因为R语言在处理大规模数据集时的性能瓶颈而感到沮丧。这本书就像一位经验丰富的导师,手把手地教我如何驯服我的计算机,让它成为我解决复杂问题的得力助手。作者在讲解并行计算的基本原理时,运用了大量形象生动的比喻,让我这个非计算机科学科班出身的读者也能轻松理解诸如“分而治之”、“协同工作”等核心概念。更重要的是,这本书并没有停留在理论层面,而是将这些理论与R语言中具体的库和函数紧密结合。我惊喜地发现,原来只需要几行代码的修改,我原本需要花费数小时才能跑完的分析任务,现在可以在短短几分钟内完成。书中对于不同并行模式的对比分析,例如线程并行、进程并行以及分布式并行,让我能够根据实际需求,选择最适合的解决方案。我尤其赞赏作者在讲解如何处理并行计算中的“副作用”和“竞态条件”等棘手问题时,所展现出的细致和耐心。通过书中提供的调试技巧和最佳实践,我学会了如何避免这些潜在的陷阱,从而编写出更加健壮和可靠的并行程序。这本书不仅仅是一本技术手册,它更是一次思维的启迪,让我对计算的本质有了更深的理解。
评分坦白说,在翻开《R并行编程实战》之前,我对“并行编程”这个词汇的理解,更多停留在“让程序跑得更快”这个笼统的概念上。然而,这本书彻底改变了我的认知。作者以一种近乎“庖丁解牛”的精妙手法,将并行编程的内在逻辑、核心算法和在R语言中的具体实现娓娓道来。我尤其欣赏作者在理论讲解和实践操作之间的完美平衡。他没有回避并行编程中存在的复杂性,例如任务划分、负载均衡、数据依赖性以及线程安全等问题,而是通过一系列精心设计的实验和案例,让读者在实际操作中去体会和解决这些挑战。书中对于不同并行模型的分析,从共享内存模型到分布式内存模型,都充满了真知灼见,并且清晰地指出了它们各自的适用场景和优缺点。我受益匪浅的是,作者不仅介绍了如何使用R语言自带的并行库,还深入探讨了如何与C++、Fortran等其他高性能计算语言集成,这为我处理更复杂、计算密集型的问题提供了更广阔的思路。书中的每一个代码片段都经过了严谨的测试和优化,并且附带了详尽的注释,这让我能够毫不费力地理解代码的意图和运行机制。这本书并非只是教我如何“使用”并行,而是让我理解“为什么”要这样做,以及“如何”做得更好。它让我从一个被动接受者,转变为一个能够主动思考、设计并实现高效并行计算方案的开发者。
评分在我看来,《R并行编程实战》这本书,是一部真正意义上的“实战手册”,它用最直观、最有效的方式,将并行编程的精髓呈现给了读者。在此之前,我常常因为R语言在处理海量数据时表现出的性能瓶颈而束手无策,每次面对耗时巨大的计算任务,都只能望而却步。这本书的出现,彻底改变了我的困境。作者的叙述风格非常独特,他仿佛是一位经验丰富的工程师,在循序渐进地引导我一步步攻克技术难关。书中对于各种并行计算模型,从线程并行到进程并行,再到分布式并行,都做了非常细致的梳理和比较,让我能够清晰地理解它们的内在机制和适用场景。我尤其欣赏作者在讲解如何进行任务分解和负载均衡时,所采用的生动比喻和精心设计的代码示例。这些示例不仅易于理解,而且可以直接应用到实际项目中,让我能够迅速体验到并行计算带来的速度提升。书中关于如何处理并行计算中的数据共享、同步和通信等关键问题,更是给了我极大的启发。作者通过大量的实例,教会了我如何避免潜在的错误,以及如何编写出高效、稳定的并行代码。总而言之,这本书不仅仅是教授我技术,更是培养我解决问题的能力。它让我从一个被动的使用者,转变为一个主动的设计者,能够自信地运用并行编程技术,应对更复杂、更具挑战性的数据分析任务。
评分这本书以其精炼的语言和深刻的洞察力,为我打开了R并行编程的全新视角。在接触这本书之前,我对并行计算的概念虽然有所耳闻,但实际应用起来总感觉隔靴搔痒,难以抓住核心。这本书的出现,如同一束明灯,照亮了我前行的道路。作者没有一开始就抛出复杂的理论,而是从实际应用场景出发,循序渐进地引导读者理解并行编程的必要性以及其在R语言中的实现方式。书中对各种并行策略的讲解,从fork/join模型到消息传递接口(MPI),再到OpenMP,都做到了深入浅出。尤其是对R语言内置并行库(如`parallel`包)的详细阐述,让我能够快速上手,将原本耗时巨大的数据处理任务在多核CPU上得到显著加速。书中丰富的代码示例,更是我学习过程中不可或缺的宝藏,它们不仅清晰地展示了理论的应用,更提供了可以直接拿来使用的模板。我印象深刻的是,作者在讲解如何处理并行计算中的数据同步和通信问题时,采用了非常直观的比喻和图示,使得原本抽象的概念变得易于理解。总的来说,这本书的叙述逻辑清晰,内容翔实,语言生动,对于任何希望提升R语言计算效率的开发者来说,都是一本不可多得的参考资料。它让我告别了漫长的等待,用更高效的方式解决了实际问题,极大地提升了我的工作效率和对R语言能力的信心。
评分《R并行编程实战》这本书,用一种非常“接地气”的方式,拆解了并行编程这个看似高深莫测的领域。我一直觉得,R语言虽然在数据分析方面十分强大,但有时候在处理超大规模数据时,速度确实是个令人头疼的问题。这本书的出现,恰好弥补了这一遗憾。作者没有一开始就堆砌大量的专业术语,而是从一个我非常熟悉的场景——“如何让我的R脚本跑得更快”——切入,让我瞬间产生了共鸣。我特别喜欢书中关于“任务分解”和“结果合并”的讲解,作者用非常直观的例子,比如分工合作完成一项大型工程,让我立刻明白了并行编程的核心思想。书中的代码示例非常贴近实际应用,我可以直接将它们套用到我的项目中,然后惊奇地发现,原本需要耐心等待很长时间的计算,现在几乎是瞬间完成。这让我对R语言的潜力有了全新的认识。此外,作者在讲解如何进行并行化优化时,还考虑到了实际操作中的各种细节,比如如何选择合适的并行策略,如何避免不必要的通信开销,以及如何进行性能调优等等。这些细节的讲解,对于像我这样的实践者来说,简直是如获至宝。这本书不仅仅是教授我“如何做”,更让我明白了“为什么这样做”,以及“这样做的好处是什么”。它让我在面对复杂数据和计算挑战时,不再感到束手无策,而是充满了信心和底气。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有