Skip to content
Yuya Degawa edited this page Jun 5, 2023 · 3 revisions

dst/更新点/鬼斬.md

更新点

2013/6/18 rev.6729

  • 前バージョンと比較して多くのファイルに修正が加えられています.
  • 関数名の変更,ディレクトリの変更等がありますが,基本的な構造は変わりません.

Inside Onikiri

  • Splitted a cycle into 5 phases: Begin, Evaluate, Transition, Update and End.
  • Re-implemented execution mechanism with ExecUnitReserver
  • A check-pointing mechanism is totally reconstructed. Now ops in fetch stages can be safely flushed.
  • Added a proxy class for a memory dependency predictor. This makes it possible for users to change memory dependency predictors easily.
  • Added a new feature to EventDelegate that a user can choose priority.
  • Added mechanisms for recovery from exception.
  • Added HOOK_SECTION macros, which helps you write statements that can be hooked.
  • Added various hook handlers to the hook sample.
  • Many other modifications to debug.

Onikiri Parameters/Options

  • Created a new parameter that specifies fetch policy for SMT.
    • Set default as 'ICOUNT' policy.
  • Implemented a new feature for RAS that creates a checkpoint of a part of the stack.
  • Added AgeIssueSelector and InorderIssueSelector.
  • Int-fp conversion unit is changed to a pipelined unit.
  • An ideal mode of partial load forwarding is implemented.
  • Implemented dedicated load/store queues.
  • Added a perfect memory dependency predictor.
  • Added a new parameter about latency of a store commitment.
  • Added a option that removes ops from MemOrderManager on commitment.
  • Added a option that removes ops from InorderList on commitment.
  • Changed default commitment/retirement width from 6 to 4.

Project

  • msvc
    • Updated project files to Visual Studio 2012.
    • Changed a default configuration in VS from Win32 to x64.
    • Enable multi-thread compilation in a debug mode.
    • Added 'FastDebug' configuration to a visual studio project. This configuration makes it possible to run faster in a debug mode, but uninitialized variables are not checked.
    • Added unit tests using MSVC Unit Test Framework. Currently, there are shttl tests only.
  • gcc
    • Added a '-static' option to LDFLAGS in MakeCfg.xml.

Tools

  • Kanata
    • Version information is updated.
    • Updated the project file of Kanata to VS 2012.
    • Removed KanataPP files.
    • Changed dumped stage names for Kanata.
    • The label command is modified to label comments to each stage. A new label type(2) is added.
    • Error messages on log loading are changed to more detailed ones.
    • An input file is closed after loading.
    • A view range of instructions is automatically adjusted.
    • Explorer does not freeze when a file is drag and dropped.
    • A log converter is now integrated to Kanata form. A intermediate file is no longer created.
    • Fixed a bug where dependency arrows are not drawn correctly
    • Draw dependency arrows to lanes except main lanes.
    • Stage names including "X" are regarded as execution stages.
    • Added an option that retains the height of stages.
    • The lanes of stages can be shown in dedicated rows. GUI configuration for this function is not yet implemented...
    • An elapsed time is shown when log conversion is completed.
    • Many other modifications to debug.
  • XML2CHeader
    • The name of a constant string variable can be specified by a command line option.
  • AutoRunTools
    • Added 'Combination' option to 'Processes' node in AutoRunTools.
    • Array data (ex. /path/@attr="0,1,2,3") is treated correctly.
  • vcproj2make
    • Added custom build functions to vcxproj2make.pl.

Libraries

  • Updated BOOST library to version 1.53.0.

Benchmarks

  • Changed the path of a cross compiler in a 'HelloWorld' sample.

2012/6/1 rev.5321

  • XML の先頭に余計な空白が入ってしまうのを修正
  • XML ソースの先頭にライセンスを出してしまっていたのを修正
  • キャンセル再実行された命令数の数え方を,実際にキャンセルされた命令に修正
  • リスケジュール時に,実際に命令がキャンセルされたかどうかを返すように
  • インフライト命令中に依存関係にある store-consumer 対が2つ以上あった場合に StoreSet 予測器がおかしな結果を返していたのを修正
  • プロセス毎に実行命令数や IPC を出すように変更

2012/5/29 rev.5311

  • 前バージョンと比較して多くのファイルに修正が加えられています.
  • 特にエミュレータのメモリ周り,シミュレータのスケジューラの構造とキャッシュ周りに大きな変更があるため該当部分を直接改造している場合は再実装が必要です.
    • キャッシュに関してはプリフェッチャのフレームワークが用意されているのでそちらをご利用ください.
  • Hook を使用している場合の移植は比較的容易だと思われます.

鬼斬本体の全体に関する部分

  • VC の警告レベルを 3 から 4 に引き上げと,それに伴う修正
  • VS2008 以前の定義を削除
  • エミュレーションモードなどで,実行が一切行われなかった際に警告を出すように変更
  • 入力に何も渡されなかった場合に,その旨を表示するように.
  • 全てのヘッダを src/ からの相対パスで include されるように
  • 各部の依存を include ではなく,前方宣言で解決するように
  • 手動でブレークを起こすマクロの追加
  • Main の例外処理を exeception で受けるように変更
  • 例外の処理方法を変更 初期化,本処理,終了処理 のそれぞれを個別に処理するように

エミュレータ

  • メモリ関係
    • メモリの Copy-on-Write による確保の実装
    • メモリ保護の実装
    • VirtualMemory 内で未初期化の変数が使われる可能性があるとの警告が出る場合があるのを修正
    • アドレスのマスク時に演算子の優先順位が曖昧だったのを修正
  • その他
    • gdb を使って鬼斬のエミュレーションをリモートデバッグできるように
      • エミュレータに手を加えたり,バイナリを手動で書いた際のデバッグに使える
      • Mode を "EmulationWithDebug" に指定すると可能
      • 実行時はターゲットのクロス gdb が必要
    • 整数 0 除算エラーが発生した際に,そのまま落ちるのではなく,警告を表示して0を返すように
    • isnan を boost のものを使ったものに変更
    • 浮動小数点演算の丸め方向指定がうまくいっていなかったのを修正
    • 浮動小数点演算の丸め方向テストをエミュレータ作成時に行うように
    • Alpha 21264A に対応
    • Windows のシステムコールを Linux の挙動に合わせるように修正
    • ELF ヘッダのスタック配置が間違っていたのを修正
    • ISA のエンディアンを取得できるように修正
    • SystemManager 内で書き換え可能な参照を使用している部分をポインタに変更
    • EmulationOp をコンテナ内で使えるように修正
    • EmulationOp のソースレジスタの配列のサイズが間違っていたのを修正

シミュレータ

  • メモリ,キャッシュ
    • Prefetcher の実装
    • キャッシュの実装を大幅に変更
    • StoreSet のID テーブルを引く際,Addr からint に丸められてインデックスが用いられていたのを修正
    • ビッグエンディアン時に MemOrderManager 上の store-load フォワーディングが間違っていたのを修正
    • Op にキャッシュアクセス結果を格納するように変更
    • FP のロードで,ストアフォワーディングによって値が得られた場合に二重に float conversion latency が加えられていたバグの修正
    • MemOrderManager からアドレス操作関連のルーチンを分離
    • キャッシュアクセスカバー率を出力するように
  • フェッチ~ディスパッチ
    • フェッチレイテンシがL1Iキャッシュのレイテンシよりも短い場合はエラーを出すように
    • L1I キャッシュとフェッチャのステージ数が異なった場合にエラーで落とすように変更.
      • 意図的に異なった構成にしたい場合はスイッチで無効化できるように
    • プロデューサー命令の後ろから再フェッチを行うオプションを実装
    • Renamer と Dispatcher のストールが出ていなかったのを修正
    • Renamer に ステアリングのフックを追加
  • スケジューラ
    • スケジューリングの実装を大幅に変更
    • Select 時のポリシ選択を実装
    • 命令のフラッシュ(分岐予測ミスからの回復など)時に,Scheduler に命令が残る事があったバグを修正
    • デフォルトの設定を発行キューから忘れるものに変更
  • 分岐予測
    • パーフェクト分岐予測器を実装
    • トータルの分岐予測ヒット率を出力するように
    • 分岐予測時のHook を追加
  • shttl
    • setassoc_table のメソッドで書き換え可能な参照を引数に取っていた部分を,ポインタにするように変更
    • setassoc_table::const_iterator がうまく働いていなかったのを修正
    • リプレースメントアルゴリズムを単一のテーブルで実装するように変更
    • linked list 式 LRU の追加
    • LRU のテストコードを追加
  • サンプル
    • 分岐予測器のサンプルモジュールを追加
    • プリフェッチャのサンプルを追加
    • サンプルの Null モジュールを追加
    • Hook のサンプルを追加
  • その他
    • ForwardEmulator の実装
      • フェッチ時にエミュレーションを行い,その命令の実行結果を得る
      • シミュレーション結果の検証や予測器のパーフェクトモデルを実装する際に用いる
    • 物理レジスタ内でISA側とのレジスタのセグメント数のチェックをするように
    • イベントリストのフリーリストをAllocateする時,正しい動作なのにASSERTを出していたので修正
    • Core に Emulator を取得するメソッドを追加
    • Dumper の位置を Sim 内に変更
    • レイテンシ予測器の予測率うちわけが間違っていたのを修正
    • リソース生成数のチェックがおかしいのを修正
    • Addr に大小比較の演算子を追加

パラメータ

  • DefaultParam を XML ファイルに移行
  • DefaultConfiguration 以外を指定した場合,終了時にノードにタッチしていないと警告が出るのを修正
  • XML ファイル内のImport を,そのXML 自体の読み込みよりも前に行うように変更
  • ParamDB に データのバインディングを追加
  • データ投機ミス関連のパラメータ名をバインディングを使用した実装に変更
  • LoadPipelineMode をバインディングを使って実装
  • キャッシュの書き込みポリシをバインディングを使って設定するように
  • ParamXMLPath がパス中の text() を解釈できるように変更
  • パラメータの Get 系メソッドを参照ではなくポインタを使うように変更

ライブラリ

  • TinyXML を 2.6.1 に更新
  • boost を1.46.1 に更新

kanata

  • Kanata のログフォーマットを変更
    • 任意のタイミングでラベルを追加できるように
  • 幅が32000サイクルを超えるステージが表示できなかったのを修正

スクリプト関連

  • 出力ディレクトリが存在しなかった場合,作成するように
  • 平均を出力するオプションを追加
  • コンフィギュレーションのXMLファイルにマクロ機能を追加
  • マクロの展開の処理量を削減
  • 各スクリプトの途中経過表示方法を変更
  • statistics を,最終結果が出ていないセッションでも落ちずに可能な限り処理を継続できるよう修正
  • statistics 実行時に cfg ファイルの引数が渡されていなかったのを修正
  • C ヘッダ<>XML 変換スクリプトの出力がCRLFになるように修正
  • C ヘッダ<>XML 変換スクリプトを Perl ディレクトリに移動
  • ジョブ投入スクリプト内で Processes 節を複数書けるように SMT 実行の時などのときに便利
  • ジョブ投入スクリプトで,cfg.xml で指定したコマンドよりも先に実行コマンドを入れるように変更

2010/10/28 rev.4240

  • Inorder モード以外を実行するときに不要な warning が出ていたのを修正

2010/10/22 rev.4237

  • シミュレータ
    • setassoc_table の実装方法を変更
    • アロケータの基本確保サイズを変更
    • 変数初期化の順序を変更
    • イベントリストをフリーリストを使用したものに変更
    • Hook に登録可能なメソッドの種類をいくつか追加
    • L1ヒットミス予測器のアップデートがL1予測以外の場合にも呼ばれていたのを修正
    • PessimisticHitMissPred をデフォルトに追加
    • シミュレーション側にメモリの確保と解放を通知するインターフェースを追加
    • SystemIF の引数をconst 参照に
    • 1つのスケジューラがいっぱいでも他が空いているとOoOにディスパッチしてしまう問題を修正
    • Inorder モード時にヒットミス予測器の予測を引くように
    • Inorder モード時に予測器とキャッシュを無効にできるように
  • パラメータ
    • ユーザーデフォルトパラメータのファイルを追加
    • パラメータ出力のフィルタ機能を追加
    • LatPred のヒットミス予測器の接続をConnection に
    • 一度もアクセスされていない属性があった場合,警告を出すように
    • リソースの二重定義時に,エラーメッセージが正しく出ていなかったバグの修正
    • ロード命令のパイプラインモデルについてのパラメータを追加
  • スクリプト関連
    • Makefile 生成スクリプトで,Makefile の再生成用コマンドの生成に失敗していたのを修正
    • キューに投げた結果の自己診断機能を追加
    • cfg.xml のセッション毎にEnable 属性を追加
  • Kanata
    • コントロールキーを押しながらホイールで拡大/縮小を行うように

2010/5/29 rev.4108

  • Visual Studio 2010 対応
    • コンパイルが通らなかったため,細かい修正が全体に渡って入っています.
  • Visual Studio のプロジェクトファイル変換スクリプトが更新された際,Makefile を再生成するように変更
  • GCC 用Makefile 設定で,ZLIB のリンク時のパスが間違っていたのを修正
  • Inorder モードで分岐予測ヒット率とキャッシュ・ヒット率を取れるよう修正
  • Cヘッダ<>XML変換スクリプトで,処理ファイル名をコマンドラインから渡せるように

2010/4/15 rev.4000

今回の更新点は,主にシミュレーション実行速度の向上とコードの整理です.環境にもよりますが,平均で50%程度実行速度が向上しています.

  • イベント処理関連
    • EventList の実装で,自前でサイズと位置を管理するように
    • EventWheel をフリーリストベースの実装に変更
    • イベントで,トリガ状態を保持するように
    • TimeWheelBase からイベントのリストを分離
    • イベントが無いときはTick を進めないように
    • TimeWheel 内でイベントの数をカウントし,何もなければ処理をスキップするように
    • SharedEventList をEventList に名前変更
    • イベントをshared_ptr ではなくintrusive_ptr で管理するように
    • PooledSharefPtrObject をEventBase で継承するように
  • Dispatcher
    • コードを整理
  • Scheduler
    • コードを整理,最適化
    • Scheduler 内の仮発行フラグを構造体に移動
    • Scheduler 内の仮発行フラグをdeque からvector に
  • Retirer
    • 一部メソッドをインライン化
    • リタイアするスレッドを計算する際,剰余を使用しないように
    • Retire 時にはイベントをキャンセルするのではなく,単純にクリアするように
  • フック
    • HookEntry の構造を変更
  • データ構造
    • pool_list のメソッドプロトタイプがおかしかったのを修正
    • pool_list のサイズを自前で管理するように
    • pool_allocator に,確保したメモリ量を調べて表示できる機能を追加
    • vector<bool> になっていた部分を構造体に
    • アロケータ内のメモリ使用量のチェックを詳細に行うように
  • Op,OpList,OpArray関連
    • OpList::clear をイテレータでまわるように
    • OpList の一部メソッドをヘッダに移動
    • OpArray 内のフリーリストをreserve しておくように
    • OpArray のフリーリストをvector で作るように
    • op を使ってOpList からerase していたのをイテレータを使うように
    • Op のイベントに関するメソッドからvirtual をはずす
    • Op 内のレジスタ関連のコードを整理
    • OpIterator のコンストラクタをインラインに
    • OpClass 関連のコードを最適化
  • Kanata
    • Kanata のログ読み込み速度を大幅に高速化
  • その他
    • 一部ASSERT の条件式が間違っていたのを修正

2010/1/26 rev.3842

  • Kanata
    • 右クリックやダブルクリックから拡大縮小できるように
    • Kanata で任意の依存関係を表示できるように
    • 拡大率を変えた後にマウスホイールをまわしても拡大率が変わらないように
    • 表示色を調整
    • 表示が崩れるバグの修正
    • ダンプの先頭をスキップした場合に,命令数が正しく数えられていなかったのを修正
    • ディペンデンシをダンプする際に,ProducerとConsumerのいずれかが範囲外ならはじくように
    • Kanata 用ログのスキップ数指定をリタイア命令数で指定するように
    • ログの終端でステージが完了していなかった場合,表示されていなかったのを修正
    • 依存関係の表示が途中で途切れることがあったのを修正
  • エミュレータ
    • Alpha 21164A 以降のBWX を実装
    • 標準入力を開く際のテキスト/バイナリモードをパラメータから指定できるように
  • フック
    • フックに登録可能なメソッドのプロトタイプをいろいろ追加
    • エミュレータの持つメモリイメージへの読み書きへのフックを追加
    • フック呼び出しを最適化
    • InorderList にop のフラッシュ時のフックを追加
    • Op の再スケジュールにフックポイントを追加
    • Dispatcher にDispatch 時のHook を追加
  • パラメータ
    • リソースとパラメータのマップ名を変更
    • リソースのチェインがおかしかったのを修正
    • パラメータ/リソースのマップをチェインできるように
    • ユーザー定義リソースマップを追加
    • ヒット率集計用のユーティリティParamPredResult を追加
  • シミュレータ
    • InorderList のprivate フィールドをprotected に変更
    • InorderList 内の OpList を隠蔽するように
    • Retire 時のOp の削除をInorderList 内で行うように
    • MemImageAccessParam にOpIterator を追加
    • MemIF のメソッドの引数をconst MemAccess からconst MemAccess& に変更
    • Dispatch 中にもOp::m_scheduler を使用するように
    • op がSheduler を持っているか否かでディスパッチ済みかどうかを判定していた部分を,Op::IsDispatched で判定するように
    • CoreIFとThreadIF にID を取るインターフェースを追加
    • Dumper をシミュレータ内から手動で有効/無効にできるように

2009/12/22 rev.3563

  • グローバルの命令IDをシステム全体で統一したものに変更
  • Retirer 内でリタイア可能なスレッドが居なかった場合に落ちていたのを修正
  • メモリ投機においてre-fetch 実行行った場合,ロード命令のチェックポイントをとるかどうかの判定が間違っていたのを修正
  • MemOrderManager のインターフェースをMemOrderManagerIF に分離
  • チェックポイント関連の定数,メソッド名を整理
  • チェックポイント判定のメソッドをCheckpointMaster からCore に移動
  • アクセスバイオレーション時のフラッシュを,選択的フラッシュから自分の後ろ全てをフラッシュするように変更
  • 発行(+レジスタリード)のレイテンシを4に変更
  • HookUtil にフックのエントリを簡単に書くための機構を追加
  • フェッチするスレッドを選択するメソッドへのフックを追加
  • フェッチできるかどうかの判定のフックを追加
  • Retirer にフック箇所を追加
  • チェックポイント判定のフックを追加
  • パラメータで指定された物理レジスタ数が少なすぎた場合,正しくエラーが出力されていなかったのを修正
  • TraceDumper に出力をフラッシュするオプションを追加
  • RMT に論理レジスタの個数を取得するメソッドを追加
  • ResourceArray に要素を取得するAt メソッドを追加
  • gcc 用のMakefile でクリーン時に実行バイナリが削除されていなかったのを修正
  • gcc 用プロジェクトで出力実行バイナリファイル名を指定できるように
  • kanata の改良
    • ファイルが更新されていた場合,自動的に再読み込みを行うように
    • TID をグローバルなものを使用するように変更
    • TID のログ出力をフェッチ時に行うように
    • 分岐予測ミスでフラッシュされた部分を暗く表示するように
    • ラベル部分のマウスオーバー時に,物理レジスタ番号と値,命令のニーモニックなどを表示するように
    • スレッド毎にバックグラウンドに色をつけるように
    • ダンプをコア毎/スレッド毎に出すよう制御できるように
    • ログにヘッダーとファイルバージョンを入れるように変更
    • ログファイル内のID を,グローバルシリアルIDではなくて,ファイル内シリアルIDを使用するように変更
  • c header <> XML 変換スクリプトを改良
    • ファイルの日付が異なった場合,処理を中断するのではなく,確認を取るように変更
    • 行末がたまにずれていたのを修正
    • 入力ファイルの修正時刻が出力より新しい場合,確認を行うように

2009/11/2 rev.3333

  • gcc の最適化オプションをO3からO2に変更
    • 一部環境でboost のコンパイル時にエラーがでていた模様
  • gccで,初回Make時に失敗するバグを修正
  • 内部メッセージ(バージョンとか)を表示しないオプションを追加
  • 内部メッセージの表示先(ファイル)を指定するオプションを追加
  • setassoc_table にreplacer とhasher へのアクセッサを追加
  • RMT 内のレジスタの確保/解放部分にHook を追加

2009/10/20 rev.3292

  • ユーザー定義外部命令デコーダが正しく動作していなかったのを修正
  • Pipeline, PipelineNode のメソッド名を変更
  • Thread のTID を扱いが間違っていたのを修正
  • 各Thread オブジェクトにTID が振られていなかったのを修正
  • LoadParam をINIT_PRE_CONNECTION 以前で呼び出した場合にエラーで落とすように
  • エラー時に再帰的なエラーの表示を行わないように変更
    •  最初に投げられたエラーのみを表示するように
  • boost を1.40.0 に更新
  • STL のdeque とstack をプリコンパイルドヘッダに追加
  • HitMissPred をHitMissPredIF に変更
  • 依存予測器まわりのコードを整理
  • resource のスペルミスを修正
  • MakeCfg.xml 編集時に,一度clean をかけるように変更
  • MSVC でのビルド時に余計なメッセージが表示されていたのを修正
  • 一部バージョンのgcc でコンパイルが通らなくなっていたのを修正
  • 不要なinclude を削除
  • 未使用の変数が残っていたのを削除
  • RMT 内の変数初期化順序がおかしかったのを修正
  • RMT のインターフェースからPID を削除
  • SystemManager 内でシミュレーションやエミュレーションを行っている部分をオーバーライド可能なように分離
  • SystemManager の各メソッドをvirtual に
  • Main.cpp にテストコードが混じっていたのを削除

2009/10/2 rev.3195

  • ユーザー定義外部命令デコーダが,エミュレーション時にうまく機能していなかったのを修正

2009/10/1 rev.3189

  • システム・コールのデバッグ・コードを改良
  • システム・コール fstat の実装がおかしかったのを修正
  • エミュレータのスキップ実行を高速化
  • スキップ実行された命令数を表示するように変更
  • ダンプファイル名を決定する際,Envrionment/@HostWorkPath を考慮するように変更
  • 時刻関係のシステム・コールのエミュレーションにおいて,実行命令数から時刻を計算するモードを実装
  • 時刻関係のシステム・コールのエミュレーションにおいて,ホストの時計を使うかどうかを選択できるように
  • ユーザー定義外部命令デコーダの実装
  • Inorder モードの場合でも,命令のスキップを行えるように変更
  • ヒットミス予測のバグを修正
    • 変更前: 先頭から見ていき,数字の空きがあった場合に,そこを新しいセッション番号として使用
    • 変更後: 最も数字の大きいセッションの次の番号を使用
  • 構造定義XML 内のCopy 属性のCount が間違っていたのを修正
  • Cヘッダ<>XML変換スクリプトで,変な位置にスペースが入っていたのを修正

2009/08/14 rev.3102

  • ヒットミス予測器のデフォルトを,静的予測(ヒット)に変更
    • カウンタベースの予測器にバグがあるための暫定措置
  • エクスポート時,ライセンス文の後に改行を入れるように変更
  • AutoRunTools の改良
    • summary.pl で,要素数の異なるCSV 間でデータを集計することが可能な様に変更
    • 出力の表示をソートするように変更

2009/07/29 rev.3092

  • boost のアーカイブを自動的に展開するように変更

2009/07/18 rev.3083

  • エクスポート時にLF が混じってしまっていたのを修正
  • アーカイブにboost のzip が入ってしまうようになっていたのを修正
  • 各コア内のスレッドが全て終了した際にエラーで落ちていたのを修正
  • SimulationSystem 内で,実行が終了したコアの処理をスキップするように変更
  • SysDeps/STL/unordered_map の読み込み位置を変更
    • boost のコンパイルスイッチを有効にしてから読み込むため
  • パラメータのサンプル内に余計なダブルクォート が残っていたのを修正
  • サンプルのXML がおかしかったのを修正
  • シミュレーションモードのデフォルト値が間違っていたのを修正
  • AutoRunTools のサンプルを,最新版に即したものに変更

2009/07/14 rev.3073

  • boost を最新版に
    • boost のアーカイブの展開をやり直さければいけないので,注意.
  • gcc 4.4.0/4.3.3 で出るようになった細かい警告への対処
  • unordered_map の実装を変更
    • boost 内のunordered_map を使用するように変更
Clone this wiki locally