Является ли функция типа `purrr::map()` внутри `future.apply::future_apply()` также запущенной параллельно?

Извините, если это глупые вопросы, но я почти ничего не знаю о том, как параллельная обработка работает на практике.

Мои вопросы:
- Q1. Это функция как purrr::map() в future.apply::future_apply() также работает параллельно?
- Q2. Что произойдет, если я бегу furrr::future_map() внутри future.apply() функционировать?
- Q3. Предполагая, что я сделал выше, я бы включил другой plan(multiprocess) звонить раньше furrr::future_map()?

1 ответ

Решение

Автор будущих рамок здесь.

  • Q1. Это функция как purrr::map() в future.apply::future_apply() также работает параллельно?

Нет. В мурлыканье нет ничего, что работает параллельно.

  • Q2. Что произойдет, если я бегу furrr::future_map() внутри future.apply() функционировать?

Он будет работать последовательно, а это plan(sequential), Причина этого заключается в защите от рекурсивного вложенного параллелизма, который редко требуется. Это объясняется в будущей виньетке "Будущее R: топологии будущего". В некоторых случаях целесообразно использовать параллельный параллелизм, например распределенную обработку на нескольких машинах, когда вы, в свою очередь, выполняете параллельное соединение между несколькими ядрами на каждой машине. Это можно сделать с помощью

plan(list(tweak(cluster, workers = c("n1", "n2", "n3")), multisession))
  • Q3. Предполагая, что я сделал выше, я бы включил другой plan(multiprocess) звонить раньше furrr::future_map()?

Вы не хотите устанавливать plan() "внутри" вы код / ​​функции. Оставьте контроль над plan() тому, кто будет использовать ваш код / ​​вызывать ваши функции. Кроме того, никто не хочет для вложенного числа ядер, таких как в plan(list(tweak(multisession, workers = ncores), tweak(multisession, workers = ncores))) потому что это будет использовать ncores^2 ядра, которые будут перегружать ваш компьютер. Используя количество ядер по умолчанию как plan(list(multisession, multisession)) не будет иметь этой проблемы, потому что во втором слое в любом случае будет доступно только одно ядро.

Другие вопросы по тегам