浮点计算的演变是硬件与软件协同进化的结果,推动了科学研究和人工智能的进步。未来,混合精度计算、仿真、能效设计及非标准数据类型等技术将继续推动浮点计算的发展,以满足不断变化和增长的应用需求。论文Hardware Trends Impacting Floating-Point Computations In Scientific Applications探讨了在受到算法进步、架构创新以及现代技术(如人工智能和高性能计算)不断增长的计算需求的影响下,浮点运算的演化和发展。
论文作者为Jack Dongarra, John Gunnels, Harun Bayraktar, Azzam Haidar, Dan Ernst,来自University of Tennessee和Nvidia。
1. 引言
浮点计算在现代科学应用中具有重要地位,因其能够表示广泛范围内的实数,并为涉及物理、化学和工程的精密计算提供必要的精度。在几十年的发展过程中,浮点计算受到了科学问题日益复杂化的驱动,特别是在深度神经网络(DNN)等新兴计算模式的出现下,需求不断增长。
最初,科学计算所需的计算资源十分有限,而现今的人工智能和高性能计算(HPC)对浮点计算的需求空前巨大。尤其在大数据和深度学习领域中,计算需要处理大量的矩阵运算和非线性优化问题,这就对现有的硬件架构提出了更高的要求,不仅是为了提高计算速度,还有减少能耗以及平衡精度与效率的挑战。
2. 浮点计算的演变
在20世纪50年代中期之前,浮点运算大多数通过软件仿真来实现,计算机利用定点运算模拟浮点数的运算。尽管这一过程功能上可行,但却极为耗时和资源密集。每一次浮点运算都需要大量的CPU周期,这使得这些计算在相较于整数运算时显得尤为缓慢。
到了20世纪80年代,浮点协处理器的引入,如Intel 8087等,极大地推动了浮点计算的效率。协处理器是独立于CPU的硬件组件,专门处理浮点计算,这种独立性提高了系统的计算速度,减轻了CPU的负担,从而使得计算机可以处理更复杂的科学问题。尽管增加了系统硬件的复杂度,协处理器却成为高性能系统的标配,为科学计算和模拟提供了快速支持。
1989年,Intel推出的x486处理器直接将浮点单元(FPU)集成到了中央处理器(CPU)中。这一变化大幅简化了硬件设计,同时也提升了浮点运算的性能,使得浮点计算成为普通计算的标准功能之一。集成FPU的出现使得计算机不仅仅是科学计算的工具,也逐步扩展到了包括图形渲染、模拟和多媒体等多种领域。
GPU的出现和普及是浮点计算发展的一个里程碑。最初,GPU是为满足2D和3D图形渲染的需求而开发的,其并行计算的特点使得它在浮点计算方面有着天然的优势。在20世纪90年代末和2000年代初,NVIDIA的GeForce系列等可编程GPU的推出,使得GPU能够不仅仅用于图形渲染,还可以用于科学计算和深度学习。这一变革极大地拓展了GPU的应用领域,使其成为现代HPC和AI中不可或缺的一部分。
3. 最近的浮点计算趋势
随着深度学习的兴起,特别是大量神经网络的训练和推理,计算过程中的浮点运算开始朝着低精度(如FP16、BF16)方向发展。这些类型的浮点数虽然在精度上有所牺牲,但在计算速度和能耗方面有显著的优势。人工智能模型的容错性允许这种低精度的使用,从而提升整体的计算速度,并减少能量消耗。
为了应对不同任务对精度和性能的不同需求,混合精度计算逐渐成为一种主流的解决方案。混合精度计算通过动态调整计算过程中使用的浮点精度,以达到在性能和精度之间的最优平衡。例如,在不需要高精度的部分使用FP16或BF16,而在需要准确性的关键部分则使用FP32或FP64。这种技术尤其在AI训练和高性能计算中得到广泛应用,不仅显著减少了计算时间,还提高了能效。
现代硬件系统中,仿真技术的应用为扩展现有硬件的计算能力提供了灵活性。例如,可以在低精度硬件上仿真高精度浮点运算,从而在不更换硬件的前提下满足高精度的需求。这一灵活性为AI和高性能计算等领域带来了巨大的优势,使得这些系统可以应对不断变化的需求。
4. 浮点计算的挑战
在浮点计算中,高精度(如FP64)虽然可以提供更高的计算准确性,但也带来了更高的计算成本,包括速度和能耗的增加。在许多AI工作负载中,低精度的浮点数(如FP16)可以在较低的成本下提供足够的计算精度,但在科学计算中,这种精度可能不足以满足实际需求。因此,系统设计者在选择浮点格式时,必须考虑到应用的具体需求,找到精度与效率的平衡。
专用硬件(如NVIDIA的Tensor Core)在特定任务上具有极高的效率,但缺乏处理广泛应用的灵活性。而通用处理器则在灵活性上占据优势,但在执行特定计算时效率不及专用硬件。如何在系统设计中兼顾专用和通用硬件的优势,是浮点计算面临的另一个重要挑战。
5. 架构创新及其影响
异构计算结合了不同类型的处理器(如CPU、GPU和加速器),用于优化浮点计算的性能。异构计算的核心思想是针对每种任务选择最合适的处理器,从而在性能和能耗之间找到最佳平衡。例如,在LLNL和ORNL部署的Summit和Sierra超算系统中,采用了NVLINK技术将CPU和GPU紧密耦合,使得系统可以高效地处理从稀疏计算到高通量科学计算等多样的工作负载。
随着系统功耗不断增加,能源效率逐渐成为影响系统设计的关键因素之一。在高性能计算系统和数据中心中,为了应对功耗问题,设计者不断推动低功耗浮点单元(FPU)和新型架构的研发,尽可能在保持高性能的同时降低能耗。
6. 浮点计算在AI和HPC中的角色
在AI工作负载中,特别是深度学习模型的训练中,大量矩阵运算的计算需求推动了低精度浮点计算的普及。Tensor Core等专用硬件的引入,使得这些大规模矩阵运算的处理效率得到了极大提升,同时减少了训练时间和能耗。
与AI不同,科学计算通常需要高精度(如FP64)以保证结果的准确性。科学模拟(如流体动力学和分子动力学)中,任何精度的丧失都可能导致错误的结果。因此,科学计算更倾向于使用高精度的浮点运算,而低精度通常只能在某些阶段作为加速手段使用。
7. 硬件对软件的影响
硬件的性能,特别是浮点运算能力,决定了软件的能力上限。例如,GPU和Tensor Core等硬件的出现,使得PyTorch、TensorFlow等深度学习框架得以有效地处理大规模矩阵运算,推动了AI的发展。
8. 软件对硬件的影响
随着AI和科学计算对性能、效率的要求不断提升,硬件的发展也逐渐受到软件的推动。例如,深度学习模型需要处理巨大的数据集,对计算能力和内存带宽提出了严苛的要求,这促使硬件制造商不断研发更高性能和更高能效的处理器。
9. 非标准数据类型
在标准浮点数(如FP8到FP64)之外,还有一些非标准的数据类型逐渐兴起,例如Posit、脉冲神经网络(SNN)以及模拟计算等。这些数据类型在特定应用场景下具有明显优势,尤其是在对能效要求极高的场合。
10. 算法复杂性和内存带宽
论文指出,算法的复杂性对浮点运算效率具有显著影响。高带宽内存(HBM)的引入和片上存储层级的改进,使得内存操作的延迟得以减少,浮点运算的效率得以提高。
11. 浮点计算的未来方向
随着AI和科学计算的不断发展,混合精度计算在未来将变得越来越重要,通过动态调整精度,可以进一步优化系统的性能和能效。
仿真技术将继续在浮点计算中发挥重要作用,特别是在新应用对高精度或特定计算的需求不断增长的情况下。
未来的浮点计算硬件设计将更加注重能效,尤其是在数据中心和HPC环境中,开发低功耗FPU和新型架构以减少浮点运算的能量消耗将是发展的重点。