Hotspot loves PHP.reboot
Christian Thalinger
christian.thalinger at oracle.com
Mon Sep 5 03:22:17 PDT 2011
On Sep 5, 2011, at 1:11 AM, Rémi Forax wrote:
> I've just compiled the hotspot (64bits server) using the hotspot-comp
> workspace of hotspot express (hsx)
> http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/
>
> Here are the result when running PHP.reboot on fibonacci
> (-server is the server VM of jdk1.7.0):
>
> Java:
> java -server bigfibo 4.45 s
> java -hsx bigfibo 4.44 s
>
> PHP.reboot (no type annotation)
> phpr.sh -server bigfibo 22.72 s
> phpr.sh -hsx bigfibo 13.61 s
>
> PHP.reboot (type specialization)
> phpr.sh -server bigfibo 11.09 s
> phpr.sh -hsx bigfibo 8.06 s
>
> PHP.reboot (user defined type annotation)
> phpr.sh -server bigfibo2 6.96 s
> phpr.sh -hsx bigfibo2 4.21 s
>
> PHP.reboot is an hybrid runtime, it starts with an interpreter
> that walks the AST (really slow) and then compile to bytecode.
>
> The first test is with no type information provided by the user,
> so all variables are object and invokedynamic is used for the
> operations, the comparison and for function calls.
> As you see, there is a huge speedup.
>
> The second test enables a flag that ask the runtime to try to
> specialize the function at runtime. Because the algorithm
> used is a fast-forward typechecker, the parameter of fibo
> is san pecialized as int but the return type is still an object
> (because fibo is recursive).
> So basically here, invokedynamic is used for the function calls
> and the + between the results of the function calls.
> This '+' is a nasty one because the two parameters are objects,
> so it requires a double guards.
> You can see the speedup is nice too.
>
> The third test uses a file that declare the parameter type and
> return type of fibo as int, so only the function calls are done
> using invokedynamic.
> You can also see the speedup and weirdly it's now faster than Java
> (not a lot if compare the value but don't forget that
> PHP.reboot starts in interpreter mode) so it's clearly faster.
> I will take a look to the inlining tree to try to understand why,
> it's maybe because fibo is a recursive call or because using
> an invokedynamic which is resolved as an invokestatic
> enables more inlining than just an invokestatic.
>
> John, Christian, Tom and all the others of the hotspot-comp team,
> you make my day :)
These numbers make mine too :-) Thanks for trying the current version.
-- Christian
>
> cheers,
> Rémi
>
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
More information about the mlvm-dev
mailing list