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

Roger Riggs rriggs at openjdk.java.net
Wed Dec 15 16:12:56 UTC 2021


On Tue, 14 Dec 2021 10:45:28 GMT, Patric Hedlin <phedlin at openjdk.org> wrote:

> Implementation of ISO/ASCII char set encoding, extending current implementation with ASCII encoding support.
> 
> The motivation is found in the original x86 issue ([JDK-8274242](https://bugs.openjdk.java.net/browse/JDK-8274242)).
> 
> 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-6
> 
> 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

Its viable to commit to the main line and allow it to have some bake time before requesting it to be backported.
That would allow some time to build confidence about the change; it might not make the first JDK 18 release but would come in later.
There is no problem requesting approval for the change but it should go through that process.

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

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


More information about the nio-dev mailing list