3.6.8.21 l1bmd-結合
PEからサイクルあたり 1 長語を読み出し、L1BM配下の 64 個のPEについて結合しL1BMにサイクルあたり 64 長語で書き込む。
L1BMアドレスとMAB番号・PE番号との対応関係は分配命令と同じである。
この際、 4 長語ごとに異なるMABから送られた値が書き込まれることになるが、送り元のMAB番号をラウンドロビンにずらすことができる。
この機能は折り返しレジスタへの書き込み時は動作しない。
なお 2 長語動作の結合命令は存在しない。
code:文法
l1bmd[] $lb <addr_b>
[(+|-)n]は+か-の後に 0 から 15 の整数を付け、MAB番号をずらす量を指定する。正の場合でも符号は必須である。
n番分ずれたアドレスに、未指定であれば送信されるはずだったデータが送られるという対応関係になる。
<addr_b>は読み出し元PEオペランドである。
折り返し転送の際の注意は分配命令の項目(3.6.8.20 l1bmd-分配)を参照のこと。
L1BMアドレス<addr_b>は 64 長語アラインである必要がある。
code:効果
for cycle= 0:4
forall group,l2b,l1b
LongWord data64
LongWord data_turnaround64
forall mab,pe
uint_t dst_mab = (mab+ mabdiff) % 16
datadst_mab* 4 +pe =MEMgroupl2bl1bmabpe.refer_pemem(src,cycle)
data_turnaroundmab * 4 +pe =MEMgroupl2bl1bmabpe.refer_pemem(src,
cycle)
uint_t dst_addr=addr_b +cycle* 64
MEMgroupl2bl1b.l1bmdst_addr:dst_addr+64 =data0:64
MEMgroupl2bl1b.l1bm_turnaroundcycle0:64 = data_turnaround0:64
l1bm_turnaroundは折り返しレジスタを表している。
折り返しレジスタへの書き込みが起きるのは他のPE→L1BM転送命令も同様だが、結合命令のみMAB番号をずらす機能に関して特殊な動作をするため、特別に記載した。
code:txt
例
l1bmd+1 $lr0v $lb0
l1bmd $lr0v $lb256
nop/2
l1bmd $lb0 $ls0v
l1bmd+1 $lb256 $ls8v
この例では$ls0から 4 長語の範囲に書き込まれる値と、$ls8から 4 長語の範囲に書き込まれる値は等しくなる。
つまり、あるの値を結合時に指定するのと分配時に指定するのは等価になるような定義になっている。