2023-11-01から1ヶ月間の記事一覧
簡単なベクトル命令のベンチマークを作って、動かしてみようと思う。 作ったのはAXPYで、単純に2つのベクトル要素をロードして足し算して、ベクトルストアするだけだ。 一応ベンチマーク自体は正しく動くようになったのだが、思ったほど性能が出ていないので…
X(旧Twitter)で調査して乗っていた、CXXRTLというツールについて調査した。 これはYosysに付属しているバックエンドツールで、RTLからC++を生成するツールらしい。 つまるところ、Verilatorと同じような機能を持っているが、Verilatorと違って入力ファイルは…
簡単なベクトル命令のベンチマークを作って、動かしてみようと思う。 作ったのはAXPYで、単純に2つのベクトル要素をロードして足し算して、ベクトルストアするだけだ。 // vvadd function void vvadd( int n, int a[], int b[], int c[] ) { int i; for ( i …
ベクトルストア命令の投機的実行について考える。 通常、投機的実行を行うと、ストア命令はアドレスとデータを保持してその命令がコミット状態(例外などで破棄されない)になるまで待ち合わせ、コミット状態になった時点でキャッシュに書き戻す。 しかしベク…
ちょっと古い論文だが、"Decoupled Vector Architectures"という論文を読んでいる。 https://ieeexplore.ieee.org/document/501193 msyksphinz.hatenablog.com 次に性能について。Decoupled Vector Architectureと、リファレンス・アーキテクチャの性能を比…
vsetvli命令を投機的に実行する場合を考える。 デフォルト状態: - head_ptr : 現在のvlvtypeレジスタが、投機的にどこまでエントリを確保しているかを意味する。デフォルト値は0。 - tail_ptr : 現在のvlvtypeレジスタの投機実行が、どこまでコミットされて…
なんとなくSynopsysが発表したRISC-Vコアのラインナップを眺めていたのだが、結構重装備なコアが用意されていてびっくりした、という話。 www.synopsys.com ARC-V RMX Series:組み込み向け32ビット・ローパワー・プロセッサ 3~5ステージパイプライン 低消費…
ベクトル命令における、LMUL>1の対応というのは結構難易度の高い問題だ。 今回はその解決方法として、LMULの値がVSETVL命令で変更されると、例外を出して物理レジスタの構成を整列し直す方式を考えたい。 ここでは、Spikeの実装のみを示すが、同様にハードウ…
ベクトル命令における、LMUL>1の対応というのは結構難易度の高い問題だ。 今回はその解決方法として、LMULの値がVSETVL命令で変更されると、例外を出して物理レジスタの構成を整列し直す方式を考えたい。 ここでは、Spikeの実装のみを示すが、同様にハードウ…
IMP: Indirect Memory Prefetcherという論文があり、これはGather/Scatterに対してどのようにプリフェッチを出すかというものを提案した論文になっている。ちょっと読んでまとめてみようと思う。 https://ieeexplore.ieee.org/document/7856597 前回はプリフ…
ちょっと古い論文だが、"Decoupled Vector Architectures"という論文を読んでいる。 https://ieeexplore.ieee.org/document/501193 ベクトル命令というのは、メモリの壁を乗り越えるための手法として考案された命令セットである。メモリチップはCPUに対して1…
ベクトル命令における、マスク命令をどのように実行するのかについて考えたい。 ベクトル命令にはマスク命令という、各要素の比較を実行してその結果をマスクとしてベクトルレジスタに格納する命令がある。 ベクトルレジスタには、マスクフォーマットという…
IMP: Indirect Memory Prefetcherという論文があり、これはGather/Scatterに対してどのようにプリフェッチを出すかというものを提案した論文になっている。ちょっと読んでまとめてみようと思う。 https://ieeexplore.ieee.org/document/7856597 前回の続き、…
IMP: Indirect Memory Prefetcherという論文があり、これはGather/Scatterに対してどのようにプリフェッチを出すかというものを提案した論文になっている。ちょっと読んでまとめてみようと思う。 https://ieeexplore.ieee.org/document/7856597 問題のモチベ…
ちょっと気になっていたことではあるのだが、アウトオブオーダ実行ではメモリアクセスのリクエストもアウトオブオーダになり、ストライド検出器によって正しいストライド値を検出できないことがある。 LSUのパイプラインが3本あるような場合、メモリアクセス…
ちょっと古い論文だが、"Decoupled Vector Architectures"という論文を読んでいる。 https://ieeexplore.ieee.org/document/501193 この論文は、ベクトルプロセッサにおけるデカップリング技術の使用が、ベクトルプログラムの性能を大幅に向上させることを示…
いよいよ自作CPUにベクトル・メモリ・アクセス命令を実装するときが来た。まずは簡単なUnit Strideロード命令を実装しようと思う。 何も考えずに、Cacheableな領域にストレートにアクセスする形式から考えていきたい。 ベクトル・ストア命令の実装を検討して…
T-Headが提案しているRISC-VのMatrix Extensionについて、マニュアルを読みながら理解していこうと思う。 とりあえずマニュアルで、どのようなレジスタが存在しているのかを理解していく。プログラミングモデルとサンプルコードも読み進めていきたい。 githu…
T-Headが提案しているRISC-VのMatrix Extensionについて、マニュアルを読みながら理解していこうと思う。 とりあえずマニュアルで、どのようなレジスタが存在しているのかを理解していく。プログラミングモデルとサンプルコードも読み進めていきたい。 githu…
いよいよ自作CPUにベクトル・メモリ・アクセス命令を実装するときが来た。まずは簡単なUnit Strideロード命令を実装しようと思う。 何も考えずに、Cacheableな領域にストレートにアクセスする形式から考えていきたい。 とりあえずデバッグして、簡単なテスト…
いよいよ自作CPUにベクトル・メモリ・アクセス命令を実装するときが来た。まずは簡単なUnit Strideロード命令を実装しようと思う。 何も考えずに、Cacheableな領域にストレートにアクセスする形式から考えていきたい。 話を簡単にするために、いつものアウト…
T-Headが提案しているRISC-VのMatrix Extensionについて、マニュアルを読みながら理解していこうと思う。 とりあえずマニュアルで、どのようなレジスタが存在しているのかを理解していく。プログラミングモデルとサンプルコードも読み進めていきたい。 githu…
T-Headが提案しているRISC-VのMatrix Extensionについて、マニュアルを読みながら理解していこうと思う。 とりあえずマニュアルで、どのようなレジスタが存在しているのかを理解していく。プログラミングモデルとサンプルコードも読み進めていきたい。 githu…
アウトオブオーダ実行をベクトル命令でサポートすると、LMUL>1の時のレジスタ読み出し、書き込み操作が問題となる。論理的に考えれば、LMUL>1であったとしても、複数のベクトル・レジスタを1つのベクトル・レジスタと考えて読み書きをすれば問題ないはず。 …
T-Headが提案しているRISC-VのMatrix Extensionについて、マニュアルを読みながら理解していこうと思う。 とりあえずマニュアルで、どのようなレジスタが存在しているのかを理解していく。プログラミングモデルとサンプルコードも読み進めていきたい。 githu…
現在自作CPUではFPUの演算器としてIPのcvfpu(FPNew)を使用している。これはかなりまともに使える演算器IPだと思うので、現在サポートしようとしているベクトル命令のFPU演算命令もFPNewを使ってサポートしていきたい。 次は浮動小数点の比較命令の実装だ。比…
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の論文を読んでいるので、概要をまとめる。 https://ieeexplore.ieee.org/document/8675188 github.com 評価 評価にはChampsimとよばれるシミュレーション環境を使用している。これはData Prefetching Championshipで…
現在自作CPUではFPUの演算器としてIPのcvfpu(FPNew)を使用している。これはかなりまともに使える演算器IPだと思うので、現在サポートしようとしているベクトル命令のFPU演算命令もFPNewを使ってサポートしていきたい。 とりあえず簡単なFMA命令は動くように…
データ・プリフェッチの技法であるBingoの論文を読んでいるので、概要をまとめる。 https://ieeexplore.ieee.org/document/8675188 github.com PPHのイベントの話に戻る。図2は、様々な種類のイベントと、その時のマッチ確率を示したものである。 図は本論文…