RFR: JDK-8320448 Accelerate IndexOf using AVX2

Scott Gibbons sgibbons at openjdk.org
Wed Nov 29 01:11:21 UTC 2023


Re-write the IndexOf code without the use of the pcmpestri instruction, only using AVX2 instructions.  This change accelerates String.IndexOf on average 1.3x for AVX2.  The benchmark numbers:


Benchmark	                                               Score		Latest		
StringIndexOf.advancedWithMediumSub   343.573		317.934		0.925375393x
StringIndexOf.advancedWithShortSub1	  1039.081		1053.96		1.014319384x
StringIndexOf.advancedWithShortSub2	      55.828		110.541		1.980027943x
StringIndexOf.constantPattern	                9.361		11.906		1.271872663x
StringIndexOf.searchCharLongSuccess	        4.216		4.218		1.000474383x
StringIndexOf.searchCharMediumSuccess	3.133		3.216		1.02649218x
StringIndexOf.searchCharShortSuccess	3.76		        3.761		1.000265957x
StringIndexOf.success	                                9.186		9.713		1.057369911x
StringIndexOf.successBig	                      14.341		46.343		3.231504079x
StringIndexOfChar.latin1_AVX2_String	  6220.918		12154.52		1.953814533x
StringIndexOfChar.latin1_AVX2_char	  5503.556		5540.044		1.006629895x
StringIndexOfChar.latin1_SSE4_String	  6978.854		6818.689		0.977049957x
StringIndexOfChar.latin1_SSE4_char	  5657.499		5474.624		0.967675646x
StringIndexOfChar.latin1_Short_String	  7132.541		6863.359		0.962260014x
StringIndexOfChar.latin1_Short_char	16013.389	      16162.437		1.009307711x
StringIndexOfChar.latin1_mixed_String	  7386.123	      14771.622		1.999915517x
StringIndexOfChar.latin1_mixed_char	  9901.671		9782.245		0.987938803

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

Commit messages:
 - Fix whitespace
 - Merge branch 'openjdk:master' into indexof
 - Comments; added exhaustive-ish test
 - Subtracting 0x10 twice.
 - Stomped on r13 in switch branch calculation
 - Windows register preservation fix
 - Fix merge problem
 - Merge branch 'master' into indexof
 - Working version
 - Protecting against page faults
 - ... and 6 more: https://git.openjdk.org/jdk/compare/ce4e6e2b...60d762b9

Changes: https://git.openjdk.org/jdk/pull/16753/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=16753&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8320448
  Stats: 3062 lines in 14 files changed: 2928 ins; 11 del; 123 mod
  Patch: https://git.openjdk.org/jdk/pull/16753.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/16753/head:pull/16753

PR: https://git.openjdk.org/jdk/pull/16753


More information about the core-libs-dev mailing list