changeset 29:dd1efbf29ff9 ML_dev

Moved counter recordings to PR services, about to delete trans & singleton
author Sean Halle <seanhalle@yahoo.com>
date Thu, 07 Feb 2013 16:30:16 -0800
parents 91caa8a9d591
children a40859b8dc33
files Measurement/VSs_Counter_Recording.c Measurement/VSs_Counter_Recording.h Measurement/VSs_Measurement.h VSs.c VSs.h VSs_PluginFns.c VSs_Request_Handlers.c VSs_Request_Handlers.h VSs_SS.c
diffstat 9 files changed, 70 insertions(+), 237 deletions(-) [+]
line diff
     1.1 --- a/Measurement/VSs_Counter_Recording.c	Tue Feb 05 20:24:25 2013 -0800
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,123 +0,0 @@
     1.4 -/*
     1.5 - * 
     1.6 - * author: Nina Engelhardt
     1.7 - */
     1.8 -
     1.9 -#include "VSs_Counter_Recording.h"
    1.10 -#include "PR_impl/PR.h"
    1.11 -#include "VSs_impl/VSs.h"
    1.12 -
    1.13 -#ifdef HOLISTIC__TURN_ON_PERF_COUNTERS
    1.14 -
    1.15 -void VSs__init_counter_data_structs( SlaveVP *slave )
    1.16 - {
    1.17 -   VSsLangEnv *langEnv = 
    1.18 -                (VSsLangEnv *)PR_SS__give_lang_env_for_slave( slave, VSs_MAGIC_NUMBER );
    1.19 -   int i;
    1.20 -   for(i=0;i<NUM_CORES;i++)
    1.21 -    { langEnv->counterList[i] = makeListOfArrays(sizeof(CounterEvent), 128);
    1.22 -    }
    1.23 - }
    1.24 -
    1.25 -void addToListOfArraysCounterEvent(CounterEvent value, ListOfArrays* list){
    1.26 -    int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; 
    1.27 -    if(offset_in_fragment == 0){ 
    1.28 -        void* newBlock = malloc(list->entry_size * list->num_entries_per_fragment); 
    1.29 -        addToDynArray(newBlock,list->dim1info); 
    1.30 -    } 
    1.31 -    CounterEvent* typedFragment = (CounterEvent*) ((list->dim1)[list->dim1info->numInArray -1]); 
    1.32 -    typedFragment[offset_in_fragment] = value; 
    1.33 -    list->next_free_index++; 
    1.34 -}
    1.35 -
    1.36 -void VSs__counter_handler(int evt_type, int vpid, int task, SlaveVP* pr, uint64 cycles, uint64 instrs)
    1.37 -{
    1.38 -    
    1.39 -    if (pr->typeOfVP == Master || pr->typeOfVP == Shutdown)
    1.40 -     { //Only save values for application work, done in a SlaveVP
    1.41 -        return;
    1.42 -     }
    1.43 -
    1.44 -    VSsLangEnv *langEnv = _PRTopEnv->protoLangEnv;
    1.45 -            
    1.46 -    CounterEvent e;
    1.47 -    e.event_type = evt_type;
    1.48 -    e.vp = vpid;
    1.49 -    e.task = task;
    1.50 -    
    1.51 -    e.cycles = cycles;
    1.52 -    e.instrs = instrs;
    1.53 -    
    1.54 -    if(pr){
    1.55 -        e.coreID = pr->coreAnimatedBy;
    1.56 -        e.slot = pr->animSlotAssignedTo;
    1.57 -    } else {
    1.58 -        e.coreID = -1;
    1.59 -        e.slot = NULL;
    1.60 -    }
    1.61 -    
    1.62 -    int corenum;
    1.63 -    
    1.64 -    if(pr) corenum = pr->coreAnimatedBy; else return; 
    1.65 -  
    1.66 -    if(evt_type==Work_start || evt_type==Work_end || evt_type==AppResponderInvocation_start){
    1.67 -        addToListOfArrays_ext(CounterEvent,e,langEnv->counterList[corenum]);
    1.68 -    } else {
    1.69 -        addToListOfArraysCounterEvent(e,langEnv->counterList[corenum]);
    1.70 -    }
    1.71 -}
    1.72 -
    1.73 -void set_counter_file(FILE* f){
    1.74 -    counterfile = f;
    1.75 -}
    1.76 -
    1.77 -void print_counter_events_to_file(void* _e){
    1.78 -     CounterEvent* e = (CounterEvent*) _e;
    1.79 -     fprintf(counterfile, "event, ");
    1.80 -     switch(e->event_type){
    1.81 -         case AppResponderInvocation_start:
    1.82 -             fprintf(counterfile, "AppResponderInvocation_start");
    1.83 -             break;
    1.84 -         case AppResponder_start:
    1.85 -             fprintf(counterfile, "AppResponder_start");
    1.86 -             break;
    1.87 -         case AppResponder_end:
    1.88 -             fprintf(counterfile, "AppResponder_end");
    1.89 -             break;
    1.90 -         case AssignerInvocation_start:
    1.91 -             fprintf(counterfile, "AssignerInvocation_start");
    1.92 -             break;
    1.93 -         case NextAssigner_start:
    1.94 -             fprintf(counterfile, "NextAssigner_start");
    1.95 -             break;
    1.96 -         case Assigner_start:
    1.97 -             fprintf(counterfile, "Assigner_start");
    1.98 -             break;
    1.99 -         case Assigner_end:
   1.100 -             fprintf(counterfile, "Assigner_end");
   1.101 -             break;
   1.102 -         case Work_end:
   1.103 -             fprintf(counterfile, "Work_end");
   1.104 -             break;
   1.105 -         case Work_start:
   1.106 -             fprintf(counterfile, "Work_start");
   1.107 -             break;
   1.108 -         case HwResponderInvocation_start:
   1.109 -             fprintf(counterfile, "HwResponderInvocation_start");
   1.110 -             break;
   1.111 -         case Timestamp_start:
   1.112 -             fprintf(counterfile, "Timestamp_start");
   1.113 -             break;
   1.114 -         case Timestamp_end:
   1.115 -             fprintf(counterfile, "Timestamp_end");
   1.116 -             break;
   1.117 -         default:
   1.118 -             fprintf(counterfile, "unknown event");
   1.119 -     }
   1.120 -     fprintf(counterfile,", %d, %d, %llu, %llu",e->vp,e->task,e->cycles,e->instrs);
   1.121 -     if(e->coreID >=0)
   1.122 -         fprintf(counterfile,", %d",e->coreID);
   1.123 -     fprintf(counterfile,"\n");
   1.124 -     fflush(counterfile);
   1.125 -}
   1.126 -#endif
     2.1 --- a/Measurement/VSs_Counter_Recording.h	Tue Feb 05 20:24:25 2013 -0800
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,33 +0,0 @@
     2.4 -/* 
     2.5 - * File:   VSs_Counter_Recording.h
     2.6 - * Author: nengel
     2.7 - *
     2.8 - * Created on January 11, 2012, 3:03 PM
     2.9 - */
    2.10 -
    2.11 -#ifndef VSs_COUNTER_RECORDING_H
    2.12 -#define	VSs_COUNTER_RECORDING_H
    2.13 -
    2.14 -#include "PR_impl/PR.h"
    2.15 -
    2.16 -typedef struct {
    2.17 -   int event_type;
    2.18 -   int coreID;
    2.19 -   AnimSlot* slot;
    2.20 -   int vp;
    2.21 -   int task;
    2.22 -   uint64 cycles;
    2.23 -   uint64 instrs;
    2.24 -} CounterEvent;
    2.25 -
    2.26 -FILE* counterfile;
    2.27 -
    2.28 -void VSs__init_counter_data_structs();
    2.29 -
    2.30 -void VSs__counter_handler(int evt_type, int vpid, int task, SlaveVP* pr, uint64 cycles, uint64 instrs);
    2.31 -
    2.32 -void set_counter_file(FILE* f);
    2.33 -
    2.34 -void print_counter_events_to_file(void* _e);
    2.35 -#endif	/* VSs_COUNTER_RECORDING_H */
    2.36 -
     3.1 --- a/Measurement/VSs_Measurement.h	Tue Feb 05 20:24:25 2013 -0800
     3.2 +++ b/Measurement/VSs_Measurement.h	Thu Feb 07 16:30:16 2013 -0800
     3.3 @@ -12,8 +12,9 @@
     3.4  
     3.5  #ifdef MEAS__TURN_ON_LANG_MEAS
     3.6  
     3.7 -   #ifdef MEAS__Make_Meas_Hists_for_Language
     3.8 -   #undef MEAS__Make_Meas_Hists_for_Language
     3.9 +   //PR defines this as empty, by default, so undefine it here, then define below
    3.10 +   #ifdef MEAS__Make_Meas_Hists_for_VSs
    3.11 +   #undef MEAS__Make_Meas_Hists_for_VSs
    3.12     #endif
    3.13  
    3.14  
    3.15 @@ -25,17 +26,22 @@
    3.16     #define ReceiveFromToHistIdx   3
    3.17     #define ReceiveOfTypeHistIdx   4
    3.18  
    3.19 -   #define MEAS__Make_Meas_Hists_for_Language \
    3.20 -      _PRTopEnv->measHistsInfo = \
    3.21 -                 makePrivDynArrayOfSize( (void***)&(_PRTopEnv->measHists), 200); \
    3.22 -       makeAMeasHist( SendFromToHistIdx,   "SendFromTo",    50, 0, 100 ) \
    3.23 -       makeAMeasHist( SendOfTypeHistIdx,   "SendOfType",    50, 0, 100 ) \
    3.24 -       makeAMeasHist( ReceiveFromToHistIdx,"ReceiveFromTo", 50, 0, 100 ) \
    3.25 -       makeAMeasHist( ReceiveOfTypeHistIdx,"ReceiveOfType", 50, 0, 100 )
    3.26 +   #define MEAS__Make_Meas_Hists_for_VSs( slave, magicNum ) \
    3.27 +    do \
    3.28 +    { VCilkLangEnv * \
    3.29 +      protoLangEnv = PR_PI__get_proto_lang_env_from_slave( slave, magicNum ); \
    3.30 +      protoLangEnv->measHistsInfo = \
    3.31 +             makePrivDynArrayOfSize( (void***)&(protoLangEnv->measHists), 200); \
    3.32 +      histInfo = protoLangEnv->measHistsInfo;
    3.33 +      makeAMeasHist( SendFromToHistIdx,   "SendFromTo",    50, 0, 100 ) \
    3.34 +      makeAMeasHist( SendOfTypeHistIdx,   "SendOfType",    50, 0, 100 ) \
    3.35 +      makeAMeasHist( ReceiveFromToHistIdx,"ReceiveFromTo", 50, 0, 100 ) \
    3.36 +      makeAMeasHist( ReceiveOfTypeHistIdx,"ReceiveOfType", 50, 0, 100 ) \
    3.37 + }while(FALSE); /* macro magic to protect local vars from name collision */
    3.38  
    3.39     #define Meas_startSendFromTo \
    3.40         int32 startStamp, endStamp; \
    3.41 -       saveLowTimeStampCountInto( startStamp ); \
    3.42 +       saveLowTimeStampCountInto( startStamp ); 
    3.43  
    3.44     #define Meas_endSendFromTo \
    3.45         saveLowTimeStampCountInto( endStamp ); \
    3.46 @@ -71,7 +77,7 @@
    3.47  
    3.48  #else //===================== turned off ==========================
    3.49  
    3.50 -   #define MEAS__Make_Meas_Hists_for_Language
    3.51 +   #define MEAS__Make_Meas_Hists_for_VSs( slave, magicNum )
    3.52     #define Meas_startSendFromTo
    3.53     #define Meas_endSendFromTo
    3.54     #define Meas_startSendOfType
     4.1 --- a/VSs.c	Tue Feb 05 20:24:25 2013 -0800
     4.2 +++ b/VSs.c	Thu Feb 07 16:30:16 2013 -0800
     4.3 @@ -12,8 +12,7 @@
     4.4  #include "Hash_impl/PrivateHash.h"
     4.5  
     4.6  #include "VSs.h"
     4.7 -#include "Measurement/VSs_Counter_Recording.h"
     4.8 -
     4.9 +#include "PR_impl/Services_Offered_by_PR/Measurement_and_Stats/PR_MEAS__Counter_Recording.h"
    4.10  //==========================================================================
    4.11  void
    4.12  VSs__init_Helper();
     5.1 --- a/VSs.h	Tue Feb 05 20:24:25 2013 -0800
     5.2 +++ b/VSs.h	Thu Feb 07 16:30:16 2013 -0800
     5.3 @@ -17,7 +17,7 @@
     5.4  
     5.5  //===========================================================================
     5.6     //uniquely identifies VSs -- should be a jenkins char-hash of "VSs" to int32
     5.7 -#define VSs_MAGIC_NUMBER 0000000001
     5.8 +#define VSs_MAGIC_NUMBER 0000000002
     5.9  
    5.10  #define NUM_STRUCS_IN_LANG_ENV 1000
    5.11  
     6.1 --- a/VSs_PluginFns.c	Tue Feb 05 20:24:25 2013 -0800
     6.2 +++ b/VSs_PluginFns.c	Thu Feb 07 16:30:16 2013 -0800
     6.3 @@ -51,7 +51,7 @@
     6.4   * to suspend both kinds, but also to keep explicit slave stacks clean from
     6.5   * the junk tasks are allowed to leave behind.
     6.6   */
     6.7 -void
     6.8 +bool32
     6.9  VSs__assign_work_to_slot( void *_langEnv, AnimSlot *slot )
    6.10   { SlaveVP     *returnSlv;
    6.11     VSsLangEnv  *langEnv;
    6.12 @@ -84,7 +84,7 @@
    6.13     
    6.14     //If here, didn't assign any work
    6.15   Fail:
    6.16 -   fixme; //figure out what to do -- go through holistic code still?
    6.17 +   return FALSE; //figure out what to do -- go through holistic code still?
    6.18  
    6.19   Success:  //doing gotos to here should help with holistic..
    6.20  
    6.21 @@ -137,7 +137,7 @@
    6.22        PR_int__clear_work_in_lang_env(langEnv);
    6.23   */
    6.24   
    6.25 -   return;
    6.26 +   return TRUE;
    6.27   }
    6.28  
    6.29  
     7.1 --- a/VSs_Request_Handlers.c	Tue Feb 05 20:24:25 2013 -0800
     7.2 +++ b/VSs_Request_Handlers.c	Thu Feb 07 16:30:16 2013 -0800
     7.3 @@ -20,7 +20,11 @@
     7.4  void
     7.5  VSs__resume_slave( SlaveVP *slave, VSsLangEnv *langEnv );
     7.6  
     7.7 +void
     7.8 +VSs__lang_meta_task_freer( void *_langMetaTask );
     7.9  
    7.10 +void
    7.11 +VSs__langDataFreer( void *_langData );
    7.12  
    7.13  //==========================================================================
    7.14  //                           Helpers
    7.15 @@ -203,11 +207,13 @@
    7.16     langReq = (VSsLangReq *) _langReq;
    7.17     langEnv = (VSsLangEnv *) _langEnv;
    7.18     
    7.19 -   newSlv  = PR_PI__create_slave( langReq->fnPtr, langReq->initData );
    7.20 +      //Note to self: the process and type are set by the Master, which called
    7.21 +      // this handler..  that's why this returns the slave..
    7.22 +   newSlv  = PR_PI__create_slaveVP( langReq->fnPtr, langReq->initData );
    7.23     
    7.24     VSs__create_lang_data_in_slave( newSlv );
    7.25     
    7.26 -   parentTaskStub = PR_PI__give_lang_meta_task_from_slave__ML( requestingSlv, VSs_MAGIC_NUMBER );
    7.27 +   parentTaskStub = PR_PI__give_lang_meta_task_from_slave( requestingSlv, VSs_MAGIC_NUMBER );
    7.28     parentTaskStub->numLiveChildThreads += 1;
    7.29     
    7.30     taskStub = VSs__create_generic_slave_task_stub_in_slave(requestingSlv); //used for wait info
    7.31 @@ -273,7 +279,7 @@
    7.32           DEBUG__printf1(dbgRqstHdlr,"Dissipate request from processor %d",
    7.33                                                       requestingSlv->slaveNum)
    7.34               
    7.35 -   ownTaskStub    = PR_PI__give_lang_meta_task_from_slave__ML( requestingSlv, VSs_MAGIC_NUMBER );
    7.36 +   ownTaskStub    = PR_PI__give_lang_meta_task_from_slave( requestingSlv, VSs_MAGIC_NUMBER );
    7.37     parentTaskStub = ownTaskStub->parentTaskStub;
    7.38     parentTaskStub->numLiveChildThreads -= 1;  //parent wasn't freed, even if ended
    7.39     
    7.40 @@ -314,7 +320,7 @@
    7.41   { 
    7.42     VSsTaskStub  *ownTaskStub;
    7.43                
    7.44 -   ownTaskStub    = PR_PI__give_lang_meta_task_from_slave__ML( requestingSlv, VSs_MAGIC_NUMBER );
    7.45 +   ownTaskStub    = PR_PI__give_lang_meta_task_from_slave( requestingSlv, VSs_MAGIC_NUMBER );
    7.46     free_task_stub( ownTaskStub );
    7.47  
    7.48        //PR frees the langData, task stub and requesting slave's base state
    7.49 @@ -329,9 +335,19 @@
    7.50   */
    7.51  void
    7.52  freeVSsLangData( void *_langData )
    7.53 - { //
    7.54 -   fixme; //check -- PR should handle freeing the lang data itself.
    7.55 -   //this should only free stuff malloc'd into the langData
    7.56 + { VSsLangData *langData;
    7.57 +   TransListElem *transElem, *nextTransElem;
    7.58 +
    7.59 +   langData = (VSsLangData *)_langData;
    7.60 +   transElem = langData->lastTransEntered;
    7.61 +   
    7.62 +   //Each trans the slave has entered was saved in a linked list elem inside
    7.63 +   // lang data -- delete those linked list elements
    7.64 +   while( transElem != NULL)
    7.65 +    { nextTransElem = transElem->nextTrans;
    7.66 +      PR_int__free( transElem );
    7.67 +      transElem = nextTransElem;
    7.68 +    }
    7.69     PR_PI__free( _langData );
    7.70   }
    7.71  
    7.72 @@ -458,7 +474,7 @@
    7.73     taskStub->numBlockingProp = taskType->numCtldArgs;
    7.74     //PR does this (metaTask contains taskID): taskStub->taskID = langReq->taskID;
    7.75        
    7.76 -   parentTaskStub = (VSsTaskStub *)PR_PI__give_lang_meta_task_from_slave__ML(langReq->callingSlv, VSs_MAGIC_NUMBER);
    7.77 +   parentTaskStub = (VSsTaskStub *)PR_PI__give_lang_meta_task_from_slave(langReq->callingSlv, VSs_MAGIC_NUMBER);
    7.78     taskStub->parentTaskStub = parentTaskStub; 
    7.79     parentTaskStub->numLiveChildTasks += 1;
    7.80     
    7.81 @@ -1151,7 +1167,7 @@
    7.82              DEBUG__printf1(dbgRqstHdlr,"Taskwait request from processor %d",
    7.83                                                        requestingSlv->slaveNum)
    7.84      
    7.85 -   taskStub = (VSsTaskStub *)PR_PI__give_lang_meta_task_from_slave__ML( requestingSlv, VSs_MAGIC_NUMBER);
    7.86 +   taskStub = (VSsTaskStub *)PR_PI__give_lang_meta_task_from_slave( requestingSlv, VSs_MAGIC_NUMBER);
    7.87     
    7.88     if( taskStub->numLiveChildTasks == 0 )
    7.89      {    //nobody to wait for, resume
    7.90 @@ -1334,7 +1350,7 @@
    7.91           DEBUG__printf1(dbgRqstHdlr,"TransStart request from processor %d",requestingSlv->slaveNum)
    7.92     
    7.93        //check ordering of entering transactions is correct
    7.94 -   langData = requestingSlv->langData;
    7.95 +   langData = PR_PI__give_lang_data(requestingSlv, VSs_MAGIC_NUMBER);
    7.96     if( langData->highestTransEntered > langReq->transID )
    7.97      {    //throw PR exception, which shuts down PR.
    7.98        PR_PI__throw_exception( "transID smaller than prev", requestingSlv, NULL);
    7.99 @@ -1396,7 +1412,7 @@
   7.100      }
   7.101  
   7.102        //make sure nesting is correct -- last ID entered should == this ID
   7.103 -   langData = requestingSlv->langData;
   7.104 +   langData = PR_PI__give_lang_data(requestingSlv, VSs_MAGIC_NUMBER);
   7.105     lastTrans = langData->lastTransEntered;
   7.106     if( lastTrans->transID != langReq->transID )
   7.107      {
     8.1 --- a/VSs_Request_Handlers.h	Tue Feb 05 20:24:25 2013 -0800
     8.2 +++ b/VSs_Request_Handlers.h	Thu Feb 07 16:30:16 2013 -0800
     8.3 @@ -19,49 +19,27 @@
     8.4  void
     8.5  handleDissipate( void *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv );
     8.6  
     8.7 -inline 
     8.8  void *
     8.9  handleSubmitTask( VSsLangReq *langReq, VSsLangEnv *langEnv);
    8.10 -inline void
    8.11 +void
    8.12  handleEndTask( VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv );
    8.13  
    8.14 -inline void
    8.15 +void
    8.16  handleSendTypeTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv);
    8.17 -inline void
    8.18 +void
    8.19  handleSendFromTo( VSsLangReq *langReq, SlaveVP* dummySlv, VSsLangEnv *langEnv);
    8.20 -inline void
    8.21 +void
    8.22  handleReceiveTypeTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv);
    8.23 -inline void
    8.24 +void
    8.25  handleReceiveFromTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv);
    8.26 -inline void
    8.27 +void
    8.28  handleTaskwait(VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv);
    8.29 -
    8.30 -inline void
    8.31 -handleMalloc( VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv);
    8.32 -inline void
    8.33 -handleFree( VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv );
    8.34 -inline void
    8.35 -handleTransEnd(VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv*langEnv);
    8.36 -inline void
    8.37 -handleTransStart( VSsLangReq *langReq, SlaveVP *requestingSlv,
    8.38 -                  VSsLangEnv *langEnv );
    8.39 -inline void
    8.40 -handleAtomic( VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv);
    8.41 -inline void
    8.42 -handleStartFnSingleton( VSsLangReq *langReq, SlaveVP *reqstingSlv,
    8.43 -                      VSsLangEnv *langEnv );
    8.44 -inline void
    8.45 -handleEndFnSingleton( VSsLangReq *langReq, SlaveVP *requestingSlv,
    8.46 -                    VSsLangEnv *langEnv );
    8.47 -inline void
    8.48 -handleStartDataSingleton( VSsLangReq *langReq, SlaveVP *reqstingSlv,
    8.49 -                      VSsLangEnv *langEnv );
    8.50 -inline void
    8.51 -handleEndDataSingleton( VSsLangReq *langReq, SlaveVP *requestingSlv,
    8.52 -                    VSsLangEnv *langEnv );
    8.53 -inline void
    8.54 +inline 
    8.55 +void
    8.56  free_task_stub( VSsTaskStub *stubToFree );
    8.57  
    8.58 +VSsTaskStub *
    8.59 +VSs__create_generic_slave_task_stub_in_slave( SlaveVP *slave );
    8.60  
    8.61  #endif	/* _VSs_REQ_H */
    8.62  
     9.1 --- a/VSs_SS.c	Tue Feb 05 20:24:25 2013 -0800
     9.2 +++ b/VSs_SS.c	Thu Feb 07 16:30:16 2013 -0800
     9.3 @@ -25,7 +25,7 @@
     9.4  void
     9.5  VSs__start( SlaveVP *seedSlv )
     9.6   { VSsLangEnv       *langEnv;
     9.7 -   int32             i, coreNum, slotNum;
     9.8 +   int32             i;
     9.9     VSsLangData       *langData;
    9.10     VSsTaskStub      *threadTaskStub, *parentTaskStub;
    9.11     
    9.12 @@ -69,8 +69,8 @@
    9.13   */
    9.14  
    9.15     #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS
    9.16 -   _PRTopEnv->counterHandler = &VSs__counter_handler;
    9.17 -   VSs__init_counter_data_structs();
    9.18 +   _PRTopEnv->counterHandler = &PR_MEAS__counter_handler;
    9.19 +   PR_MEAS__init_counter_data_structs_for_lang( seedSlv, VSs_MAGIC_NUMBER );
    9.20     #endif
    9.21  
    9.22  
    9.23 @@ -84,19 +84,6 @@
    9.24     langEnv->nextCoreToGetNewSlv = 0;
    9.25     
    9.26  
    9.27 -   //TODO: bug -- turn these arrays into dyn arrays to eliminate limit
    9.28 -   //langEnv->singletonHasBeenExecutedFlags = makeDynArrayInfo( );
    9.29 -   //langEnv->transactionStrucs = makeDynArrayInfo( );
    9.30 -   for( i = 0; i < NUM_STRUCS_IN_LANG_ENV; i++ )
    9.31 -    {
    9.32 -      langEnv->fnSingletons[i].endInstrAddr      = NULL;
    9.33 -      langEnv->fnSingletons[i].hasBeenStarted    = FALSE;
    9.34 -      langEnv->fnSingletons[i].hasFinished       = FALSE;
    9.35 -      langEnv->fnSingletons[i].waitQ             = makePRQ();
    9.36 -      langEnv->transactionStrucs[i].waitingVPQ   = makePRQ();
    9.37 -    }
    9.38 -
    9.39 -
    9.40     #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    9.41     langEnv->unitList = makeListOfArrays(sizeof(Unit),128);
    9.42     langEnv->ctlDependenciesList = makeListOfArrays(sizeof(Dependency),128);
    9.43 @@ -107,6 +94,8 @@
    9.44     langEnv->hwArcs = makeListOfArrays(sizeof(Dependency),128);
    9.45     memset(langEnv->last_in_slot,0,sizeof(NUM_CORES * NUM_ANIM_SLOTS * sizeof(Unit)));
    9.46     #endif
    9.47 +
    9.48 +   MEAS__Make_Meas_Hists_for_VSs
    9.49   }
    9.50  
    9.51  
    9.52 @@ -213,12 +202,13 @@
    9.53      printf("Saving Counter measurements to File: %s ...\n", filename);
    9.54      output = fopen(filename,"w+");
    9.55      if(output!=NULL){
    9.56 +        int i;
    9.57          set_counter_file(output);
    9.58 -        int i;
    9.59 -        for(i=0;i<NUM_CORES;i++){
    9.60 -            forAllInListOfArraysDo( langEnv->counterList[i], &print_counter_events_to_file );
    9.61 -            fflush(output);
    9.62 -        }
    9.63 +        for( i=0; i<NUM_CORES; i++ )
    9.64 +         {
    9.65 +           forAllInListOfArraysDo( langEnv->counterList[i], &PR_MEAS__print_counter_event_to_file );
    9.66 +           fflush(output);
    9.67 +         }
    9.68  
    9.69      } else
    9.70          printf("Opening UCC file failed. Please check that folder \"counters\" exists in run directory and has write permission.\n");