2023-09-01から1ヶ月間の記事一覧
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 アーキテクチャの設計ポイントについてまとめていく。 アーキテクチ…
自作CPUコアでランダムテストを回していて、いろいろ面倒な解析をしなければならなかった部分のメモ。 L2キャッシュがコアに対してスヌープリクエストを出した場合、これを確実に受け取る方法について。 一番安心なのは、スヌープリクエストがコアに到着する…
自作CPUコアでランダムテストを回していて、いろいろ面倒な解析をしなければならなかった部分のメモ。 同じタイミングで2つの命令が何度もリプレイする場合の対処 今の実装では、LSUのパイプラインを2つもっていて、それぞれにリプレイキューを持たせている…
A Scalable Front-End Architecture for Fast Instruction Deliveryという論文を読んでみている。 幾つかのCPUの実装で、分岐予測のペナルティを削減するための手法としてこの論文が引用されていたので、これをちょっと読んでみる。 https://web.eecs.umich.…
今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 各種フォワーディングパスの負荷が大きすぎる。 各命令は、フォワーディングパスの状態通知に応じてデータを取得するのだが、物理レジスタからデータを取得…
今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 ALUの発行に必要な命令情報は、命令の機械語、現在のレジスタIDなどの情報を記憶しておく必要がある。 もう一つ、特殊な命令としてAUIPCは、命令のプログラ…
今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 FPUの動作周波数がMETしない。FPNewの既存のIPを使っているので、そんなに変なことにはならないはずだ。原因を調査する。 FPNewは内部のレジスタ数を調整で…
今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 ちょっと考え方を変えて、BOOMv3と同じキューやパイプライン数で、どの程度面積に違いが生じるのかを見ていくことにする。 BOOMv3のコンフィグレーションか…
いろいろあってA64FXのロード・ストア命令、Gather/Scatter命令がどのように動作するのかを調査している。 github.com ちょっと予想で書いていることが多い。 ロード命令とストア命令で使用されるキュー(ポート) A64FXでは、キューのことをポートと呼んでい…
今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 LSUのパイプラインにおいて、出力側のデータのブロードキャストを抑えるためにブロードキャストバスを改造したが、再論理合成しても改善されなかった。 +--…
WSLのUbuntuが、Cドライブの少ない容量を圧迫し始めてきたので、いろいろ検索したら出てきた。CドライブにインストールされたWSLのディストリビューションをDドライブに移す方法のメモ。 www.meganii.com zenn.dev まずは、以下のコマンドでOK。 wsl --shutd…
今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。 非常に目立つのはLSUの内部のパイプラインだ。パイプラインが大きいというのがちょっと意味が分からないが、何が起きているのか見てみよう。 +------------…
RISC-Vのベクトル命令を実装する場合、まず考えなければならないのはVSETVL命令をどのように乗せるのかという点だ。VSETVL系統の命令はループのたびに高頻度で実行されるので、これを高速に動かす必要がある。 このため、RVV仕様におけるVL/VTYPEレジスタを…
BOOMv3側の性能をKonataでチェックするために、BOOMのログからKanataのフォーマットを生成してみた。 まず、BOOMのログ生成部に以下のような変更を加えて、各命令におけるコミットのタイミングを出力する。 主にやっていることは、ログの生成と、ログの先頭…