7

私はc#マルチスレッドモンテカルロシミュレーションを持っています、アプリケーションはすでに独立して実行されるタスクに分割できるように構造化されています、TaskControllerはタスクを実行し、中間結果を集約し、収束(早期終了基準)をチェックしてから最終結果を返します、これは現在ThreadPoolを使用して実装されています。

この計算を支援するために、複数のコンピューターを活用したいと思います。IISを使用するための承認またはインフラストラクチャがありません(これはポリシーは変更されません)が、たとえばNetTcpBindingエンドポイントバインディングでWCFを使用できます。サーバー間でこの通信をテストし、適切なアクセス許可と動作を持っています。

まず、1つのマスターexe(コンソールアプリ)と複数のスレーブを専用ワーカーとして他のサーバーに配置することを考えています(これらはexeですか?それともWindowsサービスですか?)、最終的にはこれを数百のワークステーションで実行するように設定できます(同様に)サーバーとして)アイドル時間中(またはスクリーンセーバーがアクティブなとき)の社内。

これは自分で書くこともできますが、コミュニケーションを処理する必要があります、1、2ウェイ?早期終了(中間コンバージェンス結果チェック)、不要になったタスクのキャンセル、作業の展開、作業の展開に使用できる準備が整ったマシンの検出、ワークステーションがアイドル状態でなくなった場合の作業の調整/一時停止?分散システムに入る他のすべて?

マスター(タスクコントローラー)がすべてのスレーブワーカーのアドレス(ip)を知っていて、作業を行うように指示する必要がありますか(使用可能な場合)、またはスレーブワーカーがマスターアドレスを知っているだけで、そうするか、コミュニケーションは双方向に流れる必要がありますか?これは24時間制で実行され、さまざまなビジネス地域をサポートするために1日あたり約9回の実行が開始されます。

この取り組みに役立つ.netグリッド/分散ライブラリの推奨事項とアーキテクチャに関するアドバイスを探しています。

アップデート

次のいずれかを使用した経験はありますか?

http://www.digipede.net/ (commercial)
http://www.gridbus.org/~alchemi/
http://ngrid.sourceforge.net/
http://www.osl.iu.edu/research/mpi.net/

または、JavaSpaces、.netのJiniを使用したか、同等の.netテクノロジーを見つけました

http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/
http://www.jini.org

ありがとう

4

1 に答える 1

3

これに宇宙ベースのアーキテクチャを使用する可能性を調査します。

マスターはジョブをスペース (基本的にはオブジェクト リポジトリ) に書き込みます。消費するクライアントは常にジョブを探しており、ジョブが利用可能になると、スペースから取り出して処理し、結果をそのスペースまたは別のスペースに (すべてトランザクションの下で) 書き戻します。結果をグループ化するために、ジョブを特定の実行に属するものとしてタグ付けします。

これの利点は、これが非常に簡単にスケーリングできることです (単にコンシューマーを追加するだけです)。コンシューマは、いつ作業できるかを判断する必要があり、単にスペースに関する情報 (検索方法) で構成する必要があります。プロデューサは、一連のコンシューマから完全に切り離されています。

作業はトランザクションの下で処理されるため、コンシューマーが完了に失敗した場合、作業はスペースに戻り、別のコンシューマーが処理できるようになります。

中間結果を簡単に処理できます。プロデューサーはスペースから結果を取得し、結果が利用可能になったときに中間体を導出できます。簡単にジョブをキャンセルできます。それらをスペースから削除するだけです。

非常に簡単にプロデューサーを追加できます。同じスペースに書き込むだけで、ジョブが適切にタグ付けされていれば、結果は明確にプロデューサーに結び付けられます。

残念ながら、.Net で使用できるフレームワークはわかりません (私は Java の世界出身で、Javaspacesを使用します。これらは動的検出を使用し、構成はほとんど必要ありません)。しかし、グーグルする価値があります。おそらく (これが十分に強力な場合)、C# プロデューサー/コンシューマーを記述して、Javaspace インフラストラクチャにインターフェイスすることができます。

于 2009-08-04T10:39:38.080 に答える