Class BenchmarkMatrix2D


  • class BenchmarkMatrix2D
    extends java.lang.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 < rows; row++) { 
       for (int col=0; col < columns; ) { 
              value = m[row][col++];
              ...
       }
    }
    
    Optimized Form
    1000 x 1000
    for (int row=0; row < rows; row++) { 
       int[] r = matrix[row]; 
       for (int col=0; col < 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 BenchmarkMatrix2D()
      Makes this class non instantiable, but still let's others inherit from it.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static void doubleBenchmark​(int runs, int rows, int columns, java.lang.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, java.lang.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, java.lang.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​(java.lang.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 Detail

      • BenchmarkMatrix2D

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

      • doubleBenchmark

        public static void doubleBenchmark​(int runs,
                                           int rows,
                                           int columns,
                                           java.lang.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,
                                               java.lang.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,
                                        java.lang.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​(java.lang.String[] args)
        Benchmarks various methods of this class.