Google Chrome バージョン 51 からプラットフォームに依らず利用可能になった WebAssembly ですが、定点観測的に Google の Octane で Javascript のベンチマークを取って WebAssembly の有効/無効時のパフォーマンスを比較してみました。→ 本記事は筆者の理解不足があり、意味の無い比較になってしまいました。匿名さんからコメントを頂きました(こちら)。
動作環境は次の通りです。使用した PC は HP Stream 11 の新旧二台を使いました。
- PC: HP Stream 11-r016TU (Celeron N2840), HP Stream 11-y004TU (Celeron N3050)
- OS: Fedora 25 (x86_64)
- Google Chrome バージョン 56.0.2924.87 (64bit)
今回は Octane 2.0 を、WebAssembly の機能を無効、有効それぞれ 5 回ずつ、二台の PC で実施、計 20 回でベンチマークのスコアを取得しました。今までのベンチマークでは、各条件 5 回実施したうち、最高スコアを比較対象としました[1][2]。しかし今回は他の情報を捨ててしまうのがもったいないと思い、全ての情報を反映させるべく R の ggplot2 でプロットしました。
WebAssembly の有効化/無効化
Google Chrome のアドレスバーに chrome://flags/#enable-webassembly と入力します。試験運用版 WebAssembly の行で「有効にする」あるいは「無効にする」を選択します(下図)。
画面下の「今すぐ再起動」をクリックして Google を再起動して機能を有効にします(下図)。
ベンチマーク結果
Octane によるベンチマーク結果を下記にまとめました。PC の違いは(文字数の短く表記に便利なので)CPU の違いとして旧モデル Stream 11-r016TU を N2840、新モデル Stream 11-y004TU を N3050 と表しています。
# | Web Assembly | CPU | Octane Score | Richards | Delta blue | Crypto | Ray trace | Earley Boyer | Regexp | Splay | Splay Latency | Navier Strokes | pdf.js | Mandreel | Mandreel Latency | GB Emulator | Code Load | Box2D Web | zlib | Type script |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Disable | N2840 | 7551 | 8889 | 15505 | 9676 | 16855 | 11137 | 1371 | 1866 | 4145 | 11878 | 3890 | 5545 | 12013 | 15196 | 4045 | 9404 | 22023 | 8104 |
2 | Disable | N2840 | 8108 | 9189 | 16417 | 9533 | 16362 | 11158 | 926 | 5178 | 7675 | 11608 | 3876 | 5745 | 12249 | 15415 | 3966 | 9536 | 20184 | 7658 |
3 | Disable | N2840 | 7538 | 9228 | 16001 | 9586 | 17242 | 11206 | 939 | 3382 | 5349 | 11848 | 3921 | 5759 | 5633 | 15360 | 4019 | 9873 | 23532 | 8166 |
4 | Disable | N2840 | 7798 | 9023 | 15875 | 9516 | 16452 | 11455 | 938 | 4506 | 6032 | 11949 | 4383 | 6107 | 5985 | 15698 | 4031 | 9321 | 23781 | 8296 |
5 | Disable | N2840 | 7971 | 9171 | 15313 | 9498 | 16263 | 11023 | 942 | 4529 | 5445 | 11825 | 3928 | 6028 | 13016 | 15471 | 4010 | 9353 | 23066 | 7809 |
6 | Enable | N2840 | 8083 | 8970 | 16470 | 9533 | 16247 | 11386 | 1362 | 3406 | 4898 | 11825 | 3974 | 6301 | 14163 | 15471 | 4039 | 9321 | 22846 | 8123 |
7 | Enable | N2840 | 8256 | 9111 | 14605 | 9660 | 14785 | 10851 | 1362 | 5077 | 8059 | 11925 | 3733 | 5667 | 12249 | 15888 | 4003 | 9081 | 23302 | 8055 |
8 | Enable | N2840 | 8192 | 9150 | 15994 | 9585 | 16173 | 11013 | 915 | 5558 | 6663 | 11937 | 3824 | 6057 | 12848 | 15257 | 3983 | 9697 | 23420 | 8102 |
9 | Enable | N2840 | 8278 | 9327 | 15981 | 9597 | 16141 | 11304 | 931 | 5398 | 10670 | 11754 | 3974 | 5473 | 9931 | 15318 | 4004 | 9573 | 23645 | 8155 |
10 | Enable | N2840 | 8069 | 9147 | 15915 | 9433 | 16912 | 8886 | 905 | 5753 | 6907 | 11631 | 3876 | 5770 | 11813 | 15394 | 3876 | 9956 | 23626 | 8144 |
11 | Disable | N3050 | 7371 | 8035 | 14447 | 8224 | 15598 | 8835 | 1229 | 3952 | 7715 | 13155 | 4296 | 5225 | 10031 | 11226 | 3326 | 6880 | 20623 | 7237 |
12 | Disable | N3050 | 6765 | 8006 | 14711 | 8121 | 15625 | 9135 | 848 | 4384 | 4013 | 13046 | 4207 | 5165 | 10861 | 6328 | 3285 | 6428 | 20589 | 7551 |
13 | Disable | N3050 | 6944 | 7694 | 13911 | 8162 | 15552 | 8924 | 848 | 2543 | 5985 | 13007 | 4107 | 5209 | 11103 | 12430 | 3395 | 6666 | 20651 | 6975 |
14 | Disable | N3050 | 6450 | 8067 | 14586 | 8224 | 15567 | 9064 | 838 | 2662 | 3665 | 13033 | 3753 | 5109 | 5193 | 11581 | 3439 | 7035 | 20653 | 6894 |
15 | Disable | N3050 | 6785 | 7965 | 13640 | 8225 | 15862 | 8744 | 832 | 3387 | 5109 | 13155 | 3823 | 4982 | 10174 | 11300 | 3395 | 5557 | 20595 | 6834 |
16 | Enable | N3050 | 7018 | 8067 | 14758 | 8332 | 15435 | 9105 | 1244 | 1847 | 5537 | 12712 | 4345 | 5197 | 10861 | 12284 | 3463 | 6781 | 20707 | 7352 |
17 | Enable | N3050 | 7369 | 8116 | 12265 | 8088 | 15641 | 8721 | 1242 | 4567 | 7090 | 13103 | 4112 | 5284 | 11279 | 11827 | 3417 | 6359 | 20839 | 7345 |
18 | Enable | N3050 | 7229 | 7996 | 13746 | 8222 | 15726 | 9071 | 831 | 3765 | 7672 | 13007 | 4252 | 5211 | 10607 | 11789 | 3428 | 6934 | 20718 | 7329 |
19 | Enable | N3050 | 7217 | 7939 | 14804 | 8258 | 16247 | 9096 | 839 | 4466 | 6393 | 12872 | 4099 | 5136 | 10607 | 11623 | 3423 | 6511 | 20676 | 7388 |
20 | Enable | N3050 | 7030 | 8095 | 13891 | 8182 | 16379 | 8928 | 857 | 2890 | 6416 | 12847 | 4329 | 5225 | 10861 | 11599 | 3415 | 6145 | 20752 | 7345 |
OctaneScore
まずは OctaneScore の結果です。どちらの CPU においても WebAssembly を有効にした方がスコアが高くなっていますが、CPU の差の方が大きく、しかも、N3050 の方があきらかにスコアが低いという結果になりました。
以下、ベンチマークの各項目の結果です。
Richards
Deltablue
Crypto
Raytrace
EarleyBoyer
Regexp
Splay
SplayLatency
NavierStrokes
pdf.js
Mandreel
MandreelLatency
GB Emulator
CodeLoad
Box2DWeb
zlib
Typescript
まとめ
本ベンチマークは 2 月の最初の週末に実施したのですが、詳しくまとめる時間が取れずに一週間が過ぎようとしていたので、内容が古くなる前に公開してしまいました。ベンチマークの各項目の説明など、追記して行く予定です。
後記
本記事に関して下記のコメントをいただきました。
JSのベンチマークであるOctaneではWebAssemblyもasm.jsも一切使われていないので、違いが出るとは思えないのですが、何を測ろうとしているのでしょう?WebAssemblyの実装がJSを遅くしていないかどうかの確認ですか?
考えてみると、asm.jp や WebAssembly によって Javascript の実行速度が勝手に速くなるものだと思いこんでいましたが、そうでは無かったようです[3][4][5]。ディレクティブを付加してから型アノテーションが必要になるのですね。コメントをありがとうございました。
ということで、意味のないベンチマークの比較をしてしまいました。恥ずかしいので記事を消してしまいたいのはやまやまですが、自戒の念を込めてこのまま残しておきます。
参考サイト
- bitWalk's: WebAssembly と Google Chrome 51 [2016-05-28]
- bitWalk's: WebAssembly と Google Chrome 53 [2016-09-18]
- asm.jsとWebAssemblyって実際なんなの? [2015-08-22]
- Webブラウザで高速な演算を可能にする低水準言語asm.jsと、WebAssembly詳解ーJavaScript が動く仕組み | HTML5Experts.jp [2016-07-07]
- Webブラウザで高速な演算を可能にする低水準言語asm.jsと、WebAssembly詳解ーasm.jsの仕組みとコーディング例 | HTML5Experts.jp[2016-07-25]
にほんブログ村
2 件のコメント:
JSのベンチマークであるOctaneではWebAssemblyもasm.jsも一切使われていないので、違いが出るとは思えないのですが、何を測ろうとしているのでしょう?WebAssemblyの実装がJSを遅くしていないかどうかの確認ですか?
コメントをありがとうございます。
Octaneではasm.jsの宣言はされていないのですね。それでは確かに違いが出ないですね。ご丁寧に御指摘をありがとうございます。
コメントを投稿