我试图在R中使用并行程序包将四个不同的函数调用发送到四个不同的处理器,但实际上对于如何分配不同的内核来执行不同的工作而迷失了。我已经阅读了R中的并行程序包doParallel,Rmpi和foreach的文档。我已经看到许多使用mclapply调用具有相同参数的不同函数的文章。我想用不同的参数调用相同的函数。
这是我想要完成的伪代码:
BEGIN parallel (core)
if(core == 1)
foo(5, 4, 1/2, 3, "a")
if(core == 2)
foo(5, 3, 1/3, 1, "b")
if(core == 3)
foo(5, 4, 1/4, 1, "c")
if(core == 4)
foo(5, 2, 1/5, 0, "d")
END parallel
这似乎是并行计算的理想应用,因为这四个单独的函数调用可以独立起作用以解决我正在研究的问题。我不知道如何在R中执行此操作。
试试这个:
步骤0:设置集群和用户数据
library(parallel)
library(doParallel)
library(foreach)
cl <- makeCluster(4) # Assuming 4 node cluster
registerDoParallel(cl)
foo <- function(...) paste(...,collapse="-") # A dummy function:
(parDf <- data.frame(x1=5,x2=c(4,3,4,2),x3=1/(2:5),x4=3:0,x5=letters[1:4])) # Dummy parameters
parDf$x5 <- as.character(parDf$x5)
步骤1:查找每个节点的进程ID:
nodeNames <- foreach(i = 1:length(cl), .combine=c) %dopar% {
Sys.getpid()
}
步骤2:使用进程ID选择一组特定的参数:
foreach(i = 1:10, .combine=c) %dopar% {
paste(Sys.getpid(),foo(parDf[which(Sys.getpid()==nodeNames),]))
}
希望这可以帮助!!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句