将来指定多进程计划的惯用、灵活的方法是什么?
What is the idiomatic, flexible way to specify mutliprocess plan in future?
我刚遇到 R 包 furrr 和 future。我很乐意使用它们来编写灵活的代码,如果机器 运行 Windows 或 OSX 上可用,这些代码将使用多核。我希望 "available" 个核心的默认数量类似于 parallel::detectCores()-1,
而不是 detectCores().
似乎 plan(multiprocess)
是几乎可以做到这一点的流线型惯用方式,但它默认使用机器上的所有内核。我遇到过更明确的方法来指定 "plan"。主要使用 plan(multiprocess)
的默认行为但同时将核心数量限制为比 detectCores()
将 return 少 1 个的惯用方法是什么?
编辑
根据@HernikB 的上述评论,我认为这个问题的合理答案应该是 options(future.plan="multiprocess",mc.cores = parallel::detectCores() - 1L)
。
编辑
我发现这种方法似乎可以时经常不使用多进程计划(或者至少不与 future_map_dfr
并行)。相比之下
nc<-detectCores()-1
plan(strategy=multiprocess, workers=nc)
似乎可以同时进行。将问题悬而未决。
看看?future::multiprocess
。你可以这样做:
plan(multiprocess(workers = 3))
如果您的 compute.r 上有 4 个内核。
我刚遇到 R 包 furrr 和 future。我很乐意使用它们来编写灵活的代码,如果机器 运行 Windows 或 OSX 上可用,这些代码将使用多核。我希望 "available" 个核心的默认数量类似于 parallel::detectCores()-1,
而不是 detectCores().
似乎 plan(multiprocess)
是几乎可以做到这一点的流线型惯用方式,但它默认使用机器上的所有内核。我遇到过更明确的方法来指定 "plan"。主要使用 plan(multiprocess)
的默认行为但同时将核心数量限制为比 detectCores()
将 return 少 1 个的惯用方法是什么?
编辑
根据@HernikB 的上述评论,我认为这个问题的合理答案应该是 options(future.plan="multiprocess",mc.cores = parallel::detectCores() - 1L)
。
编辑
我发现这种方法似乎可以时经常不使用多进程计划(或者至少不与 future_map_dfr
并行)。相比之下
nc<-detectCores()-1
plan(strategy=multiprocess, workers=nc)
似乎可以同时进行。将问题悬而未决。
看看?future::multiprocess
。你可以这样做:
plan(multiprocess(workers = 3))
如果您的 compute.r 上有 4 个内核。