很抱歉,如果这些问题很愚蠢,但我几乎不了解并行处理在实践中如何工作。
我的问题是:
-Q1。 purrr::map()
中的类似future.apply::future_apply()
的函数是否也并行运行?
-Q2。如果我在furrr::future_map()
函数中运行future.apply()
会怎样?
-第三季度。假设我已完成上述操作,是否可以在plan(multiprocess)
之前加入另一个furrr::future_map()
调用?
答案 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))
不会出现此问题,因为在第二层中总会只有一个核心可用。