# HG changeset patch # User Nina Engelhardt # Date 1334686474 -7200 # Node ID b73e4a6f349749a22ff7058d82f63d08a28e6427 # Parent f20b4d9d3086988d2f5f02af659a5a500d3a3d4d add dependency tracking for singleton diff -r f20b4d9d3086 -r b73e4a6f3497 SSR.c --- a/SSR.c Mon Apr 16 18:25:31 2012 +0200 +++ b/SSR.c Tue Apr 17 20:14:34 2012 +0200 @@ -214,6 +214,7 @@ semanticEnv->ctlDependenciesList = makeListOfArrays(sizeof(Dependency),128); semanticEnv->commDependenciesList = makeListOfArrays(sizeof(Dependency),128); semanticEnv->dynDependenciesList = makeListOfArrays(sizeof(Dependency),128); + semanticEnv->singletonDependenciesList = makeListOfArrays(sizeof(Dependency),128); semanticEnv->ntonGroupsInfo = makePrivDynArrayOfSize((void***)&(semanticEnv->ntonGroups),8); semanticEnv->hwArcs = makeListOfArrays(sizeof(Dependency),128); @@ -322,6 +323,7 @@ forAllInListOfArraysDo( semanticEnv->commDependenciesList, &print_comm_dependency_to_file ); forAllInListOfArraysDo( semanticEnv->ctlDependenciesList, &print_ctl_dependency_to_file ); forAllInListOfArraysDo( semanticEnv->dynDependenciesList, &print_dyn_dependency_to_file ); + forAllInListOfArraysDo( semanticEnv->singletonDependenciesList, &print_singleton_dependency_to_file ); forAllInListOfArraysDo( semanticEnv->hwArcs, &print_hw_dependency_to_file ); //fprintf(output,"}\n"); fflush(output); @@ -337,7 +339,7 @@ freeListOfArrays(semanticEnv->commDependenciesList); freeListOfArrays(semanticEnv->ctlDependenciesList); freeListOfArrays(semanticEnv->dynDependenciesList); - + freeListOfArrays(semanticEnv->singletonDependenciesList); #endif #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS for(n=0;n<255;n++) diff -r f20b4d9d3086 -r b73e4a6f3497 SSR.h --- a/SSR.h Mon Apr 16 18:25:31 2012 +0200 +++ b/SSR.h Tue Apr 17 20:14:34 2012 +0200 @@ -53,6 +53,8 @@ int32 hasBeenStarted; int32 hasFinished; PrivQueueStruc *waitQ; + int executingVp; + int executingTask; } SSRSingleton; @@ -121,6 +123,7 @@ NtoN** ntonGroups; PrivDynArrayInfo* ntonGroupsInfo; ListOfArrays* dynDependenciesList; + ListOfArrays* singletonDependenciesList; Unit last_in_slot[NUM_CORES * NUM_ANIM_SLOTS]; ListOfArrays* hwArcs; int lastReqType; diff -r f20b4d9d3086 -r b73e4a6f3497 SSR_Request_Handlers.c --- a/SSR_Request_Handlers.c Mon Apr 16 18:25:31 2012 +0200 +++ b/SSR_Request_Handlers.c Tue Apr 17 20:14:34 2012 +0200 @@ -458,6 +458,14 @@ if( singleton->hasFinished ) { //the code that sets the flag to true first sets the end instr addr reqstingPr->dataRetFromReq = singleton->endInstrAddr; + #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC + Dependency newd; + newd.from_vp = singleton->executingVp; + newd.from_task = singleton->executingTask; + newd.to_vp = reqstingPr->slaveID; + newd.to_task = reqstingPr->assignCount +1; + addToListOfArrays(Dependency,newd,semEnv->singletonDependenciesList); + #endif resume_slaveVP( reqstingPr, semEnv ); return; } @@ -517,12 +525,22 @@ } singleton->hasFinished = TRUE; + singleton->executingVp = requestingPr->slaveID; + singleton->executingTask = requestingPr->assignCount; waitQ = singleton->waitQ; numWaiting = numInPrivQ( waitQ ); for( i = 0; i < numWaiting; i++ ) { //they will resume inside start singleton, then jmp to end singleton resumingPr = readPrivQ( waitQ ); resumingPr->dataRetFromReq = singleton->endInstrAddr; + #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC + Dependency newd; + newd.from_vp = singleton->executingVp; + newd.from_task = singleton->executingTask; + newd.to_vp = resumingPr->slaveID; + newd.to_task = resumingPr->assignCount +1; + addToListOfArrays(Dependency,newd,semEnv->singletonDependenciesList); + #endif resume_slaveVP( resumingPr, semEnv ); } diff -r f20b4d9d3086 -r b73e4a6f3497 dependency.c --- a/dependency.c Mon Apr 16 18:25:31 2012 +0200 +++ b/dependency.c Tue Apr 17 20:14:34 2012 +0200 @@ -42,6 +42,12 @@ fprintf(dependency_file,"dynDep,%d,%d,%d,%d\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task); } +void print_singleton_dependency_to_file(void* _dep){ + Dependency* dep = (Dependency*) _dep; + if(!dep) return; + fprintf(dependency_file,"singDep,%d,%d,%d,%d\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task); +} + void print_hw_dependency_to_file(void* _dep){ Dependency* dep = (Dependency*) _dep; if(!dep) return; diff -r f20b4d9d3086 -r b73e4a6f3497 dependency.h --- a/dependency.h Mon Apr 16 18:25:31 2012 +0200 +++ b/dependency.h Tue Apr 17 20:14:34 2012 +0200 @@ -46,6 +46,8 @@ void print_dyn_dependency_to_file(void* _dep); +void print_singleton_dependency_to_file(void* _dep); + void print_hw_dependency_to_file(void* _dep); void print_dependency_to_file(void* dep);