[aarch64-port-dev ] [10] RFR: 8189101 - AARCH64: AARCH64: string compare intrinsic doesn't use prefetch

Dmitrij Pochepko dmitrij.pochepko at bell-sw.com
Mon Oct 30 18:20:06 UTC 2017


Hi,

this is a second pre-review as part of JEP “Improve performance of 
String and Array operations on AArch64” for another improved intrinsics 
to get early feedback.

Please pre-review patch for 8189101 - “AARCH64: AARCH64: string compare 
intrinsic doesn't use prefetch”

This patch moves code for long string processing to a stub and 
reorganize it. For large strings code was re-organized, added large 
64-byte unrolled loops and prefetch. Webrev is available at [1].
Surpisingly, it helps a bit for small strings, because code for string 
comparison node is now shorter, so, less icache lines needed to be 
populated to execute it.

A benchmark was developed to measure performance [2], which contains 4 
cases with various sizes: LL (latin1 vs latin1), LU (latin1 vs utf), UL 
(utf vs latin1) and UU (utf vs utf). I can see up to x5 performance on 
systems without h/w prefetcher (ThunderX) and up to 40% improvement on 
system with h/w prefetcher(Cortex A53).

Raw performance numbers are at [3]. Charts for performance numbers above 
are: Cortex A53 [4] and ThunderX [5].

Testing: I've run java/lang/String (contains test for String::compareTo 
method) jtreg tests with both Xmixed and Xcomp modes and found no 
regressions.

Any additional numbers on other systems are welcome, as well as early 
feedback on the code.

[1] http://cr.openjdk.java.net/~dpochepk/8189101/webrev/
[2] http://cr.openjdk.java.net/~dpochepk/8189101/StringCompareBench.java
[3] http://cr.openjdk.java.net/~dpochepk/8189101/strCmp_T88.txt and 
http://cr.openjdk.java.net/~dpochepk/8189101/strCmp_RPi.txt
[4] http://cr.openjdk.java.net/~dpochepk/8189101/R_Pi_LL.png 
http://cr.openjdk.java.net/~dpochepk/8189101/R_Pi_LU.png 
http://cr.openjdk.java.net/~dpochepk/8189101/R_Pi_UL.png and 
http://cr.openjdk.java.net/~dpochepk/8189101/R_Pi_UU.png
[5] http://cr.openjdk.java.net/~dpochepk/8189101/ThunderX_LL.png 
http://cr.openjdk.java.net/~dpochepk/8189101/ThunderX_UL.png 
http://cr.openjdk.java.net/~dpochepk/8189101/ThunderX_LU.png and 
http://cr.openjdk.java.net/~dpochepk/8189101/ThunderX_UU.png

Thanks,

Dmitrij


More information about the aarch64-port-dev mailing list