[aarch64-port-dev ] RFR: Add support for pipeline scheduling
Edward Nevill
edward.nevill at linaro.org
Fri Oct 31 10:24:39 UTC 2014
Hi,
The following webrev is a first pass at adding pipeline scheduling to JDK8. The pipeline implementation is modeled on A53.
http://openjdk.linaro.org/webrev/141031/hotspot/
- The model only models 4 stages ISS1, EX1, EX2 and WR. It does not model the additional 4 stages in the fetch and decode stages of the pipeline because these are fixed and therefore make no difference to the scheduling.
- The A53 pipeline is dual issue and this is modeled by having 2 dummy resources 'INS0' and 'INS1' and a combined resource 'INS01' which means an instruction can issue as either instruction 0 or instruction 1. The resource INS0, INS1 or INS01 is used in the ISS stage.
- The different A53 pipelines (ALU0, ALU1, MAC, DIV, STORE & BRANCH) are modeled as resources (ALU, MAC, DEV, BRANCH, LDST) which are used in the final stage of the pipeline - ie. the stage where the result could be forwarded.
- I have made no attempt to model Late and Early pipeline stage. IE if a result can be available in Late_ISS I require it to be available in ISS and similarly if a result can be forwarded in Early_WR I say it is available at WR.
- I have not modeled the Neon pipeline. These are simply fixed latency.
The following is the performance improvement I see on A53 on a selection of benchmarks.
Grinderbench
Parallel: +16%
kXML: +1%
PNG: +2%
Chess: +4%
Crypto: +6%
SpecJVM2008
compiler.compiler: +5%
compress: +3%
crypto.aes: +26%
crypto.rsa: +2%
crypto.signverify: +6%
derby: -1%
mpegaudio: +5%
scimark.fft.large: +12%
scimark.lu.large: +0%
scimark.sor.large: -1%
scimark.sparse.large: +28%
scimark.fft.small: +2%
scimark.lu.small: +8%
scimark.sor.small: -1%
scimark.sparse.small: +0%
scimark.monte_carlo: +9%
serial: +1%
sunflow: +3%
xml.transform: +5%
xml.validation: +2%
There is quite a large variation on these results and I would be suspect about some of the larger improvements (+16%, +26%, +28%) however it does seem to offer a consistent improvement.
In the webrev I have turned the default for pipeline scheduling ('OptoScheduling'). It may be that we want to refine this and only turn it on for In-Order cores (not sure what you do about Big-Little). However for the moment I would like to make it the default so the overnight tests will run with it switched on.
OK to push to JDK8?
All the best,
Ed.
More information about the aarch64-port-dev
mailing list