/[MITgcm]/MITgcm_contrib/ESMF/global_ocean.128x64x15/code/timers.F
ViewVC logotype

Annotation of /MITgcm_contrib/ESMF/global_ocean.128x64x15/code/timers.F

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


Revision 1.1.1.1 - (hide annotations) (download) (vendor branch)
Sun Feb 15 22:28:21 2004 UTC (21 years, 5 months ago) by cnh
Branch: MAIN, Initial
CVS Tags: adoption_1_0_pre_A, Baseline, HEAD
Changes since 1.1: +0 -0 lines
Initial checkin

1 cnh 1.1 C $Header: /u/u0/gcmpack/MITgcm/eesupp/src/timers.F,v 1.15 2003/11/14 19:01:36 edhill 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     Real*4 ETIME
476     EXTERNAL ETIME
477     CEH3 #endif
478    
479     C !LOCAL VARIABLES:
480     C ACTUAL, TARRAY, :: Temps. to hold times
481     C wTime
482     Real*4 ACTUAL, TARRAY(2)
483     Real*8 wtime
484     CEOP
485    
486     C Real*8 MPI_Wtime
487     C EXTERNAL MPI_Wtime
488    
489     #if (defined (TARGET_PWR3))
490     ! userTime = user_time()
491     ! systemTime = system_time()
492     ! wallClockTime = timenow()
493     userTime = 0.
494     systemTime = 0.
495     wallClockTime = 0.
496     #elif (defined (TARGET_T3E) || defined (TARGET_CRAY_VECTOR))
497     userTime = 0.
498     systemTime = 0.
499     wallClockTime = 0.
500     #else
501     ACTUAL = ETIME(TARRAY)
502     userTime = TARRAY(1)
503     systemTime = TARRAY(2)
504     #ifdef HAVE_CLOC
505     CALL CLOC(wTime)
506     #else
507     wtime = 0.
508     #endif /* HAVE_CLOC */
509     wallClockTime = wtime
510     #endif /* CRAY defines */
511    
512     #ifdef ALLOW_USE_MPI
513     C wtime = MPI_Wtime()
514     C wallClockTime = wtime
515     #endif /* ALLOW_USE_MPI */
516     #ifndef ALLOW_USE_MPI
517     C wallClockTime = 0.
518     #endif
519    
520     RETURN
521     END
522    
523     CBOP
524    
525     C !ROUTINE: TIMER_PRINTALL
526    
527     C !INTERFACE:
528     SUBROUTINE TIMER_PRINTALL( myThreadId )
529     IMPLICIT NONE
530    
531     C !DESCRIPTION:
532     C *==========================================================*
533     C | SUBROUTINE TIMER_PRINTALL
534     C | o Print timer information
535     C *==========================================================*
536     C | Request print out of table of timing from all timers.
537     C *==========================================================*
538    
539     C !INPUT PARAMETERS:
540     C myThreadId :: This threads number
541     INTEGER myThreadId
542     CEOP
543    
544     CALL TIMER_CONTROL( ' ', 'PRINTALL', 'TIMER_PRINTALL' ,
545     & myThreadId )
546     C
547     RETURN
548     END
549    
550     CBOP
551     C !ROUTINE: TIMER_START
552    
553     C !INTERFACE:
554     SUBROUTINE TIMER_START ( string , myThreadId )
555     IMPLICIT NONE
556    
557     C !DESCRIPTION:
558     C Start timer named "string".
559    
560     C !INPUT PARAMETERS:
561     C string :: Name of timer
562     C myThreadId :: My thread number
563     CHARACTER*(*) string
564     INTEGER myThreadId
565     CEOP
566     C
567     CALL TIMER_CONTROL( string, 'START', 'TIMER_START' , myThreadId)
568     C
569     RETURN
570     END
571     CBOP
572     C !ROUTINE: TIMER_STOP
573    
574     C !INTERFACE:
575     SUBROUTINE TIMER_STOP ( string , myThreadId)
576     IMPLICIT NONE
577    
578     C !DESCRIPTION:
579     C Stop timer named "string".
580    
581     C !INPUT PARAMETERS:
582     C string :: Name of timer
583     C myThreadId :: My thread number
584     CHARACTER*(*) string
585     INTEGER myThreadId
586     CEOP
587     C
588     CALL TIMER_CONTROL( string, 'STOP', 'TIMER_STOP' , myThreadId )
589     C
590     RETURN
591     END
592     C***********************************************************************

  ViewVC Help
Powered by ViewVC 1.1.22