行列演算の図まとめ

MN-Core の行列積演算 \(A \times B = C\) の図をまとめました。行列演算についての解説はこちらです。

\(4\) PE 動作させたときの最小単位を表しています。PE ごとに色を分けて表示しています。

乗算の左要素 \(A\) は行列レジスタの内容と、レジスタ書き込み時にどの PE が担当しているのかを表しています。

太い黒枠でまとめられているセルは、\(1\) 長語の単位を示しています。

なお行列積命令 mmul として図示していますが、\(AB + X = C\) を計算する行列積和命令 mfma の場合、加算項 \(X\) は出力 \(C\) と同様のレイアウト・精度であるとお考えください。

図の下にあるコードは、GRF0 $r に格納された \(A\) を、ブロックフロート化して行列レジスタに書き込み、LM0 $m に格納された \(B\) と乗算を行い、演算結果 \(C\) を LM1 $n に出力する例です。コード例では \(B\) はブロックフロート化済みと仮定して変換を省略しています。なお命令を重ねずに表記していますが、bfn, mwrite, mmul(mfma) の \(3\) 種は同時に実行することができます。

倍精度

dbfn $lr0v $nowrite dmwrite $aluf $lx0 dmmulu $lx $lm0v $nowrite dmfmad $lx $lm0v $mauf $ln0v

単精度

fbfn $lr0v $lr0v nop fmwrite $r0v $lx0 fmwrite $r4v $lx4 fmmul $lx $m0v $ln0v

疑似単精度

gbfn $lr0v $lr0v gbfn $lr8v $lr8v gmwrite $lr0v $lx0 gmwrite $lr8v $lx4 gmmul $lx $lm0v $ln0v

半精度

・\(2\) 長語を使用した BF 化・行列レジスタ書き込み

hbfn/9 $llr0v $llr0v hbfn/9 $llr16v $llr16v hmwrite $llr0v $llx0 hmwrite $llr16v $llx8 hmmul $lx $lm0v $lln0v

・長語を使用した BF 化・行列レジスタ書き込み

hbfn/9 $lr0v $lr0v hbfn/9 $lr8v $lr8v hbfn/9 $lr16v $lr16v hbfn/9 $lr24v $lr24v hmwrite $lr0v $lx0 hmwrite $lr8v $lx4 hmwrite $lr16v $lx8 hmwrite $lr24v $lx12 hmmul $lx $lm0v $lln0v

hmmul の出力は単精度であることに注意

アニメーション版