次の (簡略化された) スクリプトは、UNIX クラスター (4 つの仮想コア) のマスター ノードで正常に動作します。
library(foreach)
library(doParallel)
nc = detectCores()
cl = makeCluster(nc)
registerDoParallel(cl)
foreach(i = 1:nrow(data_frame_1), .packages = c("package_1","package_2"), .export = c("variable_1","variable_2")) %dopar% {
row_temp = data_frame_1[i,]
function(argument_1 = row_temp, argument_2 = variable_1, argument_3 = variable_2)
}
stopCluster(cl)
16 * 4
クラスター内の 16 個のノード (合計で仮想コア)を活用したいと考えています。
で指定された並列バックエンドを変更するだけでよいと思いますmakeCluster
。しかし、どうすればいいですか?ドキュメントはあまり明確ではありません。
このかなり古い (2013) 投稿http://www.r-bloggers.com/the-wonders-of-foreach/に基づいて、デフォルトのタイプを変更する必要があるようです (sock
またはMPI
- どちらが unix で動作しますか? )
編集
foreach の作成者によるこのビネットから:
デフォルトでは、doParallel は Unix ライクなシステムではマルチコア機能を使用し、Windows では Snow 機能を使用します。マルチコア機能は、コンピューターのクラスターではなく、単一のコンピューターでのみタスクを実行することに注意してください。ただし、スノー機能を使用して、Unix のようなオペレーティング システム、Windows、またはその組み合わせを使用して、クラスターで実行することができます。
とはyou can use the snow functionality
どういう意味ですか? どうすればいいですか?