Вложенный furrr :: future_map? - PullRequest
       24

Вложенный furrr :: future_map?

1 голос
/ 29 апреля 2020

Есть ли способ настроить furrr::future_map, который бы позволял использовать вложенный вариант использования? Рассмотрим следующий код:

library(furrr)
library(tictoc)

# The problem is easier to reason about if you take N
# smaller than your number of cores, and M big.
N = 2 
M = 100

plan(sequential)
tic()
x = future_map(1:N, function(i){
  furrr::future_map(1:M,function(j){
    Sys.sleep(1/M)
    return(1)
  })
})
toc() # 2sec + overhead

plan(multiprocess)
tic()
x = future_map(1:N, function(i){
  furrr::future_map(1:M,function(j){
    Sys.sleep(1/M)
    return(1)
  })
})
toc() # one sec + overhead !!

Первый должен занять чуть больше 2se c. Хорошо. Но есть ли способ заставить второй взять меньше, чем 1se c, даже на машине с тысячей ядер?

Мой вариант использования следующий: некоторые подзадачи выполняются дольше, чем другие, а когда некоторые заканчиваются, некоторые ядра могут свободно перемещать более длинные задачи.

Но по умолчанию furrr не делает этого, и выполняющиеся задачи заканчиваются только на одном ядре. Проблема эквивалентна той, что показана в приведенном выше коде: есть ли способ выполнить повторную отправку внутренних заданий furrr, если некоторые ядра свободны?

Это просто невозможно делать, или я пропустил параметр для вызовов furrr / future?

...