# HG changeset patch # User Nina Engelhardt # Date 1324482802 -3600 # Node ID 593fe0543a221cf98a594abb7fddedbf076ea507 # Parent 23bcca1c3687887568658f95698aeb23503b6ca7 added NtoN construct recording (in send/recv_type for now) diff -r 23bcca1c3687 -r 593fe0543a22 SSR.h --- a/SSR.h Tue Dec 20 14:42:56 2011 +0100 +++ b/SSR.h Wed Dec 21 16:53:22 2011 +0100 @@ -109,6 +109,8 @@ ListOfArrays* unitList; ListOfArrays* ctlDependenciesList; ListOfArrays* commDependenciesList; + NtoN** ntonGroups; + PrivDynArrayInfo* ntonGroupsInfo; //NtoN structure? #endif diff -r 23bcca1c3687 -r 593fe0543a22 SSR_PluginFns.c --- a/SSR_PluginFns.c Tue Dec 20 14:42:56 2011 +0100 +++ b/SSR_PluginFns.c Wed Dec 21 16:53:22 2011 +0100 @@ -215,6 +215,7 @@ newd.from_task = requestingPr->numTimesScheduled; newd.to_vp = newPr->procrID; newd.to_task = 0; + //addToListOfArraysDependency(newd,semEnv->commDependenciesList); addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); #endif @@ -240,11 +241,13 @@ newu.vp = procr->procrID; newu.task = procr->numTimesScheduled + 1; addToListOfArrays(Unit,newu,semEnv->unitList); + //addToListOfArraysUnit(newu,semEnv->unitList); Dependency newd; newd.from_vp = procr->procrID; newd.from_task = procr->numTimesScheduled; newd.to_vp = procr->procrID; newd.to_task = procr->numTimesScheduled + 1; + //addToListOfArraysDependency(newd,semEnv->ctlDependenciesList); addToListOfArrays(Dependency, newd ,semEnv->ctlDependenciesList); #endif writePrivQ( procr, semEnv->readyVPQs[ procr->coreAnimatedBy] ); diff -r 23bcca1c3687 -r 593fe0543a22 SSR_Request_Handlers.c --- a/SSR_Request_Handlers.c Tue Dec 20 14:42:56 2011 +0100 +++ b/SSR_Request_Handlers.c Wed Dec 21 16:53:22 2011 +0100 @@ -132,7 +132,22 @@ newd.from_task = sendPr->numTimesScheduled; newd.to_vp = receivePr->procrID; newd.to_task = receivePr->numTimesScheduled +1; - addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); + //(newd,semEnv->commDependenciesList); + //addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); + int32 groupId = semReq->msgType; + if(semEnv->ntonGroupsInfo->numInArray <= groupId){ + makeHighestDynArrayIndexBeAtLeast(semEnv->ntonGroupsInfo, groupId); + } + if(semEnv->ntonGroups[groupId] == NULL){ + semEnv->ntonGroups[groupId] = new_NtoN(groupId); + } + Unit u; + u.vp = sendPr->procrID; + u.task = sendPr->numTimesScheduled; + addToListOfArrays(Unit,u,semEnv->ntonGroups[groupId]->senders); + u.vp = receivePr->procrID; + u.task = receivePr->numTimesScheduled; + addToListOfArrays(Unit,u,semEnv->ntonGroups[groupId]->receivers); #endif //waiting request is a receive, so it pairs to this send @@ -197,6 +212,7 @@ newd.from_task = sendPr->numTimesScheduled; newd.to_vp = receivePr->procrID; newd.to_task = receivePr->numTimesScheduled +1; + //addToListOfArraysDependency(newd,semEnv->commDependenciesList); addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); #endif //First, remove the waiting receive request from the entry @@ -305,7 +321,22 @@ newd.from_task = sendPr->numTimesScheduled; newd.to_vp = receivePr->procrID; newd.to_task = receivePr->numTimesScheduled +1; - addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); + //addToListOfArraysDependency(newd,semEnv->commDependenciesList); + //addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); + int32 groupId = semReq->msgType; + if(semEnv->ntonGroupsInfo->numInArray <= groupId){ + makeHighestDynArrayIndexBeAtLeast(semEnv->ntonGroupsInfo, groupId); + } + if(semEnv->ntonGroups[groupId] == NULL){ + semEnv->ntonGroups[groupId] = new_NtoN(groupId); + } + Unit u; + u.vp = sendPr->procrID; + u.task = sendPr->numTimesScheduled; + addToListOfArrays(Unit,u,semEnv->ntonGroups[groupId]->senders); + u.vp = receivePr->procrID; + u.task = receivePr->numTimesScheduled; + addToListOfArrays(Unit,u,semEnv->ntonGroups[groupId]->receivers); #endif resume_procr( sendPr, semEnv ); @@ -350,6 +381,7 @@ newd.from_task = sendPr->numTimesScheduled; newd.to_vp = receivePr->procrID; newd.to_task = receivePr->numTimesScheduled +1; + //addToListOfArraysDependency(newd,semEnv->commDependenciesList); addToListOfArrays(Dependency,newd,semEnv->commDependenciesList); #endif //For from-to, should only ever be a single reqst waiting tobe paird diff -r 23bcca1c3687 -r 593fe0543a22 SSR_lib.c --- a/SSR_lib.c Tue Dec 20 14:42:56 2011 +0100 +++ b/SSR_lib.c Wed Dec 21 16:53:22 2011 +0100 @@ -210,11 +210,10 @@ _VMSMasterEnv->semanticEnv = semanticEnv; #ifdef OBSERVE_UCC - //TODO: set up unit recording structure semanticEnv->unitList = makeListOfArrays(sizeof(Unit),128); semanticEnv->ctlDependenciesList = makeListOfArrays(sizeof(Dependency),128); semanticEnv->commDependenciesList = makeListOfArrays(sizeof(Dependency),128); - //TODO: set up N:N recording structure + semanticEnv->ntonGroupsInfo = makePrivDynArrayOfSize((void***)&(semanticEnv->ntonGroups),8); #endif //create the ready queue, hash tables used for pairing send to receive @@ -284,8 +283,12 @@ forAllInListOfArraysDo(semanticEnv->unitList, &print_unit_to_file); forAllInListOfArraysDo( semanticEnv->commDependenciesList, &print_comm_dependency_to_file ); forAllInListOfArraysDo( semanticEnv->ctlDependenciesList, &print_ctl_dependency_to_file ); + forAllInDynArrayDo(semanticEnv->ntonGroupsInfo,&print_nton_to_file); //fprintf(output,"}\n"); fflush(output); + freeListOfArrays(semanticEnv->unitList); + freeListOfArrays(semanticEnv->commDependenciesList); + freeListOfArrays(semanticEnv->ctlDependenciesList); } else printf("Opening Dependencies file failed. Please check that folder \"counters\" exists in run directory and has write permission.\n"); } else { diff -r 23bcca1c3687 -r 593fe0543a22 dependency.c --- a/dependency.c Tue Dec 20 14:42:56 2011 +0100 +++ b/dependency.c Wed Dec 21 16:53:22 2011 +0100 @@ -12,26 +12,55 @@ return newDep; } +NtoN* new_NtoN(int id){ + NtoN* newn = (NtoN*) VMS__malloc(sizeof(NtoN)); + newn->id = id; + newn->senders = makeListOfArrays(sizeof(Unit), 64); + newn->receivers = makeListOfArrays(sizeof(Unit), 64); + return newn; +} + int set_dependency_file(FILE* file){ dependency_file = file; } void print_ctl_dependency_to_file(void* _dep){ Dependency* dep = (Dependency*) _dep; + if(!dep) return; fprintf(dependency_file,"ctlDep,%d,%d,%d,%d\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task); } void print_comm_dependency_to_file(void* _dep){ Dependency* dep = (Dependency*) _dep; + if(!dep) return; fprintf(dependency_file,"commDep,%d,%d,%d,%d\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task); } void print_dependency_to_file(void* _dep){ Dependency* dep = (Dependency*) _dep; + if(!dep) return; fprintf(dependency_file,"VP_%d_%d -> VP_%d_%d;\n",dep->from_vp,dep->from_task,dep->to_vp,dep->to_task); } void print_unit_to_file(void* _unit){ Unit* unit = (Unit*) _unit; + if(!unit) return; fprintf(dependency_file,"unit,%d,%d\n",unit->vp,unit->task); +} + +void print_nton_set_helper(void* _u){ + Unit* u = (Unit*) _u; + if(!u) return; + fprintf(dependency_file,",%d,%d",u->vp,u->task); +} + +void print_nton_to_file(void* _nton){ + NtoN* nton = (NtoN*) _nton; + if(!nton) return; + //assert(nton->senders->next_free_index==nton->receivers->next_free_index); + int numInSet = nton->senders->next_free_index; + fprintf(dependency_file,"NtoN,%d",numInSet); + forAllInListOfArraysDo(nton->senders,&print_nton_set_helper); + forAllInListOfArraysDo(nton->receivers,&print_nton_set_helper); + fprintf(dependency_file,"\n"); } \ No newline at end of file diff -r 23bcca1c3687 -r 593fe0543a22 dependency.h --- a/dependency.h Tue Dec 20 14:42:56 2011 +0100 +++ b/dependency.h Wed Dec 21 16:53:22 2011 +0100 @@ -10,6 +10,7 @@ #include +#include "VMS/ListOfArrays/ListOfArrays.h" typedef struct { int vp; @@ -23,10 +24,18 @@ int to_task; } Dependency; +typedef struct { + int32 id; + ListOfArrays* senders; + ListOfArrays* receivers; +} NtoN; + FILE* dependency_file; Dependency* new_dependency(int from_vp, int from_task, int to_vp, int to_task); +NtoN* new_NtoN(int id); + int set_dependency_file(FILE* file); void print_ctl_dependency_to_file(void* _dep); @@ -36,5 +45,8 @@ void print_dependency_to_file(void* dep); void print_unit_to_file(void* unit); + +void print_nton_to_file(void* _nton); + #endif /* DEPENDENCY_H */