Firefox web browser - Faster, more secure & customizable |
Mozilla Labs » jetpack » Blog Archive » Elevating JavaScript Performance Through GPU Powerにおいて、FirefoxのJavaScript処理にGPUを活用することでパフォーマンスを向上させるためのアイディアが紹介されている。具体的にはCUDAをJavaScriptから利用できるようにするというもの。APIを拡張する方法とJavaScriptのシンタックスそのものを拡張するという2つのアプローチがあるとし、紹介されているのはAPIを拡張するアプローチ。同アイディアはJetpack 0.5 Contestで優勝したAlexander Miltsev氏の取り組みがベースになっている。
CUDA (Compute Unified Device Architecture)はNVIDIAが提供している同社のグラフィックボードを汎用計算に利用するための環境。
- NVIDIA、線形代数ライブラリ「CULA」を発表 - CUDAに最適化し実装
- NVIDIA、「CUDA Toolkit 2.3」をリリース - 新機能サポートで性能向上
- NVIDIA、CUDAツールキットおよびSDKのバージョン2.2正式リリース
- 【特集】超並列プロセサ - GeForceアーキテクチャとCUDAプログラミング
JavaScriptで開発されたWebアプリケーションはより複雑な処理をするものになりつつある。しかしJavaScriptはインタプリタ言語であり、C言語やC++のようなコンパイル言語と比べて高速には動作しない。そのためより多くの計算リソースとパワーが必要という状況にある。
CPUのコア自身は対象とするWebアプリケーションのJavaScript以外にもページレンダリング処理やほかのアプリケーションの実行、OSそのものの処理など多種多様な処理を実施している。この間GPUはレンダリングに関する処理を実施しているのみであり、ここの余剰リソースをJavaScriptの処理にあてることで、システム全体でみた場合のJavaScriptのパフォーマンスを引き上げようというもの。
Elevating JavaScript Performance Through GPU Powerでは上記サンプルコードで具体的な実装アイディアを示している。Jetpack.toGPU()に関数を渡すと、それがCUDAカーネル向けにトランスレートされ、GPUで処理が実施されるというアイディアになっている。このアイディアはPython向けのPyCUDAに近いものだと説明がある。
より自動的にCUDAへ処理を割り振るには関数型プログラミングのパラダイムが利用できるという説明もあり、次のように処理を記述した場合にどうやってJetpack.toGPU()が利用できるかというサンプルも紹介されている。
先ほどの記述に複雑さを感じるのであればLINQの記述が簡潔でわかりやすいという説明もあり、LINQの記述方法を使った場合の例や、その記述方法をjQueryに適用した場合の記述例も紹介されている。JetpackやjQueryのみならず、ほかのJavaScriptライブラリも同様の方法でそれほど変更を加えなくともCUDA対応が可能だろうと説明がある。
クライアントであるブラウザでの処理効率を引き上げる方法としてはこれまでActiveXやNetscapeプラグイン、Javaアプレットといったアプローチがあったが、どれもメインストリームにはなることができなかったとも説明されている。Native Clientの取り組みがこうした問題を解決する可能性はあるとしながらも、そうした取り組みがブラウザ間のコンセンサスを得て標準化するまでには長い時間と労力がかかるとしている。