RegLayout
源操作数与目的操作数类型位宽不同时,可以分为两种情况:
- 源操作数与目的操作数位宽比为1:2或2:1。
- 源操作数与目的操作数位宽比为1:4或4:1。
该数据结构是为了在两种情况中决定读或写的位置,在情景1下,可以将一个256B大小的RegTensor分为两部分,对于每一字节,其索引为下标i%2;在情景2下,可以将一个256B大小的RegTensor分为四部分,对于每一字节,其索引为下标i%4。RegLayout的取值如下:
- RegLayout::ZERO,写入索引0的位置
- RegLayout::ONE,写入索引1的位置
- RegLayout::TWO,写入索引2的位置
- RegLayout::THREE,写入索引3的位置
enum class RegLayout {
UNKNOWN = -1,
ZERO,
ONE,
TWO,
THREE
};

如图所示,RegLayout::ZERO/RegLayout::ONE这2种模式仅在位宽比值1:2或2:1的情况下可以使用,例如float32转int16, 位宽比为2比1。例如,对于位宽为2:1的数据类型转换,可以通过RegLayout选定写入数据的位置。当选择RegLayout::ZERO时,数据写入索引为0的位置,当选择RegLayout::ONE时,数据写入索引为1的位置。
RegLayout::ZERO/RegLayout::ONE/RegLayout::TWO/RegLayout::THREE这4种模式仅在位宽比值1比4或4比1的情况下可以使用,例如float32转int8,位宽比为4比1。例如,对于位宽为4:1的数据类型转换,当选择RegLayout::ZERO时,数据写入索引为0的位置;当选择RegLayout::ONE时,数据写入索引为1的位置;当选择RegLayout::TWO时,数据写入索引为2的位置;当选择RegLayout::THREE时,数据写入索引为3的位置。
父主题: 数据类型