x86向けに作成した簡単なコンフィグレーションスクリプトを、RISC-V向けに拡張する。
ドキュメントではARM向けになっているが、RISC-Vでやってみることにする。
RISC-Vバイナリのダウンロード
mkdir -p cpu_tests/benchmarks/bin/riscv cd cpu_tests/benchmarks/bin/riscv wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/riscv/Bubblesort wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/riscv/FloatMM
RISC-V向けにビルドがされていることを想定。
simple.pyをRISC-V向けに変更する
PIOと割り込みポートについて、x86では接続する必要があったが、x86以外のISAではこの必要はない。以下の3行は消してよい。
system.cpu.createInterruptController() #system.cpu.interrupts[0].pio = system.membus.mem_side_ports #system.cpu.interrupts[0].int_requestor = system.membus.cpu_side_ports #system.cpu.interrupts[0].int_responder = system.membus.mem_side_ports system.system_port = system.membus.cpu_side_ports
バイナリの位置を変更する。
thispath = os.path.dirname(os.path.realpath(__file__)) binary = os.path.join( thispath, "../../../", "tests/gem5/cpu_tests/benchmarks/bin/riscv/Bubblesort", )
gem5の実行
以下のコマンドでgem5を実行する。
./build/RISCV/gem5.opt configs/learning_gem5/part1/simple-riscv.py
無事にBubblesortが実行できることが確認できた。
gem5 Simulator System. https://www.gem5.org gem5 is copyrighted software; use the --copyright option for details. gem5 version 22.1.0.0 gem5 compiled Jun 13 2023 10:10:10 gem5 started Jun 27 2023 23:59:18 gem5 executing on kimura-tower, pid 3153013 command line: ./build/RISCV/gem5.opt configs/learning_gem5/part1/simple-riscv.py Openinig /home/kimura/work/gem5/gem5/configs/learning_gem5/part1/../../../tests/gem5/cpu_tests/benchmarks/bin/riscv/Bubblesort ... Global frequency set at 1000000000000 ticks per second warn: No dot file generated. Please install pydot to generate the dot file and pdf. build/RISCV/mem/dram_interface.cc:690: warn: DRAM device capacity (8192 Mbytes) does not match the address range assigned (512 Mbytes) build/RISCV/arch/riscv/linux/se_workload.cc:60: warn: Unknown operating system; assuming Linux. 0: system.remote_gdb: listening for remote gdb on port 7000 Beginning simulation! build/RISCV/sim/simulate.cc:192: info: Entering event queue @ 0. Starting simulation... -50000 Exiting @ tick 375612263000 because exiting with last active thread context