生成したSIFTトレースを使用して、Sniperシミュレータで詳細な性能評価を行う。
Sniperの設定
Sniperシミュレーションでは、複数の設定ファイルを使用する:
CONFIG_BASE="${CONFIG_DIR}/riscv-base.cfg"
CONFIG_MEDIUMBOOM="${CONFIG_DIR}/riscv-mediumboom.v1024_d256.cfg"
CONFIG_BASE_HIGH="${CONFIG_DIR}/riscv-base-high.cfg"
- riscv-base.cfg: 基本的なRISC-Vプロセッサ設定
- riscv-mediumboom.v1024_d256.cfg: MediumBOOMプロセッサ設定(ベクトル拡張対応)
- riscv-base-high.cfg: 高性能設定
ROI(Region of Interest)の設定
SimPointの結果を基に、ROI(Region of Interest)を設定する。ROIは、詳細シミュレーションを実行する領域を指定する:
# fast-forward: 20% of INTERVAL, detailed simulation: 80% of INTERVAL
WARMUP_LENGTH=$((SIMPOINT_INTERVAL * 20 / 100))
DETAILED_LENGTH=$((SIMPOINT_INTERVAL * 80 / 100))
ROI_ICOUNT_PARAMS="0:${WARMUP_LENGTH}:${DETAILED_LENGTH}"
- Warm-up期間: SimPoint位置の直前20%を高速実行してキャッシュをウォームアップ
- 詳細シミュレーション期間: 残り80%を詳細にシミュレート
Sniperシミュレーションの実行
Sniperシミュレーションを実行する場合は、run_sniper_<benchmark> ターゲットを使用する:
make run_sniper_429.mcf
このターゲットは、以下の処理を行う:
sift_results/<benchmark>/からすべてのSIFTファイルを検索- 各SIFTファイルに対してSniperシミュレーションを実行
- 結果を
simulation_results/<benchmark>/に保存
"${RUN_SNIPER}" -d "${output_subdir}" \
-v \
-c "${CONFIG_BASE}" \
-c "${CONFIG_MEDIUMBOOM}" \
-c "${CONFIG_BASE_HIGH}" \
--roi-script \
-s "roi-icount:${ROI_ICOUNT_PARAMS}" \
-c "general/magic=false" \
-c "general/app=${benchmark}" \
-c "perf_model/core/rob_timer/vec_physical_registers=40" \
-c "perf_model/core/rob_timer/vec_reserve_policy=alloc_none" \
-c "perf_model/dram/latency=200" \
-c "perf_model/l1_dcache/outstanding_misses=48" \
-c "perf_model/l2_cache/outstanding_misses=9" \
--traces=${sift_file}
Sniperの出力結果
Sniperシミュレーションの結果は、simulation_results/<benchmark>/ ディレクトリに保存される:
simulation_results/ ├── 400.perlbench/ │ └── subcmd_1/ │ └── simpoint_12345/ │ ├── sim.out │ ├── sim.stats.sqlite3 │ └── ... ├── 401.bzip2/ │ └── subcmd_1/ │ └── simpoint_23456/ │ └── ... └── ...
各シミュレーション結果には、以下の情報が含まれる:
- sim.out: シミュレーションの標準出力
- sim.stats.sqlite3: 詳細な統計情報(SQLiteデータベース形式)
- その他のログファイル: デバッグ情報やエラーログ
並列実行による高速化
Sniperシミュレーションも、各SIFTファイルごとに独立して実行できるため、parallelコマンドを使用して並列実行される。
実行フローの全体像
BBV収集からSniperシミュレーションまでの全体フローをまとめると:
BBV収集:
make run_bbv_<benchmark>- QEMUのBBVプラグインを使用して基本ブロックベクトルを収集
- 結果:
bbv_results/<benchmark>/bbv_*.out.*.bb
SimPoint分析:
make run_simpoint_<benchmark>- SimPointツールで代表的な位相を抽出
- 結果:
simpoint_results/<benchmark>/*.simpointsと*.weights
SIFT生成:
make run_sift_<benchmark>- QEMUのfrontendプラグインでSIFTトレースを生成
- 結果:
sift_results/<benchmark>/**/*.sift
Sniperシミュレーション:
make run_sniper_<benchmark>- SIFTトレースを使用して詳細な性能評価を実行
- 結果:
simulation_results/<benchmark>/**/sim.stats.sqlite3