《Evaluation of POSIT Arithmetic with Accelerators》(一)
以下是根据《Evaluation of POSIT Arithmetic with Accelerators》论文撰写的中文综述,从背景动因、技术方法、实验分析到性能评价进行全面梳理:
基于加速器的POSIT算术评估研究综述
一、研究背景与动因
浮点数计算是科学计算和高性能计算(HPC)中的基础工具。尽管IEEE标准的binary64(双精度)浮点格式提供了足够的数值精度,但其固定的指数和尾数位数分配方式在某些场景下会引起过度精度冗余或精度损失,尤其是在机器学习、图神经网络等低精度容忍度场合。
为此,Gustafson 提出的 POSIT 算术格式(属于 Unum III 类型)应运而生。POSIT 格式具有可变长度的指数和尾数位,能更精细地适配不同量级的数值,从而提升数值稳定性与表达能力,尤其适用于数值值域集中在 ±[10⁻³,10³] 区间(称为 golden zone)的应用场景。
本研究旨在系统评估 32 位 POSIT 算术格式(Posit(32,2))在 FPGA 与 GPU 平台上的实现效率、数值精度与功耗表现,构建适用于线性代数运算(如 GEMM、LU 与 Cholesky 分解)的加速器。
二、POSIT 算术格式简介
POSIT 格式由符号位(s)、可变长度的 regime(r)、固定长度的 exponent(e)和可变长度的 fraction(f)构成,其数值计算表达式如下:
[
x = (-1)^s \cdot u^{k(r)} \cdot 2^e \cdot (1.f)
]
其中,regime 的作用是调节数值的动态范围;通过调整 regime 长度与尾数长度之间的权衡,POSIT 能在值域集中区域提供更高精度。论文采用 Posit(32,2) 格式,即总32位,其中指数长度 es=2,底数 u=2²²=16。
相较于 IEEE binary32 格式,Posit(32,2) 算术在 golden zone 区间内具有更小的舍入误差,且支持对称分布和渐近值1,有助于提升数值算法的稳定性。
三、加速器实现方法
3.1 FPGA 实现
作者基于 Flo-Posit 框架,在 Agilex FPGA 上构建了两个版本的 Posit(32,2) 加速器:
- Posit(32,2)SM:采用符号-幅度表示(sign-magnitude);
- Posit(32,2)TC:采用补码表示(two's complement),在资源使用上更节省。
硬件实现中,前处理(解码)和后处理(编码)由组合逻辑电路完成,可避免由变量数值范围引起的性能波动。矩阵乘法(GEMM)模块基于 systolic array 构建,结合 pipelined 的乘法与加法单元,在资源受限条件下优化了吞吐量。
3.2 GPU 实现
作者将 SoftPosit 中的核心运算内核(加法、乘法、除法、开方)移植为 CUDA 和 OpenCL GPU kernel,使用32/64位整数指令模拟 POSIT 算术运算。支持矩阵转置和 blocking 的矩阵乘法方式以提高 shared memory 利用率,适配多种 GPU 平台(如 RTX3090、RTX4090、RX7900、V100、H100)。
四、实验与性能分析
4.1 GEMM 运算性能评估
- FPGA:Agilex 实现的 Posit(32,2) 加速器在 N=8000 的方阵 GEMM 中可达 ~202 Gflops。
- GPU:RTX4090 的峰值性能为 ~181 Gflops,但当输入矩阵数值范围较大或较小时性能会下降。
4.2 数值精度评估
使用 Cholesky 与 LU 分解求解线性方程组,比较 POSIT 与 binary32 算术精度:
- 在黄金区间(σ = 10⁻² ~ 10²)内,Posit(32,2) 的误差比 binary32 低约 0.5 ~ 1 位有效数字;
- 当矩阵范数过大或过小时,Posit 精度优势下降。
4.3 功耗效率评估
在执行 LU 分解时各平台功耗与效率如下:
平台 | 功耗 (W) | 性能 (Gflops) | 功耗效率 (Gflops/W) |
---|---|---|---|
Agilex FPGA | 147 | 7.4 | 0.050 |
RTX3090 | 273 | 11.8 | 0.043 |
RTX4090 | 210 | 12.1 | 0.058 |
RX7900XTX | 176 | 13.4 | 0.076(最佳) |
五、分析与讨论
- FPGA在确定性控制、组合逻辑高效性、资源可裁剪性方面表现出色,适用于高可靠场景。
- GPU在通用性、吞吐率、能效比方面优势明显,适合训练类大规模计算任务。
- POSIT 算术在黄金区间的数值精度明显优于 binary32,但其前后处理带来的实现复杂性和性能开销仍是主要瓶颈。
- 当前 FPGA 设计在处理非方阵矩阵时性能下降显著,需要改进 systolic 架构或数据布局策略。
六、结论与展望
本研究首次在统一架构下,系统评估了 POSIT(32,2) 算术在 FPGA 与 GPU 加速器上的实现效果,并通过多个线性代数运算验证了其性能和精度优势。未来工作将包括:
- 针对 POSIT 格式设计专用指令集与硬核支持;
- 扩展支持多位宽(如 POSIT(16,1)、(64,3));
- 在深度学习、科学模拟等实际场景中进行部署验证。
Flo-Posit 是一个由 Raúl Murillo 等人开发的 开源硬件生成工具框架,专门用于在 FPGA 上实现 POSIT 算术核心模块(如加法器、乘法器)。它的主要目标是为不同精度与内部表示格式的 POSIT 算术提供模块化、可综合的 RTL 设计,以便研究者和工程师可以方便地将 POSIT 单元集成到自定义加速器中。
🔧 Flo-Posit 框架的主要特点包括:
-
支持多种内部数值格式:
- Sign-and-Magnitude(符号-幅度)
- Two's Complement(补码表示)
这两种格式可用于表示 POSIT 小数部分(fraction),在不同资源和性能要求下提供权衡选择。
-
生成 RTL(Verilog)代码:
- 使用模板和参数配置,自动生成 POSIT 加法器、乘法器的组合逻辑或流水线版本。
- 可与 FPGA 工具链(如 Quartus、Vivado)集成进行综合和布局布线。
-
开放源代码:
- 仓库地址:https://github.com/RaulMurillo/Flo-Posit
- 提供完整的设计文件、测试平台、仿真脚本,方便二次开发和性能对比。
-
可定制性强:
- 用户可以自定义 POSIT 格式参数(如总位宽、指数位长度
es
); - 支持流水线深度调整,适配不同时钟频率与吞吐需求。
- 用户可以自定义 POSIT 格式参数(如总位宽、指数位长度
📘 研究中的应用示例
在本篇《Evaluation of POSIT Arithmetic with Accelerators》中,作者基于 Flo-Posit 生成了 Posit(32,2) 的加法与乘法模块,并:
- 嵌入 systolic array 架构中,用于实现高效 GEMM(矩阵乘法);
- 评估了两种内部格式在资源占用(逻辑单元数量)、最大时钟频率(Fmax)以及功耗方面的差异;
- 最终选择了 two's complement 格式,因其逻辑资源消耗更少,便于大规模部署。
📝 总结
Flo-Posit 是一个专为研究 POSIT 算术硬件实现而设计的工具,它通过模块化、参数化的设计理念,帮助研究者在 FPGA 平台上快速实现与验证不同配置的 POSIT 算术逻辑单元,是当前 POSIT 社区中非常有代表性的硬件实现工具之一。