changes
authorbdemsky <bdemsky>
Sat, 21 Nov 2009 09:16:35 +0000 (09:16 +0000)
committerbdemsky <bdemsky>
Sat, 21 Nov 2009 09:16:35 +0000 (09:16 +0000)
Robust/src/Analysis/Locality/DCWrapper.java
Robust/src/IR/Flat/BuildCode.java
Robust/src/Runtime/STM/tm.h
Robust/src/Runtime/garbage.c

index 394f9b402dcd37acf589b90ecf9ca71a8f82e5a3..0735a45895beae691a829eb19f18ae27c4f7f517 100644 (file)
@@ -42,6 +42,7 @@ public class DCWrapper {
   Hashtable<LocalityBinding, Set<FlatNode>> notreadymap=new Hashtable<LocalityBinding, Set<FlatNode>>();
   Hashtable<LocalityBinding, HashSet<FlatNode>> cannotdelaymap=new Hashtable<LocalityBinding, HashSet<FlatNode>>();
   Hashtable<LocalityBinding, Set<FlatNode>> derefmap=new Hashtable<LocalityBinding, Set<FlatNode>>();
+  Hashtable<LocalityBinding, Set<FlatNode>> convmap=new Hashtable<LocalityBinding, Set<FlatNode>>();
   
   public DiscoverConflicts getConflicts() {
     DiscoverConflicts dc=new DiscoverConflicts(locality, state, typeanalysis, cannotdelaymap, false, false, state.READSET?gft:null);
@@ -95,12 +96,18 @@ public class DCWrapper {
     return othermap.get(lb);
   }
 
+  public Set<FlatNode> getConv(LocalityBinding lb) {
+    return convmap.get(lb);
+  }
+
   public Set<FlatNode> livecode(LocalityBinding lb) {
     return recordmap.get(lb);
   }
 
   private void processlb(LocalityBinding lb) {
     transmap.put(lb, new HashSet<FlatNode>());
+    Set<FlatNode> convset=new HashSet<FlatNode>();
+    convmap.put(lb, convset);
     if (lb.isAtomic()||!lb.getHasAtomic())
       return;
     
@@ -119,12 +126,14 @@ public class DCWrapper {
     Set<FlatNode> nnotready=new HashSet<FlatNode>();
     Set<FlatNode> nderef=new HashSet<FlatNode>();
 
+
     recordmap.put(lb, nrecordset);
     cannotdelaymap.put(lb, ncannotdelay);
     notreadymap.put(lb, nnotready);
     othermap.put(lb, notherset);
     derefmap.put(lb, nderef);
 
+
     FlatMethod fm=state.getMethodFlat(lb.getMethod());
     for(Iterator<FlatNode> fnit=fm.getNodeSet().iterator();fnit.hasNext();) {
       FlatNode fn=fnit.next();
@@ -147,6 +156,7 @@ public class DCWrapper {
          if (state.STMARRAY&&!state.DUALVIEW)
            nderef.addAll(tderef);
          transmap.get(lb).add(fn);
+         convset.addAll(transSet);
        } else {
          ncannotdelay.addAll(transSet);
        }
index eb3b6a5fe60f2329c8d7bf9d4fee81f0750f7770..de3ee767275ca039812af48a28506bf2659fd60a 100644 (file)
@@ -2940,7 +2940,10 @@ public class BuildCode {
          //need to do translation
          output.println("TRANSREAD("+generateTemp(fm, fgcn.getSrc(),lb)+", "+generateTemp(fm, fgcn.getSrc(),lb)+", (void *)("+localsprefixaddr+"));");
        } else if (state.READSET&&dc.getNeedTrans(lb, fgcn)) {
-         output.println("TRANSREADRD("+generateTemp(fm, fgcn.getSrc(),lb)+", "+generateTemp(fm, fgcn.getSrc(),lb)+");");
+         if (state.HYBRID&&delaycomp.getConv(lb).contains(fgcn)) {
+           output.println("TRANSREADRDFISSION("+generateTemp(fm, fgcn.getSrc(),lb)+", "+generateTemp(fm, fgcn.getSrc(),lb)+");");
+         } else
+           output.println("TRANSREADRD("+generateTemp(fm, fgcn.getSrc(),lb)+", "+generateTemp(fm, fgcn.getSrc(),lb)+");");
        }
       }
     } else {
@@ -3045,7 +3048,7 @@ public class BuildCode {
       output.println("transaction_check_counter=*counter_reset_pointer;");
       sandboxcounter++;
     }
-    output.println("transStart();");
+    //output.println("transStart();");
 
     if (state.ABORTREADERS||state.SANDBOX) {
       if (state.SANDBOX)
@@ -3665,7 +3668,10 @@ public class BuildCode {
            (state.READSET&&dc.getNeedWriteTrans(lb, ffn))) {
          output.println("TRANSREAD("+dst+", "+dst+", (void *) (" + localsprefixaddr + "));");
        } else if (state.READSET&&dc.getNeedTrans(lb, ffn)) {
-         output.println("TRANSREADRD("+dst+", "+dst+");");
+         if (state.HYBRID&&delaycomp.getConv(lb).contains(ffn)) {
+           output.println("TRANSREADRDFISSION("+dst+", "+dst+");");
+         } else
+           output.println("TRANSREADRD("+dst+", "+dst+");");
        }
       }
     } else if (state.DSM) {
@@ -3844,7 +3850,10 @@ public class BuildCode {
        if ((dc==null)||!state.READSET&&dc.getNeedTrans(lb, fen)||state.READSET&&dc.getNeedWriteTrans(lb, fen)) {
          output.println("TRANSREAD("+dst+", "+dst+", (void *)(" + localsprefixaddr+"));");
        } else if (state.READSET&&dc.getNeedTrans(lb, fen)) {
-         output.println("TRANSREADRD("+dst+", "+dst+");");
+         if (state.HYBRID&&delaycomp.getConv(lb).contains(fen)) {
+           output.println("TRANSREADRDFISSION("+dst+", "+dst+");");
+         } else
+           output.println("TRANSREADRD("+dst+", "+dst+");");
        }
       }
     } else if (state.DSM) {
index ef8937e31e6571f06a466397e9825e050d359ace..d847261045a735cbe07692ea635f925b6d7496ac 100644 (file)
@@ -121,6 +121,13 @@ typedef struct objheader {
           } while(1); \
         }}
 
+#define TRANSREADRDFISSION(x,y) {                                      \
+    void * inputvalue;                                                 \
+    if ((inputvalue=y)==NULL) x=NULL;                                  \
+    else {                                                             \
+      x=inputvalue;rd_t_chashInsertOnce(inputvalue, ((objheader_t *)inputvalue)[-1].version);} \
+  }
+
 /* =================================
  * Data structures
  * =================================
index 8611dce62cea4a872f95f35651a7227b87013340..5160bc9f02e34d88f2ffde0c05b1c5dac7de1787 100644 (file)
@@ -30,7 +30,7 @@
 
 #define NUMPTRS 100
 
-#define INITIALHEAPSIZE 128*1024*1024L
+#define INITIALHEAPSIZE 5000*1024*1024L
 #define GCPOINT(x) ((INTPTR)((x)*0.99))
 /* This define takes in how full the heap is initially and returns a new heap size to use */
 #define HEAPSIZE(x,y) ((INTPTR)(x+y))*2