Mercurial > cgi-bin > hgwebdir.cgi > VMS > VMS_Implementations > SSR_impls > SSR__MC_shared_impl
view SSR_Counter_Recording.c @ 68:81a0f076b12e
Merged Nina's shutdown fix with schedSlot -> animSlot and other name chgs
author | Some Random Person <seanhalle@yahoo.com> |
---|---|
date | Fri, 16 Mar 2012 23:47:37 -0700 |
parents | b5b5323b4177 ce95c4d84fcd |
children | 52a02c918db8 |
line source
1 /*
2 *
3 * author: Nina Engelhardt
4 */
6 #include "SSR_Counter_Recording.h"
7 #include "VMS_impl/VMS.h"
8 #include "SSR.h"
10 #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS
12 void SSR__init_counter_data_structs(){
13 SSRSemEnv *semanticEnv = _VMSMasterEnv->semanticEnv;
14 int i;
15 for(i=0;i<NUM_CORES;i++){
16 semanticEnv->counterList[i] = makeListOfArrays(sizeof(CounterEvent), 128);
17 }
18 }
20 void addToListOfArraysCounterEvent(CounterEvent value, ListOfArrays* list){
21 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment;
22 if(offset_in_fragment == 0){
23 void* newBlock = malloc(list->entry_size * list->num_entries_per_fragment);
24 addToDynArray(newBlock,list->dim1info);
25 }
26 CounterEvent* typedFragment = (CounterEvent*) ((list->dim1)[list->dim1info->numInArray -1]);
27 typedFragment[offset_in_fragment] = value;
28 list->next_free_index++;
29 }
31 void SSR__counter_handler(int evt_type, int vpid, int task, SlaveVP* pr, uint64 cycles, uint64 instrs)
32 {
34 if (pr->typeOfVP == Master || pr->typeOfVP == Shutdown)
35 { //Only save values for application work, done in a SlaveVP
36 return;
37 }
39 SSRSemEnv *semanticEnv = _VMSMasterEnv->semanticEnv;
41 CounterEvent e;
42 e.event_type = evt_type;
43 e.vp = vpid;
44 e.task = task;
46 e.cycles = cycles;
47 e.instrs = instrs;
49 if(pr){
50 e.coreID = pr->coreAnimatedBy;
51 e.slot = pr->animSlotAssignedTo;
52 } else {
53 e.coreID = -1;
54 e.slot = NULL;
55 }
57 int corenum;
59 if(pr) corenum = pr->coreAnimatedBy; else return;
61 if(evt_type==Work_start || evt_type==Work_end || evt_type==AppResponderInvocation_start){
62 addToListOfArrays_ext(CounterEvent,e,semanticEnv->counterList[corenum]);
63 } else {
64 addToListOfArraysCounterEvent(e,semanticEnv->counterList[corenum]);
65 }
66 }
68 void set_counter_file(FILE* f){
69 counterfile = f;
70 }
72 void print_counter_events_to_file(void* _e){
73 CounterEvent* e = (CounterEvent*) _e;
74 fprintf(counterfile, "event, ");
75 switch(e->event_type){
76 case AppResponderInvocation_start:
77 fprintf(counterfile, "AppResponderInvocation_start");
78 break;
79 case AppResponder_start:
80 fprintf(counterfile, "AppResponder_start");
81 break;
82 case AppResponder_end:
83 fprintf(counterfile, "AppResponder_end");
84 break;
85 case AssignerInvocation_start:
86 fprintf(counterfile, "AssignerInvocation_start");
87 break;
88 case NextAssigner_start:
89 fprintf(counterfile, "NextAssigner_start");
90 break;
91 case Assigner_start:
92 fprintf(counterfile, "Assigner_start");
93 break;
94 case Assigner_end:
95 fprintf(counterfile, "Assigner_end");
96 break;
97 case Work_end:
98 fprintf(counterfile, "Work_end");
99 break;
100 case Work_start:
101 fprintf(counterfile, "Work_start");
102 break;
103 case HwResponderInvocation_start:
104 fprintf(counterfile, "HwResponderInvocation_start");
105 break;
106 case Timestamp_start:
107 fprintf(counterfile, "Timestamp_start");
108 break;
109 case Timestamp_end:
110 fprintf(counterfile, "Timestamp_end");
111 break;
112 default:
113 fprintf(counterfile, "unknown event");
114 }
115 fprintf(counterfile,", %d, %d, %llu, %llu",e->vp,e->task,e->cycles,e->instrs);
116 if(e->coreID >=0)
117 fprintf(counterfile,", %d",e->coreID);
118 fprintf(counterfile,"\n");
119 fflush(counterfile);
120 }
121 #endif