FPGA開発日記

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

自作CPUにベクトル命令を追加する実装検討 (17. ベクトルロード命令の実装)

いよいよ自作CPUにベクトル・メモリ・アクセス命令を実装するときが来た。まずは簡単なUnit Strideロード命令を実装しようと思う。 何も考えずに、Cacheableな領域にストレートにアクセスする形式から考えていきたい。 とりあえずデバッグして、簡単なテスト…

自作CPUにベクトル命令を追加する実装検討 (16. ベクトルメモリアクセスの実装)

いよいよ自作CPUにベクトル・メモリ・アクセス命令を実装するときが来た。まずは簡単なUnit Strideロード命令を実装しようと思う。 何も考えずに、Cacheableな領域にストレートにアクセスする形式から考えていきたい。 話を簡単にするために、いつものアウト…

RISC-V Matrix Extension Specificationについて読み進める (3. 命令定義)

T-Headが提案しているRISC-VのMatrix Extensionについて、マニュアルを読みながら理解していこうと思う。 とりあえずマニュアルで、どのようなレジスタが存在しているのかを理解していく。プログラミングモデルとサンプルコードも読み進めていきたい。 githu…

RISC-V Matrix Extension Specificationについて読み進める (2. ISAの区分)

T-Headが提案しているRISC-VのMatrix Extensionについて、マニュアルを読みながら理解していこうと思う。 とりあえずマニュアルで、どのようなレジスタが存在しているのかを理解していく。プログラミングモデルとサンプルコードも読み進めていきたい。 githu…

アウトオブオーダ命令発行におけるLMUL>1のサポート方法の考察

アウトオブオーダ実行をベクトル命令でサポートすると、LMUL>1の時のレジスタ読み出し、書き込み操作が問題となる。論理的に考えれば、LMUL>1であったとしても、複数のベクトル・レジスタを1つのベクトル・レジスタと考えて読み書きをすれば問題ないはず。 …

RISC-V Matrix Extension Specificationについて読み進める (1. レジスタ定義)

T-Headが提案しているRISC-VのMatrix Extensionについて、マニュアルを読みながら理解していこうと思う。 とりあえずマニュアルで、どのようなレジスタが存在しているのかを理解していく。プログラミングモデルとサンプルコードも読み進めていきたい。 githu…

自作CPUにベクトル命令を追加する実装検討 (15. 浮動小数点比較マスク命令の実装)

現在自作CPUではFPUの演算器としてIPのcvfpu(FPNew)を使用している。これはかなりまともに使える演算器IPだと思うので、現在サポートしようとしているベクトル命令のFPU演算命令もFPNewを使ってサポートしていきたい。 次は浮動小数点の比較命令の実装だ。比…

ChampSimの環境構築メモ (2. トレースファイルの構成について調査する)

ChampSimの構築メモ:トレースファイルの構成について調査する。 $ ./bin/champsim --help WARNING: physical memory size is smaller than virtual memory size. A microarchitecture simulator for research and education Usage: ./bin/champsim [OPTIONS…

Bingo Spatial Data Prefetcherの論文を読む (2. Bingoプリフェッチャの構成法)

データ・プリフェッチの技法であるBingoの論文を読んでいるので、概要をまとめる。 https://ieeexplore.ieee.org/document/8675188 github.com 評価 評価にはChampsimとよばれるシミュレーション環境を使用している。これはData Prefetching Championshipで…

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

現在自作CPUではFPUの演算器としてIPのcvfpu(FPNew)を使用している。これはかなりまともに使える演算器IPだと思うので、現在サポートしようとしているベクトル命令のFPU演算命令もFPNewを使ってサポートしていきたい。 とりあえず簡単なFMA命令は動くように…

Bingo Spatial Data Prefetcherの論文を読む (2. Bingoプリフェッチャの構成法)

データ・プリフェッチの技法であるBingoの論文を読んでいるので、概要をまとめる。 https://ieeexplore.ieee.org/document/8675188 github.com PPHのイベントの話に戻る。図2は、様々な種類のイベントと、その時のマッチ確率を示したものである。 図は本論文…

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…