并行数值方法精度、收敛性和可重复性的高效求和算法
如今,并行计算在工程和科学等多个应用领域无处不在。这些计算依赖于IEEE754标准规定的浮点运算。在这种情况下,计算中最基础的操作之一就是一系列数字的求和。然而,在浮点运算中,这种求和容易产生许多数值误差。为了解决这个问题,研究人员提出了一种新的并行算法,用于对一系列浮点数进行求和。该算法能够轻松随着处理器数量的增加而扩展,其核心思路是先对具有相同指数的数字进行相加。
1. 引言
科学计算严重依赖于IEEE754标准定义的浮点运算,因此容易受到舍入误差的影响,而且随着并行性的增加,这个问题往往会更加严重。在浮点计算中,除了舍入误差外,计算顺序也会影响结果的准确性。
例如,在IEEE754单精度(Binary32)下计算三个值x、y和z的和,其中x = 10⁹,y = -10⁹,z = 10⁻⁹:
- ((x + y) + z) = ((10⁹ - 10⁹) + 10⁻⁹) = 10⁻⁹
- (x + (y + z)) = (10⁹ + (-10⁹ + 10⁻⁹)) = 0
这两个等式表明,对于相同的数学表达式(三个操作数的和),不同的计算顺序会产生不同的结果。实际上,文献中存在许多求和算法,一些基于补偿求和方法,使用或不使用无误差变换来计算每次累加引入的误差;另一些则通过操作浮点数的指数和/或尾数,在开始计算前对数据进行拆分。
研究人员提出的新算法仅在工作精度内进行计算,只需要访问值的指数。该算法的复杂度与元素数量呈线性关系,与朴素求和算法相同。本文的主要贡献在于展示该算法通过提高数值精度,同时改善了并行执行时间、计算的可重复性和收敛性:
1.