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

mboehm7 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/systemml.git


The following commit(s) were added to refs/heads/master by this push:
     new 39c5654  [MINOR] Extended JMLC API (handling of pinned variables)
39c5654 is described below

commit 39c56541ca83ea36093384220d19a31b5578537e
Author: Anthony Thomas <ahtho...@ibm.com>
AuthorDate: Thu Apr 9 19:29:55 2020 +0200

    [MINOR] Extended JMLC API (handling of pinned variables)
    
    Closes #835.
---
 .../java/org/apache/sysds/api/jmlc/PreparedScript.java  | 17 +++++++++++++----
 .../sysds/runtime/controlprogram/LocalVariableMap.java  |  4 ++++
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/sysds/api/jmlc/PreparedScript.java 
b/src/main/java/org/apache/sysds/api/jmlc/PreparedScript.java
index 04101f2..3175fcb 100644
--- a/src/main/java/org/apache/sysds/api/jmlc/PreparedScript.java
+++ b/src/main/java/org/apache/sysds/api/jmlc/PreparedScript.java
@@ -72,7 +72,7 @@ public class PreparedScript implements ConfigurableAPI
        //input/output specification
        private final HashSet<String> _inVarnames;
        private final HashSet<String> _outVarnames;
-       private final HashMap<String,Data> _inVarReuse;
+       private final LocalVariableMap _inVarReuse;
        
        //internal state (reused)
        private final Program _prog;
@@ -91,7 +91,7 @@ public class PreparedScript implements ConfigurableAPI
                _vars.setRegisteredOutputs(that._outVarnames);
                _inVarnames = that._inVarnames;
                _outVarnames = that._outVarnames;
-               _inVarReuse = new HashMap<>(that._inVarReuse);
+               _inVarReuse = new LocalVariableMap(that._inVarReuse);
                _dmlconf = that._dmlconf;
                _cconf = that._cconf;
        }
@@ -115,7 +115,7 @@ public class PreparedScript implements ConfigurableAPI
                Collections.addAll(_inVarnames, inputs);
                _outVarnames = new HashSet<>();
                Collections.addAll(_outVarnames, outputs);
-               _inVarReuse = new HashMap<>();
+               _inVarReuse = new LocalVariableMap();
                
                //attach registered outputs (for dynamic recompile)
                _vars.setRegisteredOutputs(_outVarnames);
@@ -415,7 +415,16 @@ public class PreparedScript implements ConfigurableAPI
        public void clearParameters() {
                _vars.removeAll();
        }
-       
+
+       /**
+        * Remove all references to pinned variables from this script.
+        * Note: this *does not* remove the underlying data. It merely
+        * removes a reference to it from this prepared script. This is
+        * useful if you want to maintain an independent cache of weights
+        * and allow the JVM to garbage collect under memory pressure.
+        */
+       public void clearPinnedData() { _inVarReuse.removeAll(); }
+
        /**
         * Executes the prepared script over the bound inputs, creating the
         * result variables according to bound and registered outputs.
diff --git 
a/src/main/java/org/apache/sysds/runtime/controlprogram/LocalVariableMap.java 
b/src/main/java/org/apache/sysds/runtime/controlprogram/LocalVariableMap.java
index 92eabbd..1ac47b7 100644
--- 
a/src/main/java/org/apache/sysds/runtime/controlprogram/LocalVariableMap.java
+++ 
b/src/main/java/org/apache/sysds/runtime/controlprogram/LocalVariableMap.java
@@ -94,6 +94,10 @@ public class LocalVariableMap implements Cloneable
                localMap.putAll(vals);
        }
 
+       public void putAll(LocalVariableMap vars) {
+               putAll(vars.localMap);
+       }
+
        public Data remove( String name ) {
                return localMap.remove( name );
        }

Reply via email to