FPGA開発日記

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

RISC-V Matrix Extension Specificationについて読み進める (2. ISAの区分)

T-Headが提案しているRISC-VのMatrix Extensionについて、マニュアルを読みながら理解していこうと思う。

とりあえずマニュアルで、どのようなレジスタが存在しているのかを理解していく。プログラミングモデルとサンプルコードも読み進めていきたい。

github.com


行列レジスタ情報

行列レジスタ情報には、2つの読み出し専用XLENビット・レジスタがあり、これらはどの実装でも一定である。

  • xrlenb:各行列レジスタ行の RLEN ビットの状態を示すバイトの RLEN
  • xmlenb: 行列レジスタサイズ(バイト単位), mrows*xrlenb, mrows=RLEN/32

行列開始行

xmrstart読み書きレジスタは、行列ロード/ストア命令で実行される最初の行列行インデックスを示す。通常xmrstartは、行列ロード/ストア命令のトラップ時にのみハードウェアによって書き込まれ、レジスタの符号なし値は、再開可能なトラップが処理された後に実行が再開されるべき行を指定する。

mcfg/mcfgiを含むすべてのマトリックス命令は、xmrstart CSRをゼロにリセットする。

xmrstart CSR は、最大行インデックス(最大行より 1 つ小さい)または log2(RLEN/32) を保持するのに十分な書き込み可能ビット数のみを持つように定義されている。xmrstart CSRの上位ビットはゼロにハードワイヤリングされている(読み出しはゼロ、書き込みは無視される)。

例えば、xmrstartは0から3までの行インデックスを表す2ビットを持つ。

行列ISA

XmisaはXLENビットの読み出し専用CSRレジスタで、現在のハードウェア実装でサポートされているマトリックス命令のサブセットを指定する。

ビット 機能
XLEN-1:10 予約
9 MATRIX_MULT_F32F64 オプション
8 MATRIX_MULT_F16F32 オプション
7 MATRIX_PW_I32 オプション
6 MATRIX_PW_I64 オプション
5 MATRIX_MULT_F64F64 オプション
4 MATRIX_MULT_F32F32 オプション
3 MATRIX_MULT_F16F16 オプション
2 MATRIX_MULT_I16I64 オプション
1 MATRIX_MULT_I8I32 必須
0 MATRIX_MULT_I4I32 オプション

bit[i] =1は、オプション機能がサポートされていることを示す。

  • MATRIX_MULT_F16F16: 行列乗算命令、ソースおよび書き込みレジスタの要素は fp16/bf16である。
  • MATRIX_MULT_F32F32: 行列乗算命令、ソースおよび書き込みレジスタの要素は fp32である。
  • MATRIX_MULT_F64F64: 行列乗算命令、ソースおよび書き込みレジスタの要素は fp64である。
  • MATRIX_MULT_I8I32: 行列乗算命令、ソース・レジスタの要素は int8、書き込みレジスタの要素は int32 である。
  • MATRIX_MULT_I16I64: 行列乗算命令で、ソース・レジスタの要素は int16、書き込みレジスタの要素は int64である。
  • MATRIX_MULT_I4I32: 行列乗算命令で、ソース・レジスタの要素は int4、書き込みレジスタの要素は int32 である
  • MATRIX_PW_I32: int32ポイント演算命令
  • MATRIX_PW_I64: int64ポイント演算命令

リセット時の行列拡張の状態

行列拡張は、リセット時に一貫した状態を持たなければならない。リセット時には CSR をゼロに設定することを推奨する。

行列コンテキスト・ステータス

行列コンテキスト・ステータス・フィールド MSmstatus に定義され、sstatus にシャドウされる。MSフィールドは、表に示すFS/VS/XSと同じステータス・エンコーディングを使用する。

status ms[1:0] 意味
0 2’b00 All off
1 2’b01 Initial
2 2’b10 Clean
3 2’b11 Dirty

MS が off に設定されている場合、行列命令を実行しようとしたり、マトリクス CSR にアクセスしようとすると、不正命令例外が発生する。MSがinitialまたはcleanに設定されている場合、行列の状態を変更する命令を実行すると、MSはダーティに変更されます。

実装では、初期状態のアクティビティを使用して、省電力状態の選択に影響を与えることができる。