並列処理は今やモバイルデバイス上でさえ利用可能だが、JavaScriptの大部分は未だにシーケンシャルである。Intel Labsはマルチコアシステムを有効活用するJavaScript拡張機能に取り組み、Firefoxプラグインをリリースした。
このJavaScriptの並列拡張機能(コードネームRiver Trail)はIntel Labsのプロジェクトで、IntelのマルチコアCPUやそのVector Extensionの処理能力をWebアプリケーションへもたらそうと試みている。River Trailは、写真編集のような数値計算を駆使したアプリケーションを、ブラウザ内で動作させることを可能にするだろう。
Intel LabsのStephan Herhut氏は、既存のWebテクノロジーとの統合が主な検討対象だったと述べている。
River Trailを支えるテクノロジーで興味深いのは、既存のWebテクノロジーとのシームレスな統合です。River Trailはシンプルかつ強力なデータ並列プログラミングモデルでJavaScriptを拡張します。できるだけこの拡張機能が自然に統合されるよう、多くの努力が費やされました。我々の目的は、普通のJavaScriptを書くのと同じくらい簡単に、River Trailを使ったWebアプリケーションを書けるようにすることでした。さらに、River TrailがJavaScriptに埋め込まれれば、今後出てくるHTML5 APIともうまく組み合わせることができます。我々は特に、River TrailがWebGL(最近導入された、ブラウザで3次元のグラフィックスを表示させるためのJavaScript API)とうまく連携できるように気を遣いました。デモアプリケーションの一つに、4000以上の物体を使った物理シミュレーションがあります。これは計算をRiver Trailで、表示をWebGLで行っています。
River Trailは、実行時に低レベルのハードウェア抽象化層に翻訳される、決定論的データ並列構造を使ってJavaScriptを拡張する。複数のCPUコアとベクター命令の活用により、River TrailはシーケンシャルなJavaScriptに比べて著しく高速化されるとのことだ。
具体的に言うと、River TrailはJavaScriptにParallelArray型を追加する。これは並列配列データを保持した読み取り専用のデータ構造で、コンストラクタやParallelArrayのプロパティメソッドの一つを呼び出した際に作られる。コンストラクタへの入力データは一般的なJavaScriptの配列や型付き配列、ParallelArrayの値を生成するのに使われる関数などだ。例えば、“new ParallelArray([1,2,3])”では、1、2、3を保持したParallelArrayが作成される。combineやfilter、map、reduceといった関数を使うことができ、それらは並列に動作する。それらに渡されたJavaScript関数はOpenCLにコンパイルされる。これらの関数はJavaScriptのサブセットを使うことができる。
River TrailはFirefoxのアドオンとして利用可能である。
著者(Dionysios G. Synodinos)はWebエンジニア兼フリーランスのコンサルタントで、Web技術に重点的に取り組んでいる