Распараллеливание R идет ниже нижней границы - PullRequest
0 голосов
/ 11 февраля 2019

Я использую R на macOS, и R может видеть 4 ядра и 8 гиперпоточных модулей:

> library(parallel)
> detectCores(logical=TRUE)
[1] 8
> detectCores(logical=FALSE)
[1] 4

Следующий скрипт имеет функцию, которая спит в течение 0,1 секунды, вызывает ее 10 раз и распараллеливаетэти вызовы на нескольких ядрах в диапазоне от 1 до 12:

long_function <- function(x) {
  Sys.sleep(0.1)
  x
}

for (no_cores in 1:12) {

  start <- Sys.time()
  x <- mclapply(1:10, long_function, mc.cores = no_cores)
  end <- Sys.time()

  print(paste0("Parallelised over ", no_cores, " cores, time = ", end - start))
}

Результаты:

[1] "Parallelised over 1 cores, time = 1.00716304779053"
[1] "Parallelised over 2 cores, time = 0.553637027740479"
[1] "Parallelised over 3 cores, time = 0.447566032409668"
[1] "Parallelised over 4 cores, time = 0.338685035705566"
[1] "Parallelised over 5 cores, time = 0.234640121459961"
[1] "Parallelised over 6 cores, time = 0.223365068435669"
[1] "Parallelised over 7 cores, time = 0.226859092712402"
[1] "Parallelised over 8 cores, time = 0.227418899536133"
[1] "Parallelised over 9 cores, time = 0.226329803466797"
[1] "Parallelised over 10 cores, time = 0.116447925567627"
[1] "Parallelised over 11 cores, time = 0.116322040557861"
[1] "Parallelised over 12 cores, time = 0.12298583984375"

Время, проведенное уменьшается ниже нижней границы 1/8 = 0,125 секунды.

Результаты одинаковы, независимо от того, запланированы ли задания с предварительно заданным значением mc.preschedule={T,F}, и аналогичны для Ubuntu в Azure с 4 виртуальными ЦП, где время выполнения опускается ниже нижней границы 1/4 = 0,25 секунды.

Как это может быть?

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