是否有一种方法可以配置允许嵌套用例的furrr::future_map?考虑以下代码:
library(furrr)
library(tictoc)
# The problem is easier to reason about if you take N
# smaller than your number of cores, and M big.
N = 2
M = 100
plan(sequential)
tic()
x = future_map(1:N, function(i){
furrr::future_map(1:M,function(j){
Sys.sleep(1/M)
return(1)
})
})
toc() # 2sec + overhead
plan(multiprocess)
tic()
x = future_map(1:N, function(i){
furrr::future_map(1:M,function(j){
Sys.sleep(1/M)
return(1)
})
})
toc() # one sec + overhead !!第一个应该花2秒多一点。这样就可以了。但是,即使是在千核机器上,是否也有办法让第二台机器不到1秒呢?
我的用例如下:一些子任务比其他子任务花更长的时间来完成,当一些子任务完成时,一些核心可以自由地进一步分散较长的任务。
但是furrr在默认情况下并不能做到这一点,而lnger运行的任务最终只能在一个核心上完成。这个问题相当于上面代码中显示的问题:如果某些内核是空闲的,那么是否有一种方法可以重新分配内部任务?
是不可能做到的,还是我遗漏了一个参数,用于furrr/将来的调用?
发布于 2022-03-10 12:18:31
https://stackoverflow.com/questions/61506909
复制相似问题