On Mon, 12 Aug 2024 22:03:44 GMT, Paul Sandoz <psan...@openjdk.org> wrote:
> The results look promising. I can provide guidance on the specification e.g., > we can specify the behavior in terms of rearrange, with the addition of > throwing on out of bounds indexes. > > Regarding the throwing of exceptions, some wider context will help to know > where we are heading before we finalize the specification. I believe we are > considering changing the default throwing behavior for index out of bounds to > wrapping, thereby we can avoid bounds checks. If that is the case we should > wait until that is done then update rather than submitting a CSR just yet? > > I see you created a specific intrinsic, which will avoid the cost of shuffle > creation. Should we apply the same approach (in a subsequent PR) to the > single argument shuffle? Or perhaps if we manage to optimize shuffles and > change the default wrapping we don't require a specific intrinsic and can > just use defer to rearrange? Hi @PaulSandoz , Thanks for your comments. With this new API we intend to enforce stricter specification w.r.t to index values to emit a lean instruction sequence preventing any cycles spent on massaging inputs to a consumable form, thus preventing redundant wrapping and unwrapping operations. Existing [two vector rearrange API](https://docs.oracle.com/en/java/javase/22/docs/api/jdk.incubator.vector/jdk/incubator/vector/Vector.html#rearrange(jdk.incubator.vector.VectorShuffle,jdk.incubator.vector.Vector)) has a flexible specification which allows wrapping out of bounds shuffle indexes into exceptional index with a -ve value. Even if we optimize existing two vector rearrange implementation we will still need to emit additional instructions to generate an indexes which lie within two vector range [0, 2*VLEN). I see this as a specialized API like vector compress/expand which cater to targets like x86-AVX512+ and aarch64-SVE which offers direct instruction for two vector lookups. May be the API nomenclature can be refined to better reflect its semantics i.e. from selectFrom to twoVectorLookup ? ------------- PR Comment: https://git.openjdk.org/jdk/pull/20508#issuecomment-2288062038