抱歉,如果这些是愚蠢的问题,但我对并行处理在实践中的工作原理几乎一无所知。
我的问题是:
- Q1。类似 inside 的函数是否purrr::map()
也future.apply::future_apply()
并行运行?
- Q2。如果我在函数furrr::future_map()
内部运行会发生什么future.apply()
?
- 第三季度。假设我做了上述,我会plan(multiprocess)
在之前加入另一个电话furrr::future_map()
吗?
抱歉,如果这些是愚蠢的问题,但我对并行处理在实践中的工作原理几乎一无所知。
我的问题是:
- Q1。类似 inside 的函数是否purrr::map()
也future.apply::future_apply()
并行运行?
- Q2。如果我在函数furrr::future_map()
内部运行会发生什么future.apply()
?
- 第三季度。假设我做了上述,我会plan(multiprocess)
在之前加入另一个电话furrr::future_map()
吗?
未来框架的作者在这里。
- 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))
不会有这个问题,因为在第二层中无论如何都只有一个核心可用。