Нужно ли регистрировать DoParallel () и stopCluster () каждый раз, когда я хочу использовать foreach () в R? - PullRequest
0 голосов
/ 25 октября 2018

Я читал, что вам нужно было использовать stopCluster() после запуска параллельной функции: foreach() в R. Однако я могу обойтись без registerDoParallel() и затем запустить foreach() столько раз, сколько захочу, без использования stopCluster().Так мне нужно stopCluster() или нет?

Разве использование stopCluster() не означает, что ваши ядра заняты вашей текущей задачей?Так что, если я использую параллельное программирование с небольшим количеством одноядерных последовательных задач между ними, тогда мне не нужно stopCluster()?Я понимаю, что при настройке параллели также происходит значительный расход времени.

1 Ответ

0 голосов
/ 25 октября 2018

parallel::makeCluster() и doParallel::registerDoParallel() создают набор копий R, работающих параллельно.Копии называются рабочие .

parallel::stopCluster() и doParallel::registerDoParallel() являются безопасными способами увольнения работников.Со страницы справки ?stopCluster:

Хорошей практикой является отключение рабочих с помощью вызова stopCluster: однако рабочие прекращают работу, как только сокет, на котором они слушают команды, становится недоступным.Это должно произойти, если сеанс master R завершен (или его процесс завершен).

Действительно, использование ЦП неиспользованными работниками часто незначительно.Однако, если рабочие загружают большие объекты R, например большие наборы данных, они могут использовать большие части памяти и, как следствие, замедлять вычисления.В этом случае более эффективно отключать неиспользованных работников.

...