3.6.8.20 l1bmd-分配
つまり、C言語の多次元配列風に書くと[16 (MAB番号)][4 (PE番号)]という並びになる。
この際、L1BM上のデータは 4 長語ごとに異なるMABに送られることになるが、行き先のMAB番号をラウンドロビンにずらすことができる。 code:文法
<dst_0> [<dst_1>..]は書き込み先PEオペランドである。
[]は+か-の後に 0 から 15 の整数を付け、MAB番号をずらす量を指定する。正の場合でも符号は必須である。 番ずれたMABに、未指定であれば送信されるはずだったデータが送られるという対応関係になる。 この機能は結合命令で折り返しレジスタに書き込む際には適用されないので、折り返しの結果 2 倍ずれてしまうということにはならない。 code:効果
for cycle= 0:4
forall group,l2b,l1b
uint_t src_addr=addr_b +cycle* 64
forall mab,pe
uint_t src_mab = (mab+ mabdiff) % 16
code:例
lpassa $mabid $lr0v
nop
l1bmd+1 $lr0v $lb0
l1bmd-1 $lr0v $lb256;l1bmd+1$lbi $ls0v
l1bmd-1 $lbi $ls8v
nop
l1bmd $lb0 $ls16v
l1bmd $lb256 $ls24v
前者 2 つでは折り返し分配時にMAB番号をずらす機能が適用されており、後者 2 つでは$lb0, $lb256への結合書き込み時に同機能が適用されている。