[aarch64-port-dev ] RFR(S): 8243597: AArch64: Add support for integer vector abs
Yang Zhang
Yang.Zhang at arm.com
Fri Jun 5 10:35:26 UTC 2020
Hi Andrew
Please check this java program.
http://cr.openjdk.java.net/~yzhang/8243597/TestAbs.java
absvs is used to generate AbsVS node.
Abss is used to generate AbsI node.
I update the jmh benchmarks to make them aligned with absvs and abss above. The new results are as follows:
New vector jmh:
http://cr.openjdk.java.net/~yzhang/8243597/TestVectNew.java
New scalar jmh:
http://cr.openjdk.java.net/~yzhang/8243597/TestScalarNew.java
Before:
Benchmark (size) Mode Cnt Score Error Units
TestVectNew.testVectAbsVB 1024 avgt 5 1221.852 ± 3.336 us/op
TestVectNew.testVectAbsVI 1024 avgt 5 1450.422 ± 6.344 us/op
TestVectNew.testVectAbsVL 1024 avgt 5 1429.934 ± 4.901 us/op
TestVectNew.testVectAbsVS 1024 avgt 5 1227.134 ± 2.901 us/op
TestScalarNew.testAbsI 1024 avgt 5 3777.007 ± 10.067 us/op
TestScalarNew.testAbsL 1024 avgt 5 3776.717 ± 13.776 us/op
TestScalarNew.testAbsS 1024 avgt 5 3153.195 ± 10.175 us/op
After
Benchmark (size) Mode Cnt Score Error Units
TestVectNew.testVectAbsVB 1024 avgt 5 147.389 ± 0.921 us/op
TestVectNew.testVectAbsVI 1024 avgt 5 444.318 ± 14.107 us/op
TestVectNew.testVectAbsVL 1024 avgt 5 874.074 ± 2.224 us/op
TestVectNew.testVectAbsVS 1024 avgt 5 224.559 ± 0.902 us/op
TestScalarNew.testAbsI 1024 avgt 5 3087.172 ± 62.372 us/op
TestScalarNew.testAbsL 1024 avgt 5 3113.322 ± 10.237 us/op
TestScalarNew.testAbsS 1024 avgt 5 2723.048 ± 8.338 us/op
Why the improvement of scalar abs is not as obvious as vector abs is because only one instruction is reduced than before.
Before:
0x0000ffff80b763d8: cmp w12, #0x0
0x0000ffff80b763dc: neg w11, w12
0x0000ffff80b763e0: csel w11, w11, w12, lt // lt = tstop
After:
0x0000ffffa0bd7a38: cmp w12, wzr
0x0000ffffa0bd7a3c: cneg w13, w12, lt // lt = tstop
Ps. The generated assembly files are also attached.
Before this patch
http://cr.openjdk.java.net/~yzhang/8243597/TestAbs.java.aarch64.ori.asm
After this patch:
http://cr.openjdk.java.net/~yzhang/8243597/TestAbs.java.aarch64.asm
Regards
Yang
-----Original Message-----
From: Andrew Haley <aph at redhat.com>
Sent: Friday, June 5, 2020 3:53 PM
To: Yang Zhang <Yang.Zhang at arm.com>; aarch64-port-dev at openjdk.java.net; hotspot-compiler-dev at openjdk.java.net
Cc: nd <nd at arm.com>
Subject: Re: [aarch64-port-dev ] RFR(S): 8243597: AArch64: Add support for integer vector abs
On 05/06/2020 06:52, Yang Zhang wrote:
> The test cases in TestScalar.java are used to benchmark AbsI.
When I ask for a java program that reproduces your result, it's not unreasonable for me to expect you to send one. You still haven't, and I don't understand why your test case wasn't provided.
Can you please add a benchmark to your JMH benchmarks that actually shows the result you claimed? Thank you?
> @Benchmark
> public void testAbsI() {
> for (int n = 0; n < LOOP_CNT; n++) {
> for (int i = 0; i < ia.length; i += 4) { ----------> That stride is *4* will make auto-vectorization fail. Only AbsI node is generated.
> ic[i] = Math.abs(ia[i] + ib[i]);
> }
> }
> }
> Or you can also use jmh vector test cases which are used to benchmark vector abs.
> http://cr.openjdk.java.net/~yzhang/8243597/TestVect.java
That is what I have been doing. They do not show the result above.
--
Andrew Haley (he/him)
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com> https://keybase.io/andrewhaley
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671
More information about the aarch64-port-dev
mailing list