benchmarks/matrix-multiplication/src/main/java/org/apidesign/benchmark/matrixmul/Matrix.java
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/benchmarks/matrix-multiplication/src/main/java/org/apidesign/benchmark/matrixmul/Matrix.java Wed Dec 05 11:18:09 2012 +0100
1.3 @@ -0,0 +1,64 @@
1.4 +package org.apidesign.benchmark.matrixmul;
1.5 +
1.6 +//import java.io.PrintStream;
1.7 +//import java.util.Random;
1.8 +
1.9 +public class Matrix {
1.10 +
1.11 + private final int rank;
1.12 + private float data[][];
1.13 +
1.14 + public Matrix(int r) {
1.15 + rank = r;
1.16 + data = new float[r][r];
1.17 + }
1.18 +
1.19 + public void setElement(int i, int j, float value) {
1.20 + data[i][j] = value;
1.21 + }
1.22 + public float getElement(int i, int j) {
1.23 + return data[i][j];
1.24 + }
1.25 +
1.26 + public void generateData() {
1.27 + //final Random rand = new Random();
1.28 + //final int x = 10;
1.29 + for (int i = 0; i < rank; i++) {
1.30 + for (int j = 0; j < rank; j++) {
1.31 + data[i][j] = i + j;
1.32 + }
1.33 + }
1.34 + }
1.35 +
1.36 + public Matrix multiply(Matrix m) {
1.37 + if (rank != m.rank) {
1.38 + throw new IllegalArgumentException("Rank doesn't match");
1.39 + }
1.40 +
1.41 + final float res[][] = new float[rank][rank];
1.42 + for (int i = 0; i < rank; i++) {
1.43 + for (int j = 0; j < rank; j++) {
1.44 + float ij = 0;
1.45 + for (int q = 0; q < rank; q++) {
1.46 + ij += data[i][q] * m.data[q][j];
1.47 + }
1.48 + res[i][j] = ij;
1.49 + }
1.50 + }
1.51 + data = res;
1.52 +
1.53 + return this;
1.54 + }
1.55 +
1.56 + /*
1.57 + public void printOn(PrintStream s) {
1.58 + for (int i = 0; i < rank; i++) {
1.59 + for (int j = 0; j < rank; j++) {
1.60 + s.printf("%f ", data[i][j]);
1.61 + }
1.62 + s.println();
1.63 + }
1.64 + }
1.65 + */
1.66 +
1.67 +}