次は、SPEC2017のバイナリを作成して、シミュレータなどで動かしてみることを考える。 そのためには、RISC-V向けConfigの作成が必要だ。
spec2017_work/config/myriscv.cfg:config/Example-gcc-linux-x86.cfgとの差分は以下だ。
115c118 < % define gcc_dir /SW/compilers/GCC/Linux/x86_64/gcc-6.3.0 --- > % define gcc_dir /usr/ 125,127c128,130 < CC = $(SPECLANG)gcc -std=c99 %{model} < CXX = $(SPECLANG)g++ %{model} < FC = $(SPECLANG)gfortran %{model} --- > CC = $(SPECLANG)riscv64-linux-gnu-gcc -std=c99 > CXX = $(SPECLANG)riscv64-linux-gnu-g++ > FC = $(SPECLANG)riscv64-linux-gnu-gfortran 214c217 < OPTIMIZE = -g -O3 -march=native -fno-unsafe-math-optimizations -fno-tree-loop-vectorize --- > OPTIMIZE = -g -march=rv64gc -fno-unsafe-math-optimizations -fno-tree-loop-vectorize
とりあえず、コンパイルエラーを回避するために -O3 オプションを除外している。
これをQEMUか何かのエミュレータで動かす必要があるのだが、実行オプションにエミュレータをかますのがちょっと大変そうなので、もうちょっと手軽に実行できるコマンドだけを抽出したい。
x86の実行結果から、実際に動いているコマンドを抽出すると以下のようになるだろう。
../run_base_test_mytest-m64.0000/perlbench_s_base.mytest-m64 -I. -I./lib makerand.pl ../run_base_test_mytest-m64.0000/perlbench_s_base.mytest-m64 -I. -I./lib test.pl ../run_base_test_mytest-m64.0000/sgcc_base.mytest-m64 t1.c -O3 -finline-limit=50000 -o t1.opts-O3_-finline-limit_50000.s ../run_base_test_mytest-m64.0000/mcf_s_base.mytest-m64 inp.in ../run_base_test_mytest-m64.0000/omnetpp_s_base.mytest-m64 -c General -r 0 ../run_base_test_mytest-m64.0000/xalancbmk_s_base.mytest-m64 -v test.xml xalanc.xsl ../run_base_test_mytest-m64.0000/x264_s_base.mytest-m64 --dumpyuv 50 --frames 156 -o BuckBunny_New.264 BuckBunny.yuv 1280x720 ../run_base_test_mytest-m64.0000/deepsjeng_s_base.mytest-m64 test.txt ../run_base_test_mytest-m64.0000/leela_s_base.mytest-m64 test.sgf ../run_base_test_mytest-m64.0000/exchange2_s_base.mytest-m64 0 ../run_base_test_mytest-m64.0000/xz_s_base.mytest-m64 cpu2006docs.tar.xz 4 055ce243071129412e9dd0b3b69a21654033a9b723d874b2015c774fac1553d9713be561ca86f74e4f16f22e664fc17a79f30caa5ad2c04fbc447549c2810fae 1548636 1555348 0 ../run_base_test_mytest-m64.0000/xz_s_base.mytest-m64 cpu2006docs.tar.xz 4 055ce243071129412e9dd0b3b69a21654033a9b723d874b2015c774fac1553d9713be561ca86f74e4f16f22e664fc17a79f30caa5ad2c04fbc447549c2810fae 1462248 -1 1 ../run_base_test_mytest-m64.0000/xz_s_base.mytest-m64 cpu2006docs.tar.xz 4 055ce243071129412e9dd0b3b69a21654033a9b723d874b2015c774fac1553d9713be561ca86f74e4f16f22e664fc17a79f30caa5ad2c04fbc447549c2810fae 1428548 -1 2 ../run_base_test_mytest-m64.0000/xz_s_base.mytest-m64 cpu2006docs.tar.xz 4 055ce243071129412e9dd0b3b69a21654033a9b723d874b2015c774fac1553d9713be561ca86f74e4f16f22e664fc17a79f30caa5ad2c04fbc447549c2810fae 1034828 -1 3e ../run_base_test_mytest-m64.0000/xz_s_base.mytest-m64 cpu2006docs.tar.xz 4 055ce243071129412e9dd0b3b69a21654033a9b723d874b2015c774fac1553d9713be561ca86f74e4f16f22e664fc17a79f30caa5ad2c04fbc447549c2810fae 1061968 -1 4 ../run_base_test_mytest-m64.0000/xz_s_base.mytest-m64 cpu2006docs.tar.xz 4 055ce243071129412e9dd0b3b69a21654033a9b723d874b2015c774fac1553d9713be561ca86f74e4f16f22e664fc17a79f30caa5ad2c04fbc447549c2810fae 1034588 -1 4e ../run_base_test_mytest-m64.0000/xz_s_base.mytest-m64 cpu2006docs.tar.xz 1 055ce243071129412e9dd0b3b69a21654033a9b723d874b2015c774fac1553d9713be561ca86f74e4f16f22e664fc17a79f30caa5ad2c04fbc447549c2810fae 650156 -1 0 ../run_base_test_mytest-m64.0000/xz_s_base.mytest-m64 cpu2006docs.tar.xz 1 055ce243071129412e9dd0b3b69a21654033a9b723d874b2015c774fac1553d9713be561ca86f74e4f16f22e664fc17a79f30caa5ad2c04fbc447549c2810fae 639996 -1 1 ../run_base_test_mytest-m64.0000/specrand_is_base.mytest-m64 324342 24239 ../run_base_train_mytest-m64.0000/perlbench_s_base.mytest-m64 -I./lib diffmail.pl 2 550 15 24 23 100 ../run_base_train_mytest-m64.0000/perlbench_s_base.mytest-m64 -I./lib perfect.pl b 3 ../run_base_train_mytest-m64.0000/perlbench_s_base.mytest-m64 -I. -I./lib scrabbl.pl ../run_base_train_mytest-m64.0000/perlbench_s_base.mytest-m64 -I./lib splitmail.pl 535 13 25 24 1091 1 ../run_base_train_mytest-m64.0000/perlbench_s_base.mytest-m64 -I. -I./lib suns.pl ../run_base_train_mytest-m64.0000/sgcc_base.mytest-m64 200.c -O3 -finline-limit=50000 -o 200.opts-O3_-finline-limit_50000.s ../run_base_train_mytest-m64.0000/sgcc_base.mytest-m64 scilab.c -O3 -finline-limit=50000 -o scilab.opts-O3_-finline-limit_50000.s ../run_base_train_mytest-m64.0000/sgcc_base.mytest-m64 train01.c -O3 -finline-limit=50000 -o train01.opts-O3_-finline-limit_50000.s ../run_base_train_mytest-m64.0000/mcf_s_base.mytest-m64 inp.in ../run_base_train_mytest-m64.0000/omnetpp_s_base.mytest-m64 -c General -r 0 ../run_base_train_mytest-m64.0000/xalancbmk_s_base.mytest-m64 -v allbooks.xml xalanc.xsl ../run_base_train_mytest-m64.0000/x264_s_base.mytest-m64 --dumpyuv 50 --frames 142 -o BuckBunny_New.264 BuckBunny.yuv 1280x720 ../run_base_train_mytest-m64.0000/deepsjeng_s_base.mytest-m64 train.txt ../run_base_train_mytest-m64.0000/leela_s_base.mytest-m64 train.sgf ../run_base_train_mytest-m64.0000/exchange2_s_base.mytest-m64 1 ../run_base_train_mytest-m64.0000/xz_s_base.mytest-m64 input.combined.xz 40 a841f68f38572a49d86226b7ff5baeb31bd19dc637a922a972b2e6d1257a890f6a544ecab967c313e370478c74f760eb229d4eef8a8d2836d233d3e9dd1430bf 6356684 -1 8 ../run_base_train_mytest-m64.0000/xz_s_base.mytest-m64 IMG_2560.cr2.xz 40 ec03e53b02deae89b6650f1de4bed76a012366fb3d4bdc791e8633d1a5964e03004523752ab008eff0d9e693689c53056533a05fc4b277f0086544c6c3cbbbf6 40822692 40824404 4 ../run_base_train_mytest-m64.0000/specrand_is_base.mytest-m64 1 11 ../run_base_refspeed_mytest-m64.0000/perlbench_s_base.mytest-m64 -I./lib checkspam.pl 2500 5 25 11 150 1 1 1 1 ../run_base_refspeed_mytest-m64.0000/perlbench_s_base.mytest-m64 -I./lib diffmail.pl 4 800 10 17 19 300 ../run_base_refspeed_mytest-m64.0000/perlbench_s_base.mytest-m64 -I./lib splitmail.pl 6400 12 26 16 100 0 ../run_base_refspeed_mytest-m64.0000/sgcc_base.mytest-m64 gcc-pp.c -O5 -fipa-pta -o gcc-pp.opts-O5_-fipa-pta.s ../run_base_refspeed_mytest-m64.0000/sgcc_base.mytest-m64 gcc-pp.c -O5 -finline-limit=1000 -fselective-scheduling -fselective-scheduling2 -o gcc-pp.opts-O5_-finline-limit_1000_-fselective-scheduling_-fselective-scheduling2.s ../run_base_refspeed_mytest-m64.0000/sgcc_base.mytest-m64 gcc-pp.c -O5 -finline-limit=24000 -fgcse -fgcse-las -fgcse-lm -fgcse-sm -o gcc-pp.opts-O5_-finline-limit_24000_-fgcse_-fgcse-las_-fgcse-lm_-fgcse-sm.s ../run_base_refspeed_mytest-m64.0000/mcf_s_base.mytest-m64 inp.in ../run_base_refspeed_mytest-m64.0000/omnetpp_s_base.mytest-m64 -c General -r 0 ../run_base_refspeed_mytest-m64.0000/xalancbmk_s_base.mytest-m64 -v t5.xml xalanc.xsl ../run_base_refspeed_mytest-m64.0000/x264_s_base.mytest-m64 --pass 1 --stats x264_stats.log --bitrate 1000 --frames 1000 -o BuckBunny_New.264 BuckBunny.yuv 1280x720 ../run_base_refspeed_mytest-m64.0000/x264_s_base.mytest-m64 --pass 2 --stats x264_stats.log --bitrate 1000 --dumpyuv 200 --frames 1000 -o BuckBunny_New.264 BuckBunny.yuv 1280x720 ../run_base_refspeed_mytest-m64.0000/x264_s_base.mytest-m64 --seek 500 --dumpyuv 200 --frames 1250 -o BuckBunny_New.264 BuckBunny.yuv 1280x720 ../run_base_refspeed_mytest-m64.0000/deepsjeng_s_base.mytest-m64 ref.txt ../run_base_refspeed_mytest-m64.0000/leela_s_base.mytest-m64 ref.sgf ../run_base_refspeed_mytest-m64.0000/exchange2_s_base.mytest-m64 6 ../run_base_refspeed_mytest-m64.0000/xz_s_base.mytest-m64 cpu2006docs.tar.xz 6643 055ce243071129412e9dd0b3b69a21654033a9b723d874b2015c774fac1553d9713be561ca86f74e4f16f22e664fc17a79f30caa5ad2c04fbc447549c2810fae 1036078272 1111795472 4 ../run_base_refspeed_mytest-m64.0000/xz_s_base.mytest-m64 cld.tar.xz 1400 19cf30ae51eddcbefda78dd06014b4b96281456e078ca7c13e1c0c9e6aaea8dff3efb4ad6b0456697718cede6bd5454852652806a657bb56e07d61128434b474 536995164 539938872 8 ../run_base_refspeed_mytest-m64.0000/specrand_is_base.mytest-m64 1255432124 234923 ../run_base_refspeed_mytest-m64.0000/perlbench_s_base.mytest-m64 -I./lib checkspam.pl 2500 5 25 11 150 1 1 1 1 ../run_base_refspeed_mytest-m64.0000/perlbench_s_base.mytest-m64 -I./lib diffmail.pl 4 800 10 17 19 300 ../run_base_refspeed_mytest-m64.0000/perlbench_s_base.mytest-m64 -I./lib splitmail.pl 6400 12 26 16 100 0 ../run_base_refspeed_mytest-m64.0000/sgcc_base.mytest-m64 gcc-pp.c -O5 -fipa-pta -o gcc-pp.opts-O5_-fipa-pta.s ../run_base_refspeed_mytest-m64.0000/sgcc_base.mytest-m64 gcc-pp.c -O5 -finline-limit=1000 -fselective-scheduling -fselective-scheduling2 -o gcc-pp.opts-O5_-finline-limit_1000_-fselective-scheduling_-fselective-scheduling2.s ../run_base_refspeed_mytest-m64.0000/sgcc_base.mytest-m64 gcc-pp.c -O5 -finline-limit=24000 -fgcse -fgcse-las -fgcse-lm -fgcse-sm -o gcc-pp.opts-O5_-finline-limit_24000_-fgcse_-fgcse-las_-fgcse-lm_-fgcse-sm.s ../run_base_refspeed_mytest-m64.0000/mcf_s_base.mytest-m64 inp.in ../run_base_refspeed_mytest-m64.0000/omnetpp_s_base.mytest-m64 -c General -r 0 ../run_base_refspeed_mytest-m64.0000/xalancbmk_s_base.mytest-m64 -v t5.xml xalanc.xsl ../run_base_refspeed_mytest-m64.0000/x264_s_base.mytest-m64 --pass 1 --stats x264_stats.log --bitrate 1000 --frames 1000 -o BuckBunny_New.264 BuckBunny.yuv 1280x720 ../run_base_refspeed_mytest-m64.0000/x264_s_base.mytest-m64 --pass 2 --stats x264_stats.log --bitrate 1000 --dumpyuv 200 --frames 1000 -o BuckBunny_New.264 BuckBunny.yuv 1280x720 ../run_base_refspeed_mytest-m64.0000/x264_s_base.mytest-m64 --seek 500 --dumpyuv 200 --frames 1250 -o BuckBunny_New.264 BuckBunny.yuv 1280x720 ../run_base_refspeed_mytest-m64.0000/deepsjeng_s_base.mytest-m64 ref.txt ../run_base_refspeed_mytest-m64.0000/leela_s_base.mytest-m64 ref.sgf ../run_base_refspeed_mytest-m64.0000/exchange2_s_base.mytest-m64 6 ../run_base_refspeed_mytest-m64.0000/xz_s_base.mytest-m64 cpu2006docs.tar.xz 6643 055ce243071129412e9dd0b3b69a21654033a9b723d874b2015c774fac1553d9713be561ca86f74e4f16f22e664fc17a79f30caa5ad2c04fbc447549c2810fae 1036078272 1111795472 4 ../run_base_refspeed_mytest-m64.0000/xz_s_base.mytest-m64 cld.tar.xz 1400 19cf30ae51eddcbefda78dd06014b4b96281456e078ca7c13e1c0c9e6aaea8dff3efb4ad6b0456697718cede6bd5454852652806a657bb56e07d61128434b474 536995164 539938872 8 ../run_base_refspeed_mytest-m64.0000/specrand_is_base.mytest-m64 1255432124 234923
test / train / refspeed でそれぞれの実行の目的が違う。
https://www.spec.org/cpu2017/docs/runcpu.html
- Test: Set up all of the benchmarks using the test workload. Run them. Verify that they get correct answers. The test workloads are run merely as an additional verification of correct operation of the generated executables; their times are not reported and do not contribute to overall metrics. Therefore multiple benchmarks can be run simultaneously, as in the example below where the tester has set --parallel_test to allow up to 20 simultaneous tests.
- Train: Do the same steps for the train workload, for the same reasons, with the same verification, non-reporting, and parallelism.
- Ref: Run the refrate (5xx benchmarks) or the refspeed (6xx) workload
- Set up the directories for all benchmarks. If both base and peak tuning are requested, set up both.
- Run one benchmark at a time, in order by benchmark number within the requested set, verifying that each gets the correct answer, and recording times.
- Repeat. (*)
- If --iterations=3, repeat once more. (*)
- If both base and peak --tuning are requested, all of base is completed before starting peak.
とりあえず test のプログラムを実行できるようにならないといけないということだな。
試しに、qemu-riscv64 で実行してみる。 (qemu-riscv64 の作り方は https://msyksphinz.hatenablog.com/entry/2025/03/31/040000 を参照)
qemu-riscv64 -L ../../../../../../riscv-rootfs ./perlbench_s_base.mytest-m64 -I. -I./lib makerand.pl
237000 (4294967295): 852323637 236000 (4294967295): 745116238 235000 (4294967295): 3245298882 234000 (4294967295): 1651362111 233000 (4294967295): 603327521 232000 (4294967295): 2893101429 231000 (4294967295): 4244368315 ...
ちゃんと動作したようだ。