RFR: Fast matrix math & inlining

Roman Kennke rkennke at redhat.com
Fri Mar 17 17:06:36 UTC 2017


This implements the same fast matrix math that Aleksey did in C2, but
for the runtime C++ version. Shenandoah::set_connected() is called from
the hot path in partial GC, so this should be benefitial. It also
changes the signature of set_connected() to accept pointers instead of
region indices, which simplifies calling code too. For debug builds,
there is a little verification which checks that the matrix address
calculated by that fast version and the old slow version match.

SPECjvm compiler.compiler shows a slight improvement:

baseline:

  108,901 ±(99.9%) 42,594 ops/min [Average]
  Partial GC                  =    88,05 s (a =   144819 us) (n =   608)
(lvls, us =     5977,    97656,   128906,   175781,   347946)

patched:

  119,307 ±(99.9%) 44,978 ops/min [Average]
  Partial GC                  =    81,14 s (a =   131076 us) (n =   619)
(lvls, us =     4648,    93164,   119141,   160156,   283260)

Tested with specjvm and gc-bench (arrayfragger)

http://cr.openjdk.java.net/~rkennke/matrixmath/webrev.00/
<http://cr.openjdk.java.net/%7Erkennke/matrixmath/webrev.00/>

Roman




More information about the shenandoah-dev mailing list