# HG changeset patch # User Nina Engelhardt # Date 1316100693 -7200 # Node ID 395f58384a5ccb67de20c6f20ae10b7879853cde # Parent 5475f90c248a51e997ca34659786e3bd14eb7a49 dot output diff -r 5475f90c248a -r 395f58384a5c Counters/Counters.c --- a/Counters/Counters.c Wed Sep 07 13:26:30 2011 +0200 +++ b/Counters/Counters.c Thu Sep 15 17:31:33 2011 +0200 @@ -36,5 +36,21 @@ fprintf(file,"%d,%llu,%llu,",record->work_core,record->start_work_cycles,record->start_work_instrs); fprintf(file,"%d,%llu,%llu,",record->work_core,record->suspend_cycles,record->suspend_instrs); fprintf(file,"%d,%llu,%llu,",record->req_core,record->req_cycles,record->req_instrs); + fprintf(file,"%d,%llu,%llu,",record->req_core,record->next_task_req_cycles,record->next_task_req_instrs); fprintf(file,"%u,%u\n",record->blocked_timestamp,record->unblocked_timestamp); +} + +void set_dot_file(FILE* file){ + dot_file = file; +} + +void print_dot_node_info(void* _record){ + CounterRecord* record = (CounterRecord*) _record; + fprintf(dot_file,"VP_%d_%d [shape=record,label=\"{ VP %d # %d ",record->vp_id,record->task_position,record->vp_id,record->task_position); + fprintf(dot_file,"| { sc_ch | C:%lld I:%lld }",record->sc_done_cycles - record->req_cycles,record->sc_done_instrs - record->req_instrs); + fprintf(dot_file,"| { sync | C:%d }", record->task_position ? record->unblocked_timestamp - record->blocked_timestamp : 0); + fprintf(dot_file,"| { assign | C:%lld I:%lld }",record->end_assign_cycles - record->start_assign_cycles,record->end_assign_instrs - record->start_assign_instrs); + fprintf(dot_file,"| { W + C | C:%lld I:%lld }",record->suspend_cycles - record->start_work_cycles,record->suspend_instrs - record->start_work_instrs); + fprintf(dot_file,"| { status | C:%lld I:%lld }",record->next_task_req_cycles - record->suspend_cycles,record->next_task_req_instrs - record->suspend_instrs); + fprintf(dot_file,"}\"];\n"); } \ No newline at end of file diff -r 5475f90c248a -r 395f58384a5c Counters/Counters.h --- a/Counters/Counters.h Wed Sep 07 13:26:30 2011 +0200 +++ b/Counters/Counters.h Thu Sep 15 17:31:33 2011 +0200 @@ -35,14 +35,22 @@ uint64 start_work_instrs; uint64 suspend_cycles; uint64 suspend_instrs; + uint64 next_task_req_cycles; + uint64 next_task_req_instrs; void* addr_of_libcall_for_req; } CounterRecord; +FILE* dot_file; + void print_record_human_readable(CounterRecord* record); void print_record_csv(CounterRecord* record); void print_record_csv_to_file(CounterRecord* record, FILE* file); +void set_dot_file(FILE* file); + +void print_dot_node_info(void* counterRecord); + #endif /* COUNTERS_H */ diff -r 5475f90c248a -r 395f58384a5c MasterLoop.c --- a/MasterLoop.c Wed Sep 07 13:26:30 2011 +0200 +++ b/MasterLoop.c Thu Sep 15 17:31:33 2011 +0200 @@ -151,9 +151,10 @@ int lastRecordIdx = currSlot->procrAssignedToSlot->counter_history_array_info->numInArray -1; CounterRecord* lastRecord = currSlot->procrAssignedToSlot->counter_history[lastRecordIdx]; lastRecord->req_core = thisCoresIdx; - saveCyclesAndInstrs(thisCoresIdx,lastRecord->req_cycles,lastRecord->req_instrs); + saveCyclesAndInstrs(thisCoresIdx,lastRecord->next_task_req_cycles,lastRecord->next_task_req_instrs); //End of task, start of next task //print counters from last run + addToDynArray((void*)lastRecord,masterEnv->counter_history_array_info); print_record_csv_to_file(lastRecord,_VMSMasterEnv->counteroutput); Dependency* newd = new_dependency(currSlot->procrAssignedToSlot->procrID,lastRecord->task_position,currSlot->procrAssignedToSlot->procrID,lastRecord->task_position + 1); @@ -165,6 +166,8 @@ newRecord->req_core = thisCoresIdx; newRecord->vp_id = currSlot->procrAssignedToSlot->procrID; newRecord->task_position = lastRecord->task_position + 1; + newRecord->req_cycles = lastRecord->next_task_req_cycles; + newRecord->req_instrs = lastRecord->next_task_req_instrs; getReturnAddressBeforeLibraryCall(currSlot->procrAssignedToSlot, &(newRecord->addr_of_libcall_for_req)); addToDynArray( (void*) newRecord, currSlot->procrAssignedToSlot->counter_history_array_info); lastRecord = newRecord; diff -r 5475f90c248a -r 395f58384a5c VMS.c --- a/VMS.c Wed Sep 07 13:26:30 2011 +0200 +++ b/VMS.c Thu Sep 15 17:31:33 2011 +0200 @@ -192,6 +192,8 @@ #endif #ifdef MEAS__PERF_COUNTERS + _VMSMasterEnv->counter_history = VMS__malloc(10*sizeof(void*)); + _VMSMasterEnv->counter_history_array_info = makePrivDynArrayInfoFrom((void***)&(_VMSMasterEnv->counter_history),10); //printf("Creating HW counters..."); FILE* output; int n; @@ -797,7 +799,8 @@ if(output!=NULL){ set_dependency_file(output); fprintf(output,"digraph Dependencies {\n"); - + set_dot_file(output); + forAllInDynArrayDo(_VMSMasterEnv->counter_history_array_info, &print_dot_node_info ); forAllInDynArrayDo( _VMSMasterEnv->dependenciesInfo, &print_dependency_to_file ); fprintf(output,"}\n"); } else diff -r 5475f90c248a -r 395f58384a5c VMS.h --- a/VMS.h Wed Sep 07 13:26:30 2011 +0200 +++ b/VMS.h Thu Sep 15 17:31:33 2011 +0200 @@ -276,6 +276,10 @@ Dependency** dependencies; PrivDynArrayInfo* dependenciesInfo; #endif + #ifdef MEAS__PERF_COUNTERS // + CounterRecord** counter_history; + PrivDynArrayInfo* counter_history_array_info; + #endif } MasterEnv;