package mikera.matrixx.performance;
import com.google.caliper.Runner;
import com.google.caliper.SimpleBenchmark;
import mikera.matrixx.Matrix;
import mikera.matrixx.Matrixx;
import mikera.matrixx.algo.Multiplications;
/**
* Caliper based benchmarks
*
* @author Mike
*/
public class MultiplyBenchmark extends SimpleBenchmark {
public static final int MATRIX_SIZE=10;
public void timeBlockedMultiply(int runs) {
Matrix m1=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
Matrix m2=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
for (int i=0; i<runs; i++) {
Multiplications.blockedMultiply(m1, m2);
}
}
public void timeDoubleBlockedMultiply(int runs) {
Matrix m1=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
Matrix m2=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
for (int i=0; i<runs; i++) {
Multiplications.doubleBlockedMultiply(m1, m2);
}
}
public void timeDefaultMultiply(int runs) {
Matrix m1=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
Matrix m2=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
for (int i=0; i<runs; i++) {
Multiplications.multiply(m1, m2);
}
}
public void timeInnerProductMultiply(int runs) {
Matrix m1=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
Matrix m2=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
for (int i=0; i<runs; i++) {
m1.innerProduct(m2);
}
}
public void timeDirectMultiply(int runs) {
Matrix m1=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
Matrix m2=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
for (int i=0; i<runs; i++) {
Multiplications.directMultiply(m1, m2);
}
}
public void timeNaiveMultiply(int runs) {
Matrix m1=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
Matrix m2=(Matrix)Matrixx.createRandomMatrix(MATRIX_SIZE, MATRIX_SIZE);
for (int i=0; i<runs; i++) {
Multiplications.naiveMultiply(m1, m2);
}
}
/**
* @param args
*/
public static void main(String[] args) {
new MultiplyBenchmark().run();
}
private void run() {
Runner runner=new Runner();
runner.run(new String[] {this.getClass().getCanonicalName()});
}
}