ARM SVE 从左到右与树减少
ARM SVE Left-to-right vs. tree reduction
我目前正在移植一些应用程序以使用 ARM SVE 功能以及 ARM C 语言扩展中为 SVE 定义的内在函数。
在查看文档时,我遇到了两个函数,它们使用缩减法对浮点向量的元素求和。那就是使用从左到右和基于树的缩减。
float64_t svadda[_f64](svbool_t pg, float64_t initial, svfloat64_t op);
float64_t svaddv[_f64](svbool_t pg, svfloat64_t op);
文档:
These functions (ADDV) sum all active elements of a floating-point vector. They use a tree-based rather than left-to-right reduction, so the result might not be the same as that produced by ADDA."
为什么基于树的缩减不同于从左到右的缩减?他们的意思是因为舍入错误还是我遗漏了什么?
是的,由于舍入临时值,浮点数学不是很相关,因此执行操作的顺序很重要。
您可能需要严格按照从左到右的顺序来准确实现正确的运算顺序,否则通常您会通过将高半部分提取到另一个向量然后垂直添加到第一个向量来进行 hsum。然后重复这种缩小直到你缩小到一个元素。
我目前正在移植一些应用程序以使用 ARM SVE 功能以及 ARM C 语言扩展中为 SVE 定义的内在函数。
在查看文档时,我遇到了两个函数,它们使用缩减法对浮点向量的元素求和。那就是使用从左到右和基于树的缩减。
float64_t svadda[_f64](svbool_t pg, float64_t initial, svfloat64_t op);
float64_t svaddv[_f64](svbool_t pg, svfloat64_t op);
文档:
These functions (ADDV) sum all active elements of a floating-point vector. They use a tree-based rather than left-to-right reduction, so the result might not be the same as that produced by ADDA."
为什么基于树的缩减不同于从左到右的缩减?他们的意思是因为舍入错误还是我遗漏了什么?
是的,由于舍入临时值,浮点数学不是很相关,因此执行操作的顺序很重要。
您可能需要严格按照从左到右的顺序来准确实现正确的运算顺序,否则通常您会通过将高半部分提取到另一个向量然后垂直添加到第一个向量来进行 hsum。然后重复这种缩小直到你缩小到一个元素。