接口基本信息
实现2D格式的具备转置的数据搬运,从L1加载单位512Bytes的分形矩阵到L0A/L0B缓冲区,并实现转置操作。
数据对齐要求:
- L0A/L0B中地址:512Bytes对齐。
- L1地址:32Bytes对齐。
该类接口支持的数据类型 = {b4, b8, b16, b32}。b4仅在dst={L0B}时有效。
请注意,由于b4,b8,b16,b32在单次中的转置需要不同数量的512Byte分形,因此indexID、repeat、srcStride、dstGap的定义与每种数据类型不同。
分形数用于表示每次repeat所需的512Byte分形数,记为fractal_num。
对于type=b4, fractal_num为4,这意味着在每次repeat中(共4*512Byte),将从L1中读取4个连续的16*64 b4分形,并合并为64*64,并进一步转置和分裂为4个16*64分形。
对于type=b8, fractal_num为2,这意味着在每次repeat中(共2*512Byte),将从L1中读取2个连续的16*32 b8分形,并合并为32*32,并进一步转置和分裂为2个16*32分形。
对于type=b16, fractal_num为1,这意味着在每次repeat中(共1*512Byte),只有1个16*16分形将被读取并转置。
对于type=b32, fractal_num为2,这意味着在每次repeat中(共2*512Byte),将读取2个连续的16*8 b4分形。
值得注意的是本类接口中涉及的(load_cbuf_to_ca_transpose、load_cbuf_to_cb_transpose)与(load_cbuf_to_ca、load_cbuf_to_cb)的区别在于:本类接口始终带有转置操作,而后者的转置操作由参数transpose控制;并且本类接口对数据类型的支持范围更广,后者若需实现分形的转置仅支持b16数据类型。
参数名 |
说明 |
取值范围 |
单位 |
|---|---|---|---|
dst |
目的地址。 |
/ |
/ |
src |
源地址。 |
/ |
/ |
indexID |
表示src matrix的第一个repeat中的第一个fractal的index ID,以分形数为单位。例如,indexID中有500个16x16分形矩阵,indexID=100,且type=b4,这意味着将401th、402th、403th、404th 512Byte矩阵从src matrix转置到L0A/L0B缓冲区。 |
[0, 2^16-1] |
fractal分形 |
repeat |
表示重复搬运的次数,如果想只执行一次接口,则设置为1。为0表示不执行。 |
[0, 2^8-1] |
次 |
srcStride |
每个repeat迭代的源地址stride,单位是fractal matrix。 |
[0, 2^16-1] |
分形 |
dstGap |
每个repeat迭代的目的地址gap。如果dstStride为0,表示在dst addr连续存储。 |
[0, 2^16-1] |
分形 |
addrmode |
addrmode为bool类型,其含义= {+, - },用于指示每个repeat之间的地址计算模式。该模式不会影响单次repeat中的分形步长计算,它总是正的。 |
[0, 1] |
/ |
dstFracGap |
表示每次repeat中分形间的gap,单位是一个512字节的分形,仅当type=b4、b8、b32时有效(b16时分形已经是方阵了,无需做分形合并)。 |
[0, 2^16-1] |
/ |
参数表中的Stride指代相邻两个首地址间的步长。
参数表中的Gap指代相邻两个尾地址到首地址的步长。
repeat=0表示不执行,该接口将被视为NOP,并报出警告。
转置分形必须没有重叠,否则硬件行为是不确定的。
每次迭代中的index ID不能小于零,否则会引发异常。