2024-06-01から1ヶ月間の記事一覧
ちょっといろいろとCPUの投機実行について調べる必要があって,Runahead実行についていい資料があったのでまとめてみることにした. 資料自体は以下:Runahead Executionを最初に提案した Onur Mutlu 先生直々の講義資料なので,これを読めばまあ間違いなか…
SiFive の Essential シリーズの第4世代が発表 そもそもEssential シリーズに世代があることを知らなかったのだが,第4世代のEssential シリーズがリリースされた. Essential シリーズは SiFive の中では性能ではなくコストパフォーマンスを重視した製品群(…
ちょっといろいろとCPUの投機実行について調べる必要があって,Runahead実行についていい資料があったのでまとめてみることにした. 資料自体は以下:Runahead Executionを最初に提案した Onur Mutlu 先生直々の講義資料なので,これを読めばまあ間違いなか…
ちょっといろいろとCPUの投機実行について調べる必要があって,Runahead実行についていい資料があったのでまとめてみることにした. 資料自体は以下:Runahead Executionを最初に提案した Onur Mutlu 先生直々の講義資料なので,これを読めばまあ間違いなか…
RVCの実装からフロントエンド全体の実装まで考え直して,一応の方針を立てることにした. 全体的なモジュールとしては,まず命令キャッシュからの命令ブロックを受け取り,これをRVC解析用のモジュールに通す. デコード済みの命令を格納する命令バッファは…
RVCの判定条件に付いて,もうちょっと考え直した. ある16ビット命令グループが,命令の下位16ビットグループであるというのは,以下の条件のどちらかであるはずだ. これを, inst_16bit_valid[7:0] として,inst_16bit_valid[i] が命令の下位16ビットグル…
自作CPUのVIPT化について,テストを強化してAAPGで実行してみようと思う. とりあえずバグの解析と問題の特定ができた.これはVIPTに関係なく発生する問題のように思えたけど,それでもとりあえずその部分を修正すると正しくPASSするようになった. 修正後の…
自作CPUのVIPT化について,テストを強化してAAPGで実行してみようと思う. AAPGの実行方法はかなり昔に確立した.以下のようなコマンドで,AAPGのランダムテストの生成からパタンの実行まで行ってくれる. for config in `ls -1 ../tests/aapg/configs/core_…
RVCの判定条件に付いて,もう少し考えを推し進めた. まず,insn_rvcの生成方法だが,これを正確に生成することがまず難しい. 例えばデコードブロックのサイズが128-bitの場合,8つの16-bitブロックに分割してRVC判定を行うことになる. しかし,ここでRVC…
自作CPUのフロントエンドデコーダ部分が非常に重たいのだが,この改良を考えている. 重たい部分というのは,RVC命令(16-bit命令)を拡張して32-bit命令に変換する部分だ. RVC命令は32-bit命令(RVI命令)の中に混在して現れ,しかもRVCをサポートしている環境…
GCCのiquoteオプションを初めて知った. gcc.gnu.org 要するに,-Iオプションとの違いは, -I オプションは #include <file> と #include "file" の両方のファイルの検索に使われる -iquote オプションは #include "file" の検索にのみ使われる ということらしい.</file>…
自作CPUのSpikeシミュレータをかなり久しぶりにアップデートすると、いろんな関数が変わっていてかなり戸惑ってしまった。 Spikeの挙動にも若干の変換がみられるか?Misalignedのアクセスにおいても,例外が発生するとともに命令のトレースログにも残ってい…
フロントエンドの,デコーダの部分が非常に重たい. Slack (VIOLATED) : -17.096ns (required time - arrival time) Source: u_scariv_tile/u_frontend/u_scariv_inst_buffer/u_inst_queue/r_outptr_reg[1]/C (rising edge-triggered cell FDCE clocked by i…
ベクトルアーキテクチャに関して面白そうな論文があったので読んでみることにした: https://ieeexplore.ieee.org/document/9651636 Register Flush-free Runahead Execution for Modern Vector Processors 現代のベクトルプロセッサにおいて,ベクトル・ロ…
前回の続き: msyksphinz.hatenablog.com msyksphinz.hatenablog.com 4. 手法と結果 CVP-1トレースをChampSimフォーマットに変換した後でChampSimのメインブランチで変更の影響を評価した. フロントエンドの分岐予測では,16KエントリのBTBと64KBのITTAGEと…
前回の続き: msyksphinz.hatenablog.com msyksphinz.hatenablog.com 3.2. 分岐命令 ChampSimは分岐ターゲットバッファ(BTB)を含む比較的詳細なプロセッサ・フロントエンドをモデル化している. ChampSimは異なるタイプの分岐を区別し,分岐命令が読み書き…
自作CPUのキャッシュについて,VIPTを導入して実装を開始した. もうちょっとクリティカルパスを特定するために,LiteXとは独立した環境でVivadoを実行し,Retimingを適用してみる. その結果をもって,現在の真のクリティカルパスを特定しようという訳だ. …
Vivado 2024.1 でMicroBlaze Vが使えるようになったようなので,詳細を見てみることにした.使ってみるのはのちのち. https://japan.xilinx.com/products/design-tools/microblaze-v.html#processor-details japan.xilinx.com サポートする命令セットアーキ…
前回の続き: msyksphinz.hatenablog.com 3.1.1. mem-regsの改善 CVP-1 のトレースは、0 から 3 までの書き込みレジスタを持つ命令で構成される。 プリフェッチ・ロードとストアは、CVP-1トレースには書き込みレジスタがない(ベース・アップデートを行うス…
前回の続き: msyksphinz.hatenablog.com トレースの解析と変換の決定 ChampSimのトレースフォーマット 各命令が64バイトを占有する固定フォーマット 命令ポインタ(8B) / is_branch(1B) / branch_taken (1B) / 書き込みレジスタ (2×1B) / ソースレジスタ (4×…
特に意味はないのだが,論文をあさっていて以下の論文が気になったのでメモを取りながら読んでみることにした. https://ieeexplore.ieee.org/document/10289581 マイクロアーキテクチャの研究だと,主にパイプラインをモデル化したシミュレータを使って性能…