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"));