假设我想在R中做一些正常的事情(在一个进程/线程中),如下所示:

for(i in 1:2) {
    for(j in 1:2) {
        #Do some stuff here
    }
}

在四核计算机上并行使用R的新软件包,我可以执行以下操作吗?
cluster<-makeCluster(4)

innerLoop<-function() {
   #Do some stuff here
}

outerLoop<-function() {
   result<-do.call(, parLapply(cluster, c(1:2), innerLoop))
}

final.result<-do.call(, parLapply(cluster, c(1:2), outerLoop))

R-2.14.0随附的并行软件包是否可以实现?

最佳答案

是的,你可以这么做。对于并行化的第一层,您必须使用分布式内存技术(如snow软件包中的makeCluster()),而在并行化的第二层中,您必须使用共享内存技术(多核软件包,mclapply())。

这是一个简单的代码示例:

library(parallel)

cl <- makeCluster(2)

inner <- function(x){
    pid <- Sys.getpid()
    name <- Sys.info()["nodename"]
    str <- paste("This is R running on", name, "with PID", pid, "!")
    return(str)
}

outer <- function(x, cores, funceval){
    require(parallel)
    mclapply(1:cores, funceval)
}

parLapply(cl, 1:length(cl), outer, 2, inner)

在输出中,您应该看到不同的机器名称和不同的PID!

关于r - 我可以嵌套parallel::: parLapply()吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8413188/

10-10 06:00