Mercurial > cgi-bin > hgwebdir.cgi > VMS > VMS_Implementations > VSs_impls > VSs__MC_shared_impl
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 }
