Hello,
I have recently completed developing a system of utilities to
monitor/aid in the execution of a Fortran program, which is
compiler-independent and almost entirely written in Fortran. The system
is strongly based on macros (in FWEB) and thus not purely Fortran,
though the actual runtime is Fortran. The system tries to be geared
toward parallelism by keeping a separate "execution state" which can be
thread or process specific. I do not actually implement these in full
yet. It is also tries to use OOP stuff in strategic places to allow
easy extension/adaptation.
The execution monitoring system does multiple tasks:
1) Aids with output of user messages, warnings, errors, etc. to various
logs, either files, string buffers, or MPI files.
2) Allows one to trace the execution call sequence and include/exclude
portions of the call tree programatically, at either compile or
run-time. Various options can be programatically set for portions of
the call tree, such as whether to abort on a warning or not.
3) Aids in profiling the time spent in each procedure, and in fact uses
PAPI to profile other metrics as well, like L1 data misses. TAU can be
used to monitor this as well. Many compilers offer this themselves via
gprof, for example, but offer no programmatic control over it, which I
give, and also I integrate with PAPI.
4) Allows one to monitor heap allocations by replacing the traditional
(DE)ALLOCATE with a macro _(DE)ALLOCATE. It reports memory leaks and
other statistics at the end.
5) It will in the near future allow one to trace the execution via a
timestamped event-logging library (MPE---serial version not released
yet), to be visualized by a GUI.
Is there interest among people to learn more about this kind of thing (I
doubt that using the system directly is an option for anyone else, but
code can be borrowed of course). Maybe an article in the Forum or
alike. I just don't wanna spend the time if no one really cares. Do
other people have their own systems?
For those that like figuring things on their own, the attached program
(not pure Fortran!) can produce no output or as much as a detailed
trace, all controlled programatically:
[1349 Programs @ atom]$ Common/nf95/Test_Execution.x
Test_Execution starting...
Starting program Test_Execution at 12:37:59 on 30/ 9/2004
Using initial random seed: 11327
_Test_1 starting...
Debug message 1
__Test_2 starting...
___Test_2_random starting...
___Test_2_random ending.
___Test_2_matmul starting...
___Test_2_matmul ending.
___Test_3 starting...
____Test_3_loop starting...
Sum= 1.6449339668473177
____Test_3_loop ending.
___Test_3 ending.
__Test_2 ending.
_Test_1 ending.
_Test_3 starting...
__Test_3_loop starting...
Sum= 1.6449339668473177
__Test_3_loop ending.
_Test_3 ending.
_Test starting...
__Test starting...
___Test starting...
____Test starting...
_____Test starting...
______Test starting...
_______Test starting...
________Test starting...
_________Test starting...
__________Test starting...
___________Test starting...
___________Test ending.
__________Test ending.
_________Test ending.
________Test ending.
_______Test ending.
______Test ending.
_____Test ending.
____Test ending.
___Test ending.
__Test ending.
_Test ending.
Ending program Test_Execution at 12:38: 0 on 30/ 9/2004
Test_Execution ending.
Memory leak report:
______________________________
Heap status: total_allocations=15 active_allocations=12
total_bytes=3004904 active_bytes=4904 max_bytes=3002000
Heap allocations still active:
---> p1 of size 44 bytes in Test
---> p2 of size 88 bytes in Test
---> p3 of size 132 bytes in Test
---> p4 of size 176 bytes in Test
---> p5 of size 220 bytes in Test
---> p6 of size 264 bytes in Test
---> p7 of size 308 bytes in Test
---> p8 of size 352 bytes in Test
---> p9 of size 396 bytes in Test
---> p10 of size 440 bytes in Test
---> p11 of size 484 bytes in Test
---> x of size 2000 bytes in Test_2
______________________________
Execution Profile summary:
______________________________
Total runtime (in s): 0.128802E+01
Hardware clock rate (in Hz): 0.179400E+10
n_calls TIME EXCL_DUR USER TOT_INS FP_INS L1_DCM TLB_DM
Test_3_loop
2 37.669 100.000 90.884 17.664 52.517 0.001 0.000
2 37.669 0.243E+06 90.884 17.664 52.517 0.001 0.000
Test_2_matmul
1 22.547 100.000 95.307 107.426 45.528 5.032 0.030
1 22.547 0.290E+06 95.307 107.426 45.528 5.032 0.030
Test_2
1 22.178 33.898 94.014 109.146 45.427 5.083 0.020
1 65.427 0.843E+06 94.822 80.421 45.491 3.474 0.017
Test_Execution
1 14.563 14.563 95.603 12.943 23.535 0.251 0.000
1 100.000 0.129E+07 92.748 58.235 45.013 2.318 0.012
Test_2_random
1 1.827 100.000 83.121 42.522 7.526 0.024 0.010
1 1.827 0.235E+05 83.121 42.522 7.526 0.024 0.010
Test
11 0.420 100.000 73.394 37.208 0.000 0.499 0.013
11 0.420 0.492E+03 73.394 37.208 0.000 0.499 0.013
Test_3
2 0.151 0.399 59.738 35.423 0.000 0.380 0.011
2 37.820 0.244E+06 90.695 17.704 52.278 0.002 0.000
Test_1
1 0.092 0.140 66.122 36.954 0.021 0.369 0.020
1 65.519 0.844E+06 94.765 80.383 45.472 3.471 0.017
______________________________
Thanks,
Aleks
|