对不起,如果这些是一个愚蠢的问题,但是我几乎不知道并行处理在实践中的工作方式。
我的问题是:
-Q1。future.apply::future_apply()
中类似purrr::map()
的函数是否也并行运行?
-Q2。如果我在future.apply()
函数内运行furrr::future_map()
,会发生什么?
-Q3。假设我做了上述,我会在furrr::future_map()
之前包括另一个plan(multiprocess)
呼叫吗?
在这里的未来框架的作者。
- Q1。
future.apply::future_apply()
中类似purrr::map()
的函数也同时运行吗?
否。" purrr"中没有并联运行。
- Q2。如果我在
future.apply()
函数内运行furrr::future_map()
,会发生什么?
它将依次落后,即plan(sequential)
。这样做的原因是防止很少有人想要的递归,嵌套并行性。这在未来的小插图中解释了" R:Future Topologies的未来"。在某些情况下,嵌套并行性是合理的,例如在多个机器上分布式处理,您依次在每台机器上的多个内核中并行并行处理。这可以通过使用
plan(list(tweak(cluster, workers = c("n1", "n2", "n3")), multisession))
- Q3。假设我做了上述情况,我会在
furrr::future_map()
之前包括另一个plan(multiprocess)
吗?
您不想设置plan()
"内部"您的代码/函数。将plan()
的控件留给使用您的代码/调用您的功能的人。另外,人们不想使用plan(list(tweak(multisession, workers = ncores), tweak(multisession, workers = ncores)))
中的嵌套数量的核心数,因为它将使用ncores^2
内核,该内核会超载您的计算机。使用默认数字作为plan(list(multisession, multisession))
将没有此问题,因为在第二层中,无论如何都只有一个核心。