RFR: 8335182: Consolidate and streamline String concat code shapes [v2]
Andrey Turbanov
aturbanov at openjdk.org
Tue Jul 9 20:00:22 UTC 2024
On Fri, 28 Jun 2024 12:39:32 GMT, Claes Redestad <redestad at openjdk.org> wrote:
>> This PR attains a speed-up on some microbenchmarks by simplifying how we build up the MH combinator tree shape
>> (only use prependers with prefix, always add a suffix to the newArray combinator), then simplifying/inlining some of the code in the helper functions.
>>
>> Many simple concatenation expressions stay performance neutral, while the win comes from enabling C2 to better optimize more complex shapes (concat13String, concatMix4String, concatConst6String see relatively large improvements):
>>
>>
>> Name Cnt Base Error Test Error Unit Change
>> StringConcat.concat13String 50 66.380 ± 0.189 53.017 ± 0.241 ns/op 1.25x (p = 0.000*)
>> StringConcat.concat4String 50 13.620 ± 0.053 12.382 ± 0.089 ns/op 1.10x (p = 0.000*)
>> StringConcat.concat6String 50 17.168 ± 0.070 16.046 ± 0.064 ns/op 1.07x (p = 0.000*)
>> StringConcat.concatConst2String 50 9.820 ± 0.081 8.158 ± 0.041 ns/op 1.20x (p = 0.000*)
>> StringConcat.concatConst4String 50 14.938 ± 0.124 12.800 ± 0.049 ns/op 1.17x (p = 0.000*)
>> StringConcat.concatConst6Object 50 56.115 ± 0.288 54.046 ± 0.214 ns/op 1.04x (p = 0.000*)
>> StringConcat.concatConst6String 50 19.032 ± 0.073 16.213 ± 0.093 ns/op 1.17x (p = 0.000*)
>> StringConcat.concatConstBoolByte 50 8.486 ± 0.066 8.556 ± 0.050 ns/op 0.99x (p = 0.004*)
>> StringConcat.concatConstInt 50 8.942 ± 0.052 7.677 ± 0.029 ns/op 1.16x (p = 0.000*)
>> StringConcat.concatConstIntConstInt 50 12.883 ± 0.070 12.431 ± 0.070 ns/op 1.04x (p = 0.000*)
>> StringConcat.concatConstString 50 7.523 ± 0.050 7.486 ± 0.044 ns/op 1.00x (p = 0.058 )
>> StringConcat.concatConstStringConstInt 50 11.961 ± 0.032 11.699 ± 0.049 ns/op 1.02x (p = 0.000*)
>> StringConcat.concatEmptyConstInt 50 7.778 ± 0.038 7.723 ± 0.037 ns/op 1.01x (p = 0.000*)
>> StringConcat.concatEmptyConstString 50 3.506 ± 0.026 3.505 ± 0.015 ns/op 1.00x (p = 0.930 )
>> StringConcat.concatEmptyLeft 50 3.573 ± 0.075 3.518 ± 0.057 ns/op 1.02x (p = 0.044 )
>> StringConcat.concatEmptyRight 50 3.713 ± 0.049 3.622 ± 0.053 ns/op 1.02x (p = 0.000*)
>> StringConcat.concatMethodConstString 50 7.418 ± 0.030 7.478 ± 0.066 ns/op 0.99x (p...
>
> Claes Redestad has updated the pull request incrementally with one additional commit since the last revision:
>
> Copyrights
test/micro/org/openjdk/bench/java/lang/StringConcatStartup.java line 182:
> 180: concat = "" + "S" + "S" + c + d + z + l + d + z + f + b + d + z + S + f;
> 181: concat = "" + b + d + z + d + i + z + d + b + d + "S" + c + f + d;
> 182: concat = "" + d + s + f + c + i + "S" + b + b + S + i + s + d + "S" + f;
Suggestion:
concat = "" + d + s + f + c + i + "S" + b + b + S + i + s + d + "S" + f;
test/micro/org/openjdk/bench/java/lang/StringConcatStartup.java line 191:
> 189: concat = "" + z + S + S + "S" + S + S + z + b + S + z + b + f + s + l;
> 190: concat = "" + s + z + d + "S" + z + l + f + z + s + z + d + l + s + l;
> 191: concat = "" + l + d + i + s + i + c + i + f + b + f + s + b + s + s;
Suggestion:
concat = "" + l + d + i + s + i + c + i + f + b + f + s + b + s + s;
test/micro/org/openjdk/bench/java/lang/StringConcatStartup.java line 193:
> 191: concat = "" + l + d + i + s + i + c + i + f + b + f + s + b + s + s;
> 192: concat = "" + z + "S" + S + "S" + "S" + i + "S" + s + d + z + l;
> 193: concat = "" + i + S + S + "S" + f + "S" + "S" + z + S + z + b + z + c + b;
Suggestion:
concat = "" + i + S + S + "S" + f + "S" + "S" + z + S + z + b + z + c + b;
test/micro/org/openjdk/bench/java/lang/StringConcatStartup.java line 223:
> 221: concat = "" + "S" + f + S + i + i + i + "S" + i + i + l + c + l + S + S + z + b + i + c + f + S;
> 222: concat = "" + c + z + S + S + b + i + c;
> 223: concat = "" + S + s + S + c;
Suggestion:
concat = "" + S + s + S + c;
test/micro/org/openjdk/bench/java/lang/StringConcatStartup.java line 310:
> 308: concat = "" + "S" + "S" + c + d + z + l + d + z + f + b + d + z + S + f;
> 309: concat = "" + b + d + z + d + i + z + d + b + d + "S" + c + f + d;
> 310: concat = "" + d + s + f + c + i + "S" + b + b + S + i + s + d + "S" + f;
Suggestion:
concat = "" + d + s + f + c + i + "S" + b + b + S + i + s + d + "S" + f;
test/micro/org/openjdk/bench/java/lang/StringConcatStartup.java line 319:
> 317: concat = "" + z + S + S + "S" + S + S + z + b + S + z + b + f + s + l;
> 318: concat = "" + s + z + d + "S" + z + l + f + z + s + z + d + l + s + l;
> 319: concat = "" + l + d + i + s + i + c + i + f + b + f + s + b + s + s;
Suggestion:
concat = "" + l + d + i + s + i + c + i + f + b + f + s + b + s + s;
test/micro/org/openjdk/bench/java/lang/StringConcatStartup.java line 321:
> 319: concat = "" + l + d + i + s + i + c + i + f + b + f + s + b + s + s;
> 320: concat = "" + z + "S" + S + "S" + "S" + i + "S" + s + d + z + l;
> 321: concat = "" + i + S + S + "S" + f + "S" + "S" + z + S + z + b + z + c + b;
Suggestion:
concat = "" + i + S + S + "S" + f + "S" + "S" + z + S + z + b + z + c + b;
test/micro/org/openjdk/bench/java/lang/StringConcatStartup.java line 351:
> 349: concat = "" + "S" + f + S + i + i + i + "S" + i + i + l + c + l + S + S + z + b + i + c + f + S;
> 350: concat = "" + c + z + S + S + b + i + c;
> 351: concat = "" + S + s + S + c;
Suggestion:
concat = "" + S + s + S + c;
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/19927#discussion_r1671144502
PR Review Comment: https://git.openjdk.org/jdk/pull/19927#discussion_r1671145212
PR Review Comment: https://git.openjdk.org/jdk/pull/19927#discussion_r1671145894
PR Review Comment: https://git.openjdk.org/jdk/pull/19927#discussion_r1671146624
PR Review Comment: https://git.openjdk.org/jdk/pull/19927#discussion_r1671147198
PR Review Comment: https://git.openjdk.org/jdk/pull/19927#discussion_r1671147720
PR Review Comment: https://git.openjdk.org/jdk/pull/19927#discussion_r1671148208
PR Review Comment: https://git.openjdk.org/jdk/pull/19927#discussion_r1671148704
More information about the core-libs-dev
mailing list