跳转至

数据格式总体介绍

概述

灵犀指令集提供了覆盖高精度浮点、低精度浮点、有符号整数、无符号整数的完整数据格式体系,用于满足科学计算、通用张量运算、AI 训练、AI 推理、数据搬运与量化/反量化等不同场景的需求。

从总体上看,这些数据格式可分为三大类:

  1. 浮点类型fp64fp32hf32tf32fp16bf16hif8fp8(e5m2, e4m3)fp6(e3m2, e2m3)fp4(e1m2, e2m1)hif4
  2. 有符号整数类型s64s32s16s8s4
  3. 无符号整数类型u64u32u16u8u4

其中:

  • 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)

无符号格式在相同位宽下比有符号格式具有更大的非负表示范围,因此常用于索引、标志位压缩和低比特数据表示。


二、浮点格式的组织方式

浮点格式最核心的区别在于指数位与尾数位如何分配。这会直接影响两个能力:

  • 指数位更多:动态范围更大,更容易表示很大或很小的数
  • 尾数位更多:有效精度更高,数值更细腻

例如:

  • bf16fp16 都是 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 位段格式,因此这里暂不纳入该图:

Floating-point format layout

为了便于快速理解,这里再给出一个简要文字版汇总:

类型 符号位 指数位 尾数位 合计
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. 高精度浮点:fp64fp32

这类格式适合对数值精度要求较高的场景:

  • 科学计算
  • 高精度累加
  • 参考实现或 golden model
  • 对误差极为敏感的算法

其中:

  • fp64 精度与范围最高,但硬件代价、带宽开销也最大
  • fp32 是最常见的通用浮点格式,兼顾精度、范围和实现复杂度

2. 中等精度浮点:hf32tf32fp16bf16

这类格式常用于 AI 训练和高性能计算中的混合精度路径:

  • fp16:存储和带宽效率高,适合高吞吐计算
  • bf16:指数范围大,更不容易溢出/下溢,适合训练场景
  • tf32:兼顾动态范围与硬件吞吐,常用于张量核心类运算
  • hf32:属于 32 位混合设计,可视作 e8m11 格式,兼顾较大动态范围与较低尾数开销

3. 低精度浮点:HiF8fp8fp6fp4hif4

这类格式主要面向:

  • 大模型推理
  • 权重量化
  • 激活压缩
  • 对吞吐率和存储效率极敏感的专用计算路径

其共同特点是:

  • 单个元素占用位数极少
  • 可显著提升片上缓存利用率与带宽效率
  • 适合大规模并行计算
  • 需要依赖更精细的量化策略、缩放因子管理或混合累加机制

其中:

  • fp8 已成为当前低精度 AI 计算的重要候选格式
  • fp6fp4hif4 则进一步推进到超低比特表达
  • hif4 采用 e1m2 划分,属于 4 位超低精度浮点的一种具体实现
  • HiF8 不是简单的固定 eXmY 格式,而是一种通过点域动态控制精度的类型

4. 整数格式:s*u*

整数格式通常用于:

  • 量化后的权重和激活
  • 索引与偏移
  • 计数器、标记位、控制字段
  • 固定点近似计算

其中:

  • s8 / u8 常见于低精度推理
  • s4 / u4 适合更激进的压缩场景
  • s16 / u16 常用于中间结果或较宽量化表示
  • s32 / u32s64 / u64 常用于累加、索引和控制类数据

五、应用视角下的理解

从应用角度看,这组数据格式并不是彼此替代的关系,而是构成了一套面向不同计算阶段的分层精度体系

  • 训练/标定/参考计算:通常优先使用 fp32,必要时使用 fp64
  • 混合精度训练:常使用 bf16fp16tf32
  • 推理部署:常使用 fp16bf16fp8s8u8
  • 极致压缩推理:可能使用 fp6fp4hif4s4u4
  • 控制与索引路径:更多使用 s32u32s64u64

在硬件实现上,格式位宽越低,通常意味着:

  • 同样容量的片上存储可以容纳更多元素
  • 同样带宽下可以搬运更多数据
  • 同一周期内有机会完成更多并行运算

但与此同时,也意味着:

  • 数值误差更大
  • 可表示范围可能更窄
  • 需要更复杂的量化、反量化、缩放和累加策略来保证最终精度

因此,数据格式的选择本质上是在精度、范围、吞吐、带宽、容量、能耗之间进行工程折中。


六、小结

灵犀指令集中的数据格式体系具有以下特点:

  1. 覆盖完整:从 fp64fp4,从 s64/u64s4/u4,范围完整
  2. 层次清晰:同时支持高精度通用计算与超低精度 AI 计算
  3. 面向混合精度:提供 bf16tf32fp8 等典型混合精度格式
  4. 兼顾专用格式扩展:包含 hf32HiF8hif4 等专有命名格式,其中 HiF8 体现动态精度控制能力
  5. 适合多场景部署:既可支持通用数值处理,也可支持训练、推理和量化计算

整体而言,这套数据格式体系为灵犀指令集在不同负载下进行精度-性能协同优化提供了基础。