changeset 38:a951b38d2cfc dev_expl_VP_and_DKU

remove need for end_thread()
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Fri, 17 May 2013 17:49:49 +0200
parents c8d4f6d3c7d3
children 0715109abb08
files VSs.c VSs.h VSs_PluginFns.c VSs_Request_Handlers.c
diffstat 4 files changed, 24 insertions(+), 15 deletions(-) [+]
line diff
     1.1 --- a/VSs.c	Wed May 15 15:25:55 2013 +0200
     1.2 +++ b/VSs.c	Fri May 17 17:49:49 2013 +0200
     1.3 @@ -85,8 +85,9 @@
     1.4  
     1.5        //VSs starts with one processor, which is put into initial environ,
     1.6        // and which then calls create() to create more, thereby expanding work
     1.7 -   seedSlv = VSs__create_slave_helper( fnPtr, initData,
     1.8 -                                     semEnv, semEnv->nextCoreToGetNewSlv++ );
     1.9 +   seedSlv = VSs__create_slave_helper( &VSs__run_thread , fnPtr, initData, semEnv, semEnv->nextCoreToGetNewSlv++ );
    1.10 +   //NB: this assumes that after VSs_init() nextCoreToGetNewSlv is still 0, 
    1.11 +   //    and also that there is more than 1 core.
    1.12     
    1.13        //seed slave is a thread slave, so make a thread's task stub for it
    1.14        // and then make another to stand for the seed's parent task.  Make
    1.15 @@ -221,14 +222,14 @@
    1.16        for( slotNum = 0; slotNum < NUM_ANIM_SLOTS; ++slotNum )
    1.17          {
    1.18  #ifdef IDLE_SLAVES
    1.19 -         idleSlv = VSs__create_slave_helper( &idle_fn, NULL, semanticEnv, 0);
    1.20 +         idleSlv = VSs__create_slave_helper( &VSs__run_thread, &idle_fn, NULL, semanticEnv, 0);
    1.21           idleSlv->coreAnimatedBy                = coreNum;
    1.22           idleSlv->animSlotAssignedTo            =
    1.23                                 _VMSMasterEnv->allAnimSlots[coreNum][slotNum];
    1.24           semanticEnv->idleSlv[coreNum][slotNum] = idleSlv;
    1.25  #endif
    1.26           
    1.27 -         slotTaskSlv = VSs__create_slave_helper( &idle_fn, NULL, semanticEnv, 0);
    1.28 +         slotTaskSlv = VSs__create_slave_helper(&VSs__run_thread, &idle_fn, NULL, semanticEnv, 0);
    1.29           slotTaskSlv->coreAnimatedBy            = coreNum;
    1.30           slotTaskSlv->animSlotAssignedTo        = 
    1.31                                 _VMSMasterEnv->allAnimSlots[coreNum][slotNum];
    1.32 @@ -493,7 +494,10 @@
    1.33     VMS_WL__send_dissipate_req( currVP );
    1.34   }
    1.35  
    1.36 -
    1.37 +void VSs__run_thread(TopLevelFnPtr fnPtr, void *initData){
    1.38 +    (*fnPtr)(initData);
    1.39 +    VSs__end_thread();
    1.40 +}
    1.41  
    1.42  //===========================================================================
    1.43  
    1.44 @@ -567,8 +571,10 @@
    1.45     VMS_WL__send_sem_request( &reqData, currVP );
    1.46   }
    1.47  
    1.48 -void plugin__end_VP(){ 
    1.49 -VSs__end_task();}
    1.50 +void VSs__run_task(TopLevelFnPtr fnPtr, void *initData){
    1.51 +    (*fnPtr)(initData);
    1.52 +    VSs__end_task();
    1.53 +}
    1.54  
    1.55  void
    1.56  VSs__taskwait()
    1.57 @@ -946,7 +952,6 @@
    1.58  void __entry_point(void* _args) {
    1.59      __main_args* args = (__main_args*) _args;
    1.60      __main_ret = __program_main(args->argc, args->argv);
    1.61 -    VSs__end_thread();
    1.62  }
    1.63  
    1.64  #undef main
     2.1 --- a/VSs.h	Wed May 15 15:25:55 2013 +0200
     2.2 +++ b/VSs.h	Fri May 17 17:49:49 2013 +0200
     2.3 @@ -317,6 +317,8 @@
     2.4  VSs__create_thread( TopLevelFnPtr fnPtr,   void *initData,
     2.5                                                       SlaveVP *creatingThd );
     2.6  
     2.7 +void VSs__run_thread(TopLevelFnPtr fnPtr, void *initData);
     2.8 +
     2.9  void
    2.10  VSs__end_thread();
    2.11  
    2.12 @@ -337,6 +339,8 @@
    2.13  void
    2.14  VSs__submit_task_with_ID( VSsTaskType *taskType, void *args, int32 *taskID);
    2.15  
    2.16 +void VSs__run_task(TopLevelFnPtr fnPtr, void *initData);
    2.17 +
    2.18  void
    2.19  VSs__end_task();
    2.20  
    2.21 @@ -400,7 +404,7 @@
    2.22  VSs__assign_slaveVP_to_slot( void *_semEnv, AnimSlot *slot );
    2.23  
    2.24  SlaveVP*
    2.25 -VSs__create_slave_helper( TopLevelFnPtr fnPtr, void *initData,
    2.26 +VSs__create_slave_helper(TopLevelFnWrapper fnWrapper, TopLevelFnPtr fnPtr, void *initData,
    2.27                            VSsSemEnv *semEnv,    int32 coreToAssignOnto );
    2.28  
    2.29  VSsTaskStub *
     3.1 --- a/VSs_PluginFns.c	Wed May 15 15:25:55 2013 +0200
     3.2 +++ b/VSs_PluginFns.c	Fri May 17 17:49:49 2013 +0200
     3.3 @@ -93,7 +93,7 @@
     3.4      // (task slaves that are resuming are in resumeQ)
     3.5      newTaskStub = readPrivQ(semEnv->taskReadyQ);
     3.6      if (newTaskStub != NULL) { //point slave to task's function, and mark slave as having task
     3.7 -        VMS_int__reset_slaveVP_to_TopLvlFn(returnSlv,
     3.8 +        VMS_int__reset_slaveVP_to_TopLvlFnWrapper(returnSlv, &VSs__run_task,
     3.9                  newTaskStub->taskType->fn, newTaskStub->args);
    3.10          semData->taskStub = newTaskStub;
    3.11          newTaskStub->slaveAssignedTo = returnSlv;
    3.12 @@ -362,13 +362,13 @@
    3.13  /*Re-use this in the entry-point fn
    3.14   */
    3.15  SlaveVP *
    3.16 -VSs__create_slave_helper(TopLevelFnPtr fnPtr, void *initData,
    3.17 +VSs__create_slave_helper(TopLevelFnWrapper fnWrapper, TopLevelFnPtr fnPtr, void *initData,
    3.18          VSsSemEnv *semEnv, int32 coreToAssignOnto) {
    3.19      SlaveVP *newSlv;
    3.20      VSsSemData *semData;
    3.21  
    3.22      //This is running in master, so use internal version
    3.23 -    newSlv = VMS_PI__create_slaveVP(fnPtr, initData);
    3.24 +    newSlv = VMS_int__create_slaveVP_with_wrapper(fnWrapper, fnPtr, initData);
    3.25  
    3.26      //task slaves differ from thread slaves by the settings in the taskStub
    3.27      //so, don't create task stub here, only create semData, which is same
    3.28 @@ -462,11 +462,11 @@
    3.29          semData = (VSsSemData *) newSlv->semanticData;
    3.30          semData->highestTransEntered = -1;
    3.31          semData->lastTransEntered = NULL;
    3.32 -        VMS_int__reset_slaveVP_to_TopLvlFn(newSlv, semReq->fnPtr,
    3.33 +        VMS_int__reset_slaveVP_to_TopLvlFnWrapper(newSlv, &VSs__run_thread, semReq->fnPtr,
    3.34                  semReq->initData);
    3.35      } else //no idle ones, create a new
    3.36      {
    3.37 -        newSlv = VSs__create_slave_helper(semReq->fnPtr, semReq->initData,
    3.38 +        newSlv = VSs__create_slave_helper(&VSs__run_thread, semReq->fnPtr, semReq->initData,
    3.39                  semEnv, semReq->coreToAssignOnto);
    3.40          semData = (VSsSemData *) newSlv->semanticData;
    3.41      }
     4.1 --- a/VSs_Request_Handlers.c	Wed May 15 15:25:55 2013 +0200
     4.2 +++ b/VSs_Request_Handlers.c	Fri May 17 17:49:49 2013 +0200
     4.3 @@ -1122,7 +1122,7 @@
     4.4      //get a new slave to be the slot slave
     4.5      newSlotSlv = readPrivQ(semEnv->freeExtraTaskSlvQ);
     4.6      if (newSlotSlv == NULL) {
     4.7 -        newSlotSlv = VSs__create_slave_helper(&idle_fn, NULL, semEnv, 0);
     4.8 +        newSlotSlv = VSs__create_slave_helper(&VSs__run_thread, &idle_fn, NULL, semEnv, 0);
     4.9           //just made a new extra task slave, so count it
    4.10        semEnv->numLiveExtraTaskSlvs += 1;
    4.11      }