[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-graal-dev
Subject: Re: Escape Analysis and MH.invoke, MH.invokeExact
From: Lukas Stadler <lukas.stadler () jku ! at>
Date: 2013-07-30 5:49:58
Message-ID: 9D980859-076F-4FD2-9380-A6B1EB022D78 () jku ! at
[Download RAW message or body]
Hey,
I'm going to talk to Chris (Thalinger) tomorrow, he's been working on the method \
handle implementation in Graal. I don't think this is so specific to method handles - \
it should apply to other forms of "closures" as well. Vlad also mentioned this at \
ECOOP - a higher order function should probably get a bonus when making an inlining \
decision.
- Lukas
On Jul 29, 2013, at 0:16 , Garcia Gutierrez Miguel Alfredo \
<miguelalfredo.garcia@epfl.ch> wrote:
> Lukas,
>
> > Are you referring to the fact that the method handle itself is not actually used \
> > within the called code, because it's only used to determine what needs to be \
> > called?
>
> Yes, that's the case I had in mind. Within that case there appear to be subcases, \
> e.g. (a) the "payload" of the MH is a direct pointer to the target method; or (b) \
> the MH contains in addition bound arguments, or in general composes other MHs.
> > I'd have to look into how the method handle calls are actually encoded...
>
> I haven't looked into that aspect in Graal. Regarding the other HotSpot compilers, \
> the description of MH implementation doesn't mention an interplay with EA: \
> https://wikis.oracle.com/display/HotSpotInternals/Method+handles+and+invokedynamic
> > do you think that it happens a lot that method handles could be escape analyzed?
>
> Well, it's only a hunch, but the argument goes as follows:
> (1) a method P receives (via some formal) different MH instances across \
> invocations, (2) if the MH is just invoke'd or invokeExact'd and otherwise doesn't \
> escape P, (3) then P could be inlined.
> Perhaps I'm somewhat biased in that I believe the scenario above co-exists \
> frequently with two additional boosters: (4) the MH is invoked repeatedly inside P \
> (that's often the case for collection operations) (5) in spite of being inlined, no \
> DeoptimizeNode appears to be needed (assuming, or better said *hoping* that the \
> lowerings of invoke() and invokeExact() don't behave like invokevirtual)
> That's the summary (ie, the "hunch" in words). Perhaps (4) and (5) are additional \
> bonus, which don't degrade performance even if not present.
>
> Miguel
>
> --
> Miguel Garcia
> Swiss Federal Institute of Technology
> EPFL - IC - LAMP1 - INR 328 - Station 14
> CH-1015 Lausanne - Switzerland
> http://lamp.epfl.ch/~magarcia/
>
> ________________________________________
> From: Lukas Stadler [lukas.stadler@jku.at]
> Sent: Monday, July 29, 2013 6:30 AM
> To: Garcia Gutierrez Miguel Alfredo
> Cc: graal-dev@openjdk.java.net
> Subject: Re: Escape Analysis and MH.invoke, MH.invokeExact
>
> I'm not that familiar with the MethodHandle code, I have to admit.
> Are you referring to the fact that the method handle itself is not actually used \
> within the called code, because it's only used to determine what needs to be \
> called? I'd have to look into how the method handle calls are actually encoded... \
> do you think that it happens a lot that method handles could be escape analyzed?
> - Lukas
>
> On Jul 27, 2013, at 3:42 , Garcia Gutierrez Miguel Alfredo \
> <miguelalfredo.garcia@epfl.ch> wrote:
> > Lukas,
> >
> > Thanks for the link, that overview is quite helpful. For the moment I'm just \
> > wading through the info deluge of PEA and its interplay with inlining.
> > I was wondering whether it could pay off to make (Partial) EA handle specially \
> > the "escaping behavior" of a MethodHandle instance wrt invoke (resp. \
> > invokeExact). From what I've seen, the receiver of an instance-method invocation \
> > is deemed method-escaping. However it appears that (conceptually) the EA analysis \
> > could special-case MH.invoke() and MH.invokeExact() callsites, by not concluding \
> > "receiver escapes" for them. Perhaps this heuristic could enable other \
> > optimizations.
> > All of the above of course with the big disclaimer that I'm not that familiar \
> > with EA, and without knowing for sure whether an implementation of MH.invoke, \
> > MH.invokeExact could (somehow) let "this" escape.
> >
> > Miguel
> > --
> > Miguel Garcia
> > Swiss Federal Institute of Technology
> > EPFL - IC - LAMP1 - INR 328 - Station 14
> > CH-1015 Lausanne - Switzerland
> > http://lamp.epfl.ch/~magarcia/
> >
> > ________________________________________
> > From: Lukas Stadler [lukas.stadler@jku.at]
> > Sent: Friday, July 26, 2013 8:24 PM
> > To: Garcia Gutierrez Miguel Alfredo
> > Cc: graal-dev@openjdk.java.net
> > Subject: Re: escapa analysis, packed objects
> >
> > Hi Miguel,
> >
> > unfortunately there's no documentation on Graal's partial escape analysis yet.
> > A short intro is available here: \
> > https://wiki.openjdk.java.net/display/Graal/Graal+Partial+Escape+Analysis I'm \
> > currently working on a publication on this topic, I'd be happy to send you a \
> > version of it as soon as it's complete enough to make sense :-) I also could give \
> > you an introduction over skype.
> > Concerning the "structs" proposals:
> > The IBM proposal seems to be mostly about how to interact with the C world, like \
> > a convenient wrapper around sun.misc.Unsafe. I think that John Rose's proposal is \
> > more interesting, especially since the locking mechanism allows partial escape \
> > analysis to work much more efficiently. (We actually already do a similar trick \
> > for boxing operations, so we could take advantage of this mechanism pretty \
> > quickly)
> > Much of this can be handled by the compiler, but of course it's only part of the \
> > picture. Allowing structs as return values means that this needs to be handled \
> > correctly by the interpreter, by deoptimization, by stack walking, in the debug \
> > interface, in jni code, etc. I think it's too big a task (and too many VM \
> > changes) for us to do, but once this proposal gets picked up by the hotspot team, \
> > we can quickly provide efficient support for it.
> > - Lukas
> >
> > On Jul 25, 2013, at 13:32 , Garcia Gutierrez Miguel Alfredo \
> > <miguelalfredo.garcia@epfl.ch> wrote:
> > >
> > > Hi,
> > >
> > > Escape analysis in Graal looks interesting. Are there any publications \
> > > describing it? What I've heard about is:
> > > (1) Jong-Deok Shoi et al. \
> > > https://wikis.oracle.com/display/HotSpotInternals/EscapeAnalysis
> > > (2) EA in the client compiler, \
> > > http://ssw.jku.at/General/Staff/TK/Research/Publications/
> > >
> > >
> > > Another question, this time looking into the future. Approaches have been put \
> > > forward to support "structs in the JVM", things like:
> > > packed objects, \
> > > http://www.slideshare.net/mmitran/ibm-java-packed-objects-mmit-20121120
> > > http://openjdk.java.net/jeps/169
> > >
> > > What about Graal? For example, the use case "method returns a struct", would \
> > > HotSpot stand in the way, or can LIR be tweaked to realize that? I know it's a \
> > > slippery topic, but comments are welcome! :)
> > >
> > > Miguel
> > >
> > > --
> > > Miguel Garcia
> > > Swiss Federal Institute of Technology
> > > EPFL - IC - LAMP1 - INR 328 - Station 14
> > > CH-1015 Lausanne - Switzerland
> > > http://lamp.epfl.ch/~magarcia/
> >
>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic