首页 > 解决方案 > 用于并行归约的浮点相关数值稳定性问题

问题描述

我一直在查看一些与浮点求和和相关准确性问题相关的在线资源。例如: https ://devtalk.nvidia.com/default/topic/1044661/cuda-programming-and-performance/how-to-improve-float-array-summation-precision-and-stability-/

https://hal.archives-ouvertes.fr/hal-00949355v4/document

他们中的大多数人建议在处理任何现代硬件的浮点求和时使用某种形式的手动干预。例如 (1) 使用 Kahan 算法进行浮点求和,或 (2) 对更接近的幅度数进行排序和求和等。这些细微差别是否由 MPI_AllReduce 或 OpenMP 缩减内核处理?

标签: mpiopenmpopenmpi

解决方案


仅针对 OpenMP 而言:该标准没有说明应用归约操作的顺序,实际上,在每次执行代码时,它甚至会有所不同。(一些 OpenMP 运行时,例如 LLVM/Intel 运行时实现了确定性缩减*,但仅保证具有相同线程数的运行之间的确定性)。

如果你想排序,或者以其他方式执行归约,你需要自己实现它......


推荐阅读