 |
» |
|
|
 |
|  |  |
Profile-based optimization (PBO) is a set of code-improving
transformations that are based on
feedback concerning the run-time characteristics of an application.
Run-time profile data is collected during program execution.
This information is fed back to the optimizer, which performs a variety
of optimizations based upon how frequently certain code is executed
and how frequently calls are made between different code segments.
In general, each higher level of optimization takes increasing
advantage of the PBO-generated information.
One of the goals of PBO is to improve the efficiency of memory access
by increasing the hit rates for the instruction cache, memory pages,
and the Translation Lookaside Buffer (TLB).
PBO can also improve the compiler's inlining decisions.
One basis for the decision is call frequency, which,
without PBO, the compiler can only estimate.
With PBO, however,
the compiler uses actual frequencies as the basis for its decision.
For complete details on PBO, see HP-UX Linker and Libraries
Online User Guide.
 |  |  |  |  | NOTE:
HP Pascal/HP-UX is limited to procedure repositioning,
not basic block repositioning.
|  |  |  |  |
Invoking PBO |  |
You must perform the following steps to invoke PBO:
Compile and link with the +I option to produce
the instrumented program.
Collect execution profile statistics by running the instrumented
program.
Optimize the program with the +P option.
Instrumenting the Program
To instrument the program, use the +I compile-line option when
compiling and linking the object files of an application.
Instrumenting the program inserts code into the program to
collect execution profile statistics.
Execution profile statistics include a count of the calls between procedures.
Also, note that when you use the +I compile-line option
to compile source files, instrumentation can be added within
the code for each subroutine in that file.
In the following example, the source file sample.p is
compiled, instrumented, and linked into sample.inst:
pc -o sample.inst -O +I sample.p
|
Collecting Execution Profile Statistics
To collect execution profile statistics, run your program
using reasonably representative data.
The profile database file, flow.data,
is created the first time the program is run,
and is updated for each subsequent execution of the program.
The following example collects execution profile statistics by running
the sample.inst program with representative data from two
input files:
sample.inst < input.file1
sample.inst < input.file2
|
This step, by default, logs the profile statistics in a
file called flow.data.
See “Maintaining Multiple Profile Data Files” to change this default.
To perform PBO, re-link the program
with the +P compile-line option to specify that you wish to use
the collected profile data:
pc -o sample.opt -O +P +pgm sample.inst sample.o
|
The +pgm compile-line option allows you to specify an
executable name
that is different from the current output file name.
In the preceding command line, the +pgm option indicates
that the name of the instrumented executable (sample.inst)
differs from the name of the optimized executable (sample.opt)
that is specified with the -o option.
Source files compiled with the +I option do not need to be
recompiled after collecting the profile data.
Simply relink the application with the same options
that you used in the first step to instrument the program,
but replace +I with +P.
For more information about how the compiler and linker work together
to perform profile based-optimizations, refer to HP-UX Linker
and Libraries Online User Guide.
Maintaining Multiple Profile Data Files |  |
By default, PBO logs the profile statistics in
a file called flow.data.
You can specify another name with the +df compile-line option.
The name of the executable file used during profiling
is the name under which the profile data is stored in the database file.
If you specify a different executable output file name during
the optimization phase, you need to use the +pgm option to specify
the program name used during profiling.
The following steps and example demonstrate the use of +df and +pgm.
Rename flow.data after performing the data collection
step described previously:
Perform PBO on this application by
re-linking the program as follows:
pc -o sample.opt -O +P +pgm sample.inst +df sample.data sample.o
|
The default value for the +df compile-line option is
flow.data.
The +df option is used because the profile data file
for the program has been moved from flow.data to sample.data.
The +pgm option is used because the instrumented program
file is sample.inst, and the optimized program file is
sample.opt.
You can also use the FLOW_DATA environment variable to
specify a different path name for the profile database file.
Note, however, that the +df compile-line option
takes precedence over the FLOW_DATA environment variable.
For more information
about the profile database and the FLOW_DATA environment variable,
see HP-UX Linker and Libraries Online User Guide.
|