mpi - 用于并行归约的浮点相关数值稳定性问题
问题描述
我一直在查看一些与浮点求和和相关准确性问题相关的在线资源。例如: 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 缩减内核处理?
解决方案
仅针对 OpenMP 而言:该标准没有说明应用归约操作的顺序,实际上,在每次执行代码时,它甚至会有所不同。(一些 OpenMP 运行时,例如 LLVM/Intel 运行时实现了确定性缩减*,但仅保证具有相同线程数的运行之间的确定性)。
如果你想排序,或者以其他方式执行归约,你需要自己实现它......
- 有关详细信息,请参阅https://software.intel.com/en-us/cpp-compiler-developer-guide-and-reference-supported-environment-variables并搜索 KMP_DETERMINISTIC_REDUCTION。
推荐阅读
- android - 区域设置总是在 onCreate 后重置
- postgresql - PostgreSQL 未终止的带引号的标识符
- swift - Swift - 录制的视频镜像到前置摄像头 - 如何翻转?
- java - 打开任务管理器并使用 Java 代码处理其多个选项卡
- python - 无法选中复选框
- android - Android Room SQlite MVVM:在 var 中插入和捕获 PK 后返回 PK 以传递给其他活动
- javascript - 允许在 Puppeteer 中的所有站点上运行 Flash
- matplotlib - 以索引值作为标题设置 Matplotlib 图
- javascript - Javascript:使用证书的 API 调用
- android - 由于 Firebase 数据库实施,如何修复“清单合并错误”