5

我正在使用 XCode 在 OS X Mountain Lion 上使用 C++ 进行开发,以便在本地机器上运行。我遇到了与非正规数相关的性能问题,我希望设置 FTZ 标志,以便将它们刷新为零。(我已经检查过异常确实是问题所在,在我的情况下将它们刷新为零不会导致准确性问题。)但是,我找不到任何关于我应该如何在 XCode 中实际实现这一点的信息。我可以在构建设置中更改它吗?或者我应该在某处输入一些代码?任何帮助将非常感激。

4

1 回答 1

6

如果我正确理解“/usr/include/fenv.h”中的注释,

#include <fenv.h>
fesetenv(FE_DFL_DISABLE_SSE_DENORMS_ENV);

应该做你想做的。

    FE_DFL_DISABLE_SSE_DENORMS_ENV

    指向修改了默认浮点状态的 fenv_t 对象的指针
    设置 SSE 状态/控制寄存器中的 DAZ 和 FZ 位。使用时
    在这种环境下,基于 SSE 的计算(其中
    通常应该是所有单精度和双精度标量浮点
    计算,所有 SSE/SSE2/SSE3 计算)将被视为零。
    非正规的计算结果也将被截断为零。

设置此选项可减少程序的运行时间,为什么将 0.1f 更改为 0 会使性能降低 10 倍?(@Mysticial 在他的评论中给出的链接)从 27 秒到 0.3 秒(MacBook Pro,2.5 GHz Intel Core 2 Duo)。

于 2013-05-25T09:24:46.840 回答