2021-06-01から1ヶ月間の記事一覧
RISC-Vベクトル拡張仕様書の読み直し。ベクトルロード命令の続き。 セグメントアクセスとかが増えてきてこの辺は非常にグロい部分。そもそもEEWとSEWでメモリアクセスは挙動が違うのに、非常に複雑になってしまっている... 他の算術演算と一緒でEEWとSEWを統…
RISC-Vベクトル拡張仕様書の読み直し。次はベクトルロード命令。 github.com github.com 7.3. ベクトルロードストア幅のエンコーディング ベクトルのロードとストアは、命令に直接EEWがエンコードされています。 対応するEMULはEMUL = (EEW/SEW)*LMULとして…
RISC-Vベクトル拡張仕様書の読み直し。次はベクトルロード命令。 github.com github.com 7. ベクトルロード・ストア命令 ベクトルのロードとストアは、ベクトルレジスタとメモリの間で値を移動させます。 ベクトルロードとストアはマスクされ、非アクティブ…
RISC-Vベクトル拡張仕様書の読み直し。ベクトルレジスタの要素の定義 ベクトルレジスタはマスクしたりプリスタートで実行を省略したりと、さまざまなモードがある。 それらの要素の意味を厳密に定義するのが本章の目的。 github.com github.com 6. コンフィ…
RISC-Vベクトル拡張仕様書の読み直し。ベクトルレジスタの要素の定義 ベクトルレジスタはマスクしたりプリスタートで実行を省略したりと、さまざまなモードがある。 それらの要素の意味を厳密に定義するのが本章の目的。 github.com github.com 5.4. プリス…
SonicBOOMに限らず、多くのOoOプロセッサには分岐命令管理用のタグが付いているという認識だ。brtagと一般的に呼ばれているこのタグは、分岐命令に対してそれぞれ付与されており、また分岐命令以外の命令にも一貫して付与されている。分岐タグは「この命令は…
RISC-Vベクトル拡張仕様書の読み直し。ベクトルレジスタのオペランドフォーマット。 基本的にスカラレジスタとオーバラップすることはない。ただしベクトルレジスタの中でv0だけが特殊で、マスクレジスタとして扱われることに注意。 マスクレジスタはベクト…
RISC-Vベクトル拡張仕様書の読み直し。ベクトルレジスタのマッピング方法について。 これはかなり難しい。つまりLMUL、SEW、VLENを定義した状態で、「ベクトルレジスタ1つ」はどこまでを含むのかという問題になる。 Groupingによりベクトルレジスタを複数扱…
RISC-Vベクトル拡張仕様書の読み直し。その他のベクトルCSRレジスタについて。 github.com github.com 3.7. ベクトル固定小数点丸めモードレジスタ vxrm ベクトル固定小数点丸めモード・レジスタは、2ビットの読み書き可能な丸め込みモード・フィールドを保…
RISC-Vベクトル拡張仕様書の読み直し、次はvstartについて。 これは単純。要するにベクトル要素のどこから演算を開始させるか、という話。 github.com github.com 3.6. ベクトルスタートインデックスCSR vstart 読み書き可能なCSRである vstart は、 Prestar…
SonicBOOMのロードユースについて調査したい。キャッシュヒットした場合、ロード命令からその次の依存命令まで何サイクル掛かるのか。 CoremarkのPointer Chase部分についてサイクル数を確認している。当該部分はここになる。 11996 3 0x000000008000122a c.…
RISC-Vベクトル拡張仕様書の読み直し、次はvta / vmaについて。 これも理解するのは少し厄介。要するに無効な要素の扱いをどのようにするかということだが、 リネームするマシンとそうでないマシンで、効率よく実装するために色々と考え込まれている。 3.3.3…
ISCA 2021と併設されているCARRV 2021の論文が公開されている。25本近くの論文が公開されているのですべてを読むことは出来ないので、とりあえずカテゴリ別にAbstractだけ読んで日本語にしてみることにした。 今回は後半。 carrv.github.io シミュレーション…
ISCA 2021と併設されているCARRV 2021の論文が公開されている。25本近くの論文が公開されているのですべてを読むことは出来ないので、とりあえずカテゴリ別にAbstractだけ読んで日本語にしてみることにした。 これも量としてはかなりあるので、DeepLにお世話…
RISC-Vベクトル拡張仕様書の読み直し、次はvtypeについて。 ここがRISC-Vベクトル拡張の一番難しいところ。vlmulに応じてベクトルの長さとグルーピングが変わる。やっかいなところ。 結構昔に翻訳したバージョンだと、LMULは整数しか取れないようになってい…
SonicBOOMのロードユースについて調査したい。キャッシュヒットした場合、ロード命令からその次の依存命令まで何サイクル掛かるのか。 以下のようなテストプログラムを作成した。ロードした命令を次にadd命令で使用する。ヒットしたときとそうでないときでレ…
RISC-Vベクトル拡張が V1.0のためのRC1になったので、改めて読み直してみることにした。 数年前にベクトル拡張の仕様書0.8あたりを日本語に翻訳したのだが、同じように日本語に変えながら理解していく。 この翻訳の成果は、以下に格納している。 github.com …
Verilogでは以下のように、いくつかの書き方でメモリを作ることができる。memory1は通常のは配列の構造、memory2は連想配列となっている。SystemVerilogの仕様的に通常の配列はそのまま利領域がメモリに確保され、連想配列は動的に配列の要素が確保される仕…
自作CPUで仮想アドレスのコードを流していると、TLBエラー発生時にユーザコードをコピーしてユーザ領域に移すコードが存在している。このコピー作業を終えた後にユーザモードに戻ってプログラムの実行を再開する。 この時に、コピーしたプログラムは当然L1D…
RISC-V Vector Extensionの仕様はv0.9からまさかのv0.10となり、いつになれば正式版になるのかと思っていたが、やっと1.0のRC1が公開されたようだ。といってもTagが打たれただけで、今度はRISC-V Internationalによる承認フローに入るものと思われる。 v0.10…
BOOMのBranchTagについての解析の続き。分岐命令の予測が外れて、分岐がジャンプする方向に分岐が飛んだものとする。これがこの波形。 この部分のようだ。ずっとBEQでループを繰り返していたが、ループの終了で予測が外れている。 121368 3 0x00000000800015…
BOOMにはBranch Tag(brtag)というのが採用されており、これが一般的なのかは分からないが、どういう機構で動いているのか調査することにした。 Branch Tagはその名の通り分岐命令に対して付与されるタグで、このタグに応じてRenameMapのスナップショットが取…
次はBOOMのFPUについて解析する。BOOMのFPUパイプラインは以下のファイルで定義されている。 src/main/scala/exu/fp-pipeline.scala //********************************** // construct all of the modules val exe_units = new boom.exu.ExecutionUnits(fp…
経済産業省がまとめた「半導体・デジタル産業戦略」の資料が公開されていたので読んでみた。いわゆる「半導体の国家戦略」と元となる資料で、どういう施策を計画しているのか興味があるので読んでみることにした。 www.meti.go.jp 資料は4種類用意されている…
SonicBOOMのロールバックについてもう少し。 よく考えてみると、物理レジスタIDは新しい命令から順にロールバックして行かないと確定した最も古い命令まで戻ってくることができないので、ROBエントリを逆順に戻してくるはずだ(まさに「ロールバック」なので…
SonicBOOMのリネームマップについてその構造を調査した。リネームマップは、論理レジスタから物理レジスタIDへの変換を行うことで仮想的に論理レジスタよりも多くのレジスタを扱うことができるような機能で、アウトオブオーダ実行を行うCPUではほぼ必須の機…
TileLinkによるTL-Cによるコヒーレントプロトコルの確認、もう少し波形を読み解いていく。 まず、アドレス0x80002540に対するメモリアクセスが発生し、Core0がL2キャッシュにたいしてそのキャッシュラインのアクセスリクエスト(AcquireBlock)を出す。 それに…
前回のプログラムにおいて、TileLinkがどのような動きをしているのか確認してみる。 あるキャッシュブロックを取得する際、L2キャッシュはBチャネルを使ってProbeコマンドを送り、そのブロックを持っているキャッシュに対してそのブロックを取得するためのコ…