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
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é.