JavaScript への SIMD ベクトル化の追加

同カテゴリーの次の記事

最新日本語版インテル® コンパイラー 15.0 を同梱「インテル® Parallel Studio XE 2015 Composer Edition 日本語版」 最新アップデート 提供開始

この記事は、Go Parallel に掲載されている「Adding SIMD Vectorization to JavaScript」の日本語参考訳です。


インテルのエンジニアにより、JavaScript に SIMD 機能が追加されました。この 2 部シリーズの最初の記事では、Jeff Cogswell がこの背景について説明します。

インテルのエンジニア達は、JavaScript に SIMD ベクトル化を追加するプロジェクトに取り組んでいます。この製品はまだ利用できませんが、一部のサンプルコードは利用可能です。この記事では、このプロジェクトがなぜ重要なのかを説明します。以下の記事では、サンプルコードの一部を示し、その処理を確認します。

20 年以上前に Web が作成されたとき、Web はスタティック・ページで構成されていました。しばらくするとフォームが登場しましたが、フォームを超える対話性はあまりありませんでした。2014 年の現在、Web は根本的に異なっています。多くの場合、我々は単なる Web ページではなく、Web ブラウザーで動作しているソフトウェア・アプリケーションを目にしています。Facebook* や Google* の Gmail* は Web アプリケーションの具体的な例です。これらの 2 つのサイトでは、ページをブラウズする代わりに、ブラウザーで動作する GUI を操作します。GUI は、ブラウザーが理解する言語である JavaScript で記述されています。

私は JavaScript に関する多くの批判を耳にします。その一部は正しいものですが、多くは理解が不足していることが原因だと思われます。JavaScript を好きな人も嫌いな人もいるでしょうが、JavaScript は Web アプリケーションの開発に使用されている最も一般的な言語です。CoffeeScript のようなプログラム言語もありますが、これらの言語は JavaScript に変換されます。例外は Google* の Dart ですが、現在のところ広くサポートされているとは言えません。

私が 6 年前に大量の JavaScript コーディングを行っていた頃は、JavaScript は面倒で遅いものでした。しかし、この 4 年ほどで、ブラウザーベンダーは最適化と JIT コンパイルにより JavaScript を大幅に改善しました。さらに、jQuery や Knockout.js (私のお気に入りの 2 つ) のようなライブラリーによって、ブラウザー・アプリケーションを記述する作業が大幅に簡略化されました。その後、HTML5 が登場し、キャンバス、ローカルストレージなどで、Web の世界はさらに快適になっています。JavaScript はかつてないほど高速になっていますが、まだ多くの改良の余地があります。その 1 つは並列化です。現在、JavaScript は並列化されていません。非同期モデルを使用していますが、シングルスレッドのみです。

並列プログラムの開発者として、JavaScript を並列化する 2 つの分野を指定するならば、マルチコアとベクトル化でしょう。これらの 2 つのテクノロジーは、並列ワークに最も使用されます。

インテルのエンジニアは SIMD ベクトル化をサポートするべく、Chrome* と Firefox* で用いられているオープンソースの JavaScript エンジンを変更する作業に取り組んでいます。しかし、JavaScript 言語そのものは変えていません。そこで、新しい SIMD 機能にアクセスするために、JavaScript コードのライブラリーを作成しました。

インテル® Composer は、SIMD アーキテクチャーを検出して、そのアーキテクチャーを自動的に利用する C++ コードを生成できます。これは、この SIMD JavaScript ライブラリーと同じアイデアです。言語を変更していないため、この SIMD ライブラリーは、SIMD を利用できる場合にのみ SIMD ベクトル化を使い、利用できない場合は従来の非ベクトル化ループを使用します。つまり、SIMD ライブラリーを呼び出す JavaScript コードを記述できることを意味します。SIMD が実際に利用できる場合もできない場合も、コードは問題なく動作します。

まとめ
この素晴らしいアイデアにより、JavaScript はネイティブ・アプリケーションをサポートする段階に 1 歩近づきました。同様にマルチコア機能も利用できるようになるはずですが、しばらく先のことでしょう。次の記事では、SIMD JavaScript ライブラリーについて説明します。SIMD 機能を備えた JavaScript ランタイムエンジンを利用することはできませんが、少なくともインテルのエンジニアが使う JavaScript コードを見て、どのように動作しているかを確認できます。

関連記事