互推导关系

推导规则

当一个API(如aclnnAdd、aclnnMul等)输入的Tensor数据类型不一致时,API内部会推导出一个数据类型,将输入数据转换成该数据类型进行计算。

类型推导的规则如表1表2所示。

  • 为方便描述,表格中使用的数据类型是简写形式,代表的含义:ACL_FLOAT(f32)、ACL_FLOAT16(f16)、ACL_DOUBLE(f64)、ACL_BF16(bf16)、ACL_INT8(s8)、ACL_UINT8(u8)、ACL_INT16(s16)、ACL_UINT16(u16)、ACL_INT32(s32)、ACL_UINT32(u32)、ACL_INT64(s64)、ACL_UINT64(u64)、ACL_BOOL(bool)、ACL_COMPLEX32(c32)、ACL_COMPLEX64(c64)、ACL_COMPLEX128(c128)。
  • 表格里表头和最左侧一列分别表示待推导的两个输入数据的类型,表格中对应位置表示推导出的数据类型。
  • NA表示这两种类型不能进行推导计算。
  • 当输入数据类型为bool与其他任意数据类型(除u16、u32、u64之外),其推导出的数据类型为其他任意数据类型。当输入数据类型为bool与u16、u32、u64其中一个,均不支持数据类型推导。
  • 当两个输入的数据类型都为u16,其推导出的数据类型仍为u16。当两个输入的数据类型分别为u16、非u16的任意数据类型,不支持数据类型推导。
  • 当两个输入的数据类型都为u32,其推导出的数据类型仍为u32。当两个输入的数据类型分别为u32、非u32的任意数据类型,不支持数据类型推导。
  • 当两个输入的数据类型都为u64,其推导出的数据类型仍为u64。当两个输入的数据类型分别为u64、非u64的任意数据类型,不支持数据类型推导。
表1 常见数据类型推导关系

数据类型

f32

f16

f64

bf16

s8

u8

s16

s32

s64

c32

c64

c128

f32

f32

f32

f64

f32

f32

f32

f32

f32

f32

c64

c64

c128

f16

f32

f16

f64

f32

f16

f16

f16

f16

f16

c32

c64

c128

f64

f64

f64

f64

f64

f64

f64

f64

f64

f64

c64

c64

c128

bf16

f32

f64

f64

bf16

bf16

bf16

bf16

bf16

bf16

c32

c64

c128

s8

f32

f16

f64

bf16

s8

s16

s16

s32

s64

c32

c64

c128

u8

f32

f16

f64

bf16

s16

u8

s16

s32

s64

c32

c64

c128

s16

f32

f16

f64

bf16

s16

s16

s16

s32

s64

c32

c64

c128

s32

f32

f16

f64

bf16

s32

s32

s32

s32

s64

c32

c64

c128

s64

f32

f16

f64

bf16

s64

s64

s64

s64

s64

c32

c64

c128

c32

c64

c32

c64

c32

c32

c32

c32

c32

c32

c32

c64

c128

c64

c64

c64

c64

c64

c64

c64

c64

c64

c64

c64

c64

c128

c128

c128

c128

c128

c128

c128

c128

c128

c128

c128

c128

c128

c128

表2 特殊数据类型推导关系

数据类型

f32

f16

f64

bf16

s8

u8

s16

s32

s64

c32

c64

c128

u16

NA

NA

NA

NA

NA

NA

NA

NA

NA

NA

NA

NA

u32

NA

NA

NA

NA

NA

NA

NA

NA

NA

NA

NA

NA

u64

NA

NA

NA

NA

NA

NA

NA

NA

NA

NA

NA

NA

推导示例