RFR JDK-8223347 Integration of Vector API (Incubator): Java API, implementation, and tests

Paul Sandoz paul.sandoz at oracle.com
Mon Apr 20 20:25:52 UTC 2020


Hi Remi,

I am not aware of this being considered.  Perhaps because the vector specializations are generated from templates.  As such I am not seeing a huge benefit to doing this.

I admit to not understanding fully how this could work for vector arguments with a bridge method. I can see what you are getting to avoid declaration of co-variant overrides for simple methods such as add + lanewise, but it could limit what JavaDoc can be referenced, for example referencing methods accepting the primitive scalar value.

Paul.

> On Apr 20, 2020, at 7:04 AM, Remi Forax <forax at univ-mlv.fr> wrote:
> 
> BTW, did you try to add an intermediary private non visible class between Vector and IntVector to avoid all hand-written cast inside the implementation of IntVector,
> something along that line
> 
>  public abstract class Vector<E> {
>    abstract  void foo(Vector<E> vector);
>    abstract Vector<E> bar();
>  }
> 
>  /* non public */ abstract class AbstractVector<E, V extends AbstractVector<E, V>> extends Vector<E> {
>    public abstract void foo(V vector);
>    public final void foo(Vector<E> vector) {   // bridge by hand
>      foo((V)vector);
>    }
>    public abstract V bar();
>  }
> 
>  public abstract class IntVector extends AbstractVector<Integer, IntVector> {
> 
>  }
> 
> Rémi
> 
> ----- Mail original -----
>> De: "Paul Sandoz" <paul.sandoz at oracle.com>
>> À: "core-libs-dev" <core-libs-dev at openjdk.java.net>, "hotspot-dev" <hotspot-dev at openjdk.java.net>
>> Envoyé: Jeudi 2 Avril 2020 00:46:55
>> Objet: RFR JDK-8223347 Integration of Vector API (Incubator): Java API, implementation, and tests
> 
>> Hi,
>> 
>> A prior email sent out a request for review of the Vector API in preparation for
>> JEP 338: Vector API (Incubator) [1] to be proposed for target:
>> 
>> https://mail.openjdk.java.net/pipermail/core-libs-dev/2020-March/065345.html
>> <https://mail.openjdk.java.net/pipermail/core-libs-dev/2020-March/065345.html>
>> 
>> This email expands the review of the API to the Java implementation and Java
>> tests:
>> 
>> http://cr.openjdk.java.net/~psandoz/panama/JDK-8223347-vector-api-integration-java/jdk_src_webrev/webrev/
>> <http://cr.openjdk.java.net/~psandoz/panama/JDK-8223347-vector-api-integration-java/jdk_src_webrev/webrev/>
>> 
>> http://cr.openjdk.java.net/~psandoz/panama/JDK-8223347-vector-api-integration-java/jdk_test_webrev/webrev/
>> <http://cr.openjdk.java.net/~psandoz/panama/JDK-8223347-vector-api-integration-java/jdk_test_webrev/webrev/>
>> 
>> (Further emails will sent for review of general HotSpot changes CPU architecture
>> specific HotSpot changes, x64 and aarch64, and performance tests.  For an early
>> peek see the links in the description of JDK-8223347.)
>> 
>>>> 
>> The Vector API provides
>> 
>> - the public Vector class with vector operations common to all supported
>> primitive types
>> 
>> - public primitive specializations, such as IntVector, with common operations
>> associated with the primitive type
>> 
>> - internal concrete specializations for the vector size, such as Int256Vector,
>> for a vector holding 8 ints.
>> 
>> Operations generally defer to one of approximately 20 vector intrinsics.  Some
>> operations may be composed of other operations.
>> 
>> Explicit casts are performed by vector operations to ensure vectors arguments
>> are of the required shape (bit size) and element type.
>> 
>> A vector intrinsic is an internal low-level vector operation. The last argument
>> to the intrinsic is fall back behavior in Java, implementing the scalar
>> operation over the number of elements held by the vector.  Thus, If the
>> intrinsic is not supported in C2 for the other arguments then the Java
>> implementation is executed (the Java implementation is always executed when
>> running in the interpreter or for C1).
>> 
>> The public primitive specializations and the internal concrete implementations
>> are generated from SSP template files, X-Vector.java.template and
>> X-VectorBits.java.template respectively.
>> 
>> Overall the implementation approach is quite formulaic and rather repetitive.
>> Once you grok the pattern It should be easier to review if a little laborious.
>> 
>> Unit tests are auto-generated by composing templates for each operation into an
>> SSP template file which is then used to generate unit test files for each
>> concrete vector class.  The tests are quite extensive and have found many a
>> HotSpot issue in development across a wide range of platforms.
>> 
>> Paul.
>> 
>> [1] https://bugs.openjdk.java.net/browse/JDK-8201271
>> <https://bugs.openjdk.java.net/browse/JDK-8201271>



More information about the core-libs-dev mailing list