RFR: 8268363: AArch64: Implement string_indexof_char intrinsic in SVE [v3]

Andrew Haley aph at openjdk.java.net
Tue Jun 29 14:57:07 UTC 2021


On Tue, 29 Jun 2021 08:41:20 GMT, TatWai Chong <github.com+78814694+tatwaichong at openjdk.org> wrote:

>> This patch implements string_indexof_char intrinsic in SVE for both
>> UTF-16 and Latin-8 variants. In the current underneath implementation,
>> there is only 4 and 8 characters are compared at a time in UTF-16 and
>> Latin-8 respectively. In this patch, we adopt SVE to vectorize this
>> intrinsic so that a wider comparison can be performed each time.
>> 
>> I've run [1] with this patch on an SVE machine, and the performance of
>> StringIndexOfChar.latin1_mixed_char (length=65) and
>> StringIndexOfChar.utf16_mixed_char (length=65) are improved significantly,
>> while no visible regression for other cases with shorter strings.
>> (length=7, 8, 15, 16 and 32)
>> 
>> [1] https://github.com/openjdk/jdk/blob/master/test/micro/org/openjdk/bench/java/lang/StringIndexOfChar.java
>
> TatWai Chong has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains one commit:
> 
>   8268363: AArch64: Implement string_indexof_char intrinsic in SVE
>   
>   This patch implements string_indexof_char intrinsic in SVE for both
>   UTF-16 and Latin-8 variants. In the current underneath implementation,
>   there is only 4 and 8 characters are compared at a time in UTF-16 and
>   Latin-8 respectively. In this patch, we adopt SVE to vectorize this
>   intrinsic so that a wider comparison can be performed each time.
>   
>   I've run [1] with this patch on an SVE machine, and the performance of
>   StringIndexOfChar.latin1_mixed_char (length=65) and
>   StringIndexOfChar.utf16_mixed_char (length=65) are improved significantly,
>   while no visible regression for other cases with shorter strings.
>   (length=7, 8, 15, 16 and 32)
>   
>   [1] https://github.com/openjdk/jdk/blob/master/test/micro/org/openjdk/bench/java/lang/StringIndexOfChar.java

src/hotspot/cpu/aarch64/aarch64_sve_ad.m4 line 957:

> 955:   ins_pipe(pipe_class_memory);
> 956: %}
> 957: 

You shouldn't write this stuff out twice: this is an m4 file, so please use the macro processor. There are plenty of examples.

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

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


More information about the hotspot-compiler-dev mailing list