-1

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

我的问题是:
- Q1。类似 inside 的函数是否purrr::map()future.apply::future_apply()并行运行?
- Q2。如果我在函数furrr::future_map()内部运行会发生什么future.apply()
- 第三季度。假设我做了上述,我会plan(multiprocess)在之前加入另一个电话furrr::future_map()吗?

4

1 回答 1

2

未来框架的作者在这里。

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

不,'purrr' 中没有任何东西可以并行运行。

  • Q2。如果我在函数furrr::future_map()内部运行会发生什么future.apply()

它将回退以按顺序运行,即plan(sequential). 这样做的原因是为了防止递归嵌套并行性,这是很少需要的。这在未来的小插图“R 的未来:未来拓扑”中进行了解释。在某些情况下,嵌套并行是合理的,例如在多台机器上进行分布式处理,而您又在每台机器上的多个内核上并行处理。这可以通过使用来完成

plan(list(tweak(cluster, workers = c("n1", "n2", "n3")), multisession))
  • Q3。假设我做了上述,我会plan(multiprocess)在之前加入另一个电话furrr::future_map()吗?

您不想plan()在代码/功能“内部”设置。将控制权留给plan()将使用您的代码/调用您的函数的人。此外,不想使用嵌套数量的内核,例如 in,plan(list(tweak(multisession, workers = ncores), tweak(multisession, workers = ncores)))因为这将使用ncores^2会使您的计算机超载的内核。使用默认数量的核心plan(list(multisession, multisession))不会有这个问题,因为在第二层中无论如何都只有一个核心可用。

于 2019-02-18T19:46:49.067 回答