RFR: 8271515: Integration of JEP 417: Vector API (Third Incubator) [v3]
Sandhya Viswanathan
sviswanathan at openjdk.java.net
Tue Oct 19 01:11:52 UTC 2021
On Sat, 16 Oct 2021 00:56:14 GMT, Paul Sandoz <psandoz at openjdk.org> wrote:
>> This PR improves the performance of vector operations that accept masks on architectures that support masking in hardware, specifically Intel AVX512 and ARM SVE.
>>
>> On architectures that do not support masking in hardware the same technique as before is applied to most operations, specifically composition using blend.
>>
>> Masked loads/stores are a special form of masked operation that require additional care to ensure out-of-bounds access throw exceptions. The range checking has not been fully optimized and will require further work.
>>
>> No API enhancements were required and only a few additional tests were needed.
>
> Paul Sandoz has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains seven commits:
>
> - Merge branch 'master' into JDK-8271515-vector-api
> - Apply patch from https://github.com/openjdk/panama-vector/pull/152
> - Apply patch from https://github.com/openjdk/panama-vector/pull/142
> - Apply patch from https://github.com/openjdk/panama-vector/pull/139
> - Apply patch from https://github.com/openjdk/panama-vector/pull/151
> - Add new files.
> - 8271515: Integration of JEP 417: Vector API (Third Incubator)
src/hotspot/share/utilities/globalDefinitions.hpp line 36:
> 34:
> 35: #include COMPILER_HEADER(utilities/globalDefinitions)
> 36: #include "utilities/globalDefinitions_vecApi.hpp"
This change is not needed.
src/hotspot/share/utilities/globalDefinitions_vecApi.hpp line 29:
> 27: // the intent of this file to provide a header that can be included in .s files.
> 28:
> 29: #ifndef SHARE_VM_UTILITIES_GLOBALDEFINITIONS_VECAPI_HPP
The file src/hotspot/share/utilities/globalDefinitions_vecApi.hpp is not needed.
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/AbstractMask.java line 67:
> 65:
> 66: @Override
> 67: public boolean laneIsSet(int i) {
Missing ForceInline.
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte128Vector.java line 278:
> 276: @Override
> 277: @ForceInline
> 278: public Byte128Vector lanewise(Unary op, VectorMask<Byte> m) {
Should this method be final as well?
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte128Vector.java line 290:
> 288: @Override
> 289: @ForceInline
> 290: public Byte128Vector lanewise(Binary op, Vector<Byte> v, VectorMask<Byte> m) {
Should this method be final as well?
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte128Vector.java line 313:
> 311: public final
> 312: Byte128Vector
> 313: lanewise(Ternary op, Vector<Byte> v1, Vector<Byte> v2) {
For unary and binary operator above, we use VectorOperators.Unary and VectorOperators.Binary.
Should we use VectorOperators.Ternary here as well then?
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte128Vector.java line 321:
> 319: public final
> 320: Byte128Vector
> 321: lanewise(Ternary op, Vector<Byte> v1, Vector<Byte> v2, VectorMask<Byte> m) {
Should we use VectorOperators.Ternary here?
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte128Vector.java line 731:
> 729: @Override
> 730: @ForceInline
> 731: public long toLong() {
Should this and other mask operation methods be final methods?
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java line 603:
> 601: if (opKind(op, VO_SPECIAL)) {
> 602: if (op == ZOMO) {
> 603: return blend(broadcast(-1), compare(NE, 0, m));
This doesn't look correct. The lanes where mask is false should get the original lane value in this vector.
-------------
PR: https://git.openjdk.java.net/jdk/pull/5873
More information about the core-libs-dev
mailing list