changeset 17:f83fff8bd4b2 dev_expl_VP_and_DKU

finished instrumentation
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Fri, 31 Aug 2012 18:24:03 +0200
parents 1ffd5df22df9
children c9606ea7abc8
files Measurement/dependency.c Measurement/dependency.h VSs.c VSs.h VSs_PluginFns.c VSs_Request_Handlers.c
diffstat 6 files changed, 85 insertions(+), 20 deletions(-) [+]
line diff
     1.1 --- a/Measurement/dependency.c	Tue Aug 28 15:33:16 2012 +0200
     1.2 +++ b/Measurement/dependency.c	Fri Aug 31 18:24:03 2012 +0200
     1.3 @@ -42,6 +42,12 @@
     1.4      fprintf(dependency_file,"dataDep,%d,%d,%d,%d\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task);
     1.5  }
     1.6  
     1.7 +void print_war_dependency_to_file(void* _dep){
     1.8 +    Dependency* dep = (Dependency*) _dep;
     1.9 +    if(!dep) return;
    1.10 +    fprintf(dependency_file,"warDep,%d,%d,%d,%d\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task);
    1.11 +}
    1.12 +
    1.13  void print_singleton_dependency_to_file(void* _dep){
    1.14      Dependency* dep = (Dependency*) _dep;
    1.15      if(!dep) return;
     2.1 --- a/Measurement/dependency.h	Tue Aug 28 15:33:16 2012 +0200
     2.2 +++ b/Measurement/dependency.h	Fri Aug 31 18:24:03 2012 +0200
     2.3 @@ -44,6 +44,8 @@
     2.4  
     2.5  void print_data_dependency_to_file(void* _dep);
     2.6  
     2.7 +void print_war_dependency_to_file(void* _dep);
     2.8 +
     2.9  void print_singleton_dependency_to_file(void* _dep);
    2.10  
    2.11  void print_dyn_dependency_to_file(void* _dep);
     3.1 --- a/VSs.c	Tue Aug 28 15:33:16 2012 +0200
     3.2 +++ b/VSs.c	Fri Aug 31 18:24:03 2012 +0200
     3.3 @@ -263,6 +263,7 @@
     3.4     semanticEnv->dynDependenciesList = makeListOfArrays(sizeof(Dependency),128);
     3.5     semanticEnv->dataDependenciesList = makeListOfArrays(sizeof(Dependency),128);
     3.6     semanticEnv->singletonDependenciesList = makeListOfArrays(sizeof(Dependency),128);
     3.7 +   semanticEnv->warDependenciesList = makeListOfArrays(sizeof(Dependency),128);
     3.8     semanticEnv->ntonGroupsInfo = makePrivDynArrayOfSize((void***)&(semanticEnv->ntonGroups),8);
     3.9     
    3.10     semanticEnv->hwArcs = makeListOfArrays(sizeof(Dependency),128);
    3.11 @@ -309,6 +310,7 @@
    3.12          forAllInListOfArraysDo( semanticEnv->ctlDependenciesList, &print_ctl_dependency_to_file );
    3.13          forAllInListOfArraysDo( semanticEnv->dataDependenciesList, &print_data_dependency_to_file );
    3.14          forAllInListOfArraysDo( semanticEnv->singletonDependenciesList, &print_singleton_dependency_to_file );
    3.15 +        forAllInListOfArraysDo( semanticEnv->warDependenciesList, &print_war_dependency_to_file );
    3.16          forAllInDynArrayDo(semanticEnv->ntonGroupsInfo,&print_nton_to_file);
    3.17          //fprintf(output,"}\n");
    3.18          fflush(output);
    3.19 @@ -345,6 +347,7 @@
    3.20          forAllInListOfArraysDo( semanticEnv->dataDependenciesList, &print_data_dependency_to_file );
    3.21          forAllInListOfArraysDo( semanticEnv->singletonDependenciesList, &print_singleton_dependency_to_file );
    3.22          forAllInListOfArraysDo( semanticEnv->dynDependenciesList, &print_dyn_dependency_to_file );
    3.23 +        forAllInListOfArraysDo( semanticEnv->warDependenciesList, &print_war_dependency_to_file );
    3.24          forAllInListOfArraysDo( semanticEnv->hwArcs, &print_hw_dependency_to_file );
    3.25          //fprintf(output,"}\n");
    3.26          fflush(output);
    3.27 @@ -361,6 +364,9 @@
    3.28     freeListOfArrays(semanticEnv->ctlDependenciesList);
    3.29     freeListOfArrays(semanticEnv->dynDependenciesList);
    3.30     freeListOfArrays(semanticEnv->dataDependenciesList);
    3.31 +   freeListOfArrays(semanticEnv->warDependenciesList);
    3.32 +   freeListOfArrays(semanticEnv->singletonDependenciesList);
    3.33 +   freeListOfArrays(semanticEnv->hwArcs);
    3.34     
    3.35     #endif
    3.36  #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS    
     4.1 --- a/VSs.h	Tue Aug 28 15:33:16 2012 +0200
     4.2 +++ b/VSs.h	Fri Aug 31 18:24:03 2012 +0200
     4.3 @@ -63,8 +63,8 @@
     4.4     int32        numEnabledNonDoneReaders;
     4.5     PrivQueueStruc *waitersQ;
     4.6  #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
     4.7 -   int lastWriterVP;
     4.8 -   int lastWriterTask;
     4.9 +   Unit lastWriter;
    4.10 +   ListOfArrays* readersSinceLastWriter;
    4.11  #endif
    4.12   }
    4.13  VSsPointerEntry;
    4.14 @@ -83,6 +83,9 @@
    4.15     bool32       isWaitingForChildTasksToEnd;
    4.16     bool32       isWaitingForChildThreadsToEnd;
    4.17     bool32       isEnded;
    4.18 +   #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    4.19 +   Unit parentUnit;
    4.20 +   #endif
    4.21   }
    4.22  VSsTaskStub;
    4.23  
    4.24 @@ -115,8 +118,9 @@
    4.25     int32           hasBeenStarted;
    4.26     int32           hasFinished;
    4.27     PrivQueueStruc *waitQ;
    4.28 -   int executingVp;
    4.29 -   int executingTask;
    4.30 +#ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    4.31 +   Unit executingUnit;
    4.32 +#endif
    4.33   }
    4.34  VSsSingleton;
    4.35  
    4.36 @@ -204,6 +208,7 @@
    4.37     ListOfArrays* ctlDependenciesList;
    4.38     ListOfArrays* commDependenciesList;
    4.39     ListOfArrays* dataDependenciesList;
    4.40 +   ListOfArrays* warDependenciesList;
    4.41     NtoN** ntonGroups;
    4.42     PrivDynArrayInfo* ntonGroupsInfo;
    4.43     ListOfArrays* dynDependenciesList;
     5.1 --- a/VSs_PluginFns.c	Tue Aug 28 15:33:16 2012 +0200
     5.2 +++ b/VSs_PluginFns.c	Fri Aug 31 18:24:03 2012 +0200
     5.3 @@ -89,7 +89,14 @@
     5.4          semData->taskStub = newTaskStub;
     5.5          newTaskStub->slaveAssignedTo = returnSlv;
     5.6          semData->needsTaskAssigned = FALSE;
     5.7 -      
     5.8 +#ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
     5.9 +        Dependency newd;
    5.10 +        newd.from_vp = newTaskStub->parentUnit.vp;
    5.11 +        newd.from_task = newTaskStub->parentUnit.task;
    5.12 +        newd.to_vp = returnSlv->slaveID;
    5.13 +        newd.to_task = returnSlv->assignCount+1;
    5.14 +        addToListOfArrays(Dependency, newd, semEnv->commDependenciesList);
    5.15 +#endif
    5.16           //have work, so reset Done flag, if was set
    5.17          if (semEnv->coreIsDone[coreNum] == TRUE) //reads are higher perf
    5.18              semEnv->coreIsDone[coreNum] = FALSE; //don't just write always
     6.1 --- a/VSs_Request_Handlers.c	Tue Aug 28 15:33:16 2012 +0200
     6.2 +++ b/VSs_Request_Handlers.c	Fri Aug 31 18:24:03 2012 +0200
     6.3 @@ -72,8 +72,9 @@
     6.4      newEntry->numEnabledNonDoneReaders = 0;
     6.5      newEntry->waitersQ = makePrivQ();
     6.6  #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
     6.7 -    newEntry->lastWriterVP = 0;
     6.8 -    newEntry->lastWriterTask = 0;
     6.9 +    newEntry->lastWriter.vp = 0;
    6.10 +    newEntry->lastWriter.task = 0;
    6.11 +    newEntry->readersSinceLastWriter = makeListOfArrays(sizeof(Unit),128);
    6.12  #endif
    6.13      return newEntry;
    6.14  }
    6.15 @@ -253,6 +254,10 @@
    6.16              parentSemData = (VSsSemData*) semReq->callingSlv->semanticData;
    6.17      taskStub->parentTaskStub = (void*) parentSemData->taskStub;
    6.18      parentSemData->taskStub->numLiveChildTasks += 1;
    6.19 +#ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    6.20 +    taskStub->parentUnit.vp = semReq->callingSlv->slaveID;
    6.21 +    taskStub->parentUnit.task = semReq->callingSlv->assignCount;
    6.22 +#endif
    6.23  
    6.24           //DEBUG__printf3(dbgRqstHdlr,"Submit req from slaveID: %d, from task: %d, for task: %d", semReq->callingSlv->slaveID, parentSemData->taskStub->taskID[1], taskStub->taskID[1])
    6.25         if(semReq->taskID) { DEBUG__printf2(dbgRqstHdlr,"Submit req from slaveID: %d, for task: %d", semReq->callingSlv->slaveID, taskStub->taskID[1]) }
    6.26 @@ -380,7 +385,7 @@
    6.27      endingTaskType = endingTaskStub->taskType;
    6.28      ptrEntries = endingTaskStub->ptrEntries; //saved in stub when create
    6.29  
    6.30 -    if(semReq->taskID) {   DEBUG__printf2(dbgRqstHdlr,"EndTask req from slaveID: %d, task: %d",semReq->callingSlv->slaveID, endingTaskStub->taskID[1]) }
    6.31 +    if(endingTaskStub->taskID) {   DEBUG__printf2(dbgRqstHdlr,"EndTask req from slaveID: %d, task: %d",semReq->callingSlv->slaveID, endingTaskStub->taskID[1]) }
    6.32      else {DEBUG__printf1(dbgRqstHdlr,"EndTask req from slaveID: %d",semReq->callingSlv->slaveID)}
    6.33            
    6.34      //Check if parent was waiting on this task
    6.35 @@ -437,10 +442,14 @@
    6.36            * the hash-entry. */
    6.37              ptrEntry->numEnabledNonDoneReaders -= 1;
    6.38  #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    6.39 -            if (ptrEntry->lastWriterVP) {
    6.40 +            Unit u;
    6.41 +            u.vp = semReq->callingSlv->slaveID;
    6.42 +            u.task=semReq->callingSlv->assignCount;
    6.43 +            addToListOfArrays(Unit,u,ptrEntry->readersSinceLastWriter);
    6.44 +            if (ptrEntry->lastWriter.vp) {
    6.45                  Dependency newd;
    6.46 -                newd.from_vp = ptrEntry->lastWriterVP;
    6.47 -                newd.from_task = ptrEntry->lastWriterTask;
    6.48 +                newd.from_vp = ptrEntry->lastWriter.vp;
    6.49 +                newd.from_task = ptrEntry->lastWriter.task;
    6.50                  newd.to_vp = semReq->callingSlv->slaveID;
    6.51                  newd.to_task = semReq->callingSlv->assignCount;
    6.52                  addToListOfArrays(Dependency, newd, semEnv->dataDependenciesList);
    6.53 @@ -471,9 +480,37 @@
    6.54              }
    6.55          } else /*the ending task is a writer of this arg*/ { /*clear the enabled non-finished writer flag of the hash-entry.*/
    6.56              ptrEntry->hasEnabledNonFinishedWriter = FALSE;
    6.57 -            #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    6.58 -            ptrEntry->lastWriterVP = semReq->callingSlv->slaveID;
    6.59 -            ptrEntry->lastWriterTask = semReq->callingSlv->assignCount;
    6.60 +#ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    6.61 +            {
    6.62 +                int n,i;
    6.63 +                int num_full = ptrEntry->readersSinceLastWriter->next_free_index / ptrEntry->readersSinceLastWriter->num_entries_per_fragment; //!\\ != list->dim1info->numInArray-1
    6.64 +                for (n = 0; n < num_full; n++) {
    6.65 +                    Unit* fragment = (ptrEntry->readersSinceLastWriter->dim1)[n];
    6.66 +                    for (i=0; i<ptrEntry->readersSinceLastWriter->num_entries_per_fragment;++i) {
    6.67 +                        Dependency newd;
    6.68 +                        newd.from_vp = fragment[i].vp;
    6.69 +                        newd.from_task = fragment[i].task;
    6.70 +                        newd.to_vp = semReq->callingSlv->slaveID;
    6.71 +                        newd.to_task = semReq->callingSlv->assignCount;
    6.72 +                        addToListOfArrays(Dependency, newd, semEnv->warDependenciesList);
    6.73 +                    }
    6.74 +                }
    6.75 +                int offset_in_last = ptrEntry->readersSinceLastWriter->next_free_index % ptrEntry->readersSinceLastWriter->num_entries_per_fragment;
    6.76 +                if (n < ptrEntry->readersSinceLastWriter->dim1info->numInArray) {
    6.77 +                    Unit* fragment = (ptrEntry->readersSinceLastWriter->dim1)[n];
    6.78 +                    for (i=0; i < offset_in_last;++i) {
    6.79 +                        Dependency newd;
    6.80 +                        newd.from_vp = fragment[i].vp;
    6.81 +                        newd.from_task = fragment[i].task;
    6.82 +                        newd.to_vp = semReq->callingSlv->slaveID;
    6.83 +                        newd.to_task = semReq->callingSlv->assignCount;
    6.84 +                        addToListOfArrays(Dependency, newd, semEnv->warDependenciesList);
    6.85 +                    }
    6.86 +                }
    6.87 +            }
    6.88 +            clearListOfArrays(ptrEntry->readersSinceLastWriter);
    6.89 +            ptrEntry->lastWriter.vp = semReq->callingSlv->slaveID;
    6.90 +            ptrEntry->lastWriter.task = semReq->callingSlv->assignCount;
    6.91              #endif
    6.92  
    6.93              /*Take the next waiter from the hash-entry's Q.*/
    6.94 @@ -1003,8 +1040,8 @@
    6.95          reqstingSlv->dataRetFromReq = singleton->endInstrAddr;
    6.96  #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    6.97          Dependency newd;
    6.98 -        newd.from_vp = singleton->executingVp;
    6.99 -        newd.from_task = singleton->executingTask;
   6.100 +        newd.from_vp = singleton->executingUnit.vp;
   6.101 +        newd.from_task = singleton->executingUnit.task;
   6.102          newd.to_vp = reqstingSlv->slaveID;
   6.103          newd.to_task = reqstingSlv->assignCount + 1;
   6.104          addToListOfArrays(Dependency, newd, semEnv->singletonDependenciesList);
   6.105 @@ -1063,8 +1100,10 @@
   6.106      }
   6.107  
   6.108      singleton->hasFinished = TRUE;
   6.109 -    singleton->executingVp = requestingSlv->slaveID;
   6.110 -    singleton->executingTask = requestingSlv->assignCount;
   6.111 +#ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
   6.112 +    singleton->executingUnit.vp = requestingSlv->slaveID;
   6.113 +    singleton->executingUnit.task = requestingSlv->assignCount;
   6.114 +#endif
   6.115      waitQ = singleton->waitQ;
   6.116      numWaiting = numInPrivQ(waitQ);
   6.117      for (i = 0; i < numWaiting; i++) { //they will resume inside start singleton, then jmp to end singleton
   6.118 @@ -1072,8 +1111,8 @@
   6.119          resumingSlv->dataRetFromReq = singleton->endInstrAddr;
   6.120  #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
   6.121          Dependency newd;
   6.122 -        newd.from_vp = singleton->executingVp;
   6.123 -        newd.from_task = singleton->executingTask;
   6.124 +        newd.from_vp = singleton->executingUnit.vp;
   6.125 +        newd.from_task = singleton->executingUnit.task;
   6.126          newd.to_vp = resumingSlv->slaveID;
   6.127          newd.to_task = resumingSlv->assignCount + 1;
   6.128          addToListOfArrays(Dependency, newd, semEnv->singletonDependenciesList);