get rid of ugly globals in DataFlowGraph
authormegacz <adam@megacz.com>
Sun, 15 Mar 2009 01:31:08 +0000 (18:31 -0700)
committermegacz <adam@megacz.com>
Sun, 15 Mar 2009 01:31:08 +0000 (18:31 -0700)
13 files changed:
src/edu/berkeley/fleet/dataflow/AluNode.java
src/edu/berkeley/fleet/dataflow/DataFlowGraph.java
src/edu/berkeley/fleet/dataflow/DebugNode.java
src/edu/berkeley/fleet/dataflow/DownCounterNode.java
src/edu/berkeley/fleet/dataflow/ForeverNode.java
src/edu/berkeley/fleet/dataflow/MemoryNode.java
src/edu/berkeley/fleet/dataflow/MergeSort.java
src/edu/berkeley/fleet/dataflow/Node.java
src/edu/berkeley/fleet/dataflow/OnceNode.java
src/edu/berkeley/fleet/dataflow/PunctuatorNode.java
src/edu/berkeley/fleet/dataflow/RepeatNode.java
src/edu/berkeley/fleet/dataflow/SortedMergeNode.java
src/edu/berkeley/fleet/dataflow/UnPunctuatorNode.java

index f6120a3..2ba00cc 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.dataflow;
+import java.util.*;
 import edu.berkeley.fleet.loops.*;
 import edu.berkeley.fleet.api.*;
 
index 7131e87..5419c93 100644 (file)
@@ -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<Node> nodes = new HashSet<Node>();
 
-    public static HashSet<Dock> torpedoes = new HashSet<Dock>();
-
-    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<Dock> 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;
     }
 }
index 01e2442..36f20e9 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.dataflow;
+import java.util.*;
 import edu.berkeley.fleet.loops.*;
 import edu.berkeley.fleet.api.*;
 
index a183af9..fb03f6c 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.dataflow;
+import java.util.*;
 import edu.berkeley.fleet.loops.*;
 import edu.berkeley.fleet.api.*;
 
index 6f66ad0..e801b4f 100644 (file)
@@ -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<Dock> sendTorpedoesTo) { return 0; }
             public void setPeer(InPort peer) {
                 this.peer = peer;
                 DockInPort pip = ((DockInPort)peer);
index cac6391..68414ca 100644 (file)
@@ -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<Dock> 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<Dock> 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<Dock> 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<Dock> sendTorpedoesTo) { return 0; }
             };
         this.outWrite = new DockOutPort("out", ship.getDock("out")) {
                 protected void build(Context ctx, LoopFactory lf) {
index e39e1b7..db2790d 100644 (file)
@@ -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<Dock> sendTorpedoesTo = new HashSet<Dock>();
+            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");
index 383121e..640d488 100644 (file)
@@ -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<Dock> 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<Dock> 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<Dock> sendTorpedoesTo);
     }
 
     public abstract class InPort extends Port {
@@ -183,8 +184,8 @@ public class Node {
             for(int i=0; i<pattern.length; i++) if (pattern[i]==null) return true;
             return false;
         }
-        public int reset(Context ctx, int phase, Destination ackDestination) {
-            return doReset(ctx, phase, dock, peer, ackDestination, peerUsed());
+        public int reset(Context ctx, int phase, Destination ackDestination, HashSet<Dock> 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<Dock> sendTorpedoesTo) {
+            return doReset(ctx, phase, dock, peer, ackDestination, sendTorpedoesTo, true);
         }
     }
 
index 0476804..1a95654 100644 (file)
@@ -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<Dock> sendTorpedoesTo) { return 0; }
             public void setPeer(InPort peer) {
                 this.peer = peer;
                 DockInPort pip = ((DockInPort)peer);
index da79084..aff99fd 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.dataflow;
+import java.util.*;
 import edu.berkeley.fleet.loops.*;
 import edu.berkeley.fleet.api.*;
 
index 7e9ae34..7edf678 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.dataflow;
+import java.util.*;
 import edu.berkeley.fleet.loops.*;
 import edu.berkeley.fleet.api.*;
 
index 4a6bea7..eade9c7 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.dataflow;
+import java.util.*;
 import edu.berkeley.fleet.loops.*;
 import edu.berkeley.fleet.api.*;
 
index 3c72907..be74d60 100644 (file)
@@ -1,4 +1,5 @@
 package edu.berkeley.fleet.dataflow;
+import java.util.*;
 import edu.berkeley.fleet.loops.*;
 import edu.berkeley.fleet.api.*;