# | Line 10 | Line 10 | |
---|---|---|
10 | #include "mpiSimulation.hpp" | |
11 | #endif //is_mpi | |
12 | ||
13 | + | #include "config.h" |
14 | #include "simError.h" | |
15 | #include "mdProfile.hpp" | |
16 | ||
# | Line 30 | Line 31 | namespace mdProfileSpace { | |
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 | ||
# | Line 50 | Line 58 | void initProfile( void ){ | |
58 | #endif //is_mpi | |
59 | } | |
60 | ||
61 | < | strncpy( theNames[pro1].myName, "BASS Parse", MAX_PROFILE_NAMELENGTH ); |
62 | < | strncpy( theNames[pro2].myName, "SimSetup->CreateSim", MAX_PROFILE_NAMELENGTH ); |
63 | < | strncpy( theNames[pro3].myName, "Integrate the Sim", MAX_PROFILE_NAMELENGTH ); |
64 | < | strncpy( theNames[pro4].myName, "unamed4", MAX_PROFILE_NAMELENGTH ); |
65 | < | strncpy( theNames[pro5].myName, "unamed5", MAX_PROFILE_NAMELENGTH ); |
66 | < | strncpy( theNames[pro6].myName, "unamed6", MAX_PROFILE_NAMELENGTH ); |
67 | < | strncpy( theNames[pro7].myName, "unamed7", MAX_PROFILE_NAMELENGTH ); |
68 | < | strncpy( theNames[pro8].myName, "unamed8", MAX_PROFILE_NAMELENGTH ); |
61 | > | strncpy( theNames[pro1].myName, "Integrator->integrateStep()", MAX_PROFILE_NAMELENGTH ); |
62 | > | strncpy( theNames[pro2].myName, "Integrator->writes and stats", MAX_PROFILE_NAMELENGTH ); |
63 | > | strncpy( theNames[pro3].myName, "Integrator->preMove", MAX_PROFILE_NAMELENGTH ); |
64 | > | strncpy( theNames[pro4].myName, "Integrator->moveA", MAX_PROFILE_NAMELENGTH ); |
65 | > | strncpy( theNames[pro5].myName, "Integrator->CalcForce", MAX_PROFILE_NAMELENGTH ); |
66 | > | strncpy( theNames[pro6].myName, "Integrator->moveB", MAX_PROFILE_NAMELENGTH ); |
67 | > | strncpy( theNames[pro7].myName, "shortRange force calc", MAX_PROFILE_NAMELENGTH ); |
68 | > | strncpy( theNames[pro8].myName, "fortran force calc", MAX_PROFILE_NAMELENGTH ); |
69 | } | |
70 | ||
71 | ||
# | Line 91 | Line 99 | void writeProfiles( void ){ | |
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 | |
# | Line 140 | Line 150 | void writeProfiles( void ){ | |
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 | ||
# | Line 193 | Line 209 | void writeProfiles( void ){ | |
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 | ||
# | Line 219 | Line 243 | void writeProfiles( void ){ | |
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 | } | |
# | Line 257 | Line 286 | void writeProfiles( void ){ | |
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 | ||
# | Line 324 | Line 359 | void writeProfiles( void ){ | |
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{ | |
# | Line 339 | Line 378 | void writeProfiles( void ){ | |
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 | } |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |