Каков идиоматичный, гибкий способ определения плана многопроцессорности в будущем?
Я только что столкнулся с R пакетами и будущими. Я хотел бы использовать их для написания гибкого кода, который будет использовать несколько ядер, если они доступны на машинах под управлением Windows или OSX. Я хотел бы, чтобы по умолчанию число "доступных" ядер было чем-то вроде parallel::detectCores()-1,
скорее, чем detectCores().
Похоже на plan(multiprocess)
это упрощенный идиоматичный способ почти сделать это, но по умолчанию используются все ядра машины. Я встречал более явные способы указать "план". Какой идиоматический способ использовать в основном поведение по умолчанию plan(multiprocess)
, но также ограничить количество ядер до 1 меньше, чем detectCores()
вернется?
РЕДАКТИРОВАТЬ На основе комментария @HernikB выше, я считаю, что разумный ответ на этот вопрос будет иметь вид options(future.plan="multiprocess",mc.cores = parallel::detectCores() - 1L)
,
РЕДАКТИРОВАТЬ Я обнаружил, что этот метод часто не использует многопроцессный план (или, по крайней мере, не идет параллельно с future_map_dfr
) когда кажется, что мог. В отличие от
nc<-detectCores()-1
plan(strategy=multiprocess, workers=nc)
кажется, что это происходит параллельно. Оставив вопрос без ответа.
1 ответ
Взгляни на ?future::multiprocess
, Ты можешь сделать:
plan(multiprocess(workers = 3))
Если у вас есть 4 ядра на вашем compute.r.