2017-01-20 27 views
0

まあ、私は誰も質問を理解したとは思わない...R foreach do 1ワーカー/スレッドと並列

私は動的スクリプトを持っています。場合によっては、10個のリストを反復し、時には1個だけ繰り返すこともあります。

反復する項目が1より大きい場合は、foreachを使用してスクリプトを並列に実行したいと思います。反復処理を行うには1項目あたり1つのコアを使用するだけです。したがって、5つのものがある場合、5つのスレッドにまたがって並列します。

私の質問は、反復するリストが1のときはどうなりますか?

パラレルで実行しないで、マシンのスループットを最大化する方が良いですか?または、私のスクリプトに1人の作業者を割り当ててもらうことはできますか?それと全く同じように実行するように言わなかった場合と同じように動作しますか?

答えて

1

のでiterが1である場合は、別のプロセスに対して動的に設定することができます「あなたが反復されているものの数」iter

並列化をスクリプト化することはここでは、この

if(length(iter)==1){ 
    Result <- #some function 
} else { 
    cl <- makeCluster(iter) 
    registerDoParallel(cl) 
    Result <- foreach(z=1:iter) %dopar% { 
    # some function 
    } 
    stopCluster(cl) 
} 

のように見えるかもしれません呼び出すことができます並列化を起動しない場合は、iterの数に従って動的にコアを割り当てます。これを関数に埋め込む場合は、関数内でmakeClusterregisterDoParallelを呼び出すことはできませんので、関数の外に設定する必要があります。

また、ノードを持つクラスタ数を登録し、foreachを動的に実行すると、未使用のクラスタはアイドル状態のままです。

EDIT:繰り返し処理を1回だけ実行する場合は、NOTを並列実行することをお勧めします。 makeCluster()registerDoParallel()およびstopCluster()が発生する追加の時間を避けるためにのみ使用してください。しかし、その差は、1人の労働者と並行することと比較して、小さくなります。上記のコードを変更して、ただ1人の作業者の場合の画面に条件付きを追加しました。さらなる支援が必要な場合は、フィードバックをご提供ください。

+0

編集した結果OP –

+0

これに応じて回答が – JustGettinStarted

+0

になりました。回答が満足できたら、この質問が終了したことを示すチェックマークをクリックしてください – JustGettinStarted

関連する問題