FPGA開発日記

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

2023-09-01から1ヶ月間の記事一覧

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 アーキテクチャの設計ポイントについてまとめていく。 アーキテクチ…

自作CPUコアのアトミックアクセス系と面倒なLSU周りの解析 (2. MSHRのデータ掃き出しとスヌープのタイミングの調整)

自作CPUコアでランダムテストを回していて、いろいろ面倒な解析をしなければならなかった部分のメモ。 L2キャッシュがコアに対してスヌープリクエストを出した場合、これを確実に受け取る方法について。 一番安心なのは、スヌープリクエストがコアに到着する…

自作CPUコアのアトミックアクセス系と面倒なLSU周りの解析

自作CPUコアでランダムテストを回していて、いろいろ面倒な解析をしなければならなかった部分のメモ。 同じタイミングで2つの命令が何度もリプレイする場合の対処 今の実装では、LSUのパイプラインを2つもっていて、それぞれにリプレイキューを持たせている…

A Scalable Front-End Architecture for Fast Instruction Delivery (1. 全体の概要)

A Scalable Front-End Architecture for Fast Instruction Deliveryという論文を読んでみている。 幾つかのCPUの実装で、分岐予測のペナルティを削減するための手法としてこの論文が引用されていたので、これをちょっと読んでみる。 https://web.eecs.umich.…

自作CPUコアとBOOMv3のPPA(Performance, Power, Area)を比較する (8. フォワーディングパスの軽量化)

今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 各種フォワーディングパスの負荷が大きすぎる。 各命令は、フォワーディングパスの状態通知に応じてデータを取得するのだが、物理レジスタからデータを取得…

自作CPUコアとBOOMv3のPPA(Performance, Power, Area)を比較する (7. ALU側の命令ペイロードRAMの削減)

今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 ALUの発行に必要な命令情報は、命令の機械語、現在のレジスタIDなどの情報を記憶しておく必要がある。 もう一つ、特殊な命令としてAUIPCは、命令のプログラ…

自作CPUコアとBOOMv3のPPA(Performance, Power, Area)を比較する (6. FPNewをRegister Retimingして周波数を向上させる)

今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 FPUの動作周波数がMETしない。FPNewの既存のIPを使っているので、そんなに変なことにはならないはずだ。原因を調査する。 FPNewは内部のレジスタ数を調整で…

自作CPUコアとBOOMv3のPPA(Performance, Power, Area)を比較する (5. BOOMv3と同じコンフィグレーションを作る)

今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 ちょっと考え方を変えて、BOOMv3と同じキューやパイプライン数で、どの程度面積に違いが生じるのかを見ていくことにする。 BOOMv3のコンフィグレーションか…

A64FXのロード・ストア命令の処理について読み解く

いろいろあってA64FXのロード・ストア命令、Gather/Scatter命令がどのように動作するのかを調査している。 github.com ちょっと予想で書いていることが多い。 ロード命令とストア命令で使用されるキュー(ポート) A64FXでは、キューのことをポートと呼んでい…

自作CPUコアとBOOMv3のPPA(Performance, Power, Area)を比較する (4. 面積の解析)

今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 LSUのパイプラインにおいて、出力側のデータのブロードキャストを抑えるためにブロードキャストバスを改造したが、再論理合成しても改善されなかった。 +--…

WSLにおけるLinuxのディストリビューションをCドライブ以外に移す方法メモ

WSLのUbuntuが、Cドライブの少ない容量を圧迫し始めてきたので、いろいろ検索したら出てきた。CドライブにインストールされたWSLのディストリビューションをDドライブに移す方法のメモ。 www.meganii.com zenn.dev まずは、以下のコマンドでOK。 wsl --shutd…

自作CPUコアとBOOMv3のPPA(Performance, Power, Area)を比較する (4. 面積の解析)

今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 非常に目立つのはLSUの内部のパイプラインだ。パイプラインが大きいというのがちょっと意味が分からないが、何が起きているのか見てみよう。 +------------…

自作CPUコアにRISC-Vベクトル命令を載せるための検討

RISC-Vのベクトル命令を実装する場合、まず考えなければならないのはVSETVL命令をどのように乗せるのかという点だ。VSETVL系統の命令はループのたびに高頻度で実行されるので、これを高速に動かす必要がある。 このため、RVV仕様におけるVL/VTYPEレジスタを…

自作CPUコアとBOOMv3のPPA(Performance, Power, Area)を比較する (3. BOOM側のトレースファイルの出力)

BOOMv3側の性能をKonataでチェックするために、BOOMのログからKanataのフォーマットを生成してみた。 まず、BOOMのログ生成部に以下のような変更を加えて、各命令におけるコミットのタイミングを出力する。 主にやっていることは、ログの生成と、ログの先頭…