gpt4 book ai didi

c++ - 在 C++ 中使用不同的 IEEE 浮点舍入模式

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:31 25 4
gpt4 key购买 nike

不幸的是我,我必须确保在 GPU 和 CPU 上获得相同的浮点结果。好的,我知道 IEEE 已经照顾我并提供了一个很好的标准来遵守几个舍入选项;并且 CUDA 部分被整理出来(有不同舍入模式的内在函数),所以这只是动机。

但是在主机端 C++ 代码中——我如何在特定的舍入模式下执行浮点运算(我的意思是在特定的语句中,而不是在我的翻译单元中)?是否有在引擎盖下使用程序集的包装函数?是否有一组具有不同舍入模式的 float 代理类?

我也在问关于翻译单元级别的相同问题。编译翻译单元时,如何使编译器(gcc/clang/MSVC)默认为某种舍入模式?

最佳答案

在@AndreasPapadopoulos 的引导下,它看起来像 there is an official way更改舍入模式:

int fesetround(int round)
int fegetround()

但有几个注意事项:

  1. 这是 C++11,而不是 C++98(尽管实际上您可能只使用系统的 <fenv.h>,即 C99。
  2. 它需要通过 #pragma 与编译器通信的
  3. 这种切换可能会很慢。

我不确定它在实践中的使用有多广泛(以及是否有更常用的围绕它的更好的抽象)。

关于c++ - 在 C++ 中使用不同的 IEEE 浮点舍入模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39202713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com