FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages

Gem5 for RISC-Vのビルド試行 (2. リグレッションテストの実行)

f:id:msyksphinz:20181129165439p:plain

Gem5のビルドが完了して簡単なテストが実行できたので、次はリグレッションテストを実行してみたい。

Gem5にはあらかじめRISC-V向けの命令セットのテストパタンが用意されている。これをビルドして、全て流してみればよいわけだ。

cd tests/test-progs/asmtest/src/riscv/
make # テストパタンがコンパイルされる。
./run-tests.py   # 注意。このまま実行するとCPUを使い切る

上記のrun-test.pyをそのまま実行するとCPUとメモリを使い切って非常に危険なので、CPU数を制限する。 オプションで制限できるかと思っていたのだが、出来ないようなので決め打ちでCPUコア数を16に制限した。

diff --git a/tests/test-progs/asmtest/src/riscv/run-tests.py b/tests/test-progs/asmtest/src/riscv/run-tests.py
index 53a8476c0..930896777 100755
--- a/tests/test-progs/asmtest/src/riscv/run-tests.py
+++ b/tests/test-progs/asmtest/src/riscv/run-tests.py
@@ -118,7 +118,7 @@ for test in tests:
                     ])

 # execute all jobs
-job_pool = Pool(processes = n_tests)
+job_pool = Pool(processes = 16)
 job_outputs = job_pool.map(subprocess.call, job_cmds)
 job_pool.close()

このままテストパタンを流すと、しばらくして実行が完了する。 test-summary.outを参照する。テストがいくつか落ちていることが分かる。25/458本がFailしていた。

rv64samt-ps-sysclone_d-AtomicSimpleCPU             failed - signal = 6
rv64samt-ps-sysclone_d-TimingSimpleCPU             failed - signal = 6
rv64samt-ps-sysclone_d-MinorCPU                    failed - signal = 6
rv64samt-ps-sysclone_d-DerivO3CPU                  failed - signal = 6
rv64samt-ps-sysfutex1_d-AtomicSimpleCPU            failed - status = 1
rv64samt-ps-sysfutex1_d-TimingSimpleCPU            failed - status = 1
rv64samt-ps-sysfutex1_d-MinorCPU                   failed - signal = 6
rv64samt-ps-sysfutex1_d-DerivO3CPU                 failed - status = 1
rv64samt-ps-sysfutex2_d-AtomicSimpleCPU            passed
rv64samt-ps-sysfutex2_d-TimingSimpleCPU            passed
rv64samt-ps-sysfutex2_d-MinorCPU                   failed - signal = 6
rv64samt-ps-sysfutex2_d-DerivO3CPU                 passed
rv64samt-ps-sysfutex3_d-AtomicSimpleCPU            failed - status = 1
rv64samt-ps-sysfutex3_d-TimingSimpleCPU            failed - status = 1
rv64samt-ps-sysfutex3_d-MinorCPU                   failed - signal = 6
rv64samt-ps-sysfutex3_d-DerivO3CPU                 failed - status = 1
rv64samt-ps-sysfutex_d-AtomicSimpleCPU             passed
rv64samt-ps-sysfutex_d-TimingSimpleCPU             passed
rv64samt-ps-sysfutex_d-MinorCPU                    failed - signal = 6
rv64samt-ps-sysfutex_d-DerivO3CPU                  passed
rv64ua-ps-amoadd_d-AtomicSimpleCPU                 passed
rv64ua-ps-amoadd_d-TimingSimpleCPU                 passed
rv64ua-ps-amoadd_d-MinorCPU                        passed
rv64ua-ps-amoadd_d-DerivO3CPU                      passed
rv64ua-ps-amoadd_w-AtomicSimpleCPU                 passed
...