6

私は Scala と Akka を初めて使用し、問題を解決するために使用することを検討しています。計算エンジン (解を検索する) があるとします。各ノードの各CPUに独自のエンジンインスタンスを与えることで、CPU全体とノード全体の両方でその検索を並列化したいと思います。

エンジン入力は、少数のスカラー入力と非常に大きなハッシュ テーブルで構成されます。各エンジン インスタンスは、そのスカラー入力を使用してハッシュ テーブルに小さなローカル変更を加え、良さを計算してから、その変更を破棄します (他のエンジン インスタンスによってコミット/表示される必要はありません)。良さの値は、結果の中から選択するコーディネーターに返されます。

共有状態の手段としての STM TransactionalMap について読んでいました。これは理想的に思えますが、これを共有状態として使用する完全な例は実際には見当たりません。

質問:

  • アクター/stm モデルはこの問題に適しているように見えますか?
  • 共有状態を配布する具体的な例を教えてください。(メッセージとして Ref[TransactionalMap[,]] ですか?
  • 異なるノード間ではなく、ノード内で共有状態を分散することに違いはありますか?

探究心が知りたい、

アラン

4

1 に答える 1

1

共有メモリの処理に関しては、エンジンインスタンスで行われた変更がハッシュテーブルの共有コピーにコミットされることを望まないため、STMがここに適切であるとは思えません。

代わりに、不変のHashMapの方が適している可能性があります。マップ内で変更されない要素は、エンジンインスタンスで共有でき、各マップの違いのみが追加のメモリスペースを使用します。

アクターモデルは、あなたがやりたいことに非常によく合います。必要なエンジンインスタンスごとに1つのアクターを設定し、スカラー値とハッシュマップを含むメッセージを渡します。次に、結果をコーディネーターに返してもらいます。

于 2011-08-30T18:31:14.893 に答える