8373344: Add support for min/max reduction operations for Float16 #28828
+946
−672
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This patch adds mid-end support for vectorized min/max reduction operations for half floats. It also includes backend AArch64 support for these operations.
Both floating point min/max reductions don’t require strict order, because they are associative.
It will generate NEON fminv/fmaxv reduction instructions when max vector length is 8B or 16B. On SVE supporting machines with vector lengths > 16B, it will generate the SVE fminv/fmaxv instructions.
The patch also adds support for partial min/max reductions on SVE machines using fminv/fmaxv.
Ratio of throughput(ops/ms) > 1 indicates the performance with this patch is better than the mainline.
Neoverse N1 (UseSVE = 0, max vector length = 16B):
Neoverse V1 (UseSVE = 1, max vector length = 32B):
Neoverse V2 (UseSVE = 2, max vector length = 16B):
Testing:
hotspot_all, jdk (tier1-3) and langtools (tier1) all pass on Neoverse N1/V1/V2.
Progress
Issue
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/28828/head:pull/28828$ git checkout pull/28828Update a local copy of the PR:
$ git checkout pull/28828$ git pull https://git.openjdk.org/jdk.git pull/28828/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 28828View PR using the GUI difftool:
$ git pr show -t 28828Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/28828.diff
Using Webrev
Link to Webrev Comment