ROSE 编译器框架/SPEC CPU 2006 基准测试
假设源代码包位于 /usr/casc/overture/ROSE/svn/spec_cpu2006_v1.1 下
./install.sh -d /home/yourAccount/opt/spec_cpu2006
/home/yourAccount/opt/spec_cpu2006/benchspec/CPU2006/400.perlbench 子目录
- build data Docs exe run Spec src
12+17= 29 个基准测试
12 个整数基准测试:http://www.spec.org/cpu2006/CINT2006/
- 400.perlbench C 编程语言
- 源自 Perl V5.8.7。工作负载包括 SpamAssassin、MHonArc(电子邮件索引器)和 specdiff(SPEC 用于检查基准测试输出的工具)。
$ cloc-1.56.pl 400.perlbench
3057 text files.
1517 unique files.
484 files ignored.
http://cloc.sourceforge.net v 1.56 T=57.0 s (23.8 files/s, 26844.6 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Perl 1179 127322 661995 451954
C 109 13768 31736 192811
C/C++ Header 65 4202 9296 30785
XML 1 680 13 5357
Pascal 1 9 115 78
make 2 4 1 14
-------------------------------------------------------------------------------
SUM: 1357 145985 703156 680999
-------------------------------------------------------------------------------
- 401.bzip2 C 压缩
- Julian Seward 的 bzip2 版本 1.0.3,修改为在内存中执行大部分工作,而不是执行 I/O。
$ cloc-1.56.pl 401.bzip2/
56 text files.
43 unique files.
27 files ignored.
http://cloc.sourceforge.net v 1.56 T=1.0 s (17.0 files/s, 12473.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 10 1083 1131 5561
HTML 1 639 5 2837
C/C++ Header 3 210 174 617
XML 1 36 6 137
Perl 1 5 0 25
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 17 1974 1317 9182
-------------------------------------------------------------------------------
- 403.gcc C C 编译器
- 基于 gcc 版本 3.2,为 Opteron 生成代码。
$ cloc 403.gcc/
-bash: cloc: command not found
[hudson-rose@hudson-rose-30]cloc-1.56.pl 403.gcc/
597 text files.
319 unique files.
26 files ignored.
http://cloc.sourceforge.net v 1.56 T=40.0 s (7.4 files/s, 46660.2 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Assembly 11 0 2794 1331673
C 159 58475 62060 370172
C/C++ Header 110 5890 9295 17385
XML 1 1242 6 3794
Teamcenter def 12 611 47 2897
Perl 1 4 0 55
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 295 66223 74203 1725981
-------------------------------------------------------------------------------
- 429.mcf C 组合优化
- 车辆调度。使用网络单纯形算法(也用于商业产品)来调度公共交通。
$ cloc-1.56.pl 429.mcf/
94 text files.
64 unique files.
37 files ignored.
http://cloc.sourceforge.net v 1.56 T=2.0 s (19.5 files/s, 2090.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 22 526 345 2501
C/C++ Header 14 221 216 204
XML 1 24 10 95
Perl 1 5 0 26
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 39 777 572 2831
-------------------------------------------------------------------------------
- 445.gobmk C 人工智能:围棋
- 玩围棋游戏,一种简单描述但极其复杂的棋盘游戏。
$ cloc-1.56.pl 445.gobmk/
3110 text files.
1543 unique files.
2767 files ignored.
http://cloc.sourceforge.net v 1.56 T=37.0 s (4.3 files/s, 7464.7 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 134 25940 25404 218416
C/C++ Header 22 1048 1595 3478
XML 1 49 6 139
Perl 1 7 11 95
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 159 27045 27017 222133
-------------------------------------------------------------------------------
- 456.hmmer C 搜索基因序列
- 使用 profile 隐马尔可夫模型 (profile HMMs) 进行蛋白质序列分析
$ cloc-1.56.pl 456.hmmer/
235 text files.
160 unique files.
37 files ignored.
http://cloc.sourceforge.net v 1.56 T=4.0 s (33.0 files/s, 17054.2 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 114 3946 22853 38230
C/C++ Header 15 324 1045 1413
XML 1 75 6 212
Perl 1 4 0 102
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 132 4350 23905 39962
-------------------------------------------------------------------------------
- 458.sjeng C 人工智能:国际象棋
- 一个排名很高的国际象棋程序,也可以玩几种国际象棋变体。
$ cloc-1.56.pl 458.sjeng/
69 text files.
45 unique files.
18 files ignored.
http://cloc.sourceforge.net v 1.56 T=2.0 s (14.0 files/s, 7162.5 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 21 2152 1068 10429
C/C++ Header 4 123 36 397
XML 1 17 6 56
Perl 1 6 0 28
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 28 2299 1111 10915
-------------------------------------------------------------------------------
- 462.libquantum C 物理学 / 量子计算
- 模拟量子计算机,运行 Shor 的多项式时间因式分解算法。
$ cloc-1.56.pl 462.libquantum/
86 text files.
54 unique files.
19 files ignored.
http://cloc.sourceforge.net v 1.56 T=1.0 s (36.0 files/s, 4694.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 18 798 492 2302
C/C++ Header 15 267 243 394
XML 1 40 6 111
Perl 1 7 0 27
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 36 1113 742 2839
-------------------------------------------------------------------------------
- 464.h264ref C 视频压缩
- H.264/AVC 的参考实现,使用 2 个参数集对视频流进行编码。预计 H.264/AVC 标准将取代 MPEG2
$ cloc-1.56.pl 464.h264ref/
191 text files.
109 unique files.
23 files ignored.
http://cloc.sourceforge.net v 1.56 T=3.0 s (28.7 files/s, 17554.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 44 5968 7718 33063
C/C++ Header 39 899 1118 3409
XML 1 71 6 321
Perl 1 6 0 76
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 86 6945 8843 36874
-------------------------------------------------------------------------------
- 471.omnetpp C++ 离散事件模拟
- 使用 OMNet++ 离散事件模拟器对大型以太网校园网络进行建模。
$ cloc-1.56.pl 471.omnetpp/
333 text files.
178 unique files.
22 files ignored.
http://cloc.sourceforge.net v 1.56 T=4.0 s (39.2 files/s, 12109.5 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C++ 85 5087 3697 22603
C/C++ Header 69 2684 9788 4044
XML 1 122 6 357
Perl 1 4 0 39
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 157 7898 13492 27048
-------------------------------------------------------------------------------
- 473.astar C++ 路径查找算法
- 用于 2D 地图的路径查找库,包括著名的 A* 算法。
$ cloc-1.56.pl 473.astar/
107 text files.
64 unique files.
42 files ignored.
http://cloc.sourceforge.net v 1.56 T=1.0 s (33.0 files/s, 9131.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C++ 22 949 192 5972
C/C++ Header 8 544 62 1277
XML 1 22 6 56
Perl 1 9 0 35
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 33 1525 261 7345
-------------------------------------------------------------------------------
- 483.xalancbmk C++ XML 处理
- Xalan-C++ 的修改版本,将 XML 文档转换为其他文档类型。
$ cloc-1.56.pl 483.xalancbmk/
3665 text files.
1820 unique files.
19 files ignored.
http://cloc.sourceforge.net v 1.56 T=75.0 s (24.0 files/s, 37920.6 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
XML 4 194172 8 2074361
C++ 829 54318 72591 202976
C/C++ Header 944 35917 120959 80316
C 19 811 2399 2982
XSD 2 86 0 789
Perl 1 16 14 767
XSLT 2 58 0 500
make 1 1 1 5
-------------------------------------------------------------------------------
SUM: 1802 285379 195972 2362696
-------------------------------------------------------------------------------
17 个浮点基准测试:http://www.spec.org/cpu2006/CFP2006/
- 410.bwaves Fortran 流体动力学 计算 3D 跨音速瞬态层流粘性流。
- 416.gamess Fortran 量子化学。Gamess 实现了一系列量子化学计算。对于 SPEC 工作负载,使用限制性 Hartree Fock 方法、限制性开壳 Hartree-Fock 和多配置自洽场进行自洽场计算
- 433.milc C 物理学 / 量子色动力学 用于具有动力学夸克的晶格规范理论程序的规范场生成程序。
- 434.zeusmp Fortran 物理学 / CFD ZEUS-MP 是在伊利诺伊大学厄巴纳-香槟分校的国家超级计算应用中心 (NCSA) 开发的一种计算流体动力学代码,用于模拟天体物理现象。
- 435.gromacs C,
Fortran 生物化学 / 分子动力学 分子动力学,即模拟数百到数百万个粒子的牛顿运动方程。测试用例模拟了溶液中的溶菌酶蛋白质。
- 436.cactusADM C,
Fortran 物理学 / 一般相对论 使用交错跳跃数值方法求解爱因斯坦演化方程
- 437.leslie3d Fortran 流体动力学 使用 3D 线性涡流模型进行大涡模拟 (LES) 的计算流体动力学 (CFD)。使用 MacCormack 预测-校正时间积分方案。
- 444.namd C++ 生物学 / 分子动力学 模拟大型生物分子系统。测试用例包含 92,224 个载脂蛋白 A-I 原子。
- 447.dealII C++ 有限元分析 deal.II 是一个面向自适应有限元和误差估计的 C++ 程序库。测试用例求解具有非恒定系数的亥姆霍兹型方程。
- 450.soplex C++ 线性规划,优化 使用单纯形算法和稀疏线性代数求解线性规划。测试用例包括铁路规划和军事空运模型。
- 453.povray C++ 图像光线追踪 图像渲染。测试用例是使用 Perlin 噪声函数对包含一些带有纹理的抽象物体的景观进行 1280x1024 反锯齿渲染的图像。
- 454.calculix C,
Fortran 结构力学 用于线性和平面 3D 结构应用的有限元代码。使用 SPOOLES 求解器库。
- 459.GemsFDTD Fortran 计算电磁学 使用有限差分时域 (FDTD) 方法在 3D 中求解麦克斯韦方程。
- 465.tonto Fortran 量子化学 一个开源量子化学包,在 Fortran 95 中使用面向对象设计。测试用例对分子 Hartree-Fock 波函数计算施加约束,以更好地匹配实验 X 射线衍射数据。
- 470.lbm C 流体动力学 实现“格子玻尔兹曼方法”来模拟 3D 中不可压缩的流体
- 481.wrf C,
Fortran 天气 从米级到数千公里级的尺度进行天气建模。测试用例来自 30 公里区域持续 2 天的数据。
- 482.sphinx3 C 语音识别 来自卡内基梅隆大学的一种广为人知的语音识别系统
C : 14 个基准测试/ 12 个真正的基准测试,不包括 specrand
400.perlbench Programming Language 401.bzip2 Compression 403.gcc C Compiler 429.mcf Combinatorial Optimization 433.milc Physics / Quantum Chromodynamics 445.gobmk Artificial Intelligence: Go 456.hmmer Search Gene Sequence 458.sjeng Artificial Intelligence: chess 462.libquantum Physics / Quantum Computing 464.h264ref Video Compression 470.lbm Fluid Dynamics 482.sphinx3 Speech recognition 998.specrand 999.specrand
C++: 7 个基准测试 : namd dealII soplex povray omnetpp astar xalancbmk
444.namd 447.dealII 450.soplex 453.povray 471.omnetpp 473.astar 483.xalancbmk
Fortran: 6 个基准测试:bwaves gamess zeusmp leslie3d GemsFDTD tonto
410.bwaves 416.gamess 434.zeusmp 437.leslie3d 459.GemsFDTD 465.tonto
混合 C 和 Fortran:4 个:gromacs cactusADM calculix wrf
435.gromacs 436.cactusADM 454.calculix 481.wrf
- 环境 来源 /home/youAccount/opt/spec_cpu2006 中的 shrc 或 cshrc 以设置基准测试的环境。
. ./shrc
- 配置 准备 config/tux268-gcc42.cfg 基于现有的示例设置编译器和标志
表格摘要
- output_format = asc, pdf, Screen, html
http://www.spec.org/cpu2006/Docs/runspec.html#section3.1actions
- 仅构建
bash-3.00$ which runspec /home/youAccount/opt/spec_cpu2006/bin/runspec bash-3.00$ runspec --config=tux268-gcc42.cfg --action=build --tune=base bzip2
首先清理
- runspec --config=rose-linux64-gcc41 --tune=base --size=test --iterations=1 --noreportable --action=clobber all
- 使用测试数据集运行 默认是 --size=ref : 使用参考数据集运行
runspec --config=tux268-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable bzip2 runspec --config=tux268-rose-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable bzip2
- 运行所有整数或浮点基准测试 共 12 个整数基准测试
runspec --config=tux268-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable int // total 12 400.perlbench -- 3.78 -- S 401.bzip2 -- 7.52 -- S 403.gcc -- 1.42 -- S 429.mcf -- 5.37 -- S 445.gobmk -- 20.0 -- S 456.hmmer -- 5.35 -- S 458.sjeng -- 5.00 -- S 462.libquantum -- 0.0951 -- S 464.h264ref -- 21.7 -- S 471.omnetpp -- 0.545 -- S 473.astar -- 10.7 -- S 483.xalancbmk -- 0.115 -- S Est. SPECint_base2006 -- Est. SPECint2006 Not Run runspec --config=tux268-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable fp // total 17 410.bwaves -- 12.4 -- S 416.gamess -- 0.510 -- S 433.milc -- 8.71 -- S 434.zeusmp -- 25.2 -- S 435.gromacs -- 1.74 -- S 436.cactusADM -- 4.66 -- S 437.leslie3d -- 32.7 -- S 444.namd -- 15.6 -- S 447.dealII -- 22.6 -- S 450.soplex -- 0.0263 -- S 453.povray -- 0.874 -- S 454.calculix -- 0.0546 -- S 459.GemsFDTD -- 4.52 -- S 465.tonto -- 1.35 -- S 470.lbm -- 13.6 -- S 481.wrf -- 5.66 -- S 482.sphinx3 -- 2.26 -- S Est. SPECfp_base2006 -- Est. SPECfp2006 Not Run
首先测试 gcc/g++/gfortran,然后仅构建
清理:--action=clean 或 clobber 然后 identityTranslator
runspec --config=tux268-rose-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable gobmk
可报告的运行确保您的二进制文件可以使用测试和训练工作负载生成正确的结果(此运行规则要求是 CPU2006 V1.0 之后的新要求),然后针对实际测量运行 ref 工作负载 3 次。
runspec --config=tux268-rose-gcc42.cfg --tune=base --size=ref --iterations=1 --noreportable perlbench
数据大小
- test:最小的数据集
- train:测试在单个调用中运行多个大小的能力
- ref(默认):运行 3 次以获取可报告的结果
runspec --action=clobber int fp runspec --config=tux268-intel.cfg --tune=base --size=test --iterations=1 --noreportable bzip2 runspec --config=tux268-rose-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable bzip2 runspec --config=tux268-rose-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable bzip2 bash-3.00$ pwd /home/yourAccount/opt/spec_cpu2006 bash-3.00$ runspec --config=tux268-rose-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable fp
更改 /home/yourAccount/opt/spec_cpu2006/benchspec/CPU2006/400.perlbench/src/spec_config.h
添加 #include <stdbool.h>
必须在配置文件(例如 config/tux268-rose-gcc42.cfg)中添加一行以避免损坏的源代码警告
strict_rundir_verify = 0
pwd
/home/yourAccount/opt/spec_cpu2006/benchspec/CPU2006/400.perlbench/src
/home/yourAccount/opt/roseLatest/bin/identityTranslator -c -o sv.o -DSPEC_CPU -DNDEBUG -DPERL_CORE -O2 -DSPEC_CPU_LINUX_IA32 sv.c Adding argv[3] = sv.o to p_objectFileNameList Using strcmp(): This was not a valid string (buffer = define returned) Using strcmp(): This was not a valid string (buffer = define returned) Error: Unknown cppIndentifier = identityTranslator: ../../../../rose/src/frontend/SageIII/rose_attributes_list.C:1676: bool ROSEAttributesList::isCppDirective(const std::string&, PreprocessingInfo::DirectiveType&, std::string&): Assertion `false' failed. Aborted
/home/yourAccount/opt/spec_cpu2006/benchspec/CPU2006/401.bzip2/run/run_base_test_i386-m32-gcc42-nn.0001
- .mis
bash-3.00$ cat dryer.jpg.out.mis 0008: Compressed data 1434910 bytes in length Compressed data 1434894 bytes in length ^ 0013: Compressed data 1127895 bytes in length Compressed data 1127995 bytes in length ^ 0018: Compressed data 1067335 bytes in length Compressed data 1067427 bytes in length ^
每个基准测试都有一个命令行文件
run_base_test_amd64-m64-gcc41-nn.0000/speccmds.cmd
sphinx_livepretend_base.amd64-m64-gcc41-nn ctlfile . args.an4
403.gcc ~/opt/spec_cpu2006/benchspec/CPU2006/403.gcc/run/run_base_test_amd64-m64-gcc41-nn.0000]
[yourAccount@tux322]cat speccmds.cmd -C /home/yourAccount/opt/spec_cpu2006/benchspec/CPU2006/403.gcc/run/run_base_test_amd64-m64-gcc41-nn.0000 -o cccp.out -e cccp.err ../run_base_test_amd64-m64-gcc41-nn.0000/gcc_base.amd64-m64-gcc41-nn cccp.i -o cccp.s # ignore -C etc. focus on the final part! gdb -args ../run_base_test_amd64-m64-gcc41-nn.0000/gcc_base.amd64-m64-gcc41-nn cccp.i -o cccp.s
我们使用 ROSE 的 identityTranslator。与任何其他基于 ROSE 的翻译器一样,它旨在自动检测输入源文件类型并调用正确的 EDG 功能。
我们确实在 SPEC CPU2006 的子集上测试了 ROSE,作为我们日常回归测试的一部分。ROSE 可以完全支持 12 个 SPEC C 基准测试中的 10 个(编译它们并拥有经过验证的执行结果)。10 个 C 基准测试是 perlbench、bzip2、mcf、milc、gobmk、hmmer、sjeng、libquantum、lbm 和 sphinx3。gcc 和 h264ref 有一些小问题(主要与 ROSE 处理宏调用的方式有关),但我们正在努力解决这个问题。
我们使用 ROSE 编译 SPEC 的方式是:1) 将 ROSE 安装(通过 make install)到某个目录,例如 ROSE_INS(通过 configure --prefix=ROSE_INS 指定)。
2) 设置使用已安装 ROSE 的环境,identityTranslator 位于 ROSE_INS/bin 下 PATH=$ROSE_INS/bin:$PATH LD_LIBRARY_PATH=$ROSE_INS/lib:$LD_LIBRARY_PATH export PATH LD_LIBRARY_PATH
3) 准备一个 SPEC 配置文件(例如 spec_installation_path/config/rose.cfg)以使用 ROSE。rose.cfg 中的一组相关选项是
#We want to the test to abort on errors and report immediately ignore_errors = no # we want have ascii and table-based output (Screen) for results output_format = asc, Screen #The result is not intended for official reports to the SPEC organization reportable = 0 # compilers to compile benchmarks CC = identityTranslator CXX = identityTranslator FC = identityTranslator # compilation options: turn off ROSE ’s EDG frontend warnings # since we are not interesting in fixing the benchmarks COPTIMIZE = -O2 --edg:no_warnings CXXOPTIMIZE = -O2 --edg:no_warnings FOPTIMIZE = -O2 --edg:no_warnings
4) 最后,您可以在 SPEC 上测试 ROSE
cd $SPEC_CPU2006_INS # set up environment to run spec . ./shrc # clean up previous object/executable files for all floating point and integer benchmarks runspec --config=rose.cfg --tune=base --size=test --iterations=1 --noreportable fp int --action=clobber runspec --config=$SPEC_CPU2006_CONFIG --tune=base --size=test --iterations=1 --noreportable \ perlbench bzip2 mcf milc gobmk hmmer sjeng libquantum lbm sphinx3
现在已通过 10/12 个
通过集:runspec --config=tux268-rose-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable perlbench bzip2 mcf milc gobmk hmmer sjeng libquantum lbm sphinx3
perlbench: pass !!! compilation -D_GNUG__ problem bool problem bzip2: pass !!! line continuation for two empty line problem: compilation but wrong results gcc : noncompilable rose_x pending on a bug 347?, Unparse_ExprStmt::unparseEnumDeclStmt() SgInitializedName should be moved to located node test case test2009_05.c mcf : pass!!! milc: pass!!! gobmk : pass!!! file path issue include/liberty.h vs. engine/liberty.h rose_out.c engine/rose_out.c hmmer : pass!!! EDG frontend failure: implicit C function decl sjeng : pass!!! libquantum:pass!!! h264ref: noncompilable rose_x recursive macro replace after macro expansion: lbm : pass!!! sphinx3: pass!!! __FILE__ macro expansion problem. file name vs. full path+filename
runspec --config=tux268-rose-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable sphinx3
/home/yourAccount/opt/spec_cpu2006/bin/specinvoke -d /home/yourAccount/opt/spec_cpu2006/benchspec/CPU2006/482.sp hinx3/run/run_base_test_i386-m32-gcc42-nn.0000 -e speccmds.err -o speccmds.stdout -f speccmds.cmd -C /home/yourAccount/opt/spec_cpu2006/bin/specinvoke -E -d /home/yourAccount/opt/spec_cpu2006/benchspec/CPU2006/482 .sphinx3/run/run_base_test_i386-m32-gcc42-nn.0000 -c 1 -e compare.err -o compare.stdout -f compare.c md *** Miscompare of an4.log; for details see /home/yourAccount/opt/spec_cpu2006/benchspec/CPU2006/482.sphinx3/run/run_base_test_i386-m32-gcc42-nn.0 000/an4.log.mis Error: 1x482.sphinx3
runspec --config=tux268-rose-gcc42.cfg --tune=base --size=test --iterations=1 --noreportable namd dealII soplex povray omnetpp astar xalancbmk
- Henning, J.L., SPEC CPU2000 测量新千年的 CPU 性能,2000
- http://www.spec.org/cpu2006/