并行进程的共享内存

时间:2013-06-08 15:05:10

标签: r parallel-processing shared-memory

自从我最后一次看上去已经有一段时间了(例如过时的nws package),所以我想知道在此期间是否有任何“发生”。

有没有办法在并行进程之间共享内存?

我希望每个进程都能访问扮演元对象角色的environment对象。

3 个答案:

答案 0 :(得分:2)

rredis package提供与nws类似的功能。您可以将rredisforeachdoRedis包一起使用,也可以与任何其他并行编程包一起使用,例如parallel

答案 1 :(得分:1)

通过bigmemory包的共享矩阵可以非常有效地工作。您可以将每个R对象序列化/反序列化为此类矩阵。

不幸的是,你可以在进程之间共享矩阵的唯一方法是通过它们的描述符,这些描述符不是确定性的(即除非你与其他进程通信,否则你无法获得描述符)。要解决这个鸡蛋问题,您可以将描述符保存在文件系统上的选定位置。 (描述符非常小,它包含的唯一非常重要的东西是实际bigmatrx的内存地址)。

如果您仍然感兴趣,我可以发布R代码。

答案 2 :(得分:1)

您可以通过新的yaplr包有效地完成此操作。

首先安装

devtools::install_github('adamryczkowski/yaplr')

R会话编号1:

library(yaplr)
send_object(obj=1:10, tag='myobject')
# Server process spawned

R会话编号2:

library(yaplr)
list_objects()
#          size                    ctime
# myobject   62 Sat Sep 24 13:01:57 2016
retrieve_object(tag='myobject')
# [1]  1  2  3  4  5  6  7  8  9 10
remove_object('myobject')
quit_server()

程序包使用bigmemory::big.matrix进行有效的数据传输:在R进程之间复制大对象时,不会产生不必要的副本:只有一个序列化和一个反序列化。

没有使用网络套接字。