[论文解读] Implementation of float-float operators on graphics hardware
本文提出了一种在GPU上使用float-float表示法的软件级44位浮点数运算仿真,通过组合两个单精度浮点数实现更高精度。该方法利用GPU流处理实现高性能、高精度的运算,适用于需要高于硬件原生单精度支持的高精度应用,实测精度在大多数操作中均符合预期理论范围。
The Graphic Processing Unit (GPU) has evolved into a powerful and flexible processor. The latest graphic processors provide fully programmable vertex and pixel processing units that support vector operations up to single floating-point precision. This computational power is now being used for general-purpose computations. However, some applications require higher precision than single precision. This paper describes the emulation of a 44-bit floating-point number format and its corresponding operations. An implementation is presented along with performance and accuracy results.
研究动机与目标
- 为解决GPU缺乏双精度浮点数支持的问题,从而限制高精度应用的精度。
- 在仅原生支持单精度浮点运算的GPU硬件上实现更高精度的算术运算。
- 开发并评估一种基于软件的float-float表示法,利用两个32位浮点数模拟44位精度。
- 评估该float-float实现方案在现代GPU上的性能与精度,特别是与基于CPU的实现方案进行比较。
- 识别并解决实现中的精度问题,特别是涉及异号操作数的边界情况。
提出的方法
- float-float表示法将一个数表示为两个单精度浮点数之和,从而实现比标准32位浮点数更高的精度。
- 基本算术运算(加法、乘法及融合乘加)通过误差补偿算法实现,以保持精度。
- 使用Brook这一GPU编程的高级语言高效地进行算法原型设计与测试。
- 该方法依赖GPU原生的单精度算术运算及纹理内存来存储中间结果。
- 算法设计旨在最小化指令级开销,并充分利用GPU的数据级并行性。
- 开发了自定义测试框架,生成随机测试向量,并与MPFR结果对比以验证精度。
实验结果
研究问题
- RQ1在仅原生支持23位尾数单精度浮点数的GPU上,软件级float-float表示法能否实现44位精度?
- RQ2GPU上float-float运算的性能与CPU上等效运算相比如何,特别是在大规模数据集上的表现?
- RQ3float-float实现的实际精度如何?其与理论预期的偏差程度如何?
- RQ4为何某些运算(如Add22)的误差高于预期?这是否可归因于硬件特定行为?
- RQ5float-float方法能否在Cg或OpenGL等低级GPU语言中高效优化,以获得更好的性能?
主要发现
- float-float实现的最大观测误差为Add12的-48.0 ULP,略高于理论预期的精确结果,表明可能存在硬件特定的舍入异常。
- Mul12运算被发现是精确的,与所选表示法和算法的理论预期一致。
- Add22和Mul22运算表现出更高的误差(分别为-33.7和-45.0 ULP),主要由于算法复杂性及操作数交互中的边界情况。
- GPU上基本float-float运算(加法、乘法、乘加)的执行时间几乎相同,表明GPU驱动程序实现了高效的指令调度与合并。
- Add22和Mul22运算的耗时约为基本运算的两倍,表明其内部算法检查带来了更高的计算开销。
- GPU与CPU之间的性能差距显著:对于GPU工作负载,GPU性能优于CPU约25倍;对于CPU工作负载,GPU性能优于CPU约3000倍,凸显了GPU在大规模数据处理中的效率优势。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。