From c5c26ddb05dc4f492da8d5c69b1accd3cdee3d99 Mon Sep 17 00:00:00 2001 From: yeom Date: Fri, 19 Nov 2010 01:47:39 +0000 Subject: [PATCH] adds new option '-nostalltr' that turns off rcr traversers that only handle conflicts between task and stallsite --- .../src/Analysis/OoOJava/ConflictGraph.java | 4 +++ Robust/src/Analysis/OoOJava/ConflictNode.java | 31 ++++++++++++++++++- Robust/src/Benchmarks/oooJava/master-makefile | 4 +-- .../oooJava/moldyn/JGFMolDynBench.java | 8 ++--- Robust/src/Benchmarks/oooJava/moldyn/makefile | 2 ++ Robust/src/Benchmarks/oooJava/moldyn/runr | 2 +- Robust/src/Benchmarks/oooJava/sor/makefile | 2 +- Robust/src/IR/Flat/BuildCode.java | 2 +- .../src/IR/Flat/RuntimeConflictResolver.java | 22 +++++++++++-- Robust/src/IR/State.java | 1 + Robust/src/Main/Main.java | 6 ++-- Robust/src/buildscript | 5 +++ 12 files changed, 74 insertions(+), 15 deletions(-) diff --git a/Robust/src/Analysis/OoOJava/ConflictGraph.java b/Robust/src/Analysis/OoOJava/ConflictGraph.java index d3f47c86..75304f40 100644 --- a/Robust/src/Analysis/OoOJava/ConflictGraph.java +++ b/Robust/src/Analysis/OoOJava/ConflictGraph.java @@ -802,5 +802,9 @@ public class ConflictGraph { bw.close(); } + + public Hashtable getId2cn() { + return id2cn; + } } diff --git a/Robust/src/Analysis/OoOJava/ConflictNode.java b/Robust/src/Analysis/OoOJava/ConflictNode.java index c0f14a83..932d7ed9 100644 --- a/Robust/src/Analysis/OoOJava/ConflictNode.java +++ b/Robust/src/Analysis/OoOJava/ConflictNode.java @@ -39,7 +39,7 @@ public class ConflictNode { public static final int INVAR = 0; public static final int STALLSITE = 1; - + public ConflictNode(String id, int nodeType, TempDescriptor var, FlatNode stallSite) { this(id, var, nodeType); this.stallSite = stallSite; @@ -222,5 +222,34 @@ public class ConflictNode { public String toString() { return id; } + + public boolean IsValidToPrune() { + + for (Iterator iterator = edgeSet.iterator(); iterator.hasNext();) { + ConflictEdge edge = (ConflictEdge) iterator.next(); + + if (edge.getVertexU() == edge.getVertexV()) { + // self-conflict, need to generate traverser + return false; + } else { + + if (edge.getVertexU() == this) { + if (edge.getVertexV().isInVarNode()) { + // has a conflict with invar, need to generate traverser + return false; + } + } else { + if (edge.getVertexU().isInVarNode()) { + // has a conflict with invar, need to generate traverser + return false; + } + } + + } + + } + return true; + } + } diff --git a/Robust/src/Benchmarks/oooJava/master-makefile b/Robust/src/Benchmarks/oooJava/master-makefile index 38dd565b..000c9c74 100644 --- a/Robust/src/Benchmarks/oooJava/master-makefile +++ b/Robust/src/Benchmarks/oooJava/master-makefile @@ -43,7 +43,7 @@ default: $(BUILDSCRIPT) -nojava $(BSFLAGS) $(USECOREPROF) $(USEOOO) $(DISJOINT) -o $(PROGRAM)p -builddir par $(SOURCE_FILES) rcr-remake-c: - $(BUILDSCRIPT) -nojava $(COREPINFLAG) $(BSFLAGS) $(USECOREPROF) $(USERCR) $(DISJOINT) -o $(PROGRAM)r -builddir rcr $(SOURCE_FILES) + $(BUILDSCRIPT) -nojava $(BMFLAGS) $(BSFLAGS) $(USECOREPROF) $(USERCR) $(DISJOINT) -o $(PROGRAM)r -builddir rcr $(SOURCE_FILES) single: $(PROGRAM)s.bin @@ -59,7 +59,7 @@ $(PROGRAM)p.bin: $(SOURCE_FILES) ../master-makefile rcr: $(PROGRAM)r.bin $(PROGRAM)r.bin: $(SOURCE_FILES) ../master-makefile - $(BUILDSCRIPT) $(COREPINFLAG) $(BSFLAGS) $(USECOREPROF) $(USERCR) $(DISJOINT) -o $(PROGRAM)r -builddir rcr $(SOURCE_FILES) + $(BUILDSCRIPT) $(BMFLAGS) $(BSFLAGS) $(USECOREPROF) $(USERCR) $(DISJOINT) -o $(PROGRAM)r -builddir rcr $(SOURCE_FILES) clean: rm -f $(PROGRAM)p.bin $(PROGRAM)s.bin $(PROGRAM)r.bin diff --git a/Robust/src/Benchmarks/oooJava/moldyn/JGFMolDynBench.java b/Robust/src/Benchmarks/oooJava/moldyn/JGFMolDynBench.java index 5f3b0946..b45112b6 100644 --- a/Robust/src/Benchmarks/oooJava/moldyn/JGFMolDynBench.java +++ b/Robust/src/Benchmarks/oooJava/moldyn/JGFMolDynBench.java @@ -77,20 +77,18 @@ public class JGFMolDynBench { // spawn threads MDWrap[] thobjects = new MDWrap[numthreads]; - for (int i = 0; i < numthreads; i++) { thobjects[i] = new MDWrap(new mdRunner(i, mold.mm, sh_force, sh_force2, mold.nthreads, mold,mold.workload)); } - /* * boolean waitfordone=true; while(waitfordone) { if (mybarr.done) * waitfordone=false; } */ long start=System.currentTimeMillis(); - for (int i = 0; i < numthreads; i++) { +// for (int i = 0; i < numthreads; i++) { // thobjects[i].md.start(mid[i]); - thobjects[i].md.run(); - } + thobjects[0].md.run(); +// } long end=System.currentTimeMillis(); // System.out.println("Total="+(end-start)); } diff --git a/Robust/src/Benchmarks/oooJava/moldyn/makefile b/Robust/src/Benchmarks/oooJava/moldyn/makefile index f7bd7d53..69837e1d 100644 --- a/Robust/src/Benchmarks/oooJava/moldyn/makefile +++ b/Robust/src/Benchmarks/oooJava/moldyn/makefile @@ -5,4 +5,6 @@ SOURCE_FILES=JGFMolDynBenchSizeB.java NUM_OOO_WORKERS=24 NUM_RCR_WORKERS=23 +BMFLAGS=-nostalltr + include ../master-makefile diff --git a/Robust/src/Benchmarks/oooJava/moldyn/runr b/Robust/src/Benchmarks/oooJava/moldyn/runr index 4585b241..ca764f31 100755 --- a/Robust/src/Benchmarks/oooJava/moldyn/runr +++ b/Robust/src/Benchmarks/oooJava/moldyn/runr @@ -1 +1 @@ -time ./JGFMolDynBenchSizeBr.bin 1 128 +time ./JGFMolDynBenchSizeBr.bin 1 215 diff --git a/Robust/src/Benchmarks/oooJava/sor/makefile b/Robust/src/Benchmarks/oooJava/sor/makefile index 81f32ad6..98026455 100644 --- a/Robust/src/Benchmarks/oooJava/sor/makefile +++ b/Robust/src/Benchmarks/oooJava/sor/makefile @@ -4,6 +4,6 @@ SOURCE_FILES=JGFSORBenchSizeD.java NUM_OOO_WORKERS=24 NUM_RCR_WORKERS=23 -COREPINFLAG=-corepin +#BMFLAGS=-corepin include ../master-makefile diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 3ae8dca4..a94f438d 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -301,7 +301,7 @@ public class BuildCode { //TODO signal the object that will report errors if(state.RCR) { try { - rcr = new RuntimeConflictResolver(PREFIX, oooa); + rcr = new RuntimeConflictResolver(PREFIX, oooa, state); rcr.setGlobalEffects(oooa.getDisjointAnalysis().getEffectsAnalysis().getAllEffects()); } catch (FileNotFoundException e) { System.out.println("Runtime Conflict Resolver could not create output file."); diff --git a/Robust/src/IR/Flat/RuntimeConflictResolver.java b/Robust/src/IR/Flat/RuntimeConflictResolver.java index ca36565c..f5827ef0 100644 --- a/Robust/src/IR/Flat/RuntimeConflictResolver.java +++ b/Robust/src/IR/Flat/RuntimeConflictResolver.java @@ -12,7 +12,10 @@ import java.util.Vector; import Util.Tuple; import Analysis.Disjoint.*; import Analysis.MLP.CodePlan; +import IR.State; import IR.TypeDescriptor; +import Analysis.OoOJava.ConflictGraph; +import Analysis.OoOJava.ConflictNode; import Analysis.OoOJava.OoOJavaAnalysis; /* An instance of this class manages all OoOJava coarse-grained runtime conflicts @@ -68,10 +71,12 @@ public class RuntimeConflictResolver { private ArrayList pendingPrintout; private EffectsTable effectsLookupTable; private OoOJavaAnalysis oooa; + private State state; - public RuntimeConflictResolver(String buildir, OoOJavaAnalysis oooa) throws FileNotFoundException { + public RuntimeConflictResolver(String buildir, OoOJavaAnalysis oooa, State state) throws FileNotFoundException { String outputFile = buildir + "RuntimeConflictResolver"; this.oooa=oooa; + this.state=state; cFile = new PrintWriter(new File(outputFile + ".c")); headerFile = new PrintWriter(new File(outputFile + ".h")); @@ -437,10 +442,23 @@ public class RuntimeConflictResolver { Vector invars=fsen.getInVarsForDynamicCoarseConflictResolution(); for(int i=0;ircrstatus!=0)"); } - cFile.println(" " + this.getTraverserInvocation(tmp, "rec->"+tmp+", rec", fsen)); + + if(state.NOSTALLTR && node.IsValidToPrune()){ + cFile.println(" /* " + this.getTraverserInvocation(tmp, "rec->"+tmp+", rec", fsen)+"*/"); + }else{ + cFile.println(" " + this.getTraverserInvocation(tmp, "rec->"+tmp+", rec", fsen)); + } + } //release traverser reference...traversal finished... //executing thread will clean bins for us diff --git a/Robust/src/IR/State.java b/Robust/src/IR/State.java index 459021b1..c9ac058a 100644 --- a/Robust/src/IR/State.java +++ b/Robust/src/IR/State.java @@ -105,6 +105,7 @@ public class State { public boolean OOOJAVA=false; public boolean OOODEBUG=false; public boolean RCR=false; + public boolean NOSTALLTR=false; public boolean OPTIONAL=false; diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java index d33533db..d6eb421d 100644 --- a/Robust/src/Main/Main.java +++ b/Robust/src/Main/Main.java @@ -338,8 +338,10 @@ public class Main { } else if (option.equals("-ooodebug") ){ state.OOODEBUG = true; } else if (option.equals("-rcr")){ - state.RCR = true; - } else if (option.equals("-help")) { + state.RCR = true; + } else if (option.equals("-nostalltr")){ + state.NOSTALLTR = true; + }else if (option.equals("-help")) { System.out.println("-classlibrary classlibrarydirectory -- directory where classlibrary is located"); System.out.println("-selfloop task -- this task doesn't self loop its parameters forever"); System.out.println("-dir outputdirectory -- output code in outputdirectory"); diff --git a/Robust/src/buildscript b/Robust/src/buildscript index f1ef1978..6c6c78ee 100755 --- a/Robust/src/buildscript +++ b/Robust/src/buildscript @@ -29,6 +29,7 @@ echo -mempool-detect-misuse turn on to find code misusing pool-allocated records echo -rcr turn on runtime conflict resolver echo -squeue use single queue echo -corepin use core pinning +echo -nostalltr turn off RCR traversers that only handle conflicts between task and stallsite echo echo Disjoint Reachability Analysis options echo -disjoint enable analysis @@ -579,6 +580,10 @@ then EXTRAOPTIONS="$EXTRAOPTIONS -DINITIALHEAPSIZE_MB=($2)" shift +elif [[ $1 = '-nostalltr' ]] +then +JAVAOPTS="$JAVAOPTS -nostalltr" + elif [[ $1 = '-rcr' ]] then JAVAOPTS="$JAVAOPTS -rcr" -- 2.34.1