Top: -
Par: 11 lines
DRAM に分割されて配置された長さ 256 の Float Vector \(D\) を、
LM にある Vector \(L\) に ((4_L2B:2, 32:1, 2_W:1))のレイアウトで格納してください。
ポイントとしては、今回は入出力で 4_L2B:2 → 4_L2B:2 と同じなのと、出力レイアウトに L2B 以外の分割の指示がありません。
4_PE:1 の分割すらないのはこの問題で初ですね。L1B までは DL PE 256_16 と同様の設定です。
L1BM まで値を下ろした後は、1 長語 PE 放送命令 l1bmp を使って、L1BM にある値を 16 個の MAB、4 個の PE に放送すれば良いです。
1 長語 PE 放送命令はサイクルごとに 1 長語を読み出し、各 PE に 1 長語ずつ放送するので、1 命令で 4 長語(8単語)を転送します。大量の値を放送するときは
のようになります。
なお、PE 放送命令は、l1bmp $llb0 $llm0v のように書くと 2長語動作 になりますが、こちらはスループットが倍になる他に出力のレイアウトも変わるので、こちらで行いたい場合はお気をつけください。
最初、各 DRAM には $d[0:32] の通り、32 長語ずつ分配されて配置されています。
これを DRAM → L2BM → L1BM と放送していきます。mvb2 命令は 64 長語単位で放送するので、mvb2/n32 $d0 $lc0 ではなく mvb2/n64 $d0 $lc0 とします。
これを行い、各 L1BM に 32 長語を持っていったのち、l1bmp PE 放送命令(1 長語) を8回発行して、各 PE に 32 長語(64単語)を放送します。
$d[0:32]@0, (256)/((4_L2B:2, 32:1, 2_W:1); B@[4_L2B:2])
$lm[0:64], (256)/ ((4_L2B:2, 32:1, 2_W:1))