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 );