我有4种不同的功能,这些功能目前正在串行运行,但是却消耗大量时间。我的本地系统具有4个核心。如何在所有4个内核中并行运行这4个功能。示例:内核1中的功能1,内核2中的功能2等。 注意:这四个功能是独立的。
我尝试了以下来自库并行的代码,但是发现执行时间没有显着差异。请帮助
library(parallel)
cl <- makeCluster(4)
clusterExport(cl, varlist=c("foo", "foo1", "foo2", "foo3"))
cores <- seq_along(cl)
clusterApply(cl[cores], cores, function(core) {
if (core == 1) {
foo(5, 4)
} else if (core == 2) {
foo1(5, 3)
} else if (core == 3) {
foo2(5, 4)
} else if (core == 4) {
foo3(5, 2)
}
})
stopCluster(cl)
答案 0 :(得分:0)
这可以使用future软件包提供的核心Future API进行处理(免责声明:我是作者)。
这是要点:
library(future)
plan(multisession) ## all cores by default
## Launch functions asynchronously via futures
f0 <- future(foo(5, 4))
f1 <- future(foo1(5, 3))
f2 <- future(foo2(5, 4))
f3 <- future(foo3(5, 2))
## Wait for their values
v0 <- value(f0)
v1 <- value(f1)
v2 <- value(f2)
v3 <- value(f3)
您可以使用所谓的未来分配来实现相同的目的,而不是显式的future()/value()
调用:
library(future)
plan(multisession) ## all cores by default
v0 %<-% foo(5, 4)
v1 %<-% foo1(5, 3)
v2 %<-% foo2(5, 4)
v3 %<-% foo3(5, 2)
## wait for, say, v2 only when you actually "need" the value
print(v2)