From 3e25de3a94e6547eb5152b3fa455a5ceae18bd13 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Thu, 21 Oct 2010 09:40:29 +0000 Subject: [PATCH] more changes....much is still missing --- Robust/src/IR/Flat/BuildCode.java | 24 ++++++++++++++++++++-- Robust/src/Runtime/mlp_runtime.c | 2 +- Robust/src/Runtime/oooJava/hashStructure.c | 13 +++++++----- Robust/src/Runtime/oooJava/rcr_runtime.c | 2 -- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 5b30f743..c69398c3 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -4308,6 +4308,7 @@ public class BuildCode { assert(waitingElement.getStatus()>=ConflictNode.COARSE); output.println(" rentry=mlpCreateREntry(" + waitingElement.getStatus() + ", &(seseToIssue->common));"); output.println(" seseToIssue->common.rentryArray[seseToIssue->common.rentryIdx++]=rentry;"); + output.println(" rentry->queue=runningSESE->memoryQueueArray[" + waitingElement.getQueueID()+"];"); output.println(" if(ADDRENTRY(runningSESE->memoryQueueArray["+ waitingElement.getQueueID()+ "],rentry)==READY) {"); output.println(" dispCount++;"); output.println(" }"); @@ -4444,8 +4445,7 @@ public class BuildCode { output.println(" resolvePointer(consumer->rentryArray[idx]);"); output.println(" }"); output.println(" }"); - - + output.println(" if( atomic_sub_and_test( 1, &(consumer->unresolvedDependencies) ) ){"); output.println(" workScheduleSubmit( (void*)consumer );"); output.println(" }"); @@ -4471,6 +4471,26 @@ public class BuildCode { } + if (state.RCR&&fsen.getDynamicInVarSet().size()>0) { + output.println("{"); + output.println(" int idx,idx2;"); + if (fsen.getDynamicInVarSet().size()==1) { + output.println(" idx=0; {"); + } else { + output.println(" for(idx=0;idx<"+fsen.getDynamicInVarSet().size()+";idx++){"); + } + output.println(" struct rcrRecord *rec="+paramsprefix+"->rcrRecords[idx];"); + output.println(" while(rec!=NULL) {"); + output.println(" for(idx2=0;idx2index;idx2++) {"); + output.println(" rcr_RETIREHASHTABLE(allHashStructures[0],rec,rec->array[idx2]);"); + output.println(" }");//exit idx2 for loop + output.println(" rec=rec->next;"); + output.println(" }");//exit rec while loop + output.println(" }");//exit idx for loop + output.println("}"); + } + + // last of all, decrement your parent's number of running children output.println(" if( runningSESE->parent != NULL ) {"); output.println(" if( atomic_sub_and_test( 1, &(runningSESE->parent->numRunningChildren) ) ) {"); diff --git a/Robust/src/Runtime/mlp_runtime.c b/Robust/src/Runtime/mlp_runtime.c index 3fab39ad..4cec64aa 100644 --- a/Robust/src/Runtime/mlp_runtime.c +++ b/Robust/src/Runtime/mlp_runtime.c @@ -923,7 +923,7 @@ resolvePointer(REntry* rentry){ } struct Queue* val; do { - val=(struct Queue*)0x1; + val=(struct Queue*)0x1; val=(struct Queue*)LOCKXCHG((unsigned INTPTR*)&(table->unresolvedQueue), (unsigned INTPTR)val); } while(val==(struct Queue*)0x1); if(val!=NULL && getHead(val)->objectptr==rentry){ diff --git a/Robust/src/Runtime/oooJava/hashStructure.c b/Robust/src/Runtime/oooJava/hashStructure.c index 2b31b2e1..7a6ae4c5 100644 --- a/Robust/src/Runtime/oooJava/hashStructure.c +++ b/Robust/src/Runtime/oooJava/hashStructure.c @@ -289,11 +289,14 @@ void rcr_RETIREHASHTABLE(HashStructure *T, SESEcommon *task, int key) { ReadBinItem_rcr* rptr=(ReadBinItem_rcr*)ptr; for (i=0;iindex;i++) { TraverserData * td=&rptr->array[i]; - RESOLVE(td->task, td->bitindex); - if (((INTPTR)rptr->array[i].task)&PARENTBIN) { - //parents go immediately - atomic_dec(&rptr->item.total); - } + if (task==td->task) { + RESOLVE(td->task, td->bitindex); + if (((INTPTR)rptr->array[i].task)&PARENTBIN) { + //parents go immediately + atomic_dec(&rptr->item.total); + } + break; + } } ptr->status=READY; } diff --git a/Robust/src/Runtime/oooJava/rcr_runtime.c b/Robust/src/Runtime/oooJava/rcr_runtime.c index 93530a59..e73e676a 100644 --- a/Robust/src/Runtime/oooJava/rcr_runtime.c +++ b/Robust/src/Runtime/oooJava/rcr_runtime.c @@ -12,8 +12,6 @@ void * workerTR(void *x) { break; sched_yield(); } while(1); - - } return NULL; } -- 2.34.1