私はネストされた*apply
コールを持っており、それらを並列化したいと思います。トップ・コールまたはネストされた内部コールのいずれかで並列化するオプションがあります。理論的には、最初の方が良いと思われますが、私の問題は4つのコアがありますが、最も外側のオブジェクトは5つの部分があり、それぞれ、のサイズがさまざまです。最初の例を実行したとき、4つのコアすべてが約10分間実行されてから、2つのコアが終了しました。 1時間後に3番目のものが終了し、4番目のものが2つの最大のプロセスを得て1時45分に終了する最後のものでした。R:並列呼び出しが何であるべきか
それぞれのプロと詐欺は何ですか?
parLapply(cl, object, function(obj) lapply(obj, funct))
-- OR --
lapply(object, function(obj) parLapply(cl, obj, funct))
また、手動で負荷を分散する方法はありますか?そうすれば、私は2つの大きなオブジェクトを分離し、2つの小さなオブジェクトを一緒にすることができます。
編集:一般的に、CSの理論はこの状況について何を述べていますか?これは一般的に並列コールのための最良の場所です(このような特殊な状況を除く)
'clusterApplyNB'の問題は、私のリストにディメンションがないため、余白の値を入れることができないということです。 – Adam
@Adam 'clusterApplyLB'は' parLapply'とまったく同じ引数をとり、機能的に同等です。どちらも基本的に 'lapply'の並列版です。それらの主な違いは、 'parLapply'は' mclapply'と同じようにタスクをグループ化し、 'clusterApplyLB'はロードバランシングを実行することです。 'clusterApplyLB'も' parLapply'も行列や配列で動作しません。 –