Repository: systemml
Updated Branches:
  refs/heads/master dc3dfbe85 -> 728bf19ea


[MINOR] Fix performance dnn matrix multiply integration (nnz handling)

This minor patch avoid unnecessary recomputation of the number of
non-zeros for dense temporary inputs to our java matrix multiplications.
On a single epoch of lenet over mnist, this improved performance
slightly from 298s to 290s (average over 3 runs, w/ codegen enabled). 

Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/1001b3fa
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/1001b3fa
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/1001b3fa

Branch: refs/heads/master
Commit: 1001b3faac4accdfbb5f98a39ac3233befe2d1d7
Parents: dc3dfbe
Author: Matthias Boehm <[email protected]>
Authored: Fri Jun 16 21:21:12 2017 -0700
Committer: Matthias Boehm <[email protected]>
Committed: Sat Jun 17 13:11:33 2017 -0700

----------------------------------------------------------------------
 .../runtime/matrix/data/LibMatrixDNNHelper.java    | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/1001b3fa/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java
index 5a137cc..ab96a8e 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNNHelper.java
@@ -302,10 +302,8 @@ public class LibMatrixDNNHelper {
        static void singleThreadedMatMult(MatrixBlock m1, MatrixBlock m2, 
MatrixBlock ret, 
                        boolean recomputeNNZM1, boolean recomputeNNZM2, 
ConvolutionParameters params) throws DMLRuntimeException {
                if(!params.enableNative || m1.isInSparseFormat() || 
m2.isInSparseFormat()) {
-                       if(recomputeNNZM1)
-                               m1.recomputeNonZeros();
-                       if(recomputeNNZM2)
-                               m2.recomputeNonZeros();
+                       prepNonZerosForMatrixMult(m1, recomputeNNZM1);
+                       prepNonZerosForMatrixMult(m2, recomputeNNZM2);
                        LibMatrixMult.matrixMult(m1, m2, ret, false);
                }
                else {
@@ -539,4 +537,15 @@ public class LibMatrixDNNHelper {
                        }
                }
        }
+       
+       private static void prepNonZerosForMatrixMult(MatrixBlock mb, boolean 
update) {
+               if( !update )
+                       return;
+               //non-zeros are not evaluated for dense matrix multiplies
+               //so we simply need to ensure the block is not marked empty 
+               if( !mb.isInSparseFormat() )
+                       mb.setNonZeros(mb.getNumRows() * mb.getNumColumns());
+               else
+                       mb.recomputeNonZeros(); 
+       }
 }

Reply via email to