summaryrefslogtreecommitdiff
path: root/src/main/java/org/linaro/benchmarks/stanford/IntMM.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/linaro/benchmarks/stanford/IntMM.java')
-rw-r--r--src/main/java/org/linaro/benchmarks/stanford/IntMM.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/main/java/org/linaro/benchmarks/stanford/IntMM.java b/src/main/java/org/linaro/benchmarks/stanford/IntMM.java
new file mode 100644
index 0000000..52ab141
--- /dev/null
+++ b/src/main/java/org/linaro/benchmarks/stanford/IntMM.java
@@ -0,0 +1,75 @@
+/* Copied from https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_14/SingleSource/Benchmarks
+ * License: LLVM Release License. See Notice file
+ */
+
+package org.linaro.benchmarks.stanford;
+
+import org.openjdk.jmh.annotations.*;
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MICROSECONDS)
+@State(Scope.Benchmark)
+
+public class IntMM {
+
+ private static final int rowsize = 40;
+
+ // Number of (internal) iterations for IntMM runs as per original benchmark
+ private static final int INTMM_ITERS = 10;
+ private static final int EXPECTED = 300;
+
+ private long seed;
+
+ private int[][] ima = new int[rowsize + 1][rowsize + 1];
+ private int[][] imb = new int[rowsize + 1][rowsize + 1];
+ private int[][] imr = new int[rowsize + 1][rowsize + 1];
+
+// CHECKSTYLE.OFF: .*
+void Initrand () {
+ seed = 74755L; /* constant to long WR*/
+}
+
+int Rand () {
+ seed = (seed * 1309L + 13849L) & 65535L; /* constants to long WR*/
+ return( (int)seed ); /* typecast back to int WR*/
+}
+
+
+ /* Multiplies two integer matrices. */
+
+private void Initmatrix (int m[][]) {
+ int temp, i, j;
+ for ( i = 1; i <= rowsize; i++ )
+ for ( j = 1; j <= rowsize; j++ ) {
+ temp = Rand();
+ m[i][j] = temp - (temp/120)*120 - 60;
+ }
+}
+
+void Innerproduct( int result[][], int a[][], int b[][], int row, int column) {
+ /* computes the inner product of A[row,*] and B[*,column] */
+ int i;
+ int tmp = 0;
+ for(i = 1; i <= rowsize; i++ ) tmp = tmp+a[row][i]*b[i][column];
+ result[row][column] = tmp;
+ }
+
+void Intmm (int run) {
+ int i, j;
+ Initrand();
+ Initmatrix (ima);
+ Initmatrix (imb);
+ for ( i = 1; i <= rowsize; i++ )
+ for ( j = 1; j <= rowsize; j++ )
+ Innerproduct(imr,ima,imb,i,j);
+}
+ // CHECKSTYLE.ON: .*
+
+ @Benchmark
+ public void jmhTimeIntmm() {
+ for (int j = 0; j < INTMM_ITERS; j++) {
+ Intmm(j);
+ }
+ }
+}