benchmarks/matrix-multiplication/src/main/java/org/apidesign/benchmark/matrixmul/Matrix.java
author Martin Soch <Martin.Soch@oracle.com>
Wed, 05 Dec 2012 11:18:09 +0100
branchbenchmarks
changeset 268 e01b65623f72
child 314 1a3f102e5ea5
permissions -rw-r--r--
first version of benchmarks
- currently only one benchmark - matrix multiplication
Martin@268
     1
package org.apidesign.benchmark.matrixmul;
Martin@268
     2
Martin@268
     3
//import java.io.PrintStream;
Martin@268
     4
//import java.util.Random;
Martin@268
     5
Martin@268
     6
public class Matrix {
Martin@268
     7
Martin@268
     8
    private final int rank;
Martin@268
     9
    private float data[][];
Martin@268
    10
    
Martin@268
    11
    public Matrix(int r) {
Martin@268
    12
        rank = r;
Martin@268
    13
        data = new float[r][r];
Martin@268
    14
    }
Martin@268
    15
    
Martin@268
    16
    public void setElement(int i, int j, float value) {
Martin@268
    17
        data[i][j] = value;
Martin@268
    18
    }
Martin@268
    19
    public float getElement(int i, int j) {
Martin@268
    20
        return data[i][j];
Martin@268
    21
    }
Martin@268
    22
    
Martin@268
    23
    public void generateData() {
Martin@268
    24
        //final Random rand = new Random();
Martin@268
    25
        //final int x = 10;
Martin@268
    26
        for (int i = 0; i < rank; i++) {
Martin@268
    27
            for (int j = 0; j < rank; j++) {
Martin@268
    28
                data[i][j] = i + j;
Martin@268
    29
            }
Martin@268
    30
        }
Martin@268
    31
    }
Martin@268
    32
Martin@268
    33
    public Matrix multiply(Matrix m) {
Martin@268
    34
        if (rank != m.rank) {
Martin@268
    35
            throw new IllegalArgumentException("Rank doesn't match");
Martin@268
    36
        }
Martin@268
    37
        
Martin@268
    38
        final float res[][] = new float[rank][rank];
Martin@268
    39
        for (int i = 0; i < rank; i++) {
Martin@268
    40
            for (int j = 0; j < rank; j++) {
Martin@268
    41
                float ij = 0;
Martin@268
    42
                for (int q = 0; q < rank; q++) {
Martin@268
    43
                    ij += data[i][q] * m.data[q][j];
Martin@268
    44
                }
Martin@268
    45
                res[i][j] = ij;
Martin@268
    46
            }
Martin@268
    47
        }
Martin@268
    48
        data = res;
Martin@268
    49
        
Martin@268
    50
        return this;
Martin@268
    51
    }
Martin@268
    52
    
Martin@268
    53
    /*
Martin@268
    54
    public void printOn(PrintStream s) {
Martin@268
    55
        for (int i = 0; i < rank; i++) {
Martin@268
    56
            for (int j = 0; j < rank; j++) {
Martin@268
    57
                s.printf("%f ", data[i][j]);
Martin@268
    58
            }
Martin@268
    59
            s.println();
Martin@268
    60
        }
Martin@268
    61
    }
Martin@268
    62
    */
Martin@268
    63
    
Martin@268
    64
}