Skip to content

Instantly share code, notes, and snippets.

@horitaku1124
Created September 23, 2019 23:07
Show Gist options
  • Save horitaku1124/4e992b259019cbf35e65db5a533e1795 to your computer and use it in GitHub Desktop.
Save horitaku1124/4e992b259019cbf35e65db5a533e1795 to your computer and use it in GitHub Desktop.
import jdk.incubator.vector.*;
/*
javac14 src/main/java/VectorTest.java \
--add-modules jdk.incubator.vector \
-d out/
java14 -cp out/ VectorTest
@see http://cr.openjdk.java.net/~kkharbas/vector-api/CSR/javadoc.02/jdk.incubator.vector/jdk/incubator/vector/package-summary.html
@see https://nowokay.hatenablog.com/entry/2019/09/05/015537
*/
public class VectorTest {
private static void test1() {
System.out.println("test1()");
float[] a = new float[]{1,2,3,4,5,6,7,8};
float[] b = new float[]{1,1,1,1,1,1,1,1};
float s = 0.0f;
for (int i = 0; i < a.length; i++) {
s += a[i] * b[i];
}
System.out.println("s=" + s);
var SP = FloatVector.SPECIES_256;
int limit = a.length;
var fv_sum = FloatVector.fromValues(SP, 0, 0, 0, 0, 0, 0, 0, 0);
for (int i = 0; i < limit; i += 8) {
var fv_a = FloatVector.fromArray(SP, a, i);
var fv_b = FloatVector.fromArray(SP, b, i);
fv_sum = fv_a.fma(fv_b, fv_sum);
}
float[] outArray = new float[8];
fv_sum.intoArray(outArray, 0);
float sum = 0;
for (float f: outArray) {
sum += f;
}
System.out.println("sum=" + sum);
}
private static void test2() {
System.out.println("test2()");
float[] a = new float[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
float[] b = new float[]{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
float s = 0.0f;
for (int i = 0; i < a.length; i++) {
s += a[i] * b[i];
}
System.out.println("s=" + s);
var SP = FloatVector.SPECIES_256;
int limit = a.length;
var fv_sum = FloatVector.fromValues(SP, 0, 0, 0, 0, 0, 0, 0, 0);
for (int i = 0; i < limit; i += 8) {
var fv_a = FloatVector.fromArray(SP, a, i);
var fv_b = FloatVector.fromArray(SP, b, i);
fv_sum = fv_a.fma(fv_b, fv_sum);
}
float[] outArray = new float[8];
fv_sum.intoArray(outArray, 0);
float sum = 0;
for (float f: outArray) {
sum += f;
}
System.out.println("sum=" + sum);
}
private static void test3() {
System.out.println("test3()");
float[] a = new float[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
float[] b = new float[]{1,1,1,1,1,1,1,1,2,2,2,2,2,2,2};
float s = 0.0f;
for (int i = 0; i < a.length; i++) {
s += a[i] * b[i];
}
System.out.println("s=" + s);
var SP = FloatVector.SPECIES_256;
int limit = a.length - a.length % 8;
var fv_sum = FloatVector.fromValues(SP, 0, 0, 0, 0, 0, 0, 0, 0);
for (int i = 0; i < limit; i += 8) {
var fv_a = FloatVector.fromArray(SP, a, i);
var fv_b = FloatVector.fromArray(SP, b, i);
fv_sum = fv_a.fma(fv_b, fv_sum);
}
float[] outArray = new float[8];
fv_sum.intoArray(outArray, 0);
float sum = 0;
for (float f: outArray) {
sum += f;
}
for (int i = limit; i < a.length; i += 1) {
sum += a[i] * b[i];
}
System.out.println("sum=" + sum);
}
public static void main(String[] args) {
test1();
test2();
test3();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment