0

Scala プログラムが処理できるアクターの数を見積もるにはどうすればよいですか?

コンテキストとして、私は本質的に、細胞を高速で作成および忘却するニューラル ネットワークとは何かを考えています。各セルをアクターにすることを考えていますが、数百万になります。このデザインを追求する価値があるかどうかを判断しようとしていますが、俳優の数の限界を見積もることはできません. 私の意図は、1 つのシステムで完全に実行する必要があるため、分散制限は適用されません。

さらに言えば、より良い選択肢があれば、私は間違いなく Scala に落ち着いたわけではありませんがたとえば、他のセルへの接続、接続の重みなどのように、セルには状態があります。 「各セルは最終的なものです。変更とは、現在のセルを同じID番号を持つ新しいセルに置き換えることを意味します。」

PS: Scala はわかりません。このプロジェクトを行うためにそれを拾うことを検討しています。Java、Object Pascal、Ada など、他の多くの代替案も検討しています。しかし、アクターは、スレッドプールよりも私が求めているものに適しているようです(そして Java は、スレッド/セル設計を実行可能にするのに十分な数のスレッドを処理できません。

PS: ほとんどのアクターは常に静止していますが、アクターのコレクション全体を循環させる方法が必要です。言語に組み込まれていない場合は、各セル内の最初/次のリンクを介して管理できます。(両方のリンクが必要で、中央のセルを解放のために抽出できるようにします。)

4

1 に答える 1

2

ニューラル ネットワーク シミュレーションでは、実際の問題は、通信にどれだけの計算作業が費やされ、セル内で何かを計算するためにどれだけの時間が費やされるかということです。ほとんどの労力がコミュニケーションにある場合、アクターはおそらく正確さのためには良い選択ですが、効率のためにはまったく良い選択ではありません (かなりうまく機能する Akka を使用しても、AsyncFPはうまくいくかもしれません)。何百万ものニューロンは遅いように聞こえますが、効率はおそらく重要な問題です。ニューロンがかなり負荷の高い計算を自分で行う場合、通信のオーバーヘッドは大した問題ではありません。

通信がボトルネックで、小さなメッセージがたくさんある場合は、ネットワークを保持するためのカスタム データ構造と、所有しているすべてのプロセッサを活用してロックの量を最小限に抑えるカスタム スレッド処理を設計する必要があります。あなたがしなければなりません。たとえば、スペースがある場合、各ニューロンはそれにリンクされたニューロンからの入力値の配列を保持でき、その出力を計算するときにロックなしでその配列を直接読み取り、入力ニューロンは値更新するだけですロックなし彼らが行ったように。次に、すべてのニューロンを1つの大きなプールにダンプし、マスターにそれらをチャンクに分散させます。私にはわかりませんが、一度に1万個ずつ、それぞれ独自のスレッドに分散させます。Scala はこのような場合には問題なく動作しますが、多くの低レベルの作業を自分で行うか、シミュレーションが終了するまで非常に長い時間を待つ必要があります。

于 2012-12-24T19:03:22.760 に答える