Mercurial > cgi-bin > hgwebdir.cgi > VMS > VMS_Implementations > SSR_impls > SSR__MC_shared_impl
changeset 48:593fe0543a22 perf_counters
added NtoN construct recording (in send/recv_type for now)
author | Nina Engelhardt <nengel@mailbox.tu-berlin.de> |
---|---|
date | Wed, 21 Dec 2011 16:53:22 +0100 |
parents | 23bcca1c3687 |
children | 70d24e2343bb |
files | SSR.h SSR_PluginFns.c SSR_Request_Handlers.c SSR_lib.c dependency.c dependency.h |
diffstat | 6 files changed, 85 insertions(+), 4 deletions(-) [+] |
line diff
1.1 --- a/SSR.h Tue Dec 20 14:42:56 2011 +0100 1.2 +++ b/SSR.h Wed Dec 21 16:53:22 2011 +0100 1.3 @@ -109,6 +109,8 @@ 1.4 ListOfArrays* unitList; 1.5 ListOfArrays* ctlDependenciesList; 1.6 ListOfArrays* commDependenciesList; 1.7 + NtoN** ntonGroups; 1.8 + PrivDynArrayInfo* ntonGroupsInfo; 1.9 //NtoN structure? 1.10 #endif 1.11
2.1 --- a/SSR_PluginFns.c Tue Dec 20 14:42:56 2011 +0100 2.2 +++ b/SSR_PluginFns.c Wed Dec 21 16:53:22 2011 +0100 2.3 @@ -215,6 +215,7 @@ 2.4 newd.from_task = requestingPr->numTimesScheduled; 2.5 newd.to_vp = newPr->procrID; 2.6 newd.to_task = 0; 2.7 + //addToListOfArraysDependency(newd,semEnv->commDependenciesList); 2.8 addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); 2.9 #endif 2.10 2.11 @@ -240,11 +241,13 @@ 2.12 newu.vp = procr->procrID; 2.13 newu.task = procr->numTimesScheduled + 1; 2.14 addToListOfArrays(Unit,newu,semEnv->unitList); 2.15 + //addToListOfArraysUnit(newu,semEnv->unitList); 2.16 Dependency newd; 2.17 newd.from_vp = procr->procrID; 2.18 newd.from_task = procr->numTimesScheduled; 2.19 newd.to_vp = procr->procrID; 2.20 newd.to_task = procr->numTimesScheduled + 1; 2.21 + //addToListOfArraysDependency(newd,semEnv->ctlDependenciesList); 2.22 addToListOfArrays(Dependency, newd ,semEnv->ctlDependenciesList); 2.23 #endif 2.24 writePrivQ( procr, semEnv->readyVPQs[ procr->coreAnimatedBy] );
3.1 --- a/SSR_Request_Handlers.c Tue Dec 20 14:42:56 2011 +0100 3.2 +++ b/SSR_Request_Handlers.c Wed Dec 21 16:53:22 2011 +0100 3.3 @@ -132,7 +132,22 @@ 3.4 newd.from_task = sendPr->numTimesScheduled; 3.5 newd.to_vp = receivePr->procrID; 3.6 newd.to_task = receivePr->numTimesScheduled +1; 3.7 - addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); 3.8 + //(newd,semEnv->commDependenciesList); 3.9 + //addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); 3.10 + int32 groupId = semReq->msgType; 3.11 + if(semEnv->ntonGroupsInfo->numInArray <= groupId){ 3.12 + makeHighestDynArrayIndexBeAtLeast(semEnv->ntonGroupsInfo, groupId); 3.13 + } 3.14 + if(semEnv->ntonGroups[groupId] == NULL){ 3.15 + semEnv->ntonGroups[groupId] = new_NtoN(groupId); 3.16 + } 3.17 + Unit u; 3.18 + u.vp = sendPr->procrID; 3.19 + u.task = sendPr->numTimesScheduled; 3.20 + addToListOfArrays(Unit,u,semEnv->ntonGroups[groupId]->senders); 3.21 + u.vp = receivePr->procrID; 3.22 + u.task = receivePr->numTimesScheduled; 3.23 + addToListOfArrays(Unit,u,semEnv->ntonGroups[groupId]->receivers); 3.24 #endif 3.25 3.26 //waiting request is a receive, so it pairs to this send 3.27 @@ -197,6 +212,7 @@ 3.28 newd.from_task = sendPr->numTimesScheduled; 3.29 newd.to_vp = receivePr->procrID; 3.30 newd.to_task = receivePr->numTimesScheduled +1; 3.31 + //addToListOfArraysDependency(newd,semEnv->commDependenciesList); 3.32 addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); 3.33 #endif 3.34 //First, remove the waiting receive request from the entry 3.35 @@ -305,7 +321,22 @@ 3.36 newd.from_task = sendPr->numTimesScheduled; 3.37 newd.to_vp = receivePr->procrID; 3.38 newd.to_task = receivePr->numTimesScheduled +1; 3.39 - addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); 3.40 + //addToListOfArraysDependency(newd,semEnv->commDependenciesList); 3.41 + //addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); 3.42 + int32 groupId = semReq->msgType; 3.43 + if(semEnv->ntonGroupsInfo->numInArray <= groupId){ 3.44 + makeHighestDynArrayIndexBeAtLeast(semEnv->ntonGroupsInfo, groupId); 3.45 + } 3.46 + if(semEnv->ntonGroups[groupId] == NULL){ 3.47 + semEnv->ntonGroups[groupId] = new_NtoN(groupId); 3.48 + } 3.49 + Unit u; 3.50 + u.vp = sendPr->procrID; 3.51 + u.task = sendPr->numTimesScheduled; 3.52 + addToListOfArrays(Unit,u,semEnv->ntonGroups[groupId]->senders); 3.53 + u.vp = receivePr->procrID; 3.54 + u.task = receivePr->numTimesScheduled; 3.55 + addToListOfArrays(Unit,u,semEnv->ntonGroups[groupId]->receivers); 3.56 #endif 3.57 3.58 resume_procr( sendPr, semEnv ); 3.59 @@ -350,6 +381,7 @@ 3.60 newd.from_task = sendPr->numTimesScheduled; 3.61 newd.to_vp = receivePr->procrID; 3.62 newd.to_task = receivePr->numTimesScheduled +1; 3.63 + //addToListOfArraysDependency(newd,semEnv->commDependenciesList); 3.64 addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); 3.65 #endif 3.66 //For from-to, should only ever be a single reqst waiting tobe paird
4.1 --- a/SSR_lib.c Tue Dec 20 14:42:56 2011 +0100 4.2 +++ b/SSR_lib.c Wed Dec 21 16:53:22 2011 +0100 4.3 @@ -210,11 +210,10 @@ 4.4 _VMSMasterEnv->semanticEnv = semanticEnv; 4.5 4.6 #ifdef OBSERVE_UCC 4.7 - //TODO: set up unit recording structure 4.8 semanticEnv->unitList = makeListOfArrays(sizeof(Unit),128); 4.9 semanticEnv->ctlDependenciesList = makeListOfArrays(sizeof(Dependency),128); 4.10 semanticEnv->commDependenciesList = makeListOfArrays(sizeof(Dependency),128); 4.11 - //TODO: set up N:N recording structure 4.12 + semanticEnv->ntonGroupsInfo = makePrivDynArrayOfSize((void***)&(semanticEnv->ntonGroups),8); 4.13 #endif 4.14 4.15 //create the ready queue, hash tables used for pairing send to receive 4.16 @@ -284,8 +283,12 @@ 4.17 forAllInListOfArraysDo(semanticEnv->unitList, &print_unit_to_file); 4.18 forAllInListOfArraysDo( semanticEnv->commDependenciesList, &print_comm_dependency_to_file ); 4.19 forAllInListOfArraysDo( semanticEnv->ctlDependenciesList, &print_ctl_dependency_to_file ); 4.20 + forAllInDynArrayDo(semanticEnv->ntonGroupsInfo,&print_nton_to_file); 4.21 //fprintf(output,"}\n"); 4.22 fflush(output); 4.23 + freeListOfArrays(semanticEnv->unitList); 4.24 + freeListOfArrays(semanticEnv->commDependenciesList); 4.25 + freeListOfArrays(semanticEnv->ctlDependenciesList); 4.26 } else 4.27 printf("Opening Dependencies file failed. Please check that folder \"counters\" exists in run directory and has write permission.\n"); 4.28 } else {
5.1 --- a/dependency.c Tue Dec 20 14:42:56 2011 +0100 5.2 +++ b/dependency.c Wed Dec 21 16:53:22 2011 +0100 5.3 @@ -12,26 +12,55 @@ 5.4 return newDep; 5.5 } 5.6 5.7 +NtoN* new_NtoN(int id){ 5.8 + NtoN* newn = (NtoN*) VMS__malloc(sizeof(NtoN)); 5.9 + newn->id = id; 5.10 + newn->senders = makeListOfArrays(sizeof(Unit), 64); 5.11 + newn->receivers = makeListOfArrays(sizeof(Unit), 64); 5.12 + return newn; 5.13 +} 5.14 + 5.15 int set_dependency_file(FILE* file){ 5.16 dependency_file = file; 5.17 } 5.18 5.19 void print_ctl_dependency_to_file(void* _dep){ 5.20 Dependency* dep = (Dependency*) _dep; 5.21 + if(!dep) return; 5.22 fprintf(dependency_file,"ctlDep,%d,%d,%d,%d\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task); 5.23 } 5.24 5.25 void print_comm_dependency_to_file(void* _dep){ 5.26 Dependency* dep = (Dependency*) _dep; 5.27 + if(!dep) return; 5.28 fprintf(dependency_file,"commDep,%d,%d,%d,%d\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task); 5.29 } 5.30 5.31 void print_dependency_to_file(void* _dep){ 5.32 Dependency* dep = (Dependency*) _dep; 5.33 + if(!dep) return; 5.34 fprintf(dependency_file,"VP_%d_%d -> VP_%d_%d;\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task); 5.35 } 5.36 5.37 void print_unit_to_file(void* _unit){ 5.38 Unit* unit = (Unit*) _unit; 5.39 + if(!unit) return; 5.40 fprintf(dependency_file,"unit,%d,%d\n",unit->vp,unit->task); 5.41 +} 5.42 + 5.43 +void print_nton_set_helper(void* _u){ 5.44 + Unit* u = (Unit*) _u; 5.45 + if(!u) return; 5.46 + fprintf(dependency_file,",%d,%d",u->vp,u->task); 5.47 +} 5.48 + 5.49 +void print_nton_to_file(void* _nton){ 5.50 + NtoN* nton = (NtoN*) _nton; 5.51 + if(!nton) return; 5.52 + //assert(nton->senders->next_free_index==nton->receivers->next_free_index); 5.53 + int numInSet = nton->senders->next_free_index; 5.54 + fprintf(dependency_file,"NtoN,%d",numInSet); 5.55 + forAllInListOfArraysDo(nton->senders,&print_nton_set_helper); 5.56 + forAllInListOfArraysDo(nton->receivers,&print_nton_set_helper); 5.57 + fprintf(dependency_file,"\n"); 5.58 } 5.59 \ No newline at end of file
6.1 --- a/dependency.h Tue Dec 20 14:42:56 2011 +0100 6.2 +++ b/dependency.h Wed Dec 21 16:53:22 2011 +0100 6.3 @@ -10,6 +10,7 @@ 6.4 6.5 6.6 #include <stdio.h> 6.7 +#include "VMS/ListOfArrays/ListOfArrays.h" 6.8 6.9 typedef struct { 6.10 int vp; 6.11 @@ -23,10 +24,18 @@ 6.12 int to_task; 6.13 } Dependency; 6.14 6.15 +typedef struct { 6.16 + int32 id; 6.17 + ListOfArrays* senders; 6.18 + ListOfArrays* receivers; 6.19 +} NtoN; 6.20 + 6.21 FILE* dependency_file; 6.22 6.23 Dependency* new_dependency(int from_vp, int from_task, int to_vp, int to_task); 6.24 6.25 +NtoN* new_NtoN(int id); 6.26 + 6.27 int set_dependency_file(FILE* file); 6.28 6.29 void print_ctl_dependency_to_file(void* _dep); 6.30 @@ -36,5 +45,8 @@ 6.31 void print_dependency_to_file(void* dep); 6.32 6.33 void print_unit_to_file(void* unit); 6.34 + 6.35 +void print_nton_to_file(void* _nton); 6.36 + 6.37 #endif /* DEPENDENCY_H */ 6.38