以下の内容はhttps://msyksphinz.hatenablog.com/entry/2025/11/04/040000より取得しました。


SPEC2006/SPEC2017をRISC-V環境で実行するためのリポジトリを構築する (ベンチマークの並列実行)

spec2006_work/Makefile では、GNU parallel を使用してベンチマークの実行を並列化している。

ベンチマークの並列実行

ベンチマーク実行時、specinvoke コマンドを使用してサブコマンドを抽出し、それらを parallel で並列実行する:

$(RUN_BENCH_TARGETS): benchmark=$(subst run_,,$@)
$(RUN_BENCH_TARGETS): run_dir=$(SPEC_ROOT)/benchspec/CPU2006/$(benchmark)/run/run_base_ref_gcc.0000
$(RUN_BENCH_TARGETS):
    @subcmds=$$(cd $(run_dir) && $(SPECINVOKE) -n 2>&1 | grep -v "^#" | grep -v "^timer" | grep -v "^$$"); \
    num_subcmds=$$(echo "$$subcmds" | wc -l); \
    echo "=== Subcommands for $(benchmark) ($$num_subcmds commands)"; \
    echo "$$subcmds" | sed "s|^|cd $(run_dir) \&\& |" | \
    parallel --line-buffer -j $$num_subcmds \
    "{}; echo '[$(benchmark)] Completed {#}/$$num_subcmds'"; \
    echo "=== Completed all $(benchmark) subcommands"
  • 複数のベンチマークを並列実行
make -j4 run_429.mcf run_401.bzip2 run_456.hmmer run_458.sjeng

BBV(Basic Block Vector)の収集

BBV(Basic Block Vector)は、プログラムの実行特性を分析するための情報であり、SimPointでの計算に利用する。 QEMUのBBVプラグインを使用してBBVデータを収集する。

BBVプラグインの設定

Makefileでは、QEMUのBBVプラグインを使用するための設定が定義されている:

QEMU := ${HOME}/work/bench_trace_env/qemu-10.0.6/build/qemu-riscv64
BBV_PLUGIN := $(QEMU_BUILD_DIR)/contrib/plugins/libbbv.so
BBV_DIR := bbv_results

BBV収集の実行

BBVを収集する場合は、run_bbv_<benchmark> ターゲットを使用する:

make run_bbv_429.mcf

このターゲットは、以下の処理を行う:

  1. BBV出力ディレクトリを作成(bbv_results/<benchmark>/
  2. ベンチマークのサブコマンドを抽出
  3. 各サブコマンドに対して、QEMUの -plugin オプションでBBVプラグインを適用
  4. 各サブコマンドごとに個別のBBVファイルを生成(bbv_1.out.0.bbなど)
$(RUN_BBV_TARGETS): benchmark=$(subst run_bbv_,,$@)
$(RUN_BBV_TARGETS): run_dir=$(SPEC_ROOT)/benchspec/CPU2006/$(benchmark)/run/run_base_ref_gcc.0000
$(RUN_BBV_TARGETS): bbv_output_dir=$(BBV_DIR)/$(benchmark)
$(RUN_BBV_TARGETS):
    @mkdir -p $(bbv_output_dir)
    @subcmds=$$(cd $(run_dir) && $(SPECINVOKE) -n 2>&1 | grep -v "^#" | grep -v "^timer" | grep -v "^$$"); \
    num_subcmds=$$(echo "$$subcmds" | wc -l); \
    echo "$$subcmds" | sed "s/^'//; s/'$$//" | nl -nln | \
    parallel --line-buffer --colsep '\t' -j $$num_subcmds \
    'bbv_file="$$bbv_dir_abs/bbv_{1}.out"; \
    cmd_with_bbv=$$(echo {2} | sed "s|$(QEMU)|$(QEMU) -plugin $(BBV_PLUGIN),outfile=$$bbv_file|"); \
    (cd $(run_dir) && eval $$cmd_with_bbv) && \
    echo "[$(benchmark) BBV {1}/$$num_subcmds] Completed - BBV saved to $$bbv_file"'

BBVファイルは、bbv_results/<benchmark>/ ディレクトリに保存される:

bbv_results/
├── 400.perlbench/
│   ├── bbv_1.out.0.bb
│   ├── bbv_2.out.0.bb
│   └── bbv_3.out.0.bb
├── 401.bzip2/
│   ├── bbv_1.out.0.bb
│   └── bbv_2.out.0.bb
└── ...



以上の内容はhttps://msyksphinz.hatenablog.com/entry/2025/11/04/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14