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

コメント

shigtak
GOPRO株主としては、ぜひ成功してほしい、続報を期待しています。
神崎渉瑠
7インチタブレットは多くの紙製手帳と同じ幅ということもあり使いやすいと思うが、ベゼルが大きいから非…
アサギマダラ
へえ、これは良いなぁ。これに続いて公共無線がもっと普及してくれればさらに……だけど
abology
كشف تسربات المياه نقل اثاث بالرياض تخزين اثاث…
Steve Jobs
ocnモバイルoneのsimカードlg g3で使えますか?
フォロー

新しい投稿をメールで受信しましょう。

Join 140 other followers