/[MITgcm]/MITgcm/eesupp/src/timers.F
ViewVC logotype

Contents of /MITgcm/eesupp/src/timers.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.12 - (show annotations) (download)
Thu Nov 8 23:40:52 2001 UTC (22 years, 5 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint46n_post, checkpoint51k_post, checkpoint47e_post, checkpoint44e_post, checkpoint46l_post, checkpoint46g_pre, checkpoint47c_post, checkpoint50c_post, checkpoint46f_post, checkpoint48e_post, checkpoint50c_pre, checkpoint44f_post, checkpoint46b_post, checkpoint43a-release1mods, checkpoint51o_pre, checkpoint51l_post, checkpoint48i_post, checkpoint46l_pre, chkpt44d_post, checkpoint51, checkpoint50, checkpoint52, checkpoint50d_post, checkpoint50b_pre, checkpoint44e_pre, checkpoint51f_post, checkpoint48b_post, checkpoint51d_post, checkpoint48c_pre, checkpoint47d_pre, checkpoint51t_post, checkpoint51n_post, checkpoint51s_post, checkpoint47a_post, checkpoint48d_pre, checkpoint51j_post, checkpoint47i_post, checkpoint51n_pre, checkpoint47d_post, checkpoint46d_pre, checkpoint48d_post, release1-branch_tutorials, checkpoint48f_post, checkpoint45d_post, checkpoint46j_pre, checkpoint51l_pre, chkpt44a_post, checkpoint44h_pre, checkpoint48h_post, checkpoint51q_post, checkpoint51b_pre, checkpoint46a_post, checkpoint47g_post, checkpoint46j_post, checkpoint51h_pre, checkpoint46k_post, chkpt44c_pre, checkpoint48a_post, checkpoint45a_post, checkpoint50f_post, checkpoint50a_post, checkpoint50f_pre, checkpoint47j_post, branch-exfmods-tag, checkpoint44g_post, branchpoint-genmake2, checkpoint46e_pre, checkpoint51r_post, checkpoint48c_post, checkpoint45b_post, checkpoint46b_pre, checkpoint51i_post, release1-branch-end, release1_final_v1, checkpoint51b_post, checkpoint51c_post, checkpoint46c_pre, checkpoint46, checkpoint47b_post, checkpoint44b_post, checkpoint46h_pre, checkpoint46m_post, checkpoint46a_pre, checkpoint50g_post, checkpoint45c_post, checkpoint44h_post, checkpoint46g_post, checkpoint50h_post, checkpoint50e_pre, checkpoint50i_post, checkpoint51i_pre, checkpoint47f_post, checkpoint50e_post, chkpt44a_pre, checkpoint46i_post, checkpoint46c_post, checkpoint50d_pre, checkpoint46e_post, checkpoint51e_post, checkpoint44b_pre, checkpoint47, checkpoint44, checkpoint45, checkpoint48, checkpoint49, checkpoint46h_post, checkpoint51o_post, checkpoint51f_pre, chkpt44c_post, checkpoint48g_post, checkpoint47h_post, checkpoint44f_pre, checkpoint51g_post, ecco_c52_e35, checkpoint46d_post, checkpoint50b_post, release1-branch_branchpoint, checkpoint51m_post, checkpoint51a_post, checkpoint51p_post, checkpoint51u_post
Branch point for: branch-exfmods-curt, release1_final, release1-branch, branch-genmake2, branch-nonh, tg2-branch, checkpoint51n_branch
Changes since 1.11: +19 -12 lines
Adding TARGET_PWR3 for IBM SP3 platform.

1 C $Header: /u/gcmpack/models/MITgcmUV/eesupp/src/timers.F,v 1.11 2001/09/21 14:31:12 adcroft Exp $
2 C $Name: checkpoint43 $
3
4 #include "CPP_EEOPTIONS.h"
5
6 C-- File utils.F: General purpose support routines
7 C-- Contents
8 C-- TIMER_INDEX - Returns index associated with timer name.
9 C-- M TIMER_CONTROL - Implements timer functions for given machine.
10 C-- TIMER_PRINT - Print CPU timer statitics.
11 C-- TIMER_PRINTALL - Prints all CPU timers statistics.
12 C-- TIMER_START - Starts CPU timer for code section.
13 C-- TIMER_STOP - Stop CPU tier for code section.
14 C-- Routines marked "M" contain specific machine dependent code.
15 C-- Routines marked "U" contain UNIX OS calls.
16
17 CGG Modified following A. Biastoch for use with SP3. Is backwards
18 CGG compatible. G. Gebbie, gebbie@mit.edu, 20 Oct 2001, Scripps.
19
20 CBOP
21 C !ROUTINE: TIMER_INDEX
22
23 C !INTERFACE:
24 INTEGER FUNCTION TIMER_INDEX (
25 I name,timerNames,maxTimers,nTimers )
26 IMPLICIT NONE
27
28 C !DESCRIPTION:
29 C *==========================================================*
30 C | FUNCTION TIMER_INDEX
31 C | o Timing support routine.
32 C *==========================================================*
33 C | Return index in timer data structure of timer named
34 C | by the function argument "name".
35 C *==========================================================*
36
37 C !INPUT/OUTPUT PARAMETERS:
38 C == Routine arguements ==
39 C maxTimers :: Total number of timers allowed
40 C nTimers :: Current number of timers
41 C name :: Name of timer to find
42 C timerNames :: List of valid timer names
43 INTEGER maxTimers
44 INTEGER nTimers
45 CHARACTER*(*) name
46 CHARACTER*(*) timerNames(maxTimers)
47
48 C !LOCAL VARIABLES:
49 C == Local variables ==
50 C I :: Index variable
51 INTEGER I
52 CEOP
53 C
54 TIMER_INDEX = 0
55 IF ( name .EQ. ' ' ) THEN
56 TIMER_INDEX = -1
57 ELSE
58 DO 10 I = 1, nTimers
59 IF ( name .NE. timerNames(I) ) GOTO 10
60 TIMER_INDEX = I
61 GOTO 11
62 10 CONTINUE
63 11 CONTINUE
64 ENDIF
65 RETURN
66 END
67
68 CBOP
69 C !ROUTINE: TIMER_CONTROL
70
71 C !INTERFACE:
72 SUBROUTINE TIMER_CONTROL ( name , action , callProc , myThreadId )
73 IMPLICIT NONE
74
75 C !DESCRIPTION:
76 C *==========================================================*
77 C | SUBROUTINE TIMER_CONTROL |
78 C | o Timing routine. |
79 C *==========================================================*
80 C | User callable interface to timing routines. Timers are |
81 C | created, stopped, started and queried only through this |
82 C | rtouine. |
83 C *==========================================================*
84
85 C !USES:
86 #include "SIZE.h"
87 #include "EEPARAMS.h"
88 #include "EESUPPORT.h"
89 INTEGER TIMER_INDEX
90 INTEGER IFNBLNK
91 INTEGER ILNBLNK
92 EXTERNAL TIMER_INDEX
93 EXTERNAL IFNBLNK
94 EXTERNAL ILNBLNK
95
96 C !INPUT/OUTPUT PARAMETERS:
97 C name :: name of the timer
98 C action :: operation to perform with this timer
99 C callProc :: procedure calling this routine
100 C myThreadId :: instance number of this thread
101 CHARACTER*(*) name
102 CHARACTER*(*) action
103 CHARACTER*(*) callProc
104 INTEGER myThreadId
105 C
106 C !LOCAL VARIABLES:
107 C maxTimers :: Total numer of timer allowed
108 C maxString :: Max length of a timer name
109 INTEGER maxTimers
110 INTEGER maxString
111 PARAMETER ( maxTimers = 40 )
112 PARAMETER ( maxString = 80 )
113 C timerStarts :: Timer counters for each timer and each thread
114 C timerStops
115 C timerUser
116 C timerWall
117 C timerSys
118 C timerT0User
119 C timerT0Wall
120 C timerT0Sys
121 C timerStatus :: START/STOP/RUNNING Status of the timer
122 C timerNameLen :: Length of timer name
123 C timerNames :: Table of timer names
124 C nTimers :: Number of active timers
125 INTEGER timerStarts( maxTimers , MAX_NO_THREADS)
126 SAVE timerStarts
127 INTEGER timerStops ( maxTimers , MAX_NO_THREADS)
128 SAVE timerStops
129 Real*8 timerUser ( maxTimers , MAX_NO_THREADS)
130 SAVE timerUser
131 Real*8 timerWall ( maxTimers , MAX_NO_THREADS)
132 SAVE timerWall
133 Real*8 timerSys ( maxTimers , MAX_NO_THREADS)
134 SAVE timerSys
135 Real*8 timerT0User( maxTimers , MAX_NO_THREADS)
136 SAVE timerT0User
137 Real*8 timerT0Wall( maxTimers , MAX_NO_THREADS)
138 SAVE timerT0Wall
139 Real*8 timerT0Sys ( maxTimers , MAX_NO_THREADS)
140 SAVE timerT0Sys
141 INTEGER timerStatus( maxTimers , MAX_NO_THREADS)
142 SAVE timerStatus
143 INTEGER timerNameLen( maxTimers , MAX_NO_THREADS)
144 SAVE timerNameLen
145 CHARACTER*(maxString) timerNames( maxTimers , MAX_NO_THREADS)
146 SAVE timerNames
147 INTEGER nTimers(MAX_NO_THREADS)
148 CHARACTER*(maxString) tmpName
149 CHARACTER*(maxString) tmpAction
150 INTEGER iTimer
151 INTEGER ISTART
152 INTEGER IEND
153 INTEGER STOPPED
154 PARAMETER ( STOPPED = 0 )
155 INTEGER RUNNING
156 PARAMETER ( RUNNING = 1 )
157 CHARACTER*(*) STOP
158 PARAMETER ( STOP = 'STOP' )
159 CHARACTER*(*) START
160 PARAMETER ( START = 'START' )
161 CHARACTER*(*) PRINT
162 PARAMETER ( PRINT = 'PRINT' )
163 CHARACTER*(*) PRINTALL
164 PARAMETER ( PRINTALL = 'PRINTALL' )
165 INTEGER I
166 Real*8 userTime
167 Real*8 systemTime
168 Real*8 wallClockTime
169 CHARACTER*(MAX_LEN_MBUF) msgBuffer
170 DATA nTimers /MAX_NO_THREADS*0/
171 SAVE nTimers
172 CEOP
173 C
174 ISTART = IFNBLNK(name)
175 IEND = ILNBLNK(name)
176 IF ( IEND - ISTART + 1 .GT. maxString ) GOTO 901
177 IF ( ISTART .NE. 0 ) THEN
178 tmpName = name(ISTART:IEND)
179 CALL UCASE( tmpName )
180 ELSE
181 tmpName = ' '
182 ENDIF
183 ISTART = IFNBLNK(action)
184 IEND = ILNBLNK(action)
185 IF ( ISTART .EQ. 0 ) GOTO 902
186 IF ( IEND - ISTART + 1 .GT. maxString ) GOTO 903
187 tmpAction = action(ISTART:IEND)
188 CALL UCASE( tmpAction )
189 C
190 iTimer=TIMER_INDEX(tmpName,timerNames(1,myThreadId),
191 & maxTimers,nTimers(myThreadId))
192 C
193 IF ( tmpAction .EQ. START ) THEN
194 IF ( iTimer .EQ. 0 ) THEN
195 IF ( nTimers(myThreadId) .EQ. maxTimers ) GOTO 904
196 nTimers(myThreadId) = nTimers(myThreadId) + 1
197 iTimer = nTimers(myThreadId)
198 timerNames(iTimer,myThreadId) = tmpName
199 timerNameLen(iTimer,myThreadId) =
200 & ILNBLNK(tmpName)-IFNBLNK(tmpName)+1
201 timerUser(iTimer,myThreadId) = 0.
202 timerSys (iTimer,myThreadId) = 0.
203 timerWall(iTimer,myThreadId) = 0.
204 timerStarts(iTimer,myThreadId) = 0
205 timerStops (iTimer,myThreadId) = 0
206 timerStatus(iTimer,myThreadId) = STOPPED
207 ENDIF
208 IF ( timerStatus(iTimer,myThreadId) .NE. RUNNING ) THEN
209 CALL TIMER_GET_TIME( userTime, systemTime, wallClockTime )
210 timerT0User(iTimer,myThreadId) = userTime
211 timerT0Sys(iTimer,myThreadId) = systemTime
212 timerT0Wall(iTimer,myThreadId) = wallClockTime
213 timerStatus(iTimer,myThreadId) = RUNNING
214 timerStarts(iTimer,myThreadId) =
215 & timerStarts(iTimer,myThreadId)+1
216 ENDIF
217 ELSEIF ( tmpAction .EQ. STOP ) THEN
218 IF ( iTimer .EQ. 0 ) GOTO 905
219 IF ( timerStatus(iTimer,myThreadId) .EQ. RUNNING ) THEN
220 CALL TIMER_GET_TIME( userTime, systemTime, wallClockTime )
221 timerUser(iTimer,myThreadId) =
222 & timerUser(iTimer,myThreadId) +
223 & userTime -
224 & timerT0User(iTimer,myThreadId)
225 timerSys (iTimer,myThreadId) =
226 & timerSys(iTimer,myThreadId) +
227 & systemTime -
228 & timerT0Sys(iTimer,myThreadId)
229 timerWall(iTimer,myThreadId) =
230 & timerWall(iTimer,myThreadId) +
231 & wallClockTime -
232 & timerT0Wall(iTimer,myThreadId)
233 timerStatus(iTimer,myThreadId) = STOPPED
234 timerStops (iTimer,myThreadId) =
235 & timerStops (iTimer,myThreadId)+1
236 ENDIF
237 ELSEIF ( tmpAction .EQ. PRINT ) THEN
238 IF ( iTimer .EQ. 0 ) GOTO 905
239 WRITE(msgBuffer,*)
240 & ' Seconds in section "',
241 & timerNames(iTimer,myThreadId)(1:timerNameLen(iTimer,myThreadId))
242 & ,'":'
243 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
244 & SQUEEZE_RIGHT,myThreadId)
245 WRITE(msgBuffer,*) ' User time:',
246 & timerUser(iTimer,myThreadId)
247 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
248 & SQUEEZE_RIGHT,myThreadId)
249 WRITE(msgBuffer,*) ' System time:',
250 & timerSys(iTimer,myThreadId)
251 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
252 & SQUEEZE_RIGHT,myThreadId)
253 WRITE(msgBuffer,*) ' Wall clock time:',
254 & timerWall(iTimer,myThreadId)
255 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
256 & SQUEEZE_RIGHT,myThreadId)
257 WRITE(msgBuffer,*) ' No. starts:',
258 & timerStarts(iTimer,myThreadId)
259 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
260 & SQUEEZE_RIGHT,myThreadId)
261 WRITE(msgBuffer,*) ' No. stops:',
262 & timerStops(iTimer,myThreadId)
263 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
264 & SQUEEZE_RIGHT,myThreadId)
265 ELSEIF ( tmpAction .EQ. PRINTALL ) THEN
266 DO 10 I = 1, nTimers(myThreadId)
267 WRITE(msgBuffer,*) ' Seconds in section "',
268 & timerNames(I,myThreadId)(1:timerNameLen(I,myThreadId))
269 & ,'":'
270 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
271 & SQUEEZE_RIGHT,myThreadId)
272 WRITE(msgBuffer,*) ' User time:',
273 & timerUser(I,myThreadId)
274 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
275 & SQUEEZE_RIGHT,myThreadId)
276 WRITE(msgBuffer,*) ' System time:',
277 & timerSys(I,myThreadId)
278 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
279 & SQUEEZE_RIGHT,myThreadId)
280 WRITE(msgBuffer,*) ' Wall clock time:',
281 & timerWall(I,myThreadId)
282 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
283 & SQUEEZE_RIGHT,myThreadId)
284 WRITE(msgBuffer,*) ' No. starts:',
285 & timerStarts(I,myThreadId)
286 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
287 & SQUEEZE_RIGHT,myThreadId)
288 WRITE(msgBuffer,*) ' No. stops:',
289 & timerStops(I,myThreadId)
290 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
291 & SQUEEZE_RIGHT,myThreadId)
292 10 CONTINUE
293 ELSE
294 GOTO 903
295 ENDIF
296 C
297 1000 CONTINUE
298 C
299 RETURN
300 901 CONTINUE
301 WRITE(msgBuffer,'(A)')
302 &' '
303 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
304 & SQUEEZE_RIGHT,myThreadId)
305 WRITE(msgBuffer,*)
306 &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
307 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
308 & SQUEEZE_RIGHT,myThreadId)
309 WRITE(msgBuffer,*)
310 &'procedure: "',callProc,'".'
311 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
312 & SQUEEZE_RIGHT,myThreadId)
313 WRITE(msgBuffer,*)
314 &'Timer name "',name(ISTART:IEND),'" is invalid.'
315 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
316 & SQUEEZE_RIGHT,myThreadId)
317 WRITE(msgBuffer,*)
318 &' Names must have fewer than',maxString+1,' characters.'
319 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
320 & SQUEEZE_RIGHT,myThreadId)
321 WRITE(msgBuffer,*)
322 &'*******************************************************'
323 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
324 & SQUEEZE_RIGHT,myThreadId)
325 GOTO 1000
326 902 CONTINUE
327 WRITE(msgBuffer,*)
328 &' '
329 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
330 & SQUEEZE_RIGHT,myThreadId)
331 WRITE(msgBuffer,*)
332 &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
333 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
334 & SQUEEZE_RIGHT,myThreadId)
335 WRITE(msgBuffer,*)
336 &'procedure: "',callProc,'".'
337 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
338 & SQUEEZE_RIGHT,myThreadId)
339 WRITE(msgBuffer,*)
340 &' No timer action specified.'
341 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
342 & SQUEEZE_RIGHT,myThreadId)
343 WRITE(msgBuffer,*)
344 &' Valid actions are:'
345 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
346 & SQUEEZE_RIGHT,myThreadId)
347 WRITE(msgBuffer,*)
348 &' "START", "STOP", "PRINT" and "PRINTALL".'
349 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
350 & SQUEEZE_RIGHT,myThreadId)
351 WRITE(msgBuffer,*)
352 &'*******************************************************'
353 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
354 & SQUEEZE_RIGHT,myThreadId)
355 GOTO 1000
356 903 CONTINUE
357 WRITE(msgBuffer,*)
358 &' '
359 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
360 & SQUEEZE_RIGHT,myThreadId)
361 WRITE(msgBuffer,*)
362 &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
363 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
364 & SQUEEZE_RIGHT,myThreadId)
365 WRITE(msgBuffer,*)
366 &'procedure: "',callProc,'".'
367 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
368 & SQUEEZE_RIGHT,myThreadId)
369 WRITE(msgBuffer,*)
370 &'Timer action"',name(ISTART:IEND),'" is invalid.'
371 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
372 & SQUEEZE_RIGHT,myThreadId)
373 WRITE(msgBuffer,*)
374 &' Valid actions are:'
375 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
376 & SQUEEZE_RIGHT,myThreadId)
377 WRITE(msgBuffer,*)
378 &' "START", "STOP", "PRINT" and "PRINTALL".'
379 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
380 & SQUEEZE_RIGHT,myThreadId)
381 WRITE(msgBuffer,*)
382 &'*******************************************************'
383 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
384 & SQUEEZE_RIGHT,myThreadId)
385 GOTO 1000
386 904 CONTINUE
387 WRITE(msgBuffer,*)
388 &' '
389 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
390 & SQUEEZE_RIGHT,myThreadId)
391 WRITE(msgBuffer,*)
392 &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
393 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
394 & SQUEEZE_RIGHT,myThreadId)
395 WRITE(msgBuffer,*)
396 &'procedure: "',callProc,'".'
397 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
398 & SQUEEZE_RIGHT,myThreadId)
399 WRITE(msgBuffer,*)
400 &'Timer "',name(ISTART:IEND),'" cannot be created.'
401 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
402 & SQUEEZE_RIGHT,myThreadId)
403 WRITE(msgBuffer,*)
404 &' Only ',maxTimers,' timers are allowed.'
405 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
406 & SQUEEZE_RIGHT,myThreadId)
407 WRITE(msgBuffer,*)
408 &'*******************************************************'
409 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
410 & SQUEEZE_RIGHT,myThreadId)
411 GOTO 1000
412 905 CONTINUE
413 WRITE(msgBuffer,*)
414 &' '
415 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
416 & SQUEEZE_RIGHT,myThreadId)
417 WRITE(msgBuffer,*)
418 &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
419 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
420 & SQUEEZE_RIGHT,myThreadId)
421 WRITE(msgBuffer,*)
422 &'procedure: "',callProc,'".'
423 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
424 & SQUEEZE_RIGHT,myThreadId)
425 WRITE(msgBuffer,*)
426 &'Timer name is blank.'
427 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
428 & SQUEEZE_RIGHT,myThreadId)
429 WRITE(msgBuffer,*)
430 &' A name must be used with "START", "STOP" or "PRINT".'
431 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
432 & SQUEEZE_RIGHT,myThreadId)
433 WRITE(msgBuffer,*)
434 &'*******************************************************'
435 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
436 & SQUEEZE_RIGHT,myThreadId)
437 GOTO 1000
438 END
439
440 CBOP
441 C !ROUTINE: TIMER_GET_TIME
442
443 C !INTERFACE:
444 SUBROUTINE TIMER_GET_TIME(
445 O userTime,
446 O systemTime,
447 O wallClockTime )
448 IMPLICIT NONE
449
450 C !DESCRIPTION:
451 C *==========================================================*
452 C | SUBROUTINE TIMER_GET_TIME
453 C | o Query system timer routines.
454 C *==========================================================*
455 C | Routine returns total elapsed time for program so far.
456 C | Three times are returned that conventionally are used as
457 C | user time, system time and wall-clock time. Not all these
458 C | numbers are available on all machines.
459 C *==========================================================*
460
461 C !INPUT/OUTPUT PARAMETERS:
462 C userTime :: User time returned
463 C systemTime :: System time returned
464 C wallClockTime :: Wall clock time returned
465 Real*8 userTime
466 Real*8 systemTime
467 Real*8 wallClockTime
468
469 C !USES:
470 #ifndef TARGET_T3E
471 # ifndef TARGET_CRAY_VECTOR
472 # ifdef TARGET_PWR3
473 Real*8 system_time, user_time, timenow
474 # else
475 Real*4 ETIME
476 EXTERNAL ETIME
477 # endif
478 # endif
479 #endif
480
481 C !LOCAL VARIABLES:
482 C ACTUAL, TARRAY, :: Temps. to hold times
483 C wTime
484 Real*4 ACTUAL, TARRAY(2)
485 Real*8 wtime
486 CEOP
487
488 C Real*8 MPI_Wtime
489 C EXTERNAL MPI_Wtime
490
491 #if (defined (TARGET_PWR3))
492 userTime = user_time()
493 systemTime = system_time()
494 wallClockTime = timenow()
495 #elif (defined (TARGET_T3E) || defined (TARGET_CRAY_VECTOR))
496 userTime = 0.
497 systemTime = 0.
498 wallClockTime = 0.
499 #else
500 ACTUAL = ETIME(TARRAY)
501 userTime = TARRAY(1)
502 systemTime = TARRAY(2)
503 CALL CLOC(wTime)
504 wallClockTime = wtime
505 #endif
506
507 #ifdef ALLOW_USE_MPI
508 C wtime = MPI_Wtime()
509 C wallClockTime = wtime
510 #endif /* ALLOW_USE_MPI */
511 #ifndef ALLOW_USE_MPI
512 C wallClockTime = 0.
513 #endif
514
515 RETURN
516 END
517
518 CBOP
519
520 C !ROUTINE: TIMER_PRINTALL
521
522 C !INTERFACE:
523 SUBROUTINE TIMER_PRINTALL( myThreadId )
524 IMPLICIT NONE
525
526 C !DESCRIPTION:
527 C *==========================================================*
528 C | SUBROUTINE TIMER_PRINTALL
529 C | o Print timer information
530 C *==========================================================*
531 C | Request print out of table of timing from all timers.
532 C *==========================================================*
533
534 C !INPUT PARAMETERS:
535 C myThreadId :: This threads number
536 INTEGER myThreadId
537 CEOP
538
539 CALL TIMER_CONTROL( ' ', 'PRINTALL', 'TIMER_PRINTALL' ,
540 & myThreadId )
541 C
542 RETURN
543 END
544
545 CBOP
546 C !ROUTINE: TIMER_START
547
548 C !INTERFACE:
549 SUBROUTINE TIMER_START ( string , myThreadId )
550 IMPLICIT NONE
551
552 C !DESCRIPTION:
553 C Start timer named "string".
554
555 C !INPUT PARAMETERS:
556 C string :: Name of timer
557 C myThreadId :: My thread number
558 CHARACTER*(*) string
559 INTEGER myThreadId
560 CEOP
561 C
562 CALL TIMER_CONTROL( string, 'START', 'TIMER_START' , myThreadId)
563 C
564 RETURN
565 END
566 CBOP
567 C !ROUTINE: TIMER_STOP
568
569 C !INTERFACE:
570 SUBROUTINE TIMER_STOP ( string , myThreadId)
571 IMPLICIT NONE
572
573 C !DESCRIPTION:
574 C Stop timer named "string".
575
576 C !INPUT PARAMETERS:
577 C string :: Name of timer
578 C myThreadId :: My thread number
579 CHARACTER*(*) string
580 INTEGER myThreadId
581 CEOP
582 C
583 CALL TIMER_CONTROL( string, 'STOP', 'TIMER_STOP' , myThreadId )
584 C
585 RETURN
586 END
587 C***********************************************************************

  ViewVC Help
Powered by ViewVC 1.1.22