package mikera.matrixx.performance;
import com.google.caliper.Runner;
import com.google.caliper.SimpleBenchmark;
import mikera.vectorz.Op;
import mikera.vectorz.Ops;
import mikera.vectorz.Vector;
import mikera.vectorz.Vectorz;
import mikera.vectorz.ops.Linear;
/**
* Caliper based benchmarks
*
* @author Mike
*/
public class ArrayPerfBenchmark extends SimpleBenchmark {
public static final int MATRIX_SIZE=10;
public void timeMutable(int runs) {
Vector v=Vector.createLength(8388608);
Vectorz.fillGaussian(v);
for (int i=0; i<runs; i++) {
v.add(0.375);
v.sqrt();
v.scale(2.0);
}
}
public void timeImmutable(int runs) {
Vector v=Vector.createLength(8388608);
Vectorz.fillGaussian(v);
for (int i=0; i<runs; i++) {
Vector a=(Vector) v.addCopy(0.375);
a=(Vector) a.sqrtCopy();
a=(Vector) a.scaleCopy(2.0);
}
}
@SuppressWarnings("unused")
public void timeOpsImmutable(int runs) {
Vector v=Vector.createLength(8388608);
Vectorz.fillGaussian(v);
Op op = Ops.compose(Linear.create(2.0,0.0), Ops.compose(Ops.SQRT, Linear.create(0.0,0.375)));
for (int i=0; i<runs; i++) {
Vector a=(Vector) v.applyOpCopy(op);
}
}
public void timeOpsMutable(int runs) {
Vector v=Vector.createLength(8388608);
Vectorz.fillGaussian(v);
Op op = Ops.compose(Linear.create(2.0,0.0), Ops.compose(Ops.SQRT, Linear.create(0.0,0.375)));
for (int i=0; i<runs; i++) {
v.applyOp(op);
}
}
public void timeOptimised(int runs) {
Vector v=Vector.createLength(8388608);
Vectorz.fillGaussian(v);
for (int i=0; i<runs; i++) {
v.scaleAdd(4.0, 1.5); // combine scaling and addition
v.sqrt();
}
}
/**
* @param args
*/
public static void main(String[] args) {
new ArrayPerfBenchmark().run();
}
private void run() {
Runner runner=new Runner();
runner.run(new String[] {this.getClass().getCanonicalName()});
}
}