web-dev-qa-db-ja.com

RのdoMCとdoParallelの違い

doParallel関数に関するRのdoMCforeachの違いは何ですか? doParallelはunixライクなウィンドウをサポートしますが、doMCはunixライクのみをサポートします。つまり、doParalleldoMCを直接置き換えることができないのはなぜですか?ありがとうございました。

更新:doParallelparallelに基づいて構築されます。これは基本的にmulticoresnowのマージであり、システムに適したツールを自動的に使用します。その結果、doParallelを使用してマルチシステムをサポートできます。つまり、doParallelを使用してdoMCを置き換えることができます。

参照: http://michaeljkoontz.weebly.com/uploads/1/9/9/4/19940979/parallel.pdf

ところで、registerDoParallel(ncores=3)との違いは何ですか

_cl <- makeCluster(3)
registerDoParallel(cl)
_

registerDoParallel(ncores=3)はクラスターを自動的に停止できますが、2番目は自動的に停止せず、stopCluster(cl)が必要です。

参照: http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf

46
Zhilong Jia

doParallelパッケージは、doSNOWdoMCのマージです。parallelsnowmulticoreのマージです。しかし、doParallelにはdoMCのすべての機能がありますが、doMCdoMCのようにparallelを使用しているにもかかわらず、特定の状況ではより効率的であるため、doParallelを維持したいという要望がありました。私は、著しい違いがあるかどうか、そしていつ違いがあるかを判断するベンチマークを個人的に実行していません。

LinuxまたはMac OS XコンピューターではdoMC、WindowsコンピューターではdoParallel、LinuxクラスターではdoMPIを使用する傾向がありますが、doParallelはすべてのプラットフォームで機能します。


さまざまな登録方法については、次を実行すると:

registerDoParallel(cores=3)

windowsマシンでは、後でclusterApplyLBで使用するためにクラスターオブジェクトを暗黙的に作成しますが、LinuxおよびMac OS Xでは、クラスターオブジェクトは作成または使用されません。コアの数は単に記憶され、後でmclapplyを呼び出すときにmc.cores引数の値として使用されます。

実行する場合:

cl <- makeCluster(3)
registerDoParallel(cl)

登録されたクラスターオブジェクトは、プラットフォームに関係なくclusterApplyLBで使用されます。この場合、クラスターオブジェクトを作成してからシャットダウンするのはユーザーの責任であり、暗黙的なクラスターオブジェクトは自動的にシャットダウンされるのは正しいです。

27
Steve Weston