ACOVEA
Analysis of Compiler Options via Evolutionary Algorithm 

version 4.0



Copyright 2003, 2004 Scott Robert Ladd. All rights reserved.

Contact information:    coyote@coyotegulch.com
                        http://www.coyotegulch.com
                        
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

ACOVEA (Analysis of Compiler Options via Evolutionary Algorithm)
implements a genetic algorithm to find the "best" options for
compiling programs with the GNU Compiler Collection (GCC) C and C++
compilers. "Best", in this context, is defined as those options that
produce the fastest executable program from a given source code.

Acovea is a C++ framework that can be extended to test other
programming languages and non-GCC compilers.

I envision Acovea as an optimization tool, similar in purpose to
profiling. Traditional function-level profiling identifies the
algorithms most influential in a program's performance; Acovea is then
applied to those algorithms to find the compiler flags and options
that generate the fastest code. Acovea is also useful for testing
combinations of flags for pessimistic interactions, and for examining
the reliability of the compiler.

BUILDING ACOVEA
---------------

Configuration and building proceeds along the usual lines:

	./configure
    ./make
    ./make install

To build Acovea, you will also need the Coyotl and Evocosm libraries:

	http://www.coyotegulch.com/libcoyotl
    http://www.coyotegulch.com/libevocosm
    
The installation creates a program, runacovea, installed by default
to /usr/local/bin. Running this program without arguments will display
a command summary.

For parsing the compiler configuration files, which are XML, Acovea
uses the expat library. Your distribution likely installed expat;
if not, its home page is:

	http://expat.sourceforge.net/

The installation directories can be changed using the --prefix option
when invoking configure.

RUNNING ACOVEA
--------------

To run Acovea, use a command of the form:

	runacovea -config gcc34_opteron.acovea -bench huffbench.c
    
CONFIGURATIONS
--------------
    
The configuration file is an XML document that sets the default and
evolvable options and commands for a given compiler and platform. For
example, the gcc34_opteron.acovea configuration is for GCC version
3.4 running on a 64-bit AMD Opteron system. 

A sample set of GCC C compiler configuration files is located (by
default) in:

	/usr/local/share/acovea/config
    
If the given configuration file can not be found based on the
explicit name given, Acovea will attempt to locate the file
in the installation directory above.

I provide configurations for Pentium 3, Pentium 4, and Opteron
processors using GCC 3.3 and 3.4. As I develop more configuration
files (or if I received them from other users), I'll post the
additional .acovea files on the web site.

BENCHMARKS
----------
    
The benchmark file is a program in a language appropriate for the
chosen configuration file; it must write its fitness value to 
standard output, where it will be read via pipe by the Acovea
framework.

A sample set of C benchmark programs is located (by default) in:

	/usr/local/share/acovea/benchmarks
    
If the given benchmark program file can not be found based on the
explicit name given, Acovea will attempt to locate the benchmark
in the installation directory above.

BENCHMARK DESIGN
----------------

Acovea was designed with "spikes" in mind -- short programs that
implement a limited algorithm that runs quickly (2-10 seconds per
run). Using the default evolutionary settings, Acovea will perform
4,000 compiles and runs of the benchmark; even with a very small
and fast benchmark, this can take several hours.

If your programs takes a full minute to compiler, and another 
minute to run, Acove will require 8,000 minutes, or more than
5.5 DAYS to evolve optimal option sets!
    
However, due to popular demand, a future version of Acovea will
support the use of Makefiles and an optional timing mechanism for
large applications.

The homepage for Acovea can be found at:

	http://www.coyotegulch.com/acovea
    
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Other useful URLs:
    Home Page
        http://www.coyotegulch.com
        
    GNU Compiler Collection
        http://gcc.gnu.org
        
    Intel C++ Compiler
        http://www.intel.com/software/products/compilers
        
    Doxygen Documentation Tool
        http://www.doxygen.org
