00001
00002
00003
00004
00005 #include "charm++.h"
00006 #include <stdarg.h>
00007 #include "charmf.h"
00008 #include "cktiming.h"
00009
00010 extern "C" int typesize(int type, int count)
00011 {
00012 switch(type) {
00013 case CMPI_DOUBLE_PRECISION : return count*sizeof(double);
00014 case CMPI_INTEGER : return count*sizeof(int);
00015 case CMPI_REAL : return count*sizeof(float);
00016 case CMPI_COMPLEX: return 2*count*sizeof(double);
00017 case CMPI_LOGICAL: return 2*count*sizeof(int);
00018 case CMPI_CHAR:
00019 case CMPI_BYTE:
00020 case CMPI_PACKED:
00021 default:
00022 return 2*count;
00023 }
00024 }
00025
00026 extern "C" void FTN_NAME(CKEXIT, ckexit)()
00027 {
00028 CkExit();
00029 }
00030
00031 extern "C" void FTN_NAME(CKMYPE, ckmype)(int *pe)
00032 {
00033 *pe = CkMyPe();
00034 }
00035
00036 extern "C" void FTN_NAME(CKNUMPES, cknumpes)(int *npe)
00037 {
00038 *npe = CkNumPes();
00039 }
00040
00041 extern "C" void FTN_NAME(CKPRINTF, ckprintf)(const char *format, ...)
00042 {
00043 int ifmt, str_len=0, temp_len, flag;
00044 int *i; float *f; double *d;
00045 char str[100], temp_fmt[10];
00046 int j;
00047
00048 va_list args;
00049 va_start(args,format);
00050 for (ifmt=0;;) {
00051 if (format[ifmt]=='$') break;
00052 if (format[ifmt]=='%') {
00053 temp_fmt[0]='%'; temp_len=1;
00054 ifmt++;
00055 for (j=0; ; j++) {
00056 flag=0;
00057 switch (format[ifmt]) {
00058 case 'i':
00059 case 'd':
00060 i = va_arg(args, int *);
00061 temp_fmt[temp_len] = 'i'; temp_fmt[++temp_len]='\0';
00062 str_len += sprintf(str+str_len,temp_fmt,*i);
00063 ifmt++;
00064 flag=1; break;
00065 case 'e':
00066 case 'f':
00067 f = va_arg(args, float *);
00068 temp_fmt[temp_len] = format[ifmt]; temp_fmt[++temp_len]='\0';
00069 str_len += sprintf(str+str_len,temp_fmt,*f);
00070 ifmt++;
00071 flag=1; break;
00072 case 'E':
00073 case 'F':
00074 d = va_arg(args, double *);
00075 temp_fmt[temp_len] = format[ifmt]+32; temp_fmt[++temp_len]='\0';
00076 str_len += sprintf(str+str_len,temp_fmt,*d);
00077 ifmt++;
00078 flag=1; break;
00079 default:
00080 if ((format[ifmt]=='.')&&(format[ifmt]<='9')||(format[ifmt]>='0')) {
00081 temp_fmt[temp_len] = format[ifmt];
00082 temp_len++; ifmt++;
00083 }
00084 else {
00085 printf("Print format error!\n"); return;
00086 }
00087 }
00088 if (flag) break;
00089 }
00090 }
00091 else if (format[ifmt]=='\\') {
00092 ifmt++;
00093 if (format[ifmt]=='n') {
00094 str[str_len] = '\n';
00095 str_len++;
00096 ifmt++;
00097 }
00098 }
00099 else {
00100 str[str_len] = format[ifmt];
00101 str_len++;
00102 ifmt++;
00103 }
00104 }
00105 str[str_len]='\0';
00106 CkPrintf("%s",str);
00107
00108
00109 va_end(args);
00110 }
00111
00112 FDECL int FTN_NAME(CHARM_IARGC,charm_iargc)(void) {
00113 return CkGetArgc()-1;
00114 }
00115
00116 FDECL void FTN_NAME(CHARM_GETARG,charm_getarg)
00117 (int *i_p,char *dest,int destLen)
00118 {
00119 int i=*i_p;
00120 if (i<0) CkAbort("charm_getarg called with negative argument!");
00121 if (i>=CkGetArgc()) CkAbort("charm_getarg called with argument > iargc!");
00122 const char *src=CkGetArgv()[i];
00123 strcpy(dest,src);
00124 for (i=strlen(dest);i<destLen;i++) dest[i]=' ';
00125 }
00126
00127
00128
00129 FDECL CmiInt8 FTN_NAME(CMIMEMORYUSAGE, cmimemoryusage) ()
00130 {
00131 CmiInt8 mem = CmiMemoryUsage();
00132 return mem;
00133 }
00134
00135 FDECL CmiInt8 FTN_NAME(CMIMAXMEMORYUSAGE, cmimaxmemoryusage) ()
00136 {
00137 return CmiMaxMemoryUsage();
00138 }
00139
00140 FDECL CmiFloat8 FTN_NAME(CMIWALLTIMER, cmiwalltimer) ()
00141 {
00142 return CmiWallTimer();
00143 }
00144
00145 FDECL CmiFloat8 FTN_NAME(CKWALLTIMER, ckwalltimer) ()
00146 {
00147 return CkWallTimer();
00148 }
00149
00150 FDECL CmiFloat8 FTN_NAME(CMICPUTIMER, cmicputimer) ()
00151 {
00152 return CmiCpuTimer();
00153 }
00154
00155 FDECL CmiFloat8 FTN_NAME(CKCPUTIMER, ckcputimer) ()
00156 {
00157 return CkCpuTimer();
00158 }
00159
00160 FDECL void FTN_NAME(CMIDISABLEISOMALLOC, cmidisableisomalloc) ()
00161 {
00162 CmiDisableIsomalloc();
00163 }
00164
00165 FDECL void FTN_NAME(CMIENABLEISOMALLOC, cmienableisomalloc) ()
00166 {
00167 CmiEnableIsomalloc();
00168 }
00169
00170 FDECL void FTN_NAME(CMIMEMORYCHECK, cmimemorycheck) ()
00171 {
00172 CmiMemoryCheck();
00173 }
00174
00175
00176
00177 FDECL void FTN_NAME(INITBIGSIMTRACE, initbigsimtrace)(int *outputParams, int *outputtiming)
00178 {
00179 initBigSimTrace(*outputParams, *outputtiming);
00180 }
00181
00182 FDECL void FTN_NAME(FINALIZEBIGSIMTRACE, finalizebigsimtrace)()
00183 {
00184 finalizeBigSimTrace();
00185 }
00186
00187 FDECL void FTN_NAME(STARTTRACEBIGSIM, starttracebigsim)()
00188 {
00189 startTraceBigSim();
00190 }
00191
00192 FDECL void FTN_NAME(ENDTRACEBIGSIM1, endtracebigsim1)(char *eventName, int *stepno, double *p1, int len)
00193 {
00194 char str[128];
00195 strncpy(str,eventName, len);
00196 str[len] = 0;
00197 endTraceBigSim(str, *stepno, *p1);
00198 }
00199
00200
00201 FDECL void FTN_NAME(ENDTRACEBIGSIM2, endtracebigsim2)(char *eventName, int *stepno, double *p1, double *p2, int len)
00202 {
00203 char str[128];
00204 strncpy(str,eventName, len);
00205 str[len] = 0;
00206 endTraceBigSim(str, *stepno, *p1, *p2);
00207 }
00208
00209 FDECL void FTN_NAME(ENDTRACEBIGSIM3, endtracebigsim3)(char *eventName, int *stepno, double *p1, double *p2, double *p3, int len)
00210 {
00211
00212 char str[128];
00213 strncpy(str,eventName, len);
00214 str[len] = 0;
00215 endTraceBigSim(str, *stepno, *p1, *p2, *p3);
00216 }
00217
00218 FDECL void FTN_NAME(ENDTRACEBIGSIM4, endtracebigsim4)(char *eventName, int *stepno, double *p1, double *p2, double *p3, double *p4, int len)
00219 {
00220
00221 char str[128];
00222 strncpy(str,eventName, len);
00223 str[len] = 0;
00224 endTraceBigSim(str, *stepno, *p1, *p2, *p3, *p4);
00225 }
00226
00227 FDECL void FTN_NAME(ENDTRACEBIGSIM5, endtracebigsim5)(char *eventName, int *stepno, double *p1, double *p2, double *p3, double *p4, double *p5, int len)
00228 {
00229
00230 char str[128];
00231 strncpy(str,eventName, len);
00232 str[len] = 0;
00233 endTraceBigSim(str, *stepno, *p1, *p2, *p3, *p4, *p5);
00234 }
00235
00236 FDECL void FTN_NAME(ENDTRACEBIGSIM6, endtracebigsim6)(char *eventName, int *stepno, double *p1, double *p2, double *p3, double *p4, double *p5, double *p6, int len)
00237 {
00238
00239 char str[128];
00240 strncpy(str,eventName, len);
00241 str[len] = 0;
00242 endTraceBigSim(str, *stepno, *p1, *p2, *p3, *p4, *p5, *p6);
00243 }
00244
00245 FDECL void FTN_NAME(ENDTRACEBIGSIM7, endtracebigsim7)(char *eventName, int *stepno, double *p1, double *p2, double *p3, double *p4, double *p5, double *p6, double *p7, int len)
00246 {
00247
00248 char str[128];
00249 strncpy(str,eventName, len);
00250 str[len] = 0;
00251 endTraceBigSim(str, *stepno, *p1, *p2, *p3, *p4, *p5, *p6, *p7);
00252 }
00253
00254 FDECL void FTN_NAME(ENDTRACEBIGSIM8, endtracebigsim8)(char *eventName, int *stepno, double *p1, double *p2, double *p3, double *p4, double *p5, double *p6, double *p7, double *p8, int len)
00255 {
00256
00257 char str[128];
00258 strncpy(str,eventName, len);
00259 str[len] = 0;
00260 endTraceBigSim(str, *stepno, *p1, *p2, *p3, *p4, *p5, *p6, *p7, *p8);
00261 }
00262
00263 FDECL void FTN_NAME(ENDTRACEBIGSIM9, endtracebigsim9)(char *eventName, int *stepno, double *p1, double *p2, double *p3, double *p4, double *p5, double *p6, double *p7, double *p8, double *p9, int len)
00264 {
00265
00266 char str[128];
00267 strncpy(str,eventName, len);
00268 str[len] = 0;
00269 endTraceBigSim(str, *stepno, *p1, *p2, *p3, *p4, *p5, *p6, *p7, *p8, *p9);
00270 }
00271
00272 FDECL void FTN_NAME(ENDTRACEBIGSIM10, endtracebigsim10)(char *eventName, int *stepno, double *p1, double *p2, double *p3, double *p4, double *p5, double *p6, double *p7, double *p8, double *p9, double *p10, int len)
00273 {
00274
00275 char str[128];
00276 strncpy(str,eventName, len);
00277 str[len] = 0;
00278 endTraceBigSim(str, *stepno, *p1, *p2, *p3, *p4, *p5, *p6, *p7, *p8, *p9, *p10);
00279 }
00280
00281 FDECL void FTN_NAME(ENDTRACEBIGSIM11, endtracebigsim11)(char *eventName, int *stepno, double *p1, double *p2, double *p3, double *p4, double *p5, double *p6, double *p7, double *p8, double *p9, double *p10, double *p11, int len)
00282 {
00283
00284 char str[128];
00285 strncpy(str,eventName, len);
00286 str[len] = 0;
00287 endTraceBigSim(str, *stepno, *p1, *p2, *p3, *p4, *p5, *p6, *p7, *p8, *p9, *p10, *p11);
00288 }
00289
00290
00291
00292