 |
Index for Section 1 |
|
 |
Alphabetical listing for S |
|
 |
Bottom of page |
|
spike(1)
NAME
spike - Performs code optimization after linking a program
SYNOPSIS
spike binary_file [options...]
OPTIONS
-feedback file
Causes spike to use the feedback database stored in file, where file is
the name of the input executable. This database is created by first
compiling the program with the -feedback option (for example, cc
-feedback prog) and then instrumenting and running the program with the
pixie -update or prof -pixie -update command (see cc(1), pixie(1), and
prof(1)).
-fb file
Causes spike to use file.Addrs (basic block addresses file) and
file.Counts (basic block counts file) for profile-based optimization.
These files are produced by the pixie tool (see pixie(1) and prof(1)).
-kernel
Use this option when applying spike to the UNIX kernel (vmunix). spike
can be applied only to V5.1 or later kernels.
-nosplit
Disables code layout optimization that splits procedures into multiple
parts.
-nochain
Disables basic block chaining, which arranges code so that the fall
through path is the commonly taken path.
-noporder
Disables procedure ordering.
-noaggressiveAlign
Reduces the number of padding nops inserted into the code to align
instructions. The alignment usually makes the code run faster, but
makes the code larger, which can cause more instruction cache misses.
-o output_file
Names the optimized binary output file. The default file name is a.out.
-splitThresh n
Adjusts the threshold used by procedure splitting in code layout to
decide which code is frequently and infrequently executed. The default
is .99, which means that the most frequently executed basic blocks that
make up at least 99 percent of the estimated execution time are
considered frequently executed and the rest are marked as infrequently
executed. Increasing the threshold can help when the profile is not
representative. For example, try a value of .999.
-V Displays the version number of spike.
OPERANDS
binary_file
Name of the binary file to which spike is to be applied.
DESCRIPTION
spike is a tool for performing code optimization after linking. It is a
replacement for om and does similar optimizations. Because it can operate
on an entire program, spike is able to do optimizations that cannot be done
by the compiler.
Some of the optimizations that spike performs are code layout, deleting
unreachable code, and optimization of address computations. spike is most
effective when it uses profile information to guide optimization.
spike can process binaries linked on Tru64 UNIX (formerly Digital UNIX)
Version 4.0 or later systems. Binaries that are linked on Version 5.1 or
later systems contain information that allows spike to do additional
optimization.
You can use spike in two ways:
· By applying the spike command to a binary file after compilation.
· As part of the compilation process, by specifying the -spike option
with the cc command (or the cxx, f77, or f90 command, if the
associated compiler is installed).
The -spike option is more convenient when you are not using profile
information (Example 2), or you are using profile information in the
compiler, too (Example 3). The spike command is more convenient if you do
not want to relink the executable (Example 1) or you are using profile
information after compilation (Examples 4 and 5).
All spike command options can be passed directly to the cc command's -spike
option by using the (cc) -WS option. Example 6 shows the syntax.
RESTRICTIONS
spike cannot process images that
· have been stripped.
· contain RPDR tables (see Section 2.3.7, Special Symbols, of the Object
File/Symbol Table Format Specification)
· modify the text section at runtime.
Using cord, atom, pixie, hiprof, or third on an image that has been
processed with spike is unsupported.
NOTES
spike tries to update the symbol table in the binary so that the optimized
binary can be debugged. As with other compiler optimizations, there may be
some situations where the debugger may not be able to properly report the
current location in the program or display the values of variables. If
spike divides a procedure into multiple disjoint parts, the main body will
keep the original procedure name, but the other parts will have names that
are the original name with _cold_n (where n is a number) appended to the
end.
EXAMPLES
1. In the following example, spike is applied to the binary my_prog,
producing the optimized output file prog1.opt.
% spike my_prog -o prog1.opt
2. In the following example, spike is applied during compilation with the
cc command's -spike option:
% cc -c file1.c
% cc -o prog3 file1.o -spike
The first command line creates the object file file1.o. The second
command line links file1.o into an executable and uses spike to
optimize the executable.
3. The following example shows how to optimize a program, prog, by first
compiling it with the -feedback option, then merging profiling
statistics from two instrumented runs of the program, then compiling
it with the -spike and -feedback options so the feedback information
stored in the executable is used by the compiler and spike:
% cc -feedback prog -o prog *.c
% pixie -pids prog
% prog.pixie
(input set 1)
% prog.pixie
(input set 2)
% prof -pixie -update prog prog.Counts.*
% cc -spike -feedback prog -o prog *.c
The first compilation produces an augmented executable that will later
accept feedback information.
The pixie command creates an instrumented program (prog.pixie), which
is then run twice. The -pids option adds the process ID of each test
run to the name of the profiling data file produced -- for example
prog.Counts.371 and prog.Counts.422.
The prof -pixie command merges the two data files. The -update option
updates the executable, prog, with the combined information.
The program is compiled with the -spike and -feedback options so the
feedback information stored in the executable is used by the compiler
and spike.
4. The following example shows how to optimize a program, prog, by first
compiling it with the -feedback option, then merging profiling
statistics from two instrumented runs of the program, then applying
the spike -feedback command to use the feedback information stored in
the executable:
% cc -feedback prog -o prog *.c
% pixie -pids prog
% prog.pixie
(input set 1)
% prog.pixie
(input set 2)
% prof -pixie -update prog prog.Counts.*
% spike prog -feedback prog -o prog.opt
As in the previous example, the first compilation produces an
augmented executable. The instrumented program is run twice, producing
a uniquely named data file each time. The prof -pixie -update command
merges the two data files and updates the executable with the combined
information.
The spike -feedback command uses the combined profiling information to
produce the optimized output file prog.opt.
5. The following example shows how to optimize a program, prog, by
merging profiling statistics from two instrumented runs of the
program, then applying the spike -fb command to use the feedback
information in the .Addrs and .Counts files:
% cc prog -o prog *.c
% pixie -pids prog
% prog.pixie
(input set 1)
% prog.pixie
(input set 2)
% prof -pixie -merge prog.Counts prog prog.Addrs prog.Counts.*
% spike prog -fb prog -o prog.opt
The first compilation produces a normal executable. As in the previous
example, the instrumented program is run twice, producing a uniquely
named data file each time.
The prof -pixie -merge command merges the two data files into one
combined prog.Counts file.
The spike -fb command uses the information in prog.Addrs and
prog.Counts to produce the optimized output file prog.opt.
The method in Example 4 is preferred. You should use the method in
Example 5 only if you cannot compile with the -feedback option that
uses feedback information stored in the executable.
6. The following example shows the syntax for passing spike command
options to the (cc) -spike option by using the (cc) -WS option:
% cc -spike -feedback prog -o prog *.c \
-WS,-splitThresh,.999,-noaggressiveAlign
RETURN STATUS
spike returns the following status values:
0: Success
Nonzero: Error
SEE ALSO
cc(1), pixie(1), prof(1)
Programmer's Guide
The spike web page at http://www.tru64unix.compaq.com/spike/
 |
Index for Section 1 |
|
 |
Alphabetical listing for S |
|
 |
Top of page |
|