(gmp.info.gz) Profiling
Info Catalog
(gmp.info.gz) Debugging
(gmp.info.gz) GMP Basics
(gmp.info.gz) Autoconf
Profiling
=========
Running a program under a profiler is a good way to find where it's
spending most time and where improvements can be best sought. The
profiling choices for a GMP build are as follows.
`--disable-profiling'
The default is to add nothing special for profiling.
It should be possible to just compile the mainline of a program
with `-p' and use `prof' to get a profile consisting of
timer-based sampling of the program counter. Most of the GMP
assembler code has the necessary symbol information.
This approach has the advantage of minimizing interference with
normal program operation, but on most systems the resolution of
the sampling is quite low (10 milliseconds for instance),
requiring long runs to get accurate information.
`--enable-profiling=prof'
Build with support for the system `prof', which means `-p' added
to the `CFLAGS'.
This provides call counting in addition to program counter
sampling, which allows the most frequently called routines to be
identified, and an average time spent in each routine to be
determined.
The x86 assembler code has support for this option, but on other
processors the assembler routines will be as if compiled without
`-p' and therefore won't appear in the call counts.
On some systems, such as GNU/Linux, `-p' in fact means `-pg' and in
this case `--enable-profiling=gprof' described below should be used
instead.
`--enable-profiling=gprof'
Build with support for `gprof' ( GNU gprof (gprof)Top.),
which means `-pg' added to the `CFLAGS'.
This provides call graph construction in addition to call counting
and program counter sampling, which makes it possible to count
calls coming from different locations. For example the number of
calls to `mpn_mul' from `mpz_mul' versus the number from
`mpf_mul'. The program counter sampling is still flat though, so
only a total time in `mpn_mul' would be accumulated, not a
separate amount for each call site.
The x86 assembler code has support for this option, but on other
processors the assembler routines will be as if compiled without
`-pg' and therefore not be included in the call counts.
On x86 and m68k systems `-pg' and `-fomit-frame-pointer' are
incompatible, so the latter is omitted from the default flags in
that case, which might result in poorer code generation.
Incidentally, it should be possible to use the `gprof' program
with a plain `--enable-profiling=prof' build. But in that case
only the `gprof -p' flat profile and call counts can be expected
to be valid, not the `gprof -q' call graph.
`--enable-profiling=instrument'
Build with the GCC option `-finstrument-functions' added to the
`CFLAGS' ( Options for Code Generation (gcc)Code Gen
Options.).
This inserts special instrumenting calls at the start and end of
each function, allowing exact timing and full call graph
construction.
This instrumenting is not normally a standard system feature and
will require support from an external library, such as
`http://sourceforge.net/projects/fnccheck/'
This should be included in `LIBS' during the GMP configure so that
test programs will link. For example,
./configure --enable-profiling=instrument LIBS=-lfc
On a GNU system the C library provides dummy instrumenting
functions, so programs compiled with this option will link. In
this case it's only necessary to ensure the correct library is
added when linking an application.
The x86 assembler code supports this option, but on other
processors the assembler routines will be as if compiled without
`-finstrument-functions' meaning time spent in them will
effectively be attributed to their caller.
Info Catalog
(gmp.info.gz) Debugging
(gmp.info.gz) GMP Basics
(gmp.info.gz) Autoconf
automatically generated byinfo2html