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