package de.jungblut.benchmark; import java.util.Random; import com.google.caliper.Param; import com.google.caliper.Runner; import com.google.caliper.SimpleBenchmark; import de.jungblut.math.DoubleMatrix; import de.jungblut.math.cuda.JCUDAMatrixUtils; import de.jungblut.math.dense.DenseDoubleMatrix; public class MathLibBenchmark extends SimpleBenchmark { @Param({ "10", "20", "40", "60", "80", "100", "500", "1000", "2000" }) private int n; @Param CalcType type; private DenseDoubleMatrix mat; private DenseDoubleMatrix mat2; public enum CalcType { GPU, JBLAS, TJ_MATH }; @Override protected void setUp() throws Exception { mat = new DenseDoubleMatrix(n, n, new Random()); mat2 = new DenseDoubleMatrix(n, n, new Random()); } public void timeCalculate(int reps) { for (int rep = 0; rep < reps; rep++) { int sum = 0; switch (type) { case JBLAS: sum = jblas(sum); break; case TJ_MATH: sum = tjmath(sum); break; case GPU: sum = gpu(sum); break; default: break; } System.out.println(sum); } } private int gpu(int sum) { DenseDoubleMatrix multiply2 = JCUDAMatrixUtils.multiply(mat, mat2); sum += multiply2.getColumnCount(); return sum; } private int tjmath(int sum) { DoubleMatrix multiply = mat.multiply(mat2); sum += multiply.getRowCount(); return sum; } private int jblas(int sum) { org.jblas.DoubleMatrix jblasThis = new org.jblas.DoubleMatrix(mat.toArray()); org.jblas.DoubleMatrix jblasOther = new org.jblas.DoubleMatrix( mat2.toArray()); org.jblas.DoubleMatrix jblasRes = new org.jblas.DoubleMatrix(n, n); jblasThis.mmuli(jblasOther, jblasRes); sum += jblasRes.columns; return sum; } public static void main(String[] args) { Runner.main(MathLibBenchmark.class, args); } }