diff VMS.c @ 166:aefd87f9d12f

loop graph
author Nina Engelhardt
date Tue, 18 Oct 2011 15:53:04 +0200
parents 395f58384a5c
children 981acd1db6af
line diff
     1.1 --- a/VMS.c	Wed Sep 28 14:58:41 2011 +0200
     1.2 +++ b/VMS.c	Tue Oct 18 15:53:04 2011 +0200
     1.3 @@ -190,7 +190,17 @@
     1.4     _VMSMasterEnv->dependencies = VMS__malloc(10*sizeof(void*));
     1.5     _VMSMasterEnv->dependenciesInfo = makePrivDynArrayInfoFrom((void***)&(_VMSMasterEnv->dependencies),10);
     1.6     #endif
     1.7 +
     1.8 +   #ifdef DETECT_LOOP_GRAPH
     1.9 +   _VMSMasterEnv->loop_graph = VMS__malloc(10*sizeof(void*));
    1.10 +   _VMSMasterEnv->loop_graph_array_info = makePrivDynArrayInfoFrom((void***)&(_VMSMasterEnv->loop_graph),10);
    1.11 +   int loop_i;
    1.12 +   for(loop_i=0;loop_i<NUM_CORES;loop_i++){
    1.13 +       _VMSMasterEnv->loop_counter[loop_i]=0;
    1.14 +   }
    1.15     
    1.16 +   #endif
    1.17 +
    1.18     #ifdef MEAS__PERF_COUNTERS
    1.19     _VMSMasterEnv->counter_history = VMS__malloc(10*sizeof(void*));
    1.20     _VMSMasterEnv->counter_history_array_info = makePrivDynArrayInfoFrom((void***)&(_VMSMasterEnv->counter_history),10);
    1.21 @@ -809,6 +819,41 @@
    1.22         printf("Could not open Dependencies file, please clean \"counters\" folder. (Must contain less than 255 files.)\n");
    1.23     }
    1.24  #endif
    1.25 +   #ifdef DETECT_LOOP_GRAPH
    1.26 +   FILE* loop_output;
    1.27 +   int loop_n;
    1.28 +   char loop_filename[255];    
    1.29 +    for(loop_n=0;loop_n<255;loop_n++)
    1.30 +    {
    1.31 +        sprintf(loop_filename, "./counters/LoopGraph.%d.dot",loop_n);
    1.32 +        loop_output = fopen(loop_filename,"r");
    1.33 +        if(loop_output)
    1.34 +        {
    1.35 +            fclose(loop_output);
    1.36 +        }else{
    1.37 +            break;
    1.38 +        }
    1.39 +    }
    1.40 +   if(loop_n<255){
    1.41 +    printf("Saving Loop Graph to File: %s ...\n", loop_filename);
    1.42 +    loop_output = fopen(loop_filename,"w+");
    1.43 +    if(loop_output!=NULL){
    1.44 +        set_dependency_file(loop_output);
    1.45 +        fprintf(loop_output,"digraph Loop {\n");
    1.46 +        set_loop_file(loop_output);
    1.47 +        forAllInDynArrayDo(_VMSMasterEnv->counter_history_array_info, &print_dot_node_info );
    1.48 +        forAllInDynArrayDo( _VMSMasterEnv->loop_graph_array_info, &print_per_slot_to_file );
    1.49 +        //int coreIdx;
    1.50 +        //for(coreIdx=0;coreIdx<NUM_CORES;coreIdx++){
    1.51 +        //    fprintf(loop_output,"sync%d_%d [shape=rect,label=\"Sync\"];\n",coreIdx,_VMSMasterEnv->loop_counter[coreIdx]);
    1.52 +        //}
    1.53 +        fprintf(loop_output,"}\n");
    1.54 +    } else
    1.55 +        printf("Opening Loop Graph file failed. Please check that folder \"counters\" exists in run directory.\n");
    1.56 +   } else {
    1.57 +       printf("Could not open Loop Graph file, please clean \"counters\" folder. (Must contain less than 255 files.)\n");
    1.58 +   }
    1.59 +#endif
    1.60     #ifdef MEAS__TIME_PLUGIN
    1.61     printHist( _VMSMasterEnv->reqHdlrLowTimeHist );
    1.62     saveHistToFile( _VMSMasterEnv->reqHdlrLowTimeHist );