Merge branch 'charm' of charmgit:charm into charm
[charm.git] / src / conv-perf / charmProjections.C
1
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include "converse.h"
5 #include "charmProjections.h"
6 #include "traceCoreCommon.h"
7 #include "charmEvents.h"
8 #include "ck.h"
9 #include "trace-common.h" // for _threadEP
10
11
12 CtvStaticDeclare(int,curThreadEvent);
13
14 static int curEvent;
15 static int execEvent;
16 static int execEp;
17 static int execPe;
18 static int curevent=0;
19
20 extern "C" void initCharmProjections() 
21 {
22   CtvInitialize(int,curThreadEvent);
23   CtvAccess(curThreadEvent) = 0;
24   curEvent = 0;
25 }
26
27 //TODO
28 //extern "C" int  traceRegisterUserEvent(const char*) 
29 //{return -1;}  
30
31 extern "C" void charm_creation(envelope *e, int ep, int num)
32 {
33   if(e==0) {
34     CtvAccess(curThreadEvent)=curEvent;
35         int iData[4];
36         iData[0] = ForChareMsg;
37         iData[1] = ep;
38         iData[2] = curEvent++;
39         iData[3] = CkMyPe();
40         LogEvent1(_CHARM_LANG_ID, _E_CREATION, 4, iData); 
41   } else {
42     e->setEvent(curEvent);
43     for(int i=0; i<num; i++) {
44                 int iData[5];
45                 iData[0] = e->getMsgtype();
46                 iData[1] = ep;
47                 iData[2] = curEvent+i;
48                 iData[3] = CkMyPe();
49                 iData[4] = e->getTotalsize();
50                 LogEvent1(_CHARM_LANG_ID, _E_CREATION, 5, iData); 
51     }
52     curEvent += num;
53   }
54 }
55
56 extern "C" void charm_beginExecute(envelope *e)
57 {
58   
59   if(e==0) {
60     execEvent = CtvAccess(curThreadEvent);
61     execEp = (-1);
62         int iData[4];
63         iData[0] = ForChareMsg;
64         iData[1] = _threadEP;
65         iData[2] = execEvent;
66         iData[3] = CkMyPe();
67         LogEvent1(_CHARM_LANG_ID, _E_BEGIN_PROCESSING, 4, iData); 
68   } else {
69     charm_beginExecuteDetailed(e->getEvent(),e->getMsgtype(),e->getEpIdx(),e->getSrcPe(),e->getTotalsize());
70   }
71 }
72
73 extern "C" void charm_beginExecuteDetailed(int event,int msgType,int ep,int srcPe,int ml)
74 {
75   
76   execEvent=event;
77   execEp=ep;
78   execPe=srcPe;
79   int iData[5];
80   iData[0] = msgType;
81   iData[1] = ep;
82   iData[2] = event;
83   iData[3] = srcPe;
84   iData[4] = ml;
85  // CkPrintf("iData in beginExecuteDetailed %d %d \n",event,srcPe);
86   LogEvent1(_CHARM_LANG_ID, _E_BEGIN_PROCESSING, 5, iData); 
87 }
88
89 extern "C" void charm_endExecute(void)
90 {
91    
92   if(execEp == (-1)) {
93         int iData[4];
94         iData[0] = 0;
95         iData[1] = _threadEP;
96         iData[2] = execEvent;
97         iData[3] = CkMyPe();
98         LogEvent1(_CHARM_LANG_ID, _E_END_PROCESSING, 4, iData); 
99   } else {
100         int iData[4];
101         iData[0] = 0;
102         iData[1] = execEp;
103         iData[2] = execEvent;
104         iData[3] = execPe;
105         LogEvent1(_CHARM_LANG_ID, _E_END_PROCESSING, 4, iData); 
106   }
107 }
108
109 // implementing enqueue and dequeue --schak 
110 // however these type of events are not generated by anyone
111
112 extern "C" void charm_enqueueMsg(envelope *e) {
113         
114         int iData[3];
115         iData[0] = e->getMsgtype();
116         iData[1] = e->getEvent();
117         iData[2] = e->getSrcPe();
118         LogEvent1(_CHARM_LANG_ID,_E_ENQUEUE,3,iData);
119 }       
120
121 extern "C" void charm_dequeueMsg(envelope *e) {
122         int iData[3];
123         iData[0] = e->getMsgtype();
124         iData[1] = e->getEvent();
125         iData[2] = e->getSrcPe();
126         LogEvent1(_CHARM_LANG_ID,_E_DEQUEUE,3,iData);
127
128 }       
129
130 extern "C" void charm_beginComputation(void)
131 {
132         LogEvent1(_CHARM_LANG_ID, _E_BEGIN_COMPUTATION, 0, NULL); 
133 }
134
135 extern "C" void charm_endComputation(void)
136 {
137         LogEvent1(_CHARM_LANG_ID, _E_END_COMPUTATION, 0, NULL); 
138 }
139
140 extern "C" void charm_messageRecv(char *env, int pe) {} //TODO
141
142 extern "C" void charm_userEvent(int e) {
143         int iData[3];
144         iData[0] = e;
145         iData[1] = curevent;
146         iData[2] = CkMyPe();
147         curevent++;
148         LogEvent1(_CHARM_LANG_ID, _E_USER_EVENT_CHARM,3,iData);
149 }       
150
151
152 extern "C" void charm_userPairEvent(int e,double bt,double et){
153         int iData1[3];
154         int iData2[3];
155         iData1[0] = iData2[0] = e;
156         iData1[1] = iData2[1] = curevent;
157         iData1[2] = iData2[2] = CkMyPe();
158         curevent++;
159         LogEvent4(_CHARM_LANG_ID, _E_USER_EVENT_PAIR,3,iData1,bt);
160         LogEvent4(_CHARM_LANG_ID, _E_USER_EVENT_PAIR,3,iData2,et);
161         
162 }
163
164 extern "C" void charm_beginPack(void)
165 {
166         int iData[1];
167         iData[0] = CkMyPe();
168         LogEvent1(_CHARM_LANG_ID, _E_BEGIN_PACK, 1, iData); 
169 }
170
171 extern "C" void charm_endPack(void)
172 {
173         int iData[1];
174         iData[0] = CkMyPe();
175         LogEvent1(_CHARM_LANG_ID, _E_END_PACK, 1, iData); 
176 }
177
178 extern "C" void charm_beginUnpack(void)
179 {
180         int iData[1];
181         iData[0] = CkMyPe();
182         LogEvent1(_CHARM_LANG_ID, _E_BEGIN_UNPACK, 1, iData); 
183 }
184
185 extern "C" void charm_endUnpack(void)
186 {
187         int iData[1];
188         iData[0] = CkMyPe();
189         LogEvent1(_CHARM_LANG_ID, _E_END_UNPACK, 1, iData); 
190 }
191
192