Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8293409: [vectorapi] Intrinsify VectorSupport.indexVector #10332

Closed
wants to merge 3 commits into from

Conversation

XiaohongGong
Copy link

@XiaohongGong XiaohongGong commented Sep 19, 2022

"VectorSupport.indexVector()" is used to compute a vector that contains the index values based on a given vector and a scale value (i.e. index = vec + iota * scale). This function is widely used in other APIs like "VectorMask.indexInRange" which is useful to the tail loop vectorization. And it can be easily implemented with the vector instructions.

This patch adds the vector intrinsic implementation of it. The steps are:

  1. Load the const "iota" vector.

We extend the "vector_iota_indices" stubs from byte to other integral types. For floating point vectors, it needs an additional vector cast to get the right iota values.

  1. Compute indexes with "vec + iota * scale"

Here is the performance result to the new added micro benchmark on ARM NEON:

Benchmark                              Gain
IndexVectorBenchmark.byteIndexVector   1.477
IndexVectorBenchmark.doubleIndexVector 5.031
IndexVectorBenchmark.floatIndexVector  5.342
IndexVectorBenchmark.intIndexVector    5.529
IndexVectorBenchmark.longIndexVector   3.177
IndexVectorBenchmark.shortIndexVector  5.841

Please help to review and share the feedback! Thanks in advance!


Progress

  • Change must be properly reviewed (1 review required, with at least 1 Reviewer)
  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue

Issue

  • JDK-8293409: [vectorapi] Intrinsify VectorSupport.indexVector

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk pull/10332/head:pull/10332
$ git checkout pull/10332

Update a local copy of the PR:
$ git checkout pull/10332
$ git pull https://git.openjdk.org/jdk pull/10332/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 10332

View PR using the GUI difftool:
$ git pr show -t 10332

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/10332.diff

@bridgekeeper
Copy link

bridgekeeper bot commented Sep 19, 2022

👋 Welcome back xgong! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk openjdk bot added the rfr Pull request is ready for review label Sep 19, 2022
@openjdk
Copy link

openjdk bot commented Sep 19, 2022

@XiaohongGong The following labels will be automatically applied to this pull request:

  • core-libs
  • hotspot

When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing lists. If you would like to change these labels, use the /label pull request command.

@openjdk openjdk bot added hotspot hotspot-dev@openjdk.org core-libs core-libs-dev@openjdk.org labels Sep 19, 2022
@XiaohongGong
Copy link
Author

/label add hotspot-compiler

@openjdk openjdk bot added the hotspot-compiler hotspot-compiler-dev@openjdk.org label Sep 19, 2022
@openjdk
Copy link

openjdk bot commented Sep 19, 2022

@XiaohongGong
The hotspot-compiler label was successfully added.

@mlbridge
Copy link

mlbridge bot commented Sep 19, 2022

Webrevs

@XiaohongGong
Copy link
Author

Hi, could anyone please help to take a look at this PR? Thanks in advance for your time!

@vnkozlov
Copy link
Contributor

vnkozlov commented Sep 28, 2022

@jatin-bhateja and @sviswa7 please look on this enhancement as Vector API experts.

@XiaohongGong
Copy link
Author

Ping again, could anyone please help to take a review at this PR? Thanks in advance!

Copy link
Member

@e1iu e1iu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AArch64 part looks good to me.

src/hotspot/share/opto/vectorIntrinsics.cpp Outdated Show resolved Hide resolved
src/hotspot/share/opto/vectorIntrinsics.cpp Outdated Show resolved Hide resolved
src/hotspot/share/opto/vectorIntrinsics.cpp Outdated Show resolved Hide resolved
@XiaohongGong
Copy link
Author

Hi @jatin-bhateja , all your comments have been addressed. Please help to look at the changes again! Thanks in advance!

Copy link
Member

@jatin-bhateja jatin-bhateja left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @XiaohongGong , patch now shows significant gains on both AVX512 and legacy X86 targets.

X86 and common IR changes LGTM, thanks!

@openjdk
Copy link

openjdk bot commented Oct 19, 2022

@XiaohongGong This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8293409: [vectorapi] Intrinsify VectorSupport.indexVector

Reviewed-by: eliu, jbhateja

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 55 new commits pushed to the master branch:

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

➡️ To integrate this PR with the above commit message to the master branch, type /integrate in a new comment.

@openjdk openjdk bot added the ready Pull request is ready to be integrated label Oct 19, 2022
@XiaohongGong
Copy link
Author

Thanks for the review @jatin-bhateja @theRealELiu !

@XiaohongGong
Copy link
Author

/integrate

@openjdk
Copy link

openjdk bot commented Oct 19, 2022

Going to push as commit 857b0f9.
Since your change was applied there have been 56 commits pushed to the master branch:

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot added the integrated Pull request has been integrated label Oct 19, 2022
@openjdk openjdk bot closed this Oct 19, 2022
@openjdk openjdk bot removed ready Pull request is ready to be integrated rfr Pull request is ready for review labels Oct 19, 2022
@openjdk
Copy link

openjdk bot commented Oct 19, 2022

@XiaohongGong Pushed as commit 857b0f9.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

@XiaohongGong XiaohongGong deleted the JDK-8293409 branch October 19, 2022 09:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
core-libs core-libs-dev@openjdk.org hotspot hotspot-dev@openjdk.org hotspot-compiler hotspot-compiler-dev@openjdk.org integrated Pull request has been integrated
4 participants