4

最終的にクラスターに展開される並列処理システムを実装していますが、並列処理のさまざまな方法がどのように相互作用するかを理解するのに苦労しています。

for ループを使用して、行列操作の大きなリストをいくつか含む大きなコード ブロックを実行する必要があります。これを高速化するために、for ループを foreach() で並列化し、リスト操作を mclapply で並列化します。

疑似コードの例:

cl<-makeCluster(2)
registerDoParallel(cl)

outputs <- foreach(k = 1:2, .packages = "various packages") {

    l_output1 <- mclapply(l_input1, function, mc.cores = 2)
    l_output2 <- mclapply(l_input2, function, mc.cores = 2)
    return = mapply(cbind, l_output1, l_output2, SIMPLIFY=FALSE)
}

これはうまくいくようです。私の質問は次のとおりです。

1)それは合理的なアプローチですか?私の小規模なテストでは、それらは連携して動作しているように見えますが、少しぎこちなく感じます。

2) いつでもいくつのコア/プロセッサを使用しますか? それをクラスターにアップスケールするとき、これをどれだけプッシュできるかを理解する必要があります (foreach は 7 回しかループしませんが、mclapply リストは最大 70 ほどの大きな行列です)。書かれているように、6つの「コア」を作成するようです(おそらく、foreachに2つ、各mclapplyに2つ)。

4

1 に答える 1