Сокращение накладных расходов при выполнении параллельной задачи в R - PullRequest
0 голосов
/ 29 января 2019

Я использую пакет 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 говорится о накладных расходах ( здесь ), но обычно говорится, что если задача состоит из нескольких секунд (что она есть), она должнане проблема.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...