Profile-Based Optimization [ HP C Programmer's Guide ] MPE/iX 5.0 Documentation
HP C Programmer's Guide
Profile-Based Optimization
Profile-based optimization (PBO) is a set of performance-improving code
transformations based on the run-time characteristics of your
application.
NOTE Profile-based optimization is only available on HP-UX.
There are three steps involved in performing this optimization:
1. Instrumentation - Insert data collection code into the object
program.
2. Data Collection - Run the program with representative data to
collect execution profile statistics.
3. Optimization - Generate optimized code based on the profile data.
Invoke profile-based optimization through HP C by using any level of
optimization and the +I and +P options on the cc command line.
Compile times will be fast and link times will be slow when using PBO
because code generation happens at link time.
Instrumenting the Code
To instrument your program, use the +I option as follows:
cc -Aa +I -O -c sample.c Compile for instrumentation.
cc -o sample.exe +I -O sample.o Link to make instrumented executable.
The first command line uses the -O option to perform level 2 optimization
and instruments the code. The -c option in the first command line
suppresses linking and creates an intermediate object file called
sample.o. The .o file can be used later in the optimization phase,
avoiding a second compile.
The second command line uses the -o option to link sample.o into
sample.exe. The +I option instruments sample.exe with data collection
code. Note that instrumented programs run slower than non-instrumented
programs. Only use instrumented code to collect statistics for
profile-based optimization.
Collecting Data for Profiling
To collect execution profile statistics, run your instrumented program
with representative data as follows:
sample.exe < input.file1 Collect execution profile data.
sample.exe < input.file2
This step creates and logs the profile statistics to a file, by default
called flow.data. The data collection file is a structured file that may
be used to store the statistics from multiple test runs of different
programs that you may have instrumented.
Performing Profile-Based Optimization
To optimize the program based on the previously collected run-time
profile statistics, relink the program as follows:
cc -o sample.exe +P -O sample.o
An alternative to this procedure is to recompile the source file in the
optimization step:
cc -o sample.exe +I -0 sample.c instrumentation
sample.exe < input.file1 data collection
cc -o sample.exe +P -O sample.c
optimization
Maintaining Profile Data Files
Profile-based optimization stores execution profile data in a disk file.
By default, this file is called flow.data and is located in your current
working directory.
You can override the default name of the profile data file. This is
useful when working on large programs or on projects with many different
program files.
The FLOW_DATA environment variable can be used to specify the name of the
profile data file with either the +I or +P options. The +df command line
option can be used to specify the name of the profile data file when used
with the +P option.
The +df option takes precedence over the FLOW_DATA environment variable.
In the following example, the FLOW_DATA environment variable is used to
override the flow.data file name. The profile data is stored instead in
/users/profiles/prog.data.
%setenv FLOW_DATA /users/profiles/prog.data
%cc -Aa -c +I +O3 sample.c
%cc -o sample.exe +I +03 sample.o
%sample.exe < input.file1
%cc -o sample.exe +P +03 sample.o
In the next example, the +df option is used to override the flow.data
file name with the name /users/profiles/prog.data.
%cc -Aa -c +I +O3 sample.c
%cc -o sample.exe +I +03 sample.o
%sample.exe < input.file1
%mv flow.data /users/profile/prog.data
%cc -o sample.exe +df /users/profiles/prog.data +P +03 sample.o
Maintaining Instrumented and Optimized Program Files
You can maintain both instrumented and optimized versions of a program.
You might keep an instrumented version of the program on hand for
development use, and several optimized versions on hand for performance
testing and program distribution.
Care must be taken when maintaining different versions of the executable
file because the instrumented program file name is used as the key
identifier when storing execution profile data in the data file.
The optimizer must know what this key identifier name is in order to find
the execution profile data. By default, the key identifier name used to
retrieve the profile data is the instrumented program file name used to
run the program for data collection.
When you optimize a program file and the optimized program file name is
different from the instrumented program file name, you must use the +pgm
option. Specify the instrumented program file name with this option.
The optimizer uses this value as the key identifier to retrieve execution
profile data.
In the following example, the instrumented program file name is
sample.inst. The optimized program file name is sample.opt. The +pgm
name option is used to pass the instrumented program name to the
optimizer:
%cc -Aa -c +I +O3 sample.c
%cc -o sample.inst +I +03 sample.o
%sample.inst < input.file1
%cc -o sample.opt +P +03 +pgm sample.inst sample.o
Profile-Based Optimization Notes
When using profile-based optimization, please note the following:
* Because the linker performs code generation for profile-based
optimization, linking object files compiled with +I and +P takes
more time than linking ordinary object files. However,
compile-times will be relatively fast. This is because the
compiler is only generating the intermediate code.
* Profile-based optimization has a greater impact on application
performance at each higher level of optimization.
* Profile-based optimization should be enabled during the final
stages of application development. To obtain the best
performance, re-profile and re-optimize your application after
making source code changes.
For more information on profile-based optimization, see the manual
Programming on HP-UX.
MPE/iX 5.0 Documentation