【问题标题】:What is the worst case accuracy for dot product?点积的最坏情况精度是多少?
【发布时间】:2014-07-17 05:58:30
【问题描述】:

假设处理器只有符合 IEEE-754 的“fadd”和“fmul”操作(没有“dot”或“fma”指令)。点积运算的简单实现将达到的最坏情况精度是多少。例如,对于长度为 3 的向量:

dot(vec_a, vec_b) = vec_a.x*vec_b.x + vec_a.y*vec_b.y + vec_a.z*vec_b.z

这是我的分析,但我不确定它是否正确: 对于长度为 N 的向量,有 N 次乘法和 N-1 次加法,产生 2N-1 次浮点运算。在最坏的情况下,对于这些操作中的每一个,表示对于准确结果来说都太小了,因此中间结果将被四舍五入。每个舍入加起来 0.5 ULP 误差。那么最大误差将是 (2N-1)*0.5 = N-1/2 ULP?

【问题讨论】:

  • 您是否在求和之前对产品向量进行排序,使用例如卡汉求和,还是直接求和?求和的方式会影响该步骤中最坏情况的错误。
  • 产品是按元素顺序任意计算的。不能用运行时间换取准确性

标签: floating-point floating-accuracy ieee-754


【解决方案1】:

与许多 FP 误差分析一样,误差在很大程度上取决于输入的最大幅度。在这种情况下,粗略的错误界限是2 * FLT_EPS * dot(abs(vec_a), abs(vec_b)),其中abs 表示向量的元素绝对值。

【讨论】:

  • 你能问一下为什么上面的表达式是一个上限吗?
  • 详细的证明可以在 Nicholas Higham 的数值算法的准确性和稳定性中找到。简而言之,点积是三个“深”的 FP 运算,并且涉及到绝对点积的数量级的加数。
  • (注意:这意味着常数因子可以从 2 收紧到略大于 1.5。不过,我倾向于将我的 FP 误差界常数因子四舍五入,以确保边界计算本身是'不受有问题的舍入。)
【解决方案2】:

您的推理不适用于加法:如果 ab 已经不准确 0.5 ULP 并且 a 接近 -b,那么 a + b 的相对准确度可以是 terrible ,比 1.5 ULP 差很多。事实上,如果没有关于您正在计算其点积的向量的更多信息,就无法保证结果的相对准确性。

当只有乘法时,你的推理是可以的,但它忽略了复合错误。

考虑等式: (a + ea)(b + eb) = ab + aeb + be a + eaeb.

如果您假设 a 和 b 都介于 1 和 2 之间,则将已经精确到 0.5 ULP 的两个结果相乘后的总相对误差只能粗略地估计为 1 ULP,并且这仍然忽略了错误项 eaeb 和乘法本身的错误。使浮点乘法结果的总相对误差约为 1.5 ULP,这只是一个粗略的平均值,而不是一个合理的最大值。

这些colleagues of mine 已经形式化并展示了双精度浮点点积的准确性概念。他们的结果的英文翻译是,如果每个向量分量都以1.0 为界,那么点积的最终结果精确到 NMAX * B,其中 NMAX 是向量的维数,B 是一个常数,取决于在 NMAX 上。链接页面上提供了一些值:

NMAX 10 100 1000 B 0x1.1p-50 0x1.02p-47 0x1.004p-44

在他们的结果中,您可以将1.0 替换为任何2 的幂 P 足够低以确保没有溢出,并且点积的绝对误差变为 NMAX * B * P 2。循环不变量分别变为:

@ loop invariant \abs(exact_scalar_product(x,y,i)) <= i * P * P;
@ loop invariant \abs(p - exact_scalar_product(x,y,i)) <= i * B * P * P;

【讨论】:

  • 感谢您指出我的错误假设。什么是描述最坏情况错误的好方法?可能与 vec_a 和 vec_b 中的最大元素相关的错误?
  • @zr。关于向量,您有什么可以说的吗?一个向量的每个分量总是与另一个向量的对应分量具有相同的符号(例如,如果被操纵的所有向量的所有分量都是正的,这意味着这一点)?如果没有任何附加信息,我认为很难将点积这样复杂运算的总误差描述为单个相对误差统计量或绝对误差统计量。
  • @PC 输入值没有限制。是否至少有一些上限可用于健全性测试?编辑:我会看看论文,谢谢!
  • 在数值分析中用于点积的通常误差界是涉及向量范数的后向误差界(这比 Sneftel 引用的更准确的界,或者更准确的界帕斯卡在这里给出的,但对于大多数数学目的来说完全足够了)。
  • 相对误差可以任意大,但绝对误差会以之前计算中出现的最大绝对误差之和为界。如果预期结果介于 -100 和 +100 之间,并且需要精确到 +/- 0.1 个单位,并且如果最坏情况下的绝对误差总和为 0.037,那么幼稚的方法就可以了。如果结果为 0.0001274,则相对误差可能很大,但如果 -0.05 和 +0.05 之间的所有结果都被认为是等价的,那就没关系了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 2016-12-06
  • 2010-12-28
相关资源
最近更新 更多