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

arnabp20 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 964134b281 [MINOR] Add a flag for disabling multi-backend reuse
964134b281 is described below

commit 964134b281fa69cbeb4b6fc340dc2962c5fd0f60
Author: Arnab Phani <[email protected]>
AuthorDate: Wed Mar 20 13:49:40 2024 +0100

    [MINOR] Add a flag for disabling multi-backend reuse
    
    This patch adds a flag to disable/enable multi-backend lineage-based
    reuse (default enabled). This allows running experiments to compare
    multi-backend reuse with standalone in-memory reuse.
---
 .../apache/sysds/runtime/lineage/LineageCache.java   | 20 +++++++++++++++++++-
 .../sysds/runtime/lineage/LineageCacheConfig.java    |  6 ++++++
 .../runtime/lineage/LineageGPUCacheEviction.java     |  1 +
 .../test/functions/lineage/GPUFullReuseTest.java     |  2 +-
 4 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java 
b/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java
index dcb67d81ed..e5fc9be938 100644
--- a/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java
+++ b/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java
@@ -297,7 +297,6 @@ public class LineageCache
                                        if (e.getCacheStatus() == 
LineageCacheStatus.TOCACHE)  //not cached yet
                                                return false;
                                }
-                               //TODO: support reusing RDD output of functions
 
                                funcOutputs.put(boundVarName, boundValue);
                                LineageItem orig = e._origItem;
@@ -638,6 +637,12 @@ public class LineageCache
                        }
                        else if (inst instanceof GPUInstruction) {
                                // TODO: gpu multi-return instructions
+                               if (!LineageCacheConfig.isMultiBackendReuse()) {
+                                       // Multi-backend reuse is disabled
+                                       instLI = 
ec.getLineageItem(((GPUInstruction) inst)._output);
+                                       removePlaceholder(instLI);
+                                       return;
+                               }
                                Data gpudata = ec.getVariable(((GPUInstruction) 
inst)._output);
                                liGPUObj = gpudata instanceof MatrixObject ?
                                                
ec.getMatrixObject(((GPUInstruction)inst)._output).
@@ -653,6 +658,11 @@ public class LineageCache
                                && (ec.getVariable(((ComputationSPInstruction) 
inst).output) instanceof MatrixObject)
                                && 
(ec.getCacheableData(((ComputationSPInstruction)inst).output.getName())).hasRDDHandle())
 {
                                instLI = 
ec.getLineageItem(((ComputationSPInstruction) inst).output);
+                               if (!LineageCacheConfig.isMultiBackendReuse()) {
+                                       // Multi-backend reuse is disabled
+                                       removePlaceholder(instLI);
+                                       return;
+                               }
                                putValueRDD(inst, instLI, ec, computetime);
                                return;
                        }
@@ -667,6 +677,11 @@ public class LineageCache
                                }
                                else if (inst instanceof 
ComputationSPInstruction) { //collects or prefetches
                                        instLI = 
ec.getLineageItem(((ComputationSPInstruction) inst).output);
+                                       if 
(!LineageCacheConfig.isMultiBackendReuse()) {
+                                               // Multi-backend reuse is 
disabled
+                                               removePlaceholder(instLI);
+                                               return;
+                                       }
                                        liData = Arrays.asList(Pair.of(instLI, 
ec.getVariable(((ComputationSPInstruction) inst).output)));
                                }
 
@@ -856,6 +871,9 @@ public class LineageCache
                if(!(data instanceof MatrixObject) && !(data instanceof 
ScalarObject)) {
                        return;
                }
+               // No async. OP reuse if multi-backend reuse is disabled
+               if (!LineageCacheConfig.isMultiBackendReuse())
+                       return;
 
                synchronized( _cache )
                {
diff --git 
a/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheConfig.java 
b/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheConfig.java
index e64b519c42..53f517c058 100644
--- a/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheConfig.java
+++ b/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheConfig.java
@@ -124,6 +124,8 @@ public class LineageCacheConfig
        private static boolean DELAYED_CACHING_GPU = true;
        private static boolean DELAYED_CACHING_RDD = true;
 
+       private static boolean MULTI_BACKEND_REUSE = true;
+
        //-------------DISK SPILLING RELATED CONFIGURATIONS--------------//
 
        //private static boolean _allowSpill = false;
@@ -402,6 +404,10 @@ public class LineageCacheConfig
                return _reuseLineageTraces;
        }
 
+       public static boolean isMultiBackendReuse() {
+               return MULTI_BACKEND_REUSE;
+       }
+
        public static boolean isDelayedCaching() {
                return DELAYED_CACHING;
        }
diff --git 
a/src/main/java/org/apache/sysds/runtime/lineage/LineageGPUCacheEviction.java 
b/src/main/java/org/apache/sysds/runtime/lineage/LineageGPUCacheEviction.java
index 5497210999..c34abd2a25 100644
--- 
a/src/main/java/org/apache/sysds/runtime/lineage/LineageGPUCacheEviction.java
+++ 
b/src/main/java/org/apache/sysds/runtime/lineage/LineageGPUCacheEviction.java
@@ -133,6 +133,7 @@ public class LineageGPUCacheEviction
 
        // Speculative eviction
        public static void removeAllEntries(double evictFrac) {
+               //System.out.println("Removing all entries from GPU cache");
                List<Long> sizes = new ArrayList<>(freeQueues.keySet());
                for (Long size : sizes) {
                        TreeSet<LineageCacheEntry> freeList = 
freeQueues.get(size);
diff --git 
a/src/test/java/org/apache/sysds/test/functions/lineage/GPUFullReuseTest.java 
b/src/test/java/org/apache/sysds/test/functions/lineage/GPUFullReuseTest.java
index 47bfd8c4e8..74bd7fc47d 100644
--- 
a/src/test/java/org/apache/sysds/test/functions/lineage/GPUFullReuseTest.java
+++ 
b/src/test/java/org/apache/sysds/test/functions/lineage/GPUFullReuseTest.java
@@ -85,7 +85,7 @@ public class GPUFullReuseTest extends AutomatedTestBase{
 
                AutomatedTestBase.TEST_GPU = true;  //adds '-gpu'
                List<String> proArgs = new ArrayList<>();
-               proArgs.add("-explain");
+               //proArgs.add("-explain");
                proArgs.add("-stats");
                proArgs.add("-args");
                proArgs.add(output("R"));

Reply via email to