Re: 回复:RFR: 8149733: AArch64: refactorchar_array_equals/byte_array_equals/string_equals

Hui Shi hui.shi at linaro.org
Wed Feb 24 13:02:48 UTC 2016


Thanks Andrew! Your comment looks really better and performance doesn't
change when run JMHSample_97_ArrayEqual.java
<http://cr.openjdk.java.net/~hshi/8149733/webrev2/JMHSample_97_ArrayEqual.java>
 test.

latest webrev http://cr.openjdk.java.net/~hshi/8149733/webrev3/
several small name and format issues:
1. "ary1" -> "a" in method declaration

2. Use tmp1 instead of rscratch1 directly
+    ldrw(cnt1, Address(a1, length_offset));
+    ldrw(cnt2, Address(a2, length_offset));
+    eorw(rscratch1, cnt1, cnt2);
+    cbnzw(rscratch1, DONE);

3.       Blank after “!”
+  if (! is_string) {


Following is result with Aleksey's updated test case (-w 5 -wi 3 -i3 -r
10), first 4 group are for base run with base string length 0, 8, 31, 1024.
Performance with patch doesn't show same improvement with early test. Only
small length string equal tests still show obvious improvement.

grep -A 6 "^Benchmark" base.result
Benchmark                         (baselength)  (size)  Mode  Cnt   Score
Error  Units
JMH_ArrayEquals.byte_equal                   0     500  avgt    9  15.563 ?
0.005  us/op
JMH_ArrayEquals.byte_not_equal               0     500  avgt    9  16.425 ?
0.167  us/op
JMH_ArrayEquals.char_equal                   0     500  avgt    9  15.635 ?
0.294  us/op
JMH_ArrayEquals.char_not_equal               0     500  avgt    9  15.557 ?
0.377  us/op
JMH_ArrayEquals.string_equal                 0     500  avgt    9  22.307 ?
0.063  us/op
JMH_ArrayEquals.string_not_equal             0     500  avgt    9  21.368 ?
0.025  us/op
--
Benchmark                         (baselength)  (size)  Mode  Cnt   Score
Error  Units
JMH_ArrayEquals.byte_equal                   8     500  avgt    9  16.058 ?
0.012  us/op
JMH_ArrayEquals.byte_not_equal               8     500  avgt    9  16.910 ?
0.574  us/op
JMH_ArrayEquals.char_equal                   8     500  avgt    9  17.094 ?
0.008  us/op
JMH_ArrayEquals.char_not_equal               8     500  avgt    9  17.114 ?
0.156  us/op
JMH_ArrayEquals.string_equal                 8     500  avgt    9  25.033 ?
0.074  us/op
JMH_ArrayEquals.string_not_equal             8     500  avgt    9  24.968 ?
0.244  us/op
--
Benchmark                         (baselength)  (size)  Mode  Cnt   Score
Error  Units
JMH_ArrayEquals.byte_equal                  31     500  avgt    9  18.821 ?
0.091  us/op
JMH_ArrayEquals.byte_not_equal              31     500  avgt    9  19.763 ?
0.002  us/op
JMH_ArrayEquals.char_equal                  31     500  avgt    9  24.210 ?
0.033  us/op
JMH_ArrayEquals.char_not_equal              31     500  avgt    9  27.400 ?
0.382  us/op
JMH_ArrayEquals.string_equal                31     500  avgt    9  29.825 ?
0.098  us/op
JMH_ArrayEquals.string_not_equal            31     500  avgt    9  31.918 ?
0.100  us/op
--
Benchmark                         (baselength)  (size)  Mode  Cnt    Score
  Error  Units
JMH_ArrayEquals.byte_equal                1024     500  avgt    9  188.613
? 7.386  us/op
JMH_ArrayEquals.byte_not_equal            1024     500  avgt    9  193.399
? 4.448  us/op
JMH_ArrayEquals.char_equal                1024     500  avgt    9  316.324
? 9.976  us/op
JMH_ArrayEquals.char_not_equal            1024     500  avgt    9  341.307
? 1.082  us/op
JMH_ArrayEquals.string_equal              1024     500  avgt    9  324.059
? 2.352  us/op
JMH_ArrayEquals.string_not_equal          1024     500  avgt    9  326.954
? 1.121  us/op




grep -A 6 "^Benchmark" opt.result
Benchmark                         (baselength)  (size)  Mode  Cnt   Score
Error  Units
JMH_ArrayEquals.byte_equal                   0     500  avgt    9  15.923 ?
0.132  us/op
JMH_ArrayEquals.byte_not_equal               0     500  avgt    9  15.996 ?
0.336  us/op
JMH_ArrayEquals.char_equal                   0     500  avgt    9  16.001 ?
0.127  us/op
JMH_ArrayEquals.char_not_equal               0     500  avgt    9  15.361 ?
0.004  us/op
JMH_ArrayEquals.string_equal                 0     500  avgt    9  21.083 ?
0.337  us/op
JMH_ArrayEquals.string_not_equal             0     500  avgt    9  19.887 ?
0.479  us/op
--
Benchmark                         (baselength)  (size)  Mode  Cnt   Score
Error  Units
JMH_ArrayEquals.byte_equal                   8     500  avgt    9  16.574 ?
0.148  us/op
JMH_ArrayEquals.byte_not_equal               8     500  avgt    9  16.596 ?
0.719  us/op
JMH_ArrayEquals.char_equal                   8     500  avgt    9  17.874 ?
0.431  us/op
JMH_ArrayEquals.char_not_equal               8     500  avgt    9  17.831 ?
0.284  us/op
JMH_ArrayEquals.string_equal                 8     500  avgt    9  24.279 ?
0.033  us/op
JMH_ArrayEquals.string_not_equal             8     500  avgt    9  22.850 ?
0.444  us/op
--
Benchmark                         (baselength)  (size)  Mode  Cnt   Score
Error  Units
JMH_ArrayEquals.byte_equal                  31     500  avgt    9  19.010 ?
0.006  us/op
JMH_ArrayEquals.byte_not_equal              31     500  avgt    9  19.962 ?
0.071  us/op
JMH_ArrayEquals.char_equal                  31     500  avgt    9  25.038 ?
0.108  us/op
JMH_ArrayEquals.char_not_equal              31     500  avgt    9  27.268 ?
0.063  us/op
JMH_ArrayEquals.string_equal                31     500  avgt    9  29.366 ?
0.103  us/op
JMH_ArrayEquals.string_not_equal            31     500  avgt    9  31.357 ?
0.047  us/op
--
Benchmark                         (baselength)  (size)  Mode  Cnt    Score
  Error  Units
JMH_ArrayEquals.byte_equal                1024     500  avgt    9  190.034
? 4.067  us/op
JMH_ArrayEquals.byte_not_equal            1024     500  avgt    9  192.504
? 4.675  us/op
JMH_ArrayEquals.char_equal                1024     500  avgt    9  313.925
? 8.476  us/op
JMH_ArrayEquals.char_not_equal            1024     500  avgt    9  342.520
? 7.915  us/op
JMH_ArrayEquals.string_equal              1024     500  avgt    9  326.392
? 2.009  us/op
JMH_ArrayEquals.string_not_equal          1024     500  avgt    9  328.526
? 3.617  us/op


Regards
Hui

On 24 February 2016 at 00:17, Andrew Haley <aph at redhat.com> wrote:

> My version is at
>
> http://cr.openjdk.java.net/~aph/8149733/
>
> The changes I made are:
>
>         I rewrote most of the comments because I couldn't understand
>         them.  I intend no criticism, and I understand that English
>         isn't the language of your birth.  Please tell me if you can
>         understand my comments.
>
>         "generic_array_equals" -> "arrays_equals"
>         Reason: it's not generic, it's only bytes and chars.
>         Also, this is what x86_64 calls the same routine.
>
>         "ary1" -> "a"
>         Reason: "ary" just looks odd.  Also, these are the names in the
>         java code.
>
>         "cmp; br.nz" -> "eor, bnz"
>         Reason: Don't clobber flags for no reason.
>
>         There's no need to check for the same arrays if we're
>         comparing strings.
>
> Otherwise, the code is the same.  I haven't much tested this, but it
> should give the same performance.  Please test it, and tell me if I've
> broken anything.
>
> Thanks,
>
> Andrew.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20160224/7c962865/attachment-0001.html>


More information about the hotspot-compiler-dev mailing list