changeset 13:2bf83f932705 dev_expl_VP_and_DKU

fix: mix-up between 2 redundant types of carriers
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Tue, 21 Aug 2012 17:42:07 +0200
parents f56e3beac86b
children b2bc97318262
files VSs.c VSs.h VSs_PluginFns.c VSs_Request_Handlers.c
diffstat 4 files changed, 18 insertions(+), 23 deletions(-) [+]
line diff
     1.1 --- a/VSs.c	Mon Aug 20 13:42:19 2012 +0200
     1.2 +++ b/VSs.c	Tue Aug 21 17:42:07 2012 +0200
     1.3 @@ -102,6 +102,7 @@
     1.4        //seedVP is a thread, so has a permanent task
     1.5     semData->needsTaskAssigned = FALSE;
     1.6     semData->taskStub = threadTaskStub;
     1.7 +   semData->slaveType = ThreadSlv;
     1.8  
     1.9     resume_slaveVP( seedSlv, semEnv ); //returns right away, just queues Slv
    1.10     
     2.1 --- a/VSs.h	Mon Aug 20 13:42:19 2012 +0200
     2.2 +++ b/VSs.h	Tue Aug 21 17:42:07 2012 +0200
     2.3 @@ -92,13 +92,6 @@
     2.4  VSsTaskStubCarrier;
     2.5  
     2.6  
     2.7 -typedef struct
     2.8 - {
     2.9 -   int32        type;
    2.10 -   VSsTaskStub *taskStub;
    2.11 - }
    2.12 -VSsWaiterCarrier;
    2.13 -
    2.14  /*Semantic layer-specific data sent inside a request from lib called in app
    2.15   * to request handler called in AnimationMaster
    2.16   */
     3.1 --- a/VSs_PluginFns.c	Mon Aug 20 13:42:19 2012 +0200
     3.2 +++ b/VSs_PluginFns.c	Tue Aug 21 17:42:07 2012 +0200
     3.3 @@ -61,7 +61,14 @@
     3.4     slotNum = slot->slotIdx;
     3.5     
     3.6     semEnv  = (VSsSemEnv *)_semEnv;
     3.7 -
     3.8 +   
     3.9 +        returnSlv = readPrivQ( semEnv->slavesReadyToResumeQ );
    3.10 +      if( returnSlv != NULL )  //Yes, have a slave, so return it.
    3.11 +       { returnSlv->coreAnimatedBy   = coreNum;
    3.12 +         if( semEnv->coreIsDone[coreNum] == TRUE ) //reads are higher perf
    3.13 +            semEnv->coreIsDone[coreNum] = FALSE;   //don't just write always
    3.14 +         goto ReturnTheSlv;
    3.15 +       }
    3.16        //Speculatively set the return slave to the slot taskSlave
    3.17        //TODO: false sharing ?  Always read..
    3.18     returnSlv = semEnv->slotTaskSlvs[coreNum][slotNum];
    3.19 @@ -84,13 +91,7 @@
    3.20      }
    3.21     else
    3.22      {    //no task, so try to get a ready to resume slave
    3.23 -      returnSlv = readPrivQ( semEnv->slavesReadyToResumeQ );
    3.24 -      if( returnSlv != NULL )  //Yes, have a slave, so return it.
    3.25 -       { returnSlv->coreAnimatedBy   = coreNum;
    3.26 -         if( semEnv->coreIsDone[coreNum] == TRUE ) //reads are higher perf
    3.27 -            semEnv->coreIsDone[coreNum] = FALSE;   //don't just write always
    3.28 -         goto ReturnTheSlv;
    3.29 -       }
    3.30 +      
    3.31           //If get here, then no task, so check if have extra free slaves
    3.32        extraSlv = readPrivQ( semEnv->freeExtraTaskSlvQ );
    3.33        if( extraSlv != NULL )
    3.34 @@ -458,8 +459,7 @@
    3.35  
    3.36        //For VSs, caller needs ptr to created thread returned to it
    3.37     requestingSlv->dataRetFromReq = newSlv;
    3.38 -
    3.39 -   resume_slaveVP( requestingSlv, semEnv );
    3.40 +   resume_slaveVP(requestingSlv , semEnv );
    3.41     resume_slaveVP( newSlv,        semEnv );
    3.42   }
    3.43  
     4.1 --- a/VSs_Request_Handlers.c	Mon Aug 20 13:42:19 2012 +0200
     4.2 +++ b/VSs_Request_Handlers.c	Tue Aug 21 17:42:07 2012 +0200
     4.3 @@ -95,6 +95,7 @@
     4.4     newStub->args = newArgs;
     4.5     newStub->numLiveChildTasks   = 0;
     4.6     newStub->numLiveChildThreads = 0;
     4.7 +   newStub->isEnded = FALSE;
     4.8     
     4.9        //Copy the arg-pointers.. can be more arguments than just the ones 
    4.10        // that StarSs uses to control ordering of task execution.
    4.11 @@ -371,7 +372,7 @@
    4.12     VSsSemData       *endingSlvSemData;
    4.13     VSsTaskStub      *endingTaskStub, *waitingTaskStub, *parent;
    4.14     VSsTaskType      *endingTaskType;
    4.15 -   VSsWaiterCarrier *waitingTaskCarrier;
    4.16 +   VSsTaskStubCarrier *waitingTaskCarrier;
    4.17     VSsPointerEntry **ptrEntries;
    4.18           
    4.19           DEBUG__printf1(dbgRqstHdlr,"EndTask request from processor %d",semReq->callingSlv->slaveID)
    4.20 @@ -435,7 +436,7 @@
    4.21               { //TODO: looks safe to delete the ptr entry at this point 
    4.22                 continue; //next iter of loop
    4.23               }
    4.24 -            if( waitingTaskCarrier->type == READER ) 
    4.25 +            if( waitingTaskCarrier->isReader ) 
    4.26                 VMS_App__throw_exception("READER waiting", NULL, NULL);
    4.27                     
    4.28              waitingTaskStub = waitingTaskCarrier->taskStub;
    4.29 @@ -465,7 +466,7 @@
    4.30           waitingTaskStub = waitingTaskCarrier->taskStub;
    4.31           
    4.32           /*If task is a writer of this hash-entry's pointer*/
    4.33 -         if( waitingTaskCarrier->type == WRITER ) 
    4.34 +         if( !waitingTaskCarrier->isReader ) 
    4.35            { /* then turn the flag back on.*/
    4.36              ptrEntry->hasEnabledNonFinishedWriter = TRUE;
    4.37              /*Decrement the writer's blocking-propendent-count in task-stub
    4.38 @@ -493,7 +494,7 @@
    4.39                 /*Get next waiting task*/
    4.40                 waitingTaskCarrier = peekPrivQ( ptrEntry->waitersQ );
    4.41                 if( waitingTaskCarrier == NULL ) break;
    4.42 -               if( waitingTaskCarrier->type == WRITER ) break;
    4.43 +               if( !waitingTaskCarrier->isReader ) break;
    4.44                 waitingTaskCarrier = readPrivQ( ptrEntry->waitersQ );               
    4.45                 waitingTaskStub = waitingTaskCarrier->taskStub;
    4.46               }//while waiter is a reader
    4.47 @@ -830,7 +831,7 @@
    4.48     HashEntry   *entry;
    4.49     HashTable   *commHashTbl = semEnv->commHashTbl;
    4.50  
    4.51 -         DEBUG__printf2(dbgRqstHdlr,"SendFromTo request from %d to %d",semReq->senderID[1],semReq->receiverID[1])
    4.52 +         DEBUG__printf2(dbgRqstHdlr,"ReceiveFromTo request from %d to %d",semReq->senderID[1],semReq->receiverID[1])
    4.53     
    4.54     receiverID  = semReq->receiverID; //For "send", know both send & recv procrs
    4.55     senderID    = semReq->senderID;
    4.56 @@ -938,7 +939,7 @@
    4.57      }
    4.58     else  //have to wait, replace requester with new slot slv & mark waiting
    4.59      { 
    4.60 -       if(semData->slaveType == SlotTaskSlv || semData->slaveType == ExtraTaskSlv){
    4.61 +       if(semData->slaveType == SlotTaskSlv){
    4.62           replaceWithNewSlotSlv( requestingSlv, semEnv );
    4.63         }
    4.64