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

Patric Hedlin phedlin at openjdk.java.net
Tue Dec 14 14:56:32 UTC 2021


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

Implementation with slight focus on balance between footprint and efficiency, trying to utilise a dual SIMD path (e.g. Neoverse N1) for the additional Ascii-check and avoid performance loss in the ISO-only case.

- Interleaved ISO and ASCII check code.
- Avoid 'umaxv' in the ISO main flow.
- Using post inc in main loop.
- Retain 8-char loop.
- Removing conditional prefetch (no upside).
- Adding ISO-8859-1 to encode-decode benchmark.

Testing: tier1-3

The revised version compares like this (master vs. update).

Benchmark                   (size)       (type)  Mode  Cnt    Score   Error  Units
CharsetEncodeDecode.encode   16384        UTF-8  avgt   30   17.920 ± 0.229  us/op
CharsetEncodeDecode.encode   16384         BIG5  avgt   30   18.867 ± 0.356  us/op
CharsetEncodeDecode.encode   16384  ISO-8859-15  avgt   30   17.419 ± 0.220  us/op
CharsetEncodeDecode.encode   16384   ISO-8859-1  avgt   30    6.200 ± 0.134  us/op
CharsetEncodeDecode.encode   16384        ASCII  avgt   30   17.149 ± 0.219  us/op
CharsetEncodeDecode.encode   16384       UTF-16  avgt   30  135.115 ± 1.440  us/op


Benchmark                   (size)       (type)  Mode  Cnt    Score   Error  Units
CharsetEncodeDecode.encode   16384        UTF-8  avgt   30    9.018 ± 0.179  us/op
CharsetEncodeDecode.encode   16384         BIG5  avgt   30   10.550 ± 0.470  us/op
CharsetEncodeDecode.encode   16384  ISO-8859-15  avgt   30    8.843 ± 0.187  us/op
CharsetEncodeDecode.encode   16384   ISO-8859-1  avgt   30    6.406 ± 0.155  us/op
CharsetEncodeDecode.encode   16384        ASCII  avgt   30    8.822 ± 0.173  us/op
CharsetEncodeDecode.encode   16384       UTF-16  avgt   30  135.195 ± 1.432  us/op

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

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

Changes: https://git.openjdk.java.net/jdk18/pull/20/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk18&pr=20&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8274243
  Stats: 256 lines in 6 files changed: 126 ins; 90 del; 40 mod
  Patch: https://git.openjdk.java.net/jdk18/pull/20.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk18 pull/20/head:pull/20

PR: https://git.openjdk.java.net/jdk18/pull/20


More information about the nio-dev mailing list