From 6ddaa0fe1dff78c69bce02fec215c9261715188c Mon Sep 17 00:00:00 2001 From: megacz Date: Sat, 14 Mar 2009 18:31:08 -0700 Subject: [PATCH] get rid of ugly globals in DataFlowGraph --- src/edu/berkeley/fleet/dataflow/AluNode.java | 1 + src/edu/berkeley/fleet/dataflow/DataFlowGraph.java | 25 ++++---------------- src/edu/berkeley/fleet/dataflow/DebugNode.java | 1 + .../berkeley/fleet/dataflow/DownCounterNode.java | 1 + src/edu/berkeley/fleet/dataflow/ForeverNode.java | 3 ++- src/edu/berkeley/fleet/dataflow/MemoryNode.java | 11 +++++---- src/edu/berkeley/fleet/dataflow/MergeSort.java | 6 +++-- src/edu/berkeley/fleet/dataflow/Node.java | 25 ++++++++++---------- src/edu/berkeley/fleet/dataflow/OnceNode.java | 3 ++- .../berkeley/fleet/dataflow/PunctuatorNode.java | 1 + src/edu/berkeley/fleet/dataflow/RepeatNode.java | 1 + .../berkeley/fleet/dataflow/SortedMergeNode.java | 1 + .../berkeley/fleet/dataflow/UnPunctuatorNode.java | 1 + 13 files changed, 39 insertions(+), 41 deletions(-) diff --git a/src/edu/berkeley/fleet/dataflow/AluNode.java b/src/edu/berkeley/fleet/dataflow/AluNode.java index f6120a3..2ba00cc 100644 --- a/src/edu/berkeley/fleet/dataflow/AluNode.java +++ b/src/edu/berkeley/fleet/dataflow/AluNode.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; diff --git a/src/edu/berkeley/fleet/dataflow/DataFlowGraph.java b/src/edu/berkeley/fleet/dataflow/DataFlowGraph.java index 7131e87..5419c93 100644 --- a/src/edu/berkeley/fleet/dataflow/DataFlowGraph.java +++ b/src/edu/berkeley/fleet/dataflow/DataFlowGraph.java @@ -1,24 +1,14 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; -import java.util.concurrent.Semaphore; +import edu.berkeley.fleet.api.*; import java.util.*; import java.net.*; -import edu.berkeley.fleet.two.*; -import edu.berkeley.fleet.api.*; -import edu.berkeley.fleet.fpga.*; -import edu.berkeley.fleet.api.Instruction.*; -import edu.berkeley.fleet.api.Instruction.Set; -import edu.berkeley.fleet.api.Instruction.Set.*; -import static edu.berkeley.fleet.api.Predicate.*; -import static edu.berkeley.fleet.util.BitManipulations.*; - -// does peer.recvWord() have to honor the currently-set predicate? // public class ReplaceNode extends Node { } // public class CountMergeNode extends Node { } // public class SortMergeNode extends Node { } // public class FanOutNode extends Node { } -// public class MemoryNode extends Node { } // public class DoneNode extends Node { } public class DataFlowGraph { @@ -27,11 +17,7 @@ public class DataFlowGraph { public final ShipPool pool; private HashSet nodes = new HashSet(); - public static HashSet torpedoes = new HashSet(); - - public DataFlowGraph(Fleet fleet) { - this(fleet, new ShipPool(fleet)); - } + public DataFlowGraph(Fleet fleet) { this(fleet, new ShipPool(fleet)); } public DataFlowGraph(Fleet fleet, ShipPool pool) { this.fleet = fleet; this.pool = pool; @@ -43,11 +29,10 @@ public class DataFlowGraph { for(Node mod : nodes) mod.build(ctx); } - public int reset(Context ctx, int phase, Destination ackDestination) { + public int reset(Context ctx, int phase, Destination ackDestination, HashSet sendTorpedoesTo) { int ret = 0; - torpedoes.clear(); for(Node mod : nodes) - ret += mod.reset(ctx, phase, ackDestination); + ret += mod.reset(ctx, phase, ackDestination, sendTorpedoesTo); return ret; } } diff --git a/src/edu/berkeley/fleet/dataflow/DebugNode.java b/src/edu/berkeley/fleet/dataflow/DebugNode.java index 01e2442..36f20e9 100644 --- a/src/edu/berkeley/fleet/dataflow/DebugNode.java +++ b/src/edu/berkeley/fleet/dataflow/DebugNode.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; diff --git a/src/edu/berkeley/fleet/dataflow/DownCounterNode.java b/src/edu/berkeley/fleet/dataflow/DownCounterNode.java index a183af9..fb03f6c 100644 --- a/src/edu/berkeley/fleet/dataflow/DownCounterNode.java +++ b/src/edu/berkeley/fleet/dataflow/DownCounterNode.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; diff --git a/src/edu/berkeley/fleet/dataflow/ForeverNode.java b/src/edu/berkeley/fleet/dataflow/ForeverNode.java index 6f66ad0..e801b4f 100644 --- a/src/edu/berkeley/fleet/dataflow/ForeverNode.java +++ b/src/edu/berkeley/fleet/dataflow/ForeverNode.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; @@ -14,7 +15,7 @@ public class ForeverNode extends Node { public void sendToken(LoopFactory lf) { } public void recvWord(LoopFactory lf) { } public void build(Context ctx) { } - public int reset(Context ctx, int phase, Destination ackDestination) { return 0; } + public int reset(Context ctx, int phase, Destination ackDestination, HashSet sendTorpedoesTo) { return 0; } public void setPeer(InPort peer) { this.peer = peer; DockInPort pip = ((DockInPort)peer); diff --git a/src/edu/berkeley/fleet/dataflow/MemoryNode.java b/src/edu/berkeley/fleet/dataflow/MemoryNode.java index cac6391..68414ca 100644 --- a/src/edu/berkeley/fleet/dataflow/MemoryNode.java +++ b/src/edu/berkeley/fleet/dataflow/MemoryNode.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; import edu.berkeley.fleet.api.Instruction.*; @@ -28,8 +29,8 @@ public class MemoryNode extends Node { public void sendWord(LoopFactory lf) { lf.sendWord(ship.getDock("inAddrRead").getDataDestination(), new BitVector(1).set(0)); } public void build(Context ctx) { } public int getTokensToAbsorb() { return outRead1.peer.getTokensToAbsorb(); } - public int reset(Context ctx, int phase, Destination ackDestination) { - return doReset(ctx, phase, ship.getDock("inAddrRead"), null, ackDestination, false); + public int reset(Context ctx, int phase, Destination ackDestination, HashSet sendTorpedoesTo) { + return doReset(ctx, phase, ship.getDock("inAddrRead"), null, ackDestination, sendTorpedoesTo, false); } }; this.inAddrRead2 = new InPort("inAddrRead2") { @@ -37,19 +38,19 @@ public class MemoryNode extends Node { public void sendWord(LoopFactory lf) { lf.sendWord(ship.getDock("inAddrRead").getDataDestination(), new BitVector(1).set(1)); } public void build(Context ctx) { } public int getTokensToAbsorb() { return outRead2.peer.getTokensToAbsorb(); } - public int reset(Context ctx, int phase, Destination ackDestination) { return 0; } + public int reset(Context ctx, int phase, Destination ackDestination, HashSet sendTorpedoesTo) { return 0; } }; this.outRead1 = new OutPort("outRead1") { public void sendToken(LoopFactory lf) { inAddrRead1.peer.sendToken(lf); } public void recvWord(LoopFactory lf) { lf.recvWord(); } public void build(Context ctx) { } - public int reset(Context ctx, int phase, Destination ackDestination) { return 0; } + public int reset(Context ctx, int phase, Destination ackDestination, HashSet sendTorpedoesTo) { return 0; } }; this.outRead2 = new OutPort("outRead2") { public void sendToken(LoopFactory lf) { inAddrRead2.peer.sendToken(lf); } public void recvWord(LoopFactory lf) { lf.recvWord(); } public void build(Context ctx) { } - public int reset(Context ctx, int phase, Destination ackDestination) { return 0; } + public int reset(Context ctx, int phase, Destination ackDestination, HashSet sendTorpedoesTo) { return 0; } }; this.outWrite = new DockOutPort("out", ship.getDock("out")) { protected void build(Context ctx, LoopFactory lf) { diff --git a/src/edu/berkeley/fleet/dataflow/MergeSort.java b/src/edu/berkeley/fleet/dataflow/MergeSort.java index e39e1b7..db2790d 100644 --- a/src/edu/berkeley/fleet/dataflow/MergeSort.java +++ b/src/edu/berkeley/fleet/dataflow/MergeSort.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; import edu.berkeley.fleet.fpga.*; @@ -114,7 +115,8 @@ public class MergeSort { ctx2 = new Context(fp.getFleet()); Destination ackDestination = counter.getDock("in2").getDataDestination(); - int expected_tokens = proc.reset(ctx2, phase, ackDestination); + HashSet sendTorpedoesTo = new HashSet(); + int expected_tokens = proc.reset(ctx2, phase, ackDestination, sendTorpedoesTo); Context ctx3 = new Context(fp.getFleet()); lf = new LoopFactory(ctx3, counter.getDock("inOp"), 1); @@ -137,7 +139,7 @@ public class MergeSort { lf.sendToken(debugIn.getDataDestination()); ctx3.dispatch(fp); // HACK: we don't check to make sure that this is "firmly in place" - for(Dock dock : DataFlowGraph.torpedoes) fp.sendToken(dock.getInstructionDestination()); + for(Dock dock : sendTorpedoesTo) fp.sendToken(dock.getInstructionDestination()); ctx2.dispatch(fp); fp.flush(); System.out.println("flushed"); diff --git a/src/edu/berkeley/fleet/dataflow/Node.java b/src/edu/berkeley/fleet/dataflow/Node.java index 383121e..640d488 100644 --- a/src/edu/berkeley/fleet/dataflow/Node.java +++ b/src/edu/berkeley/fleet/dataflow/Node.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import java.util.concurrent.Semaphore; import java.util.*; @@ -14,7 +15,7 @@ import static edu.berkeley.fleet.util.BitManipulations.*; public class Node { - int doReset(Context ctx, int phase, Dock dock, Port peer, Destination ackDestination, boolean peerUsed) { + int doReset(Context ctx, int phase, Dock dock, Port peer, Destination ackDestination, HashSet sendTorpedoesTo, boolean peerUsed) { int ret = 0; if (dock.getShip().getType().equals("Debug")) return ret; @@ -29,7 +30,7 @@ public class Node { // the switch fabric. case 0: { if (!dock.isInputDock()) { - DataFlowGraph.torpedoes.add(dock); + sendTorpedoesTo.add(dock); LoopFactory lf = new LoopFactory(ctx, dock, 1); lf.sendToken(ackDestination); lf = lf.makeNext(0); @@ -43,7 +44,7 @@ public class Node { // Phase 1: torpedo every input dock, put it in loopback mode case 1: { if (dock.isInputDock()) { - DataFlowGraph.torpedoes.add(dock); + sendTorpedoesTo.add(dock); LoopFactory lf = new LoopFactory(ctx, dock, 1); lf.sendToken(ackDestination); @@ -65,7 +66,7 @@ public class Node { // Phase 2: torpedo every output dock, have it absorb tokens case 2: { if (!dock.isInputDock()) { - DataFlowGraph.torpedoes.add(dock); + sendTorpedoesTo.add(dock); LoopFactory lf = new LoopFactory(ctx, dock, 1); if (peer != null) for(int i=0; i<((InPort)peer).getTokensToAbsorb(); i++) @@ -80,7 +81,7 @@ public class Node { case 3: { if (dock.isInputDock()) { if (peerUsed && peer!=null) { - DataFlowGraph.torpedoes.add(dock); + sendTorpedoesTo.add(dock); } LoopFactory lf = new LoopFactory(ctx, dock, 1); lf.sendToken(ackDestination); @@ -104,9 +105,9 @@ public class Node { public OutPort getOutPort(String name) { return (OutPort)ports.get(name); } public void build(Context ctx) { for(Port p : ports.values()) p.build(ctx); } - public int reset(Context ctx, int phase, Destination ackDestination) { + public int reset(Context ctx, int phase, Destination ackDestination, HashSet sendTorpedoesTo) { int ret = 0; - for(Port p : ports.values()) ret += p.reset(ctx, phase, ackDestination); + for(Port p : ports.values()) ret += p.reset(ctx, phase, ackDestination, sendTorpedoesTo); return ret; } @@ -118,7 +119,7 @@ public class Node { Node.this.ports.put(name,this); } public abstract void build(Context ctx); - public abstract int reset(Context ctx, int phase, Destination ackDestination); + public abstract int reset(Context ctx, int phase, Destination ackDestination, HashSet sendTorpedoesTo); } public abstract class InPort extends Port { @@ -183,8 +184,8 @@ public class Node { for(int i=0; i sendTorpedoesTo) { + return doReset(ctx, phase, dock, peer, ackDestination, sendTorpedoesTo, peerUsed()); } protected void build(Context ctx, LoopFactory lf) { int inflight = (count != 0 && count < getInflight()) ? count : getInflight(); @@ -237,8 +238,8 @@ public class Node { lf.collectWord(); peer.sendWord(lf); } - public int reset(Context ctx, int phase, Destination ackDestination) { - return doReset(ctx, phase, dock, peer, ackDestination, true); + public int reset(Context ctx, int phase, Destination ackDestination, HashSet sendTorpedoesTo) { + return doReset(ctx, phase, dock, peer, ackDestination, sendTorpedoesTo, true); } } diff --git a/src/edu/berkeley/fleet/dataflow/OnceNode.java b/src/edu/berkeley/fleet/dataflow/OnceNode.java index 0476804..1a95654 100644 --- a/src/edu/berkeley/fleet/dataflow/OnceNode.java +++ b/src/edu/berkeley/fleet/dataflow/OnceNode.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; @@ -8,7 +9,7 @@ public class OnceNode extends Node { public void sendToken(LoopFactory lf) { } public void recvWord(LoopFactory lf) { } public void build(Context ctx) { } - public int reset(Context ctx, int phase, Destination ackDestination) { return 0; } + public int reset(Context ctx, int phase, Destination ackDestination, HashSet sendTorpedoesTo) { return 0; } public void setPeer(InPort peer) { this.peer = peer; DockInPort pip = ((DockInPort)peer); diff --git a/src/edu/berkeley/fleet/dataflow/PunctuatorNode.java b/src/edu/berkeley/fleet/dataflow/PunctuatorNode.java index da79084..aff99fd 100644 --- a/src/edu/berkeley/fleet/dataflow/PunctuatorNode.java +++ b/src/edu/berkeley/fleet/dataflow/PunctuatorNode.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; diff --git a/src/edu/berkeley/fleet/dataflow/RepeatNode.java b/src/edu/berkeley/fleet/dataflow/RepeatNode.java index 7e9ae34..7edf678 100644 --- a/src/edu/berkeley/fleet/dataflow/RepeatNode.java +++ b/src/edu/berkeley/fleet/dataflow/RepeatNode.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; diff --git a/src/edu/berkeley/fleet/dataflow/SortedMergeNode.java b/src/edu/berkeley/fleet/dataflow/SortedMergeNode.java index 4a6bea7..eade9c7 100644 --- a/src/edu/berkeley/fleet/dataflow/SortedMergeNode.java +++ b/src/edu/berkeley/fleet/dataflow/SortedMergeNode.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; diff --git a/src/edu/berkeley/fleet/dataflow/UnPunctuatorNode.java b/src/edu/berkeley/fleet/dataflow/UnPunctuatorNode.java index 3c72907..be74d60 100644 --- a/src/edu/berkeley/fleet/dataflow/UnPunctuatorNode.java +++ b/src/edu/berkeley/fleet/dataflow/UnPunctuatorNode.java @@ -1,4 +1,5 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; -- 1.7.10.4