Mozilla%E3%81%AEasm.js%E3%81%8C%E3%81%95%E3%82%89%E3%81%AB%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%81%AB%E8%BF%91%E3%81%A5%E3%81%8F

Mozillaのasm.jsがさらにネイティブコードのスピードに近づく

Mozillaのasm.jsはJavaScriptの厳密なサブセットだが、Firefox上の処理系/実装系はそれを、通常のJavaScriptのコードよりも相当高速に動かせる。すなわち、Firefoxが内蔵しているJavaScriptエンジンにはOdinMonkeyと呼ばれるモジュールがあって、そのおかげで今年の3月にはasm.jsのコードがネイティブコードの約2倍の所要時間で動くことを実証した*。そして今週のMozillaの発表 では、多くのベンチマークにおいて、ネイティブの1.5倍以下という遅さ(速さ?)にまで接近した。〔*: 約2倍;ネイティブよりもちろん遅いのだけど相当接近した、という意味。2倍よりは1.5倍の方が、もちろん速い。〕

GoogleはNative ClientでWebアプリケーションが、コンパイラを通ったまさにネイティブのコードを実行することをねらっているが、MozillaはJavaScriptをネイティブに近い速さで動かす方に賭けている。両者のやり方は相当違うけど、共通しているのはどちらも、デベロッパがまずCやC++でコードを書き、それをブラウザ内で動かすことだ。Mozillaはそのために、LLVMからJavaScriptへのコンパイルを行うコンパイラEmscriptenを使用する。

ゲームエンジンはCやC++で書かれているものが多いので、asm.jsも主にゲームをねらっている。実際、Mozillaが初めて公開したasm.jsのデモの一つは、ブラウザ内でネイティブに走るEpicのUnreal Engine 3だった。

かつての2倍遅いから今回の1.5倍遅いへの改良は、asm.jsとコンパイラEmscripteの両方をすこしずついじって達成された、とMozillaのAlon ZakaiRobert Nymanが発表の中で言っている。また、FirefoxのJavaScriptエンジンの改良の効果も大きい。ZakaiとNymanによると、中でもとくにスピードアップに貢献したのは、一部の浮動小数点数演算のの最適化だ。

asm.jsが2倍とか1.5倍と言っている対照のネイティブコードは、C/C++によるオリジナルをgccやclangでコンパイルした結果である。それを、Emscriptenとasm.jsによるコードと比較している。

下図は、最新の結果だ:

asm1.5b
〔ブラウザ~HTMLがサイズを縮小しているので、クリックして別画面で見ると原寸で(大きく)見れます。〕

asm.jsは今のところMozillaのプロジェクトだが、GoogleのChromeチームはかねてから気にしていて、最近そのOctaneベンチマークの一員に加えた。Chrome本体がasm.jsを近々サポートすることはないと思うが、asm.jsのコードは、ふつうのJavaScriptコードとしては今のどのJavaScriptエンジンでも動く。Firefoxの上ほど速くないけど。

[原文へ]
(翻訳:iwatani(a.k.a. hiwa))

広告

blog comments powered by Disqus

コメント

jo
セキュリティ対策じゃないです。ちゃんと原文通りに訳してください。
huang1mu4/alarky
Codecademyは、超画期的でした、でも、今となっては、Codecademyも、他のサイトも、よ…
sykk
記事にもある通り一般ユーザー向けではなく、あくまでこれを必要としている人達に向けた商品であり、その対…