Top: -
Par: 41 lines
DRAM に分割されて配置された shape = (16, 1024) の Float Tensor \(D\) を、
LM にある Tensor \(L\) に ((16:1), (8_MAB:2, 8_L1B:1, 2_MAB:1, 4_PE:1, 2_W:1); B@[8_L2B:1]) のレイアウトで格納してください。
※ジャッジの都合で、複数の L2B に同じ内容を放送していることをチェックするために、入力が 2 次の Tensor なのに対し、出力が 3 次の Tensor になっています。気にせず、Tensor を放送・分配する問題だと思ってトライしてください。
レイアウトを見ると、8_L1B:1, 4_PE:1 が含まれているので、8 個の L1B, 4 個の PE に分配することが分かります。MAB に関しては 8_MAB:2, 2_MAB:1 となっていますが、合わせると 16 個ある MAB に分割してくださいという指示になるので、こちらも MAB に関して分配します。
L2B に関しては、B@[8_L2B:1] と明示されているので、8 個の L2B に放送(Broadcast)、つまりそれぞれの L2B で同じ内容を複製することが分かります。
DRAM→L2BM の転送は、入力は 4 枚の DRAM に分割して 2048 長語ずつ配置されていますが、L2BM では連結して、8 個の L2B で同じ内容にする必要があります。
DRAM → L2BM グループ間放送命令 mvb の使用も考えられますが、こちらは 16 長語ずつ 4 グループの内容が交互に配置されてしまうので、今回の目的には合いません。
DRAM → PDM 単独個別転送命令 mvp を 4 回行い、特定の PDM に集めたあと、PDM → L2BM グループ間放送命令 mvb を 1 回行い、8192 長語を 8 個の L2B に放送する方法が良いでしょう。
これで、$lc[0:8192] に、集めることができたので、8 個の L1B, 16 個の MAB, 4 個の PE に分配していきます。
8_L1B:1 に分配するには L2BM → L1BM 分配命令 l2bmd を使用します。1 命令で 256 長語を L2BM から読み出し、8 個の L1B に 32 長語ずつ分配するので、32 命令必要です。これで各 L1BM に 1024 長語ずつ分配されます。
L1BM の内容を 16 個の MAB, 4 個の PE に分配するには、(PE) 分配命令 l1bmd を使用します。1 命令で 256 長語を読み出し、16 個のMAB, 4 個の PE に 4 長語(8 単語)ずつ分配するので、4 命令必要です。
これで各 PE に 32 単語ずつ分配されます。
$d[0:2048]@0, (16,1024)/((4_L2B:2, 4:512), (512:1, 2_W:1); B@[4_L2B:2])
$lm[0:32], (2,16,1024)/((2_L2B:3), (16:1), (8_MAB:2, 8_L1B:1, 2_MAB:1, 4_PE:1, 2_W:1))