Top: -
Par: 140 lines
\(256 \times 16\) 行列 \(A\) と、\(256 \times 1024\) 行列 \(B\) に対して、行列積 \(C = A^T \times B\) (shape:\(16 \times 1024\)) を計算し、DRAMへ 出力してください。\(A,B\) のレイアウトは以下のとおりです。
前回の問題 Mmul TA 16_32_8 のレイアウトは以下の通りでした。
今回の問題では、\(A, B\) の 1 次元目に 8_L2B:1 とある通り、8 個の L2B に分散して配置されています。
また、\(B\) の 2 次元目に 8_MAB:2, 8_L1B:1, 2_MAB:1 が追加されています。これは \(B\) の 2 次元目が、8 個の L1B と 16 個の MAB に分散して配置されていることを示しています。
今回の行列積は、\(1\) 次元目は縮約される次元なので、8 個の L2B 間で縮約を行う必要があります。
また、\(2\) 次元目は結合を行う次元なので、Mmul TA 16_32_8 を行って得られた \(16\times8\) 行列 ((16:1), (4_PE:1, 2_W:1)) を、16 個の MAB と 8 個の L1B 間で結合を行うことで、最終的に \(16\times1024\) 行列を得ることができます。
L2BM 間の縮約は、L2BM から PDM への縮約と、PDM から DRAM への転送に分けると良いでしょう。
l1bmd 結合命令 l1bmd l2bmd L1BM → L2BM 結合 l2bmd mvrffadd/n8192 $lc0 $p0@0 L2BM → PDM グループ間縮約命令mvrmvp/n2048 $p0@0 $d0@0 PDM → DRAM 単独個別転送命令 mvpを使用します。
$lm[0:128], (256,16)/((8_L2B:1, 32:2), (2:1, 4_PE:1, 2_W:1); B@[MAB,L1B])
$lm[128:192], (256,1024)/((8_L2B:1, 32:1), (8_MAB:2, 8_L1B:1, 2_MAB:1, 4_PE:1, 2_W:1))
$d[0:2048]@0, (16,1024)/((4_L2B:2, 4:512), (512:1, 2_W:1))
/ \(0.00001\) 以下の絶対誤差が許容されます