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