2016-08-02 1 views
1

J'essayais d'évaluer les timings des exécutions en série et en parallèle dans r. En comparant la fonction "lapply" et les fonctions "parLapply", j'ai obtenu les résultats suivants.Réduction du temps écoulé/temps de l'utilisateur en utilisant parLapply

vec1 <- 1:400000 
system.time(result <- lapply(vec1, function(x) x+2)) 

#using 3 nodes 
cl3 <- snow::makeCluster(c("localhost","localhost","localhost"), type = "SOCK") 
snow::clusterExport(cl3, c("vec1"), envir = .GlobalEnv) 
system.time(clus3 <- snow::parLapply(cl3, vec1, function(x) x+2)) 
snow::stopCluster(cl3) 

lapply: temps utilisateur = 0,69, le temps écoulé = 0,70 parLapply: temps utilisateur = 0,49, le temps écoulé = 0,92

Bien que le temps d'utilisation est réduit, le temps écoulé semble être augmenté. cela peut-il arriver ou ai-je fait quelque chose de mal? Parce que je pensais que le temps écoulé devrait être réduit lors de l'utilisation des exécutions parallèles.

Répondre

1

Si votre tâche, calculée sur un seul noeud, prend beaucoup de temps à s'exécuter, cela se traduira par des temps écoulés réduits. D'un autre côté, si le calcul est petit, la plupart du temps sera consacré à l'entretien (mise en place de la session, déplacement des données, récupération des données ...) et annuler ou même annuler l'effet des calculs parallèles.