Webブラウザは多くの場合、コンピュータやモバイルデバイスの能力をフルに利用できない。コードがハードウェアから抽象化されたサンドボックスで実行されることが多く、ブラウザが直接ハードウェアにアクセスすることはない。デスクトップ用のソフトウェアはたとえばCPUのすべてのコアを使い、また現代的なGPUに並列処理をさせて画像のフィルタリングなどを高速化できるが、ブラウザ内で動くJavaScriptのコードにはそれができない。でも、それがもうすぐ変わる。
WebGLやOpenGL、COLLADAなどの標準規格を作っている業界団体Khronos Groupが今日(米国時間3/19)、WebCL 1.0の規格の最終決定と一般公開リリースを発表した。WebCLはOpenCLのブラウザバージョンで、Webブラウザの中からGPUやマルチコアを利用する方法をWebデベロッパに与える。
WebCLのベースであるOpenCL(Open Computing Language)は、同様の能力をデスクトップで提供する。
WebCL作業部会の議長Neil Trevett(Khronosの理事長でNVIDIAのモバイルコンテンツ担当VP)によると、ブラウザのベンダがこの規格を採用すると、デベロッパはこれらの能力を利用してWebGLゲームのための物理演算エンジンや、リアルタイムのビデオ編集ツール、視野像全体(vision)の処理、高度なフィルタのある写真編集ツールなどを、ブラウザ上に実装できるようになる。
基本的に、複数のコードを並列に動かす必要のあるアプリケーションを、ブラウザ内で動かせるようになる。規格そのものはアプリケーションを特定しないが、あえて分かりやすく言えば、ゲームや画像処理がこれらの能力を利用するアプリケーションの筆頭だ。
そういうアプリケーションにとっての障害がブラウザに存在しなくなるので、これまで往々にしてブラウザのせいにされていたパフォーマンスのペナルティも、なくなる。
ChromeのNative Clientやプラグインのようなものを使わずに、ブラウザ内でWebアプリケーションをネイティブかつ高速に動かしたいと思うと、今のところFirefox上のJavaScriptスーパーセットasm.jsぐらいしか方法がない。しかし、ネイティブに近い速度を誇るasm.jsも並列処理はサポートしていないから、高速化にも限界がある。Trevettによると、asm.jsとWebCLの関係は排他的というよりむしろ相補的であり、WebCLのJavaScript結合(バインディング)も提供されるので、デベロッパはいつでも、asm.jsベースのアプリケーションからWebCLを呼び出すことができる。
下の(やや古い)Samsungのビデオを見ると、WebCLにできることがよく分かる:
WebCLはOpenCLとほとんど同じなので、お互いのあいだのコードのポートも容易だ。
ハードウェアを直接操作するコードが増えると、新しいセキュリティの問題も現れる。そこでWebCLのチームは、OpenCLにある機能の一部をあえて不採用にしている。Web上では、それらのセキュリティが保証できないからだ。このプロセスの一環としてチームは、オープンソースのカーネルバリデータ(カーネル検査ツール)を開発し、それが逆に、OpenCLチームのセキュリティ強化につながった、という。
WebCLはデベロッパに対して新しい可能性の世界を開き、これまでは実装困難だった種類のアプリケーションをWebに持ち込めるようになる。しかしそれと同時に、これまでWeb専門でやってきたデベロッパにとっては、未知の世界が開けることになる。Trevettによると、今WebGLのエコシステムが、グラフィクスエンジンの高度な専門家たちが作った比較的使いやすいフレームワーク主導型になっているように、今度は並列処理のエキスパートたちがWebCLのために同様のことをしてくれるだろう。どちらも、低レベルの複雑な細部から、デベロッパを解放してくれるのだ。
WebCLを完全にサポートしたブラウザがいつ登場するか、それはまだ未知数だが、2011年から始まったWebCL作業部会には業界の主だった企業のほとんど…Adobe、AMD、Nvidia、ARM、Intel、Opera Software、Mozilla、Google、Samsung、Qualcomm…が参加している。そしてNokiaはすでにFirefox用のWebCLエクステンションを提供しているから、実際に試してみたい人はそれを利用するとよいだろう。
画像クレジット: Nvidia
[原文へ]
(翻訳:iwatani(a.k.a. hiwa))