doParallel
関数に関するRのdoMC
とforeach
の違いは何ですか? doParallel
はunixライクなウィンドウをサポートしますが、doMC
はunixライクのみをサポートします。つまり、doParallel
がdoMC
を直接置き換えることができないのはなぜですか?ありがとうございました。
更新:doParallel
はparallel
に基づいて構築されます。これは基本的にmulticore
とsnow
のマージであり、システムに適したツールを自動的に使用します。その結果、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
doParallel
パッケージは、doSNOW
とdoMC
のマージです。parallel
はsnow
とmulticore
のマージです。しかし、doParallel
にはdoMC
のすべての機能がありますが、doMC
はdoMC
のように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
で使用されます。この場合、クラスターオブジェクトを作成してからシャットダウンするのはユーザーの責任であり、暗黙的なクラスターオブジェクトは自動的にシャットダウンされるのは正しいです。