00001
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include "converse.h"
00005 #include "charmProjections.h"
00006 #include "traceCoreCommon.h"
00007 #include "charmEvents.h"
00008 #include "ck.h"
00009 #include "trace-common.h"
00010
00011
00012 CtvStaticDeclare(int,curThreadEvent);
00013
00014 static int curEvent;
00015 static int execEvent;
00016 static int execEp;
00017 static int execPe;
00018 static int curevent=0;
00019
00020 extern "C" void initCharmProjections()
00021 {
00022 CtvInitialize(int,curThreadEvent);
00023 CtvAccess(curThreadEvent) = 0;
00024 curEvent = 0;
00025 }
00026
00027
00028
00029
00030
00031 extern "C" void charm_creation(envelope *e, int ep, int num)
00032 {
00033 if(e==0) {
00034 CtvAccess(curThreadEvent)=curEvent;
00035 int iData[4];
00036 iData[0] = ForChareMsg;
00037 iData[1] = ep;
00038 iData[2] = curEvent++;
00039 iData[3] = CkMyPe();
00040 LogEvent1(_CHARM_LANG_ID, _E_CREATION, 4, iData);
00041 } else {
00042 e->setEvent(curEvent);
00043 for(int i=0; i<num; i++) {
00044 int iData[5];
00045 iData[0] = e->getMsgtype();
00046 iData[1] = ep;
00047 iData[2] = curEvent+i;
00048 iData[3] = CkMyPe();
00049 iData[4] = e->getTotalsize();
00050 LogEvent1(_CHARM_LANG_ID, _E_CREATION, 5, iData);
00051 }
00052 curEvent += num;
00053 }
00054 }
00055
00056 extern "C" void charm_beginExecute(envelope *e)
00057 {
00058
00059 if(e==0) {
00060 execEvent = CtvAccess(curThreadEvent);
00061 execEp = (-1);
00062 int iData[4];
00063 iData[0] = ForChareMsg;
00064 iData[1] = _threadEP;
00065 iData[2] = execEvent;
00066 iData[3] = CkMyPe();
00067 LogEvent1(_CHARM_LANG_ID, _E_BEGIN_PROCESSING, 4, iData);
00068 } else {
00069 charm_beginExecuteDetailed(e->getEvent(),e->getMsgtype(),e->getEpIdx(),e->getSrcPe(),e->getTotalsize());
00070 }
00071 }
00072
00073 extern "C" void charm_beginExecuteDetailed(int event,int msgType,int ep,int srcPe,int ml)
00074 {
00075
00076 execEvent=event;
00077 execEp=ep;
00078 execPe=srcPe;
00079 int iData[5];
00080 iData[0] = msgType;
00081 iData[1] = ep;
00082 iData[2] = event;
00083 iData[3] = srcPe;
00084 iData[4] = ml;
00085
00086 LogEvent1(_CHARM_LANG_ID, _E_BEGIN_PROCESSING, 5, iData);
00087 }
00088
00089 extern "C" void charm_endExecute(void)
00090 {
00091
00092 if(execEp == (-1)) {
00093 int iData[4];
00094 iData[0] = 0;
00095 iData[1] = _threadEP;
00096 iData[2] = execEvent;
00097 iData[3] = CkMyPe();
00098 LogEvent1(_CHARM_LANG_ID, _E_END_PROCESSING, 4, iData);
00099 } else {
00100 int iData[4];
00101 iData[0] = 0;
00102 iData[1] = execEp;
00103 iData[2] = execEvent;
00104 iData[3] = execPe;
00105 LogEvent1(_CHARM_LANG_ID, _E_END_PROCESSING, 4, iData);
00106 }
00107 }
00108
00109
00110
00111
00112 extern "C" void charm_enqueueMsg(envelope *e) {
00113
00114 int iData[3];
00115 iData[0] = e->getMsgtype();
00116 iData[1] = e->getEvent();
00117 iData[2] = e->getSrcPe();
00118 LogEvent1(_CHARM_LANG_ID,_E_ENQUEUE,3,iData);
00119 }
00120
00121 extern "C" void charm_dequeueMsg(envelope *e) {
00122 int iData[3];
00123 iData[0] = e->getMsgtype();
00124 iData[1] = e->getEvent();
00125 iData[2] = e->getSrcPe();
00126 LogEvent1(_CHARM_LANG_ID,_E_DEQUEUE,3,iData);
00127
00128 }
00129
00130 extern "C" void charm_beginComputation(void)
00131 {
00132 LogEvent1(_CHARM_LANG_ID, _E_BEGIN_COMPUTATION, 0, NULL);
00133 }
00134
00135 extern "C" void charm_endComputation(void)
00136 {
00137 LogEvent1(_CHARM_LANG_ID, _E_END_COMPUTATION, 0, NULL);
00138 }
00139
00140 extern "C" void charm_messageRecv(char *env, int pe) {}
00141
00142 extern "C" void charm_userEvent(int e) {
00143 int iData[3];
00144 iData[0] = e;
00145 iData[1] = curevent;
00146 iData[2] = CkMyPe();
00147 curevent++;
00148 LogEvent1(_CHARM_LANG_ID, _E_USER_EVENT_CHARM,3,iData);
00149 }
00150
00151
00152 extern "C" void charm_userPairEvent(int e,double bt,double et){
00153 int iData1[3];
00154 int iData2[3];
00155 iData1[0] = iData2[0] = e;
00156 iData1[1] = iData2[1] = curevent;
00157 iData1[2] = iData2[2] = CkMyPe();
00158 curevent++;
00159 LogEvent4(_CHARM_LANG_ID, _E_USER_EVENT_PAIR,3,iData1,bt);
00160 LogEvent4(_CHARM_LANG_ID, _E_USER_EVENT_PAIR,3,iData2,et);
00161
00162 }
00163
00164 extern "C" void charm_beginPack(void)
00165 {
00166 int iData[1];
00167 iData[0] = CkMyPe();
00168 LogEvent1(_CHARM_LANG_ID, _E_BEGIN_PACK, 1, iData);
00169 }
00170
00171 extern "C" void charm_endPack(void)
00172 {
00173 int iData[1];
00174 iData[0] = CkMyPe();
00175 LogEvent1(_CHARM_LANG_ID, _E_END_PACK, 1, iData);
00176 }
00177
00178 extern "C" void charm_beginUnpack(void)
00179 {
00180 int iData[1];
00181 iData[0] = CkMyPe();
00182 LogEvent1(_CHARM_LANG_ID, _E_BEGIN_UNPACK, 1, iData);
00183 }
00184
00185 extern "C" void charm_endUnpack(void)
00186 {
00187 int iData[1];
00188 iData[0] = CkMyPe();
00189 LogEvent1(_CHARM_LANG_ID, _E_END_UNPACK, 1, iData);
00190 }
00191
00192