JavaScriptをGPUで高速化する試み、モジラがJetpackで検討中
モジラが、JavaScriptをGPUのパワーを借りて高速化する試みを行っています。FirefoxのJetpackプロジェクトに協力しているメンバーがブログにポストしたエントリ「Elevating JavaScript Performance Through GPU Power」で、その可能性と方法について触れています。また1つ、JavaScriptの可能性が広がるかもしれません。
Webでは高精細な動画や音声などがやり取りされるようになり、またセカンドライフのような3次元表示など、Webブラウザ上で行われる情報処理は高度化しています。
今後はさらに動画の加工や音声認識のような高度なアプリケーション、あるいはWebブラウザで大量のデータを表示、分析するようなアプリケーションなども期待されるでしょう。
こうしたWebブラウザでの高度な処理要求に応えるため、NVIDIAが推進するGPUを用いた並列処理アーキテクチャのCUDAをJavaScriptから利用する方法について検討しているとのことです。
APIを拡張する方法、シンタックスを拡張する方法
エントリでは、JavaScriptを拡張する方法として、APIを拡張する方法と、JavaScriptのシンタックスを拡張する方法の2つが提案されています。
その仕組みについてはうまく説明できる自信がないので、いくつかの方法とサンプルコードを引用して、どのような提案が行われているのかを紹介します。以下は大規模ループのような処理をGPUにまかせる際の手続きについてのサンプルです。
Jetpack.toGPU()を用いてGPUへの処理を明示する
var resNumbers = Jetpack.toGPU( function(nums, numsSize) {
var sqrFun = function(v) { return v * v; }
for (var i = 0; i < size; ++i)
numbers[i] = sqrFun(numbers[i]);
}, numbers, size);
// some job here
関数型言語を導入する
var sqrFun = function(v) { return v * v; }
map(sqrFun, numbers);
マイクロソフトのLINQの技術を応用する
var resNumbers = Jetpack.Linq.toGPU().from(numbers).map(sqrFun);
jQueryを応用する
$("div.test"). add("p.quote").addClass("blue").
slideDown("slow").toGPU();
マルチコアのCPUが一般的になり、GPUもiPhoneなどモバイルを含むほとんどのデバイスに搭載され、またクラウドの登場によって分散処理も一般的になってきた現在、JavaScriptだけでなくあらゆるプログラミング言語で並列処理を効率的に記述し、実行する方法が模索されています。
いまのところ、普通にプログラミングをすればコンパイラやインタプリタがそれを自動的に最適な並列処理へと展開してくれる、という理想的なシステムはどの処理系でもまだありません。ここで提案されているように開発者はコードのどこが並列処理をするべき部分なのか考えつつ組み込んでいく必要があります。
それは開発者にとってはまた頭を悩ませる課題が1つ増えたことを意味するのかもしれませんが、一方でまた1つソフトウェアの可能性を広げるものでもあると思います。そしてJavaScriptで並列処理やGPUの能力を引き出せるようになれば、さらにJavaScriptが第一級のプログラミング言語の地位を固めることになるのではないでしょうか。