Java Vector API

SIMD instructions with Java !

(Single Instruction multiple Data)

Available in Java 17 (third incubator)

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <compilerArgument>--add-modules=jdk.incubator.vector</compilerArgument>
                    <compilerArgs>--enable-preview</compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

How-to use incubator moduleĀ  in maven

Vector<E>

ByteVector ShortVector IntVector
LongVector FloatVector DoubleVector

VectorSpecies = size of the vector

SPECIES_64 SPECIES_128 SPECIES_256 SPECIES_512

SPECIES_PREFERRED


public class VectorApi {

    public static void main(String[] args) {

        int arraySize = 512 / Double.SIZE;

        double[] array = new double[arraySize];

        DoubleVector vector1 = DoubleVector.fromArray(DoubleVector.SPECIES_512, array, 0);

        DoubleVector vector2 = DoubleVector.fromArray(DoubleVector.SPECIES_512, array, 0);


        DoubleVector vector3 = vector2.add(vector1);

        vector3 = vector1.mul(1.5);
        vector3 = vector3.mul(vector1);

        vector3 = vector3.div(3.4);
        vector3 = vector3.div(vector2);


        double[] result = new double[arraySize];

        vector3.intoArray(result, 0);
    }

}

A real-world example

IIR Filter

2nd order IIR Filter

y[3] = b[0] . x[2] + b[1] . x[1] + b[2] . x[0]

- a[0] . y[2] - a[1] . y[1] - a[2] . y[0]

Title Text

Subtitle

Java Vector API

By maximeleprince

Java Vector API

  • 59