FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

GitHub ActionsでSPEC CPU2006の実行を自動化する (6. SIFT生成用のフロントエンドプラグイン修正)

SIFT生成時に誤って大量のトレースファイルが生成されてしまっているので、これのデバッグをしてみる。

Region of Interest (ROI) の開始条件判定において、m_in_roiの状態チェックが逆になっていた。具体的には、以下のような問題があった。

// 問題のあったコード
if (m_in_roi && roi_inst_count == m_fast_forward_target) {
   std::cout << "[FRONTEND] Detail Mode Start\n";
   FrontendCallbacks<QemuFrontend>::handleMagic (threadid, SIM_CMD_ROI_START, 0, 0);
}

ROI開始の条件を!m_in_roiに修正し、ROI開始時にm_in_roitrueに設定するようにした。

// 修正後
if (!m_in_roi && roi_inst_count == m_fast_forward_target) {
   std::cout << "[FRONTEND] Detail Mode Start\n";
   FrontendCallbacks<QemuFrontend>::handleMagic (threadid, SIM_CMD_ROI_START, 0, 0);
   m_in_roi = true;
}

ROI終了時にインストルメンテーションモードをSift::ModeStopに設定し、確実にトレース生成を停止するようにした。

if (m_in_roi && roi_inst_count == m_fast_forward_target + m_detailed_target) {
   std::cout << "[FRONTEND] Detail Mode End\n";
   FrontendCallbacks<QemuFrontend>::handleMagic (threadid, SIM_CMD_ROI_END, 0, 0);
   m_control->setInstrumentationMode(Sift::ModeStop);
   m_control->endROI(threadid);
   m_in_roi = false;
}