On Thu, 6 Aug 2026 03:31:58 GMT, Jatin Bhateja <[email protected]> wrote:

>> Patch optimizes Float16 to integral conversion operations. Currently, its a 
>> two step process where by first a Float16 value is
>> converted to a single precision floating point value followed by a 
>> conversion to an integral value.
>> 
>> x86 targets supporting AVX512-FP16 feature (Intel Sapphire Rapids+ and 
>> upcoming AMD Zen6) provides direct instruction to convert a Float16 value to 
>> integral value.
>> 
>> Following are the performance numbers of micro benchmark included with the 
>> patch on Granite Rapids with and without auto-vectorization.
>> 
>> <img width="1125" height="636" alt="image" 
>> src="https://github.com/user-attachments/assets/ca6e6757-1579-475f-8307-9454c7c025c1";
>>  />
>> 
>> Kindly review and share your feedback.
>> 
>> Best Regards,
>> Jatin
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Jatin Bhateja has updated the pull request with a new target base due to a 
> merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains nine additional 
> commits since the last revision:
> 
>  - Merge branch 'master' of http://github.com/openjdk/jdk into JDK-8382523
>  - Review comments resolution
>  - Merge branch 'master' of http://github.com/openjdk/jdk into JDK-8382523
>  - Review comments resolution
>  - Review comments resolution
>  - Review comments resolution
>  - Review comments resolution
>  - Review comments resolution
>  - 8382523: Optimize Float16 to integral conversion operations for 
> AVX512-FP16 targets

test/micro/org/openjdk/bench/jdk/incubator/vector/Float16ToIntegralConvBenchmark.java
 line 60:

> 58:             i -> {
> 59:                 if ((i % 100) == 0) {
> 60:                     fp16inp[i] = float16ToRawShortBits(specialValues[i % 
> specialValues.length]);

This comment comes a bit too late, but you will only ever have `i = k * 100`. 
And `specialValues.length = 5`. So you are really always picking 
`specialValues[0] = Float.NaN` here.

It should be `specialValues[(i / 100) % specialValues.length]` instead.

@jatin-bhateja @sviswa7 @missa-prime Could this have an impact on the 
performance measurement? I'm especially thinking about NaN/infinity fixup.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/30928#discussion_r3735927775

Reply via email to