假设我想在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/