unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (OSF1-V5.1-alpha)
Page:
Section:
Apropos / Subsearch:
optional field



spike(1)							     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 -feed-
      back 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 con-
      sidered 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 optim-
  ization.

  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 associ-
       ated compiler is	installed).

  The -spike option is more convenient when you	are not	using profile infor-
  mation (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 pro-
  cessed 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, pro-
       ducing 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 optim-
       ize the executable.

   3.  The following example shows how to optimize a program, prog, by first
       compiling it with the -feedback option, then merging profiling statis-
       tics 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 statis-
       tics 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 aug-
       mented 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 merg-
       ing 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 com-
       bined 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/