FPGA開発日記

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

Merging Similar Patterns for Hardware Prefetching を読む (1. 概要)

https://ieeexplore.ieee.org/document/9923831 概要を大きくまとめる。 用語確認: リージョン:アドレス空間上の領域。この論文ではページ(4KB)と同じサイズに設定。 ジェネレーション:一定時間に、あるリージョンに対してアクセスされたラインの集合 メモ…

RISC-Vのランダムテストジェネレータ AAPGを試す (6. Shaktiのデフォルトコンフィグレーションを使った検証の拡充)

自作RISC-Vコアの実装がかなり安定してきたので、AAPGでさらなるテストを流している。 gitlab.com もともとshakti向けに提供されている例を使って検証を拡充してみることにした。 gitlab.com Configファイルを読んで、それに基づいてAAPGを生成して実行する…

自作CPUにベクトル命令を追加する実装検討 (8. 算術演算命令のオペランド拡充)

自作CPUにおいて、ある程度ベクトル移動命令が動作するようになってきた。 ベクトル命令のオペランドは、ベクトル・レジスタ、整数レジスタ、浮動小数点レジスタ、即値が選択できる。 これをどのように制御するかについて考えた。 scariv_vec_alu_datapath u…

自作CPUにベクトル命令を追加する実装検討 (7. 基本的な算術演算命令)

自作CPUにおいて、ある程度ベクトル移動命令が動作するようになってきた。 ベクトルレジスタにデータを配置できるようになってきたので、次は算術演算命令を実装してみよう。 { "name":"vadd.vv v[11:7],v[24:20],v[19:15]vm[25:25]", "length":"32", "xlen"…

自作CPUにベクトル命令を追加する実装検討 (6. ベクトル・ループの動作確認)

自作CPUにおいて、ある程度ベクトル移動命令が動作するようになってきた。 アウト・オブ・オーダ実行を前提とするので、ある程度高速にベクトル・ループが回ることを確認したい。 以下のようなベクトル・ループを作成した。 main: li a5,0 li a1,100 li a2,9…

自作CPUにベクトル命令を追加する実装検討 (5. vlを用いたマスク生成の検討)

自作CPUにベクトル実行エンジンを追加する試行をしている。 vsetvli命令で決定したvl値を使ってベクトル演算を行う場合、VLがVLMAXよりも小さい場合、過去の値をキープする必要がある。 アウトオブオーダ実行の場合古い値をもう一度とってきて書き込みをする…

自作CPUにベクトル命令を追加する実装検討 (4. vl/vtypeのリネームに関する検討)

自作CPUにベクトル実行エンジンを追加する試行をしている。 vl/vtypeレジスタはリネームをしないとなかなか性能的に厳しい。これを実現するための方法についていろいろ考えている。 ベクトル拡張命令で使用されるvlレジスタとvtypeレジスタは、プロセッサ内…

Spatial Memory Streaming の論文を読む

ちょっと諸事情で、Spatial Memory Streamingの論文を読んでいる。 https://ieeexplore.ieee.org/document/1635957 あまり時間をかけて読みたくなかったので、概要を理解するためにChatGPTにお願いした。以下はほとんどChatGPTで生成されたもの: 空間的メモ…

自作CPUコアの物理レジスタのサイズを型に応じてConfigurableに変更する

自作アウト・オブ・オーダRISC-Vコアについて。 幾つか改造して、整数側の物理レジスタのサイズと、浮動小数点側の物理レジスタのサイズを変えることができるように変更した。 localparam XPR_FLIST_SIZE = XPR_PRF_SIZE_PER_GRP; localparam FPR_FLIST_SIZE…

自作CPUにベクトル命令を追加する実装検討 (3. 基本的なデータパスの実装)

自作CPUにベクトル実行エンジンを追加する試行をしている。 ベクトルエンジンの基本的な価値を実装している。各データ型に応じて演算を切り替える、基本的な形だ。 generate for (genvar d_idx = 0; d_idx < riscv_vec_conf_pkg::DLEN_W / 64; d_idx++) begi…

Feedback Directed Prefetching: Improving the Performance and Bandwidth-Efficiency of Hardware Prefetchers (2. FDPのアルゴリズム

最近はプリフェッチャの論文を読み漁っている。 https://ieeexplore.ieee.org/document/4147648 FDP (Feedback Directed Prefetching) のベースとなるアイデア プリフェッチ精度の情報収集:2つのカウンタを用意する preftotal : メモリに送られたプリフェッ…

Feedback Directed Prefetching: Improving the Performance and Bandwidth-Efficiency of Hardware Prefetchers (1. 概要)

最近はプリフェッチャの論文を読み漁っている。 https://ieeexplore.ieee.org/document/4147648 高性能プロセッサは、メインメモリのレイテンシの影響を軽減するためにハードウェアデータのプリフェッチを使用する。 プリフェッチは多くのプログラムで性能を…

Efficiently Prefetching Complex Address Patterns (VLDP)の論文を読む (2. 予測のための各テーブルについて)

ちょっと調べなければならなくなったので、メモ: https://ieeexplore.ieee.org/document/7856594 Efficiently Prefetching Complex Address Patterns VDLPのポイントは、上記のようにデルタ・ヒストリ・バッファ(Delta History Buffer: DHB) を元に次のプリ…

Efficiently Prefetching Complex Address Patterns (VLDP)の論文を読む (1. 概要)

ちょっと調べなければならなくなったので、メモ: https://ieeexplore.ieee.org/document/7856594 Efficiently Prefetching Complex Address Patterns このプリフェッチャの概要として、キャッシュラインの差分の履歴を構築して、それらの履歴を使用して予測…

自作CPUにベクトル命令を追加する実装検討 (2. Spikeによる検証環境の構築)

自作CPUにベクトル実行エンジンを追加する試行をしている。 実装を検証するために、Spikeの検証環境を構築している。 まず、ベクトル書き込み情報をDPI経由で渡すために、ポインタ経由でのデータ渡しを実装している。 これについては、過去のブログを参照す…

RISC-Vのオープンソースベクトル命令実装Araのデータパス実装を調べる (2. SIMD ALUモジュール)

RISC-Vのオープンソースベクトル実装のリファレンスとしてAraというものが公開されている。 github.com AraのSIMD ALUモジュールについて。 simd_aluモジュール: 名前 型 方向 説明 operand_a_i elen_t I 入力オペランド1 operand_b_i elen_t I 入力オペラン…

RISC-Vのオープンソースベクトル命令実装Araのデータパス実装を調べる (VMERGE/VMV)

RISC-Vのオープンソースベクトル実装のリファレンスとしてAraというものが公開されている。 github.com ベクトル実装のポイントとして、複数のデータサイズに対して1つのデータパスで対応しなければならないというのがあるのだが、これがどのように実装され…

自作CPUにベクトル命令を追加する実装検討 (1. データ移動命令の実装調整)

自作CPUにベクトル実行エンジンを追加する試行をしている。 とりあえず一番簡単なベクトル命令としてvmv.v.xで、汎用レジスタからデータを読み取ってベクトルレジスタに書き込む命令を動かすようにしてみる。 main: li a5,0 li a1,100 li a2,99 .L2: subw a4…

Spatz: A Compact Vector Processing Unit for High-Performance and Energy-Efficient Shared-L1 Clusters という論文を読む (2. クラスタ構成と性能)

「Spatz: A Compact Vector Processing Unit for High-Performance and Energy-Efficient Shared-L1 Clusters」という論文を読んでいる。 これは論文を読んでいるときのメモ: [2207.07970] Spatz: A Compact Vector Processing Unit for High-Performance a…

Spatz: A Compact Vector Processing Unit for High-Performance and Energy-Efficient Shared-L1 Clusters という論文を読む

「Spatz: A Compact Vector Processing Unit for High-Performance and Energy-Efficient Shared-L1 Clusters」という論文を読んでいる。 これは論文を読んでいるときのメモ: [2207.07970] Spatz: A Compact Vector Processing Unit for High-Performance a…

"A Pluggable Vector Unit for RISC-V Vector Extension" という論文を読む (3. 評価)

「A Pluggable Vector Unit for RISC-V Vector Extension」という論文を読んでみたのでそのメモ。 本当はRISC-Vベクトル実装の一例として内容を知っておきたかったのだが、あんまり詳細に説明がないうえに、いろいろと問題になるところを説明していないぞ? …

"A Pluggable Vector Unit for RISC-V Vector Extension" という論文を読む (2. マイクロアーキテクチャの構成)

「A Pluggable Vector Unit for RISC-V Vector Extension」という論文を読んでみたのでそのメモ。 本当はRISC-Vベクトル実装の一例として内容を知っておきたかったのだが、あんまり詳細に説明がないうえに、いろいろと問題になるところを説明していないぞ? …

「半導体戦争」を最後まで読んだ

「半導体戦争」は結構昔に買っていたのだけれども、あまりにも分厚すぎてなかなか読み進められていなかったのだった。 毎日少しづつ読み進めていって、ようやく読み切ることができた。 もう読み切ったというか最後は流し読みのような感じだったけど、とりあ…

"A Pluggable Vector Unit for RISC-V Vector Extension" という論文を読む

「A Pluggable Vector Unit for RISC-V Vector Extension」という論文を読んでみたのでそのメモ。 本当はRISC-Vベクトル実装の一例として内容を知っておきたかったのだが、あんまり詳細に説明がないうえに、いろいろと問題になるところを説明していないぞ? …

キャッシュの置換アルゴリズム (RRIP)に関する論文を読む (2. SRRIPのキャッシュアクセスについて)

わけあってHigh Performance Cache Replacement Using Re-Reference Interval Prediction (RRIP) という論文を読んでいる。 キャッシュアクセスの分類について。 recency-friendlyアクセス・パターン : [tex: $(a_1, a_2, …, a_{k_1}, a_k, a_{k-1}, …, a_2,…

キャッシュの置換アルゴリズム (RRIP)に関する論文を読む (1. SRRIPの基本的な考え方について)

わけあってHigh Performance Cache Replacement Using Re-Reference Interval Prediction (RRIP) という論文を読んでいる。 キャッシュの割り当て方式(というか、どのキャッシュブロックをEvictionするか)には、LRUという方式が一般的に知られている。 LRU(L…

自作CPUコアのアトミックアクセス系と面倒なLSU周りの解析 (4. リグレッションテストとリトライ用の便利スクリプトの作成)

リグレッションテストを流した後、バグを修正したあとリグレッションテストで失敗したもののみを再テストしたい。 現在の自作CPUのリグレッションテストの環境は、jsonファイルでテストファイルリストを受け取って並列に流していく構造になっている。 この時…

A Scalable Front-End Architecture for Fast Instruction Delivery (3. FTBの構成)

A Scalable Front-End Architecture for Fast Instruction Deliveryの続き。 https://web.eecs.umich.edu/~taustin/papers/ISCA99-ftb.pdf https://dl.acm.org/doi/10.1145/307338.300999 フェッチターゲットバッファ (FTB) FTBは、BBTB設計にいくつかの変更…

自作CPUコアのアトミックアクセス系と面倒なLSU周りの解析 (3. データキャッシュとL2のコヒーレンス周りで出したバグのまとめ)

ここ数日で自作CPUコアのバグを集中的に直した(現実逃避)ので、バグの概要をメモ。 ほとんどが外部からのスヌープ処理に関する部分。スヌープのタイミングが微妙にずれるとコアからデータを正しく引き抜けずに難しい。 同じタイミングで2つの命令が何度も…

A Scalable Front-End Architecture for Fast Instruction Delivery (2. 各ブロックの概要)

A Scalable Front-End Architecture for Fast Instruction Deliveryの続き。 https://web.eecs.umich.edu/~taustin/papers/ISCA99-ftb.pdf https://dl.acm.org/doi/10.1145/307338.300999 アーキテクチャの設計ポイントについてまとめていく。 アーキテクチ…