TensorScalar互推导关系

推导规则

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

类型推导的规则如下:

说明

  • 为方便描述,表格中使用的数据类型是简写形式,代表的含义: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)。
  • 表格里首行表示待推导的输入Tensor数据类型,首列表示待推导的输入Scalar数据类型,表格中对应位置表示推导出的数据类型。
  • 表中叉号(×)表示这两种类型不能进行推导计算。

表 1 数据类型推导关系表

数据类型 f32 f16 f64 bf16 s8 u8 s16 u16 s32 u32 s64 u64 bool c32 c64 c128
f32 f32 f16 f64 bf16 f32 f32 f32 × f32 × f32 × f32 c32 c64 c128
f16 f32 f16 f64 bf16 f32 f32 f32 × f32 × f32 × f32 c32 c64 c128
f64 f32 f16 f64 bf16 f32 f32 f32 × f32 × f32 × f32 c128 c128 c128
bf16 f32 f16 f64 bf16 f32 f32 f32 × f32 × f32 × f32 c32 c64 c128
s8 f32 f16 f64 bf16 s8 u8 s16 u16 s32 u32 s64 u64 s8 c32 c64 c128
u8 f32 f16 f64 bf16 s8 u8 s16 u16 s32 u32 s64 u64 u8 c32 c64 c128
s16 f32 f16 f64 bf16 s8 u8 s16 u16 s32 u32 s64 u64 s16 c32 c64 c128
u16 f32 f16 f64 bf16 s8 u8 s16 u16 s32 u32 s64 u64 × c32 c64 c128
s32 f32 f16 f64 bf16 s8 u8 s16 u16 s32 u32 s64 u64 s32 c32 c64 c128
u32 f32 f16 f64 bf16 s8 u8 s16 u16 s32 u32 s64 u64 × c32 c64 c128
s64 f32 f16 f64 bf16 s8 u8 s16 u16 s32 u32 s64 u64 s64 c32 c64 c128
u64 f32 f16 f64 bf16 s8 u8 s16 u16 s32 u32 s64 u64 × c32 c64 c128
bool f32 f16 f64 bf16 s8 u8 s16 u16 s32 u32 s64 u64 bool c32 c64 c128
c32 c64 c32 c128 c64 c64 c64 c64 c64 c64 c64 c64 c64 c64 c32 c64 c128
c64 c64 c32 c128 c64 c64 c64 c64 c64 c64 c64 c64 c64 c64 c32 c64 c128
c128 c64 c32 c128 c64 c64 c64 c64 c64 c64 c64 c64 c64 c64 c32 c64 c128

推导示例

  • 如果输入Tensor的数据类型为float16,输入Scalar的数据类型为float32,那么API内部就会将输入Scalar的float32数据类型转换成float16数据类型然后进行计算。
  • 如果输入Tensor的数据类型为bool,输入Scalar的数据类型为float32,那么API内部就会将输入Tensor的bool数据类型转换成float32数据类型然后进行计算。