2017-02-10

WebAssembly と Google Chrome 56

Google Chrome バージョン 51 からプラットフォームに依らず利用可能になった WebAssembly ですが、定点観測的に Google の Octane で Javascript のベンチマークを取って WebAssembly の有効/無効時のパフォーマンスを比較してみました。→ 本記事は筆者の理解不足があり、意味の無い比較になってしまいました。匿名さんからコメントを頂きました(こちら)。

動作環境は次の通りです。使用した PC は HP Stream 11 の新旧二台を使いました。

今回は 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
CPUOctane
Score
RichardsDelta
blue
CryptoRay
trace
Earley
Boyer
RegexpSplaySplay
Latency
Navier
Strokes
pdf.jsMandreelMandreel
Latency
GB
Emulator
Code
Load
Box2D
Web
zlibType
script
1DisableN28407551888915505967616855111371371186641451187838905545120131519640459404220238104
2DisableN2840810891891641795331636211158926517876751160838765745122491541539669536201847658
3DisableN284075389228160019586172421120693933825349118483921575956331536040199873235328166
4DisableN284077989023158759516164521145593845066032119494383610759851569840319321237818296
5DisableN2840797191711531394981626311023942452954451182539286028130161547140109353230667809
6EnableN28408083897016470953316247113861362340648981182539746301141631547140399321228468123
7EnableN28408256911114605966014785108511362507780591192537335667122491588840039081233028055
8EnableN2840819291501599495851617311013915555866631193738246057128481525739839697234208102
9EnableN2840827893271598195971614111304931539810670117543974547399311531840049573236458155
10EnableN284080699147159159433169128886905575369071163138765770118131539438769956236268144
11DisableN3050737180351444782241559888351229395277151315542965225100311122633266880206237237
12DisableN30506765800614711812115625913584843844013130464207516510861632832856428205897551
13DisableN305069447694139118162155528924848254359851300741075209111031243033956666206516975
14DisableN30506450806714586822415567906483826623665130333753510951931158134397035206536894
15DisableN305067857965136408225158628744832338751091315538234982101741130033955557205956834
16EnableN3050701880671475883321543591051244184755371271243455197108611228434636781207077352
17EnableN3050736981161226580881564187211242456770901310341125284112791182734176359208397345
18EnableN305072297996137468222157269071831376576721300742525211106071178934286934207187329
19EnableN305072177939148048258162479096839446663931287240995136106071162334236511206767388
20EnableN305070308095138918182163798928857289064161284743295225108611159934156145207527345

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]。ディレクティブを付加してから型アノテーションが必要になるのですね。コメントをありがとうございました。

ということで、意味のないベンチマークの比較をしてしまいました。恥ずかしいので記事を消してしまいたいのはやまやまですが、自戒の念を込めてこのまま残しておきます。

参考サイト

  1. bitWalk's: WebAssembly と Google Chrome 51 [2016-05-28]
  2. bitWalk's: WebAssembly と Google Chrome 53 [2016-09-18]
  3. asm.jsとWebAssemblyって実際なんなの? [2015-08-22]
  4. Webブラウザで高速な演算を可能にする低水準言語asm.jsと、WebAssembly詳解ーJavaScript が動く仕組み | HTML5Experts.jp [2016-07-07]
  5. Webブラウザで高速な演算を可能にする低水準言語asm.jsと、WebAssembly詳解ーasm.jsの仕組みとコーディング例 | HTML5Experts.jp[2016-07-25]

 

ブログランキング・にほんブログ村へ
にほんブログ村

2 件のコメント:

匿名 さんのコメント...

JSのベンチマークであるOctaneではWebAssemblyもasm.jsも一切使われていないので、違いが出るとは思えないのですが、何を測ろうとしているのでしょう?WebAssemblyの実装がJSを遅くしていないかどうかの確認ですか?

bitWalk さんのコメント...

コメントをありがとうございます。
Octaneではasm.jsの宣言はされていないのですね。それでは確かに違いが出ないですね。ご丁寧に御指摘をありがとうございます。