数百のコアのクラスターで100kモンテカルロシミュレーションを実行するために、JavaとRMIを使用しています。
私が使用しているアプローチは、RMIプロセスを呼び出し、グリッド上で使用可能な(RMI)プロセスの数でシミュレーションを分割するクライアントアプリを用意することです。
シミュレーションが実行されたら、結果を再集計する必要があります。
私が持っている唯一の制限は、これがすべて500ms未満で発生しなければならないということです。
プロセスは実際には実行されますが、ランダムに、 RMI呼び出しの1つが実行するのにさらに200ミリ秒かかることがあります。
たくさんのログとタイミングをあちこちに追加しましたが、考えられる理由として、すでに破棄しました。
1)余分な時間がかかるシミュレーション2)データ転送(常に機能し、速度低下が確認される場合があり、RMI呼び出しのサブセットでのみ)3)結果を転送し直す(最後のRMI呼び出しからに戻るまでの時間を明確に計ることができますプロセスの終了)
私が測定できない唯一のことは、RMI呼び出しのいずれかが初期化に余分な時間を費やしている場合です(そして正直なところ、私が推測できる唯一のことです)。この理由は、-残念ながら-時計が同期されていないためです:(
クライアントからRMIへの(リモート)参照を保持している場合でも、RMIリモートプロセスがパッシベーション/デタッチ/収集される可能性はありますか?
質問が十分に明確であることを願っています(私はそれがそうではないと確信しています)。
ミルに感謝し、それが十分に明確でない場合は、さらに質問をすることを躊躇しないでください。
よろしく、ジョバンニ