基于半精度浮点数的并行计算优化研究与实证分析

王瑞星 ,  吴克坚

内蒙古师范大学学报(自然科学版) ›› 2025, Vol. 54 ›› Issue (05) : 496 -505.

PDF (1972KB)
内蒙古师范大学学报(自然科学版) ›› 2025, Vol. 54 ›› Issue (05) : 496 -505. DOI: 10.3969/j.issn.1001-8735.2025.05.008

基于半精度浮点数的并行计算优化研究与实证分析

作者信息 +

Research and Empirical Analysis on Parallel Computing Optimization Based on Half-precision Floating-point Numbers

Author information +
文章历史 +
PDF (2018K)

摘要

选取五种具有代表性的并行计算算法,包括矩阵乘法、卷积神经网络训练、快速傅里叶变换、 粒子模拟和蒙特卡罗模拟,系统评估半精度浮点数(FP16)在计算效率、资源利用率和数值精度上的表现。实验结果表明,FP16在特定任务中可明显提升计算效率,同时在混合精度策略下可有效平衡性能与精度。

Abstract

This paper selected five representative parallel computing algorithms, including matrix multiplication, convolutional neural network training, fast Fourier transform, particle simulation, and Monte Carlo simulation. The performance of half-precision floating-point numbers (FP16) in terms of computing efficiency, resource utilization rate, and numerical accuracy was systematically evaluated. The experimental results show that FP16 can significantly improve computing efficiency in specific tasks, and performance and accuracy can be effectively balanced under the mixed precision strategy.

Graphical abstract

关键词

半精度浮点数 / 并行计算 / 性能 / 实证分析

Key words

half-precision floating-point number / parallel computing / performance / empirical analysis

引用本文

引用格式 ▾
王瑞星,吴克坚. 基于半精度浮点数的并行计算优化研究与实证分析[J]. 内蒙古师范大学学报(自然科学版), 2025, 54(05): 496-505 DOI:10.3969/j.issn.1001-8735.2025.05.008

登录浏览全文

4963

注册一个新账户 忘记密码

浮点数计算在现代科学计算和工程应用中具有基础性地位,广泛应用于深度学习、物理模拟、金融建模和图像处理等领域1。传统上,单精度(FP32)和双精度(FP64)浮点数是主要选择,满足了高精度计算的需求。然而,随着计算任务复杂性和数据规模的不断增大,这两种格式在内存占用和计算效率上的限制日益明显2。如何在保障计算精度的同时降低资源消耗,已成为高性能计算领域的核心挑战之一。
半精度浮点数(FP16)的引入为解决这一问题提供了有效的手段。FP16作为一种16位的浮点数格式,与FP32和FP64相比,具有存储需求更低、计算效率更高的明显优势3。例如,在深度学习中,FP16已被广泛应用于加速神经网络的训练,并借助硬件优化(如NVIDIA Tensor Cores)进一步释放其潜力4。然而,在科学计算和并行计算领域,FP16的适用性尚需进一步探索,其在复杂计算任务中的表现也亟待全面分析。
为深入研究FP16在并行计算中的实际效果及适用性,设计五种典型数值实验:矩阵乘法(matrix multiplication)、卷积神经网络训练(CNN training)、快速傅里叶变换(FFT)、粒子模拟(particle simulation)和蒙特卡罗模拟(Monte Carlo simulation)。这些实验涵盖了计算密集型、数据密集型和存储密集型任务的代表性场景,将系统评估FP16在计算性能、数值精度和资源利用率等方面的表现。

1 半精度浮点数的理论基础和并行计算中的浮点数精度问题

1.1 浮点数标准概述

浮点数(floating point numbers, FPN)是计算机科学中用于表示实数的一种标准格式。IEEE754标准定义了多种浮点数的表示方法,其中最常见的包括单精度(FP32)、双精度(FP64)和半精度(FP16)。FP16作为16位浮点表示方法,符号位占1位,指数位占5位,尾数位占10位。由于FP16的位宽较小,存储需求和计算带宽相较于FP32和FP64有明显优势,特别适合于内存带宽受限的高效计算场景5。FP16支持非规范数,当指数位为零时,可以表示非常小的数值,这在减少浮点数表示范围中的空隙方面具有重要作用6

1.2 FP16与其他精度浮点数的对比

在精度方面,由于指数和尾数的位数减少,FP16的精度低于FP32和FP64,尤其在表示大范围数值时容易出现精度损失。因此,FP16更适用于精度要求较低的任务,如深度学习的推理阶段。FP16的内存占用仅为FP32的一半,且为FP64的四分之一,明显减少了数据传输的时间和内存带宽的需求,这使得FP16在大规模数据处理、深度学习以及科学计算等场景中表现出色。现代计算硬件也为FP16提供了专门优化支持,以应对高性能计算需求。自Volta架构起,NVIDIA推出了专门支持FP16计算的Tensor Cores,这些核心可以在每个时钟周期内执行多个FP16运算,明显加速矩阵乘法和卷积操作,从而大幅提高深度学习模型训练的速度78。AMD的Radeon GPU也支持FP16运算,在图像处理和实时AI推理中具有明显优势,尤其在实时图形渲染和大规模并行计算任务中表现突出9。混合精度计算通过结合FP16和FP32的优点,能够在保持高精度的同时实现更高的计算效率。主流的深度学习框架(如Tensor Flow和PyTorch)已广泛支持混合精度训练,可以在保持数值稳定性的同时提高训练速度。

1.3 舍入行为与误差控制

FP16的位宽较小,舍入误差较FP32和FP64更容易发生。在并行计算中,这种误差可能会对数值稳定性产生明显影响。为了最小化舍入误差,IEEE 754标准采用了“最近偶数舍入”策略。该策略通过对尾数进行四舍五入,将误差的平均值控制在最小范围内10。为了进一步控制误差,实验采用了Kahan求和算法和分块求和算法等高精度数值计算方法,这些方法能够有效减少FP16运算中的误差积累,从而提高数值计算的精度。

1.4 适用场景与混合精度策略

1.4.1 FP16适用场景

FP16在多个领域展现出巨大的应用潜力。如在深度学习中,FP16已经广泛应用于模型的训练。特别是在混合精度策略的支持下,FP16能够在加速计算的同时,降低显存占用,提高训练效率。Li等11提出了一种层次化混合精度训练方法,该方法利用FP16进行训练,提高了大规模AI模型的计算效率。在图形学中,FP16常用于表示像素和纹理信息,这不仅能够明显降低内存需求,还能提升实时渲染速度。Ho等12研究了一种动态混合精度框架(GRAM),能够在GPU应用中实现FP16和FP32之间的动态调整,从而提升渲染和计算任务的性能。在高性能计算(HPC)方面,FP16适用于对精度要求较低的预处理任务,如数据归一化、特征降维等。Hanindhito等13研究了GPU Tensor核心在HPC和科学计算中的应用,并发现FP16的计算吞吐量远高于FP32。FP16因其低功耗和高效率的特性,在实时计算场景,如增强现实(AR)和虚拟现实(VR)中也具有广泛应用。Sun14研究了GPGPU 在嵌入式系统中的使用,指出FP16在移动设备上可以有效提升推理效率。

1.4.2 混合精度策略

混合精度计算是一种结合FP16和FP32计算的策略,旨在提升计算性能的同时减少显存占用,并在某些应用中保持足够的数值精度。其核心思想是在计算过程中根据不同计算单元的需求,动态调整数据精度,以在计算效率和数值稳定性之间取得平衡。

在混合精度计算中,通常采用以下策略。

(1)计算关键路径时保持FP32。对数值精度要求较高的运算(如梯度累积、矩阵归约)仍然使用FP32,以减少精度损失导致的累积误差。

(2)使用FP16加速计算密集型任务。对于计算密集型但对精度要求相对较低的运算(如卷积操作、矩阵乘法),使用FP16以提升吞吐量和减少显存占用15

(3)自动精度切换。使用 torch.cuda.amp.autocast( )自动管理FP16和FP32之间的切换,以降低转换开销,同时优化数值稳定性16

混合精度计算在深度学习、并行数值计算等领域具有明显优势,但在某些场景下可能因转换开销、数值误差积累导致效果不如FP16或FP32。因此,在具体应用中,应根据计算任务特点调整精度策略:计算密集型任务(如CNN训练、矩阵乘法)推荐使用混合精度,以提升吞吐量并减少显存占用17;误差敏感任务(如FFT、粒子模拟)需要FP32归约计算,以减少FP16误差积累18;高度并行任务(如蒙特卡罗模拟)时FP16计算吞吐量较高,但应结合FP32进行误差修正19

1.5 并行计算与浮点数精度问题

并行计算是一种通过同时执行多个计算任务来加速整体计算过程的技术。在现代计算中,并行计算被广泛应用于多核CPU和GPU架构,以高效处理海量数据和复杂计算任务。多核CPU通过同时运行多个线程实现任务并行,而GPU则依靠大量小型计算核心提供极高的并行度,尤其在图形渲染、科学计算和深度学习任务中表现出色20。并行计算的核心目标是将复杂的计算任务拆解为多个子任务并行处理,以缩短计算时间,提高处理效率。在并行计算中使用低精度浮点数(如FP16)时,可能会出现如下问题。

(1)精度与数值稳定性问题。并行计算中每个子任务的计算结果都可能引入舍入误差,这些误差在结果汇总阶段会被放大,出现累计误差。例如,在矩阵乘法和卷积神经网络训练等任务中,FP16的舍入误差可能在多个运算步骤中不断累积,导致计算结果与真实值偏差明显。FP16在涉及大量加法或减法操作时容易导致有效位数的丢失,特别是在处理范围差异较大的数值时,这可能会引发明显的舍入误差,导致数值不稳定。此外,归约操作(如求和)是并行计算中的常见步骤。FP16在执行归约操作时,由于其精度较低,容易引入明显的舍入误差。这种问题在处理大规模数据时尤为突出。

(2)舍入误差与溢出问题。FP16的指数范围较小,因此在处理非常大或非常小的数值时,容易发生溢出或下溢。这在并行计算中尤为明显,因为多个计算单元可能同时遇到溢出问题,导致整体计算结果不准确或任务失败。

(3)算法适配性。并非所有算法都适合使用FP16,例如,对精度要求较高的数值计算任务,FP16可能会导致无法接受的误差。为了在保证效率的同时保持精度,通常需要调整算法设计,如采用混合精度策略,将关键计算步骤切换至FP32或更高精度。

为缓解上述问题并充分利用FP16的性能优势,本研究数值实验采取以下多种策略。

(1)混合精度计算。通过将高精度计算(如FP32)与FP16结合,混合精度计算能够在关键计算步骤中提供更高的精度,同时利用FP16提升吞吐量。在矩阵乘法中,采用torch.cuda.amp.autocast()进行自动精度管理,FP16计算矩阵乘法:autocast允许FP16进行计算,加速矩阵乘法。FP32进行累加:计算完成后,结果转换为FP32进行误差计算,以减少精度损失。在CNN训练任务中,使用torch.cuda.amp.GradScaler()进行梯度缩放,前向传播使用 FP16用来减少显存占用,加速计算。同时使用梯度缩放,避免FP16计算导致梯度下溢,保证训练稳定性。在FFT计算中,使用autocast结合FP32归约,FP16计算FFT可提高吞吐量,减少内存占用。最终误差计算时,将FP16结果转换为FP32,减少累计误差。在粒子模拟中,使用autocast处理N体力学计算,使用FP16计算力和加速度用来减少计算开销,但在关键部分依然保持FP32,以防止数值不稳定,提升模拟精度。在蒙特卡罗模拟中,使用autocast进行精度动态调整,FP16计算点积以减少计算时间,提高吞吐量。最终计算误差时转换为FP32,减少误差累积。

(2)误差控制与数值稳定性。在利用FP16计算矩阵乘法和蒙特卡罗模拟中,由于舍入误差的累积,计算结果可能与FP32存在较大偏差。为减少误差积累,使用Kahan求和算法和分块归约策略。在FFT计算和粒子模拟中,误差可能随计算步数增大而积累。因此,在数值实验中采用误差归约策略,FP16计算后立即转换为FP32进行归约。此外,还采用了累积误差控制。例如,在粒子模拟中,计算加速度时使用FP16,但在计算总动量时将其转换为FP32,以减少数值漂移。再如蒙特卡罗模拟,计算π时,使用FP16进行大规模点计算,但在最终归约计算时使用FP32,减少误差放大。

(3)GPU并行优化。GPU并行计算可以有效提升FP16的计算效率,但如果分配不均或同步不合理,可能会导致计算开销增加。本研究数值实验还采用了数据并行优化、计算任务分块和CUDA同步优化。具体来说,在矩阵乘法和蒙特卡罗模拟中,使用torch.chunk()进行数据并行,避免某些GPU负载过重,确保计算任务均衡分配,同时减少跨GPU传输的数据量,提高吞吐量。在粒子模拟中,每个GPU计算部分粒子轨迹,以减少单GPU负载,这样可以限制每次计算的粒子数,减少显存占用,提高计算稳定性,同时采用block_size控制计算粒度,在多GPU上均匀分布任务。在FFT和蒙特卡罗模拟中,数据计算完成后需同步所有GPU结果,防止GPU计算未完成时主线程进入下一步,避免数据错误,同时也确保所有GPU计算完毕后再进行误差归约,提高结果一致性。

2 数值实验设计与分析

为全面评估FP16在并行计算中的性能和适用性,选择五种具有代表性的数值计算任务:矩阵乘法、卷积神经网络训练、快速傅里叶变换、粒子模拟和蒙特卡罗模拟。这些任务涵盖了计算密集型、 数据密集型和存储密集型场景,旨在系统分析FP16的优势与局限性。

2.1 实验平台与配置

数值实验在Google Kaggle平台上运行,平台的硬件和软件配置见表1。特别地,实验使用了NVIDIA Tesla T4 GPU,该硬件支持FP16专用的Tensor Cores,能够明显加速半精度计算。实验代码基于PyTorch框架开发,并采用NVIDIA Apex工具库支持混合精度运算。所有数值实验分别在FP16、FP32和混合精度模式下运行,以便全面比较性能、精度和资源占用。

2.2 矩阵乘法实验设计

矩阵乘法是一种典型的计算密集型任务,广泛应用于图像处理、机器学习及科学模拟等领域。实验中,构造了从2 048×2 048到16 384×16 384不同规模的随机稠密矩阵,评估三种精度模式下的计算时间、吞吐量、显存占用及误差,分析其优缺点。实验中特别使用数据并行(data parallel)技术进行分布式矩阵运算,以最大化硬件利用率。

2.3 卷积神经网络训练实验设计

卷积神经网络训练是深度学习领域最典型的计算任务之一,其主要计算瓶颈在于大规模卷积操作的高计算复杂度和高显存占用。本实验使用CIFAR-10数据集训练ResNet-50模型,分别设置五种批量大小(batch size),记录每种精度模式下的训练时间、吞吐量及显存占用情况。为减少显存占用并保证数值稳定性,实验结合了梯度缩放(gradient scaling)和混合精度策略。

2.4 快速傅里叶变换实验设计

快速傅里叶变换是频域分析中的核心算法,广泛用于信号处理和科学模拟中。实验中构造了从214222的不同信号规模,评估三种精度模式下FFT计算的时间、吞吐量、显存占用及误差。实验特别关注FP16在计算大规模FFT时的性能优势,并分析其潜在数值误差的累积效应。

2.5 粒子模拟实验设计

粒子模拟广泛应用于物理模拟,如N体问题和分子动力学模拟。本实验模拟了10 000到200 000粒子规模的交互,通过位置和速度的迭代更新评估粒子系统的动态行为。实验记录每次模拟的运行时间、吞吐量及显存占用,同时分析FP16带来的数值误差及其对模拟结果的影响。为提高计算效率,实验使用torch.chunk分块实现显式分布式计算,降低单GPU负载。

2.6 蒙特卡罗模拟实验设计

蒙特卡罗模拟是一种基于随机抽样的数值方法,广泛用于金融风险分析和物理模拟,具有强大的计算密集性和易于并行化的特点。实验通过在二维平面内随机生成从5×1085×109的同规模成点,计算其落入单位圆内的比例来估算圆周率π,评估三种精度模式在计算效率、显存占用及误差方面的表现。实验特别关注FP16在大规模抽样中的性能提升,并探讨其对模拟结果准确性的影响。

2.7 分布式计算优化

为了充分利用双GPU的并行计算能力,数值实验中还采用了PyTorch的分布式数据并行(distributed data parallel, DDP)模式,将计算任务均匀分配到两块GPU上。这种方式明显降低了单GPU负载,提高了总体吞吐量。此外,实验中通过分块处理优化内存管理,有效避免了显存溢出问题。

3 实验结果与分析

对五种并行计算任务在FP16、FP32和混合精度下的表现进行系统分析,重点涵盖运行时间、吞吐量、数值精度以及资源利用率等指标。

3.1 实验结果概述

实验结果显示,FP16和混合精度在运行时间和吞吐量上明显优于FP32,尤其是在计算密集型任务中。虽然FP16在数值精度方面存在一定误差,但在许多应用场景中,这种误差是可以接受的。此外,混合精度策略在性能与精度之间实现了较好的平衡。

3.2 实验结果分析

3.2.1 运行时间与吞吐量比较

(1)矩阵乘法。图1图2分别显示了不同矩阵规模下的运行时间和吞吐量(GFLOPS)。结果表明,随着矩阵规模的增加,FP16和混合精度模式明显缩短了运行时间并提升了吞吐量。在最大规模(16 384×16 384)下,FP32运行时间为20.38 s,吞吐量为431 GFLOPS;FP16运行时间缩短至5.84 s,吞吐量达1 505 GFLOPS;混合精度运行时间为6.16 s,吞吐量接近FP16,达到1 453 GFLOPS。FP16和混合精度模式较FP32分别提升了约70%的运行效率,显示出其在大规模计算任务中的明显优势。

(2)卷积神经网络训练。图3图4展示了不同批次大小下的CNN训练时间和吞吐量(samples/s)。在较大批次(如4 096和8 192)下,FP32运行时间为85.80 s,吞吐量为2 913.68 samples/s;FP16运行时间减少至54.37 s,吞吐量提升至4 597.94 samples/s,提升幅度约57.8%;混合精度表现接近FP16,运行时间为54.72 s,吞吐量为4 568.46 samples/s。FP16和混合精度模式在深度学习任务中明显提升了效率,同时保持了较低的资源占用。

(3)快速傅里叶变换(FFT)。不同规模信号的FFT实验结果(图5-6)表明:在信号规模较小时,FP16和混合精度模式的性能优势有限;随着信号规模增大(如4 194 304点),FP16的吞吐量达到5.42 operations/s,为FP32的1.42倍;混合精度模式的性能则与FP16接近,略高于FP32。FP16在大规模信号处理中的高吞吐量展示了其计算密集型任务的潜力。

(4)蒙特卡罗模拟。图7图8显示了蒙特卡罗模拟的运行时间和吞吐量(points/s)。FP16和混合精度模式在所有点数规模下均展现明显的性能优势。在最大点数(108)下,FP16和混合精度的吞吐量约为FP32的1.5倍。此外,混合精度模式在吞吐量和误差平衡方面略优于FP16,显示了动态切换数据类型的优势。

(5)粒子模拟。如图9图10所示,FP16明显提升了粒子模拟的吞吐量,尤其在大规模模拟中(200000粒子),吞吐量接近FP32的2倍(4 128 particles/s对比2 400 particles/s)。混合精度的性能介于FP16与FP32之间,提供了更平衡的计算效率和精度。

3.2.2 资源利用率比较

(1)显存分配。图11图15展示了各任务的显存分配情况。FP16和混合精度明显降低了显存占用。例如,在矩阵乘法的最大规模下,FP32分配显存为1 024 MB,而FP16仅使用512 MB。在CNN训练中,FP16和混合精度模式将显存保留需求降低了约55%,尤其在大批量训练(batch size=8 192)时效果尤为明显。

(2)显存保留。FP16的显存保留需求明显低于FP32。例如,在FFT最大规模信号下,FP16的显存保留仅为FP32的58.6%。

3.2.3 数值精度比较

(1)矩阵乘法。FP16和混合精度在精度方面存在一定的误差。由图16可知,在所有规模下,FP16和混合精度与FP32运算结果之间存在微小的误差,这些误差随矩阵规模的增大而增加。在2 048×2 048规模下,FP16模式的误差为0.006 36,而在16 384×16 384规模下增加至0.018 17。混合精度的误差略高于FP16,在最大规模下达到了0.036 32。尽管存在误差,但在许多应用场景中,这样的误差是可以接受的,尤其是在训练深度学习模型等对精度不敏感的任务中。因此,FP16和混合精度在性能和内存效率方面的优势足以弥补这些微小的精度损失。

(2)卷积神经网络训练。图17显示FP16的训练精度较FP32有小幅下降,尤其在大批量训练时(如8 192),FP32精度为34.30%,FP16精度为34.02%,主要原因是FP16的数值表示范围有限,计算误差积累导致模型收敛精度略有下降。此外,混合精度在小到中等批量大小下(如512、1 024和2 048),综合了FP16的性能优势和FP32的精度稳定性,比如在批次大小为1024时,混合精度的训练精度为50.23%,高于FP16的49.22%,这也表明混合精度可以在性能和精度之间取得更好的平衡。

(3)FFT。不同信号规模的FFT的误差如图18所示。FP16和混合精度模式由于使用16位浮点表示,精度较FP32低,尤其是在大规模信号中累计误差较大。例如,在(4 194 304)信号下,FP16和混合精度的误差分别达到了1 155.08和1 155.64。实验结果也表明信号规模越大,FP16和混合精度的误差越明显。例如,在16 384点信号下,FP16模式的误差为72.72;在4 194 304点信号下,FP16模式的误差增长到1 155.08。混合精度模式的误差略高于FP16,这是FP32和FP16在不同运算中的切换导致误差叠加。

(4)蒙特卡罗模拟。利用不同规模的点对圆周率进行蒙特卡罗模拟的误差见图19。FP32的误差始终维持在10-5以下,计算结果高度精确。而随点数规模增大,FP16和混合精度的误差略有增加(从3.5×10-3增至3.6×10-3)。这是FP16的精度限制导致的累计误差增加,但对圆周率的估算影响较小,仍在可接受范围内。

(5)粒子模拟。由图20可以看出,FP32作为基准精度无误差。FP16和混合精度的误差稳定在4.96(相对基准值),显示了FP16在数值模拟中的一定误差,但在实际模拟中可接受。混合精度的误差接近FP16,但仍稍优于FP16。

3.3 性能比较

3.3.1 计算效率

结果表明,FP16和混合精度计算在大多数情况下能提高吞吐量和减少显存占用,但在某些计算任务中,混合精度计算效率稍低于FP16。这一现象的主要原因在于autocast在FP16和FP32之间切换时,需要进行数据格式转换,引入额外的计算开销。此外,混合精度策略在关键计算步骤(如累积求和、梯度计算)采用FP32,以减少数值误差,而FP16可以全程保持较快的计算速度,因此在某些情况下FP16计算比混合精度更快。

具体来说,对于矩阵乘法,FP16模式在计算时间上明显优于FP32,吞吐量较FP32提高2~3倍。混合精度模式的计算效率接近FP16,但在某些规模下吞吐量略低于FP16,主要原因在于混合精度模式的FP32计算比例相对较大,导致部分计算速度下降,但同时它能够减少FP16的数值误差累积。对于CNN,FP16训练速度较快,吞吐量提升约55%。混合精度模式的训练吞吐量略低于FP16,但整体表现仍优于FP32,主要原因在于梯度缩放在混合精度模式下需要动态调整梯度缩放因子,可能引入额外计算开销。对于FFT,FP16模式的吞吐量明显高于FP32,混合精度模式接近FP16,而混合精度在FFT计算中仍需部分FP32计算,导致吞吐量略低于纯FP16。粒子模拟在FP16下,吞吐量上领先,混合精度紧随其后,二者均明显优于FP32。分析发现,粒子模拟涉及大量向量运算,FP16优势明显,混合精度在误差控制上做了一定调整,计算效率略有下降。FP16精度下的蒙特卡罗模拟吞吐量最高,混合精度与FP16基本持平,混合精度之所以低于FP16,主要是因为蒙特卡罗方法依赖随机数计算,FP16已经足够精确,混合精度模式的额外FP32计算并未带来明显提升。

3.3.2 数值精度

虽然FP16在计算效率上占优,但混合精度模式在数值精度上的表现依然优于 FP16。在某些任务中,混合精度计算的误差比FP16低,但仍高于FP32。在矩阵乘法中,FP16误差在最大规模(16 384×16 384)下达到0.018 17,混合精度误差为0.036 32,出现这种结果的主要原因在于部分计算仍利用FP16进行,并且FP16结果转换至FP32时出现额外舍入误差。CNN实验中,FP16训练精度略低于FP32,但混合精度在梯度缩放的优化下,整体精度仍然接近FP32。FFT计算中涉及大量的复数运算,FP16的动态范围较小,导致额外的舍入误差,因此在FP16下,FFT误差较高,混合精度虽略优于FP16,但仍明显高于FP32,粒子模拟中的物理计算对数值精度要求较高,混合精度模式在关键计算步骤使用FP32,因此误差略低于FP16(约4.96)。由于蒙特卡罗方法基于随机数采样,而FP16在大规模数据上可能会产生更高的累积误差。因此实验结果也显示FP16误差最高,混合精度次之,虽然比FP32高,但也达到某种意义上的平衡,体现出混合精度模式的优势。

3.3.3 显存占用

混合精度模式的显存占用介于FP16和FP32之间,在所有任务中表现稳定。如在CNN训练中,混合精度模式显存占用约为FP32的55%,仅比FP16略高。在矩阵乘法中,混合精度模式显存占用约为FP16的1.2倍,但远低于FP32。在FFT、粒子模拟、蒙特卡罗模拟等计算任务中,混合精度模式的显存占用与FP16相当,但计算稳定性更高。

4 结论与讨论

本文系统研究了FP16在并行计算中的应用性能,通过矩阵乘法、卷积神经网络训练、快速傅里叶变换、粒子模拟和蒙特卡罗模拟等五种典型计算任务,深入分析了FP16在计算效率、资源利用率和数值精度方面的表现。结果表明,FP16在计算密集型任务中展现出明显优势,特别是在硬件优化支持(如Tensor Cores)和混合精度策略的配合下,FP16能够实现性能的明显提升,同时降低显存占用。

尽管FP16在资源占用和吞吐量方面表现优异,但其较低的精度导致数值误差的问题在某些任务中较为突出。实验进一步验证了混合精度计算的有效性,通过动态结合FP16和FP32的优点,在性能和精度之间取得平衡。综合来看,FP16在大多数计算场景中均可满足需求,特别是在深度学习、科学模拟和高性能计算领域,为提升计算效率提供了有效手段。此外,FP16作为一种高效的浮点数表示形式,在提升计算效率的同时明显减少了资源占用,具有广泛的应用潜力。未来的研究应聚焦于FP16的精度优化与应用拓展,使其在更多领域实现性能与精度的最佳平衡。通过结合硬件创新和算法改进,FP16有望成为并行计算和高性能计算的关键推动力,在多样化场景中展现更大的应用价值。

参考文献

[1]

YANG CXIANG S WWANG J Xet al. A high performance and full utilization hardware implementation of floating point arithmetic units[C]//2021 28th IEEE International Conference on Electronics, Circuits, and Systems (ICECS).Dubai: IEEE, 2021:1-4.

[2]

SAKAMOTO RKONDO MFUJITA Ket al. The effectiveness of low-precision floating arithmetic on numerical codes: A case study on power consumption[C]//Proceedings of the International Conference on High Performance Computing in Asia-Pacific Region. Fukuoka: ACM, 2020:199-206.

[3]

HO N MWONG W F. Exploiting half precision arithmetic in Nvidia GPUs[C]//Proceedings of the IEEE High Performance Extreme Computing Conference. Waltham: IEEE, 2017:1-7.

[4]

KUO P HHUANG Y HHUANG J D. Configurable multi-precision floating-point multiplier architecture design for computation in deep learning[C]//2023 IEEE 5th International Conference on Artificial Intelligence Circuits and Systems (AICAS). Hangzhou: IEEE, 2023:1-5.

[5]

ZURAS DCOWLISHAW MAIKEN Aet al. IEEE standard for floating-point arithmetic [S]. IEEE Std 754-2008.New York: IEEE, 2008:1-70.

[6]

WAN J LWANG W QZHANG Z G. Enhancing computational efficiency in 3-D seismic modelling with half-precision floating-point numbers based on the curvilinear grid finite-difference method [J]. Geophysical Journal International2024238(3):1595-1611.

[7]

王雨薇, 吉青, 卜景德, . ROCm平台半精度矩阵乘法的实现和优化[J]. 计算机工程与设计202445(8): 2313-2319.

[8]

HAIDAR ABAYRAKTAR HTOMOV Set al. Mixed-precision iterative refinement using tensor cores on GPUs to accelerate solution of linear systems[J]. Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences2020476(2243):20200110.

[9]

LI X YLI AFANG Bet al. Discovery of floating-point differences between NVIDIA and AMD GPUs[C]//2024 IEEE 24th International Symposium on Cluster, Cloud and Internet Computing (CCGrid).Philadelphia:IEEE, 2024:663-666.

[10]

刘斌. 一种基于IEEE-754标准的浮点运算加速器的设计及性能优化[D]. 西安: 西安电子科技大学, 2020.

[11]

LI HWANG Y ZHONG Yet al. Layered mixed-precision training: A new training method for large-scale AI models[J]. Journal of King Saud University-Computer and Information Sciences202335(8):101656.

[12]

HO N MDE SILVA HWONG W F. GRAM: A framework for dynamically mixing precisions in GPU applications[J]. ACM Transactions on Architecture and Code Optimization202118(2):1-24.

[13]

HANINDHITO BJOHN L K. Accelerating ML workloads using GPU tensor cores: The good, the bad, and the ugly[C]//Proceedings of the 15th ACM/SPEC International Conference on Performance Engineering. London: ACM, 2024:178-189.

[14]

SUN W. Challenges and opportunities of using GPGPUs for deep learning[D]. Eindhoven: Eindhoven University of Technology, 2024.

[15]

MISHRA S MTIWARI ASHEKHAWAT H Set al. Comparison of floating-point representations for the efficient implementation of machine learning algorithms[C]//2022 32nd International Conference Radioelektronika (RADIOELEKTRONIKA). Kosice: IEEE, 2022:1-6.

[16]

VENKATARAMANI SSRINIVASAN VWANG Wet al. RaPiD: AI accelerator for ultra-low precision training and inference[C]//2021 ACM/IEEE 48th Annual International Symposium on Computer Architecture (ISCA). Valencia: IEEE, 2021:153-166.

[17]

ABDELFATTAH AANZT HBOMAN E Get al. A survey of numerical linear algebra methods utilizing mixed-precision arithmetic[J]. The International Journal of High Performance Computing Applications202135(4):344-369.

[18]

HAFEZAN MATOOFIAN E. Mixed-precision architecture for GPU tensor cores[C]//2023 IEEE Smart World Congress (SWC). Portsmouth: IEEE, 2023:1-8.

[19]

SILVANO CIELMINI DFERRANDI Fet al. A survey on deep learning hardware accelerators for heterogeneous HPC platforms[J]. arXiv Prepint arXiv2023: 2306.15552.

[20]

NAVARRO C AHITSCHFELD-KAHLER NMATEU L. A survey on parallel computing and its applications in data-parallel problems using GPU architectures[J]. Communications in Computational Physics201415(2):285-329.

基金资助

高等学校大学数学教学研究与发展中心2022年教改资助项目“‘新医科’背景下医学数学内容改革与体系构建”(CMC20220404)

AI Summary AI Mindmap
PDF (1972KB)

181

访问

0

被引

详细

导航
相关文章

AI思维导图

/