changes
authorbdemsky <bdemsky>
Sat, 23 Oct 2010 01:39:33 +0000 (01:39 +0000)
committerbdemsky <bdemsky>
Sat, 23 Oct 2010 01:39:33 +0000 (01:39 +0000)
Robust/src/IR/Flat/RuntimeConflictResolver.java
Robust/src/Runtime/oooJava/hashStructure.c
Robust/src/Runtime/oooJava/hashStructure.h
Robust/src/Runtime/workschedule.c

index f852c54de5b953269d6cc8505d2a90c90b9b6116..23a21d4329fbb58fdf93993cc88b6b0c40f25434 100644 (file)
@@ -694,7 +694,6 @@ public class RuntimeConflictResolver {
     cFile.println("    int totalcount=RUNBIAS;\n");
     if (taint.isStallSiteTaint()) {
       cFile.println("    record->rcrRecords[0].count=RUNBIAS;\n");
-      cFile.println("    record->rcrRecords[0].index=0;\n");
     } else {
       cFile.println("    record->rcrRecords["+index+"].count=RUNBIAS;\n");
       cFile.println("    record->rcrRecords["+index+"].index=0;\n");
@@ -795,26 +794,41 @@ public class RuntimeConflictResolver {
       assert heaprootNum != -1;
       int allocSiteID = connectedHRHash.get(taint).getWaitingQueueBucketNum(node);
       int traverserID = doneTaints.get(taint);
+      currCase.append("    int tmpkey"+depth+"=rcr_generateKey("+prefix+");\n");
       if (objConfRead)
-       currCase.append("    int tmpvar"+depth+"=rcr_WTWRITEBINCASE(allHashStructures["+heaprootNum+"],"+prefix+", (SESEcommon *) record, "+index+");\n");
+       currCase.append("    int tmpvar"+depth+"=rcr_WTWRITEBINCASE(allHashStructures["+heaprootNum+"], tmpkey"+depth+", (SESEcommon *) record, "+index+");\n");
       else
-       currCase.append("    int tmpvar"+depth+"=rcr_WRITEBINCASE(allHashStructures["+heaprootNum+"],"+prefix+", (SESEcommon *) record, "+index+");\n");
+       currCase.append("    int tmpvar"+depth+"=rcr_WRITEBINCASE(allHashStructures["+heaprootNum+"], tmpkey"+depth+", (SESEcommon *) record, "+index+");\n");
     } else if (primConfRead||objConfRead) {
       int heaprootNum = connectedHRHash.get(taint).id;
       assert heaprootNum != -1;
       int allocSiteID = connectedHRHash.get(taint).getWaitingQueueBucketNum(node);
       int traverserID = doneTaints.get(taint);
+      currCase.append("    int tmpkey"+depth+"=rcr_generateKey("+prefix+");\n");
       if (objConfRead) 
-       currCase.append("    int tmpvar"+depth+"=rcr_WTREADBINCASE(allHashStructures["+heaprootNum+"],"+prefix+", (SESEcommon *) record, "+index+");\n");
+       currCase.append("    int tmpvar"+depth+"=rcr_WTREADBINCASE(allHashStructures["+heaprootNum+"], tmpkey"+depth+", (SESEcommon *) record, "+index+");\n");
       else
-       currCase.append("    int tmpvar"+depth+"=rcr_READBINCASE(allHashStructures["+heaprootNum+"],"+prefix+", (SESEcommon *) record, "+index+");\n");
+       currCase.append("    int tmpvar"+depth+"=rcr_READBINCASE(allHashStructures["+heaprootNum+"], tmpkey"+depth+", (SESEcommon *) record, "+index+");\n");
     }
 
     if(primConfWrite||objConfWrite||primConfRead||objConfRead) {
       currCase.append("if (!(tmpvar"+depth+"&READYMASK)) totalcount--;\n");
       currCase.append("if (!(tmpvar"+depth+"&SPEC)) {\n");
-      currCase.append("  struct rcrRecord * rcrrec=&record->rcrRecords["+index+"];");
-      currCase.append("  rcrrec->array[rcrrec->index++];");
+      if (taint.isStallSiteTaint()) {
+       currCase.append("  struct rcrRecord * rcrrec=&record->rcrRecords["+index+"];\n");
+       currCase.append("  struct rcrRecord * tmprec;\n");
+       currCase.append("  if(likely(rcrrec->index<RCRSIZE)) {\n");
+       currCase.append("  rcrrec->array[rcrrec->index++]=tmpkey"+depth+";\n");
+       currCase.append("} else if(likely((tmprec=rcrrec->next)!=NULL)&&likely(tmprec->index<RCRSIZE)) {\n");
+       currCase.append("  tmprec->array[tmprec->index++]=tmpkey"+depth+";\n");
+       currCase.append("} else {\n");
+       currCase.append("  struct rcrRecord *trec=RUNMALLOC(sizeof(struct rcrRecord));");
+       currCase.append("  trec->array[0]=tmpkey"+depth+";\n");
+       currCase.append("  trec->size=1;\n");
+       currCase.append("  trec->next=tmprec;\n");
+       currCase.append("  rcrrec->next=trec;\n");
+       currCase.append("}\n");
+      }
       currCase.append("}\n");
     }
     
index 8142cf1c903e93d9dc78d20178e5e17292ec107b..55d6af0d46ae7ee2d54ed0c06af6e689efde0ba8 100644 (file)
@@ -46,11 +46,10 @@ inline int rcr_generateKey(void * ptr){
   return (((struct ___Object___ *) ptr)->oid)&RH_MASK;
 }
 
-inline int rcr_BWRITEBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int index, int mode) {
+inline int rcr_BWRITEBINCASE(HashStructure *T, int key, SESEcommon *task, int index, int mode) {
   //chain of bins exists => tail is valid
   //if there is something in front of us, then we are not ready
   BinItem_rcr * val;
-  int key=rcr_generateKey(ptr);
   BinElement_rcr* be= &(T->array[key]); //do not grab head from here since it's locked (i.e. = 0x1)
 
   //LOCK is still needed as different threads will remove items...
@@ -157,9 +156,8 @@ inline int rcr_BWRITEBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int
   }
 }
 
-inline int rcr_BREADBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int index, int mode) {
+inline int rcr_BREADBINCASE(HashStructure *T, int key, SESEcommon *task, int index, int mode) {
   BinItem_rcr * val;
-  int key=rcr_generateKey(ptr);
   BinElement_rcr * be = &(T->array[key]);
 
   //LOCK is still needed as different threads will remove items...
@@ -236,7 +234,7 @@ inline int rcr_BREADBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int i
   }
 
   if (ISREADBIN(bintail->type)) {
-    int stat=rcr_TAILREADCASE(T, ptr, val, bintail, key, task, index);
+    int stat=rcr_TAILREADCASE(T, val, bintail, key, task, index);
     if (mode) {
       struct BinItem_rcr * bt=be->tail;
       while(bt->status!=READY) {
@@ -247,7 +245,7 @@ inline int rcr_BREADBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int i
       return stat;
     }
   } else {
-    rcr_TAILWRITECASE(T, ptr, val, bintail, key, task, index);
+    rcr_TAILWRITECASE(T, val, bintail, key, task, index);
     if (mode) {
       struct BinItem_rcr * bt=be->tail;
       while(bt->status!=READY) {
@@ -261,22 +259,22 @@ inline int rcr_BREADBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int i
 }
 
 
-int rcr_WRITEBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int index) {
-  return rcr_BWRITEBINCASE(T, ptr, task, index, 0);
+int rcr_WRITEBINCASE(HashStructure *T, int key, SESEcommon *task, int index) {
+  return rcr_BWRITEBINCASE(T, key, task, index, 0);
 }
-int rcr_READBINCASE(HashStructure *T, void *ptr, SESEcommon * task, int index) {
-  return rcr_BREADBINCASE(T, ptr, task, index, 0);
+int rcr_READBINCASE(HashStructure *T, int key, SESEcommon * task, int index) {
+  return rcr_BREADBINCASE(T, key, task, index, 0);
 }
 
-int rcr_WTWRITEBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int index) {
-  return rcr_BWRITEBINCASE(T, ptr, task, index, 1);
+int rcr_WTWRITEBINCASE(HashStructure *T, int key, SESEcommon *task, int index) {
+  return rcr_BWRITEBINCASE(T, key, task, index, 1);
 }
 
-int rcr_WTREADBINCASE(HashStructure *T, void *ptr, SESEcommon * task, int index) {
-  return rcr_BREADBINCASE(T, ptr, task, index, 1);
+int rcr_WTREADBINCASE(HashStructure *T, int key, SESEcommon * task, int index) {
+  return rcr_BREADBINCASE(T, key, task, index, 1);
 }
 
-int rcr_TAILREADCASE(HashStructure *T, void * ptr, BinItem_rcr *val, BinItem_rcr *bintail, int key, SESEcommon * task, int index) {
+int rcr_TAILREADCASE(HashStructure *T, BinItem_rcr *val, BinItem_rcr *bintail, int key, SESEcommon * task, int index) {
   ReadBinItem_rcr * readbintail=(ReadBinItem_rcr*)T->array[key].tail;
   int status, retval;
   TraverserData *td;
@@ -308,7 +306,7 @@ int rcr_TAILREADCASE(HashStructure *T, void * ptr, BinItem_rcr *val, BinItem_rcr
   return retval;
 }
 
-void rcr_TAILWRITECASE(HashStructure *T, void *ptr, BinItem_rcr *val, BinItem_rcr *bintail, int key, SESEcommon * task, int index) {
+void rcr_TAILWRITECASE(HashStructure *T, BinItem_rcr *val, BinItem_rcr *bintail, int key, SESEcommon * task, int index) {
   ReadBinItem_rcr* rb=rcr_createReadBinItem();
   TraverserData * td = &(rb->array[rb->index++]);
   rb->item.total=1;
index 9dcee30814f1d96b16d72cfdbcc1d0d3c61616b6..e4136a684de051b83781865dbcf5ebe2922c4097 100644 (file)
@@ -84,12 +84,12 @@ inline int rcr_generateKey(void * ptr);
 //to store in each entry.
 
 void RESOLVE(SESEcommon *record, bitvt mask);
-int rcr_WRITEBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int index);
-int rcr_READBINCASE(HashStructure *T, void *ptr, SESEcommon * task, int index);
+int rcr_WRITEBINCASE(HashStructure *T, int key, SESEcommon *task, int index);
+int rcr_READBINCASE(HashStructure *T, int key, SESEcommon * task, int index);
 
-int rcr_WTWRITEBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int index);
-int rcr_WTREADBINCASE(HashStructure *T, void *ptr, SESEcommon * task, int index);
-int rcr_TAILREADCASE(HashStructure *T, void * ptr, BinItem_rcr *val, BinItem_rcr *bintail, int key, SESEcommon * task, int index);
-void rcr_TAILWRITECASE(HashStructure *T, void *ptr, BinItem_rcr *val, BinItem_rcr *bintail, int key, SESEcommon * task, int index);
+int rcr_WTWRITEBINCASE(HashStructure *T, int key, SESEcommon *task, int index);
+int rcr_WTREADBINCASE(HashStructure *T, int key, SESEcommon * task, int index);
+int rcr_TAILREADCASE(HashStructure *T, BinItem_rcr *val, BinItem_rcr *bintail, int key, SESEcommon * task, int index);
+void rcr_TAILWRITECASE(HashStructure *T, BinItem_rcr *val, BinItem_rcr *bintail, int key, SESEcommon * task, int index);
 
 #endif
index 3119b66cfd00b3edbfa7d27f54658bb630695954..1ce7e925d3e1cea422f891be36057755bdedf53d 100644 (file)
@@ -107,6 +107,11 @@ void* workerMain( void* arg ) {
   stallrecord.common.classID=-1;
   stallrecord.common.rcrstatus=0;
 
+  //initialize rcrRecord
+  stallrecord.rcrRecords[0].next=NULL;
+  stallrecord.rcrRecords[0].index=0;
+  stallrecord.rcrRecords[0].count=0;
+
   if( TRqueue == NULL ) {
     TRqueue = allocTR();
   }