-
Notifications
You must be signed in to change notification settings - Fork 31
Fix GraalVM arguments in the README #57
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
12bf885
to
d09ae00
Compare
This paper could help in understanding. |
Thanks for the links, Vojin. I've run this benchmark suite with Graal and C2 and collected profiles from each with a few different tools. The forward flamegraphs (C2 / Graal) show that the Graal compiler was still quite busy when the profiler started after 100s warmup. I suppose that makes sense with Graal's more aggressive approach to inlining. We might need to give Graal longer to warm up to get a real measurement of the peak performance. Looking at the respective reverse flamegraphs (C2 / Graal), I can immediately see less time in itable stubs, suggesting that Graal has managed to devirtualize more. We've got some known problems in the 2.12 collections related to excessive forwarder methods that exhaust C2's default Comparing the I'm hopeful that further analysis and testing will help Graal (by providing a good datapoint and by flushing out some bugs), but might also help us in the near term find a few areas in scalac that could be hand-tuned to bridges some of the performance gap. |
Regarding the ongoing compilation:
Before we get rid of compilation in the background it is hard to judge the other numbers exactly. The The devirtualization results are quite interesting. I guess most of it comes from better inlining heuristics. To better understand what inlining decisions are made, which could help in manually optimizing I would also compare include comparison with Graal core in the graphs. For Scala, it is already doing a better job than C2. Maybe it is better investing time in optimizing the |
We have frequency scaling disabled during benchmark runs (using this script). Our profile runs also collect the output of I've subscribed to oracle/graal#293 and look forward to what you discover. I know that running scalac on a single thread throws up some tricky problems for the JIT compiler, e.g if type tests and other branches that look to be constant during typer but can explore different paths when new AST nodes show up or disappear later on. I actually went and turned the default implementations of I do plan to automate benchmarking against different JDKs (e.g 8/9/HS+Graal/OpenJ9) soon, but it requires a bit of annoying plumbing work in our results database first. |
No description provided.