0

我目前正在移植一些应用程序以使用 ARM SVE 功能和 SVE 的 ARM C 语言扩展中定义的内在函数。

在检查文档后,我遇到了两个函数来使用归约来总结浮点向量的元素。那是使用从左到右和基于树的减少。

float64_t svadda[_f64](svbool_t pg, float64_t initial, svfloat64_t op);

float64_t svaddv[_f64](svbool_t pg, svfloat64_t op);

文档:

这些函数 (ADDV) 对浮点向量的所有活动元素求和。他们使用基于树而不是从左到右的缩减,因此结果可能与 ADDA 产生的结果不同。”

为什么基于树的归约不同于从左到右的归约?他们的意思是因为舍入错误还是我遗漏了什么?

4

1 回答 1

1

是的,由于四舍五入的临时性,浮点数学的关联性并不好,因此执行操作的顺序很重要。

您可能需要严格从左到右的顺序来准确地实现正确的操作顺序,否则通常您会通过将高半部分提取到另一个向量然后垂直添加到第一个向量来进行 hsum。然后重复这个缩小,直到你只剩下一个元素。

于 2019-01-18T09:42:38.543 回答