Class BenchmarkMatrix2D

java.lang.Object
cern.colt.matrix.impl.BenchmarkMatrix2D

class BenchmarkMatrix2D extends Object
Benchmarks the performance of matrices. Here are the results of some encouraging measurements. Note that all benchmarks only measure the time spent in accessing a matrix element; they exclude the loop itself.

Iteration Performance [million method calls per second]
Pentium Pro 200 Mhz, SunJDK 1.2.2, NT, java -classic,
60 times repeating the same iteration
Element type
Matrix2D type
.

DenseDoubleMatrix2D
1000 x 1000

 

SparseDoubleMatrix2D
100 x 1000,
minLoadFactor=0.2, maxLoadFactor=0.5, initialCapacity = 0

getQuick setQuick     getQuick setQuick
double 5 5     1 0.27
int 5 5.5     1 0.3

As can be seen, sparse matrices are certainly not quite as quick as dense ones, but not really slow either. Considering their minimal footprint they can be a real alternative.

Comparing the OO abstractions to zero-abstraction primitive Java arrays may or may not be useful. Still, the table below provides some interesting information. For example, access to Type_T_Matrix2D is quicker than naive usage of Type_T_[]. Primitive arrays should only be considered if the optimized form can be applied. Note again that all benchmarks only measure the time spent in accessing a matrix element; they exclude the loop itself.

Iteration Performance [million element accesses per second]
Pentium Pro 200 Mhz, SunJDK 1.2.2, NT, java -classic,
200 times repeating the same iteration
Element type
Matrix2D type = Java array double[][]
.

Unoptimized Form
1000 x 1000

for (int row=0; row invalid input: '<' rows; row++) { 
   for (int col=0; col invalid input: '<' columns; ) { 
          value = m[row][col++];
          ...
   }
}
Optimized Form
1000 x 1000
for (int row=0; row invalid input: '<' rows; row++) { 
   int[] r = matrix[row]; 
   for (int col=0; col invalid input: '<' columns; ) { 
          value = r[col++];
          ...
   }
}
getting setting getting setting
double 1.6 1.8 18 11
int 1.5 1.8 28 26
Version:
1.0, 09/24/99
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Makes this class non instantiable, but still let's others inherit from it.
  • Method Summary

    Modifier and Type
    Method
    Description
    static void
    doubleBenchmark(int runs, int rows, int columns, String kind, boolean print, int initialCapacity, double minLoadFactor, double maxLoadFactor)
    Runs a bench on matrices holding double elements.
    static void
    doubleBenchmarkMult(int runs, int rows, int columns, String kind, boolean print, int initialCapacity, double minLoadFactor, double maxLoadFactor)
    Runs a bench on matrices holding double elements.
    static void
    doubleBenchmarkPrimitive(int runs, int rows, int columns, boolean print)
    Runs a bench on matrices holding double elements.
    static void
    doubleBenchmarkPrimitiveOptimized(int runs, int rows, int columns, boolean print)
    Runs a bench on matrices holding double elements.
    static void
    intBenchmark(int runs, int rows, int columns, String kind, boolean print, int initialCapacity, double minLoadFactor, double maxLoadFactor)
    Runs a bench on matrices holding int elements.
    static void
    intBenchmarkPrimitive(int runs, int rows, int columns, boolean print)
    Runs a bench on matrices holding int elements.
    static void
    intBenchmarkPrimitiveOptimized(int runs, int rows, int columns, boolean print)
    Runs a bench on matrices holding int elements.
    static void
    main(String[] args)
    Benchmarks various methods of this class.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • BenchmarkMatrix2D

      protected BenchmarkMatrix2D()
      Makes this class non instantiable, but still let's others inherit from it.
  • Method Details

    • doubleBenchmark

      public static void doubleBenchmark(int runs, int rows, int columns, String kind, boolean print, int initialCapacity, double minLoadFactor, double maxLoadFactor)
      Runs a bench on matrices holding double elements.
    • doubleBenchmarkMult

      public static void doubleBenchmarkMult(int runs, int rows, int columns, String kind, boolean print, int initialCapacity, double minLoadFactor, double maxLoadFactor)
      Runs a bench on matrices holding double elements.
    • doubleBenchmarkPrimitive

      public static void doubleBenchmarkPrimitive(int runs, int rows, int columns, boolean print)
      Runs a bench on matrices holding double elements.
    • doubleBenchmarkPrimitiveOptimized

      public static void doubleBenchmarkPrimitiveOptimized(int runs, int rows, int columns, boolean print)
      Runs a bench on matrices holding double elements.
    • intBenchmark

      public static void intBenchmark(int runs, int rows, int columns, String kind, boolean print, int initialCapacity, double minLoadFactor, double maxLoadFactor)
      Runs a bench on matrices holding int elements.
    • intBenchmarkPrimitive

      public static void intBenchmarkPrimitive(int runs, int rows, int columns, boolean print)
      Runs a bench on matrices holding int elements.
    • intBenchmarkPrimitiveOptimized

      public static void intBenchmarkPrimitiveOptimized(int runs, int rows, int columns, boolean print)
      Runs a bench on matrices holding int elements.
    • main

      public static void main(String[] args)
      Benchmarks various methods of this class.