cord - Rearrange procedures in an executable file to
facilitate better cache mapping
cord [-vV] [-o outfile] [-f] [-c cachesize] [-p maxphases]
obj-file reorder-file
The cord command accepts the following options: Prints
verbose information. This includes listing those procedures
that are considered part of other procedures and
that cannot be rearranged (that is, assembler procedures
that may contain relative branches to other procedures
instead of relocatable branches). The listing also lists
those procedures in the flipped area (if any) and a mapping
of old location to new. Displays the version of the
cord command. Specifies the output file. If not specified,
a.out is used. Flips the first cachepage size procedures.
When cord was written, the assumption was that
procedures would be reordered by procedure density
(cycles/byte). This option ensures that the densest part
of each page following the first cachepage would conflict
with the least-dense part of the first cachepage. Specifies
the cache size (in bytes) of the machine on which you
want to execute. This only affects the -f option. If not
specified, 65536 is used. Specifies the maximum number
phases allowed. The default is 20.
The cord command rearranges procedures in an executable
object file to maximize efficiency in a machine's cache.
By rearranging the procedures properly, you can reduce the
instruction cache miss rates. The cord command does not
attempt to determine the correct ordering; it must be
given a reorder-file containing the desired procedure
order. The reorder file is generated by the ftoc program,
which in turn generates a reorder file from a set of profile
feedback files (see prof(1)).
Processed lines in the reorder file are called procedure
lines. Each procedure line must be on a separate source
line. Each procedure line must contain the source name of
the file, followed by a blank, followed by a qualified
procedure name. Nested procedures must be qualified x.y,
where x is the outer procedure. A newline or blank can
follow the procedure name:
foo.c bar (everything else following is ignored)
Lines beginning with # are comments, lines beginning with
$ are considered cord directive lines. The only directive
currently understood is $phase. This directive will consider
the rest of the file (until the end of file or next
$phase) as a new phase of the program and will order the
procedures accordingly. A procedure may appear in more
than one phase, resulting in more than one copy of it in
the final binary. First, cord will try to relocate procedure
references to a copy of the procedure belonging to
the requesting phase; otherwise, it will relocate the references
to a random copy.
Use the -cord option to a compiler driver like cc(1)
rather than execute cord directly. The cord options can be
specified with -Wc,cordarg0,cordarg1,.... If you have to
run cord by hand, you may want to run it once with the
driver using the -v option on a simple program. This will
enable you to see the exact passes and the arguments
involved in using cord.
Warning
Since cord works from an input list of procedures generated
from profile output, the resulting binary is data
dependent. In other words, it may only perform well on the
same input data that generated the profile information,
and may perform worse than the original binary on other
data. Furthermore, if the hot areas in the cache do not
fit well into one cachepage, performance can degrade.
Commands: cc(1), ftoc(1), ld(1), prof(1)
Programmer's Guide
cord(1)
[ Back ] |