| 10 |
|
#include "mpiSimulation.hpp" |
| 11 |
|
#endif //is_mpi |
| 12 |
|
|
| 13 |
+ |
#include "config.h" |
| 14 |
|
#include "simError.h" |
| 15 |
|
#include "mdProfile.hpp" |
| 16 |
|
|
| 31 |
|
#ifdef IS_MPI |
| 32 |
|
double globalTime[N_PROFILES]; |
| 33 |
|
#endif //is_mpi |
| 34 |
+ |
|
| 35 |
|
|
| 36 |
|
} |
| 37 |
|
|
| 38 |
+ |
extern "C"{ |
| 39 |
+ |
|
| 40 |
+ |
void F90_FUNC(gettimes, GETTIMES)(double* forceTime, |
| 41 |
+ |
double* commTime); |
| 42 |
+ |
} |
| 43 |
|
|
| 44 |
+ |
|
| 45 |
|
using namespace mdProfileSpace; |
| 46 |
|
|
| 47 |
|
|
| 99 |
|
int days, hours, minutes, secs, msecs; |
| 100 |
|
double donkey; |
| 101 |
|
|
| 102 |
+ |
double forceTime, commTime; |
| 103 |
+ |
|
| 104 |
|
#ifdef IS_MPI |
| 105 |
|
int j; |
| 106 |
|
|
| 107 |
|
MPI_Status istatus; |
| 108 |
|
|
| 109 |
< |
double nodeTime; |
| 109 |
> |
double nodeTime, nodeForceTime, nodeCommTime; |
| 110 |
|
double nodeAccum[N_PROFILES]; |
| 111 |
|
double nodePercent[N_PROFILES]; |
| 112 |
|
|
| 113 |
< |
double globalTime; |
| 113 |
> |
double globalTime, globalForceTime, globalCommTime; |
| 114 |
|
double globalAccum[N_PROFILES]; |
| 115 |
|
double globalPercent[N_PROFILES]; |
| 116 |
|
#endif // is_mpi |
| 150 |
|
secs = (int)donkey; |
| 151 |
|
msecs = (int)( (donkey - secs) * 1000 ); |
| 152 |
|
|
| 153 |
+ |
F90_FUNC(gettimes, GETTIMES)(&forceTime, &commTime); |
| 154 |
+ |
|
| 155 |
|
fprintf( stdout, |
| 156 |
|
"----------------------------------------------------------------------------\n" |
| 157 |
< |
" Total Time = %03d:%02d:%02d:%02d.%03d ( %G sec )\n", |
| 157 |
> |
" Total Time = %03d:%02d:%02d:%02d.%03d ( %G sec )\n" |
| 158 |
> |
"\n" |
| 159 |
> |
" From Fortran: forceTime = %G secs; communicationTime = %G secs.\n", |
| 160 |
|
days, |
| 161 |
|
hours, |
| 162 |
|
minutes, |
| 163 |
|
secs, |
| 164 |
|
msecs, |
| 165 |
< |
totalTime ); |
| 165 |
> |
totalTime, |
| 166 |
> |
forceTime, |
| 167 |
> |
commTime); |
| 168 |
|
|
| 169 |
|
#else // the parrallel version |
| 170 |
|
|
| 209 |
|
secs = (int)donkey; |
| 210 |
|
msecs = (int)( (donkey - secs) * 1000 ); |
| 211 |
|
|
| 212 |
+ |
F90_FUNC(gettimes, GETTIMES)(&forceTime, &commTime); |
| 213 |
+ |
|
| 214 |
|
fprintf( stdout, |
| 215 |
|
"----------------------------------------------------------------------------\n" |
| 216 |
< |
" Total Time = %03d:%02d:%02d:%02d.%03d ( %G sec )\n", |
| 216 |
> |
" Total Time = %03d:%02d:%02d:%02d.%03d ( %G sec )\n" |
| 217 |
> |
"\n" |
| 218 |
> |
" From Fortran: forceTime = %G secs; communicationTime = %G secs.\n", |
| 219 |
|
days, |
| 220 |
|
hours, |
| 221 |
|
minutes, |
| 222 |
|
secs, |
| 223 |
|
msecs, |
| 224 |
< |
totalTime ); |
| 224 |
> |
totalTime, |
| 225 |
> |
forceTime, |
| 226 |
> |
commTime); |
| 227 |
|
|
| 228 |
|
// now the rest of the nodes |
| 229 |
|
|
| 230 |
|
nodeTots[0] = totalTime; |
| 231 |
|
|
| 232 |
|
globalTime = totalTime; |
| 233 |
+ |
globalForceTime = forceTime; |
| 234 |
+ |
globalCommTime = commTime; |
| 235 |
|
for(i=0;i<N_PROFILES;i++) |
| 236 |
|
globalAccum[i] = accumTime[i]; |
| 237 |
|
|
| 243 |
|
MPI_Recv(nodeAccum, N_PROFILES, MPI_DOUBLE, j, |
| 244 |
|
1, MPI_COMM_WORLD, &istatus ); |
| 245 |
|
|
| 246 |
+ |
MPI_Recv(&nodeForceTime, 1, MPI_DOUBLE, j, |
| 247 |
+ |
1, MPI_COMM_WORLD, &istatus ); |
| 248 |
+ |
MPI_Recv(&nodeCommTime, 1, MPI_DOUBLE, j, |
| 249 |
+ |
1, MPI_COMM_WORLD, &istatus ); |
| 250 |
+ |
|
| 251 |
|
for(i=0;i<N_PROFILES;i++){ |
| 252 |
|
nodeTime += nodeAccum[i]; |
| 253 |
|
} |
| 286 |
|
|
| 287 |
|
fprintf( stdout, |
| 288 |
|
"----------------------------------------------------------------------------\n" |
| 289 |
< |
" Total Time = %03d:%02d:%02d:%02d.%03d ( %G sec )\n", |
| 289 |
> |
" Total Time = %03d:%02d:%02d:%02d.%03d ( %G sec )\n" |
| 290 |
> |
"\n" |
| 291 |
> |
" From Fortran: forceTime = %G secs; communicationTime = %G secs.\n", |
| 292 |
|
days, |
| 293 |
|
hours, |
| 294 |
|
minutes, |
| 295 |
|
secs, |
| 296 |
|
msecs, |
| 297 |
< |
nodeTime ); |
| 297 |
> |
nodeTime, |
| 298 |
> |
nodeForceTime, |
| 299 |
> |
nodeCommTime); |
| 300 |
|
|
| 301 |
|
for(i=0;i<N_PROFILES;i++) |
| 302 |
|
globalAccum[i] += nodeAccum[i]; |
| 303 |
|
|
| 304 |
|
globalTime += nodeTime; |
| 305 |
+ |
globalForceTime += nodeForceTime; |
| 306 |
+ |
globalCommTime += nodeCommTime; |
| 307 |
|
nodeTots[j] = nodeTime; |
| 308 |
|
} |
| 309 |
|
|
| 359 |
|
|
| 360 |
|
fprintf( stdout, |
| 361 |
|
"----------------------------------------------------------------------------\n" |
| 362 |
< |
" Total Time = %03d:%02d:%02d:%02d.%03d ( %G sec )\n", |
| 362 |
> |
" Total Time = %03d:%02d:%02d:%02d.%03d ( %G sec )\n" |
| 363 |
> |
"\n" |
| 364 |
> |
" From Fortran: forceTime = %G secs; communicationTime = %G secs.\n", |
| 365 |
|
days, |
| 366 |
|
hours, |
| 367 |
|
minutes, |
| 368 |
|
secs, |
| 369 |
|
msecs, |
| 370 |
< |
globalTime ); |
| 370 |
> |
globalTime, |
| 371 |
> |
globalForceTime, |
| 372 |
> |
globalCommTime); |
| 373 |
|
} |
| 374 |
|
|
| 375 |
|
else{ |
| 378 |
|
|
| 379 |
|
if( worldRank == j ){ |
| 380 |
|
|
| 381 |
+ |
F90_FUNC(gettimes, GETTIMES)(&forceTime, &commTime); |
| 382 |
+ |
|
| 383 |
|
MPI_Send( accumTime, N_PROFILES, MPI_DOUBLE, 0, 1, MPI_COMM_WORLD ); |
| 384 |
+ |
MPI_Send( &forceTime, 1, MPI_DOUBLE, 0, 1, MPI_COMM_WORLD ); |
| 385 |
+ |
MPI_Send( &commTime, 1, MPI_DOUBLE, 0, 1, MPI_COMM_WORLD ); |
| 386 |
|
} |
| 387 |
|
} |
| 388 |
|
} |