import static edu.berkeley.fleet.api.Predicate.*;
import static edu.berkeley.fleet.util.BitManipulations.*;
-
-/*
- - refactor the cleanup into the subclasses of Port (phase1, phase2, etc)
-*/
-
// does peer.recvWord() have to honor the currently-set predicate?
// public class ReplaceModule extends Module { }
vals = mergeSort(fp, fleet, vals, vals_length, stride, mem1, mem2);
// verify the cleanup
- //verifyClean(fp);
+ //CleanupUtils.verifyClean(fp);
Ship mem = mem1; mem1=mem2; mem2=mem;
System.out.println(bvs[i].toLong());
}
- // FIXME: check for "lingering" torpedoes?
- public static void verifyClean(FleetProcess fp) {
- Ship debug = fp.getFleet().getShip("Debug", 0);
- Dock debugIn = debug.getDock("in");
-
- Context ctx;
- LoopFactory lf;
-
- ctx = new Context(fp.getFleet());
- lf = new LoopFactory(ctx, debugIn, 1);
- lf.literal(12);
- lf.deliver();
- lf.literal(5);
- lf.deliver();
- ctx.dispatch(fp);
- fp.flush();
-
- System.out.println("checking debug.in");
- if (fp.recvWord().toLong() != 12) throw new RuntimeException("debug dock not properly initialized");
- if (fp.recvWord().toLong() != 5) throw new RuntimeException("debug dock not properly initialized");
-
- long k = 0;
- for(Ship ship : fp.getFleet())
- if (!"Debug".equals(ship.getType()))
- for (Dock dock : ship) {
- System.out.print("checking " + dock + " ");
-
- k = (k + 23) % 65535;
- ctx = new Context(fp.getFleet());
-
- boolean reverse = (k%2)==0;
-
- lf = new LoopFactory(ctx, debugIn, 4);
- lf.recvToken();
- lf.setFlags(FlagFunction.ZERO.add(FlagC), FlagFunction.ZERO);
- lf.setPredicate(Predicate.NotFlagA);
- lf.literal(k);
- lf.setPredicate(Predicate.FlagA);
- lf.literal(k+1);
- lf.setPredicate(null);
- lf.deliver();
-
- lf = new LoopFactory(ctx, dock, 1);
- lf.sendToken(debugIn.getDataDestination(), new BitVector(1).set(reverse ? 1 : 0));
- lf.sendToken(debugIn.getDataDestination(), new BitVector(1).set(reverse ? 0 : 1));
- lf.sendToken(dock.getDataDestination(), new BitVector(1).set(reverse ? 1 : 0));
- lf.sendToken(dock.getDataDestination(), new BitVector(1).set(reverse ? 0 : 1));
- lf = lf.makeNext(2);
-
- // if a torpedo was lying in wait, the problem will be manifest as a "freezup"
- lf.abortLoopIfTorpedoPresent();
-
- lf.recvToken();
- lf.setFlags(FlagFunction.ZERO.add(FlagC), FlagFunction.ZERO);
- lf.setPredicate(Predicate.NotFlagA);
- lf.sendToken(debugIn.getDataDestination(), new BitVector(1).set(0));
- lf.setPredicate(Predicate.FlagA);
- lf.sendToken(debugIn.getDataDestination(), new BitVector(1).set(1));
- lf.setPredicate(null);
-
- ctx.dispatch(fp);
- fp.flush();
-
- long kk;
- for(int i=0; i<4; i++) {
- kk = fp.recvWord().toLong();
- System.out.print("\rchecking " + dock + " (got "+(i+1)+")");
- if (kk != ((reverse ^ (i%2!=0)) ? k+1 : k)) {
- System.out.println();
- throw new RuntimeException(dock+" not properly initialized ("+(i+1)+")");
- }
- }
- System.out.println();
- }
- }
public static long[] mergeSort(FleetProcess fp, Fleet fleet,
long[] vals, int vals_length, int stride_length,
fp.flush();
//System.out.println("verifying cleanup:");
- //verifyClean(fp);
+ //CleanupUtils.verifyClean(fp);
System.out.println("reading back:");
long[] ret = null;
--- /dev/null
+package edu.berkeley.fleet.loops;
+import edu.berkeley.fleet.loops.*;
+import java.util.concurrent.Semaphore;
+import java.util.*;
+import java.net.*;
+import edu.berkeley.fleet.two.*;
+import edu.berkeley.fleet.fpga.*;
+import edu.berkeley.fleet.api.*;
+import edu.berkeley.fleet.api.Instruction.*;
+import edu.berkeley.fleet.api.Instruction.Set;
+import edu.berkeley.fleet.api.Instruction.Set.*;
+import edu.berkeley.fleet.api.Instruction.Set.SetDest;
+import edu.berkeley.fleet.api.Instruction.Set.FlagFunction;
+import static edu.berkeley.fleet.api.Predicate.*;
+
+public class CleanupUtils {
+
+ public static void verifyClean(FleetProcess fp) {
+ Ship debug = fp.getFleet().getShip("Debug", 0);
+ Dock debugIn = debug.getDock("in");
+
+ Context ctx;
+ LoopFactory lf;
+
+ ctx = new Context(fp.getFleet());
+ lf = new LoopFactory(ctx, debugIn, 1);
+ lf.literal(12);
+ lf.deliver();
+ lf.literal(5);
+ lf.deliver();
+ ctx.dispatch(fp);
+ fp.flush();
+
+ System.out.println("checking debug.in");
+ if (fp.recvWord().toLong() != 12) throw new RuntimeException("debug dock not properly initialized");
+ if (fp.recvWord().toLong() != 5) throw new RuntimeException("debug dock not properly initialized");
+
+ long k = 0;
+ for(Ship ship : fp.getFleet())
+ if (!"Debug".equals(ship.getType()))
+ for (Dock dock : ship) {
+ System.out.print("checking " + dock + " ");
+
+ k = (k + 23) % 65535;
+ ctx = new Context(fp.getFleet());
+
+ boolean reverse = (k%2)==0;
+
+ lf = new LoopFactory(ctx, debugIn, 4);
+ lf.recvToken();
+ lf.setFlags(FlagFunction.ZERO.add(FlagC), FlagFunction.ZERO);
+ lf.setPredicate(Predicate.NotFlagA);
+ lf.literal(k);
+ lf.setPredicate(Predicate.FlagA);
+ lf.literal(k+1);
+ lf.setPredicate(null);
+ lf.deliver();
+
+ lf = new LoopFactory(ctx, dock, 1);
+ lf.sendToken(debugIn.getDataDestination(), new BitVector(1).set(reverse ? 1 : 0));
+ lf.sendToken(debugIn.getDataDestination(), new BitVector(1).set(reverse ? 0 : 1));
+ lf.sendToken(dock.getDataDestination(), new BitVector(1).set(reverse ? 1 : 0));
+ lf.sendToken(dock.getDataDestination(), new BitVector(1).set(reverse ? 0 : 1));
+ lf = lf.makeNext(2);
+
+ // if a torpedo was lying in wait, the problem will be manifest as a "freezup"
+ lf.abortLoopIfTorpedoPresent();
+
+ lf.recvToken();
+ lf.setFlags(FlagFunction.ZERO.add(FlagC), FlagFunction.ZERO);
+ lf.setPredicate(Predicate.NotFlagA);
+ lf.sendToken(debugIn.getDataDestination(), new BitVector(1).set(0));
+ lf.setPredicate(Predicate.FlagA);
+ lf.sendToken(debugIn.getDataDestination(), new BitVector(1).set(1));
+ lf.setPredicate(null);
+
+ ctx.dispatch(fp);
+ fp.flush();
+
+ long kk;
+ for(int i=0; i<4; i++) {
+ kk = fp.recvWord().toLong();
+ System.out.print("\rchecking " + dock + " (got "+(i+1)+")");
+ if (kk != ((reverse ^ (i%2!=0)) ? k+1 : k)) {
+ System.out.println();
+ throw new RuntimeException(dock+" not properly initialized ("+(i+1)+")");
+ }
+ }
+ System.out.println();
+ }
+ }
+
+}