是否还并行运行了future.apply :: future_apply()中的类似purrr :: map()的函数?

时间:2019-02-16 10:56:16

标签: r parallel-processing purrr r-future

很抱歉,如果这些问题很愚蠢,但我几乎不了解并行处理在实践中如何工作。

我的问题是:
-Q1。 purrr::map()中的类似future.apply::future_apply()的函数是否也并行运行?
-Q2。如果我在furrr::future_map()函数中运行future.apply()会怎样?
-第三季度。假设我已完成上述操作,是否可以在plan(multiprocess)之前加入另一个furrr::future_map()调用?

1 个答案:

答案 0 :(得分:1)

此处是future框架的作者。

  
      
  • Q1。 purrr::map()中的类似future.apply::future_apply()的函数是否也并行运行?
  •   

不。并行运行的“ purrr”中没有任何内容。

  
      
  • 第二季度。如果我在furrr::future_map()函数中运行future.apply()会发生什么情况?
  •   

它将退回到按顺序运行,即plan(sequential)。这样做的原因是为了防止递归,嵌套的并行性,这种情况很少有人要。未来的插图'A Future for R: Future Topologies'中对此进行了说明。在某些情况下,嵌套并行是合理的,例如在多台计算机上进行分布式处理,您又在每台计算机上跨多个内核并行处理这可以通过使用

来完成
plan(list(tweak(cluster, workers = c("n1", "n2", "n3")), multisession))
  
      
  • Q3。假设我已完成上述操作,是否可以在plan(multiprocess)之前加入另一个furrr::future_map()呼叫?
  •   

您不想在代码/函数的“内部”设置plan()。将plan()的控制权交给任何将使用您的代码/调用您的函数的人。另外,也不想使用诸如plan(list(tweak(multisession, workers = ncores), tweak(multisession, workers = ncores)))之类的嵌套内核,因为那样会使用ncores^2内核,这会使您的计算机超载。使用默认数量的核心作为plan(list(multisession, multisession))不会出现此问题,因为在第二层中总会只有一个核心可用。