Javascriptでの分散コンピューティング

先日、Life with Playstationを発見しましたが、その本質はFolding @ homeのバックグラウンドプロセスにあります。 タンパク質分子の凝固のコンピューターシミュレーションのための分散コンピューティングプロジェクト。 ニュースを読み、天気を見て、PS3はFolding @ homeの計算を行います。



そして、ユーザーが私たちのサイトで作業しているときにブラウザーで計算を行うのはなぜかというアイデアを得ました。サイトを表示するときにプロセッサーをロードするのは最小限だからです。



アイデアを具体化するために分散方法で計算できることを長い間考えることができませんでした... 3Dシーンのレンダリングは、テストでは正当化されず、送信データに応じてコストがかかります。 私は学生時代のKMPFについての簡単な実験室の仕事を思い出しました-いくつかの料金でフィールドの可能性を視覚化します。 非常にシンプルで、配布できます。





計算例



5つの正電荷と5つの負電荷が、キューブ5.12 x 5.12 x 5.12メートルでランダムに散乱しています。 立方体の各センチメートルの電界ポテンシャルを計算する必要があります。 それは簡単です-センチメートルごとにすべての料金を調べて、このセンチメートルの可能性を要約します。



512層の512x512セルがあります。 1つのレイヤーを計算するのに6秒かかりました。 フィールド全体には約1時間かかります。



受信データのサイズ


結果として、各センチメートルに4バイトのデータがあり、キューブ全体が512 MBを占めるような計算精度が必要だとします。



300番目のレイヤーレンダー



画像



仕組み



クライアントは、計算モジュール(モデル)とI / Oモジュールを含むスクリプトをダウンロードし、サーバーはモデルとタスクの状態を要求します。

モデルの状態:すべてのポイントと電荷の座標、計算するスペースの量。 タスク:計算の間隔。たとえば、512〜1024セル(レイヤーの1行)。

クライアントは512セルを計算し、このデータをサーバーに送信します(2 KBのデータ)。 それに応じて、彼は計算のための新しいタスクを受け取ります。 などなど。



制御するには、クライアントにタスクを発行し、計算結果を受信するサーバーが必要です。 サーバーには、計算用のジョブキューがあります。 各タスクにはタイムアウトがあり、その後、キューに戻ります。 サーバーはデータをストレージ(ファイル)に保存します。

合計で512個のセルに262144個のタスク(262144個の2Kbデータブロック)があります。



画像







All Articles