changeset 74:b73e4a6f3497 Holistic_Model

add dependency tracking for singleton
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Tue, 17 Apr 2012 20:14:34 +0200
parents f20b4d9d3086
children 52a02c918db8
files SSR.c SSR.h SSR_Request_Handlers.c dependency.c dependency.h
diffstat 5 files changed, 32 insertions(+), 1 deletions(-) [+]
line diff
     1.1 --- a/SSR.c	Mon Apr 16 18:25:31 2012 +0200
     1.2 +++ b/SSR.c	Tue Apr 17 20:14:34 2012 +0200
     1.3 @@ -214,6 +214,7 @@
     1.4     semanticEnv->ctlDependenciesList = makeListOfArrays(sizeof(Dependency),128);
     1.5     semanticEnv->commDependenciesList = makeListOfArrays(sizeof(Dependency),128);
     1.6     semanticEnv->dynDependenciesList = makeListOfArrays(sizeof(Dependency),128);
     1.7 +   semanticEnv->singletonDependenciesList = makeListOfArrays(sizeof(Dependency),128);
     1.8     semanticEnv->ntonGroupsInfo = makePrivDynArrayOfSize((void***)&(semanticEnv->ntonGroups),8);
     1.9     
    1.10     semanticEnv->hwArcs = makeListOfArrays(sizeof(Dependency),128);
    1.11 @@ -322,6 +323,7 @@
    1.12          forAllInListOfArraysDo( semanticEnv->commDependenciesList, &print_comm_dependency_to_file );
    1.13          forAllInListOfArraysDo( semanticEnv->ctlDependenciesList, &print_ctl_dependency_to_file );
    1.14          forAllInListOfArraysDo( semanticEnv->dynDependenciesList, &print_dyn_dependency_to_file );
    1.15 +        forAllInListOfArraysDo( semanticEnv->singletonDependenciesList, &print_singleton_dependency_to_file );
    1.16          forAllInListOfArraysDo( semanticEnv->hwArcs, &print_hw_dependency_to_file );
    1.17          //fprintf(output,"}\n");
    1.18          fflush(output);
    1.19 @@ -337,7 +339,7 @@
    1.20     freeListOfArrays(semanticEnv->commDependenciesList);
    1.21     freeListOfArrays(semanticEnv->ctlDependenciesList);
    1.22     freeListOfArrays(semanticEnv->dynDependenciesList);
    1.23 -   
    1.24 +   freeListOfArrays(semanticEnv->singletonDependenciesList); 
    1.25     #endif
    1.26  #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS    
    1.27      for(n=0;n<255;n++)
     2.1 --- a/SSR.h	Mon Apr 16 18:25:31 2012 +0200
     2.2 +++ b/SSR.h	Tue Apr 17 20:14:34 2012 +0200
     2.3 @@ -53,6 +53,8 @@
     2.4     int32           hasBeenStarted;
     2.5     int32           hasFinished;
     2.6     PrivQueueStruc *waitQ;
     2.7 +   int executingVp;
     2.8 +   int executingTask;
     2.9   }
    2.10  SSRSingleton;
    2.11  
    2.12 @@ -121,6 +123,7 @@
    2.13     NtoN** ntonGroups;
    2.14     PrivDynArrayInfo* ntonGroupsInfo;
    2.15     ListOfArrays* dynDependenciesList;
    2.16 +   ListOfArrays* singletonDependenciesList;
    2.17     Unit last_in_slot[NUM_CORES * NUM_ANIM_SLOTS];
    2.18     ListOfArrays* hwArcs;
    2.19     int lastReqType;
     3.1 --- a/SSR_Request_Handlers.c	Mon Apr 16 18:25:31 2012 +0200
     3.2 +++ b/SSR_Request_Handlers.c	Tue Apr 17 20:14:34 2012 +0200
     3.3 @@ -458,6 +458,14 @@
     3.4     if( singleton->hasFinished )
     3.5      {    //the code that sets the flag to true first sets the end instr addr
     3.6        reqstingPr->dataRetFromReq = singleton->endInstrAddr;
     3.7 +      #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
     3.8 +        Dependency newd;
     3.9 +        newd.from_vp = singleton->executingVp;
    3.10 +        newd.from_task = singleton->executingTask;
    3.11 +        newd.to_vp = reqstingPr->slaveID;
    3.12 +        newd.to_task = reqstingPr->assignCount +1;
    3.13 +        addToListOfArrays(Dependency,newd,semEnv->singletonDependenciesList);    
    3.14 +      #endif  
    3.15        resume_slaveVP( reqstingPr, semEnv );
    3.16        return;
    3.17      }
    3.18 @@ -517,12 +525,22 @@
    3.19      }
    3.20  
    3.21     singleton->hasFinished = TRUE;
    3.22 +   singleton->executingVp = requestingPr->slaveID;
    3.23 +   singleton->executingTask = requestingPr->assignCount;
    3.24     waitQ = singleton->waitQ;
    3.25     numWaiting = numInPrivQ( waitQ );
    3.26     for( i = 0; i < numWaiting; i++ )
    3.27      {    //they will resume inside start singleton, then jmp to end singleton
    3.28        resumingPr = readPrivQ( waitQ );
    3.29        resumingPr->dataRetFromReq = singleton->endInstrAddr;
    3.30 +      #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    3.31 +        Dependency newd;
    3.32 +        newd.from_vp = singleton->executingVp;
    3.33 +        newd.from_task = singleton->executingTask;
    3.34 +        newd.to_vp = resumingPr->slaveID;
    3.35 +        newd.to_task = resumingPr->assignCount +1;
    3.36 +        addToListOfArrays(Dependency,newd,semEnv->singletonDependenciesList);    
    3.37 +      #endif 
    3.38        resume_slaveVP( resumingPr, semEnv );
    3.39      }
    3.40  
     4.1 --- a/dependency.c	Mon Apr 16 18:25:31 2012 +0200
     4.2 +++ b/dependency.c	Tue Apr 17 20:14:34 2012 +0200
     4.3 @@ -42,6 +42,12 @@
     4.4      fprintf(dependency_file,"dynDep,%d,%d,%d,%d\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task);
     4.5  }
     4.6  
     4.7 +void print_singleton_dependency_to_file(void* _dep){
     4.8 +    Dependency* dep = (Dependency*) _dep;
     4.9 +    if(!dep) return;
    4.10 +    fprintf(dependency_file,"singDep,%d,%d,%d,%d\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task);
    4.11 +}
    4.12 +
    4.13  void print_hw_dependency_to_file(void* _dep){
    4.14      Dependency* dep = (Dependency*) _dep;
    4.15      if(!dep) return;
     5.1 --- a/dependency.h	Mon Apr 16 18:25:31 2012 +0200
     5.2 +++ b/dependency.h	Tue Apr 17 20:14:34 2012 +0200
     5.3 @@ -46,6 +46,8 @@
     5.4  
     5.5  void print_dyn_dependency_to_file(void* _dep);
     5.6  
     5.7 +void print_singleton_dependency_to_file(void* _dep);
     5.8 +
     5.9  void print_hw_dependency_to_file(void* _dep);
    5.10  
    5.11  void print_dependency_to_file(void* dep);