summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Zhang <yang.zhang@linaro.org>2016-08-26 13:52:30 +0800
committerNingsheng Jian <ningsheng.jian@linaro.org>2016-11-01 01:25:20 +0000
commit6ebcd3d033a8124289662890293a985884aef1ce (patch)
tree7306917cb36d77963a34273699b8023f5e54c730
parentfbfb10e1841ecbb86cb8cc313faf495ce7c2b094 (diff)
Add samples for basic SIMD instructions performance
Add the test cases as follows: 1. Vector copy for int/short/byte 2. Vector add for int/short/byte 3. Vector mul for int/short/byte Change-Id: I2b0f9324c029efeb61387f0620d59792c8aeb5aa
-rw-r--r--src/main/java/org/linaro/benchmarks/TestSimdAdd.java74
-rw-r--r--src/main/java/org/linaro/benchmarks/TestSimdCopy.java68
-rw-r--r--src/main/java/org/linaro/benchmarks/TestSimdMul.java74
3 files changed, 216 insertions, 0 deletions
diff --git a/src/main/java/org/linaro/benchmarks/TestSimdAdd.java b/src/main/java/org/linaro/benchmarks/TestSimdAdd.java
new file mode 100644
index 0000000..18082d0
--- /dev/null
+++ b/src/main/java/org/linaro/benchmarks/TestSimdAdd.java
@@ -0,0 +1,74 @@
+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 TestSimdAdd {
+ static final int LENGTH = 1024 * 256;
+ static int [] a = new int[LENGTH];
+ static int [] b = new int[LENGTH];
+ static int [] c = new int[LENGTH];
+ static short [] sa = new short[LENGTH];
+ static short [] sb = new short[LENGTH];
+ static short [] sc = new short[LENGTH];
+ static byte [] ba = new byte[LENGTH];
+ static byte [] bb = new byte[LENGTH];
+ static byte [] bc = new byte[LENGTH];
+ public static void TestSimdAddInit() {
+ for (int i = 0; i < LENGTH; i++) {
+ a[i] = i + 3;
+ b[i] = i + 2;
+ c[i] = i + 1;
+ sa[i] = (short)(i + 3);
+ sb[i] = (short)(i + 2);
+ sc[i] = (short)(i + 1);
+ ba[i] = (byte)(i + 3);
+ bb[i] = (byte)(i + 2);
+ bc[i] = (byte)(i + 1);
+ }
+ }
+
+ public static void vectAddInt() {
+ for (int i = 0; i < LENGTH; i++) {
+ c[i] = a[i] + b[i];
+ }
+ }
+
+ public static void vectAddShort() {
+ for (int i = 0; i < LENGTH; i++) {
+ sc[i] = (short)(sa[i] + sb[i]);
+ }
+ }
+
+ public static void vectAddByte() {
+ for (int i = 0; i < LENGTH; i++) {
+ bc[i] = (byte)(ba[i] + bb[i]);
+ }
+ }
+
+ @Setup
+ public void setup()
+ {
+ TestSimdAddInit();
+ }
+
+ @Benchmark
+ public void testVectAddByte() {
+ vectAddByte();
+ }
+
+ @Benchmark
+ public void testVectAddShort() {
+ vectAddShort();
+ }
+
+ @Benchmark
+ public void testVectAddInt() {
+ vectAddInt();
+ }
+
+}
diff --git a/src/main/java/org/linaro/benchmarks/TestSimdCopy.java b/src/main/java/org/linaro/benchmarks/TestSimdCopy.java
new file mode 100644
index 0000000..43fe27c
--- /dev/null
+++ b/src/main/java/org/linaro/benchmarks/TestSimdCopy.java
@@ -0,0 +1,68 @@
+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 TestSimdCopy {
+ static final int LENGTH = 1024 * 256;
+ static int [] a = new int[LENGTH];
+ static int [] c = new int[LENGTH];
+ static short [] sa = new short[LENGTH];
+ static short [] sc = new short[LENGTH];
+ static byte [] ba = new byte[LENGTH];
+ static byte [] bc = new byte[LENGTH];
+ public static void TestSimdCopyInit() {
+ for (int i = 0; i < LENGTH; i++) {
+ a[i] = i + 3;
+ c[i] = i + 1;
+ sa[i] = (short)(i + 3);
+ sc[i] = (short)(i + 1);
+ ba[i] = (byte)(i + 3);
+ bc[i] = (byte)(i + 1);
+ }
+ }
+
+ public static void vectCopyInt() {
+ for (int i = 0; i < LENGTH; i++) {
+ c[i] = a[i];
+ }
+ }
+
+ public static void vectCopyShort() {
+ for (int i = 0; i < LENGTH; i++) {
+ sc[i] = sa[i];
+ }
+ }
+
+ public static void vectCopyByte() {
+ for (int i = 0; i < LENGTH; i++) {
+ bc[i] = ba[i];
+ }
+ }
+
+ @Setup
+ public void setup()
+ {
+ TestSimdCopyInit();
+ }
+
+ @Benchmark
+ public void testVectCopyByte() {
+ vectCopyByte();
+ }
+
+ @Benchmark
+ public void testVectCopyShort() {
+ vectCopyShort();
+ }
+
+ @Benchmark
+ public void testVectCopyInt() {
+ vectCopyInt();
+ }
+
+}
diff --git a/src/main/java/org/linaro/benchmarks/TestSimdMul.java b/src/main/java/org/linaro/benchmarks/TestSimdMul.java
new file mode 100644
index 0000000..e12b204
--- /dev/null
+++ b/src/main/java/org/linaro/benchmarks/TestSimdMul.java
@@ -0,0 +1,74 @@
+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 TestSimdMul {
+ static final int LENGTH = 1024 * 256;
+ static int [] a = new int[LENGTH];
+ static int [] b = new int[LENGTH];
+ static int [] c = new int[LENGTH];
+ static short [] sa = new short[LENGTH];
+ static short [] sb = new short[LENGTH];
+ static short [] sc = new short[LENGTH];
+ static byte [] ba = new byte[LENGTH];
+ static byte [] bb = new byte[LENGTH];
+ static byte [] bc = new byte[LENGTH];
+ public static void TestSimdMulInit() {
+ for (int i = 0; i < LENGTH; i++) {
+ a[i] = i + 3;
+ b[i] = i + 2;
+ c[i] = i + 1;
+ sa[i] = (short)(i + 3);
+ sb[i] = (short)(i + 2);
+ sc[i] = (short)(i + 1);
+ ba[i] = (byte)(i + 3);
+ bb[i] = (byte)(i + 2);
+ bc[i] = (byte)(i + 1);
+ }
+ }
+
+ public static void vectMulInt() {
+ for (int i = 0; i < LENGTH; i++) {
+ c[i] = a[i] * b[i];
+ }
+ }
+
+ public static void vectMulShort() {
+ for (int i = 0; i < LENGTH; i++) {
+ sc[i] = (short)(sa[i] * sb[i]);
+ }
+ }
+
+ public static void vectMulByte() {
+ for (int i = 0; i < LENGTH; i++) {
+ bc[i] = (byte)(ba[i] * bb[i]);
+ }
+ }
+
+ @Setup
+ public void setup()
+ {
+ TestSimdMulInit();
+ }
+
+ @Benchmark
+ public void testVectMulByte() {
+ vectMulByte();
+ }
+
+ @Benchmark
+ public void testVectMulShort() {
+ vectMulShort();
+ }
+
+ @Benchmark
+ public void tesVectMulInt() {
+ vectMulInt();
+ }
+
+}