Integrated: 8318650: Optimized subword gather for x86 targets.
Jatin Bhateja
jbhateja at openjdk.org
Sun Apr 21 23:24:41 UTC 2024
On Wed, 25 Oct 2023 04:34:59 GMT, Jatin Bhateja <jbhateja at openjdk.org> wrote:
> Hi All,
>
> This patch optimizes sub-word gather operation for x86 targets with AVX2 and AVX512 features.
>
> Following is the summary of changes:-
>
> 1) Intrinsify sub-word gather using hybrid algorithm which initially partially unrolls scalar loop to accumulates values from gather indices into a quadword(64bit) slice followed by vector permutation to place the slice into appropriate vector lanes, it prevents code bloating and generates compact JIT sequence. This coupled with savings from expansive array allocation in existing java implementation translates into significant performance of 1.5-10x gains with included micro.
>
> ![image](https://github.com/openjdk/jdk/assets/59989778/e25ba4ad-6a61-42fa-9566-452f741a9c6d)
>
>
> 2) Patch was also compared against modified java fallback implementation by replacing temporary array allocation with zero initialized vector and a scalar loops which inserts gathered values into vector. But, vector insert operation in higher vector lanes is a three step process which first extracts the upper vector 128 bit lane, updates it with gather subword value and then inserts the lane back to its original position. This makes inserts into higher order lanes costly w.r.t to proposed solution. In addition generated JIT code for modified fallback implementation was very bulky. This may impact in-lining decisions into caller contexts.
>
> Kindly review and share your feedback.
>
> Best Regards,
> Jatin
This pull request has now been integrated.
Changeset: 185e711b
Author: Jatin Bhateja <jbhateja at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/185e711bfe4c4d013b56e867f85cfb4177b3a2cf
Stats: 1178 lines in 32 files changed: 1129 ins; 21 del; 28 mod
8318650: Optimized subword gather for x86 targets.
Reviewed-by: sviswanathan, epeter, psandoz
-------------
PR: https://git.openjdk.org/jdk/pull/16354
More information about the core-libs-dev
mailing list