[Webkit-unassigned] [Bug 178312] [JSC][LLInt] Implement Polymorphic Inline Caches on op_get_by_id

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Sat Oct 14 12:29:36 PDT 2017


https://bugs.webkit.org/show_bug.cgi?id=178312

Caio Lima <ticaiolima at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
                 CC|                            |ticaiolima at gmail.com
           Assignee|webkit-unassigned at lists.web |ticaiolima at gmail.com
                   |kit.org                     |
 Attachment #323816|                            |review?
              Flags|                            |

--- 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.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20171014/dbade909/attachment-0001.html>


More information about the webkit-unassigned mailing list