Created
September 23, 2019 23:07
-
-
Save horitaku1124/4e992b259019cbf35e65db5a533e1795 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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