数据格式总体介绍¶
概述¶
灵犀指令集提供了覆盖高精度浮点、低精度浮点、有符号整数、无符号整数的完整数据格式体系,用于满足科学计算、通用张量运算、AI 训练、AI 推理、数据搬运与量化/反量化等不同场景的需求。
从总体上看,这些数据格式可分为三大类:
- 浮点类型:
fp64、fp32、hf32、tf32、fp16、bf16、hif8、fp8(e5m2, e4m3)、fp6(e3m2, e2m3)、fp4(e1m2, e2m1)、hif4 - 有符号整数类型:
s64、s32、s16、s8、s4 - 无符号整数类型:
u64、u32、u16、u8、u4
其中:
s表示 signed,即有符号整数u表示 unsigned,即无符号整数- 其余类型为浮点类型
不同格式在位宽、数值范围、精度、硬件吞吐率、存储开销之间做了不同取舍,因此适合不同的算子和执行阶段。
一、数据格式分类¶
1. 浮点类型¶
浮点类型适合表达动态范围较大的实数。它们通常由以下三部分组成:
- 符号位(Sign, S):表示正负
- 指数位(Exponent, E):决定数值范围
- 尾数位(Mantissa / Fraction, M):决定有效精度
在灵犀指令集中,浮点格式覆盖从 64 位到 4 位的多个精度层级:
| 类型 | 总位宽 | 位段形式 | 典型特点 |
|---|---|---|---|
fp64 |
64 | 1 + 11 + 52 |
双精度,范围和精度最高 |
fp32 |
32 | 1 + 8 + 23 |
单精度,通用性最强 |
hf32 |
32 | 1 + 8 + 11(即 e8m11) |
32 位混合精度,兼顾较大动态范围与较低尾数开销 |
tf32 |
32 | 1 + 8 + 10(即 e8m10) |
保留较大动态范围,降低尾数精度,适合张量计算 |
fp16 |
16 | 1 + 5 + 10 |
半精度,存储与带宽开销低 |
bf16 |
16 | 1 + 8 + 7 |
保留与 fp32 接近的指数范围,精度较低 |
HiF8 |
8(实现相关) | 非固定 eXmY 划分 |
一种通过点域动态控制精度的浮点类型 |
fp8(e5m2) |
8 | 1 + 5 + 2 |
指数范围更大,精度更低 |
fp8(e4m3) |
8 | 1 + 4 + 3 |
精度略高于 e5m2,动态范围略小 |
fp6(e3m2) |
6 | 1 + 3 + 2 |
极低位宽浮点,适合极致压缩 |
fp6(e2m3) |
6 | 1 + 2 + 3 |
精度优先于 e3m2,范围更小 |
fp4(e1m2) |
4 | 1 + 1 + 2 |
超低位宽浮点,表示能力非常有限 |
fp4(e2m1) |
4 | 1 + 2 + 1 |
范围优先于 e1m2 |
hif4 |
4 | 1 + 1 + 2 |
4 位低精度浮点,采用 e1m2 划分 |
说明 1:
eXmY表示该格式采用X位指数和Y位尾数;再加上 1 位符号位,即得到总位宽。说明 2:
HiF8不属于固定eXmY位段划分的常规浮点格式,因此不宜直接套入统一的S/E/M固定分段表述。
2. 有符号整数类型¶
有符号整数用于表示离散数值、索引偏移、量化数据、计数器以及控制类数据。灵犀指令集提供以下有符号整数格式:
| 类型 | 位宽 | 数值范围 |
|---|---|---|
s64 |
64 | (-2^{63}) 到 (2^{63}-1) |
s32 |
32 | (-2^{31}) 到 (2^{31}-1) |
s16 |
16 | (-2^{15}) 到 (2^{15}-1) |
s8 |
8 | (-2^7) 到 (2^7-1) |
s4 |
4 | (-2^3) 到 (2^3-1) |
这些格式一般采用二进制补码表示。位宽越小,存储开销越低、吞吐率越高,但可表示的范围也越小。
3. 无符号整数类型¶
无符号整数用于表示非负离散量,例如地址偏移、掩码、长度、计数、部分量化表示等。
| 类型 | 位宽 | 数值范围 |
|---|---|---|
u64 |
64 | 0 到 (2^{64}-1) |
u32 |
32 | 0 到 (2^{32}-1) |
u16 |
16 | 0 到 (2^{16}-1) |
u8 |
8 | 0 到 (2^8-1) |
u4 |
4 | 0 到 (2^4-1) |
无符号格式在相同位宽下比有符号格式具有更大的非负表示范围,因此常用于索引、标志位压缩和低比特数据表示。
二、浮点格式的组织方式¶
浮点格式最核心的区别在于指数位与尾数位如何分配。这会直接影响两个能力:
- 指数位更多:动态范围更大,更容易表示很大或很小的数
- 尾数位更多:有效精度更高,数值更细腻
例如:
bf16与fp16都是 16 位浮点,但:bf16 = 1 + 8 + 7,指数范围更大fp16 = 1 + 5 + 10,尾数精度更高
tf32 = 1 + 8 + 10(即e8m10)可看作一种面向张量运算的折中格式:- 保留较大的指数范围
- 以较少的尾数换取更高的计算效率
fp8(e5m2)与fp8(e4m3)是两种不同设计倾向的 8 位浮点:e5m2偏重动态范围e4m3偏重有效精度
HiF8则不同于固定eXmY划分的常规 8 位浮点,它是一种通过点域动态控制精度的类型,因此不宜简单等同为某一种固定的S/E/M位段分配
对于 6 位、4 位这类超低精度浮点,表示能力已经非常有限,通常不会单独承担高精度数值表达,而更适合:
- 神经网络推理中的权重/激活压缩
- 特定算子中的中间近似表示
- 对带宽、容量、吞吐率极度敏感的场景
三、各浮点格式位段示意图¶
下图给出了灵犀指令集中固定 S/E/M 位段划分的主要浮点数据格式的符号位、指数位和尾数位示意。由于 HiF8 采用点域动态控制精度,不属于固定 eXmY 位段格式,因此这里暂不纳入该图:
为了便于快速理解,这里再给出一个简要文字版汇总:
| 类型 | 符号位 | 指数位 | 尾数位 | 合计 |
|---|---|---|---|---|
fp64 |
1 | 11 | 52 | 64 |
fp32 |
1 | 8 | 23 | 32 |
hf32 |
1 | 8 | 11 | 32 |
tf32 |
1 | 8 | 10 | 32 |
fp16 |
1 | 5 | 10 | 16 |
bf16 |
1 | 8 | 7 | 16 |
HiF8 |
- | - | - | 8 |
fp8(e5m2) |
1 | 5 | 2 | 8 |
fp8(e4m3) |
1 | 4 | 3 | 8 |
fp6(e3m2) |
1 | 3 | 2 | 6 |
fp6(e2m3) |
1 | 2 | 3 | 6 |
fp4(e1m2) |
1 | 1 | 2 | 4 |
fp4(e2m1) |
1 | 2 | 1 | 4 |
hif4 |
1 | 1 | 2 | 4 |
注:对于
HiF8,这里仅保留总位宽信息;其精度组织方式不按固定的S/E/M分段给出。
四、不同格式的设计取舍¶
1. 高精度浮点:fp64、fp32¶
这类格式适合对数值精度要求较高的场景:
- 科学计算
- 高精度累加
- 参考实现或 golden model
- 对误差极为敏感的算法
其中:
fp64精度与范围最高,但硬件代价、带宽开销也最大fp32是最常见的通用浮点格式,兼顾精度、范围和实现复杂度
2. 中等精度浮点:hf32、tf32、fp16、bf16¶
这类格式常用于 AI 训练和高性能计算中的混合精度路径:
fp16:存储和带宽效率高,适合高吞吐计算bf16:指数范围大,更不容易溢出/下溢,适合训练场景tf32:兼顾动态范围与硬件吞吐,常用于张量核心类运算hf32:属于 32 位混合设计,可视作e8m11格式,兼顾较大动态范围与较低尾数开销
3. 低精度浮点:HiF8、fp8、fp6、fp4、hif4¶
这类格式主要面向:
- 大模型推理
- 权重量化
- 激活压缩
- 对吞吐率和存储效率极敏感的专用计算路径
其共同特点是:
- 单个元素占用位数极少
- 可显著提升片上缓存利用率与带宽效率
- 适合大规模并行计算
- 需要依赖更精细的量化策略、缩放因子管理或混合累加机制
其中:
fp8已成为当前低精度 AI 计算的重要候选格式fp6、fp4、hif4则进一步推进到超低比特表达hif4采用e1m2划分,属于 4 位超低精度浮点的一种具体实现HiF8不是简单的固定eXmY格式,而是一种通过点域动态控制精度的类型
4. 整数格式:s* 与 u*¶
整数格式通常用于:
- 量化后的权重和激活
- 索引与偏移
- 计数器、标记位、控制字段
- 固定点近似计算
其中:
s8/u8常见于低精度推理s4/u4适合更激进的压缩场景s16/u16常用于中间结果或较宽量化表示s32/u32、s64/u64常用于累加、索引和控制类数据
五、应用视角下的理解¶
从应用角度看,这组数据格式并不是彼此替代的关系,而是构成了一套面向不同计算阶段的分层精度体系:
- 训练/标定/参考计算:通常优先使用
fp32,必要时使用fp64 - 混合精度训练:常使用
bf16、fp16、tf32 - 推理部署:常使用
fp16、bf16、fp8、s8、u8 - 极致压缩推理:可能使用
fp6、fp4、hif4、s4、u4 - 控制与索引路径:更多使用
s32、u32、s64、u64
在硬件实现上,格式位宽越低,通常意味着:
- 同样容量的片上存储可以容纳更多元素
- 同样带宽下可以搬运更多数据
- 同一周期内有机会完成更多并行运算
但与此同时,也意味着:
- 数值误差更大
- 可表示范围可能更窄
- 需要更复杂的量化、反量化、缩放和累加策略来保证最终精度
因此,数据格式的选择本质上是在精度、范围、吞吐、带宽、容量、能耗之间进行工程折中。
六、小结¶
灵犀指令集中的数据格式体系具有以下特点:
- 覆盖完整:从
fp64到fp4,从s64/u64到s4/u4,范围完整 - 层次清晰:同时支持高精度通用计算与超低精度 AI 计算
- 面向混合精度:提供
bf16、tf32、fp8等典型混合精度格式 - 兼顾专用格式扩展:包含
hf32、HiF8、hif4等专有命名格式,其中HiF8体现动态精度控制能力 - 适合多场景部署:既可支持通用数值处理,也可支持训练、推理和量化计算
整体而言,这套数据格式体系为灵犀指令集在不同负载下进行精度-性能协同优化提供了基础。