首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套furrr::future_map?

嵌套furrr::future_map?
EN

Stack Overflow用户
提问于 2020-04-29 16:38:11
回答 1查看 484关注 0票数 5

是否有一种方法可以配置允许嵌套用例的furrr::future_map?考虑以下代码:

代码语言:javascript
复制
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/将来的调用?

EN

回答 1

Stack Overflow用户

发布于 2022-03-10 12:18:31

轴人提到的轴人中,您可以在future::plan中使用future::tweak。在那里,列表中的元素显示深度。因此,如果您提供了两个计划,那么并行化也会在嵌套的furrr::future_map中运行,例如:

代码语言:javascript
复制
future::plan(
      list(
        future::tweak(
          future::multiprocess, 
          workers = 2), 
        future::tweak(
          future::multiprocess,
          workers = 4)
        )
      )

该示例具有8个核心,因为第一批工作人员中的每一个都会得到4名额外的工作人员。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61506909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档