`future.apply::future_apply()` 中的`purrr::map()` 之类的函数是否也是并行的 运行?

Is a function like `purrr::map()` within `future.apply::future_apply()` also being ran in parallel?

抱歉,如果这些问题很愚蠢,但我对并行处理在实践中的工作原理几乎一无所知。

我的问题是:
- Q1。 future.apply::future_apply() 中的 purrr::map() 之类的函数是否也被并行 运行?
- Q2。如果我在 future.apply() 函数中 运行 furrr::future_map() 会发生什么?
- Q3。假设我执行了上述操作,我会在 furrr::future_map() 之前添加另一个 plan(multiprocess) 调用吗?

future 框架的作者。

  • Q1. Is a function like purrr::map() within future.apply::future_apply() also being ran in parallel?

没有。 'purrr' 中没有 运行 并行的内容。

  • Q2. What happens if I run furrr::future_map() inside of a future.apply() function?

会依次回落到运行,即plan(sequential)。这样做的原因是为了防止递归、嵌套并行,这是很少需要的。这将在未来的小插图 'A Future for R: Future Topologies' 中进行解释。在某些情况下,嵌套并行是合理的,例如在多台机器上进行分布式处理,然后在每台机器上并行处理多个内核。这可以通过使用

来完成
plan(list(tweak(cluster, workers = c("n1", "n2", "n3")), multisession))
  • Q3. Assuming I did the above, would I include another plan(multiprocess) call before furrr::future_map()?

您不想设置 plan() "inside" 您的代码/函数。将 plan() 的控制权留给将使用您的 code/call 您的功能的任何人。此外,人们不希望使用 plan(list(tweak(multisession, workers = ncores), tweak(multisession, workers = ncores))) 中的嵌套内核数,因为这将使用 ncores^2 内核,这会使您的计算机过载。使用默认的核心数plan(list(multisession, multisession))不会有这个问题,因为在第二层无论如何也只有一个核心可用。