FPGA開発日記

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

Cache Refill/Access Decoupling for Vector Machinesの論文を読む (1. 概要)

面白そうな論文があったので読んでみることにした。 Cache Refill/Access Decoupling for Vector Machines https://ieeexplore.ieee.org/document/1551005 Cache Refill/Access Decoupling for Vector Machines 諸元 37th International Symposium on Microarc…

自作CPUにベクトル命令を追加する実装検討 (27. ベクトル・ベンチマークのデバッグ)

単純なベクトル命令のベンチマークだけど、想定する性能が出ない。 これはやはりパイプライン中であまり見たくないいろんなハザードが発生するからで、この辺を何とかしないといけない。 やっぱり気になるのはベクトル・ロードの実行中にいろんなハザードが…

Effects of MSHR and Prefetch Mechanisms on an On-Chip Cache of the Vector Architecture を読む (1. 概要)

面白そうな論文があったので読んでみることにした。 Effects of MSHR and Prefetch Mechanisms on an On-Chip Cache of the Vector Architecture https://ieeexplore.ieee.org/document/4725165 1. 概要 ベクトル・スーパーコンピュータのためのMSHRおよびプ…

自作CPUにベクトル命令を追加する実装検討 (26. Vivadoによる論理合成試行)

自作CPUコアのVivadoでの論理合成を試行する。 最初にVivadoのバグによって論理合成が進まなくなってしまった。 https://support.xilinx.com/s/article/73178?language=ja これを修正する必要があった。 commit 9186fa64e6e925c64e13211873517c999d79dfb0 Au…

自作CPUにベクトル命令を追加する実装検討 (25. ベクトル・ベンチマークのデバッグ)

簡単なベクトル命令のベンチマークを作って、動かしてみようと思う。 作ったのはAXPYで、単純に2つのベクトル要素をロードして足し算して、ベクトルストアするだけだ。 一応ベンチマーク自体は正しく動くようになったのだが、思ったほど性能が出ていないので…

CXXRTLについて調査する

X(旧Twitter)で調査して乗っていた、CXXRTLというツールについて調査した。 これはYosysに付属しているバックエンドツールで、RTLからC++を生成するツールらしい。 つまるところ、Verilatorと同じような機能を持っているが、Verilatorと違って入力ファイルは…

自作CPUにベクトル命令を追加する実装検討 (24. ベクトル・ベンチマークのデバッグ)

簡単なベクトル命令のベンチマークを作って、動かしてみようと思う。 作ったのはAXPYで、単純に2つのベクトル要素をロードして足し算して、ベクトルストアするだけだ。 // vvadd function void vvadd( int n, int a[], int b[], int c[] ) { int i; for ( i …

自作CPUにベクトル命令を追加する実装検討 (23. ベクトルストア命令の取り扱い)

ベクトルストア命令の投機的実行について考える。 通常、投機的実行を行うと、ストア命令はアドレスとデータを保持してその命令がコミット状態(例外などで破棄されない)になるまで待ち合わせ、コミット状態になった時点でキャッシュに書き戻す。 しかしベク…

Decoupled vector architectures を読む (2. 性能評価)

ちょっと古い論文だが、"Decoupled Vector Architectures"という論文を読んでいる。 https://ieeexplore.ieee.org/document/501193 msyksphinz.hatenablog.com 次に性能について。Decoupled Vector Architectureと、リファレンス・アーキテクチャの性能を比…

自作CPUにベクトル命令を追加する実装検討 (22. vsetvl命令の投機実行の見直し)

vsetvli命令を投機的に実行する場合を考える。 デフォルト状態: - head_ptr : 現在のvlvtypeレジスタが、投機的にどこまでエントリを確保しているかを意味する。デフォルト値は0。 - tail_ptr : 現在のvlvtypeレジスタの投機実行が、どこまでコミットされて…

SynopsysのRISC-Vコアファミリ、結構ゴツい

なんとなくSynopsysが発表したRISC-Vコアのラインナップを眺めていたのだが、結構重装備なコアが用意されていてびっくりした、という話。 www.synopsys.com ARC-V RMX Series:組み込み向け32ビット・ローパワー・プロセッサ 3~5ステージパイプライン 低消費…

自作CPUにベクトル命令を追加する実装検討 (21. LMUL>1への対応実装)

ベクトル命令における、LMUL>1の対応というのは結構難易度の高い問題だ。 今回はその解決方法として、LMULの値がVSETVL命令で変更されると、例外を出して物理レジスタの構成を整列し直す方式を考えたい。 ここでは、Spikeの実装のみを示すが、同様にハードウ…

自作CPUにベクトル命令を追加する実装検討 (20. LMUL>1への対応実装)

ベクトル命令における、LMUL>1の対応というのは結構難易度の高い問題だ。 今回はその解決方法として、LMULの値がVSETVL命令で変更されると、例外を出して物理レジスタの構成を整列し直す方式を考えたい。 ここでは、Spikeの実装のみを示すが、同様にハードウ…

Gather/Scatterのような不連続なメモリアクセスについてどのようにプリフェッチを出すか (IMP) (3. プリフェッチの生成方法)

IMP: Indirect Memory Prefetcherという論文があり、これはGather/Scatterに対してどのようにプリフェッチを出すかというものを提案した論文になっている。ちょっと読んでまとめてみようと思う。 https://ieeexplore.ieee.org/document/7856597 前回はプリフ…

Decoupled vector architectures を読む (1. 概要)

ちょっと古い論文だが、"Decoupled Vector Architectures"という論文を読んでいる。 https://ieeexplore.ieee.org/document/501193 ベクトル命令というのは、メモリの壁を乗り越えるための手法として考案された命令セットである。メモリチップはCPUに対して1…

自作CPUにベクトル命令を追加する実装検討 (19. レーンを跨いで演算結果を格納するマスク命令)

ベクトル命令における、マスク命令をどのように実行するのかについて考えたい。 ベクトル命令にはマスク命令という、各要素の比較を実行してその結果をマスクとしてベクトルレジスタに格納する命令がある。 ベクトルレジスタには、マスクフォーマットという…

Gather/Scatterのような不連続なメモリアクセスについてどのようにプリフェッチを出すか (IMP) (2. ベースアドレスの検出方法)

IMP: Indirect Memory Prefetcherという論文があり、これはGather/Scatterに対してどのようにプリフェッチを出すかというものを提案した論文になっている。ちょっと読んでまとめてみようと思う。 https://ieeexplore.ieee.org/document/7856597 前回の続き、…

Gather/Scatterのような不連続なメモリアクセスについてどのようにプリフェッチを出すか (IMP)

IMP: Indirect Memory Prefetcherという論文があり、これはGather/Scatterに対してどのようにプリフェッチを出すかというものを提案した論文になっている。ちょっと読んでまとめてみようと思う。 https://ieeexplore.ieee.org/document/7856597 問題のモチベ…

メモリアクセスがアウトオブオーダにより入り乱れた際のプリフェッチ手法について

ちょっと気になっていたことではあるのだが、アウトオブオーダ実行ではメモリアクセスのリクエストもアウトオブオーダになり、ストライド検出器によって正しいストライド値を検出できないことがある。 LSUのパイプラインが3本あるような場合、メモリアクセス…

Decoupled vector architectures を読む (1. 概要)

ちょっと古い論文だが、"Decoupled Vector Architectures"という論文を読んでいる。 https://ieeexplore.ieee.org/document/501193 この論文は、ベクトルプロセッサにおけるデカップリング技術の使用が、ベクトルプログラムの性能を大幅に向上させることを示…

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

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

RISC-V Matrix Extension Specificationについて読み進める (5. 行列乗算サンプルのデバッグ)

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

RISC-V Matrix Extension Specificationについて読み進める (4. 行列乗算のサンプルを見てみる)

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

自作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を使ってサポートしていきたい。 次は浮動小数点の比較命令の実装だ。比…