Chapter 8 287
Ways to Improve Performance
Profile-Based Optimization
Note that you could set SHLIB_FLOW_DATA to flow.data which is the
same file as the default setting for FLOW_DATA. But, again, profile data
will not be collected from shared libraries unless you explicitly set
SHLIB_FLOW_DATA to some output file.
The following is a simple example for instrumenting, profiling, and
optimizing a shared library:
$ cc +z +I -c -O libcode.c Create I-SOM files.
$ ld -b -I libcode.o -o mylib.inst.sl Create instrumented sl.
$ cc main.c mylib.inst.sl Creat executablea.outile.
$ export SHLIB_FLOW_DATA=./flow.data Specify output file for
profile data
$ a.out < input_file Run instrumented executable
with representative input data
$ ld -b -P +pgm mylib.inst.sl \
libcode.o -o mylib.sl Perform PBO.
Note that the name used in the database will be the output pathname
specified when the instrumented library is linked (mylib.inst.sl in
the example above), regardless of how the library might be moved or
renamed after it is created.
Using PBO with ld -r
Beginning with the HP-UX 10.0 release, you can take greater advantage
of PBO on merged object files created with the -r linker option.
Briefly, ld -r combines multiple .o files into a single .o file. It is often
used in large product builds to combine objects into more manageable
units. It is also often used in combination with the linker -h option to
hide symbols that may conflict with other subsystems in a large
application. (See “Hiding Symbols with -h” on page 81 for more
information on ld -h.)
In HP-UX 10.0, the subspaces in the merged .o file produced by ld -r
are relocatable which allows for greater optimization.
The following is a simple example of using PBO with ld -r:
$ cc +I -c file1.c file2.c Create individual I-SOM files
$ ld -r -I -o reloc.o file1.o file2.o Build relocatable, merged file.
$ cc +I -o a.out reloc.o Create instrumented executable file.
$ a.out < input_file Run instrumented executable with
representative input data.
$ ld -r -P +pgm a.out -o reloc.o \
file1.o file2.o Rebuild relocatable file for PBO.
$ cc +P -o a.out reloc.o Perform PBO on the final executable file.