You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by ni...@apache.org on 2017/04/27 03:24:25 UTC

incubator-systemml git commit: [HOTFIX] Bugfix for bias_add and bias_multiply operations

Repository: incubator-systemml
Updated Branches:
  refs/heads/master 2a4e4f8b3 -> 39351749f


[HOTFIX] Bugfix for bias_add and bias_multiply operations


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

Branch: refs/heads/master
Commit: 39351749f76e2703b9be43d3b08b348a7e115384
Parents: 2a4e4f8
Author: Niketan Pansare <np...@us.ibm.com>
Authored: Wed Apr 26 19:24:09 2017 -0800
Committer: Niketan Pansare <np...@us.ibm.com>
Committed: Wed Apr 26 20:24:09 2017 -0700

----------------------------------------------------------------------
 .../sysml/runtime/matrix/data/LibMatrixDNN.java | 39 +++++++++++++++-----
 1 file changed, 30 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/39351749/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
index 8a1a43f..cd88b95 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixDNN.java
@@ -709,26 +709,33 @@ public class LibMatrixDNN {
 		int K = bias.getNumRows();
 		int PQ = input.getNumColumns() / K;
 		
-		ConvolutionParameters params = new ConvolutionParameters(N, PQ, -1, -1, K, -1, -1, -1, -1, -1, -1, numThreads);
-		params.input1 = input;
-		params.input2 = bias;
-		params.output = outputBlock;
-		
 		if(bias.getNumColumns() != 1 || input.getNumColumns() % K != 0) {
 			throw new DMLRuntimeException("Incorrect inputs for bias_add: input[" + N + " X " + input.getNumColumns()  + "] and bias[" + K + " X " + bias.getNumColumns() + "]");
 		}
 		
+		double [] outputArray = outputBlock.getDenseBlock();
 		if(input.isEmptyBlock()) {
-			double [] outputArray = outputBlock.getDenseBlock();
 			for(int n = 0;  n < N; n++) 
 				ConvolutionUtils.fillBias(bias, outputArray, n, n+1, N, K, PQ);
 		}
 		else {
-			runConvTask(TaskType.BiasAdd, params);
+			// Handles both dense and sparse inputs and copies it to dense output
+			outputBlock.copy(input); 
+			int index = 0;
+			if(bias.isInSparseFormat())
+				bias.sparseToDense(); // Since bias is extremely small array
+			double [] biasArr = bias.getDenseBlock();
+			for(int n = 0; n < N; n++) {
+				for(int k = 0; k < K; k++) {
+					for(int pq = 0; pq < PQ; pq++, index++) {
+						outputArray[index] += biasArr[k];
+					}
+				}
+			}
 		}
 		
 		//post-processing: maintain nnz
-		params.output.recomputeNonZeros();
+		outputBlock.recomputeNonZeros();
 	}
 	
 	
@@ -759,7 +766,21 @@ public class LibMatrixDNN {
 		}
 		
 		if(!input.isEmptyBlock() && !bias.isEmptyBlock()) {
-			runConvTask(TaskType.BiasMultiply, params);
+			// Handles both dense and sparse inputs and copies it to dense output
+			outputBlock.copy(input); 
+			double [] outputArray = outputBlock.getDenseBlock();
+			int index = 0;
+			if(bias.isInSparseFormat())
+				bias.sparseToDense(); // Since bias is extremely small array
+			double [] biasArr = bias.getDenseBlock();
+			for(int n = 0; n < N; n++) {
+				for(int k = 0; k < K; k++) {
+					for(int pq = 0; pq < PQ; pq++, index++) {
+						outputArray[index] *= biasArr[k];
+					}
+				}
+			}
+			
 			//post-processing: maintain nnz
 			params.output.recomputeNonZeros();
 		}