我有一个 8 核的 CPU,我试图用它来并行 future_map_chr()。
我的问题如下:我的计算机中的核心数等于8,那么如何才能将计划设置为并行化功能:
plan(multisession, workers = 50,gc=T)
我是否误解了工人和核心之间的区别?比
workers = detectCores()
好吗?
非常感谢
Futureverse的作者在这里:
比
好吗?workers = detectCores()
我认为
parallelly::availableCores()
比 parallel::detectCores()
更好、更安全,例如https://www.jottr.org/2022/12/05/avoid-detectcores/。
使用:
plan(multisession)
等同于:
plan(multisession, workers = parallelly::availableCores())
但是,Futureverse 和
plan()
中没有任何内容可以阻止您通过手动指定 workers
来超出限制,例如
plan(multisession, workers = 50)
所以,是的,这将在后台启动 50 个并行工作线程,即使您的机器上只有 8 个 CPU 核心。
I guess I could add some kind of protection when one tries to set up more than `parallelly::availableCores()` local workers. For instance, it could throw an informative error. For anyone who wishes to override that, I could add an argument `force = TRUE`. I'll add it to my things-to-think-about list.