Сокращение накладных расходов при выполнении параллельной задачи в R

Я использую parallel пакет, чтобы попытаться оптимизировать некоторый алгоритм для экономии вычислительного времени (у меня 8-ядерный процессор).

Линейное решение занимает около 18 секунд, но, поскольку я запускаю его много раз, давайте предположим, что его стоит оптимизировать. Более того, алгоритм может быть упрощен до отклонения от 5 похожих задач, поэтому он пригоден для распараллеливания.

К сожалению, параллельное решение занимает то же время, что и линейное.

Копаясь в журнале, я увидел, что 5 задач заняли от 4,6 до 4,8 секунды, поэтому я не понимаю, почему параллельное решение так медленно.

Вот код для алгоритма распараллеливания (извините, представление было бы очень трудно обеспечить):

library(parallel)
library(tidyverse)
library(tictoc)

myFunction=function(arg, as.num){
  tic(arg)
  rtn = ... #some computing
  toc() #print around 4.5 secs, whatever the task
  return(rtn)
}

tic("parallel")
parallel.clusters = makeCluster(detectCores() - 1, outfile="parallel.log.txt")
clusterEvalQ(parallel.clusters, library(survival)) %>% invisible
clusterExport(parallel.clusters, c("printZphProblem", "rownames_to_column", 
                                 "%>%", "rcs", "tic", "toc", "extract2", 
                                 "filter"))
x=parSapply(parallel.clusters,
            X=list(q = list(arg="q", as.num=F), 
                   med = list(arg="num", as.num=F),
                   trend = list(arg="q", as.num=T),
                   cont = list(arg="cont", as.num=F),
                   cont.std = list(arg="cont.std", as.num=F)),
            FUN=function(x){myFunction(x$arg, x$as.num)},
            simplify=F)
stopCluster(parallel.clusters)
toc()
# parallel: 18.42 sec elapsed

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

Если замедление действительно связано с накладными расходами, как я могу уменьшить его? Иначе, что я делаю не так?

0 ответов

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