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.
Switch branches/tags
Nothing to show
Clone or download
Latest commit 13d9538 Jan 6, 2018

README.md

#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.

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, check its home page.

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: