我正在开发一个运行时速度比精度更重要的应用程序。数字运算涉及浮点运算,我担心 double
和/或 long double
在软件中处理而不是在处理器上本地处理(这在处理器上总是正确的) 32 位拱门对吗?)。我想有条件地使用硬件支持的最高精度进行编译,但我还没有找到一种快速简便的方法来检测软件仿真。我在 GNU/Linux 上使用 g++,我不关心可移植性。它在 x86 arch 上运行,所以我假设 float
始终是 native 的。
最佳答案
现代 x86 上的浮点单元 (FPU) 本身是 double 的(事实上,它甚至比 double 更大),而不是 float (32 位中的“32”描述的是整数寄存器宽度,而不是 float 宽度)。但是,如果您的代码正在利用矢量化 SSE 指令(并行执行 4 个单运算或 2 个双运算),则情况并非如此。
如果不是,那么通过将您的应用程序从 float 切换到 double 来实现的主要速度将体现在增加的内存带宽中。
关于c++ - 检测浮点软件仿真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5914484/