数据类型

数据类型#

源码:tvm/include/tvm/runtime/data_type.h

DataType 类,它表示运行时的基本数据类型。这个类提供了一些方法来检查和操作数据类型的各种属性,例如类型代码、位数、通道数等。此外,它还提供了一些静态方法来构造特定的数据类型,如整数类型和无符号整数类型。

以下是一些关键部分的解释:

  • enum TypeCode: 定义了一组枚举值,用于表示不同的数据类型代码。这些代码与 DLPack 库中的类型代码保持一致。

  • DataType(): 默认构造函数,创建空的数据类型。

  • explicit DataType(DLDataType dtype): 接受 DLDataType 对象作为参数的构造函数,用于从现有的 DLPack 数据类型创建新的 DataType 对象。

  • DataType(int code, int bits, int lanes, bool is_scalable = false): 接受类型代码、位数、通道数和一个可选的布尔值(表示是否可伸缩)作为参数的构造函数,用于创建具有指定属性的新数据类型。 DataType 对象接收四个参数:

    1. code:类型代码,表示数据类型的标识符。

    2. bits:位数,表示数据类型的大小(以位为单位)。

    3. lanes:通道数,表示数据类型的通道数量。

    4. is_scalable:一个布尔值,表示数据类型是否可伸缩。默认值为false

    在构造函数内部,首先将codebits转换为uint8_t类型,并将它们分别赋值给data_.codedata_.bits。然后,根据is_scalable的值,对lanes进行处理。如果is_scalabletrue,则检查lanes是否大于1,否则抛出异常。接着,将处理后的lanes转换为uint16_t类型并赋值给data_.lanes

    最后,根据code的值,检查bits是否符合预期。如果code等于kBFloat,则检查bits是否等于16;如果code等于kE4M3FloatkE5M2Float,则检查bits是否等于8。如果不满足这些条件,将抛出异常。

  • operator DLDataType() const: 将 DataType 对象转换为 DLDataType 对象的转换运算符。

  • static DataType Int(int bits, int lanes = 1): 静态方法,用于创建具有指定位数和通道数的整数类型。

  • static DataType UInt(int bits, int lanes = 1): 静态方法,用于创建具有指定位数和通道数的无符号整数类型。

此外,还有一些其他的方法用于比较、修改和查询数据类型的属性,例如 is_scalar(), is_float(), is_vector_bool(), with_lanes(), with_bits() 等。这些方法允许用户在运行时检查和操作数据类型的各种特性。