acovea安装完全指南

ACOVEA (Analysis of Compiler Options via Evolutionary Algorithm)是一个测试GCCCC++编译器最佳编译选项的程序。它的主页是http://www.coyotegulch.com/products/acovea/

本文主要是我安装ACOVEA的经验,因为也发现了一些问题,所以记下来。

首先需要下载ACOVEA的安装库,当前最新的版本是libacovea-5.1.1.tar.gz,下载地址http://www.coyotegulch.com/distfiles/libacovea-5.1.1.tar.gz

ACOVEA还依赖其他2个库,CoyotlA Collection of Interesting Classess)和EvocosmA C++ Framework for Evolutionary Computing),主页分别是:

http://www.coyotegulch.com/products/libcoyotl/index.html

http://www.coyotegulch.com/products/libevocosm/index.html

如果你没有安装,那么最好也下载它们的安装库,下载地址分别是:

Coyotl

http://www.coyotegulch.com/distfiles/libcoyotl-3.1.0.tar.gz

Evocosm

Unix/Linuxhttp://www.coyotegulch.com/distfiles/libevocosm-3.3.0.tar.gz

Windows VS 2005http://www.coyotegulch.com/distfiles/EvocosmSetup-3.3.0.msi

同时Coyotl库又依赖了另一个库PNGPortable Network Graphics),主页为它的安装库可以在http://sourceforge.net/projects/libpng/下载得到。

我的Fedora 8什么库都没有安装,所以我就是从PNG开始安装的。

 

1.       安装PNG

我下载的是libpng-1.2.24,解压后按照INSTALL文档的指示进行安装,其实只需要3个命令:

./configure

make check

make install

安装完成后,应该在/usr/local/lib/下出现如下的几个文件:

-rw-r--r-- 1 root root 650700 02-20 15:00 /usr/local/lib/libpng12.a

-rwxr-xr-x 1 root root    810 02-20 15:00 /usr/local/lib/libpng12.la

-rwxr-xr-x 1 root root 458585 02-20 15:00 /usr/local/lib/libpng12.so

-rwxr-xr-x 1 root root 458585 02-20 15:00 /usr/local/lib/libpng12.so.0

-rwxr-xr-x 1 root root 458585 02-20 15:00 /usr/local/lib/libpng12.so.0.24.0

-rw-r--r-- 1 root root 650700 02-20 15:00 /usr/local/lib/libpng.a

-rwxr-xr-x 1 root root    810 02-20 15:00 /usr/local/lib/libpng.la

-rwxr-xr-x 1 root root 458585 02-20 15:00 /usr/local/lib/libpng.so

-rwxr-xr-x 1 root root 468185 02-20 15:00 /usr/local/lib/libpng.so.3

-rwxr-xr-x 1 root root 468185 02-20 15:00 /usr/local/lib/libpng.so.3.24.0

 

2.       安装Coyotl

安装前必须保证PNG已经安装成功。我下载的是libcoyotl-3.1.0,在进行安装之前,我个人认为需要对libcoyotl-3.1.0/libcoyotl/Makefile.in进行一个修改,把

LIBS = @LIBS@

修改成

LIBS = @LIBS@ -lpng

当然,如果你不修改,也能够安装成功,但是由于Coyotl使用了PNG的一些函数(通过包含PNG的头文件),所以使用Coyotl库的程序链接时就必须手动加上-lpng,而如果你现在创建Coyotl库的时候就加上,可以在以后的程序里省点事。

同样按照INSTALL文档指示,运行:

./configure

make

make check

make install

安装完成后,在/usr/local/lib/下应该出现如下几个文件:

-rwxr-xr-x 1 root root 325596 02-20 15:42 /usr/local/lib/libcoyotl-3.1.so.4

-rwxr-xr-x 1 root root 325596 02-20 15:42 /usr/local/lib/libcoyotl-3.1.so.4.0.0

-rw-r--r-- 1 root root 493528 02-20 15:42 /usr/local/lib/libcoyotl.a

-rwxr-xr-x 1 root root    852 02-20 15:42 /usr/local/lib/libcoyotl.la

-rwxr-xr-x 1 root root 325596 02-20 15:42 /usr/local/lib/libcoyotl.so

 

3.       安装Evocosm

Evocosm必须在Coyotl之后进行安装,我下载的是libevocosm-3.1.0。如果你在前面安装Coyotl时修改了libcoyotl-3.1.0/libcoyotl/Makefile.in文件,那么现在可以直接开始安装了。如果没有,那么你需要修改libevocosm-3.1.0/funcopt/Makefile.in文件,把

LIBS = -L../libevocosm -lcoyotl -levocosm

修改成

LIBS = -L../libevocosm -lcoyotl -levocosm -lpng

即加上png库。

参考它的INSTALL文档,运行:

./configure

make

make check

make install

安装完成后应该在/usr/local/lib/里出现如下几个文件:

-rwxr-xr-x 1 root root 159518 02-20 15:38 /usr/local/lib/libevocosm-3.1.so.1

-rwxr-xr-x 1 root root 159518 02-20 15:38 /usr/local/lib/libevocosm-3.1.so.1.0.0

-rw-r--r-- 1 root root 251530 02-20 15:38 /usr/local/lib/libevocosm.a

-rwxr-xr-x 1 root root    825 02-20 15:38 /usr/local/lib/libevocosm.la

-rwxr-xr-x 1 root root 159518 02-20 15:38 /usr/local/lib/libevocosm.so

 

4.       安装ACOVEA

如果前面的安装操作都已完成了,那么可以开始安装ACOVEA,我下载的是libacovea-5.1.1。按照它的INSTALL文档指示,运行:

./configure

make

make check

make install

完成后可以用命令runacovea查看安装是否成功,正常运行结果应该是命令说明:

Acovea 5.1.1 (compiled Feb 20 2008 16:09:50)

Evolving Better Software

 

Invented by Scott Robert Ladd         ([email protected])

            Coyote Gulch Productions  (http://www.coyotegulch.com)

You didn't specify an input or configuration, so here's some help.

 

usage: runacovea -config {name} -input {name} [options]

 

essential options:

   -config {config file name}              (i.e., -config gcc34_opteron.acovea

   -input {source base name}               (i.e., -input almabench.c)

 

options for tuning the evolutionary algorithm:

   -n {number of populations to create}

   -p {size of each population}

   -g {number of generations to run}

   -sr {survival rate}                     (between 0.0 and 1.0)

   -mr {mutation rate}                     (between 0.0 and 1.0)

   -cr {crossover rate}                    (between 0.0 and 1.0)

   -ir {immigration rate}                  (between 0.0 and 1.0)

   -no-scaling                             (no fitness scaling)

   -size                                   (optimize for code size)

   -retval                                 (optimize for return value)

   -seed {random number seed}

 

example:

   runacovea -config gcc34_opteron.acovea -input huffbench.c

 

5.       安装Expat

至此acovea虽然已经安装成功了,但是它其实还需要Expat库来读取自己的配置文件,所以你还要保证系统安装了ExpatExpat的主页在http://expat.sourceforge.net/。安装库可以在http://sourceforge.net/projects/expat/下载。

我下载的是expat-2.0.1,参考它的README文档,运行:

./configure

make

make install

安装完成后,在/usr/local/lib/下应该有这几个文件:

-rw-r--r-- 1 root root 385152 02-20 15:52 /usr/local/lib/libexpat.a

-rwxr-xr-x 1 root root    799 02-20 15:52 /usr/local/lib/libexpat.la

-rwxr-xr-x 1 root root 342906 02-20 15:52 /usr/local/lib/libexpat.so

-rwxr-xr-x 1 root root 342906 02-20 15:52 /usr/local/lib/libexpat.so.1

-rwxr-xr-x 1 root root 342906 02-20 15:52 /usr/local/lib/libexpat.so.1.5.2

 

6.       使用acovea

OK,现在万事俱备,只欠东风了!

不过慢着,还有一件事情没有做:把libacovea-5.1.1/config/libacovea-5.1.1/benchmarks/下的所有文件分别复制到/usr/share/acovea/config//usr/share/acovea/benchmarks/下,前者是针对不同系统的配置文件,后者是测试程序。

现在可以开始看看怎么使用acovea了,前面提到的runacovea程序就是答案。通过参考它的用法,我们知道只要告诉它适合自己机器的配置文件,和测试程序的代码文件,就可以进行测试了。

首先根据自己机器的配置,选择最接近的配置文件,比如我的OSFedora 8,运行在Intel奔腾4处理器下,GCC版本4.1.2,那么我应该选择的配置文件是

/usr/share/acovea/config /g++40_pentium4.acovea

如果你选择的配置文件不正确,runacovea可能会异常退出。

然后选择一个测试文件,比如/usr/share/acovea/benchmarks/huffbench.c

运行命令:

runacovea -config g++40_pentium4.acovea -input huffbench.c

将开始自动测试过程,这个过程可能要耗费很长的时间。等acovea测试完成后,会输出测试结果,以下是我的机器的测试结果:

Acovea completed its analysis at 2008 Feb 20 23:12:46

 

Optimistic options:

 

                    -fomit-frame-pointer  (2.669)

                               -mieee-fp  (1.843)

 

Pessimistic options:

 

           -fno-guess-branch-probability  (-2.288)

                      -fno-if-conversion  (-2.34)

                      -fno-loop-optimize  (-1.514)

                        -floop-optimize2  (-1.565)

                            -fforce-addr  (-1.565)

               -momit-leaf-frame-pointer  (-2.288)

                           -ffloat-store  (-1.772)

                          -funroll-loops  (-2.34)

           -fbranch-target-load-optimize  (-2.03)

          -fbranch-target-load-optimize2  (-1.772)

                            -mfpmath=387  (-1.668)

                        -mfpmath=sse,387  (-1.823)

 

Acovea's Best-of-the-Best:

g++ -lrt -lm -std=gnu99 -O1 -march=pentium4 -fno-merge-constants -fno-thread-jumps -fno-if-conversion2 -ftree-dce -ftree-ter -ftree-sra -ftree-copyrename -ftree-fre -fcrossjumping -foptimize-sibling-calls -fcse-follow-jumps -fgcse -fexpensive-optimizations -fpeephole2 -fschedule-insns -fschedule-insns2 -fregmove -fstrict-aliasing -freorder-blocks -fthread-jumps -fgcse-lm -fsched-interblock -freorder-functions -falign-jumps -falign-loops -finline-functions -funswitch-loops -fomit-frame-pointer -fno-inline -fpeel-loops -ftracer -funswitch-loops -funroll-all-loops -fmodulo-sched -fno-function-cse -fgcse-sm -freschedule-modulo-scheduled-loops -ftree-loop-im -ftree-loop-ivcanon -fivopts -ftree-vectorize -mieee-fp -maccumulate-outgoing-args -minline-all-stringops -mfpmath=sse -funsafe-math-optimizations -fno-signaling-nans -finline-limit=500 -o /tmp/ACOVEA4EB52431 /usr/share/acovea/benchmarks/huffbench.c

 

Acovea's Common Options:

g++ -lrt -lm -std=gnu99 -O1 -march=pentium4 -fexpensive-optimizations -freorder-blocks -fomit-frame-pointer -fno-inline -fpeel-loops -fno-function-cse -mieee-fp -mfpmath=sse -o /tmp/ACOVEA8DAEFB43 /usr/share/acovea/benchmarks/huffbench.c

 

-O1:

g++ -lrt -lm -std=gnu99 -O1 -march=pentium4 -o /tmp/ACOVEA9653AF8A /usr/share/acovea/benchmarks/huffbench.c

 

-O2:

g++ -lrt -lm -std=gnu99 -O2 -march=pentium4 -o /tmp/ACOVEAE542A6DD /usr/share/acovea/benchmarks/huffbench.c

 

-O3:

g++ -lrt -lm -std=gnu99 -O3 -march=pentium4 -o /tmp/ACOVEA7BAB5CDD /usr/share/acovea/benchmarks/huffbench.c

 

-O3 -ffast-math:

g++ -lrt -lm -std=gnu99 -O3 -march=pentium4 -ffast-math -o /tmp/ACOVEA0C34078A /usr/share/acovea/benchmarks/huffbench.c

 

-Os:

g++ -lrt -lm -std=gnu99 -Os -march=pentium4 -o /tmp/ACOVEA5E98DF52 /usr/share/acovea/benchmarks/huffbench.c

 

 

A relative graph of fitnesses:

 

     Acovea's Best-of-the-Best: ******************************                        (2.16909)

       Acovea's Common Options: *********************************                     (2.3961)

                           -O1: **************************************                (2.72188)

                           -O2: ***********************************                   (2.53983)

                           -O3: ************************************                  (2.58571)

               -O3 -ffast-math: ************************************                  (2.59719)

                           -Os: **************************************************    (3.57661)

 

Acovea is done.

 

7.       总结

安装Acovea的过程相对来说比较复杂,需要许多的库支持,所以我觉得有必要把所有需要的库集中到一起,然后写一个命令来自动安装所有的东西。所以我写了如下的一个makefile,只要一个make命令就可以按照所有的库和Acovea,前提是所有需要的文件都在当前目录下:

PNG_LIBDIR:=libpng-1.2.24/

COYOTL_LIBDIR:=libcoyotl-3.1.0/

EVOCOSM_LIBDIR:=libevocosm-3.1.0/

EXPAT_LIBDIR:=expat-2.0.1/

ACOVEA_LIBDIR:=libacovea-5.1.1/

 

TARGET:=/usr/local/bin/runacovea

 

all : $(TARGET)

 

png :

@cd $(PNG_LIBDIR) ; chmod +x configure ; ./configure ; $(MAKE) check ; $(MAKE) install

 

coyotl :

@cd $(COYOTL_LIBDIR) ; chmod +x configure ; ./configure ; $(MAKE) ; $(MAKE) check ; $(MAKE) install

 

evocosm :

@cd $(EVOCOSM_LIBDIR) ; chmod +x configure ; ./configure ; $(MAKE) ; $(MAKE) check ; $(MAKE) install

 

expat :

@cd $(EXPAT_LIBDIR) ; chmod +x configure ; ./configure ; $(MAKE) ; $(MAKE) install

 

acovea :

@cd $(ACOVEA_LIBDIR) ; chmod +x configure ; chmod +x install-sh ; ./configure ; $(MAKE) ; $(MAKE) check ; $(MAKE) install

 

$(TARGET) : png coyotl evocosm expat acovea

 

.PHONY : all png coyotl evocosm expat acovea

 最后,在http://groups.google.com/group/dl-coder/files有安装acovea的所有库文件的集合acovea-5.1.1-collections.rar 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章