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 

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