From 297805cd3b458096e0d4fcb39e5ea7542ad45077 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Fri, 22 Oct 2010 22:27:47 +0000 Subject: [PATCH] changes --- Robust/src/IR/Flat/BuildCode.java | 4 ++++ Robust/src/IR/Flat/RuntimeConflictResolver.java | 2 ++ Robust/src/Runtime/mlp_runtime.h | 2 +- Robust/src/Runtime/oooJava/hashStructure.c | 3 +++ Robust/src/Runtime/workschedule.c | 1 + 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index bf81596b..50769294 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -3254,10 +3254,14 @@ public class BuildCode { } if(state.RCR) { //no need to enqueue parent effect if coarse grained conflict clears us + output.println(" while(stallrecord.common.rcrstatus) ;"); + output.println(" BARRIER();"); output.println(" stallrecord.common.parentsStallSem=&rentry->parentStallSem;"); output.println(" stallrecord.tag=rentry->tag;"); output.println(" stallrecord.___obj___=(struct ___Object___ *)"+generateTemp(fm, waitingElement.getTempDesc(), null)+";"); output.println(" stallrecord.common.classID=-"+rcr.getTraverserID(waitingElement.getTempDesc(), fn)+";"); + //mark the record used..so we won't use it again until it is free + output.println(" stallrecord.common.rcrstatus=1;"); output.println(" enqueueTR(TRqueue, (void *)&stallrecord);"); } output.println(" psem_take( &(rentry->parentStallSem), (struct garbagelist *)&___locals___ );"); diff --git a/Robust/src/IR/Flat/RuntimeConflictResolver.java b/Robust/src/IR/Flat/RuntimeConflictResolver.java index b97486c6..f852c54d 100644 --- a/Robust/src/IR/Flat/RuntimeConflictResolver.java +++ b/Robust/src/IR/Flat/RuntimeConflictResolver.java @@ -725,6 +725,8 @@ public class RuntimeConflictResolver { //need to add this cFile.println(" if(atomic_sub_and_test(RUNBIAS-totalcount,&(record->rcrRecords[0].count))) {"); cFile.println(" psem_give_tag(record->common.parentsStallSem, record->tag);"); + cFile.println(" BARRIER();"); + cFile.println(" record->common.rcrstatus=0;"); cFile.println("}"); } else { cFile.println(" if(atomic_sub_and_test(RUNBIAS-totalcount,&(record->rcrRecords["+index+"].count))) {"); diff --git a/Robust/src/Runtime/mlp_runtime.h b/Robust/src/Runtime/mlp_runtime.h index 419f0143..ffd4548a 100644 --- a/Robust/src/Runtime/mlp_runtime.h +++ b/Robust/src/Runtime/mlp_runtime.h @@ -100,7 +100,6 @@ typedef struct SESEcommon_t { //ForwardingListElement forwardList; struct Queue* forwardList; - volatile int unresolvedDependencies; pthread_cond_t doneCond; @@ -122,6 +121,7 @@ typedef struct SESEcommon_t { int offsetToDepSESErecords; #ifdef RCR int offsetToParamRecords; + volatile int rcrstatus; #endif // for determining when task records can be returned diff --git a/Robust/src/Runtime/oooJava/hashStructure.c b/Robust/src/Runtime/oooJava/hashStructure.c index 24c17c86..cab07044 100644 --- a/Robust/src/Runtime/oooJava/hashStructure.c +++ b/Robust/src/Runtime/oooJava/hashStructure.c @@ -402,6 +402,9 @@ void RESOLVE(SESEcommon *record, bitvt mask) { if(unlikely(record->classID<0)) { //parent stall...clear it psem_give_tag(record->parentsStallSem, ((SESEstall *)record)->tag); + //mark the record unused + BARRIER(); + ((SESEstall *)record)->rcrstatus=0; } else { int flag=LOCKXCHG32(&array[index].flag,0); if (flag) { diff --git a/Robust/src/Runtime/workschedule.c b/Robust/src/Runtime/workschedule.c index 26b5fb65..3119b66c 100644 --- a/Robust/src/Runtime/workschedule.c +++ b/Robust/src/Runtime/workschedule.c @@ -105,6 +105,7 @@ void* workerMain( void* arg ) { //set up the stall site SESErecord stallrecord.common.offsetToParamRecords=(INTPTR) &((SESEstall *)0)->rcrRecords; stallrecord.common.classID=-1; + stallrecord.common.rcrstatus=0; if( TRqueue == NULL ) { TRqueue = allocTR(); -- 2.34.1