狠狠撸

狠狠撸Share a Scribd company logo
Dart?VM?Performance
Outline
 Dart?VM のベンチマーク
 Dart?VM の仕組み
2013/05/16?Google?I/O?Extended?in?Japan?LT
Dart?VM?Advent?Calendar から来ました
nothingcosmos?<nothingcosmos@gmail.com>
皆さん Dart?VM ご存知ですか?
2011/11 の Dart?VM
DeltaBlue(2012/05)
DeltaBlue(2013/05)
Richards(2012/05)
Richards(2013/05)
0 100 200 300 400 500 600 700 800 900 1000
180
669
248
887
Octane ベンチマークのスコア
スコア
ここ 12 ヶ月の Dart?VM の高速化

約 3.71 倍
約 3.57 倍
皆さん Dart?VM に
興味が沸いてきませんか?
Fibonacchi 数で速さを測定
 Fibonacchi 数 (40) で測定
 V8,?JVM,?gcc,?clang,?icc,?ifort と比較
constexpr は除外
int fibo(int n) {
if (n < 2) {
return n;
} else {
return fibo(n-1) + fibo(n-2);
}
}
V8??fibo(40)?1370?ms
V8
JVM
clang
gcc
icc
ifort
Dart VM
0 200 400 600 800 1000 1200 1400 1600
1370
420
600
430
480
640
408
fibo(40) の実行時間
実行時間 (ms)
JVM??fibo(40)?420?ms
V8
JVM
clang
gcc
icc
ifort
Dart VM
0 200 400 600 800 1000 1200 1400 1600
1370
420
600
430
480
640
408
fibo(40) の実行時間
実行時間 (ms)
clang??fibo(40)?600?ms
V8
JVM
clang
gcc
icc
ifort
Dart VM
0 200 400 600 800 1000 1200 1400 1600
1370
420
600
430
480
640
408
fibo(40) の実行時間
実行時間 (ms)
gcc??fibo(40)?430?ms
V8
JVM
clang
gcc
icc
ifort
Dart VM
0 200 400 600 800 1000 1200 1400 1600
1370
420
600
430
480
640
408
fibo(40) の実行時間
実行時間 (ms)
icc??fibo(40)?480?ms
V8
JVM
clang
gcc
icc
ifort
Dart VM
0 200 400 600 800 1000 1200 1400 1600
1370
420
600
430
480
640
408
fibo(40) の実行時間
実行時間 (ms)
ifort??fibo(40)?640?ms
V8
JVM
clang
gcc
icc
ifort
Dart VM
0 200 400 600 800 1000 1200 1400 1600
1370
420
600
430
480
640
408
fibo(40) の実行時間
実行時間 (ms)
Dart?VM??fibo(40)?408?ms
V8
JVM
clang
gcc
icc
ifort
Dart VM
0 200 400 600 800 1000 1200 1400 1600
1370
420
600
430
480
640
408
fibo(40) の実行時間
実行時間 (ms)
これだけ見ると
Dart?VM は JVM や C と
ほぼ同等の速度になりつつある。
※ ただし Fibonacchi 数に限る?
Dart の公式ベンチ
 緑が Dart?VM 、黄色が V8
 縦軸がスコア、横軸が Timestamp
Dart の公式ベンチ DeltaBlue
 Dart?VM は V8 の 2 倍のスコア
Dart の公式ベンチマーク Richards
 Dart?VM は V8 の 1.67 倍のスコア
Dart の公式ベンチマーク Tracer
 Dart?VM は V8 の 2.16 倍のスコア
DeltaBlue で JVM と比较してみた
DeltaBlue で JVM と比较してみた
 Dart?VM が 438 で 10% くらい速い。
InfoQ:Latest?Dart?VM?Beats?JVM?in?
DeltaBlue?Benchmark
 起動速度は Dart?VM が速い
 ピーク速度は JVM が速い
iteration JVM6
(ms)
Dart
VM(ms)
差 (ms)
10x 9.3 5.9 3.4
100x 2.96 1.24 1.72
1000x 0.898 0.636 0.262
10000x 0.5229 0.536 -0.0131
100000x 0.48908 0.55263 -0.06355
Dart?VM のゴール
速さの秘密は
 Snapshots
 JIT?Compiler?Optimization
Snapshot の仕組み
 Dart?VM 起動時を FullSnapshot し
バイナリに埋め込む。 +400kbyte
 Core の I/O と Scan が不要
100,000micros??>?100micros
Snapshots の有無を比較
dart
dart_no_snapshot
0 100 200 300 400 500 600
410
410
430
540
fibo(40) の実行時間 (ms)
fibo
time
130ms
20ms
起動が 1/6
JIT?Compile
Dart VM
Isolate
HeapJITCompiler
Dart Src
ObjectPool
Initialize
JITCompile
GC
Code
Runtime?Feedback
Dart VM
Isolate
HeapJITCompiler
Dart Src
ObjectPool
Execution
GC
Code
Log
Type feedback
JIT?Compiler?Optimization
Dart VM
Isolate
HeapJITCompiler
Dart Src
ObjectPool
GC
Code
Log
Execution
OptimizedCode
Optimizer
Optimize
DeltaBlue?2012/07 ~ 2012/11
Optimizer の追加
SelectRepresentation,
TypePropagaotr
Inlining
DeltaBlue?2012/11 ~ 2013/02
DeltaBlue?2013/01 ~ 2013/05(V8 の 2 倍 )
Field Type Feedback
Polymorphic Inlining
Richards?2012/07 ~ 2012/11
Optimizer の追加
SelectRepresentation,
TypePropagaotr
Inlining
Richards?2012/09 ~ 2012/12
RedundantLoadElimination
Richards?2013/01 ~ 2013/05(V8 の 1.67 倍 )
Branch Optimization
Compare Optimizetion
Field Type Feedback
Tracer?2013/03 ~ 2013/05(V8 の 2.16 倍 )
Store Sinking の追加
Try?Dart?VM !
もっと先へーー《加速》したくはないか
VM
測定環境
 OS:Ubuntu?12
build/target:ia32
cpu:core?i7?2600k
 Dart?VM?version
bleeding_edge?r22719(2013/05/16)
補足
 Dart?VM?beeding_edge?r22611(2013/05/16)
 V8?trunk(2013/05/12)?3.18.6
 JVM7?Hotstpot?1.7.0_15(Option: なし )
 clang3.3RC1?trunk(Option:?O3)
 gcc?4.6.3(Option:?Ofast)
 icc/ifort?13.1.1(Option:?fast)

More Related Content

Dart VM Performance