summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Zhang <yang.zhang@linaro.org>2016-09-18 11:26:49 +0800
committerNingsheng Jian <ningsheng.jian@linaro.org>2016-11-01 01:28:33 +0000
commitc9b02571a9db10157ef3d8b72ae83055b81302f2 (patch)
treef2fdadb9271d90114fc9d4d65b4cca57b2187eab
parent6ebcd3d033a8124289662890293a985884aef1ce (diff)
Add samples to measure vector multiply-add performance
Add the test cases as follows: 1. Vector sum of multiply-add for int 2. Vector sum of multiply-add and vector multiply-add for short SLP support for different data types can also be measured by comparing short cases with int cases. Change-Id: Ia57f80c3b21edd0fcc78866fac8b848b4a2d1b4f
-rw-r--r--src/main/java/org/linaro/benchmarks/TestSIMDMlaInt.java88
-rw-r--r--src/main/java/org/linaro/benchmarks/TestSIMDMlaShort.java132
2 files changed, 220 insertions, 0 deletions
diff --git a/src/main/java/org/linaro/benchmarks/TestSIMDMlaInt.java b/src/main/java/org/linaro/benchmarks/TestSIMDMlaInt.java
new file mode 100644
index 0000000..ae1bc6f
--- /dev/null
+++ b/src/main/java/org/linaro/benchmarks/TestSIMDMlaInt.java
@@ -0,0 +1,88 @@
+package org.linaro.benchmarks;
+
+import org.openjdk.jmh.annotations.*;
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MICROSECONDS)
+@State(Scope.Benchmark)
+
+public class TestSIMDMlaInt {
+ static final int LENGTH = 256 * 1024;
+ static int [] a = new int[LENGTH];
+ static int [] b = new int[LENGTH];
+ static int [] c = new int[LENGTH];
+ static int [] d = new int[LENGTH];
+
+ public static void TestSIMDMlaInit() {
+ for (int i = 0; i < LENGTH; i++) {
+ a[i] = 3;
+ b[i] = 2;
+ c[i] = 1;
+ }
+ }
+
+ public static int vectSumOfMulAdd1(
+ int[] a,
+ int[] b,
+ int[] c,
+ int[] d) {
+ int total = 0;
+ for (int i = 0; i < LENGTH; i++) {
+ d[i] = (int)(a[i] * b[i] + c[i]);
+ total += d[i];
+ }
+ return total;
+ }
+
+ public static int vectSumOfMulAdd2(
+ int[] a,
+ int[] b,
+ int[] c,
+ int[] d) {
+ int total = 0;
+ for (int i = 0; i < LENGTH; i++) {
+ d[i] = (int)(a[i] * b[i] + a[i] * c[i]);
+ total += d[i];
+ }
+ return total;
+ }
+
+ public static int vectSumOfMulAdd3(
+ int[] a,
+ int[] b,
+ int[] c,
+ int[] d) {
+ int total = 0;
+ for (int i = 0; i < LENGTH; i++) {
+ d[i] = (int)((a[i] * b[i]) + (a[i] * c[i]) + (b[i] * c[i]));
+ total += d[i];
+ }
+ return total;
+ }
+
+ @Setup
+ public void setup()
+ {
+ TestSIMDMlaInit();
+ }
+
+ @Benchmark
+ public void testVectSumOfMulAdd1() {
+ int sum = 0;
+ sum = vectSumOfMulAdd1(a, b, c, d);
+ }
+
+ @Benchmark
+ public void testVectSumOfMulAdd2() {
+ int sum = 0;
+ sum = vectSumOfMulAdd2(a, b, c, d);
+ }
+
+ @Benchmark
+ public void testVectSumOfMulAdd3() {
+ int sum = 0;
+ sum = vectSumOfMulAdd3(a, b, c, d);
+ }
+
+}
diff --git a/src/main/java/org/linaro/benchmarks/TestSIMDMlaShort.java b/src/main/java/org/linaro/benchmarks/TestSIMDMlaShort.java
new file mode 100644
index 0000000..17cf3ce
--- /dev/null
+++ b/src/main/java/org/linaro/benchmarks/TestSIMDMlaShort.java
@@ -0,0 +1,132 @@
+package org.linaro.benchmarks;
+
+import org.openjdk.jmh.annotations.*;
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MICROSECONDS)
+@State(Scope.Benchmark)
+
+public class TestSIMDMlaShort {
+ static final int LENGTH = 256 * 1024;
+ static short [] a = new short[LENGTH];
+ static short [] b = new short[LENGTH];
+ static short [] c = new short[LENGTH];
+ static short [] d = new short[LENGTH];
+
+ public static void TestSIMDMlaInit() {
+ for (int i = 0; i < LENGTH; i++) {
+ a[i] = 3;
+ b[i] = 2;
+ c[i] = 1;
+ }
+ }
+
+ public static int vectSumOfMulAdd1(
+ short[] a,
+ short[] b,
+ short[] c,
+ short[] d) {
+ int total = 0;
+ for (int i = 0; i < LENGTH; i++) {
+ d[i] = (short)(a[i] * b[i] + c[i]);
+ total += d[i];
+ }
+ return total;
+ }
+
+ public static int vectSumOfMulAdd2(
+ short[] a,
+ short[] b,
+ short[] c,
+ short[] d) {
+ int total = 0;
+ for (int i = 0; i < LENGTH; i++) {
+ d[i] = (short)(a[i] * b[i] + a[i] * c[i]);
+ total += d[i];
+ }
+ return total;
+ }
+
+ public static int vectSumOfMulAdd3(
+ short[] a,
+ short[] b,
+ short[] c,
+ short[] d) {
+ int total = 0;
+ for (int i = 0; i < LENGTH; i++) {
+ d[i] = (short)((a[i] * b[i]) + (a[i] * c[i]) + (b[i] * c[i]));
+ total += d[i];
+ }
+ return total;
+ }
+
+ public static void vectMulAdd1(
+ short[] a,
+ short[] b,
+ short[] c,
+ short[] d) {
+ for (int i = 0; i < LENGTH; i++) {
+ d[i] = (short)(a[i] * b[i] + c[i]);
+ }
+ }
+
+ public static void vectMulAdd2(
+ short[] a,
+ short[] b,
+ short[] c,
+ short[] d) {
+ for (int i = 0; i < LENGTH; i++) {
+ d[i] = (short)(a[i] * b[i] + a[i] * c[i]);
+ }
+ }
+
+ public static void vectMulAdd3(
+ short[] a,
+ short[] b,
+ short[] c,
+ short[] d) {
+ for (int i = 0; i < LENGTH; i++) {
+ d[i] = (short)((a[i] * b[i]) + (a[i] * c[i]) + (b[i] * c[i]));
+ }
+ }
+
+ @Setup
+ public void setup()
+ {
+ TestSIMDMlaInit();
+ }
+
+ @Benchmark
+ public void testVectSumOfMulAdd1() {
+ int sum = 0;
+ sum = vectSumOfMulAdd1(a, b, c, d);
+ }
+
+ @Benchmark
+ public void testVectSumOfMulAdd2() {
+ int sum = 0;
+ sum = vectSumOfMulAdd2(a, b, c, d);
+ }
+
+ @Benchmark
+ public void testVectSumOfMulAdd3() {
+ int sum = 0;
+ sum = vectSumOfMulAdd3(a, b, c, d);
+ }
+ @Benchmark
+ public void testVectMulAdd1() {
+ vectMulAdd1(a, b, c, d);
+ }
+
+ @Benchmark
+ public void testVectMulAdd2() {
+ vectMulAdd2(a, b, c, d);
+ }
+
+ @Benchmark
+ public void testVectMulAdd3() {
+ vectMulAdd3(a, b, c, d);
+ }
+
+}