首页> 中国专利> 在交互式R语言平台中进行并行线性代数计算的方法

在交互式R语言平台中进行并行线性代数计算的方法

摘要

本发明公开了一种基于交互式R语言平台的并行化线性代数计算的方法,包括以下步骤:提供两个计算平台,一个是交互式R语言平台,另外一个是并行线性代数计算平台,两个计算平台通过计算机网络进行通信;然后在交互式R语言平台中,设计实现一个并行线性代数计算的应用程序接口;最后在并行线性代数计算的应用程序接口的分布式矩阵类中,包含一个R环境类型的成员变量,并在分布式矩阵类的对象的初始化过程中,通过R语言的reg.finalizer函数向交互式R语言平台的垃圾回收器注册该成员变量的垃圾回收响应方式。本发明解决了现有的交互式R语言编程平台无法进行并行线性代数计算的不足,扩展了交互式R语言平台的计算能力。

著录项

  • 公开/公告号CN105389220A

    专利类型发明专利

  • 公开/公告日2016-03-09

    原文格式PDF

  • 申请/专利权人 南京大学;

    申请/专利号CN201510755923.2

  • 发明设计人 黄宜华;王肇康;顾荣;樊士庆;

    申请日2015-11-09

  • 分类号

  • 代理机构苏州威世朋知识产权代理事务所(普通合伙);

  • 代理人杨林洁

  • 地址 210093 江苏省南京市汉口路22号

  • 入库时间 2023-12-18 14:45:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-02-15

    授权

    授权

  • 2019-01-18

    著录事项变更 IPC(主分类):G06F9/54 变更前: 变更后: 申请日:20151109

    著录事项变更

  • 2016-04-06

    实质审查的生效 IPC(主分类):G06F9/54 申请日:20151109

    实质审查的生效

  • 2016-03-09

    公开

    公开

说明书

技术领域

本发明涉及并行计算技术,尤其涉及一种能在交互式(interactive)R语言平台中进行并行线性代数计算的方法。

背景技术

R语言是数据科学领域中应用广泛的一种程序设计语言。R语言为计算机用户提供了大量常用的统计计算函数,并且支持用户自己编写程序对R语言的功能进行扩展。R语言本身提供了一组程序函数库,他们构成了原始的R语言平台。用户可以自己编写程序对R语言进行扩展,用户编写的程序一般以R语言软件包的形式扩充到R语言平台中。R语言以函数式编程为主要编程范式,同时支持面向对象程序设计等现代程序设计方法。

R语言平台同时支持批处理(batch)运行和交互式(interactive)运行两种运行方式。交互式运行方式为计算机用户提供了一个交互式的命令行控制台,用户可以交互地向R平台中输入指令,R语言平台根据指令进行计算并对用户进行应答。交互式的运行方式允许用户一边设计、一边调整,近实时地获得反馈,使错误和不足之处及时得到改正和补充,方便了R语言程序的开发过程,广受数据科学家的欢迎。根据美国O’Reilly出版社和的KDNuggets网站的调查,R语言在数据科学家社群中被广泛使用。由于R语言平台最初是为单计算机环境设计的,因此基本的R语言平台本身无法充分利用多个处理器(CPU)或者多台计算机提供的并行计算能力。在数据规模越来越大的大数据时代,基本的R语言平台受限于单计算机的计算能力而无法处理大规模数据分析任务。基本的R语言平台处理能力受限的一个主要表现就是:基本的R语言平台无法处理大规模的线性代数计算问题(例如大规模矩阵乘法)。如何扩展基本的R语言平台使其能进行大规模线性代数计算,已成为计算技术领域一个需要解决的重要问题。而目前大规模线性代数计算主要是通过并行计算技术的手段解决。

在另一方面,现有的基于消息传递接口(MPI)的并行计算技术,能够解决大规模线性代数计算问题。基于消息传递接口(MPI)技术的软件库ScaLAPACK提供了一组应用程序接口(API)函数,覆盖了大部分的线性代数计算需求。ScaLAPACK软件库通过使用MPI并行计算技术,突破了单计算机计算能力的限制,能够充分利用多台计算机的计算能力。目前已有pbdR项目(该项目的网址为http://r-pbd.org/)利用ScaLAPACK软件库对R语言平台进行功能扩展,使R语言用户可以进行并行线性代数计算。但是基于ScaLAPACK软件库编写的或者基于pbdR项目编写的程序只能以批处理的方式运行,他们无法直接运行于交互式R语言平台中。这种限制使得交互式R语言平台的用户无法利用ScaLAPACK库、pbdR项目进行大规模的并行线性代数计算。目前尚无方法可以在交互式R语言平台中进行并行线性代数计算。

发明内容

发明目的:为了克服现有的交互式R语言平台中无法进行并行线性代数计算的不足,本发明提供了一种扩展交互式R语言平台的方法,该方法使用户可以在交互式R语言平台中进行并行线性代数计算,而无需了解并行线性代数计算的具体实现细节,解决了现有的交互式R语言编程平台无法进行并行线性代数计算的不足,扩展了交互式R的计算能力。

本发明的技术解决方案是:为了实现上述发明目的,本发明采用的技术方案为一种基于客户端-服务器(Client-Server)模型的计算方法,该方法将交互式计算平台与并行线性代数计算平台在结构上相分离,通过计算机网络通信实现两个平台的协同计算。整个技术方案包括以下步骤:

(1)本发明的方法提供两个计算平台,一个是交互式R语言平台,另外一个是并行线性代数计算平台,两个计算平台通过计算机网络进行通信、协同计算;

(2)在交互式R语言平台中,定义一个分布式矩阵类,该类提供了可以交互式运行的并行线性代数计算的应用程序接口;

(3)在分布式矩阵类中,包含一个R环境(environment)类型的成员变量;

(4)为分布式矩阵类中R环境类型的成员变量注册垃圾回收响应函数。

进一步地,在所述步骤(1)中的两个计算平台分别是:一、交互式R语言平台,该平台为一个标准的交互式R语言平台,该交互式R语言平台加载有本发明实现的扩展软件包,并且直接与计算机用户进行交互;二、并行线性代数计算平台,该计算平台是一个基于MPI(消息传递接口)技术和ScaLAPACK软件库的、实现了并行线性代数计算功能的计算平台。两个计算平台通过计算机网络互相通信。交互式R语言平台从计算机用户处接受交互式计算命令,并向并行线性代数计算平台发送对应的计算指令,后者进行具体的并行线性代数计算并将计算结果返回给交互式R语言平台,并由交互式R语言平台将结果反馈给计算机用户。

进一步地,所述步骤(2)中“分布式矩阵类”指的是一个R语言的S3类或者是S4类。该类使用R语言编写,并被加载到交互式R语言平台中,供用户使用。该分布式矩阵类提供了一组用于并行线性代数计算的R语言函数,用户通过在该分布式矩阵类的对象上调用相应的计算函数,来完成并行线性代数计算任务。

进一步地,所述步骤(3)中指出了“分布式矩阵类”应该包含一个特殊的成员变量,该成员变量的类型是R环境(environment)类型。该成员变量的主要功能是:当交互式R语言平台中的垃圾回收器对分布式矩阵类的对象进行回收时,垃圾回收器通过该成员变量注册的响应函数,通知并行线性代数计算平台,对相应的矩阵数据同步地进行删除。

进一步地,所述步骤(4)中,注册垃圾回收响应函数的过程是在分布式矩阵类的构造函数中完成的,通过R语言本身的reg.finalizer函数来实现。

本发明的有益效果是:(1)通过将交互式R语言平台和并行线性代数计算平台相分离,使两者能以不同的运行方式同时运行。通过计算机网络通信,使交互式R语言平台能够调用并行线性代数计算平台提供的功能,而不丧失其交互性。本发明解决了不能在交互式R语言平台中进行并行线性代数计算的问题。(2)通过将所有并行线性代数计算函数包装在一个分布式矩阵类当中,本发明在交互式R语言平台中提供了一个用户友好的使用界面。计算机用户可以像操作传统R语言单机矩阵一般操作分布式矩阵,来进行并行线性代数计算。本发明编写的R语言计算代码与原生R语言计算代码保持高度一致,减轻了计算机用户在使用本发明时的学习成本。(3)本发明通过R语言的reg.finalizer函数向垃圾回收器注册垃圾回收响应函数,解决了交互式R语言平台的垃圾回收与并行线性代数计算平台的垃圾回收的同步问题。同时本发明使用的技术方案避免了同类技术中需要使用C语言进行编程的问题,使得本发明可以全部以R语言编程实现,降低了整个技术方案的实现复杂度。(4)在使用本发明扩展交互式R语言平台之后,交互式R语言平台能够突破单计算机的处理能力限制,而进行更大规模的线性代数计算。

附图说明

图1是本发明的整体处理流程示意图。

图2是本发明与标准R语言平台提供的单机线性代数计算系统的性能对比图。

具体实施方式

下面结合附图和具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。

本发明的技术方案主要由两个软件模块组成:一个是交互式的R语言平台,另外一个是并行线性代数计算平台。交互式R语言平台是一个标准的R语言计算平台,来自于RProject项目的实现(项目网址为https://www.r-project.org/),这个软件不属于本发明内容。而并行线性代数计算平台则是一个满足如下特征的计算平台:(1)该计算平台可以通过计算机网络接收计算指令,并能够解析指令,执行相应的并行线性代数计算任务;(2)该平台可以分布式地存储矩阵数据;(3)该计算平台通过MPI(消息传递接口)技术和ScaLAPACK软件库进行并行线性代数计算(MPI技术和ScaLAPACK软件库不属于本发明内容,本发明说明书中所提“ScaLAPACK软件库”均代指“与ScaLAPACK应用程序接口标准兼容的软件库”);(4)该计算平台能通过计算机网络将计算结果或者计算结果的标识符返回给计算指令发出者。全部满足上述4个特征的计算平台均可被认为是符合本发明技术特征的并行线性代数计算平台。

用户使用本发明进行并行线性代数计算的具体流程如图1所示。交互式的R语言平台直接与最终的计算机用户进行交互,接收用户给予的指令,执行计算,并将计算结果通过计算机屏幕返回给用户。对于用户下达的并行线性代数计算指令,交互式R语言平台通过计算机网络,将该指令发送给并行线性代数计算平台,由并行线性代数计算平台通过ScaLAPACK软件库执行计算操作,并将计算结果通过计算机网络返回给交互式R语言平台,最终由交互式R语言平台将结果返回给计算机用户。

本发明涉及的两个计算平台的初始化启动流程包括以下步骤:

(1)用户在其计算机上启动一个交互式的R语言平台;

(2)用户在交互式R语言平台中装载按本发明技术方案实现的R软件包,并向交互式R语言平台发出启动并行线性代数计算的指令;

(3)交互式R语言平台通过MPI技术的作业控制机制,启动并行线性代数计算平台对应的MPI作业;

(4)并行线性代数计算平台启动后,交互式R语言平台与并行线性代数计算平台的主计算节点建立计算机网络通讯链接;

(5)交互式R语言平台创建一个空队列作为全局垃圾回收队列,然后通知计算机用户本发明所述的软件语言平台装载完毕,交互式R语言平台进入等待指令阶段;

(6)用户通过交互式R语言平台执行并行线性代数计算任务。

用户在交互式R语言平台中,不直接面向ScaLAPACK库和MPI技术进行编程使用,而是面向本发明提供的分布式矩阵类进行编程实现。本发明的分布式矩阵类的实施方式为:首先,在R语言中使用一个S3类或者S4类定义该分布式矩阵类,然后通过编程的方式为该类提供具体的成员变量;该类的成员变量包括:(1)远程矩阵标识符变量,该标识符在R语言中的类型可以是整数或者字符串,只要能区分不同远程矩阵即可,(2)一个R环境(environment)类型的变量,该变量用于分布式矩阵对象的垃圾回收;接着,通过R语言面向对象程序设计机制,为该类提供若干成员函数,并重载R语言已有的线性代数计算函数,使这些计算函数支持分布式矩阵类。

在每个分布式矩阵类的成员函数或者是线性代数计算函数中,完成具体的并行线性代数计算任务的步骤为:

(1)交互式R语言平台从函数调用参数中,读取参与计算的分布式矩阵类对象的远程矩阵标识符;

(2)交互式R语言平台将本次线性代数计算操作对应的计算指令,以及所有参与计算的远程矩阵标识符、全局垃圾回收队列,通过计算机网络传递给并行线性代数计算平台;

(3)并行线性代数计算平台接收相应的计算指令以及参与计算的远程矩阵标识符、全局垃圾回收队列。并行线性代数计算平台接着从全局垃圾回收队列中读取出其保存的垃圾远程矩阵标识符,然后从计算平台中删除这些垃圾远程矩阵标识符对应的矩阵数据。并行线性代数计算平台接着解析计算指令,并根据参与计算的远程矩阵标识符,从内存中取出保存在该计算平台中的分布式矩阵操作句柄;

(4)并行线性代数计算平台通过上一步中取出的分布式矩阵操作句柄和ScaLAPACK库进行并行线性代数计算;

(5)并行线性代数计算平台保存本次计算产生的结果,该结果为一个分布式矩阵,并为结果分布式矩阵分配远程矩阵标识符;

(6)并行线性代数计算平台将上一步生成的远程矩阵标识符包装到回复指令中,通过计算机网络发送给交互式R语言平台;

(7)交互式R语言平台接收并行线性代数计算平台发回的回复指令,从中取出远程矩阵标识符,利用该标识符初始化一个新的分布式矩阵类的对象,并将该对象返回给用户。用户可以使用返回的分布式矩阵类的对象,进行其他的计算任务。

在使用R语言定义分布式矩阵类时,需要提供一个初始化构造函数,使交互式R语言平台能正确处理分布式矩阵类的对象的垃圾回收问题。分布式矩阵类的初始化构造函数的工作流程包含以下步骤:

(1)在计算机内存中,初始化构造函数接收一个远程矩阵标识符作为该函数的输入参数;

(2)初始化构造函数在内存中新建一个空的分布式矩阵对象;

(3)初始化构造函数利用输入参数中的远程矩阵标识符初始化步骤(1)中新建的分布式矩阵对象的远程矩阵标识符成员变量;

(4)为步骤(1)中新建的分布式矩阵对象创建一个新的R环境(environment)类型的成员变量,并且将输入参数中的远程矩阵标识符存入该R环境类型的成员变量中;

(5)通过R语言的reg.finalizer函数,将第(4)步中所述的R环境类型成员变量在交互式R语言平台的垃圾回收器中进行注册,将该R环境类型成员变量与一个自定义的垃圾回收响应函数进行关联;

(6)将在步骤(1)中创建的、又经过上述步骤处理的分布式矩阵对象,作为构造函数的返回值返回。

进一步地,在上述分布式矩阵类的初始化构造函数的工作流程中的第(5)步,提到了一个自定义的垃圾回收响应函数,该函数的工作流程包含以下步骤:

(1)自定义的垃圾回收响应函数接收一个R环境类型变量作为输入参数;

(2)响应函数从R环境类型变量中读出远程矩阵标识符,将该标识符加入到全局垃圾回收队列中。

本发明的有益效果是,使计算机用户可以在交互式R语言平台中进行并行线性代数计算;通过多台计算机并行计算的方式,本发明可以让用户在交互式R语言平台中处理大规模线性代数计算问题时,获得比单机线性代数计算更快的计算速度。本发明基于已有的一些开源软件实现了一个原型系统。根据本发明的技术方案要求,原型系统包括两个计算平台,其中交互式R语言平台使用RProject项目提供的交互式R语言平台,而并行线性代数计算平台则是根据本发明的技术方案开发的一个原型计算平台,在开发中使用了pbdR项目(项目主页http://r-pbd.org/)提供的软件。RProject项目和pbdR项目提供的软件不属于本发明的内容。另外根据本发明的技术方案,原型系统中还包括一个运行于交互式R语言平台的分布式矩阵类。通过使用矩阵乘法操作(一种线性代数计算操作)作为基准测试,对本发明实现的原型软件系统和现有的R语言平台提供的单机线性代数计算系统进行了测试,评测使用计算耗时作为度量指标。评测中,本发明实现的原型软件系统使用了10台计算机进行并行计算,而现有的R语言平台提供的单机线性代数计算系统则受限于其功能,只能够使用单台计算机进行计算。评测的结果参见图2。在图2中,实线表示本发明实现的原型软件系统的评测结果,虚线表示现有的R语言平台提供的单机线性计算系统的评测结果。随着参加计算的矩阵规模的增大,本发明实现的原型软件系统在完成相同的计算任务时,所耗时间比前文所述的单机线性代数计算系统要少。评测表明本发明实现的原型软件系统在进行大规模矩阵乘法操作时,计算耗时更短、计算速度更快,证明了本发明提出的方法的有效性,验证了本发明的有益效果。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号