4

有没有办法配置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 重新调度内部任务?

这是不可能的,还是我错过了 furrr/future 调用的参数?

4

0 回答 0