benchmarks/matrix-multiplication/src/main/java/org/apidesign/benchmark/matrixmul/Matrix.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 13 Dec 2012 08:40:39 +0100
branchbenchmarks
changeset 314 1a3f102e5ea5
parent 268 e01b65623f72
child 381 70d15cf323ba
permissions -rw-r--r--
Fixing licenses for benchmarks module, so it can be merged to default branch
jaroslav@314
     1
/**
jaroslav@314
     2
 * Back 2 Browser Bytecode Translator
jaroslav@314
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@314
     4
 *
jaroslav@314
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@314
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@314
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@314
     8
 *
jaroslav@314
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@314
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@314
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@314
    12
 * GNU General Public License for more details.
jaroslav@314
    13
 *
jaroslav@314
    14
 * You should have received a copy of the GNU General Public License
jaroslav@314
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@314
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@314
    17
 */
Martin@268
    18
package org.apidesign.benchmark.matrixmul;
Martin@268
    19
Martin@268
    20
//import java.io.PrintStream;
Martin@268
    21
//import java.util.Random;
Martin@268
    22
Martin@268
    23
public class Matrix {
Martin@268
    24
Martin@268
    25
    private final int rank;
Martin@268
    26
    private float data[][];
Martin@268
    27
    
Martin@268
    28
    public Matrix(int r) {
Martin@268
    29
        rank = r;
Martin@268
    30
        data = new float[r][r];
Martin@268
    31
    }
Martin@268
    32
    
Martin@268
    33
    public void setElement(int i, int j, float value) {
Martin@268
    34
        data[i][j] = value;
Martin@268
    35
    }
Martin@268
    36
    public float getElement(int i, int j) {
Martin@268
    37
        return data[i][j];
Martin@268
    38
    }
Martin@268
    39
    
Martin@268
    40
    public void generateData() {
Martin@268
    41
        //final Random rand = new Random();
Martin@268
    42
        //final int x = 10;
Martin@268
    43
        for (int i = 0; i < rank; i++) {
Martin@268
    44
            for (int j = 0; j < rank; j++) {
Martin@268
    45
                data[i][j] = i + j;
Martin@268
    46
            }
Martin@268
    47
        }
Martin@268
    48
    }
Martin@268
    49
Martin@268
    50
    public Matrix multiply(Matrix m) {
Martin@268
    51
        if (rank != m.rank) {
Martin@268
    52
            throw new IllegalArgumentException("Rank doesn't match");
Martin@268
    53
        }
Martin@268
    54
        
Martin@268
    55
        final float res[][] = new float[rank][rank];
Martin@268
    56
        for (int i = 0; i < rank; i++) {
Martin@268
    57
            for (int j = 0; j < rank; j++) {
Martin@268
    58
                float ij = 0;
Martin@268
    59
                for (int q = 0; q < rank; q++) {
Martin@268
    60
                    ij += data[i][q] * m.data[q][j];
Martin@268
    61
                }
Martin@268
    62
                res[i][j] = ij;
Martin@268
    63
            }
Martin@268
    64
        }
Martin@268
    65
        data = res;
Martin@268
    66
        
Martin@268
    67
        return this;
Martin@268
    68
    }
Martin@268
    69
    
Martin@268
    70
    /*
Martin@268
    71
    public void printOn(PrintStream s) {
Martin@268
    72
        for (int i = 0; i < rank; i++) {
Martin@268
    73
            for (int j = 0; j < rank; j++) {
Martin@268
    74
                s.printf("%f ", data[i][j]);
Martin@268
    75
            }
Martin@268
    76
            s.println();
Martin@268
    77
        }
Martin@268
    78
    }
Martin@268
    79
    */
Martin@268
    80
    
Martin@268
    81
}