# HG changeset patch # User Sean Halle # Date 1360283416 28800 # Node ID dd1efbf29ff939342bd06f61d285135dd8084ca6 # Parent 91caa8a9d59187b7eb9ad895d7da031fb9b932b3 Moved counter recordings to PR services, about to delete trans & singleton diff -r 91caa8a9d591 -r dd1efbf29ff9 Measurement/VSs_Counter_Recording.c --- a/Measurement/VSs_Counter_Recording.c Tue Feb 05 20:24:25 2013 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* - * - * author: Nina Engelhardt - */ - -#include "VSs_Counter_Recording.h" -#include "PR_impl/PR.h" -#include "VSs_impl/VSs.h" - -#ifdef HOLISTIC__TURN_ON_PERF_COUNTERS - -void VSs__init_counter_data_structs( SlaveVP *slave ) - { - VSsLangEnv *langEnv = - (VSsLangEnv *)PR_SS__give_lang_env_for_slave( slave, VSs_MAGIC_NUMBER ); - int i; - for(i=0;icounterList[i] = makeListOfArrays(sizeof(CounterEvent), 128); - } - } - -void addToListOfArraysCounterEvent(CounterEvent value, ListOfArrays* list){ - int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; - if(offset_in_fragment == 0){ - void* newBlock = malloc(list->entry_size * list->num_entries_per_fragment); - addToDynArray(newBlock,list->dim1info); - } - CounterEvent* typedFragment = (CounterEvent*) ((list->dim1)[list->dim1info->numInArray -1]); - typedFragment[offset_in_fragment] = value; - list->next_free_index++; -} - -void VSs__counter_handler(int evt_type, int vpid, int task, SlaveVP* pr, uint64 cycles, uint64 instrs) -{ - - if (pr->typeOfVP == Master || pr->typeOfVP == Shutdown) - { //Only save values for application work, done in a SlaveVP - return; - } - - VSsLangEnv *langEnv = _PRTopEnv->protoLangEnv; - - CounterEvent e; - e.event_type = evt_type; - e.vp = vpid; - e.task = task; - - e.cycles = cycles; - e.instrs = instrs; - - if(pr){ - e.coreID = pr->coreAnimatedBy; - e.slot = pr->animSlotAssignedTo; - } else { - e.coreID = -1; - e.slot = NULL; - } - - int corenum; - - if(pr) corenum = pr->coreAnimatedBy; else return; - - if(evt_type==Work_start || evt_type==Work_end || evt_type==AppResponderInvocation_start){ - addToListOfArrays_ext(CounterEvent,e,langEnv->counterList[corenum]); - } else { - addToListOfArraysCounterEvent(e,langEnv->counterList[corenum]); - } -} - -void set_counter_file(FILE* f){ - counterfile = f; -} - -void print_counter_events_to_file(void* _e){ - CounterEvent* e = (CounterEvent*) _e; - fprintf(counterfile, "event, "); - switch(e->event_type){ - case AppResponderInvocation_start: - fprintf(counterfile, "AppResponderInvocation_start"); - break; - case AppResponder_start: - fprintf(counterfile, "AppResponder_start"); - break; - case AppResponder_end: - fprintf(counterfile, "AppResponder_end"); - break; - case AssignerInvocation_start: - fprintf(counterfile, "AssignerInvocation_start"); - break; - case NextAssigner_start: - fprintf(counterfile, "NextAssigner_start"); - break; - case Assigner_start: - fprintf(counterfile, "Assigner_start"); - break; - case Assigner_end: - fprintf(counterfile, "Assigner_end"); - break; - case Work_end: - fprintf(counterfile, "Work_end"); - break; - case Work_start: - fprintf(counterfile, "Work_start"); - break; - case HwResponderInvocation_start: - fprintf(counterfile, "HwResponderInvocation_start"); - break; - case Timestamp_start: - fprintf(counterfile, "Timestamp_start"); - break; - case Timestamp_end: - fprintf(counterfile, "Timestamp_end"); - break; - default: - fprintf(counterfile, "unknown event"); - } - fprintf(counterfile,", %d, %d, %llu, %llu",e->vp,e->task,e->cycles,e->instrs); - if(e->coreID >=0) - fprintf(counterfile,", %d",e->coreID); - fprintf(counterfile,"\n"); - fflush(counterfile); -} -#endif diff -r 91caa8a9d591 -r dd1efbf29ff9 Measurement/VSs_Counter_Recording.h --- a/Measurement/VSs_Counter_Recording.h Tue Feb 05 20:24:25 2013 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* - * File: VSs_Counter_Recording.h - * Author: nengel - * - * Created on January 11, 2012, 3:03 PM - */ - -#ifndef VSs_COUNTER_RECORDING_H -#define VSs_COUNTER_RECORDING_H - -#include "PR_impl/PR.h" - -typedef struct { - int event_type; - int coreID; - AnimSlot* slot; - int vp; - int task; - uint64 cycles; - uint64 instrs; -} CounterEvent; - -FILE* counterfile; - -void VSs__init_counter_data_structs(); - -void VSs__counter_handler(int evt_type, int vpid, int task, SlaveVP* pr, uint64 cycles, uint64 instrs); - -void set_counter_file(FILE* f); - -void print_counter_events_to_file(void* _e); -#endif /* VSs_COUNTER_RECORDING_H */ - diff -r 91caa8a9d591 -r dd1efbf29ff9 Measurement/VSs_Measurement.h --- a/Measurement/VSs_Measurement.h Tue Feb 05 20:24:25 2013 -0800 +++ b/Measurement/VSs_Measurement.h Thu Feb 07 16:30:16 2013 -0800 @@ -12,8 +12,9 @@ #ifdef MEAS__TURN_ON_LANG_MEAS - #ifdef MEAS__Make_Meas_Hists_for_Language - #undef MEAS__Make_Meas_Hists_for_Language + //PR defines this as empty, by default, so undefine it here, then define below + #ifdef MEAS__Make_Meas_Hists_for_VSs + #undef MEAS__Make_Meas_Hists_for_VSs #endif @@ -25,17 +26,22 @@ #define ReceiveFromToHistIdx 3 #define ReceiveOfTypeHistIdx 4 - #define MEAS__Make_Meas_Hists_for_Language \ - _PRTopEnv->measHistsInfo = \ - makePrivDynArrayOfSize( (void***)&(_PRTopEnv->measHists), 200); \ - makeAMeasHist( SendFromToHistIdx, "SendFromTo", 50, 0, 100 ) \ - makeAMeasHist( SendOfTypeHistIdx, "SendOfType", 50, 0, 100 ) \ - makeAMeasHist( ReceiveFromToHistIdx,"ReceiveFromTo", 50, 0, 100 ) \ - makeAMeasHist( ReceiveOfTypeHistIdx,"ReceiveOfType", 50, 0, 100 ) + #define MEAS__Make_Meas_Hists_for_VSs( slave, magicNum ) \ + do \ + { VCilkLangEnv * \ + protoLangEnv = PR_PI__get_proto_lang_env_from_slave( slave, magicNum ); \ + protoLangEnv->measHistsInfo = \ + makePrivDynArrayOfSize( (void***)&(protoLangEnv->measHists), 200); \ + histInfo = protoLangEnv->measHistsInfo; + makeAMeasHist( SendFromToHistIdx, "SendFromTo", 50, 0, 100 ) \ + makeAMeasHist( SendOfTypeHistIdx, "SendOfType", 50, 0, 100 ) \ + makeAMeasHist( ReceiveFromToHistIdx,"ReceiveFromTo", 50, 0, 100 ) \ + makeAMeasHist( ReceiveOfTypeHistIdx,"ReceiveOfType", 50, 0, 100 ) \ + }while(FALSE); /* macro magic to protect local vars from name collision */ #define Meas_startSendFromTo \ int32 startStamp, endStamp; \ - saveLowTimeStampCountInto( startStamp ); \ + saveLowTimeStampCountInto( startStamp ); #define Meas_endSendFromTo \ saveLowTimeStampCountInto( endStamp ); \ @@ -71,7 +77,7 @@ #else //===================== turned off ========================== - #define MEAS__Make_Meas_Hists_for_Language + #define MEAS__Make_Meas_Hists_for_VSs( slave, magicNum ) #define Meas_startSendFromTo #define Meas_endSendFromTo #define Meas_startSendOfType diff -r 91caa8a9d591 -r dd1efbf29ff9 VSs.c --- a/VSs.c Tue Feb 05 20:24:25 2013 -0800 +++ b/VSs.c Thu Feb 07 16:30:16 2013 -0800 @@ -12,8 +12,7 @@ #include "Hash_impl/PrivateHash.h" #include "VSs.h" -#include "Measurement/VSs_Counter_Recording.h" - +#include "PR_impl/Services_Offered_by_PR/Measurement_and_Stats/PR_MEAS__Counter_Recording.h" //========================================================================== void VSs__init_Helper(); diff -r 91caa8a9d591 -r dd1efbf29ff9 VSs.h --- a/VSs.h Tue Feb 05 20:24:25 2013 -0800 +++ b/VSs.h Thu Feb 07 16:30:16 2013 -0800 @@ -17,7 +17,7 @@ //=========================================================================== //uniquely identifies VSs -- should be a jenkins char-hash of "VSs" to int32 -#define VSs_MAGIC_NUMBER 0000000001 +#define VSs_MAGIC_NUMBER 0000000002 #define NUM_STRUCS_IN_LANG_ENV 1000 diff -r 91caa8a9d591 -r dd1efbf29ff9 VSs_PluginFns.c --- a/VSs_PluginFns.c Tue Feb 05 20:24:25 2013 -0800 +++ b/VSs_PluginFns.c Thu Feb 07 16:30:16 2013 -0800 @@ -51,7 +51,7 @@ * to suspend both kinds, but also to keep explicit slave stacks clean from * the junk tasks are allowed to leave behind. */ -void +bool32 VSs__assign_work_to_slot( void *_langEnv, AnimSlot *slot ) { SlaveVP *returnSlv; VSsLangEnv *langEnv; @@ -84,7 +84,7 @@ //If here, didn't assign any work Fail: - fixme; //figure out what to do -- go through holistic code still? + return FALSE; //figure out what to do -- go through holistic code still? Success: //doing gotos to here should help with holistic.. @@ -137,7 +137,7 @@ PR_int__clear_work_in_lang_env(langEnv); */ - return; + return TRUE; } diff -r 91caa8a9d591 -r dd1efbf29ff9 VSs_Request_Handlers.c --- a/VSs_Request_Handlers.c Tue Feb 05 20:24:25 2013 -0800 +++ b/VSs_Request_Handlers.c Thu Feb 07 16:30:16 2013 -0800 @@ -20,7 +20,11 @@ void VSs__resume_slave( SlaveVP *slave, VSsLangEnv *langEnv ); +void +VSs__lang_meta_task_freer( void *_langMetaTask ); +void +VSs__langDataFreer( void *_langData ); //========================================================================== // Helpers @@ -203,11 +207,13 @@ langReq = (VSsLangReq *) _langReq; langEnv = (VSsLangEnv *) _langEnv; - newSlv = PR_PI__create_slave( langReq->fnPtr, langReq->initData ); + //Note to self: the process and type are set by the Master, which called + // this handler.. that's why this returns the slave.. + newSlv = PR_PI__create_slaveVP( langReq->fnPtr, langReq->initData ); VSs__create_lang_data_in_slave( newSlv ); - parentTaskStub = PR_PI__give_lang_meta_task_from_slave__ML( requestingSlv, VSs_MAGIC_NUMBER ); + parentTaskStub = PR_PI__give_lang_meta_task_from_slave( requestingSlv, VSs_MAGIC_NUMBER ); parentTaskStub->numLiveChildThreads += 1; taskStub = VSs__create_generic_slave_task_stub_in_slave(requestingSlv); //used for wait info @@ -273,7 +279,7 @@ DEBUG__printf1(dbgRqstHdlr,"Dissipate request from processor %d", requestingSlv->slaveNum) - ownTaskStub = PR_PI__give_lang_meta_task_from_slave__ML( requestingSlv, VSs_MAGIC_NUMBER ); + ownTaskStub = PR_PI__give_lang_meta_task_from_slave( requestingSlv, VSs_MAGIC_NUMBER ); parentTaskStub = ownTaskStub->parentTaskStub; parentTaskStub->numLiveChildThreads -= 1; //parent wasn't freed, even if ended @@ -314,7 +320,7 @@ { VSsTaskStub *ownTaskStub; - ownTaskStub = PR_PI__give_lang_meta_task_from_slave__ML( requestingSlv, VSs_MAGIC_NUMBER ); + ownTaskStub = PR_PI__give_lang_meta_task_from_slave( requestingSlv, VSs_MAGIC_NUMBER ); free_task_stub( ownTaskStub ); //PR frees the langData, task stub and requesting slave's base state @@ -329,9 +335,19 @@ */ void freeVSsLangData( void *_langData ) - { // - fixme; //check -- PR should handle freeing the lang data itself. - //this should only free stuff malloc'd into the langData + { VSsLangData *langData; + TransListElem *transElem, *nextTransElem; + + langData = (VSsLangData *)_langData; + transElem = langData->lastTransEntered; + + //Each trans the slave has entered was saved in a linked list elem inside + // lang data -- delete those linked list elements + while( transElem != NULL) + { nextTransElem = transElem->nextTrans; + PR_int__free( transElem ); + transElem = nextTransElem; + } PR_PI__free( _langData ); } @@ -458,7 +474,7 @@ taskStub->numBlockingProp = taskType->numCtldArgs; //PR does this (metaTask contains taskID): taskStub->taskID = langReq->taskID; - parentTaskStub = (VSsTaskStub *)PR_PI__give_lang_meta_task_from_slave__ML(langReq->callingSlv, VSs_MAGIC_NUMBER); + parentTaskStub = (VSsTaskStub *)PR_PI__give_lang_meta_task_from_slave(langReq->callingSlv, VSs_MAGIC_NUMBER); taskStub->parentTaskStub = parentTaskStub; parentTaskStub->numLiveChildTasks += 1; @@ -1151,7 +1167,7 @@ DEBUG__printf1(dbgRqstHdlr,"Taskwait request from processor %d", requestingSlv->slaveNum) - taskStub = (VSsTaskStub *)PR_PI__give_lang_meta_task_from_slave__ML( requestingSlv, VSs_MAGIC_NUMBER); + taskStub = (VSsTaskStub *)PR_PI__give_lang_meta_task_from_slave( requestingSlv, VSs_MAGIC_NUMBER); if( taskStub->numLiveChildTasks == 0 ) { //nobody to wait for, resume @@ -1334,7 +1350,7 @@ DEBUG__printf1(dbgRqstHdlr,"TransStart request from processor %d",requestingSlv->slaveNum) //check ordering of entering transactions is correct - langData = requestingSlv->langData; + langData = PR_PI__give_lang_data(requestingSlv, VSs_MAGIC_NUMBER); if( langData->highestTransEntered > langReq->transID ) { //throw PR exception, which shuts down PR. PR_PI__throw_exception( "transID smaller than prev", requestingSlv, NULL); @@ -1396,7 +1412,7 @@ } //make sure nesting is correct -- last ID entered should == this ID - langData = requestingSlv->langData; + langData = PR_PI__give_lang_data(requestingSlv, VSs_MAGIC_NUMBER); lastTrans = langData->lastTransEntered; if( lastTrans->transID != langReq->transID ) { diff -r 91caa8a9d591 -r dd1efbf29ff9 VSs_Request_Handlers.h --- a/VSs_Request_Handlers.h Tue Feb 05 20:24:25 2013 -0800 +++ b/VSs_Request_Handlers.h Thu Feb 07 16:30:16 2013 -0800 @@ -19,49 +19,27 @@ void handleDissipate( void *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv ); -inline void * handleSubmitTask( VSsLangReq *langReq, VSsLangEnv *langEnv); -inline void +void handleEndTask( VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv ); -inline void +void handleSendTypeTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv); -inline void +void handleSendFromTo( VSsLangReq *langReq, SlaveVP* dummySlv, VSsLangEnv *langEnv); -inline void +void handleReceiveTypeTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv); -inline void +void handleReceiveFromTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv); -inline void +void handleTaskwait(VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv); - -inline void -handleMalloc( VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv); -inline void -handleFree( VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv ); -inline void -handleTransEnd(VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv*langEnv); -inline void -handleTransStart( VSsLangReq *langReq, SlaveVP *requestingSlv, - VSsLangEnv *langEnv ); -inline void -handleAtomic( VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv); -inline void -handleStartFnSingleton( VSsLangReq *langReq, SlaveVP *reqstingSlv, - VSsLangEnv *langEnv ); -inline void -handleEndFnSingleton( VSsLangReq *langReq, SlaveVP *requestingSlv, - VSsLangEnv *langEnv ); -inline void -handleStartDataSingleton( VSsLangReq *langReq, SlaveVP *reqstingSlv, - VSsLangEnv *langEnv ); -inline void -handleEndDataSingleton( VSsLangReq *langReq, SlaveVP *requestingSlv, - VSsLangEnv *langEnv ); -inline void +inline +void free_task_stub( VSsTaskStub *stubToFree ); +VSsTaskStub * +VSs__create_generic_slave_task_stub_in_slave( SlaveVP *slave ); #endif /* _VSs_REQ_H */ diff -r 91caa8a9d591 -r dd1efbf29ff9 VSs_SS.c --- a/VSs_SS.c Tue Feb 05 20:24:25 2013 -0800 +++ b/VSs_SS.c Thu Feb 07 16:30:16 2013 -0800 @@ -25,7 +25,7 @@ void VSs__start( SlaveVP *seedSlv ) { VSsLangEnv *langEnv; - int32 i, coreNum, slotNum; + int32 i; VSsLangData *langData; VSsTaskStub *threadTaskStub, *parentTaskStub; @@ -69,8 +69,8 @@ */ #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS - _PRTopEnv->counterHandler = &VSs__counter_handler; - VSs__init_counter_data_structs(); + _PRTopEnv->counterHandler = &PR_MEAS__counter_handler; + PR_MEAS__init_counter_data_structs_for_lang( seedSlv, VSs_MAGIC_NUMBER ); #endif @@ -84,19 +84,6 @@ langEnv->nextCoreToGetNewSlv = 0; - //TODO: bug -- turn these arrays into dyn arrays to eliminate limit - //langEnv->singletonHasBeenExecutedFlags = makeDynArrayInfo( ); - //langEnv->transactionStrucs = makeDynArrayInfo( ); - for( i = 0; i < NUM_STRUCS_IN_LANG_ENV; i++ ) - { - langEnv->fnSingletons[i].endInstrAddr = NULL; - langEnv->fnSingletons[i].hasBeenStarted = FALSE; - langEnv->fnSingletons[i].hasFinished = FALSE; - langEnv->fnSingletons[i].waitQ = makePRQ(); - langEnv->transactionStrucs[i].waitingVPQ = makePRQ(); - } - - #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC langEnv->unitList = makeListOfArrays(sizeof(Unit),128); langEnv->ctlDependenciesList = makeListOfArrays(sizeof(Dependency),128); @@ -107,6 +94,8 @@ langEnv->hwArcs = makeListOfArrays(sizeof(Dependency),128); memset(langEnv->last_in_slot,0,sizeof(NUM_CORES * NUM_ANIM_SLOTS * sizeof(Unit))); #endif + + MEAS__Make_Meas_Hists_for_VSs } @@ -213,12 +202,13 @@ printf("Saving Counter measurements to File: %s ...\n", filename); output = fopen(filename,"w+"); if(output!=NULL){ + int i; set_counter_file(output); - int i; - for(i=0;icounterList[i], &print_counter_events_to_file ); - fflush(output); - } + for( i=0; icounterList[i], &PR_MEAS__print_counter_event_to_file ); + fflush(output); + } } else printf("Opening UCC file failed. Please check that folder \"counters\" exists in run directory and has write permission.\n");