手动编译运行speccpu2000中的benchmarks

目前需要测试模拟器的性能,而又只能获得speccpu2000中benchmarks的源码。别无选择,只有自己手动编译,原以为写个简单的makefile和一个运行自动编译的shell脚本,能很快解决问题!真正实现的时候,才发现存在很多移植和编译选项设置问题(当然这些在benchmark的docs目录下有部分说明,你可以去查看)。

开始之前确保你的系统有:
         一份speccpu2000的benchmarks源码
         GNU gcc 编译器
         文本浏览器(出错的时候可以查看源码,推荐Kscope,其跟windows source insight类似)

GNU gcc 简介

作为自由软件的旗舰项目,Richard Stallman 在十多年前刚开始写作 GCC 的时候,还只是把它当作仅仅一个 C 语言的编译器;GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还支持 Ada 语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、Fortran等,以及支持数式编程和逻辑编程的 Mercury 语言,等等。而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了GNUCompiler Collection 也即是 GNU 编译器家族的意思了。另一方面,说到 GCC 对于各种硬件平台的支持,概括起来就是一句话:无所不在。几乎所有有点实际用途的硬件平台,甚至包括有些不那么有实际用途的硬件平台。

gcc 的几个前端

gcc认为预处理后的文件
(.i)C文件,并且设定C形式的连接

g++ 认为预处理后的文件 (.i) C++ 文件 , 并且设定 C++ 形式的连接 .

在 GCC 4.0 之前,g77 是 GCC 的一部分;此后,gFortran是 GCC 的一部分。

Makefile 简介

Makefile 基本上就是目标(target), 依赖(dependencies) 和动作三者所组成的一连串规则。而 make 就会根据 Makefile 的规则来决定如何编译 (compile) 和连结 (link) 程序。实际上,make 可做的不只是编译和连结程序,例如 FreeBSD 的 port collection 中, Makefile 还可以做到自动下载原始程式套件,解压缩 (extract) ,修补(patch),设定,然後编译,安装至系统中。

一个简单的makefile例子:
CC = gcc CXX = g++ CFLAGS = -Wall -c LIBS = #-lm -lutil -lc TARGET = foo %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ %.o:%.cpp $(XX) $(CFLAGS) -c $< -o $@ SOURCES = $(wildcard *.c *.cpp) OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES))) $(TARGET): $(OBJS) $(CC) $(OBJS) $(LIBS) -o $(TARGET) chmod a+x $(TARGET) clean: rm -f *.o

编译benchmarks

编译时要多参照相应的文档和默认的Makefile, 其中有很多说明,例如移植性选项的设置;fortran 90 的benchmark,有的编译时对源文件有编译顺序要求;252.eon有几个原文件不需要直接编译等等。同时编译时最好使用静态连接,使你的可执行文件移植性更强!如果你需要我的Makefile可以跟我联系!

运行benchmarks

CINT2000程序在不同测试集下的运行方式

bzip2 input.random 2 >input.random.out 2>input.random.err bzip2 input.compressed 8 >input.compressed.out 2>input.compressed.err bzip2 input.source 58 > input.source.out 2> input.source.err bzip2 input.graphic 58 > input.graphic.out 2> input.graphic.err bzip2 input.program 58 > input.program.out 2> input.program.err crafty crafty.out 2>crafty.err crafty crafty.out 2>crafty.err crafty crafty.out 2>crafty.err gap -l ./ -q -m 64M test.out 2>test.err gap -l ./-q -m 128M train.out 2>train.err gap -l ./ -q -m 192M ref.out 2>ref.err cc1 cccp.i -o cccp.s >cccp.out 2>cccp.err cc1 cp-decl.i -o cp-decl.s >cp-decl.out 2>cp-decl.err cc1 166.i -o 166.s >166.out 2>166.err cc1 200.i -o 200.s >200.out 2>200.err cc1 expr.i -o expr.s >expr.out 2>expr.err cc1 integrate.i -o integrate.s >integrate.out 2>integrate.err cc1 scilab.i -o scilab.s >scilab.out 2>scilab.err gzip input.compressed 2 >input.compressed.out 2>input.compressed.err gzip input.combined 32 >input.combined.out 2>input.combined.err gzip input.source 60 >input.source.out 2>input.source.err gzip input.log 60 >input.log.out 2>input.log.err gzip input.graphic 60 >input.graphic.out 2>input.graphic.err gzip input.random 60 >input.random.out 2>input.random.err gzip input.program 60 >input.program.out 2>input.program.err mcf inp.in >inp.out 2>inp.err mcf inp.in >inp.out 2>inp.err mcf inp.in >inp.out 2>inp.err parser 2.1.dict -batch test.out 2>test.err parser 2.1.dict -batch train.out 2>train.err parser 2.1.dict -batch ref.out 2>ref.err perlbmk -I. -I./lib test.pl test.out 2>test.err perlbmk -I./lib diffmail.pl 2 350 15 24 23 150 >2.350.15.24.23.150.out 2>2.350.15.24.23.150.err perlbmk -I./lib perfect.pl b 3 >b.3.out 2>b.3.err perlbmk -I. -I./lib scrabbl.pl scrabbl.out 2>scrabbl.err perlbmk -I./lib diffmail.pl 2 550 15 24 23 100 >2.550.15.24.23.100.out 2>2.550.15.24.23.100.err perlbmk -I. -I./lib makerand.pl >makerand.out 2>makerand.err perlbmk -I./lib perfect.pl b 3 m 4 >b.3.m.4.out 2>b.3.m.4.err perlbmk -I./lib splitmail.pl 850 5 19 18 1500 >850.5.19.18.1500.out 2>850.5.19.18.1500.err perlbmk -I./lib splitmail.pl 704 12 26 16 836 >704.12.26.16.836.out 2>704.12.26.16.836.err perlbmk -I./lib splitmail.pl 535 13 25 24 1091 >535.13.25.24.1091.out 2>535.13.25.24.1091.err perlbmk -I./lib splitmail.pl 957 12 23 26 1014 >957.12.23.26.1014.out 2>957.12.23.26.1014.err twolf test >test.stdout 2>test.err twolf train >train.stdout 2>train.err twolf ref >ref.stdout 2>ref.err vortex lendian.raw >vortex.out2 2>vortex.err vortex lendian.raw >vortex.out2 2>vortex.err vortex lendian1.raw >vortex1.out2 2>vortex1.err vortex lendian2.raw >vortex2.out2 2>vortex2.err vortex lendian3.raw >vortex3.out2 2>vortex3.err vpr net.in arch.in place.out dum.out -nodisp -place_only -init_t 5 -exit_t 0.005 -alpha_t 0.9412 -inner_num 2 >place_log.out 2>place_log.err vpr net.in arch.in place.in route.out -nodisp -route_only -route_chan_width 15 -pres_fac_mult 2 -acc_fac 1 -first_iter_pres_fac 4 -initial_pres_fac 8 >route_log.out 2>route_log.err vpr net.in arch.in place.out dum.out -nodisp -place_only -init_t 5 -exit_t 0.005 -alpha_t 0.9412 -inner_num 2 >place_log.out 2>place_log.err vpr net.in arch.in place.in route.out -nodisp -route_only -route_chan_width 15 -pres_fac_mult 2 -acc_fac 1 -first_iter_pres_fac 4 -initial_pres_fac 8 >route_log.out 2>route_log.err vpr net.in arch.in place.out dum.out -nodisp -place_only -init_t 5 -exit_t 0.005 -alpha_t 0.9412 -inner_num 2 >place_log.out 2>place_log.err vpr net.in arch.in place.in route.out -nodisp -route_only -route_chan_width 15 -pres_fac_mult 2 -acc_fac 1 -first_iter_pres_fac 4 -initial_pres_fac 8 >route_log.out 2>route_log.err

CFP2000程序在不同测试集下的运行方式

ammp < ammp.in applu < applu.in art -scanfile c756hel.in -trainfile1 a10.img -trainfile2 hc.img -stride 2 -startx 470 -starty140 -endx 520 -endy 180 -objects 10 equake < inp.in facerec < ref.in fma3d < fma3d.in lucas < lucas2.in mesa -frames 1000 -meshfile mesa.in -ppmfile mesa.ppm sixtrack < inp.in

转载于:https://www.cnblogs.com/weiffun/archive/2009/01/16/3302404.html

你可能感兴趣的:(手动编译运行speccpu2000中的benchmarks)