[webkit-reviews] review requested: [Bug 178312] [JSC][LLInt] Implement Polymorphic Inline Caches on op_get_by_id : [Attachment 323816] WIP - It starts
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Sat Oct 14 12:29:36 PDT 2017
Caio Lima <ticaiolima at gmail.com> has asked for review:
Bug 178312: [JSC][LLInt] Implement Polymorphic Inline Caches on op_get_by_id
https://bugs.webkit.org/show_bug.cgi?id=178312
Attachment 323816: WIP - It starts
https://bugs.webkit.org/attachment.cgi?id=323816&action=review
--- Comment #1 from Caio Lima <ticaiolima at gmail.com> ---
Created attachment 323816
--> https://bugs.webkit.org/attachment.cgi?id=323816&action=review
WIP - It starts
This Patch starts the implementation. I'm interested in collecting feedback
from you to keep working on it. My idea is to cache Structures using FIFO
policy, to be able to catch different call-sites of a function and optimize for
them (Probably I'm going to create a case for that). IMHO, this policy seems
very simple, but even with it, I could measure some improvements on benchmarks:
PS.: I collected following results running benchmarks with "JSC_useJIT=false"
Benchmark report for V8Spider, Octane, and Kraken on Caios-MacBook-Pro
(MacBookPro12,1).
VMs tested:
"baseline" at
/Users/caiolima/open_projects/WebKit/WebKitBaselineBuild/Release/jsc
"changes" at /Users/caiolima/open_projects/WebKit/WebKitBuild/Release/jsc
Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark.
Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used
the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95%
confidence intervals in milliseconds.
baseline
changes
V8Spider:
crypto 683.1670+-19.2621 ?
835.8115+-431.9966 ? might be 1.2234x slower
deltablue 1362.3902+-27.2429 ?
1370.7209+-18.6387 ?
earley-boyer 659.4617+-399.6603
490.7356+-11.2124 might be 1.3438x faster
raytrace 264.5184+-19.7043 ?
266.9626+-16.2422 ?
regexp 148.3394+-3.1761
148.2460+-8.9221
richards 1456.1012+-30.0906
1454.5450+-40.0814
splay 231.0293+-8.9334 ^
194.3757+-2.3684 ^ definitely 1.1886x faster
<geometric> 496.4563+-34.7263
480.6935+-38.1704 might be 1.0328x faster
baseline
changes
Octane:
encrypt 4.29210+-0.08702 ?
4.32454+-0.08857 ?
decrypt 77.00315+-1.79384 ?
79.30127+-1.12004 ? might be 1.0298x slower
deltablue x2 9.31920+-0.18430
9.13937+-0.25287 might be 1.0197x faster
earley 7.89351+-2.62695
6.85874+-0.15562 might be 1.1509x faster
boyer 117.29007+-1.82930
115.10083+-0.65218 might be 1.0190x faster
navier-stokes x2 90.61067+-17.35486
80.68529+-2.79175 might be 1.1230x faster
raytrace x2 45.02483+-0.48965
43.93484+-0.63733 might be 1.0248x faster
richards x2 4.28244+-0.06543
4.25291+-0.08199
splay x2 3.04093+-0.05215 ^
2.71874+-0.07910 ^ definitely 1.1185x faster
regexp x2 82.33913+-16.75664
71.77397+-5.44225 might be 1.1472x faster
pdfjs x2 217.93367+-28.88964
207.78765+-3.79388 might be 1.0488x faster
mandreel x2 2951.07356+-61.71802
2905.05659+-50.70337 might be 1.0158x faster
gbemu x2 623.67314+-30.73659 ?
656.00748+-23.37269 ? might be 1.0518x slower
closure 0.73940+-0.01035 ?
0.74472+-0.00569 ?
jquery 10.41921+-1.39356
9.88610+-0.63410 might be 1.0539x faster
box2d x2 163.96675+-8.26118
161.95834+-3.38487 might be 1.0124x faster
zlib x2 13847.71583+-227.59617 ^
12545.11145+-496.99654 ^ definitely 1.1038x faster
typescript x2 3462.74837+-54.67934
3430.36820+-66.78332
<geometric> 89.44004+-1.44483 ^
86.00409+-0.88517 ^ definitely 1.0400x faster
Since it isn't possible to re-patch code on Interpreter, I'm using a loop and a
new "op_get_by_id_polymorphic" to handle cached cases and avoid slow paths on
property lookups.
More information about the webkit-reviews
mailing list