This is an automated email from the ASF dual-hosted git repository.
mboehm7 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 eafd5094e7 [MINOR] Improved mvvar instruction general (del unnecessary
rmvar)
eafd5094e7 is described below
commit eafd5094e7f3c0d3fbeb4cef454249627baf5618
Author: Matthias Boehm <[email protected]>
AuthorDate: Sun Jul 2 21:47:20 2023 +0200
[MINOR] Improved mvvar instruction general (del unnecessary rmvar)
This patch extends the existing cleanup pass for mvvar instruction
generation. When compiling loops such as "for(i in 1:n) A+=i" the
generated program blocks improved from
----FOR (lines 0-0)
------CP assignvar 1.SCALAR.INT64.true __pred.SCALAR.INT64
------CP assignvar 1000000.0.SCALAR.FP64.true __pred.SCALAR.FP64
------CP assignvar 1.SCALAR.INT64.true __pred.SCALAR.INT64
------GENERIC (lines 3-3) [recompile=false]
--------CP createvar _mVar1 ...1 true MATRIX binary 10 10 1000 -1 copy
--------CP + X.MATRIX.FP64 i.SCALAR.INT64.false _mVar1.MATRIX.FP64 8
--------CP rmvar X
--------CP mvvar _mVar1 X
------CP rmvar i
to
----FOR (lines 0-0)
------CP assignvar 1.SCALAR.INT64.true __pred.SCALAR.INT64
------CP assignvar 1000000.0.SCALAR.FP64.true __pred.SCALAR.FP64
------CP assignvar 1.SCALAR.INT64.true __pred.SCALAR.INT64
------GENERIC (lines 3-3) [recompile=false]
--------CP createvar _mVar1 ...1 true MATRIX binary 10 10 1000 -1 copy
--------CP + X.MATRIX.FP64 i.SCALAR.INT64.false _mVar1.MATRIX.FP64 8
--------CP mvvar _mVar1 X
------CP rmvar i
---
src/main/java/org/apache/sysds/lops/compile/Dag.java | 11 ++++++++++-
.../sysds/runtime/instructions/cp/VariableCPInstruction.java | 4 ++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/apache/sysds/lops/compile/Dag.java
b/src/main/java/org/apache/sysds/lops/compile/Dag.java
index 260d8484a4..e96cbd9d78 100644
--- a/src/main/java/org/apache/sysds/lops/compile/Dag.java
+++ b/src/main/java/org/apache/sysds/lops/compile/Dag.java
@@ -1027,7 +1027,8 @@ public class Dag<N extends Lop>
*/
private static ArrayList<Instruction>
cleanupInstructions(List<Instruction> insts) {
//step 1: create mvvar instructions: assignvar s1 s2, rmvar s1
-> mvvar s1 s2,
- // cpvar m1 m2, rmvar m1 -->
mvvar m1 m2
+ // cpvar m1 m2, rmvar m1 -->
mvvar m1 m2
+ // rmvar m2, mvvar m1 m2 ->
mvvar m1 m2
List<Instruction> tmp1 =
collapseAssignvarAndRmvarInstructions(insts);
//step 2: create packed rmvar instructions: rmvar m1, rmvar m2
-> rmvar m1 m2
@@ -1049,6 +1050,14 @@ public class Dag<N extends Lop>
&&
((VariableCPInstruction)inst2).isRemoveVariableNoFile()
&& inst1.getInput1().getName().equals(
((VariableCPInstruction)inst2).getInput1().getName()) ) {
+ //remove unnecessary rmvar before mvvar
+ Instruction last =
ret.get(ret.size()-1);
+ if( last instanceof
VariableCPInstruction
+ &&
((VariableCPInstruction)last).isRemoveVariableNoFile()
+ &&
((VariableCPInstruction)last).getInputs().size() == 1
+ &&
((VariableCPInstruction)last).getInput1().getName().equals(inst1.getInput2().getName()))
+ ret.remove(ret.size()-1);
+ //add fused mvvar instruction
ret.add(VariableCPInstruction.prepMoveInstruction(
inst1.getInput1().getName(),
inst1.getInput2().getName()));
}
diff --git
a/src/main/java/org/apache/sysds/runtime/instructions/cp/VariableCPInstruction.java
b/src/main/java/org/apache/sysds/runtime/instructions/cp/VariableCPInstruction.java
index 3237a6c591..8bec222b0d 100644
---
a/src/main/java/org/apache/sysds/runtime/instructions/cp/VariableCPInstruction.java
+++
b/src/main/java/org/apache/sysds/runtime/instructions/cp/VariableCPInstruction.java
@@ -259,6 +259,10 @@ public class VariableCPInstruction extends CPInstruction
implements LineageTrace
return opcode == VariableOperationCode.RemoveVariable
|| opcode ==
VariableOperationCode.RemoveVariableAndFile;
}
+
+ public boolean isMoveVariable() {
+ return opcode == VariableOperationCode.MoveVariable;
+ }
public boolean isAssignVariable() {
return opcode == VariableOperationCode.AssignVariable;