FPGA開発日記

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

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

Bingo Spatial Data Prefetcherの論文を読む (1. 概要)

データ・プリフェッチの技法であるBingoの論文を読んでいるので、概要をまとめる。 https://ieeexplore.ieee.org/document/8675188 github.com Bingoは、空間データ・プリフェッチの技術で、TAGEにインスパイアされたプリフェッチ技法である。 TAGEというの…

自作CPUにベクトル命令を追加する実装検討 (13. cvfpuを使ったベクトルFPU命令の実装)

現在自作CPUではFPUの演算器としてIPのcvfpu(FPNew)を使用している。これはかなりまともに使える演算器IPだと思うので、現在サポートしようとしているベクトル命令のFPU演算命令もFPNewを使ってサポートしていきたい。 スカラFPUの場合はcvfpu内の各ユニット…

ChampSimの環境構築メモ (1. ビルド方法)

ChampSimの環境構築メモ: github.com git clone https://github.com/ChampSim/ChampSim.git cd ChampSim/ git submodule update --init --recursive vcpkg/vcpkg install ./config.sh champsim_config.json make wget https://dpc3.compas.cs.stonybrook.ed…

Data Cache Prefetching Using a Global History Bufferの論文を読む (2. 性能評価)

https://ieeexplore.ieee.org/document/1410068 次に性能評価について: 以下の表に示すように、SPEC2000のベンチマーク・スイートのサブセットを使用した。 SPECfp SPECint ammp mcf art tolf wupwise vpr swim praser lucas gap mgrid bzip2 applu galgel …

自作CPUにベクトル命令を追加する実装検討 (12. cvfpuを使ったベクトルFPU命令の実装検討)

現在自作CPUではFPUの演算器としてIPのcvfpu(FPNew)を使用している。これはかなりまともに使える演算器IPだと思うので、現在サポートしようとしているベクトル命令のFPU演算命令もFPNewを使ってサポートしていきたい。 スカラFPUの場合はcvfpu内の各ユニット…

RISC-Vのランダムテストジェネレータ AAPGを試す (11. AAPGを使ったデバッグ)

自作RISC-Vコアの実装がかなり安定してきたので、AAPGでさらなるテストを流している。 gitlab.com 前回はFRMの問題を修正して再度ランダムテストをすべて流した。600本程度テストを流して、落ちたのは以下。25本程度。 check_all_202310200609/result.json: …

Data Cache Prefetching Using a Global History Bufferの論文を読む (1.基本的な構成)

https://ieeexplore.ieee.org/document/1410068 プリフェッチにはいろんなアルゴリズムがあるが、プリフェッチが効果を発揮するためのいくつかの要素がある: 正確に次のデータを予測すること タイムリーにデータを取得できること 過度なプリフェッチを行わ…

LiteXでのFPGA合成方法および各種論理合成結果

LiteXの合成環境を使って、各種コアの動作周波数とサイズを見積もった時のメモ。tag 2023.8でRocketが合成できなくなってしまっていた。 VexRiscv python3 -m litex_boards.targets.digilent_zedboard --cpu-type=vexriscv --build 論理合成結果: VexRiscv…

自作CPUにベクトル命令を追加する実装検討 (11. マスク命令の実装検討)

自作CPUにおいて、ある程度ベクトル移動命令が動作するようになってきた。 次はマスク命令の動作について考えてみる。マスク命令は、通常の算術演算命令と動作が違うのでちょっと厄介。 実装の方針をちょっとまとめる。 ベクトル演算におけるレーンとデータ…

RISC-Vのランダムテストジェネレータ AAPGを試す (9. AAPGを使ったデバッグ)

自作RISC-Vコアの実装がかなり安定してきたので、AAPGでさらなるテストを流している。 gitlab.com もともとshakti向けに提供されている例を使って検証を拡充してみることにした。 落ちた命令を大きく区分けしてみた。半分以上が、csrwi命令によるFRMレジスタ…

RISC-Vのランダムテストジェネレータ AAPGを試す (8. AAPGを使ったデバッグ)

自作RISC-Vコアの実装がかなり安定してきたので、AAPGでさらなるテストを流している。 gitlab.com もともとshakti向けに提供されている例を使って検証を拡充してみることにした。 atomicアクセス系の命令がFAILとなるのは要因がわかった。LSUパイプライン中…

自作CPUにベクトル命令を追加する実装検討 (10. VLEN != DLENの実装検討2)

自作CPUにおいて、ある程度ベクトル移動命令が動作するようになってきた。 ある程度基本的な算術演算命令が動くようになってきたので、今度はVLEN != DLENの動作について考えてみる。 VLEN != DLENの場合は、VLEN/DLENの回数だけ命令が流れていき、順番に処…

RISC-Vのランダムテストジェネレータ AAPGを試す (7. ShaktiのデフォルトテストパタンがかなりPASSできるようになった)

自作RISC-Vコアの実装がかなり安定してきたので、AAPGでさらなるテストを流している。 gitlab.com もともとshakti向けに提供されている例を使って検証を拡充してみることにした。 Shaktiで用意されているテストパタンが結構流れ始めた。それぞれのテストパタ…

自作CPUにベクトル命令を追加する実装検討 (9. VLEN != DLENの実装検討)

自作CPUにおいて、ある程度ベクトル移動命令が動作するようになってきた。 ある程度基本的な算術演算命令が動くようになってきたので、今度はVLEN != DLENの動作について考えてみる。 VLEN != DLENの場合は、VLEN/DLENの回数だけ命令が流れていき、順番に処…

Intel Coreマイクロアーキテクチャのプリフェッチャの構成について調べる

Intelのマイクロアーキテクチャで採用されているプリフェッチャの構成について調べたくなったので、いろんな文献を探して調査した。 参考にしたのは、"Resolving a L2-prefetch-caused parallel nonscaling on Intel Core microarchitecture"という文献。 ht…

Merging Similar Patterns for Hardware Prefetching を読む (2. ハードウェアの構成)

https://ieeexplore.ieee.org/document/9923831 概要を大きくまとめる。 それでは、実際のPMP(Pattern Merge Prefetcher)の実装に移る。本プリフェッチメカニズムはトレーニングとプリフェッチのプロセスが2つ平行に動作する。 学習フェーズ: パタン・マー…

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 このプリフェッチャの概要として、キャッシュラインの差分の履歴を構築して、それらの履歴を使用して予測…