sfApply и sfClusterApplyLB Snowfall работают медленнее, чем обычный цикл или sapply

Когда я применяю этот код в R, цикл и sapply работают быстрее, чем функции снегопада. Что я делаю неправильно? (используя виндовс 8)

library(snowfall)
a<- 2
sfInit(parallel = TRUE, cpus = 4)
wrapper <- function(x){((x*a)^2)/3}
sfExport('a')
values <- seq(0, 100,1)
benchmark(for(i in 1:length(values)){wrapper(i)},sapply(values,wrapper),sfLapply(values, wrapper),sfClusterApplyLB(values, wrapper))
sfStop()

прошедшее время после 100 повторений:

loop              0.05
sapply            0.07
sfClusterApplySB  2.94
sfApply           0.26

person user2630720    schedule 29.07.2013    source источник


Ответы (1)


Если функция, которая отправляется на каждый из рабочих узлов, занимает небольшое количество времени, накладные расходы на распараллеливание приводят к тому, что общая продолжительность задачи занимает больше времени, чем последовательное выполнение задания. Когда задания, которые отправляются на рабочие узлы, занимают значительное количество времени (не менее нескольких секунд), тогда распараллеливание действительно покажет повышение производительности.

Смотрите также:

Поиск по [r] parallel даст не менее 20 вопросов, подобных вашему, включая более подробную информацию о том, что вы можете сделать, чтобы решить проблему.

person Paul Hiemstra    schedule 29.07.2013