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

Reply via email to