Deduction Relationship

Deduction Rules

If aclTensor inputs of an API (such as aclnnAdd or aclnnMul) are of different data types, the API internally deduces a data type and converts the input data into this data type for computation.

Some data types supported by aclTensor meet the following deduction rules, which are similar to those of Type Promotion.

Note:

  • For ease of description, the data types used in the table are in abbreviated forms. The meanings of the data types are 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), and ACL_COMPLEX128(c128).
  • The table heading and the leftmost column in the table indicate the two input data types to be deduced. The corresponding intersections in the table indicate the deduced data types.
  • The cross sign (×) in the table indicates that the two types cannot be deduced.

Table 1 Data type deduction relationship

Data Typef32f16f64bf16s8u8s16u16s32u32s64u64boolc32c64c128
f32f32f32f64f32f32f32f32×f32×f32×f32c64c64c128
f16f32f16f64f32f16f16f16×f16×f16×f16c32c64c128
f64f64f64f64f64f64f64f64×f64×f64×f64c128c128c128
bf16f32f32f64bf16bf16bf16bf16×bf16×bf16×bf16c32c64c128
s8f32f16f64bf16s8s16s16×s32×s64×s8c32c64c128
u8f32f16f64bf16s16u8s16×s32×s64×u8c32c64c128
s16f32f16f64bf16s16s16s16×s32×s64×s16c32c64c128
u16×××××××u16××××××××
s32f32f16f64bf16s32s32s32×s32×s64×s32c32c64c128
u32×××××××××u32××××××
s64f32f16f64bf16s64s64s64×s64×s64×s64c32c64c128
u64×××××××××××u64××××
boolf32f16f64bf16s8u8s16×s32×s64×boolc32c64c128
c32c64c32c128c32c32c32c32×c32×c32×c32c32c64c128
c64c64c64c128c64c64c64c64×c64×c64×c64c64c64c128
c128c128c128c128c128c128c128c128×c128×c128×c128c128c128c128

Deduction Example

  • When aclnnAdd is called, if the data types of the input parameters are different (one is float16 and the other is float32), the API converts float16 to float32 for computation.
  • When aclnnAdd is called, if the data types of the input parameters are different (one is float32 and the other is bool), the API converts bool to float32 for computation.