「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 並列 JavaScript マシン

並列 JavaScript マシン

2024 年 11 月 6 日に公開
ブラウズ:304

著者: Vladas Saulis、PE Prodata、クライペダ、リトアニア

2024年5月18日

抽象的な
このペーパーでは、シンプルかつ自動バランスの取れた方法でマルチコア CPU システムを利用できる新しいプログラミング モデルを紹介します。このモデルは、天気予報、核物理学、検索エンジンなど、ほとんどの大規模並列計算分野で並列タスクやシステムを開発するためのより簡単なプログラミング パラダイムも提案します。

最近、私たちは新しいハードウェア アーキテクチャの進歩とパフォーマンスのさらなる向上によって、コンピューティング哲学の新たな変化に直面しています。マルチコア アーキテクチャは近い将来、普及するテクノロジーになるでしょう。

これを活用するにはどうすればよいでしょうか?この文書は、私たちが考えられる解決策の 1 つに関するものです。

提案されたコンピューティング モデル (「オブジェクト フロー モデル」と名付けられています) は、Berkeley から出版された有名な論文 [1] で提起された質問に対するいくつかの答えも提供します。このモデルを使用して得られる利点の短いリストを次に示します:

・簡単なプログラミングプロセスとさらなるメンテナンス

· オブジェクト処理ユニット (OPU) をオンザフライで追加または削除できる場合の、自然な OPU (CPU) の統合と移行

· 自動負荷分散

・タスクパート間の同期は不要

・システムレベルでの相互ロックはほとんど、またはまったくありません

これらの特性はすべて、このドキュメントで後述する Parallel JavaScript Machine (PJM) に実装されています。 PJM は、複数の JavaScript タスク、複数のユーザー、および複数のフロントエンド コンソールを制御するミニ オペレーティング システムとして認識される場合があります。

導入
PJM (OS) の主な目的は、//#pragma .

の形式で特別に作成されたコメントによって表される特別な命令 (ヒント) を導入することで並列プログラミングを簡素化することです。

Parallel JavaScript Machine は NodeJS を使用し、フロントエンドの Web サーバーとして、またコードの並列実行を実際に行う OPU のサーバーとして実装されます。 OPU も NodeJS で実装された小規模な JavaScript ネットワーク クライアントです。必要な数だけそれらをメインの並列マシン サーバーにローカルまたはリモートで接続できます。並列処理の全体的なパフォーマンスは、接続されている OPU の数に大きく依存します。

すべてのシステム部分は連携して動作し、実行中の JavaScript タスクを起動して解析し、それらのチャンクをシステム実行キューに入れ、選択したチャンク間で何らかの協調的なマルチタスクを提供するミニ OS として理解できます。計算結果は、OPU からメイン サーバーを介して console.log 出力をパイプライン処理することにより、Web クライアントのコンソールに出力されます。すべての OPU は独自の CPU (ローカルまたはリモート) に割り当てられ、単純なラウンドロビン スケジューラを通じて動作します (後で説明します)。これは、PM2 プロセス マネージャー ノード モジュールを使用することで実現されます。

「古いバイナリや C プログラムとの互換性は業界にとって貴重であり、一部の研究者はマルチコア製品計画の成功を支援しようとしていますが、私たちはより大胆な考えを考えてきました。私たちの目標は、何千ものプロセッサを実現することです…」[1] 単一の物理コンピュータ上では必要ありませんが、ネットワーク全体で、すべてが中央サーバー ユニットによって調整されます。システムの観点から見ると、すべての CPU/OPU は、ローカル CPU とリモート CPU を区別しない内部ネットワーク ソケット プロトコルを介して動作します。サーバー (PJM) とクライアント (OPU) — すべて JavaScript で書かれているため、C バイナリとは [まだ] 互換性がありません。

PJM で実行されているすべての並列プログラムは、ES6 JavaScript 拡張機能を使用してはなりません (ES5 を使用する必要があります)。ここで重要なのは、クラス、アロー関数、lets と consts、そして特に async/await などの拡張機能はほとんど並列化できないため、JavaScript 内部のより徹底的な調査が必要であるということです。これが、PJM が NodeJS V8.2.1 で実行される理由です。パフォーマンスの向上と概念の明確さのために、すべてのノード モジュールがこのバージョンにロックされています。

PJM は http://Parallel-js.net:8888 にある Web コンソールを使用して制御され、タスクが実行されます。通常は次のようになります:

Parallel JavaScript Machine

Web コンソールは ExtJS フレームワークを使用して記述され、express.js HTTP NodeJS モジュールを使用して PJM サーバーに接続されます。 Web コンソールの別の部分 (コンソールとメッセージと呼ばれる) は、WebSocket を使用して接続されます。ここには、すべてのプログラムの出力とシステム メッセージがリアルタイムで送信されます。 Web コンソールでは実際の計算は実行されないことを知っておくことが重要です。すべての計算は PJM サーバーと OPU で実行されます。

このプロジェクトに興味がある場合は、ここで記事全文をご覧ください。

このプロジェクトのソースコードはここにあります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/vsaulis/Parallel-javascript-machine-551k?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3