Manual Page Result
0
Command: cord | Section: 1 | Source: Digital UNIX | File: cord.1.gz
cord(1) General Commands Manual cord(1)
NAME
cord - Rearrange procedures in an executable file to facilitate better
cache mapping
SYNOPSIS
cord [-v] [-o outfile] [-f] [-c cachesize] [-p maxphases] obj-file re-
order-file
DESCRIPTION
The cord command rearranges procedures in an executable object file to
maximize efficiency in a machine's cache. By rearranging the proce-
dures properly, we end up reducing the instruction cache miss rates.
cord does not attempt to determine the correct ordering, but is 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 pro-
cedure name:
foo.c bar (everything else following is ignored)
Lines beginning with # are comments, lines beginning with $ are consid-
ered 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 or-
der 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 exe-
cute cord directly. cord options can be specified with -Wz,cor-
darg0,cordarg1,.... If you have to run cord by hand, you may want to
run it once with the driver using the -v flag 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.
The cord command accepts these options:
-v Print verbose information. This includes listing those
procedures considered part of other procedures and cannot
be rearranged (these are basically assembler procedures
that may contain relative branches to other procedures
rather than relocatable ones). The listing also lists
those procedures in the flipped area (if any) and a map-
ping of old location to new.
-f Flip the first cachepage size procedures. The assumption
when cord was written was that procedures would be re-
ordered 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.
-c cachesize
Specify the cachesize (in bytes) of the machine on which
you want to execute. This only affects the -f option.
If not specified, 65536 is used.
-o outputfile
Specifies the output file. If not specified, a.out is
used.
-p phasemax
specifies the maximum number phases allowed. The default
is 20.
RELATED INFORMATION
cc(1), ftoc(1), ld(1), prof(1)
Programmer's Guide delim off
cord(1)