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