数据类型#
源码: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
对象接收四个参数:code
:类型代码,表示数据类型的标识符。bits
:位数,表示数据类型的大小(以位为单位)。lanes
:通道数,表示数据类型的通道数量。is_scalable
:一个布尔值,表示数据类型是否可伸缩。默认值为false
。
在构造函数内部,首先将
code
和bits
转换为uint8_t
类型,并将它们分别赋值给data_.code
和data_.bits
。然后,根据is_scalable
的值,对lanes
进行处理。如果is_scalable
为true
,则检查lanes
是否大于1,否则抛出异常。接着,将处理后的lanes
转换为uint16_t
类型并赋值给data_.lanes
。最后,根据
code
的值,检查bits
是否符合预期。如果code
等于kBFloat
,则检查bits
是否等于16;如果code
等于kE4M3Float
或kE5M2Float
,则检查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()
等。这些方法允许用户在运行时检查和操作数据类型的各种特性。