This is an automated email from the ASF dual-hosted git repository.

baunsgaard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git


The following commit(s) were added to refs/heads/main by this push:
     new 35f4e79b54 [SYSTEMS-3432] Estimate NNZ/sparsity in bindResponses
35f4e79b54 is described below

commit 35f4e79b5483415c568dbf93aeec9311e86fe87c
Author: Andreas Botzner <[email protected]>
AuthorDate: Mon Aug 29 09:46:22 2022 +0200

    [SYSTEMS-3432] Estimate NNZ/sparsity in bindResponses
    
    This commit analyze if the result matrix should be sparse before
    allocation when getting a federated response back to the controller,
    And allocate a sparse or dense matrix accordingly.
    
    Closes #1692
---
 .../runtime/controlprogram/federated/FederationUtils.java      | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git 
a/src/main/java/org/apache/sysds/runtime/controlprogram/federated/FederationUtils.java
 
b/src/main/java/org/apache/sysds/runtime/controlprogram/federated/FederationUtils.java
index 269d91e9c5..02aefb928c 100644
--- 
a/src/main/java/org/apache/sysds/runtime/controlprogram/federated/FederationUtils.java
+++ 
b/src/main/java/org/apache/sysds/runtime/controlprogram/federated/FederationUtils.java
@@ -145,7 +145,7 @@ public class FederationUtils {
                                        Lop.OPERAND_DELIMITOR + 
varOldOut.getName() + Lop.DATATYPE_PREFIX,
                                        Lop.OPERAND_DELIMITOR + 
String.valueOf(outputId) + Lop.DATATYPE_PREFIX);
                        }
-                       
+
                        fr[j] = new FederatedRequest(RequestType.EXEC_INST, 
outputId, (Object) linst[j]);
                }
                return fr;
@@ -539,7 +539,13 @@ public class FederationUtils {
        public static MatrixBlock bindResponses(List<Pair<FederatedRange, 
Future<FederatedResponse>>> readResponses, long[] dims)
                throws Exception
        {
-               MatrixBlock ret = new MatrixBlock((int) dims[0], (int) dims[1], 
false);
+               long totalNNZ = 0;
+               for(Pair<FederatedRange, Future<FederatedResponse>> 
readResponse : readResponses) {
+                       FederatedResponse response = 
readResponse.getRight().get();
+                       MatrixBlock multRes = (MatrixBlock) 
response.getData()[0];
+                       totalNNZ += multRes.getNonZeros();
+               }
+               MatrixBlock ret = new MatrixBlock((int) dims[0], (int) dims[1], 
MatrixBlock.evalSparseFormatInMemory(dims[0], dims[1], totalNNZ));
                for(Pair<FederatedRange, Future<FederatedResponse>> 
readResponse : readResponses) {
                        FederatedRange range = readResponse.getLeft();
                        FederatedResponse response = 
readResponse.getRight().get();

Reply via email to