RFR 8134802 - LCM register pressure scheduling
Berg, Michael C
michael.c.berg at intel.com
Thu Sep 10 02:34:03 UTC 2015
All, please see the link: https://bugs.openjdk.java.net/browse/JDK-8134802
As I have uploaded a performance report for data collected with/wo register pressure scheduling. I would like to keep the node flag in place, we have room for 15 more flags after this one is added, and this is a formal phase of C2 and so a good use of one the flags. The addition of VectorSet would incrementally raise the overhead of the algorithm. Please have a look and comment as needed.
Thanks,
Michael
-----Original Message-----
From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
Sent: Friday, September 04, 2015 6:42 PM
To: Berg, Michael C; hotspot-compiler-dev at openjdk.java.net
Subject: Re: RFR 8134802 - LCM register pressure scheduling
Impressive work. Thank you for reusing current RA functionality.
"is very minimal" - how minimal? 2% or 10%?
Did it gave any performance improvement? Changes are significant and should be justified.
Changes look reasonable. I only notice one thing:
Flag bits in Node is very precious to use for node's state tracking. Why not use VectorSet?
Thanks,
Vladimir
On 9/4/15 1:33 PM, Berg, Michael C wrote:
> Hi Folks,
>
> I would like to contribute LCM register pressure scheduling. I need
> two reviewers to examine this patch and comment as needed:
>
> Bug-id: https://bugs.openjdk.java.net/browse/JDK-8134802
>
> webrev:
>
> http://cr.openjdk.java.net/~mcberg/8134802/webrev.01/
>
> These changes calculate register pressure at the entry of a basic
> block, at the end and incrementally while we are scheduling. It uses
> an efficient algorithm for recalculating register pressure on a as
> needed basis. The algorithm uses heuristics to switch to a pressure
> based algorithm to reduce spills for int and float registers using
> thresholds for each. It also uses weights which count on a per
> register class basis to dope ready list candidate choice while
> scheduling so that we reduce register pressure when possible. Once we
> fall over either threshold, we start trying mitigate pressure upon the
> affected class of registers which are over the limit. This happens on
> both register classes and/or separately for each. We switch back to
> latency scheduling when pressure is alleviated. As before we obey hard
> artifacts such as barriers, fences and such. Overhead for constructing
> and providing liveness information and the additional algorithmic
> usage is very minimal, so as affect compile time minimally.
>
> Thanks,
>
> Michael
>
More information about the hotspot-compiler-dev
mailing list