Системное время для параллельной и последовательной обработки
я запускаю байесовскую пробит-модель MCMC, и я пытаюсь реализовать ее параллельно. Я получаю запутанные результаты о производительности моей машины при сравнении параллельно с последовательным. У меня нет большого опыта параллельной обработки, поэтому возможно, я делаю это неправильно.
Я использую MCMCprobit
на MCMCpack
пакет для модели probit и для параллельной обработки я использую parLapply
на parallel
пакета.
вот мой код последовательный запуск и результаты из system.time
:
system.time(serial<-MCMCprobit(formula=econ_model,data=mydata,mcmc=10000,burnin=100))
user system elapsed
657.36 73.69 737.82
вот мой код для параллельного запуска:
#Setting up the functions for parLapply:
probit_modeling <- function(...) {
args <- list(...)
library(MCMCpack)
MCMCprobit(formula=args$model, data=args$data, burnin=args$burnin, mcmc=args$mcmc, thin=1)
}
probit_Parallel <- function(mc, model, data,burnin,mcmc) {
cl <- makeCluster(mc)
## To make this reproducible:
clusterSetRNGStream(cl, 123)
library(MCMCpack) # needed for c() method on master
probit.res <- do.call(c, parLapply(cl, seq_len(mc), probit_modeling, model=model, data=data,
mcmc=mcmc,burnin=burnin))
stopCluster(cl)
return(probit.res)
}
system.time(test<-probit_Parallel(model=econ_model,data=mydata,mcmc=10000,burnin=100,mc=2))
и результаты system.time
:
user system elapsed
0.26 0.53 1097.25
любые идеи, почему время пользователя и системы будет намного короче для параллельного процесса, но прошедшее время намного дольше? Я попробовал его на более коротких пробегах MCMC (100 и 1000), и история та же. Полагаю, я где-то ошибаюсь.
вот мой компьютер технические характеристики:
- R 3.1.3
- 8 ГБ
- Windows 7 64 бит
- процессор Intel Core i5 2520M, двухъядерный
1 ответов
мне кажется, что оба работника выполняют столько же работы, сколько выполняется в последовательной версии. Рабочие должны выполнять только часть общей работы, чтобы выполнить быстрее последовательной версии кода. Это может быть достигнуто путем деления mcmc
по количеству работников в этом примере, хотя это может быть не то, что вы действительно хотите сделать.
Я думаю, что это объясняет долгое прошедшее время, сообщенное system.time
. "Пользователь" и " система" время короткое, потому что это время для основного процесса, который использует очень мало времени процессора при выполнении parLapply
: Реальное время процессора используется работниками, о котором не сообщается system.time
.