00001
00002
00003
00004
00005 #include<charm++.h>
00006 #include<charm-api.h>
00007
00008 CpvStaticDeclare(int, a);
00009
00010 static int isInitialized=0;
00011
00012 static void checkInit(void) {
00013 if (isInitialized) return;
00014 isInitialized=1;
00015 CpvInitialize(int,a);
00016 CpvAccess(a)=0;
00017 }
00018
00019 static char * FortrantoCString(char *x,int len){
00020 char *newstr = new char[len + 1];
00021 _MEMCHECK(newstr);
00022 strncpy(newstr, x, len);
00023 newstr[len] = 0;
00024 return newstr;
00025 }
00026
00027
00028 FDECL {
00029
00030 #define ftracebegin FTN_NAME(FTRACEBEGIN, ftracebegin)
00031 #define ftraceend FTN_NAME(FTRACEEND, ftraceend)
00032 #define ftraceregisteruserevent FTN_NAME(FTRACEREGISTERUSEREVENT, ftraceregisteruserevent)
00033 #define ftraceuserbracketevent FTN_NAME(FTRACEUSERBRACKETEVENT, ftraceuserbracketevent)
00034 #define ftraceUserEvent FTN_NAME(FTRACEUSEREVENT, ftraceuserevent)
00035 #define ftraceFlushLog FTN_NAME(FTRACEFLUSHLOG, ftraceflushlog)
00036 #define ftraceRegisterFunc FTN_NAME(FTRACEREGISTERFUNC,ftraceregisterfunc)
00037 #define ftraceBeginFunc FTN_NAME(FTRACEBEGINFUNC,ftracebeginfunc)
00038 #define ftraceEndFunc FTN_NAME(FTRACEENDFUNC,ftraceendfunc)
00039
00040 #define fbgprintf FTN_NAME(FBGPRINTF, fbgprintf)
00041
00042 void ftracebegin()
00043 {
00044 checkInit();
00045 if ( CpvAccess(a) ==0)
00046 {
00047 traceBegin();
00048 CpvAccess(a)++;
00049 }
00050 else
00051 { CpvAccess(a)++;}
00052 }
00053
00054 void ftraceend()
00055 {
00056 checkInit();
00057 if ( CpvAccess(a) == 1)
00058 {
00059 traceEnd();
00060 CpvAccess(a)--;
00061 }
00062 else
00063 { CpvAccess(a)--;}
00064
00065 }
00066
00067 void ftraceregisteruserevent(char *x, int *ein, int *eout, int len)
00068 {
00069 char *newstr = new char[len + 1];
00070 _MEMCHECK(newstr);
00071 strncpy(newstr, x, len);
00072 newstr[len] = 0;
00073 int newe = traceRegisterUserEvent(newstr, *ein);
00074 *eout = newe;
00075 }
00076
00077 void ftraceuserbracketevent(int *e, double *begint, double *endt)
00078 {
00079 traceUserBracketEvent(*e, *begint, *endt);
00080 }
00081
00082 void ftraceUserEvent(int *e)
00083 {
00084 traceUserEvent(*e);
00085 }
00086
00087 void ftraceFlushLog()
00088 {
00089 traceFlushLog();
00090 }
00091
00092 void ftraceRegisterFunc(char *name,int *outIdx,int lenName){
00093 char *newstr = FortrantoCString(name,lenName);
00094 *outIdx = traceRegisterFunction(newstr);
00095 delete [] newstr;
00096 }
00097
00098 void ftraceBeginFunc(int *idx){
00099 traceBeginFuncIndexProj(*idx,(char*)"FORTRAN",0);
00100 }
00101
00102 void ftraceEndFunc(int *idx){
00103 traceEndFuncIndexProj(*idx);
00104 }
00105
00106 #if CMK_BIGSIM_CHARM
00107 void fbgprintf(char *str, int len)
00108 {
00109 char *newstr = new char[len + 1];
00110 _MEMCHECK(newstr);
00111 strncpy(newstr, str, len);
00112 newstr[len] = 0;
00113 BgPrintf(newstr);
00114 delete [] newstr;
00115 }
00116 #endif
00117
00118 }
00119