Print

Print


I define constants absent=0, read=1, global=2, local=3. All statuses are
set to
absent, then changed when read from file, calculated for global (ie
until end of program) use, or local use. For local use you take the
status from the calling routine and increment it before using it. At the
end of a routine its then a simple matter of calling tidy routine that
checks all statuses and deletes all variables with its status level or
higher. At the end of the program you call the routine with status 1 to
get read of everything.

Regarding tracing every routine has lines top and bottom

IF (UseTrace) CALL Gen_TraceEntry(RoutineName)

....

IF (UseTrace) CALL Gen_TraceEntry(RoutineName)

with at key points in the code

IF (UseTrace) CALL Gen_Trace(RoutineName,'just done blah')

The IF blocks are used to allow tracing to be switched off at run time
with
minimum impact.

The trace routines monitor memory usage using a c routine that picks up
mallinfo.uordblks, CPU time from a c routine that monitors the times
function,
and elapsed time using F90 routine SYSTEM_CLOCK. I am only interested in
total
memory, not which array its gone into.

Each call adds a few more lines to a trace file with routine names and
memory usage as a calling tree. A sample might be

> Var_Setup    12000
< Var_Setup    12000
> Var_OpenFile    12050
  opening file1
  | Var_OpenFile    12050
    file1 opened sucessfully
< VarOpenFile    12050
> Var_ReadFile    12050
> Var_ReadFile    12050
> Var_WriteFile    12050
> Var_WriteFile    12050
< Var_Sub2    13000
  > Var_OpenFile    13050
    opening file1
  < Var_OpenFile    13050
  > Var_ReadFile    13050
  > Var_ReadFile    13050
  > Var_WriteFile    13050
  > Var_WriteFile    13050
  > Var_CloseFile    13020
  < Var_CloseFile    13020
< Var_Sub2    13020, BIGGER 20

So there is a 20 byte bleed in Var_Sub2

At the end a report is produced reporting peak memory usage, and timings
per routine both exclusive and inclusive of lower level routine calls.
When run MPP the peaks, max and min across processors are also reported
which aids load balancing.

The files are HTML with hypertext links to the routines in the
documentation system.

This works under HP-UX and Cray Unicos, and has been ported sucessfully
by others to IBM SP/2

More details on tracing in an HTML document I can mail on request

John
-- 
John Bray, Room 337, Numerical Weather Prediction, UK Met Office
Work: [log in to unmask], http://fr0400/~frjb (internal only)
+ 44 (0) 1344 854035 (voice), + 44 (0) 1344 854026 (fax)
Home: http://www.jrbray.org.uk/


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%