Mercurial > cgi-bin > hgwebdir.cgi > VMS > VMS_Implementations > VSs_impls > VSs__MC_shared_impl
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");