/[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.19 - (show annotations) (download)
Tue Jun 7 20:52:42 2005 UTC (18 years, 11 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint57m_post, checkpoint57s_post, checkpoint57y_post, checkpoint57r_post, checkpoint57i_post, checkpoint57n_post, checkpoint57l_post, checkpoint57t_post, checkpoint57v_post, checkpoint57y_pre, checkpoint57p_post, checkpint57u_post, checkpoint57q_post, checkpoint57j_post, checkpoint57o_post, checkpoint57k_post, checkpoint57w_post, checkpoint57x_post
Changes since 1.18: +7 -1 lines
 o add IGNORE_TIME define and -ignore_time option to genmake2 as an
   end-run around the C/Fortran linking horror in eesup/src/timers.F

1 C $Header: /u/gcmpack/MITgcm/eesupp/src/timers.F,v 1.18 2005/01/13 00:10:38 ce107 Exp $
2 C $Name: $
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 CEH3 This needs to be further cleaned up using a HAVE_CLOC define
471 CEH3 that is diagnosed by genmake
472 CEH3 #ifndef HAVE_FDATE
473 Real*8 system_time, user_time, timenow
474 CEH3 #else
475 #ifdef TARGET_AIX
476 Real*4 ETIME_
477 EXTERNAL ETIME_
478 #else
479 Real*4 ETIME
480 EXTERNAL ETIME
481 #endif
482 CEH3 #endif
483
484 C !LOCAL VARIABLES:
485 C ACTUAL, TARRAY, :: Temps. to hold times
486 C wTime
487 Real*4 ACTUAL, TARRAY(2)
488 Real*8 wtime
489 CEOP
490
491 C Real*8 MPI_Wtime
492 C EXTERNAL MPI_Wtime
493
494 #ifndef IGNORE_TIME
495
496 CCE107 Fixed for AIX and UNICOS
497 #ifdef TARGET_AIX
498 ACTUAL = ETIME_(TARRAY)
499 userTime = TARRAY(1)
500 systemTime = TARRAY(2)
501 wallClockTime = timenow()
502 #elif (defined (TARGET_T3E) || defined (TARGET_CRAY_VECTOR))
503 userTime = SECOND()
504 systemTime = 0.
505 wallClockTime = SECONDR()
506 #else
507 #ifdef HAVE_ETIME
508 ACTUAL = ETIME(TARRAY)
509 #else
510 TARRAY(1) = user_time()
511 TARRAY(2) = system_time()
512 #endif
513 userTime = TARRAY(1)
514 systemTime = TARRAY(2)
515 #ifdef HAVE_CLOC
516 CALL CLOC(wTime)
517 #else
518 wtime = timenow()
519 #endif /* HAVE_CLOC */
520 wallClockTime = wtime
521 #endif /* CRAY defines */
522
523 CCE107 Sometimes MPI_Wtime has better resolution...
524 #if (defined (ALLOW_USE_MPI) && defined (USE_MPI_WTIME))
525 wtime = MPI_Wtime()
526 wallClockTime = wtime
527 #endif /* ALLOW_USE_MPI && USE_MPI_WTIME */
528
529 #else /* IGNORE_TIME */
530 wtime = 0.0
531 #endif /* IGNORE_TIME */
532
533 RETURN
534 END
535
536 CBOP
537
538 C !ROUTINE: TIMER_PRINTALL
539
540 C !INTERFACE:
541 SUBROUTINE TIMER_PRINTALL( myThreadId )
542 IMPLICIT NONE
543
544 C !DESCRIPTION:
545 C *==========================================================*
546 C | SUBROUTINE TIMER\_PRINTALL
547 C | o Print timer information
548 C *==========================================================*
549 C | Request print out of table of timing from all timers.
550 C *==========================================================*
551
552 C !INPUT PARAMETERS:
553 C myThreadId :: This threads number
554 INTEGER myThreadId
555 CEOP
556
557 CALL TIMER_CONTROL( ' ', 'PRINTALL', 'TIMER_PRINTALL' ,
558 & myThreadId )
559 C
560 RETURN
561 END
562
563 CBOP
564 C !ROUTINE: TIMER_START
565
566 C !INTERFACE:
567 SUBROUTINE TIMER_START ( string , myThreadId )
568 IMPLICIT NONE
569
570 C !DESCRIPTION:
571 C Start timer named "string".
572
573 C !INPUT PARAMETERS:
574 C string :: Name of timer
575 C myThreadId :: My thread number
576 CHARACTER*(*) string
577 INTEGER myThreadId
578 CEOP
579 C
580 CALL TIMER_CONTROL( string, 'START', 'TIMER_START' , myThreadId)
581 C
582 RETURN
583 END
584 CBOP
585 C !ROUTINE: TIMER_STOP
586
587 C !INTERFACE:
588 SUBROUTINE TIMER_STOP ( string , myThreadId)
589 IMPLICIT NONE
590
591 C !DESCRIPTION:
592 C Stop timer named "string".
593
594 C !INPUT PARAMETERS:
595 C string :: Name of timer
596 C myThreadId :: My thread number
597 CHARACTER*(*) string
598 INTEGER myThreadId
599 CEOP
600 C
601 CALL TIMER_CONTROL( string, 'STOP', 'TIMER_STOP' , myThreadId )
602 C
603 RETURN
604 END
605 C***********************************************************************

  ViewVC Help
Powered by ViewVC 1.1.22