Каков идиоматичный, гибкий способ определения плана многопроцессорности в будущем? - PullRequest
0 голосов
/ 24 января 2019

Я только что столкнулся с пакетами R и будущими. Я хотел бы использовать их для написания гибкого кода, который будет использовать несколько ядер, если они доступны на машинах под управлением Windows или OSX. Я бы хотел, чтобы число «доступных» ядер по умолчанию было что-то вроде parallel::detectCores()-1,, а не detectCores(). Похоже, plan(multiprocess) - это упрощенный идиоматичный способ почти этого сделать, но по умолчанию используются все ядра на машина. Я встречал более явные способы указания "плана" . Каков идиоматический способ использовать в основном поведение по умолчанию plan(multiprocess), но также ограничить число ядер на 1 меньше, чем то, что вернуло бы detectCores()?

EDIT Исходя из комментария @HernikB выше, я считаю, что разумный ответ на этот вопрос будет иметь вид options(future.plan="multiprocess",mc.cores = parallel::detectCores() - 1L).

EDIT Я обнаружил, что этот метод часто не использует многопроцессный план (или, по крайней мере, не идет параллельно с future_map_dfr), когда кажется, что это возможно. В отличие от

nc<-detectCores()-1 plan(strategy=multiprocess, workers=nc)

, кажется, работает параллельно. Оставив вопрос без ответа.

1 Ответ

0 голосов
/ 24 января 2019

Взгляните на ?future::multiprocess.Вы можете сделать:

plan(multiprocess(workers = 3))

Если у вас есть 4 ядра на вашем compute.r.

...