Mercurial > cgi-bin > hgwebdir.cgi > VMS > VMS_Implementations > VSs_impls > VSs__MC_shared_impl
changeset 44:7e7f37aa2f61 dev_expl_VP_and_DKU
fix barrier
author | Nina Engelhardt <nengel@mailbox.tu-berlin.de> |
---|---|
date | Tue, 11 Jun 2013 15:40:51 +0200 |
parents | 8733d1299c3a |
children | 19114b7a2357 |
files | VSs.c VSs_PluginFns.c VSs_Request_Handlers.h |
diffstat | 3 files changed, 16 insertions(+), 14 deletions(-) [+] |
line diff
1.1 --- a/VSs.c Tue Jun 11 15:37:02 2013 +0200 1.2 +++ b/VSs.c Tue Jun 11 15:40:51 2013 +0200 1.3 @@ -212,7 +212,6 @@ 1.4 1.5 //semanticEnv->shutdownInitiated = FALSE; 1.6 semanticEnv->coreIsDone = VMS_int__malloc( NUM_CORES * sizeof( bool32 ) ); 1.7 - semanticEnv->numCoresDone = 0; 1.8 //For each animation slot, there is an idle slave, and an initial 1.9 // slave assigned as the current-task-slave. Create them here. 1.10 SlaveVP *idleSlv, *slotTaskSlv;
2.1 --- a/VSs_PluginFns.c Tue Jun 11 15:37:02 2013 +0200 2.2 +++ b/VSs_PluginFns.c Tue Jun 11 15:40:51 2013 +0200 2.3 @@ -139,7 +139,7 @@ 2.4 if (allDone) { //means no cores have work, and none can generate more 2.5 if(!isEmptyPrivQ(semEnv->barrierQ)) { 2.6 while(!isEmptyPrivQ(semEnv->barrierQ)){ 2.7 - resume_slaveVP(readPrivQ(semEnv->barrierQ)); 2.8 + resume_slaveVP(readPrivQ(semEnv->barrierQ),semEnv); 2.9 } 2.10 semEnv->coreIsDone[coreNum]=FALSE; 2.11 returnSlv = readPrivQ(semEnv->slavesReadyToResumeQ); 2.12 @@ -150,18 +150,18 @@ 2.13 } 2.14 #endif 2.15 } 2.16 - } else if (_VMSMasterEnv->numAnimatedSlaves == 0){ 2.17 - if(!isEmptyPrivQ(semEnv->barrierQ)) { 2.18 - while(!isEmptyPrivQ(semEnv->barrierQ)){ 2.19 - resume_slaveVP(readPrivQ(semEnv->barrierQ)); 2.20 - } 2.21 - semEnv->coreIsDone[coreNum]=FALSE; 2.22 - returnSlv = readPrivQ(semEnv->slavesReadyToResumeQ); 2.23 - goto ReturnTheSlv; 2.24 - } else { 2.25 - DEBUG__printf(TRUE,"Deadlock detected"); 2.26 - _VMSMasterEnv->shutdownInitiated = TRUE; 2.27 - } 2.28 + } else if (_VMSMasterEnv->numAnimatedSlaves == 0) { 2.29 + if (!isEmptyPrivQ(semEnv->barrierQ)) { 2.30 + while (!isEmptyPrivQ(semEnv->barrierQ)) { 2.31 + resume_slaveVP(readPrivQ(semEnv->barrierQ),semEnv); 2.32 + } 2.33 + semEnv->coreIsDone[coreNum] = FALSE; 2.34 + returnSlv = readPrivQ(semEnv->slavesReadyToResumeQ); 2.35 + goto ReturnTheSlv; 2.36 + } else { 2.37 + DEBUG__printf(TRUE, "Deadlock detected"); 2.38 + _VMSMasterEnv->shutdownInitiated = TRUE; 2.39 + } 2.40 } 2.41 //return NULL.. no task and none to resume 2.42 returnSlv = NULL;
3.1 --- a/VSs_Request_Handlers.h Tue Jun 11 15:37:02 2013 +0200 3.2 +++ b/VSs_Request_Handlers.h Tue Jun 11 15:40:51 2013 +0200 3.3 @@ -59,6 +59,9 @@ 3.4 handleEndDataSingleton( VSsSemReq *semReq, SlaveVP *requestingSlv, 3.5 VSsSemEnv *semEnv ); 3.6 void 3.7 +handleBarrier( VSsSemReq *semReq, SlaveVP *requestingSlv, 3.8 + VSsSemEnv *semEnv ); 3.9 +void 3.10 free_task_stub( VSsTaskStub *stubToFree ); 3.11 void 3.12 replaceWithNewSlotSlvIfNeeded( SlaveVP *requestingSlv, VSsSemEnv *semEnv );