diff options
Diffstat (limited to 'src/main/java/org/linaro/benchmarks/stanford/IntMM.java')
-rw-r--r-- | src/main/java/org/linaro/benchmarks/stanford/IntMM.java | 75 |
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); + } + } +} |