2016-04-10 15 views
1

どのような方法やアイデアを私は状況を次のシミュレーションに使用する必要があります。SimGrid。タスクの実行中にデータを送受信する方法は?

master、worker1(host1)とworker2(host2)があります。 現在、worker1はいくつかのデータを実行していますが、worker2は空きです。 マスタはworker1からデータをダウンロードし、それらの実行を開始するためにinstructionをworker2に送信する必要があります。

考えてみたのは、masterからworker2 - > worker2にmessageTaskをworker1 - > worker1に送信することでした。task(name, flopsamount, byteSize)をworker2 - > worker2が受け取って実行しました。

worker1は、taskを実行してworker1がビジー状態の場合、worker2からmessageTaskをどのように受け取ることができますか? worker1がタスクを実行しているときに、どのようにデータを送信できますか?あるいは、worker2がbusy1からデータをダウンロードする別の方法がありますか?

更新 これはworker2のコードです。 worker1

try { 
    task.execute(); // Currently worker1 is here, in other words, worker1 is exectuing some another task 
} catch (TaskCancelledException e) { 
} 

については

MessageTask messageTask = new MessageTask(); 
messageTask.dsend(mailbox_worker1) 

(彼の現在のタスクを実行するので中断することなく)実際のデータをworker2する方法worker1がreceive messageTaskとsendバックだろうか?

を更新し

は、それが正しいのdeployment.xmlですか?

<process host="Tier1_1" function="LHCb.Process1"> 
    <argument value="1"/> <!-- Input mailbox --> 
    </process> 

    <process host="Tier1_1" function="LHCb.Process2"> 
    <argument value="1"/> <!-- Input mailbox --> 
    </process> 

答えて

1

少なくとも2つの通信方法があります。デタッチされたセンドを使用することができます。つまり、通信の動作の有無に関わらず、非同期通信を気にしません。

このディレクトリには、examples/java/async/dsendという最初のメカニズムの例がありますが、もう1つのメカニズムはJavaではまだ例証されていません。今のところCの例をチェックする必要があります。

更新された部分では、何かを実行している間に物事をしたいと思っています。非同期実行(まだ)のようなものはないので、最初のホストが情​​報を計算している間に、同じホスト上で別のプロセスを開始して通信を処理する必要があります。

+0

私は質問を更新しました。 –

+0

更新部分の正しい.xml宣言ですか? –

+0

これは同じ質問ではありません。 1つのアイデアにつき1つの質問を投稿してください。そうでない場合は、次の人が来ても答えが分かりません。 (しかし、はい、展開は大丈夫です)。 –

関連する問題