web-dev-qa-db-fra.com

la différence entre doMC et doParallel dans R

Quelle est la différence entre doParallel et doMC dans R concernant la fonction foreach? doParallel prend en charge les fenêtres, de type Unix, tandis que doMC prend en charge de type Unix uniquement. En d'autres termes, pourquoi doParallel ne peut pas remplacer doMC directement? Je vous remercie.

Mise à jour: doParallel est construit sur parallel, qui est essentiellement une fusion de multicore et snow et utilise automatiquement l'outil approprié pour votre système. Par conséquent, nous pouvons utiliser doParallel pour prendre en charge plusieurs systèmes. En d'autres termes, nous pouvons utiliser doParallel pour remplacer doMC.

réf: http://michaeljkoontz.weebly.com/uploads/1/9/9/4/19940979/parallel.pdf

BTW, quelle est la différence entre registerDoParallel(ncores=3) et

cl <- makeCluster(3)
registerDoParallel(cl)

Il semble que registerDoParallel(ncores=3) puisse arrêter le cluster automatiquement, tandis que le second ne s'arrête pas automatiquement et a besoin de stopCluster(cl).

réf: http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf

46
Zhilong Jia

Le package doParallel est une fusion de doSNOW et doMC, tout comme parallel est une fusion de snow et multicore. Mais bien que doParallel possède toutes les fonctionnalités de doMC, Rich Calaway de Revolution Analytics m'a dit qu'ils voulaient conserver doMC parce qu'il était plus efficace dans certaines circonstances, même si doMC utilise désormais parallel comme doParallel. Je n'ai personnellement exécuté aucun benchmark pour déterminer si et quand il y a une différence significative.

J'ai tendance à utiliser doMC sur un ordinateur Linux ou Mac OS X, doParallel sur un ordinateur Windows et doMPI sur un cluster Linux, mais doParallel le fait travailler sur toutes ces plates-formes.


Quant aux différentes méthodes d'enregistrement, si vous exécutez:

registerDoParallel(cores=3)

sur une machine Windows, il créera implicitement un objet cluster pour une utilisation ultérieure avec clusterApplyLB, tandis que sur Linux et Mac OS X, aucun objet cluster n'est créé ou utilisé. Le nombre de cœurs est simplement mémorisé et utilisé comme valeur de mc.cores argument plus tard lors de l'appel de mclapply.

Si vous exécutez:

cl <- makeCluster(3)
registerDoParallel(cl)

alors l'objet cluster enregistré sera utilisé avec clusterApplyLB quelle que soit la plateforme. Vous avez raison dans ce cas, il est de votre responsabilité d'arrêter l'objet cluster depuis que vous l'avez créé, tandis que l'objet cluster implicite est automatiquement arrêté.

27
Steve Weston