問題來源:爲了驗證GEM5執行banchmark需要的時間是否可以容忍,故摸索了下gem5下如何運行spec2006,分析可用性。
步驟一 (編譯spec2006):
1. 購買或下載spec2006源碼;
2. 驗證壓縮文件的完整性
$ md5sum spec2006v1_0.tar.bz2
61a69f45ee38d1030a1c217dde782253 spec2006v1_0.tar.bz2
3. 解壓
$ tar -jxvf spec2006v1_0.tar.bz2
默認解壓到CPU2006v1.0.1目錄
4. 賦權限
CPU2006v1.0.1/目錄下:
chmod a+x install.sh
CPU2006v1.0.1/bin/目錄下:
chmod a+x relocate
CPU2006v1.0.1/tools/bin/linux-suse101-AMD64/目錄下:
chmod a+x spec*
chmod a+x description
5. 安裝
CPU2006v1.0.1/下執行: ./install.sh
6.編譯(build)一個benchmark(bzip2爲例)獲得bzip2_base.amd64-m64-gcc41-nn
命令:cd config(首先進入路徑)
命令:cp linux64-amd64-gcc41.cfg experiment5.cfg
7.安裝g++, gfortran:
輸入命令:sudo apt-get install g++
輸入命令:sudo apt-get install gfortran
通過命令“gfortran -v”,可以查看gfortran是否安裝成功。
注意:通過拷貝linux64-amd64-gcc41.cfg成爲experiment5.cfg,進行bzip2的build,默認是動態編譯,而在gem5運行build好的bzip2時應該是靜態編譯好的exe文件,所以在編譯bzip2時,應該選擇靜態編譯,那麼如何修改呢?
修改experiment5.cfg文件中的:
修改編譯器的路徑:
#####################################################################
#
# Compiler selection
#
#####################################################################
CC = /usr/bin/gcc
CXX = /usr/bin/g++
FC = /usr/bin/gfortran
將編譯選項改爲靜態:
#####################################################################
# Optimization
#####################################################################
## Base is low opt
default=base=default=default:
COPTIMIZE = -O2 -static
CXXOPTIMIZE = -O2 -static
FOPTIMIZE = -O2 -static
命令(build): runspec --config=experiment5.cfg --action=build --tune=base bzip2
如果輸入runspec提示找不到命令時(即提示:runspec:command not found)錯誤是,需要退回spec的按裝目錄,即退回到CPU2006v1.0.1目錄,輸入命令:
.空格./shrc
編譯過後進入目錄:
命令:cd benchspec/
命令:cd CPU2006
命令: cd 401.bzip2/
可以看見 401.bzip2文件中多了兩個文件夾 exe , build(ls命令查看)
7.運行:首先進入目錄 cd /home/danny/spec2006/CPU2006v1.0.1/config
命令: runspec --config=experiment5.cfg --size=test --noreportable --tune=base --iterations=1 bzip2
含義:noreportable 保證只運行一個benchmark而不是所有的那31個benchmark(spec 2006有31個benchmark)
運行結果:
runspec v4662 - Copyright 1999-2006 Standard Performance Evaluation Corporation
Using 'linux-suse101-AMD64' tools
Reading MANIFEST... 17910 files
Loading runspec modules...............
Locating benchmarks...found 31 benchmarks in 12 benchsets.
Locating output formats: ASCII, config, CSV, flags, HTML, mail, PDF, PostScript, raw, Screen, Submission Check
Reading config file '/home/danny/spec2006/CPU2006v1.0.1/config/experiment5.cfg'
Benchmarks selected: 401.bzip2
Compiling Binaries
Up to date 401.bzip2 test base amd64-m64-gcc41-nn default
Parsing Flags
Looking at 401.bzip2 base amd64-m64-gcc41-nn default: done
Flag Parsing Complete
Setting Up Run Directories
Setting up 401.bzip2 test base amd64-m64-gcc41-nn default: created (run_base_test_amd64-m64-gcc41-nn.0000)
Running Benchmarks
Running 401.bzip2 test base amd64-m64-gcc41-nn default
/home/danny/spec2006/CPU2006v1.0.1/bin/specinvoke -d /home/danny/spec2006/CPU2006v1.0.1/benchspec/CPU2006/401.bzip2/run/run_base_test_amd64-m64-gcc41-nn.0000 -e speccmds.err -o speccmds.stdout -f speccmds.cmd -C
/home/danny/spec2006/CPU2006v1.0.1/bin/specinvoke -E -d /home/danny/spec2006/CPU2006v1.0.1/benchspec/CPU2006/401.bzip2/run/run_base_test_amd64-m64-gcc41-nn.0000 -c 1 -e compare.err -o compare.stdout -f compare.cmd
Success: 1x401.bzip2
Producing Reports
mach: default
ext: amd64-m64-gcc41-nn
size: test
set: int
format: raw -> /home/danny/spec2006/CPU2006v1.0.1/result/CINT2006.003.test.rsf
format: ASCII -> /home/danny/spec2006/CPU2006v1.0.1/result/CINT2006.003.test.txt
set: fp
The log for this run is in /home/danny/spec2006/CPU2006v1.0.1/result/CPU2006.003.log
runspec finished at Wed Feb 15 16:35:25 2017; 37 total seconds elapsed
./build/X86/gem5.opt ./configs/example/se.py -c /home/danny/spec2006/CPU2006v1.0.1/benchspec/CPU2006/401.bzip2/exe/bzip2_base.amd64-m64-gcc41-nn -o /home/danny/spec2006/CPU2006v1.0.1/benchspec/CPU2006/401.bzip2/data/test/input/control