https://ieeexplore.ieee.org/document/9923831 概要を大きくまとめる。 用語確認: リージョン:アドレス空間上の領域。この論文ではページ(4KB)と同じサイズに設定。 ジェネレーション:一定時間に、あるリージョンに対してアクセスされたラインの集合 メモ…
自作RISC-Vコアの実装がかなり安定してきたので、AAPGでさらなるテストを流している。 gitlab.com もともとshakti向けに提供されている例を使って検証を拡充してみることにした。 gitlab.com Configファイルを読んで、それに基づいてAAPGを生成して実行する…
自作CPUにおいて、ある程度ベクトル移動命令が動作するようになってきた。 ベクトル命令のオペランドは、ベクトル・レジスタ、整数レジスタ、浮動小数点レジスタ、即値が選択できる。 これをどのように制御するかについて考えた。 scariv_vec_alu_datapath u…
自作CPUにおいて、ある程度ベクトル移動命令が動作するようになってきた。 ベクトルレジスタにデータを配置できるようになってきたので、次は算術演算命令を実装してみよう。 { "name":"vadd.vv v[11:7],v[24:20],v[19:15]vm[25:25]", "length":"32", "xlen"…
自作CPUにおいて、ある程度ベクトル移動命令が動作するようになってきた。 アウト・オブ・オーダ実行を前提とするので、ある程度高速にベクトル・ループが回ることを確認したい。 以下のようなベクトル・ループを作成した。 main: li a5,0 li a1,100 li a2,9…
自作CPUにベクトル実行エンジンを追加する試行をしている。 vsetvli命令で決定したvl値を使ってベクトル演算を行う場合、VLがVLMAXよりも小さい場合、過去の値をキープする必要がある。 アウトオブオーダ実行の場合古い値をもう一度とってきて書き込みをする…
自作CPUにベクトル実行エンジンを追加する試行をしている。 vl/vtypeレジスタはリネームをしないとなかなか性能的に厳しい。これを実現するための方法についていろいろ考えている。 ベクトル拡張命令で使用されるvlレジスタとvtypeレジスタは、プロセッサ内…
ちょっと諸事情で、Spatial Memory Streamingの論文を読んでいる。 https://ieeexplore.ieee.org/document/1635957 あまり時間をかけて読みたくなかったので、概要を理解するためにChatGPTにお願いした。以下はほとんどChatGPTで生成されたもの: 空間的メモ…
自作アウト・オブ・オーダRISC-Vコアについて。 幾つか改造して、整数側の物理レジスタのサイズと、浮動小数点側の物理レジスタのサイズを変えることができるように変更した。 localparam XPR_FLIST_SIZE = XPR_PRF_SIZE_PER_GRP; localparam FPR_FLIST_SIZE…
自作CPUにベクトル実行エンジンを追加する試行をしている。 ベクトルエンジンの基本的な価値を実装している。各データ型に応じて演算を切り替える、基本的な形だ。 generate for (genvar d_idx = 0; d_idx < riscv_vec_conf_pkg::DLEN_W / 64; d_idx++) begi…
最近はプリフェッチャの論文を読み漁っている。 https://ieeexplore.ieee.org/document/4147648 FDP (Feedback Directed Prefetching) のベースとなるアイデア プリフェッチ精度の情報収集:2つのカウンタを用意する preftotal : メモリに送られたプリフェッ…
最近はプリフェッチャの論文を読み漁っている。 https://ieeexplore.ieee.org/document/4147648 高性能プロセッサは、メインメモリのレイテンシの影響を軽減するためにハードウェアデータのプリフェッチを使用する。 プリフェッチは多くのプログラムで性能を…
ちょっと調べなければならなくなったので、メモ: https://ieeexplore.ieee.org/document/7856594 Efficiently Prefetching Complex Address Patterns VDLPのポイントは、上記のようにデルタ・ヒストリ・バッファ(Delta History Buffer: DHB) を元に次のプリ…
ちょっと調べなければならなくなったので、メモ: https://ieeexplore.ieee.org/document/7856594 Efficiently Prefetching Complex Address Patterns このプリフェッチャの概要として、キャッシュラインの差分の履歴を構築して、それらの履歴を使用して予測…
自作CPUにベクトル実行エンジンを追加する試行をしている。 実装を検証するために、Spikeの検証環境を構築している。 まず、ベクトル書き込み情報をDPI経由で渡すために、ポインタ経由でのデータ渡しを実装している。 これについては、過去のブログを参照す…
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というものが公開されている。 github.com ベクトル実装のポイントとして、複数のデータサイズに対して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」という論文を読んでいる。 これは論文を読んでいるときのメモ: [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」という論文を読んでいる。 これは論文を読んでいるときのメモ: [2207.07970] Spatz: A Compact Vector Processing Unit for High-Performance a…
「A Pluggable Vector Unit for RISC-V Vector Extension」という論文を読んでみたのでそのメモ。 本当はRISC-Vベクトル実装の一例として内容を知っておきたかったのだが、あんまり詳細に説明がないうえに、いろいろと問題になるところを説明していないぞ? …
「A Pluggable Vector Unit for RISC-V Vector Extension」という論文を読んでみたのでそのメモ。 本当はRISC-Vベクトル実装の一例として内容を知っておきたかったのだが、あんまり詳細に説明がないうえに、いろいろと問題になるところを説明していないぞ? …
「半導体戦争」は結構昔に買っていたのだけれども、あまりにも分厚すぎてなかなか読み進められていなかったのだった。 毎日少しづつ読み進めていって、ようやく読み切ることができた。 もう読み切ったというか最後は流し読みのような感じだったけど、とりあ…
「A Pluggable Vector Unit for RISC-V Vector Extension」という論文を読んでみたのでそのメモ。 本当はRISC-Vベクトル実装の一例として内容を知っておきたかったのだが、あんまり詳細に説明がないうえに、いろいろと問題になるところを説明していないぞ? …
わけあって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,…
わけあってHigh Performance Cache Replacement Using Re-Reference Interval Prediction (RRIP) という論文を読んでいる。 キャッシュの割り当て方式(というか、どのキャッシュブロックをEvictionするか)には、LRUという方式が一般的に知られている。 LRU(L…
リグレッションテストを流した後、バグを修正したあとリグレッションテストで失敗したもののみを再テストしたい。 現在の自作CPUのリグレッションテストの環境は、jsonファイルでテストファイルリストを受け取って並列に流していく構造になっている。 この時…
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コアのバグを集中的に直した(現実逃避)ので、バグの概要をメモ。 ほとんどが外部からのスヌープ処理に関する部分。スヌープのタイミングが微妙にずれるとコアからデータを正しく引き抜けずに難しい。 同じタイミングで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 アーキテクチャの設計ポイントについてまとめていく。 アーキテクチ…