Mercurial > cgi-bin > hgwebdir.cgi > VMS > VMS_Implementations > VSs_impls > VSs__MC_shared_impl
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);