【发布时间】:2015-10-13 01:31:31
【问题描述】:
问题描述:
我有一个大矩阵c,加载到 RAM 内存中。我的目标是通过并行处理对其进行只读访问。但是,当我创建连接时,我使用 doSNOW、doMPI、big.matrix 等,使用的 ram 数量急剧增加。
有没有办法在不创建所有数据的本地副本的情况下正确创建所有进程都可以读取的共享内存?
例子:
libs<-function(libraries){# Installs missing libraries and then load them
for (lib in libraries){
if( !is.element(lib, .packages(all.available = TRUE)) ) {
install.packages(lib)
}
library(lib,character.only = TRUE)
}
}
libra<-list("foreach","parallel","doSNOW","bigmemory")
libs(libra)
#create a matrix of size 1GB aproximatelly
c<-matrix(runif(10000^2),10000,10000)
#convert it to bigmatrix
x<-as.big.matrix(c)
# get a description of the matrix
mdesc <- describe(x)
# Create the required connections
cl <- makeCluster(detectCores ())
registerDoSNOW(cl)
out<-foreach(linID = 1:10, .combine=c) %dopar% {
#load bigmemory
require(bigmemory)
# attach the matrix via shared memory??
m <- attach.big.matrix(mdesc)
#dummy expression to test data aquisition
c<-m[1,1]
}
closeAllConnections()
【问题讨论】:
-
我现在遇到了完全相同的问题,我对解决方案非常感兴趣。我还观察到复制而不是共享内存。
标签: r foreach parallel-processing r-bigmemory