RFR: 8274243: Implement fast-path for ASCII-compatible CharsetEncoders on aarch64

Patric Hedlin phedlin at openjdk.java.net
Mon Dec 6 16:16:32 UTC 2021


Implementation of ISO/ASCII char set encoding, extending current implementation with ASCII encoding support.

Implementation focusing on balance between small footprint and efficiency, trying to utilise a dual SIMD path (e.g. Neoverse N1) for the additional Ascii-check.

Testing: tier1-6

Benchmarks (ran on Aurora/Ampere Altra):

openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:16384-type:ASCII..........72.23%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:16384-type:BIG5...........70.38%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:16384-type:ISO_8859_15....67.81%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:16384-type:UTF_16......... 3.72%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:16384-type:UTF_8..........68.50%

openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:2048-type:ASCII...........65.59%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:2048-type:BIG5............60.59%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:2048-type:ISO_8859_15.....63.79%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:2048-type:UTF_16.......... 1.04%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:2048-type:UTF_8...........63.33%

openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:512-type:ASCII............57.25%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:512-type:BIG5.............49.33%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:512-type:ISO_8859_15......61.37%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:512-type:UTF_16........... 0.02%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:512-type:UTF_8............54.75%

openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:255-type:ASCII............54.52%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:255-type:BIG5.............40.41%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:255-type:ISO_8859_15......58.46%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:255-type:UTF_16...........-0.55%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:255-type:UTF_8............55.98%

openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:127-type:ASCII............47.37%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:127-type:BIG5.............36.41%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:127-type:ISO_8859_15......50.83%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:127-type:UTF_16........... 8.63%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:127-type:UTF_8............48.95%

openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:31-type:ASCII.............17.55%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:31-type:BIG5..............18.58%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:31-type:ISO_8859_15.......20.82%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:31-type:UTF_16............ 4.16%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:31-type:UTF_8.............18.44%

openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:16-type:ASCII.............21.96%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:16-type:BIG5..............22.42%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:16-type:ISO_8859_15.......30.27%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:16-type:UTF_16............-1.17%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:16-type:UTF_8.............35.99%

openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:15-type:ASCII............. 6.19%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:15-type:BIG5.............. 7.34%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:15-type:ISO_8859_15....... 8.34%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:15-type:UTF_16............-0.46%
openjdk.bench.java.nio.CharsetEncodeDecode.encode-size:15-type:UTF_8............. 6.80%

-------------

Commit messages:
 - Removing old implementation of encode_iso_array().
 - Interleaved ISO and ASCII check code. Using post inc in main loop.
 - 8274243: Implement fast-path for ASCII-compatible CharsetEncoders on aarch64

Changes: https://git.openjdk.java.net/jdk/pull/6723/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6723&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8274243
  Stats: 218 lines in 5 files changed: 89 ins; 92 del; 37 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6723.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6723/head:pull/6723

PR: https://git.openjdk.java.net/jdk/pull/6723


More information about the hotspot-compiler-dev mailing list