From b7f956452aaa73a9e716b01d4dac099f9737936c Mon Sep 17 00:00:00 2001 From: megacz Date: Sat, 14 Mar 2009 16:56:13 -0700 Subject: [PATCH] move verifyClean into CleanupUtils --- src/edu/berkeley/fleet/ir/Process.java | 84 +-------------------- src/edu/berkeley/fleet/loops/CleanupUtils.java | 93 ++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 82 deletions(-) create mode 100644 src/edu/berkeley/fleet/loops/CleanupUtils.java diff --git a/src/edu/berkeley/fleet/ir/Process.java b/src/edu/berkeley/fleet/ir/Process.java index bd5b977..0378fd3 100644 --- a/src/edu/berkeley/fleet/ir/Process.java +++ b/src/edu/berkeley/fleet/ir/Process.java @@ -12,11 +12,6 @@ import edu.berkeley.fleet.api.Instruction.Set.*; 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 { } @@ -551,7 +546,7 @@ public class Process { 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; @@ -566,81 +561,6 @@ public class Process { 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, @@ -789,7 +709,7 @@ public class Process { fp.flush(); //System.out.println("verifying cleanup:"); - //verifyClean(fp); + //CleanupUtils.verifyClean(fp); System.out.println("reading back:"); long[] ret = null; diff --git a/src/edu/berkeley/fleet/loops/CleanupUtils.java b/src/edu/berkeley/fleet/loops/CleanupUtils.java new file mode 100644 index 0000000..dddac8a --- /dev/null +++ b/src/edu/berkeley/fleet/loops/CleanupUtils.java @@ -0,0 +1,93 @@ +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(); + } + } + +} -- 1.7.10.4